版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)---報(bào)刊訂閱管理系統(tǒng)
- 數(shù)據(jù)庫(kù)原理與應(yīng)用課程設(shè)計(jì)報(bào)告--企業(yè)報(bào)刊訂閱管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--企業(yè)報(bào)刊管理系統(tǒng)
- 報(bào)刊訂閱管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)-報(bào)刊訂閱管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--數(shù)據(jù)庫(kù)原理及應(yīng)用課程設(shè)計(jì)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--bbs系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
- 一個(gè)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--數(shù)據(jù)庫(kù)設(shè)計(jì)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--快餐訂餐系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)---數(shù)據(jù)庫(kù)
- 一個(gè)Web數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--數(shù)據(jù)庫(kù)設(shè)計(jì)—公司管理系統(tǒng)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)快餐訂餐系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
- 數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)課程設(shè)計(jì)論.doc
- 一個(gè)典型的數(shù)據(jù)庫(kù)設(shè)計(jì)實(shí)例
- 《數(shù)據(jù)庫(kù)原理及應(yīng)用》課程設(shè)計(jì)---師生管理數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)---機(jī)房管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
- 數(shù)據(jù)庫(kù)課程設(shè)計(jì)--超市會(huì)員管理系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)
- 數(shù)據(jù)庫(kù)原理及應(yīng)用課程設(shè)計(jì)--職工考勤管理系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論