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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  數(shù)據(jù)庫(kù)課程設(shè)計(jì)</b></p><p>  班 級(jí) 軟件1001 </p><p>  學(xué) 號(hào) </p><p>  姓 名 </p><p>  指導(dǎo)老師 </p><

2、p><b>  二零一二年 六 月</b></p><p><b>  一、引言</b></p><p><b>  1.目的</b></p><p>  課程設(shè)計(jì)為學(xué)生提供了一個(gè)既動(dòng)手又動(dòng)腦,獨(dú)立實(shí)踐的機(jī)會(huì),將課本上的理論知識(shí)和實(shí)際有機(jī)的結(jié)合起來(lái),鍛煉學(xué)生的分析解決實(shí)際問(wèn)題的能力。提高學(xué)生適應(yīng)

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

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

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

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

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

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

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

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

11、統(tǒng)用戶界面完成實(shí)驗(yàn)內(nèi)容所指定的各項(xiàng)要求;</p><p>  分析遇到的問(wèn)題,總結(jié)并寫出課程設(shè)計(jì)報(bào)告;</p><p><b>  自我評(píng)價(jià)</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>  本次實(shí)驗(yàn)的報(bào)刊預(yù)訂系統(tǒng)總體上可以分為5個(gè)功能模塊:訂戶管理,報(bào)刊目錄管理,訂單管理,查詢預(yù)訂,統(tǒng)計(jì)查詢。其中每一個(gè)管理模塊包

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

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

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

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

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

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

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

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

21、lt;p><b>  5.統(tǒng)計(jì)查詢</b></p><p><b>  6.按用戶查詢</b></p><p><b>  7.修改報(bào)刊目錄</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; //語(yǔ)句句柄括<

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 初始化語(yǔ)句句柄括*/</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í)行語(yǔ)句*/</p><p>  c

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

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

39、out<<"5、統(tǒng)計(jì)查詢"<<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、返回上級(jí)"<<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í)行預(yù)編譯后的語(yǔ)句*/</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í)行預(yù)編譯后的語(yǔ)句*/</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<<"輸入要?jiǎng)h除的訂戶號(hào)"<&

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;/*報(bào)刊目錄管理*/</p><p><b>  {</b></p><p>  loop2 :cout<<"+++++++++++++++++++++++++++++++++++報(bào)刊目錄管理+++++++++++++++++++++++++++++++"<<endl;</p>&

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

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

64、; /*增加報(bào)刊目錄*/</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í)行預(yù)編譯后的語(yǔ)句*/</p><p>  ret=SQLExecute(dinghstmt);</p><p><b>  }</b></p><p>  goto loop2;</p><p>  case 2:y=2;/*修改報(bào)刊目錄*/</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í)行預(yù)編譯后的語(yǔ)句*/</p><p>  ret=SQLExecute(dinghstmt);</p><p><b>  }</b></p><p>  goto loop2;</p&g

79、t;<p>  case 3:y=3;/*刪除報(bào)饋刊目錄*/</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<<"輸入要?jiǎng)h除的報(bào)刊號(hào)?"<<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、返回上級(jí)"<<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í)行預(yù)編譯后的語(yǔ)句*/</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í)行預(yù)編譯后的語(yǔ)句*/</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<<"輸入要?jiǎng)h除的用戶號(hào)與報(bào)刊號(hào)"<<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<<"查詢的用戶號(hào)"<<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)計(jì)查詢*/</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>  課程設(shè)計(jì)總結(jié):</b></p><p>  通過(guò)這次數(shù)據(jù)庫(kù)課程設(shè)計(jì),我對(duì)于SQL Server有了更深入的了解,并對(duì)于如何將SQL Server與VC++環(huán)境相連接也有了一個(gè)全新的認(rèn)識(shí),對(duì)于一個(gè)企業(yè)的數(shù)據(jù)庫(kù)管理有了很深刻的實(shí)踐認(rèn)

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論