數(shù)據(jù)庫課程設計--設計一個訂戶訂閱報刊的應用系統(tǒng)_第1頁
已閱讀1頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p><b>  數(shù)據(jù)庫課程設計</b></p><p>  班 級 軟件1001 </p><p>  學 號 </p><p>  姓 名 </p><p>  指導老師 </p><

2、p><b>  二零一二年 六 月</b></p><p><b>  一、引言</b></p><p><b>  1.目的</b></p><p>  課程設計為學生提供了一個既動手又動腦,獨立實踐的機會,將課本上的理論知識和實際有機的結(jié)合起來,鍛煉學生的分析解決實際問題的能力。提高學生適應

3、實際,實踐編程的能力。課程設計的目的:</p><p>  加深對數(shù)據(jù)庫系統(tǒng)、軟件工程、程序設計語言的理論知識的理解和應用水平;</p><p>  在理論和實驗教學基礎(chǔ)上進一步鞏固已學基本理論及應用知識并加以綜合提高;</p><p>  學會將知識應用于實際的方法,提高分析和解決問題的能力,增強動手能力;</p><p>  為畢業(yè)設計和

4、以后工作打下必要基礎(chǔ)。</p><p><b>  2.題目</b></p><p>  設計一個訂戶訂閱報刊的應用系統(tǒng)。</p><p><b>  處理要求</b></p><p>  接收并且處理訂戶的訂閱要求</p><p><b>  回答訂戶的查詢<

5、;/b></p><p><b>  統(tǒng)計報刊的訂閱情況</b></p><p><b>  信息要求</b></p><p><b>  訂單</b></p><p><b>  訂戶</b></p><p><b&g

6、t;  報刊目錄</b></p><p><b>  投遞卡</b></p><p><b>  具體數(shù)據(jù)參見附表</b></p><p><b>  數(shù)據(jù)語義:</b></p><p>  一個客戶可以訂閱多份報刊,一種報刊可以為多個客戶訂閱(客戶-訂閱-報刊,m

7、:n)</p><p>  一種報刊可以投遞給多個客戶,一個客戶一次可以接受多種報刊的投遞(報刊-投遞-客戶,m:n)</p><p>  系統(tǒng)功能包括:(在查詢和管理中各選一題)</p><p>  訂戶管理:訂戶的增加、修改、刪除;</p><p>  報刊目錄管理:報刊目錄的增加、刪除、修改;</p><p> 

8、 訂單管理:訂單的增加、刪除、修改;</p><p>  查詢訂單:按訂戶查詢訂單的詳細情況;</p><p>  統(tǒng)計查詢:統(tǒng)計報刊的訂閱數(shù)量及金額。</p><p><b>  3.要求</b></p><p>  運用數(shù)據(jù)庫基本理論與應用知識,在微機RDBMS(SQL Server)的環(huán)境上建立一個數(shù)據(jù)庫應用系統(tǒng)。

9、要求把現(xiàn)實世界的事物及事物之間的復雜關(guān)系抽象為信息世界的實體及實體之間聯(lián)系的信息模型,再轉(zhuǎn)換為機器世界的數(shù)據(jù)模型和數(shù)據(jù)文件,并對數(shù)據(jù)文件實施檢索、更新和控制等操作。 </p><p>  用E-R圖設計選定題目的信息模型;</p><p>  設計相應的關(guān)系模型,確定數(shù)據(jù)庫結(jié)構(gòu);</p><p>  分析關(guān)系模式各屬于第幾范式,闡明理由;</p>&l

10、t;p>  設計應用系統(tǒng)的系統(tǒng)結(jié)構(gòu)圖,確定系統(tǒng)功能;</p><p>  通過設計關(guān)系的主碼約束、外碼約束和使用CHECK實現(xiàn)完整性控制;</p><p>  為參照關(guān)系設計插入、刪除、修改觸發(fā)器;</p><p>  實現(xiàn)應用程序設計、編程、優(yōu)化功能;</p><p>  對系統(tǒng)的各個應用程序進行集成和調(diào)試,進一步優(yōu)化系統(tǒng)功能、改善系

11、統(tǒng)用戶界面完成實驗內(nèi)容所指定的各項要求;</p><p>  分析遇到的問題,總結(jié)并寫出課程設計報告;</p><p><b>  自我評價</b></p><p><b>  4.開發(fā)工具及技術(shù)</b></p><p>  Mmicrosoft visual C++ 6.0</p>

12、<p>  Microsoft SQL server 2005</p><p><b>  系統(tǒng)的功能分析圖:</b></p><p><b>  程序流程:</b></p><p>  本次實驗的報刊預訂系統(tǒng)總體上可以分為5個功能模塊:訂戶管理,報刊目錄管理,訂單管理,查詢預訂,統(tǒng)計查詢。其中每一個管理模塊包

13、括了三個數(shù)據(jù)庫的操作,分別是增加 刪除 更改;查詢分為單用戶查詢和統(tǒng)計查詢。用戶可以根據(jù)功能選擇來按照自己的需要進行操作。</p><p>  概念結(jié)構(gòu)設計(E-R)圖</p><p>  說明:一個客戶可以訂閱多份報刊,一種報刊可以為多個客戶訂閱(客戶-訂閱-報刊,m:n)</p><p>  一種報刊可以投遞給多個客戶,一個客戶一次可以接受多種報刊的投遞(報刊-

14、投遞-客戶,m:n)</p><p><b>  邏輯設計階段</b></p><p>  訂戶(編號,姓名,住址)</p><p>  報刊目錄(代號,名稱,刊期,單價)</p><p>  訂單(訂戶號,報刊代號,日期,起定期,終定期,份數(shù))</p><p>  投遞卡(訂戶號,報刊代號,期號

15、,份數(shù))</p><p>  在關(guān)系模型中,候選碼都用下劃線和加粗標出。外碼用斜體標出。</p><p>  其中訂單和投遞卡是訂戶表和報刊目錄的兩個聯(lián)系,都是多對多聯(lián)系。一個用戶可以訂閱不同報刊,同一種報刊可以被不同用戶訂閱。</p><p>  在訂戶關(guān)系中,訂戶號是主碼,非主屬性對碼完全依賴,不存在傳遞依賴,決定因素是碼,所以訂戶關(guān)系屬于BCNF范式。<

16、/p><p>  報刊目錄表中,報刊代號是主碼,非主屬性對碼完全依賴,不存在傳遞依賴,決定因素是碼,所以報刊目錄關(guān)系屬于BCNF范式。</p><p>  訂單表中,訂戶號,日期,報刊代號共同組成其候選碼,一個用戶可以在不同時間訂閱同一本報刊,而其中,訂戶號和報刊代號均是其外碼。非主屬性對碼完全依賴,不存在傳遞依賴,決定因素都包含碼,所以訂單冠以關(guān)系屬于BCNF范式。</p>&

17、lt;p>  投遞卡表中,訂戶號,報刊目錄,期號共同組成其候選碼。一個用戶可以訂閱同意報刊的不同期報刊。而其中訂戶號和報刊代號均是其外碼。非主屬性對碼完全依賴,不存在傳遞依賴,決定因素是碼,所以投遞卡關(guān)系屬于BCNF范式。</p><p><b>  3.完整性設計</b></p><p>  在四個關(guān)系中都保持了實體完整性,主碼的唯一性。</p>

18、<p>  外碼沒有采用級聯(lián)刪除,保證了其參照完整新</p><p>  CHECK約束,限制了份數(shù)QTY必須大于等于0,價錢必須大于等于0; </p><p><b>  開發(fā)工具簡單說明:</b></p><p>  本次的實驗是通過ODBC連接數(shù)據(jù)庫,通過對數(shù)據(jù)庫的應用程序的操作實現(xiàn)對數(shù)據(jù)源內(nèi)部的數(shù)據(jù)的查詢和更新,大大提高了應

19、用系統(tǒng)與數(shù)據(jù)庫平臺的獨立性,使用ODBC使得應用系統(tǒng)的移植變得更加容易,當一個應用系統(tǒng)從一個數(shù)據(jù)庫平臺移到另一個數(shù)據(jù)庫平臺只要更換ODBC的RDBMS的驅(qū)動程序就可以。</p><p>  ODBC工作流程圖如下</p><p><b>  有</b></p><p><b>  無</b></p><

20、p>  報刊訂閱數(shù)據(jù)庫數(shù)據(jù)關(guān)系圖如下:</p><p>  系統(tǒng)主要功能實現(xiàn)(控制臺程序截圖):</p><p><b>  修改訂戶</b></p><p><b>  2.增加訂戶</b></p><p><b>  3.增加報刊目錄</b></p>&

21、lt;p><b>  5.統(tǒng)計查詢</b></p><p><b>  6.按用戶查詢</b></p><p><b>  7.修改報刊目錄</b></p><p><b>  程序代碼:</b></p><p>  #include <std

22、lib.h></p><p>  #include <stdio.h></p><p>  #include <windows.h></p><p>  #include <sql.h> // This is the the main include for ODBC Core functions.

23、</p><p>  #include <sqlext.h> // This is the include for applications using the Microsoft SQL Extensions</p><p>  #include <sqltypes.h> // This file defines the types used

24、 in ODBC</p><p>  #include <sqlucode.h> // This is the unicode include for ODBC Core functions</p><p>  #include <odbcinst.h> // This is the application include file for the SQL

25、Server driver specific defines.</p><p>  #include <iostream></p><p>  #include <string></p><p>  #include <tchar.h></p><p>  using namespace std;</

26、p><p>  #define CNO_LEN 10</p><p>  #define NMNO_LEN 10</p><p>  #define ISSUE_LEN 10</p><p>  #define QTY_LEN 4</p><p>  #define DATE_LEN 10</p><p

27、>  #define START_LEN 10</p><p>  #define TERM_LEN 10</p><p>  #define TITLE_LEN 20</p><p>  #define PERIOD_LEN 10</p><p>  #define PRICE_LEN 8</p><p>  

28、#define NAME_LEN 10</p><p>  #define ADDR_LEN 20</p><p>  void back(){}</p><p>  int main()</p><p><b>  {</b></p><p>  /*Step 1 定義句柄括和變量*/</

29、p><p>  //以wang開頭的表示的是連接wangjian的變量</p><p>  SQLHENV dinghenv; //環(huán)境句柄括</p><p>  SQLHDBC dinghdbc; //連接句柄括</p><p>  SQLHSTMT dinghstmt; //語句句柄括<

30、;/p><p>  SQLRETURN ret;</p><p>  SQLDOUBLE PRICE;</p><p>  SQLINTEGER QTY;</p><p>  SQLCHAR CNO[CNO_LEN],NMNO[NMNO_LEN],ISSUE[ISSUE_LEN],DATE1[DATE_LEN],START[START_LE

31、N],TERM[TERM_LEN],</p><p>  TITLE[TITLE_LEN],PERIOD[PERIOD_LEN],NAME[NAME_LEN],ADDR[ADDR_LEN];</p><p>  SQLINTEGER cbCNO=SQL_NTS,cbNMNO=SQL_NTS,cbISSUE=SQL_NTS,cbQTY=0,cbDATE1=SQL_NTS,cbSTART=SQ

32、L_NTS,cbTERM=SQL_NTS,</p><p>  cbTITLE=SQL_NTS,cbPERIOD=SQL_NTS,cbNAME=SQL_NTS,cbADDR=SQL_NTS;</p><p>  SQLINTEGER cbPRICE=0;</p><p>  int w,x,y,m,n;</p><p>  /*Step 2

33、初始化環(huán)境3*/</p><p>  loop:ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&dinghenv);</p><p>  ret=SQLSetEnvAttr(dinghenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);</p><p>  

34、/*Step 3 建立連接*/</p><p>  ret=SQLAllocHandle(SQL_HANDLE_DBC,dinghenv,&dinghdbc);</p><p>  ret=SQLConnect(dinghdbc,(SQLWCHAR*)(_T("SQLServe")),SQL_NTS,(SQLWCHAR*)(_T("sa"))

35、,SQL_NTS,(SQLWCHAR*)(_T("123")),SQL_NTS);</p><p>  if(!SQL_SUCCEEDED(ret)) </p><p>  return -1;</p><p>  /*Step 4 初始化語句句柄括*/</p><p>  ret=SQLAllocHandle(SQL_H

36、ANDLE_STMT,dinghdbc,&dinghstmt);</p><p>  ret=SQLSetStmtAttr(dinghstmt,SQL_ATTR_ROW_BIND_TYPE,(SQLPOINTER)SQL_BIND_BY_COLUMN,SQL_IS_INTEGER);</p><p>  /*Step 5 執(zhí)行語句*/</p><p>  c

37、out<<"++++++++++++++++++++++++++++++訂戶訂閱報刊的應用系統(tǒng)+++++++++++++++++++++++++++"<<endl;</p><p>  cout<<"輸入需要操作的序號?"<<endl;</p><p>  cout<<"1、訂戶管

38、理<<endl;</p><p>  cout<<"2、報刊目錄管理<<endl;</p><p>  cout<<"3、訂單管理<<endl;</p><p>  cout<<"4、查詢訂單<<endl;</p><p>  c

39、out<<"5、統(tǒng)計查詢"<<endl;</p><p>  cout<<"6、退出"<<endl;</p><p><b>  cin>>w;</b></p><p><b>  switch(w)</b></p&g

40、t;<p><b>  {</b></p><p>  case 1:w=1; /*訂?戶§管ü理え?/</p><p><b>  {</b></p><p>  loop1:cout<<"+++++++++++++++++++++++++++++++訂戶管

41、理++++++++++++++++++++++++++++++++++"<<endl;</p><p>  cout<<"1、增加訂戶"<<endl;</p><p>  cout<<"2、修改訂戶"<<endl;</p><p>  cout<<

42、;"3、刪除訂戶"<<endl;</p><p>  cout<<"4、返回上級"<<endl;</p><p><b>  cin>>x;</b></p><p><b>  switch(x)</b></p><

43、p><b>  {</b></p><p>  case 1:x=1; /*增?加ó訂?戶§*/</p><p><b>  {</b></p><p>  SQLWCHAR CNO1[CNO_LEN],NAME1[NAME_LEN],ADDR1[ADDR_LEN];</p><

44、;p>  ret=SQLPrepare(dinghstmt,(SQLWCHAR*)(_T("INSERT INTO CUSTOMER(CNO,NAME,ADDR) VALUES(?,?,?)")), SQL_NTS);</p><p>  /*輸?入?數(shù)簓據(jù)Y*/</p><p>  cout<<"輸入插入數(shù)據(jù)(NO,NAME,ADDR)?

45、"<<endl;</p><p>  scanf("%s",CNO1);//cin>>CNO1;</p><p>  scanf("%s",NAME1); //cin>>NAME1;</p><p>  scanf("%s",ADD

46、R1); //cin>>ADDR1;</p><p>  if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)</p><p><b>  {</b></p><p>  cbCNO=SQL_NTS;cbNAME=SQL

47、_NTS;cbADDR=SQL_NTS;</p><p>  ret=SQLBindParameter(dinghstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,CNO_LEN,0,CNO1,0,&cbCNO);</p><p>  ret=SQLBindParameter(dinghstmt,2,SQL_PARAM_INPUT,SQL_C_C

48、HAR,SQL_CHAR,NAME_LEN,0,NAME1,0,&cbNAME);</p><p>  ret=SQLBindParameter(dinghstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,ADDR_LEN,0,ADDR1,0,&cbADDR);</p><p><b>  }</b></p&g

49、t;<p>  /*Step 6 處理結(jié)果集并執(zhí)行預編譯后的語句*/</p><p>  ret=SQLExecute(dinghstmt);</p><p><b>  }</b></p><p>  goto loop1;</p><p>  case 2:x=2;/*修改訂戶*/</p>

50、<p><b>  {</b></p><p>  SQLWCHAR CNO2[CNO_LEN],NAME2[NAME_LEN],ADDR2[ADDR_LEN];</p><p>  ret=SQLPrepare(dinghstmt,(SQLWCHAR*)(_T("UPDATE CUSTOMER SET NAME=?, ADDR=? WHER

51、E CNO=?")), SQL_NTS);</p><p><b>  /*輸入數(shù)據(jù)*/</b></p><p>  cout<<"輸入修改數(shù)據(jù)(NO,NAME,ADDR)?"<<endl;</p><p>  scanf("%s",CNO2);

52、 //cin>>CNO2;</p><p>  scanf("%s",NAME2); //cin>>NAME2;</p><p>  scanf("%s",ADDR2); //cin>>ADDR2;</p><p>  if(ret

53、==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)</p><p><b>  {</b></p><p>  cbCNO=SQL_NTS;cbNAME=SQL_NTS;cbADDR=SQL_NTS;</p><p>  ret=SQLBindParameter(dinghstmt,1,SQL_PARAM_IN

54、PUT,SQL_C_CHAR,SQL_CHAR,NAME_LEN,0,NAME2,0,&cbNAME);</p><p>  ret=SQLBindParameter(dinghstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,ADDR_LEN,0,ADDR2,0,&cbADDR);</p><p>  ret=SQLBindParame

55、ter(dinghstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,CNO_LEN,0,CNO2,0,&cbCNO);</p><p><b>  }</b></p><p>  /*Step 6 處理結(jié)果集并執(zhí)行預編譯后的語句*/</p><p>  ret=SQLExecute(dinghstmt

56、);</p><p><b>  }</b></p><p>  goto loop1;</p><p>  case 3:x=3;/*刪除訂戶*/</p><p><b>  {</b></p><p>  SQLCHAR CNO3[CNO_LEN];</p>

57、<p>  ret=SQLPrepare(dinghstmt,(SQLWCHAR*)(_T("DELETE FROM CUSTOMER WHERE CNO=?")), SQL_NTS);</p><p><b>  /*輸入數(shù)據(jù)*/</b></p><p>  cout<<"輸入要刪除的訂戶號"<&

58、lt;endl;</p><p>  cin>>CNO3;</p><p>  if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)</p><p><b>  {</b></p><p>  cbCNO=SQL_NTS;</p><p> 

59、 ret=SQLBindParameter(dinghstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,CNO_LEN,0,CNO3,0,&cbCNO);</p><p><b>  }</b></p><p>  ret=SQLExecute(dinghstmt);</p><p><b>

60、;  }</b></p><p>  goto loop1;</p><p>  case 4:x=4;</p><p>  goto loop;</p><p><b>  }</b></p><p><b>  }</b></p><p&g

61、t;  case 2:w=2;/*報刊目錄管理*/</p><p><b>  {</b></p><p>  loop2 :cout<<"+++++++++++++++++++++++++++++++++++報刊目錄管理+++++++++++++++++++++++++++++++"<<endl;</p>&

62、lt;p>  cout<<"1、增加報刊目錄"<<endl;</p><p>  cout<<"2、修改報刊目錄?"<<endl;</p><p>  cout<<"3、刪除報刊目錄"<<endl;</p><p>  cout&

63、lt;<"4、返回上級"<<endl;</p><p><b>  cin>>y;</b></p><p><b>  switch(y)</b></p><p><b>  {</b></p><p>  case 1:y=1

64、; /*增加報刊目錄*/</p><p><b>  {</b></p><p>  SQLWCHAR NMNO1[NMNO_LEN],TITLE1[TITLE_LEN],PERIOD1[PERIOD_LEN];</p><p>  SQLDOUBLE PRICE1;</p><p>  ret=SQLPrepare(d

65、inghstmt,(SQLWCHAR*)(_T("INSERT INTO NMTABLE(NMNO,TITLE,PERIOD,PRICE) VALUES(?,?,?,?)")), SQL_NTS);</p><p><b>  /*輸入數(shù)據(jù)*/</b></p><p>  cout<<"輸入插入數(shù)據(jù)(MNO,TITLE,PE

66、RIOD,PRICE)?"<<endl;</p><p>  scanf("%s",NMNO1); //cin>>NMNO1;</p><p>  scanf("%s",TITLE1); //cin>>TITLE1;</p>&

67、lt;p>  scanf("%s",PERIOD1); //cin>>PERIOD1;</p><p>  cin>>PRICE1;</p><p>  if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)</p><p><b>

68、  {</b></p><p>  cbNMNO=SQL_NTS;cbTITLE=SQL_NTS;cbPERIOD=SQL_NTS;cbPRICE=0;</p><p>  ret=SQLBindParameter(dinghstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,NMNO_LEN,0,NMNO1,0,&cbNMNO);&l

69、t;/p><p>  ret=SQLBindParameter(dinghstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,TITLE_LEN,0,TITLE1,0,&cbTITLE);</p><p>  ret=SQLBindParameter(dinghstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,PER

70、IOD_LEN,0,PERIOD1,0,&cbPERIOD);</p><p>  ret=SQLBindParameter(dinghstmt,4,SQL_PARAM_INPUT,SQL_C_DOUBLE,SQL_DOUBLE,0,0,&PRICE1,0,&cbPRICE);</p><p><b>  }</b></p>&l

71、t;p>  /*Step 6 處理結(jié)果集并執(zhí)行預編譯后的語句*/</p><p>  ret=SQLExecute(dinghstmt);</p><p><b>  }</b></p><p>  goto loop2;</p><p>  case 2:y=2;/*修改報刊目錄*/</p><

72、;p><b>  {</b></p><p>  SQLCHAR NMNO2[NMNO_LEN],TITLE2[TITLE_LEN],PERIOD2[PERIOD_LEN];</p><p>  SQLDOUBLE PRICE2;</p><p>  ret=SQLPrepare(dinghstmt,(SQLWCHAR*)(_T(&quo

73、t;UPDATE NMTABLE SET TITLE=?,PERIOD=?,PRICE=? WHERE NMNO=?")), SQL_NTS);</p><p><b>  /*輸入數(shù)據(jù)*/</b></p><p>  cout<<"輸入修改數(shù)據(jù)(MNO,TITLE,PERIOD,PRICE)?"<<endl;

74、</p><p>  cin>>NMNO2;</p><p>  cin>>TITLE2;</p><p>  cin>>PERIOD2;</p><p>  cin>>PRICE2;</p><p>  if(ret==SQL_SUCCESS||ret==SQL_SUC

75、CESS_WITH_INFO)</p><p><b>  {</b></p><p>  cbNMNO=SQL_NTS;cbTITLE=SQL_NTS;cbPERIOD=SQL_NTS;cbPRICE=SQL_NTS;</p><p>  ret=SQLBindParameter(dinghstmt,1,SQL_PARAM_INPUT,SQL

76、_C_CHAR,SQL_CHAR,TITLE_LEN,0,TITLE2,0,&cbTITLE);</p><p>  ret=SQLBindParameter(dinghstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,PERIOD_LEN,0,PERIOD2,0,&cbPERIOD);</p><p>  ret=SQLBindPara

77、meter(dinghstmt,3,SQL_PARAM_INPUT,SQL_C_DOUBLE,SQL_DOUBLE,0,0,&PRICE2,0,&cbPRICE);</p><p>  ret=SQLBindParameter(dinghstmt,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,NMNO_LEN,0,NMNO2,0,&cbNMNO);</p

78、><p><b>  }</b></p><p>  /*Step 6 處理結(jié)果集并執(zhí)行預編譯后的語句*/</p><p>  ret=SQLExecute(dinghstmt);</p><p><b>  }</b></p><p>  goto loop2;</p&g

79、t;<p>  case 3:y=3;/*刪除報饋刊目錄*/</p><p><b>  {</b></p><p>  SQLCHAR NMNO3[NMNO_LEN];</p><p>  ret=SQLPrepare(dinghstmt,(SQLWCHAR*)(_T("DELETE FROM NMTABLE WHER

80、E NMNO=?")), SQL_NTS);</p><p>  /*輸?入?數(shù)簓據(jù)Y*/</p><p>  cout<<"輸入要刪除的報刊號?"<<endl;</p><p>  cin>>NMNO3;</p><p>  if(ret==SQL_SUCCESS||ret=

81、=SQL_SUCCESS_WITH_INFO)</p><p><b>  {</b></p><p>  cbCNO=SQL_NTS;</p><p>  ret=SQLBindParameter(dinghstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,NMNO_LEN,0,NMNO3,0,&c

82、bNMNO);</p><p><b>  }</b></p><p>  ret=SQLExecute(dinghstmt);</p><p><b>  }</b></p><p>  goto loop2;</p><p>  case 4:y=4;</p>

83、<p>  goto loop;</p><p><b>  }</b></p><p><b>  }</b></p><p>  case 3:w=3;/*訂單管理*/</p><p><b>  {</b></p><p>  loo

84、p3:cout<<"++++++++++++++++++++++++++++++++++++++++++訂單管理+++++++++++++++++++++++++++++++++++"<<endl;</p><p>  cout<<"1、增加訂單<<endl;</p><p>  cout<<&qu

85、ot;2、修改訂單<<endl;</p><p>  cout<<"3、刪除訂單<<endl;</p><p>  cout<<"4、返回上級"<<endl;</p><p><b>  cin>>m;</b></p><p

86、><b>  switch(m)</b></p><p><b>  {</b></p><p>  case 1:m=1; /*增加訂單*/</p><p><b>  {</b></p><p>  SQLCHAR CNO4[CNO_LEN],DATE4[DATE_L

87、EN],NMNO4[NMNO_LEN],START4[START_LEN],TERM4[TERM_LEN];</p><p>  SQLINTEGER QTY4;</p><p>  ret=SQLPrepare(dinghstmt,(SQLWCHAR*)(_T("INSERT INTO [dbo].[ORDER](CNO,DATE1,NMNO,START,TERM,QTY) V

88、ALUES(?,?,?,?,?,?)")), SQL_NTS);</p><p>  cout<<"輸入插入數(shù)據(jù)(CNO,DATE1,NMNO,START,TERM,QTY)?"<<endl;</p><p>  cin>>CNO4;</p><p>  cin>>DATE4;</

89、p><p>  cin>>NMNO4;</p><p>  cin>>START4;</p><p>  cin>>TERM4;</p><p>  cin>>QTY4;</p><p>  if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH

90、_INFO)</p><p><b>  {</b></p><p>  cbCNO=SQL_NTS;cbDATE1=SQL_NTS;cbNMNO=SQL_NTS;cbSTART=SQL_NTS;cbTERM=SQL_NTS;cbQTY=0;</p><p>  ret=SQLBindParameter(dinghstmt,1,SQL_PARA

91、M_INPUT,SQL_C_CHAR,SQL_CHAR,CNO_LEN,0,CNO4,0,&cbCNO);</p><p>  ret=SQLBindParameter(dinghstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,DATE_LEN,0,DATE4,0,&cbDATE1);</p><p>  ret=SQLBindPara

92、meter(dinghstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,NMNO_LEN,0,NMNO4,0,&cbNMNO);</p><p>  ret=SQLBindParameter(dinghstmt,4,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,START_LEN,0,START4,0,&cbSTART);</p&

93、gt;<p>  ret=SQLBindParameter(dinghstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,TERM_LEN,0,TERM4,0,&cbTERM);</p><p>  ret=SQLBindParameter(dinghstmt,6,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,0,0,&

94、;QTY4,0,&cbQTY);</p><p><b>  }</b></p><p>  /*Step 6 處理結(jié)果集并執(zhí)行預編譯后的語句*/</p><p>  ret=SQLExecute(dinghstmt);</p><p><b>  }</b></p><

95、p>  goto loop3;</p><p>  case 2:m=2;/*修改訂單*/</p><p><b>  {</b></p><p>  SQLCHAR CNO5[CNO_LEN],DATE5[DATE_LEN],NMNO5[NMNO_LEN],START5[START_LEN],TERM5[TERM_LEN];</p

96、><p>  SQLINTEGER QTY5;</p><p>  ret=SQLPrepare(dinghstmt,(SQLWCHAR*)(_T("UPDATE [dbo].[ORDER] SET DATE1=?,START=?,TERM=?,QTY=? WHERE CNO=? AND NMNO=?")), SQL_NTS);</p><p>

97、<b>  /*輸入數(shù)據(jù)*/</b></p><p>  cout<<"輸入修改數(shù)據(jù),CNO,DATE1,NMNO,START,TERM,QTY)?"<<endl;</p><p>  cin>>CNO5;</p><p>  cin>>DATE5;</p>&l

98、t;p>  cin>>NMNO5;</p><p>  cin>>START5;</p><p>  cin>>TERM5;</p><p>  cin>>QTY5;</p><p>  if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)<

99、;/p><p><b>  {</b></p><p>  cbCNO=SQL_NTS;cbDATE1=SQL_NTS;cbNMNO=SQL_NTS;cbSTART=SQL_NTS;cbTERM=SQL_NTS;cbQTY=0;</p><p>  ret=SQLBindParameter(dinghstmt,1,SQL_PARAM_INPUT,S

100、QL_C_CHAR,SQL_CHAR,DATE_LEN,0,DATE5,0,&cbDATE1);</p><p>  ret=SQLBindParameter(dinghstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,START_LEN,0,START5,0,&cbSTART);</p><p>  ret=SQLBindParamet

101、er(dinghstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,TERM_LEN,0,TERM5,0,&cbTERM);</p><p>  ret=SQLBindParameter(dinghstmt,4,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,0,0,&QTY5,0,&cbQTY);</p>&l

102、t;p>  ret=SQLBindParameter(dinghstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,CNO_LEN,0,CNO5,0,&cbCNO);</p><p>  ret=SQLBindParameter(dinghstmt,6,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,NMNO_LEN,0,NMNO5,0,&a

103、mp;cbNMNO);</p><p><b>  }</b></p><p>  /*Step 6 處理結(jié)果集并執(zhí)行預編譯后的語句*/</p><p>  ret=SQLExecute(dinghstmt);</p><p><b>  }</b></p><p>  go

104、to loop3;</p><p>  case 3:m=3;/*刪除訂單*/</p><p><b>  {</b></p><p>  SQLCHAR CNO6[CNO_LEN],NMNO6[NMNO_LEN];</p><p>  ret=SQLPrepare(dinghstmt,(SQLWCHAR*)(_T(&q

105、uot;DELETE FROM [dbo].[ORDER] WHERE CNO=? AND NMNO=?")), SQL_NTS);</p><p><b>  /*輸入數(shù)據(jù)*/</b></p><p>  cout<<"輸入要刪除的用戶號與報刊號"<<endl;</p><p>  cin

106、>>CNO6;</p><p>  cin>>NMNO6;</p><p>  if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)</p><p><b>  {</b></p><p>  cbCNO=SQL_NTS;cbNMNO=SQL_NTS;&

107、lt;/p><p>  ret=SQLBindParameter(dinghstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,CNO_LEN,0,CNO6,0,&cbCNO);</p><p>  ret=SQLBindParameter(dinghstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,NMNO_LEN

108、,0,NMNO6,0,&cbNMNO);</p><p><b>  }</b></p><p>  ret=SQLExecute(dinghstmt);</p><p><b>  }</b></p><p>  goto loop3;</p><p>  case

109、 4:m=4;</p><p>  goto loop;</p><p><b>  }</b></p><p><b>  }</b></p><p>  case 4:w=4;/*查詢訂單*/</p><p><b>  {</b></p>

110、;<p>  SQLCHAR CNO7[CNO_LEN],DATE7[DATE_LEN],NMNO7[NMNO_LEN],START7[START_LEN],TERM7[TERM_LEN];</p><p>  SQLINTEGER QTY7;</p><p>  ret=SQLPrepare(dinghstmt,(SQLWCHAR*)(_T("SELECT * F

111、ROM [dbo].[ORDER] WHERE CNO=?")),SQL_NTS);</p><p>  /*if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)</p><p><b>  {</b></p><p>  ret=SQLBindParameter(bingmouhstmt,

112、1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,CNO_LEN,0,CNO7,0,&cbCNO);</p><p><b>  }*/</b></p><p>  cout<<"查詢的用戶號"<<endl;</p><p>  scanf("%s"

113、;,CNO7);</p><p>  if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)</p><p><b>  {</b></p><p>  cbCNO=SQL_NTS;cbDATE1=SQL_NTS;cbNMNO=SQL_NTS;cbSTART=SQL_NTS;cbTERM=SQL_NTS

114、;cbQTY=0;</p><p>  ret=SQLBindParameter(dinghstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,CNO_LEN,0,CNO7,0,&cbCNO);</p><p>  ret=SQLBindCol(dinghstmt,1,SQL_C_CHAR,CNO7,CNO_LEN,&cbCNO);<

115、/p><p>  ret=SQLBindCol(dinghstmt,2,SQL_C_CHAR,DATE7,DATE_LEN,&cbDATE1);</p><p>  ret=SQLBindCol(dinghstmt,3,SQL_C_CHAR,NMNO7,NMNO_LEN,&cbNMNO);</p><p>  ret=SQLBindCol(dinghst

116、mt,4,SQL_C_CHAR,START7,START_LEN,&cbSTART);</p><p>  ret=SQLBindCol(dinghstmt,5,SQL_C_CHAR,TERM7,TERM_LEN,&cbTERM);</p><p>  ret=SQLBindCol(dinghstmt,6,SQL_C_LONG,&QTY7,0,&cbQTY)

117、;</p><p><b>  }</b></p><p>  ret=SQLExecute(dinghstmt);</p><p>  while(SQLFetch(dinghstmt) != SQL_NO_DATA_FOUND)</p><p><b>  {</b></p>&l

118、t;p>  //printf("%s\n",CNO7);</p><p>  //printf("%s\n",DATE7);</p><p>  cout<<CNO7<<DATE7<<NMNO7<<START7<<TERM7<<QTY7<<endl;</p

119、><p><b>  }</b></p><p>  system("pause");</p><p>  goto loop;</p><p><b>  }</b></p><p>  case 5:w=5;/*統(tǒng)計查詢*/</p><

120、;p><b>  {</b></p><p>  SQLINTEGER SUM1;</p><p>  SQLDOUBLE SUM2;</p><p>  SQLINTEGER cbSUM1;</p><p>  SQLINTEGER cbSUM2;</p><p>  SQLCHAR NM

121、NO[NMNO_LEN];</p><p>  ret=SQLPrepare(dinghstmt,(SQLWCHAR*)(_T("SELECT [dbo].[ORDER].NMNO,SUM(QTY),SUM(QTY*PRICE) FROM [dbo].[ORDER],NMTABLE WHERE [dbo].[ORDER].NMNO=NMTABLE.NMNO GROUP BY [dbo].[ORDER].

122、NMNO")),SQL_NTS);</p><p>  if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)</p><p><b>  {</b></p><p>  cbNMNO=SQL_NTS;cbSUM1=0;cbSUM2=0;</p><p>  ret=S

123、QLBindCol(dinghstmt,1,SQL_C_CHAR,NMNO,NMNO_LEN,&cbNMNO);</p><p>  ret=SQLBindCol(dinghstmt,2,SQL_C_LONG,&SUM1,0,&cbSUM1);</p><p>  ret=SQLBindCol(dinghstmt,3,SQL_C_DOUBLE,&SUM2,0

124、,&cbSUM2);</p><p><b>  }</b></p><p>  ret=SQLExecute(dinghstmt);</p><p>  while(SQLFetch(dinghstmt) != SQL_NO_DATA_FOUND)</p><p><b>  {</b>&

125、lt;/p><p>  cout<<NMNO<<SUM1<<" "<<SUM2<<endl;</p><p><b>  }</b></p><p>  system("pause");</p><p>  goto lo

126、op;</p><p><b>  }</b></p><p>  default:return 0;</p><p><b>  }</b></p><p>  /*Step 7 中止處理*/</p><p>  SQLFreeHandle(SQL_HANDLE_STMT,

127、dinghstmt);</p><p>  SQLDisconnect(dinghdbc);</p><p>  SQLFreeHandle(SQL_HANDLE_DBC,dinghdbc);</p><p>  SQLFreeHandle(SQL_HANDLE_ENV,dinghenv);</p><p><b>  return

128、 0;</b></p><p><b>  }</b></p><p><b>  課程設計總結(jié):</b></p><p>  通過這次數(shù)據(jù)庫課程設計,我對于SQL Server有了更深入的了解,并對于如何將SQL Server與VC++環(huán)境相連接也有了一個全新的認識,對于一個企業(yè)的數(shù)據(jù)庫管理有了很深刻的實踐認

129、知。同時使我對數(shù)據(jù)庫系統(tǒng)的設計及應用有了更加深刻的認識,包括從E-R圖的設計,數(shù)據(jù)結(jié)構(gòu)定義到關(guān)系模型的設計,完整性約束的整個過程。</p><p>  在設計的過程中,由于有以前的實驗基礎(chǔ),很順利的建好了表以及關(guān)系圖。但在接下來的設計中遇到了很大的問題,由于涉及到未了解的ODBC數(shù)據(jù)源配置問題以及代碼編寫能力的薄弱,對接下來的實驗造成了很大的難題。通過對書本上例題與ODBC API的學習,終于有了一些了解。但在后

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論