第一篇:C語言圖書管理系統(tǒng)課設(shè)報(bào)告
程序設(shè)計(jì)課設(shè)論文
論文題目: 圖書信息管理系統(tǒng)
學(xué) 院: 年 級(jí): 班 級(jí): 姓 名: 學(xué) 號(hào): 指導(dǎo)教師:
軟件學(xué)院 2015級(jí)
軟件工程1522班 韓汀
201515614100 邵回祖
2016年6月14日-2016年6月22日
目錄
1.需求分析---------1
2.概要設(shè)計(jì)---------2
3.詳細(xì)設(shè)計(jì)---------3
4.調(diào)試分析---------8
5.核心源程序清單和執(zhí)行結(jié)果------------------------8
6.課程設(shè)計(jì)總結(jié)----19
1.需求分析
(1)程序的功能:
圖書信息管理系統(tǒng)涉及5項(xiàng)功能,包括錄入,瀏覽,查詢,刪除和修改,其中查詢可通過書名或作者兩種途徑進(jìn)行。
圖書信息錄入:將圖書信息寫入程序,包括序號(hào),書名,作者,出版社,出版日期和價(jià)格。
圖書信息瀏覽:將所有已錄入的圖書信息按序號(hào)排序列出。圖書信息查詢:可根據(jù)圖書的書名或作者查找該書的具體信息。圖書信息刪除:可根據(jù)序號(hào)刪除指定圖書信息。圖書信息修改:可根據(jù)序號(hào)修改圖書所有信息。
(2)輸入輸出要求:
無
(3)測(cè)試數(shù)據(jù): 高等數(shù)學(xué) 1 高等教育出版社 2014.7 31.20 2 概率論 2 高等教育出版社 2008.6 37.40 3 線性代數(shù) 3 高等教育出版社 2007.5 17.30 4 C程序設(shè)計(jì) 4 清華大學(xué)出版社 2010.6 33.00 1
2.概要設(shè)計(jì):(1)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)
(2)系統(tǒng)流程: 2
3.詳細(xì)設(shè)計(jì):
(1)信息錄入函數(shù): 用scanf函數(shù)輸入定義的書籍結(jié)構(gòu)體的序號(hào),書名,作者,出版社,出版時(shí)間和價(jià)格。建立10本書籍的書庫,輸入完畢,返回主函數(shù)。
(2)信息瀏覽函數(shù):
(3)信息查詢函數(shù):
這里分兩個(gè)項(xiàng)目,一個(gè)是通過書名進(jìn)行查詢,另一個(gè)是通過作者進(jìn)行查詢。在定義查詢函數(shù)時(shí)使用switch函數(shù):
通過書名進(jìn)行查詢:
通過作者進(jìn)行查詢:
(4)信息刪除函數(shù):
根據(jù)序號(hào)刪除圖書,操作成功后顯示刪除成功,任意鍵跳轉(zhuǎn)。如果序號(hào)輸入錯(cuò)誤顯示圖書不存在。
(5)信息修改函數(shù):
在此函數(shù)中,根據(jù)序號(hào)選擇圖書修改,存在一個(gè)問題,就是難以選擇其中一項(xiàng)進(jìn)行修改,只能全部修改。
出現(xiàn)的問題:只能全部進(jìn)行修改:
4.調(diào)試分析:
(1)在初次運(yùn)行中,發(fā)現(xiàn)系統(tǒng)閃退問題存在于第2,3,4,5項(xiàng)中,輸入序號(hào)點(diǎn)擊回車系統(tǒng)閃退。最后在每一項(xiàng)最后加入system(“pause”);使得閃退問題修復(fù)。
(2)在最初編寫代碼過程中,始終輸入:FILE *fp;
if((fp=fopen(“l(fā)ibrary”,“r”))==NULL)最后修改為:FILE *fp;
if((fp=fopen(“l(fā)ibrary.doc”,“r”))==NULL)
(3)在信息修改一欄中,目前仍無法實(shí)現(xiàn)單獨(dú)修改一條信息的功能,只能根據(jù)序號(hào),對(duì)序號(hào)所對(duì)應(yīng)的全部圖書信息進(jìn)行修改。
if(i!=library.count){
mbook book;
printf(“ntt請(qǐng)輸入修改后此圖書的信息n”);
printf(“t請(qǐng)輸入圖書號(hào):”);
scanf(“%s”,book.number);
printf(“t請(qǐng)輸入圖書名:”);
scanf(“%s”,book.name);
printf(“t請(qǐng)輸入作者名:”);
scanf(“%s”,book.author);
printf(“t請(qǐng)輸入出版社:”);
scanf(“%s”,book.publish);
printf(“t請(qǐng)輸入出版時(shí)間:”);
scanf(“%s”,book.time);
printf(“t請(qǐng)輸入該書的價(jià)格:”);
fflush(stdin);
scanf(“%f”,&book.price);
strcpy(library.book[i].name,book.name);
strcpy(library.book[i].number,book.number);strcpy(library.book[i].publish,book.publish);strcpy(library.book[i].author,book.author);strcpy(library.book[i].time,book.time);library.book[i].price=book.price;save();5.核心源程序清單和執(zhí)行結(jié)果:
(1)源代碼:
#include
typedef struct { int count;//書的本數(shù)
mbook book[100];//最大可有100本書 }mlibrary;
mlibrary library;void save()//保存圖書信息。{ FILE *fp;if((fp=fopen(“l(fā)ibrary.doc”,“w”))==NULL){ printf(“n不能保存圖書信息n”);return;} fwrite(&library.count,sizeof(int),1,fp);fwrite(library.book,sizeof(library.book[0]),library.count,fp);}
void putin()/*定義錄入函數(shù)*/ {
int y=1;
system(“cls”);while(y)
{ printf(“t請(qǐng)輸入您的書籍的書號(hào):”);scanf(“%s”,library.book[library.count].number);printf(“t 請(qǐng)輸入書名:”);scanf(“%s”,library.book[library.count].name);printf(“t 請(qǐng)輸入作者名:”);scanf(“%s”,library.book[library.count].author);printf(“t 請(qǐng)輸入出版社:”);scanf(“%s”,library.book[library.count].publish);printf(“t 請(qǐng)輸入出版時(shí)間:”);scanf(“%s”,library.book[library.count].time);printf(“t 請(qǐng)輸入該書的價(jià)格:”);fflush(stdin);scanf(“%f”,&library.book[library.count].price);library.count++;printf(“n 是否繼續(xù)錄入(1.繼續(xù);0,退出錄入):”);fflush(stdin);scanf(“%d”,&y);if(y!=1){ y=0;break;} } save();} void lookup(){
int i;
system(“cls”);
printf(“圖書號(hào)t圖書名t作者名t出版社t出版日期t圖書價(jià)格n”);for(i=0;i void search()/*定義查詢函數(shù)*/ { int a;system(“cls”);/*進(jìn)行清屏*/ printf(“tt******************************n”);printf(“開始查詢n”);printf(“ttt1---------------search_by_namen”);printf(“ttt2---------------search_by_writern”);printf(“ttt0---------------exitn”);printf(“tt******************************n”);printf(“tt請(qǐng)選擇你想要的查詢方式:”);fflush(stdin);scanf(“%d”,&a);switch(a){ case 1: search_by_name();break;case 2: search_by_author();break;case 0: return;} system(“pause”);} void del()/*定義刪除函數(shù)*/ { int i;char number[10];system(“cls”);/*清屏*/ printf(“n Please type in the number of the book you want to delete:”);fflush(stdin);scanf(“%s”,number);for(i=0;i mbook book; printf(“ntt請(qǐng)輸入修改后此圖書的信息n”); printf(“t請(qǐng)輸入圖書號(hào):”); scanf(“%s”,book.number); printf(“t請(qǐng)輸入圖書名:”); scanf(“%s”,book.name); printf(“t請(qǐng)輸入作者名:”); scanf(“%s”,book.author); printf(“t請(qǐng)輸入出版社:”); scanf(“%s”,book.publish); printf(“t請(qǐng)輸入出版時(shí)間:”); scanf(“%s”,book.time); printf(“t請(qǐng)輸入該書的價(jià)格:”); fflush(stdin); scanf(“%f”,&book.price); strcpy(library.book[i].name,book.name); strcpy(library.book[i].number,book.number);strcpy(library.book[i].publish,book.publish);strcpy(library.book[i].author,book.author);strcpy(library.book[i].time,book.time);library.book[i].price=book.price;save();} else printf(“n cannot found!n”); fflush(stdin); getchar(); system(“pause”);} int main(){ int a; FILE *fp; if((fp=fopen(“l(fā)ibrary.doc”,“r”))==NULL){ printf(“n不能打開圖書信息庫n”);fp=fopen(“l(fā)ibrary.doc”,“w+”);printf(“n初始化圖書信息庫,初始化之后要重啟程序n”);library.count=0;fwrite(&library.count,sizeof(int),1,fp);fclose(fp);return;} fread(&library.count,sizeof(int),1,fp);fread(library.book,sizeof(library.book[0]),library.count,fp);fclose(fp);do { system(“cls”);printf(“nnnnntttt圖書信息管理系統(tǒng)ttttn”);printf(“tt*********************************************n”);printf(“ttt1------------------圖書信息錄入n”);printf(“ttt2------------------圖書信息瀏覽n”);printf(“ttt3------------------圖書信息查詢n”);printf(“ttt4------------------圖書信息刪除n”);printf(“ttt5------------------圖書信息修改n”);printf(“ttt0-----------------退出圖書管理系統(tǒng)n”);printf(“tt*********************************************n”);printf(“ttPlease Enter Choose: ”);fflush(stdin);scanf(“%d”,&a);switch(a){ case 1: putin(); break;case 2: lookup(); break;case 3: search(); break;case 4: del(); break;case 5: update(); break;case 0: printf(“nn退出nn”); break;default: printf(“n序號(hào)不對(duì)n”);} }while(a!=0);save();return 0;}(2)運(yùn)行結(jié)果: 在codeblocks中編譯、運(yùn)行目標(biāo)程序后,進(jìn)入到主界面,顯示如圖1: 進(jìn)入主界面后,顯示信息選擇操作,根據(jù)相應(yīng)序號(hào)選擇相應(yīng)操作,輸入1后進(jìn)入圖書信息錄入選項(xiàng),按順序錄入相應(yīng)信息,完成后按1繼續(xù)錄入,按0結(jié)束錄入,顯示如圖2: 按0返回主界面,進(jìn)入到信息瀏覽界面,可查看已錄入的全部圖書信息(下圖中只錄入一本圖書信息),查看結(jié)束后按任意鍵返回主界面,顯示如圖3: 根據(jù)選項(xiàng)進(jìn)入信息查詢界面,有兩個(gè)選擇,分別為根據(jù)書名和根據(jù)作者,按1進(jìn)入根據(jù)書名進(jìn)行查詢,可顯示相應(yīng)圖書信息,顯示如圖4: 根據(jù)作者進(jìn)行查詢,以查詢無果為例,顯示cannot found!顯示如圖5: 按5進(jìn)入圖書信息修改界面,輸入序號(hào)顯示圖書信息并進(jìn)行修改,按順序依次修改信息(目前無法對(duì)單獨(dú)某一條信息進(jìn)行修改),顯示如圖6: 按4進(jìn)入信息刪除界面,輸入相應(yīng)序號(hào)后顯示刪除成功,按任意鍵返回,顯示如圖7: 在信息刪除界面中,輸入序號(hào),如果沒有存儲(chǔ)該序號(hào)圖書信息,顯示cannot found!顯示如圖8: 6.課程設(shè)計(jì)總結(jié): 在課程設(shè)計(jì)過程中,由于對(duì)代碼和各種概念不是很清楚,所以對(duì)結(jié)構(gòu)體變量的引用非常生疏。在調(diào)試程序的過程中,也存在許多問題,最后一一修改。通過自己對(duì)書本知識(shí)一遍又一遍的復(fù)習(xí),自己感覺做系統(tǒng)不再那么的復(fù)雜,包括框架的建立,界面設(shè)計(jì),調(diào)用函數(shù)等等。經(jīng)過一個(gè)星期的鍛煉,自己感覺到了明顯的提高,以后還需多練習(xí),多鍛煉,加強(qiáng)對(duì)C語言綜合知識(shí)的理解與應(yīng)用。 請(qǐng)老師審閱我的課程設(shè)計(jì)報(bào)告。謝謝 軟件學(xué)院 1522班 韓汀 201515614100 河南城建學(xué)院 課 程設(shè)計(jì) 報(bào)告書 專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 課程設(shè)計(jì)名稱:《網(wǎng)站建設(shè)技術(shù)》 題 目:圖書借閱系統(tǒng) 班 級(jí):0814131班 學(xué) 號(hào):081413141 設(shè) 計(jì) 者:徐學(xué)林 同 組 人 員: 楊志恒 張寶 指 導(dǎo) 老 師:張妍琰 楊斌 蘇靖楓 完 成時(shí) 間:2015年12月23日 一、設(shè)計(jì)目的 1.利用軟件開發(fā)現(xiàn)有軟硬件環(huán)境,及先進(jìn)的管理系統(tǒng)開發(fā)方案 從而達(dá)到充分利用現(xiàn)在資源提高系統(tǒng)開發(fā)水平和應(yīng)用效果的目的。 2.系統(tǒng)應(yīng)該符合軟件工程開發(fā)的理論,開發(fā)方法等開發(fā)依據(jù)。3.系統(tǒng)應(yīng)滿足圖書館管理工作需要,并達(dá)到操作過程中的直觀,方便,實(shí)用,安全,準(zhǔn)確等要求。 圖書館在正常運(yùn)營(yíng)中面對(duì)大量書籍、讀者信息以及兩者間相互聯(lián)系產(chǎn)生的借書信息、還書信息?,F(xiàn)有的人工記錄方法既效率低又錯(cuò)誤過多,大大影響了圖書館的正常管理工作。因此需要對(duì)書籍資源、讀者資源、借書信息、還書信息進(jìn)行管理,及時(shí)了解各個(gè)環(huán)節(jié)中信息的變更,有利用管理效率的提高。 4.培養(yǎng)運(yùn)用JSP語句制作網(wǎng)頁的能力; 5.活用所學(xué)的JSP知識(shí)制作簡(jiǎn)單的循環(huán)網(wǎng)頁; 6.實(shí)現(xiàn)NetBeans到數(shù)據(jù)庫的鏈接; 二、需求分析 學(xué)校的圖書管理涉及圖書信息、系統(tǒng)用戶信息、讀者信息、圖書借閱等多種數(shù)據(jù)管理。從管理的角度可將圖書分為三類:圖書信息管理、系統(tǒng)用戶管理、讀者數(shù)據(jù)管理。圖書信息管理包括圖書征定、借還、查詢等操作,系統(tǒng)用戶管理包括系統(tǒng)用戶類別和用戶數(shù)據(jù)管理,讀者數(shù)據(jù)管理包括讀者類別管理和個(gè)人數(shù)據(jù)的錄入、修改和刪除。 圖書借閱者的需求是查詢圖書室所存的圖書、個(gè)人借閱情況及個(gè)人信息的修改;圖書館工作人員對(duì)圖書借閱者的借閱及還書要求進(jìn)行操作,同時(shí)形成借書或還書報(bào)表給借閱者查看確認(rèn);圖書館管理人員的功能最 為復(fù)雜,包括對(duì)工作人員、圖書借閱者、圖書進(jìn)行管理和維護(hù),及系統(tǒng)狀態(tài)的查看、維護(hù)等。圖書借閱者可直接查看圖書館圖書情況,如果圖書借閱者根據(jù)本人借書證號(hào)和密碼登錄系統(tǒng),還可以進(jìn)行本人借書情況的查詢和維護(hù)部分個(gè)人信息。一般情況下,圖書借閱者只應(yīng)該查詢和維護(hù)本人的借書情況和個(gè)人信息,若查詢和維護(hù)其他借閱者的借書情況和個(gè)人信息,就要知道其他圖書借閱者的借書證號(hào)和密碼。這些是很難得到的,特別是密碼,所以不但滿足了圖書借閱者的要求,還保護(hù)了圖書借閱者的個(gè)人隱私。圖書館工作人員有修改圖書借閱者借書和還書記錄的權(quán)限,所以需對(duì)工作人員登陸本模塊進(jìn)行更多的考慮。在此模塊中,圖書館工作人員可以為圖書借閱者加入借書記錄或是還書記錄,并打印生成相應(yīng)的報(bào)表給用戶查看和確認(rèn)。圖書館管理人員功能的信息量大,數(shù)據(jù)安全性和保密性要求最高。本功能實(shí)現(xiàn)對(duì)圖書信息、借閱者信息、總體借閱情況信息的管理和統(tǒng)計(jì)、工作人員和管理人員信息查看及維護(hù)。圖書館管理員可以瀏覽、查詢、添加、刪除、修改、統(tǒng)計(jì)圖書的基本信息;瀏覽、查詢、統(tǒng)計(jì)、添加、刪除和修改圖書借閱者的基本信息,瀏覽、查詢、統(tǒng)計(jì)圖書館的借閱信息,但不能添加、刪除和修改借閱信息,這部分功能應(yīng)該由圖書館工作人員執(zhí)行,但是,刪除某條圖書借閱者基本信息記錄時(shí),應(yīng)實(shí)現(xiàn)對(duì)該圖書借閱者借閱記錄的級(jí)聯(lián)刪除。并且還應(yīng)具有生成催還圖書報(bào)表,并打印輸出的功能。 圖書借閱管理系統(tǒng)在各個(gè)圖書館、學(xué)校都有著至關(guān)重要的作用。在制作圖書借閱管理系統(tǒng)之前,首先要知道所要做的系統(tǒng)可以實(shí)現(xiàn)哪些功能,要清楚不同級(jí)別的用戶具有什么樣的功能,實(shí)現(xiàn)什么樣的界面。當(dāng) 明確了這些,項(xiàng)目開發(fā)的思路就清晰了,然后再對(duì)校園圖書館的系統(tǒng)進(jìn)行考察、分析,從中吸取經(jīng)驗(yàn),并結(jié)合本系統(tǒng)的要求以及實(shí)際情況,設(shè)計(jì)出一個(gè)合理的系統(tǒng)。 本圖書借閱管理系統(tǒng)旨在構(gòu)建此類平臺(tái),實(shí)現(xiàn)不同模塊的功能設(shè)計(jì)。用戶注冊(cè)后登錄,進(jìn)入圖書借閱,對(duì)圖書的查看及借閱,以完成相應(yīng)需求。本系統(tǒng)功能模塊大致分為:用戶登錄借閱和管理員對(duì)圖書及用戶的管理。 本系統(tǒng)是用Javabeans、mysql、dreamweaver等WEB開發(fā)技術(shù)或網(wǎng)絡(luò)工具完成一個(gè)的基本的圖書借閱管理系統(tǒng)。 三、系統(tǒng)設(shè)計(jì) 1、數(shù)據(jù)庫設(shè)計(jì) 由于本系統(tǒng)是為中小型圖書館開發(fā)的程序,需要充分考慮到成本及用戶需求等問題,而MySQL是目前最為流行的開放源代碼的數(shù)據(jù)庫,是完全網(wǎng)絡(luò)化的跨平臺(tái)的關(guān)系型數(shù)據(jù)庫,正好滿足了中小型圖書館企業(yè)的要求,所以本系統(tǒng)采用MySQL數(shù)據(jù)庫。 2、公共模塊設(shè)計(jì) 在開發(fā)過程中,經(jīng)常會(huì)用到一些公共模塊,例如,數(shù)據(jù)塊鏈接及操作的類,字符串的處理的類以及編碼方式的處理等,因此,在開發(fā)系統(tǒng)前應(yīng)首先需要設(shè)計(jì)公共模塊設(shè)計(jì)。本系統(tǒng)內(nèi)的公共模塊有數(shù)據(jù)塊的操作,對(duì)編碼方式的操作。 3、管理員模塊設(shè)計(jì) 圖書管理員要有對(duì)讀者的管理模塊,圖書的管理模塊,所以我們進(jìn)行了如下設(shè)計(jì): 4、讀者模塊設(shè)計(jì) 在設(shè)計(jì)讀者模塊中要考慮到讀者可查詢圖書,借閱圖書,歸還圖書。和游客登錄。 5、圖書管理模塊設(shè)計(jì) 在設(shè)計(jì)圖書管理模塊時(shí),要考慮到應(yīng)該可對(duì)圖書條目進(jìn)行添加,刪除,修改。 四、制作過程及要點(diǎn) 1、系統(tǒng)登錄實(shí)現(xiàn)過程 系統(tǒng)登錄頁面是進(jìn)入圖書管理系統(tǒng)的入口,在運(yùn)行本系統(tǒng)后,首先進(jìn)入的是系統(tǒng)登錄頁面,再頁面中,系統(tǒng)管理員應(yīng)選擇管理員登錄,再正確輸入用戶和密碼,當(dāng)用戶沒有正確輸入用戶名及密碼的時(shí)候,系統(tǒng)會(huì)通過denglu_servlet進(jìn)行判斷,并把信息反饋到error.Jsp頁面。系統(tǒng)登錄頁面如下圖所示: 2、五、設(shè)計(jì)總結(jié) 在圖書管理系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)中,雖然不能說精通,但通過實(shí)踐,我已經(jīng)掌握了三層架構(gòu)的基本理念,并可以熟練的運(yùn)用myeclipse+mysql工具進(jìn)行三層架構(gòu)的開發(fā)。更對(duì)java開發(fā)B/S架構(gòu)的項(xiàng)目有了更深刻的 體會(huì),積累了許多經(jīng)驗(yàn)。除此之外,還鞏固了許久未運(yùn)用的Dreamweaver、PhotoShop等軟件,完成了對(duì)網(wǎng)站的美化。與其他小組成員合作,獨(dú)立設(shè)計(jì)出一個(gè)功能較為完善的圖書管理系統(tǒng)。 這個(gè)管理系統(tǒng),我自認(rèn)不是很完善,但它所包含的知識(shí)和所運(yùn)用的技術(shù),足以概括我們書中所學(xué),甚至更多。因?yàn)闀居肋h(yuǎn)是正確的,它是一條通往真理的筆直的大路,所以很少有犯錯(cuò)再改正的機(jī)會(huì)。而總有些知識(shí)必須走一段“彎路”才能獲得,就像如果你只走筆直的大道,就欣賞不到“曲徑通幽”的景色。 此次我們實(shí)習(xí)的內(nèi)容是基于基于JSP的數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)一個(gè)圖書管理系統(tǒng),根據(jù)圖書管理系統(tǒng)的需求設(shè)計(jì)出圖書管理系統(tǒng)的具體功能然后再編寫代碼。但唯一不同的是,這次圖書管理系統(tǒng)的開發(fā)是由我們每個(gè)人獨(dú)立開發(fā)完成的,一開始我們有些不理解,不是說實(shí)際過程中真正開發(fā)一個(gè)軟件不可能完全靠哪一個(gè)人自己的能力去完成,而是要靠一個(gè)團(tuán)隊(duì)的分工協(xié)作,最終才有可能設(shè)計(jì)出一個(gè)完美的程序。 后來兩周的實(shí)習(xí)下來,我們這次編寫的圖書管理系統(tǒng)雖然是一個(gè)系統(tǒng),但其實(shí)圖書管理系統(tǒng)所要實(shí)現(xiàn)的功能都是平常我們練習(xí)過的,所以我們獨(dú)立完成起來并不是特別的困難,最主要的是我們現(xiàn)在必須先要把個(gè)人的能力提高起來才有能力將來和別人一起協(xié)作,我們這次的實(shí)習(xí)主要是鍛煉個(gè)人的能力和讓我們自己去發(fā)現(xiàn)問題和解決問題。 但不管怎樣,這個(gè)系統(tǒng)是我們?nèi)珕T努力的成果,包含的文檔也相當(dāng)?shù)凝R全和細(xì)致。我想,這就是團(tuán)隊(duì)的力量。通過本次試驗(yàn),讓我自己動(dòng)手進(jìn)行數(shù)據(jù)庫的連接、網(wǎng)頁的設(shè)計(jì)、代碼的編寫與調(diào)試,加深了對(duì)這門課 程的理解,鍛煉了自己,使我從中學(xué)習(xí)到了非常多的東西。在實(shí)驗(yàn)中也遇到了很多問題,數(shù)據(jù)庫連接不上就向老師同學(xué)反復(fù)詢問,調(diào)試時(shí)也會(huì)跳出各種各樣的錯(cuò)誤信息,雖然過程很辛苦,但是看著自己寫的程序運(yùn)行出想要的結(jié)果心里也是感到很滿足。 六、參考資料 [1]張超.基于 JSP 的數(shù)據(jù)庫連接技術(shù)淺析[J].福建電腦, 2013, 28(12): 80-81.[2]陳倩, 劉勝, 焦壵.基于 JSP 的培訓(xùn)管理信息系統(tǒng)研究[J].機(jī)械, 2013, 40(009): 10-15.[3]王莎莎.基于 JSP 的在線考試系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)光盤軟件與應(yīng)用, 2013, 16(16): 53-54.強(qiáng)光平, 劉才銘, 趙靜, 等.基于 JSP 的用戶分組權(quán)限的設(shè)計(jì)和實(shí)現(xiàn)[J].計(jì)算機(jī)光盤軟件與應(yīng)用, 2013, 16(18): 53-54.[4]吳正佳, 羅月勝, 周玉瓊, 等.一種求解典型 JSP 的改進(jìn)離散粒子群優(yōu)化算法[J].計(jì)算機(jī)應(yīng)用研究, 2013, 30(8): 2405-2409.[5]薛倩.基于 JSP 技術(shù)企業(yè)動(dòng)態(tài)網(wǎng)站系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].微型電腦應(yīng)用, 附錄一 C語言——圖書管理系統(tǒng) 代碼部分: #include /*定義數(shù)據(jù)庫相關(guān)操作變量*/ MYSQL mysql; // MYSQL_RES *result; //定義結(jié)果集變量 MYSQL_ROW row; //定義行變量 char ch[2]; void ShowAll(); /*顯示所有的圖書信息*/ void AddBook(); /*添加圖書信息*/ void ModifyBook(); /*修改圖書信息*/ void DeleteBook(); /*刪除圖書信息*/ void QueryBook(); /*查詢圖書信息*/ /*顯示菜單*/ void showmenu(){ system(“cls”); printf(“nnnnn”); printf(“t╔═══════════════════════════╗n”); printf(“t║ Welcome To Lemon Books System ║n”); printf(“t╠═══════════════════════════╣n”); printf(“t║t 1添加圖書信息 ║n”); printf(“t║t 3刪除圖書信息 ║n”); printf(“t║t 5退出 ║n”); printf(“t╚═══════════════════════════╝n”); printf(“n ENTER YOUR CHOICE(1-6):”); } void inquire()/*詢問用戶是否顯示主菜單*/ { printf(“t 顯示主菜單?(y/n):”); scanf(“%s”,ch); if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)/*判斷是否要顯示查找到的信息*/ { showmenu(); /*顯示菜單*/ } else { exit(0); } } /*顯示主菜單,連接數(shù)據(jù)庫*/ int main(){ int n; //定義變量 存儲(chǔ)用戶輸入的編號(hào) mysql_init(&mysql);//初始化mysql結(jié)構(gòu) showmenu(); /*顯示菜單*/ scanf(“%d”,&n);/*輸入選擇功能的編號(hào)*/ while(n) { switch(n) { case 1: ShowAll(); /*調(diào)用顯示所有圖書數(shù)據(jù)的過程*/ break; case 2: AddBook(); /*添加圖書信息*/ break; case 3: ModifyBook(); /*修改圖書信息*/ break; case 4: DeleteBook(); /*刪除圖書信息*/ break; case 5: QueryBook(); /*查詢圖書信息*/ break; case 6: exit(0); /*退出*/ default:break; } scanf(“%d”,&n); } } void ShowAll() /*調(diào)用顯示所有圖書數(shù)據(jù)的過程*/ { /*連接數(shù)據(jù)庫*/ if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0)) { printf(“nt 不能連接數(shù)據(jù)庫!n”); } else { /*數(shù)據(jù)庫連接成功*/ if(mysql_query(&mysql,“select * from tb_book”)) { //如果查詢失敗 printf(“nt 查詢 tb_book 數(shù)據(jù)表失敗!n”); } else { result=mysql_store_result(&mysql);//獲得結(jié)果集 if(mysql_num_rows(result)!=NULL) { //有記錄的情況,只有有記錄取數(shù)據(jù)才有意義 printf(“t ════════════════════════════ n”); printf(“t 顯 示 所 有 圖 書 信 息 n”); printf(“t ════════════════════════════ n”); printf(“t圖書編號(hào) 圖書名 作者 出版社 n”); printf(“t-------------------------n”); while((row=mysql_fetch_row(result))) { //取出結(jié)果集中記錄 fprintf(stdout,“t %s %s %s %s n”,row[0],row[1],row[2],row[3]);//輸出這行記錄 } printf(“t ════════════════════════════ n”); } else { printf(“nt 沒有記錄信息!n”); } mysql_free_result(result); //釋放結(jié)果集 } mysql_close(&mysql); //釋放連接 } inquire(); /*詢問是否顯示主菜單*/ } void AddBook() /*添加圖書信息*/ { int rowcount; /*結(jié)果集中的行數(shù)*/ char id[10]; /*編號(hào)*/ char *bookname; char *author; char *bookconcern; char *sql; char dest[500] ={“ ”}; /*連接數(shù)據(jù)庫*/ if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0)) { printf(“nt 不能連接數(shù)據(jù)庫!n”); } else { /*數(shù)據(jù)庫連接成功,插入數(shù)據(jù)*/ printf(“t ════════════════════════════ n”); printf(“t 添 加 圖 書 信 息 n”); printf(“t ════════════════════════════ n”); if(mysql_query(&mysql,“select * from tb_book”)) { //如果查詢失敗 printf(“nt 查詢 tb_book 數(shù)據(jù)表失敗!n”); } else { result=mysql_store_result(&mysql);//獲得結(jié)果集 rowcount=mysql_num_rows(result);//獲得行數(shù) row=mysql_fetch_row(result); //獲取結(jié)果集的行 printf(“t 圖書編號(hào):”); scanf(“%s”,id); /*輸入圖書編號(hào)*/ sql=“insert into tb_book(ID,bookname,author,bookconcern)values(”; strcat(dest,sql); strcat(dest,“'”); strcat(dest,id); strcat(dest,“', '”); if(mysql_num_rows(result)!=NULL) { /*判斷輸入的編號(hào)是否存在*/ do { //存在相同編號(hào) if(!strcmp(id,row[0])) { // printf(“%s”,row[0]); printf(“nt 記錄存在,按任意鍵繼續(xù)!n”); getch(); mysql_free_result(result); /*釋放結(jié)果集*/ mysql_close(&mysql); /*釋放連接*/ inquire(); /*詢問是否顯示主菜單*/ return; } }while(row=mysql_fetch_row(result)); } bookname =(char*)malloc(50); author =(char*)malloc(50); bookconcern =(char*)malloc(50); //不存在相同的編號(hào) printf(“t 圖書名:”); scanf(“%s”,bookname); /*輸入圖書名*/ strcat(dest,bookname); /*將圖書編號(hào)追加到sql語句后面*/ printf(“t 作者:”); scanf(“%s”,author); /*輸入作者*/ strcat(dest,“', '”); strcat(dest,author); printf(“t 出版社:”); scanf(“%s”,bookconcern); /*輸入出版社*/ strcat(dest,“', '”); strcat(dest,bookconcern); strcat(dest,“')”); //printf(“%s”,dest); if(mysql_query(&mysql,dest)!=0) { fprintf(stderr,“t 不能插入記錄!”,mysql_error(&mysql)); } else { printf(“t 插入成功!n”); } mysql_free_result(result); //釋放結(jié)果集 } mysql_close(&mysql); //釋放連接 } inquire(); /*詢問是否顯示主菜單*/ } void ModifyBook() /*修改圖書信息*/ { char id[10]; /*結(jié)果集中的行數(shù)*/ char *sql; char dest[500] ={“ ”}; char dest1[500] ={“ ”}; char *bookname; char *author; char *bookconcern; if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0)) { printf(“t 不能連接數(shù)據(jù)庫!n”); } else { /*數(shù)據(jù)庫連接成功*/ // printf(“連接成功”); printf(“t 請(qǐng)輸入您想要修改的圖書編號(hào).”); scanf(“%s”,id); /*輸入圖書編號(hào)*/ sql = “select * from tb_book where id=”; strcat(dest,sql); strcat(dest,id); /*將圖書編號(hào)追加到sql語句后面*/ //printf(“%sn”,dest); /*查詢?cè)搱D書信息是否存在*/ if(mysql_query(&mysql,dest)) { //如果查詢失敗 printf(“n 查詢 tb_book 數(shù)據(jù)表失敗!n”); } else { result=mysql_store_result(&mysql);//獲得結(jié)果集 if(mysql_num_rows(result)!=NULL) { //有記錄的情況,只有有記錄取數(shù)據(jù)才有意義 printf(“t 發(fā)現(xiàn)記錄信息,是否顯示?(y/n)”); scanf(“%s”,ch); if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)/*判斷是否要顯示查找到的信息*/ { printf(“t ════════════════════════════ n”); printf(“t ***** 顯示圖書信息 ***** n”); printf(“t ════════════════════════════ n”); printf(“t圖書編號(hào) 圖書名 作者 出版社 n”); printf(“t-------------------------n”); while((row=mysql_fetch_row(result))) { //取出結(jié)果集中記錄 fprintf(stdout,“t %s %s %s %s n”,row[0],row[1],row[2],row[3]);//輸出這行記錄 } printf(“t ════════════════════════════ n”); } printf(“t Modify?(y/n)”); scanf(“%s”,ch); if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0) /*判斷是否需要錄入*/ { sql = “update tb_book set bookname= '”; strcat(dest1,sql); // printf(“%s”,sql); bookname =(char*)malloc(20); author =(char*)malloc(20); bookconcern =(char*)malloc(20); printf(“t 圖書名:”); scanf(“%s”,bookname); /*輸入圖書名*/ strcat(dest1,bookname); // printf(“%s”,&bookname); printf(“t 作者:”); scanf(“%s”,author); /*輸入作者*/ strcat(dest1,“', author= '”); strcat(dest1,author); /*追加sql語句*/ printf(“t 出版社:”); scanf(“%s”,bookconcern); /*輸入出版社*/ strcat(dest1,“', bookconcern = '”); strcat(dest1,bookconcern); /*追加sql語句*/ strcat(dest1,“' where id= ”); strcat(dest1,id); //printf(“%s”,dest1); if(mysql_query(&mysql,dest1)!=0) { fprintf(stderr,“t 不能修改記錄!n”,mysql_error(&mysql)); } else { printf(“t 修改成功!n”); } } } else { printf(“t 沒有發(fā)現(xiàn)要修改的信息!n”); } } mysql_free_result(result); //釋放結(jié)果集 } mysql_close(&mysql); //釋放連接 inquire(); /*詢問是否顯示主菜單*/ } void DeleteBook() /*刪除圖書信息*/ { char id[10]; /*結(jié)果集中的行數(shù)*/ char *sql; char dest[100] ={“ ”}; char dest1[100] ={“ ”}; if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0)) { printf(“t 不能連接數(shù)據(jù)庫!n”); } else { printf(“t 請(qǐng)輸入您想要?jiǎng)h除的圖書編號(hào).”); scanf(“%s”,id); /*輸入圖書編號(hào)*/ sql = “select * from tb_book where id=”; strcat(dest,sql); strcat(dest,id); /*將圖書編號(hào)追加到sql語句后面*/ //printf(“%sn”,dest); /*查詢?cè)搱D書信息是否存在*/ if(mysql_query(&mysql,dest)) { //如果查詢失敗 printf(“n 查詢 tb_book 數(shù)據(jù)表失敗!n”); } else { result=mysql_store_result(&mysql);//獲得結(jié)果集 if(mysql_num_rows(result)!=NULL) { //有記錄的情況,只有有記錄取數(shù)據(jù)才有意義 printf(“t 發(fā)現(xiàn)記錄信息,是否顯示?(y/n)”); scanf(“%s”,ch); if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0)/*判斷是否要顯示查找到的信息*/ { printf(“t ════════════════════════════ n”); printf(“t ***** 顯示圖書信息 ***** n”); printf(“t ════════════════════════════ n”); printf(“t圖書編號(hào) 圖書名 作者 出版社 n”); printf(“t-------------------------n”); while((row=mysql_fetch_row(result))) { //取出結(jié)果集中記錄 fprintf(stdout,“t %s %s %s %s n”,row[0],row[1],row[2],row[3]);//輸出這行記錄 } printf(“t ════════════════════════════ n”); } printf(“t 是否刪除?(y/n)”); scanf(“%s”,ch); if(strcmp(ch,“Y”)==0||strcmp(ch,“y”)==0) /*判斷是否需要錄入*/ { sql = “delete from tb_book where ID= ”; printf(“%s”,dest1); strcat(dest1,sql); strcat(dest1,id); // printf(“%s”,dest1); if(mysql_query(&mysql,dest1)!=0) { fprintf(stderr,“t 不能刪除記錄!n”,mysql_error(&mysql)); } else { printf(“t 刪除成功!n”); } } } else { printf(“t 沒有發(fā)現(xiàn)要?jiǎng)h除的信息!n”); } } mysql_free_result(result); //釋放結(jié)果集 } mysql_close(&mysql); inquire(); /*詢問是否顯示主菜單*/ } void QueryBook() /*查詢圖書信息*/ { char id[10]; /*結(jié)果集中的行數(shù)*/ char *sql; char dest[100] ={“ ”}; if(!mysql_real_connect(&mysql,“127.0.0.1”,“root”,“111”,“db_books”,0,NULL,0)) { printf(“t 不能連接數(shù)據(jù)庫!n”); } else { printf(“t 請(qǐng)輸入您想要查詢的圖書編號(hào):”); scanf(“%s”,id); /*輸入圖書編號(hào)*/ sql = “select * from tb_book where id=”; strcat(dest,sql); strcat(dest,id); /*將圖書編號(hào)追加到sql語句后面*/ if(mysql_query(&mysql,dest)) { //如果查詢失敗 printf(“n 查詢 tb_book 數(shù)據(jù)表失敗!n”); } else { result=mysql_store_result(&mysql);//獲得結(jié)果集 if(mysql_num_rows(result)!=NULL) { //有記錄的情況,只有有記錄取數(shù)據(jù)才有意義 printf(“t ════════════════════════════ n”); printf(“t 顯示圖書信息 n”); printf(“t ════════════════════════════ n”); printf(“t圖書編號(hào) 圖書名 作者 出版社 n”); printf(“t-------------------------n”); while((row=mysql_fetch_row(result))) { //取出結(jié)果集中記錄 fprintf(stdout,“t %s %s %s %s n”,row[0],row[1],row[2],row[3]);//輸出這行記錄 } printf(“t ════════════════════════════ n”); } else { printf(“t 沒有發(fā)現(xiàn)要查詢的信息!n”); } mysql_free_result(result); //釋放結(jié)果集 } mysql_close(&mysql); //釋放連接 } inquire(); /*詢問是否顯示主菜單*/ } 說明部分 附加MySQL數(shù)據(jù)庫 將工程文件夾中的data文件夾下的db_books文件夾拷貝到本地Mysql數(shù)據(jù)庫安裝文件夾的data文件夾中。即可完成對(duì)數(shù)據(jù)庫的附加。 連接MySql的步驟 MySQL為C語言提供了連接數(shù)據(jù)庫的API,要想正常使用這些API,需要做以下兩件事情:(1)包含這些API的聲明文件,即mysql.h。 (2)讓編譯器找到這些API的可執(zhí)行程序,即DLL庫。下面介紹一下詳細(xì)的步驟: 1. 下面解決,讓編譯器找到mysql.h的問題。需要在編譯環(huán)境中作如下的設(shè)置: 在Visual C++ 6.0中,選擇Tools(工具)/Options(選項(xiàng))菜單項(xiàng),如下圖所示。 選擇菜單命令 即可打開Options對(duì)話框,在Options對(duì)話框中選擇Directories選項(xiàng)卡,在Show directories for下拉列表框中選擇Include files選項(xiàng),在Directiories列表框中添加本地安裝MySQL的include目錄路徑。如下圖所示。默認(rèn)的路徑應(yīng)該在C:Program FilesMySQLMySQL Server 5.0include。 添加mysql.h文件 通過上述設(shè)置,編譯器就可以知道MySQL的API接口中有哪些函數(shù),以及函數(shù)的原型是怎樣的。在編譯時(shí),所編寫的程序已經(jīng)能夠通過編譯(compile)這步了。 2.引入庫函數(shù) 經(jīng)過上一步的設(shè)置,程序已經(jīng)可以編譯通過了,但是編譯通過并不等于可以生成可執(zhí)行文件。還需要告訴編譯器這些API函數(shù)的可執(zhí)行文件在哪個(gè)DLL文件(libmysql.dll)中。 在工程中選擇Tools/Options菜單命令,將彈出Options對(duì)話框,在該對(duì)話框中選擇Directories選項(xiàng)卡,在Show directories for下拉列表框中選擇Include files選項(xiàng)。添加本地安裝的MySQL的Lib目錄路徑。默認(rèn)的安裝路徑是C:Program FilesMySQLMySQL Server 5.0libdebug 或者C:Program FilesMySQLMySQL Server 5.0libopt)。設(shè)置完成的效果如下圖所示。 引用庫 單擊OK按鈕,關(guān)閉Options對(duì)話框。選擇Project/Settings菜單命令。如下圖所示。 選擇Project/Settings菜單項(xiàng) 下面添加libmysql.lib到工程中。選擇Project/Settings菜單項(xiàng),將彈出Project Settings對(duì)話框,在該對(duì)話框中選擇Link選項(xiàng)卡。在Object/library modules文本框末尾添加libmysql.lib。如下圖所示。 添加libmysql.lib到工程中 最好將libmysql.lib以及l(fā)ibmysql.dll文件拷貝到工程的目錄下。設(shè)置完成后就可以運(yùn)行程序了程序運(yùn)行界面如下圖所示: C語言程序設(shè)計(jì) 實(shí)驗(yàn)報(bào)告 題 目: 圖書管理管理系統(tǒng) 院 系: 信息科技學(xué)院 專 業(yè): 姓 名: 學(xué) 號(hào): 指導(dǎo)教師: 楊呈勇 日 期: 09-09-18 問題定義 …………………………………………………………………………..3 2 系統(tǒng)設(shè)計(jì) ……………………………………………………………………3 2.1 總體設(shè)計(jì)………………………………………………………………………………4 2.2 詳細(xì)設(shè)計(jì)………………………………………………………………………………4 2.2.1 借書模塊 ……… ………………………………………………… 4 2.2.2 圖書維護(hù)………………………………………………………………………… 5 ① 新增記錄 …………………………………………………………………… 5 ② 更改系統(tǒng)…………………………………………….………………… 6 ③刪除系統(tǒng) …………………………………………… 6 ④ 查找系統(tǒng)……………………………………………….………………….6 ⑤ 顯示系統(tǒng) ………………………………………………………………….7 3 系統(tǒng)實(shí)現(xiàn) ………………………………………………………………………10 3.1 編碼 ………………………………………………………………………8 3.1.1 程序預(yù)處理 ……….……………………………………………………………9 3.1.2 主函數(shù)main()……….……………………………………………………….9 4 系統(tǒng)維護(hù) ………………………………………………………………………16 5 歸納總結(jié) ………………………………………………………………………16 5.1 開發(fā)經(jīng)驗(yàn) ………………………………………………………………………16 5.2 實(shí)訓(xùn)中遇到的問題及解決方法 ………………………………………………16 5.3 設(shè)計(jì)中的不足之處……………………………………………………………………16 5.4 感想和心得體會(huì) ……………………………………………………………………16 圖書管理系統(tǒng) 本題目設(shè)計(jì)目的是訓(xùn)練學(xué)生的基本編程能力,了解管理信息系統(tǒng)的開發(fā)流程,熟悉C語言的文件和單鏈表的各種基本操作。本程序中涉及結(jié)構(gòu)體、單鏈表、文件及各種語句的運(yùn)用如for();switch();if….else等方面的知識(shí)。通過本程序的訓(xùn)練,使學(xué)生能對(duì)C語言的文件操作有一個(gè)更深刻的了解,初步掌握鏈表的一些結(jié)構(gòu)及構(gòu)成。掌握利用單鏈表存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)對(duì)學(xué)生成績(jī)管理的原理,為進(jìn)一步開發(fā)出高質(zhì)量的管理信息系統(tǒng)打下堅(jiān)實(shí)的基礎(chǔ)。 1、問題定義 圖書信息包括:編號(hào)、書名、作者名、分類號(hào)、出版單位、出版時(shí)間、庫存數(shù)量,價(jià)格等。試設(shè)計(jì)一圖書信息管理系統(tǒng),使之能提供以下功能:(1)系統(tǒng)以菜單方式工作 (2)圖書信息錄入功能(圖書信息用文件保存)(3)圖書信息瀏覽功能(4)圖書信息查詢功能 查詢方式:可以按書名,按作者名,按出版單位,按出版時(shí)間進(jìn)行查詢。(5)圖書信息的刪除與修改 在問題定義階段要考慮題目的可行性和需求分析,接下來進(jìn)入開發(fā)階段,完成系統(tǒng)設(shè)計(jì)和系統(tǒng)實(shí)現(xiàn)的任務(wù)。 2、系統(tǒng)設(shè)計(jì) 2.1 總體設(shè)計(jì) 采用模塊化的程序設(shè)計(jì)方法,即將較大的任務(wù)按照一定的原則分為一個(gè)個(gè)較小的任務(wù),然后分別設(shè)計(jì)各個(gè)小任務(wù)。需要注意的是劃分出來的模塊應(yīng)該相對(duì)獨(dú)立但又相關(guān),且容易理 解??梢杂媚K化層次結(jié)構(gòu)圖(即模塊圖)來分析其任務(wù)的劃分,一般從上到下進(jìn)行,最上面一層是主模塊,下面各層是其上一層模塊的逐步細(xì)化描述。 圖2.1 圖書管理系統(tǒng)功能模塊圖 ? ? ? ? 本圖書管理系統(tǒng)要求采用單鏈表實(shí)現(xiàn),如圖2.1所示,它由如下四大功能模塊組成: 借書模塊。通過輸入讀者的編號(hào)和圖書的編號(hào),查找到要該借的書,完成借書這一項(xiàng)任務(wù) 還書模塊。通過輸入讀者的編號(hào)和圖書的編號(hào),查找到要該還的書,完成還書這一項(xiàng)任務(wù) 圖書維護(hù)模塊。完成對(duì)圖書信息的維護(hù)。在此圖書管理系統(tǒng)中,它實(shí)現(xiàn)了對(duì)圖書信息的新曾、更改、刪除、查找和顯示操作,并將追加后的數(shù)據(jù)存入源數(shù)據(jù)文件。讀者維護(hù)模塊。一是實(shí)現(xiàn)對(duì)讀者記錄的存盤,即將讀者信息寫入數(shù)據(jù)文件中; 2.2 詳細(xì)設(shè)計(jì) 2.2.1 借書模塊 通過輸入讀者的信息和要借的書的編號(hào)。系統(tǒng)顯示相應(yīng)的內(nèi)容,若該文件中沒有數(shù)據(jù),系統(tǒng)會(huì)提示單鏈表為空,沒有任何讀者記錄或圖書操作,此時(shí),用戶應(yīng)選擇調(diào)用create()函數(shù),進(jìn)行讀者記錄的輸入,即完成在單鏈表1中添加記錄的操作。值得一提的是,這里的字符串和數(shù)值的輸入分別采用了函數(shù)來實(shí)現(xiàn),在函數(shù)中完成輸入數(shù)據(jù)任務(wù),并對(duì)數(shù)據(jù)進(jìn)行條件判斷,直到滿足條件為止,這樣一來,大大減少了代碼的重復(fù)和冗余,符合模塊化程序設(shè)計(jì)的特點(diǎn)。 2.2.2 還書模塊 還書模塊主要實(shí)現(xiàn)了在單鏈表中按讀者和圖書的編號(hào)查找滿足相關(guān)條件的借書記錄。在 用戶選擇4,調(diào)用查詢函數(shù)search()中,為指向保存了讀者信息的單鏈表的首地址的指針變量。為了遵循模塊化編程的原則,我們將在單鏈表中進(jìn)行的指針定位操作,設(shè)計(jì)一個(gè) int retbook(int bookid) { for(int i=0;i { if(borbook[i]==bookid) { borbook[i]=0; return 1; } } return 0; } //讀出讀者信息 void disp() { cout << setw(5)<< no < for(int i=0;i if(borbook[i]!=0) cout << borbook[i] << “|”; cout << “]”< } }; 若沒有該記錄,則顯示無此記錄,返回到上一操作。 2.2.3 圖書維護(hù)模塊 此模塊主要實(shí)現(xiàn)了對(duì)圖書記錄的新增、更改、刪除、查找和顯示操作。因?yàn)閳D書記錄是以單鏈表的結(jié)構(gòu)形式存儲(chǔ)的,所以這些操作都在單鏈表中完成。下面分別介紹著4個(gè)功能模塊。 ①新增記錄。該操作需要對(duì)單鏈表中目標(biāo)節(jié)點(diǎn)的數(shù)據(jù)域中的值進(jìn)行追加新增要輸入圖書的編號(hào)和書名,int addbook(int n,char *na) { Book *p=query(n); if(NULL==p) { top++; book[top].addbook(n,na); return 1; } return 0; } ②更改系統(tǒng)。該操作可以將原本錯(cuò)誤的圖書記錄更改,將之改為正確的記錄。首先輸入原來的記錄的圖書的編號(hào),在此之后輸入新的記錄的書名。 ③刪除系統(tǒng)。該操作可以將原本記錄得圖書信息,在不用之后選擇將此刪除的一種方法,在彈出的窗口輸入原來的圖書的編號(hào),就可以將之刪除。 ④ 查找系統(tǒng)。該操作可以幫助讀者快速找到將要借的圖書,只要輸入圖書的編號(hào),如果有這本書,就將顯示出。反之就會(huì)顯示不存在。Book *query(int bookid) { for(int i=0;i<=top;i++) if(book[i].getno()==bookid &&book[i].gettag()==0) { return &book[i]; } return NULL; } ⑤顯示系統(tǒng)。該操作可以顯示出圖書現(xiàn)在的信息。cout << “輸入圖書編號(hào):”< cin >> bookid; cout << “輸入圖書書名:”< cin >> bname; addbook(bookid,bname); break; case '2': cout << “輸入圖書編號(hào):”< cin >> bookid; b=query(bookid); if(b==NULL) { cout << “ 該圖書不存在 ”< break; } cout << “輸入新的書名:”< cin >> bname; b->setname(bname); break; case '3': cout <<“ 讀入圖書編號(hào):”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 該圖書不存在” << endl; break; } b->delbook(); break; case '4': cout << “ 讀入圖書編號(hào):”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 該圖書不存在”<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<“輸入錯(cuò)誤,請(qǐng)從新輸入:”; } } }cout << “輸入圖書編號(hào):”< cin >> bookid; cout << “輸入圖書書名:”< cin >> bname; addbook(bookid,bname); break; case '2': cout << “輸入圖書編號(hào):”< cin >> bookid; b=query(bookid); if(b==NULL) { cout << “ 該圖書不存在 ”< break; } cout << “輸入新的書名:”< cin >> bname; b->setname(bname); break; case '3': cout <<“ 讀入圖書編號(hào):”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 該圖書不存在” << endl; break; } b->delbook(); break; case '4': cout << “ 讀入圖書編號(hào):”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 該圖書不存在”<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<“輸入錯(cuò)誤,請(qǐng)從新輸入:”; } } } cout << “輸入圖書編號(hào):”< cin >> bookid; cout << “輸入圖書書名:”< cin >> bname; addbook(bookid,bname); break; case '2': cout << “輸入圖書編號(hào):”< cin >> bookid; b=query(bookid); if(b==NULL) { cout << “ 該圖書不存在 ”< break; } cout << “輸入新的書名:”< cin >> bname; b->setname(bname); break; case '3': cout <<“ 讀入圖書編號(hào):”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 該圖書不存在” << endl; break; } b->delbook(); break; case '4': cout << “ 讀入圖書編號(hào):”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 該圖書不存在”<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<“輸入錯(cuò)誤,請(qǐng)從新輸入:”; } } 3、系統(tǒng)實(shí)現(xiàn) 3.1 編碼 3.1.2 主函數(shù)main()include #include #include //輸入/輸出文件流類 #include using namespace std; //最多的讀者 const int Maxr=100; //最多的圖書 const int Maxb=100; //每位讀者最多借五本書 const int Maxbor=5; //圖書庫類,實(shí)現(xiàn)對(duì)圖書的維護(hù),查找,刪除等 class BDatabase { private: //圖書記錄指針 int top; //圖書記錄 Book book[Maxb]; public: //構(gòu)造函數(shù),將book.txt讀到book[]中 BDatabase() { Book b; top=-1; fstream file(“book.txt”,ios::in); while(1) { file.read((char *)&b,sizeof(b)); if(!file)break; top++; book[top]=b; } file.close(); } //全刪 void clear() { top=-1; } //增加圖書 int addbook(int n,char *na) { Book *p=query(n); if(NULL==p) { top++; book[top].addbook(n,na); return 1; } return 0; } //查找圖書 Book *query(int bookid) { for(int i=0;i<=top;i++) if(book[i].getno()==bookid &&book[i].gettag()==0) { return &book[i]; } return NULL; } //圖書庫維護(hù) void bookdata(); void disp() { for(int i=0;i<=top;i++) if(book[i].gettag()==0) book[i].disp(); } //析構(gòu)函數(shù),將book[]寫到book.txt文件中 ~BDatabase() { fstream file(“book.txt”,ios::out); for(int i=0;i<=top;i++) if(book[i].gettag()==0) file.write((char *)&book[i],sizeof(book[i])); file.close(); } }; void BDatabase::bookdata() { char choice; char bname[40]; int bookid; Book *b; while(choice!='0') { cout <<“nnnttt圖 書 維 護(hù) ”< cout<<“tt1 新 增n tt2 更 改ntt3 刪 除ntt4 查 找ntt5 顯 示ntt6 全 刪ntt0 退 出”< cin >> choice; switch(choice) { case '1': cout << “輸入圖書編號(hào):”< cin >> bookid; cout << “輸入圖書書名:”< cin >> bname; addbook(bookid,bname); break; case '2': cout << “輸入圖書編號(hào):”< cin >> bookid; b=query(bookid); if(b==NULL) { cout << “ 該圖書不存在 ”< break; } cout << “輸入新的書名:”< cin >> bname; b->setname(bname); break; case '3': cout <<“ 讀入圖書編號(hào):”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 該圖書不存在” << endl; break; } b->delbook(); break; case '4': cout << “ 讀入圖書編號(hào):”< cin >> bookid; b=query(bookid); if(b==NULL) { cout <<“ 該圖書不存在”<< endl; break; } b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<“輸入錯(cuò)誤,請(qǐng)從新輸入:”; } } } //main()函數(shù)的實(shí)現(xiàn),程序的主界面的引導(dǎo) int main() { char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!='0') { cout < cout <<“ttt1 借 書nnttt2 還 書 nnttt3 圖 書 維 護(hù)nnttt4 讀 者 維 護(hù)nnttt0 離 開”< cin >> choice; switch(choice) { case '1': cout <<“ 借書 讀者編號(hào):”; cin >>readerid; cout <<“ 圖書編號(hào): ”; cin >>bookid; //按編號(hào)查找 r=ReaderDB.query(readerid); if(NULL==r) { cout <<“ 不存在該讀者,不能借書”<< endl; break; } b=BookDB.query(bookid); if(b==NULL) { cout <<“ 不存在該圖書,不能借書”<< endl; break; } if(b->borrowbook()==0) { cout << “ 該圖書已借出,不能借書”<< endl; break; } r->borrowbook(b->getno()); break; case '2': cout<<“還書n 讀者編號(hào):”; cin >>readerid; cout << “ 圖書編號(hào):”; cin >>bookid; r=ReaderDB.query(readerid); if(r==NULL) { cout <<“ 不存在該讀者,不能還書” << endl; break; } b=BookDB.query(bookid); if(b==NULL) { cout <<“ 不存在該圖書,不能還書” < break; } b->retbook(); r->retbook(b->getno()); break; case '3': BookDB.bookdata(); break; case '4': ReaderDB.readerdata(); break; default:cout<<“輸入錯(cuò)誤,請(qǐng)從新輸入:”; 4、系統(tǒng)維護(hù) 經(jīng)測(cè)試與調(diào)試確認(rèn)軟件無錯(cuò)時(shí),開發(fā)就告一段落,這時(shí)可以交付軟件供用戶使用,但是在軟件的使用過程中還會(huì)面臨更加漫長(zhǎng)的工作,即軟件維護(hù)。一般維護(hù)的工作有:更改使用中發(fā)現(xiàn)的錯(cuò)誤;為適應(yīng)實(shí)際環(huán)境而對(duì)程序進(jìn)行修改;為滿足新的需求而對(duì)程序作必要的改進(jìn)等等。 5、歸納總結(jié) 5.1 開發(fā)經(jīng)驗(yàn) 通過對(duì)本題目的開發(fā),體會(huì)到要掌握以下幾點(diǎn)內(nèi)容。 ? 大程序的設(shè)計(jì)風(fēng)格。按“自頂向下,逐步細(xì)化,模塊化”的方法進(jìn)行程序設(shè)計(jì)。? 編寫主函數(shù),并進(jìn)行測(cè)試與調(diào)試。當(dāng)被調(diào)函數(shù)又需要調(diào)用其他函數(shù)時(shí),也要遵循逐步細(xì)化的原則。C語言提供豐富的庫函數(shù),編程序時(shí)要善于使用庫函數(shù),避免不必要的勞動(dòng)。? 定義函數(shù)時(shí),應(yīng)選好參數(shù)的個(gè)數(shù)和數(shù)據(jù)類型。? 文件使用方法。文件使用完畢后應(yīng)及時(shí)關(guān)閉。 5.2 實(shí)訓(xùn)中遇到的問題及解決方法 在實(shí)訓(xùn)過程中,我遇到許多的問題,比如有些語句有語法錯(cuò)誤,表達(dá)式不正確,或缺少}或;等。或者是沒有宏定義,申明某些變量。這些都比較容易解決。通過查閱課本和請(qǐng)教同學(xué),在經(jīng)過WIN-TV編譯,知道哪有錯(cuò)誤就改一下就行。比較嚴(yán)重的是,我的代碼在求解平均成績(jī)和總分時(shí)沒有錄入,且亂碼。自已改了很久,也在網(wǎng)上查詢但是都不行。最后在老師的幫助下及查閱有關(guān)資料,把代碼改出來了。 5.3 設(shè)計(jì)中尚存的不足之處 關(guān)于這次的程序,也有挺多不足的地方。首先,我覺得程序還不夠完善,比如沒有排序前和排序后的學(xué)生記錄輸出結(jié)果顯示和有些程序功能沒有滿足所給題目要求及好幾項(xiàng)都沒有顯示出學(xué)生具體的信息,甚至有些地方有點(diǎn)亂;其次,有些地方好像功能有點(diǎn)重復(fù)了,且編寫的代碼有重復(fù);最后,就是該程序界面不夠美觀大方,有些文件不能鏈接。 5.4 感想和心得體會(huì) 通過這次實(shí)訓(xùn),我感觸甚深,要把所學(xué)的理論知識(shí)運(yùn)用于解決實(shí)際問題不僅要付出艱辛的勞動(dòng),還得要有科學(xué)的方法和堅(jiān)持不懈的努力。加上我們只是學(xué)了一個(gè)學(xué)期的c語言,我們所學(xué)的知識(shí)還不足以獨(dú)立編寫程序代碼。但是我認(rèn)為只要我們認(rèn)真的去學(xué)去做,我們會(huì)受益非淺。這次實(shí)訓(xùn)讓我進(jìn)一步理解了“編程是什么”,“如何去編程”,“編程的目的又是什么”,??發(fā)現(xiàn)自己的知識(shí)竟是如此貧乏,頓時(shí)感到了壓力的存在,從而也激發(fā)了我的學(xué)習(xí)熱情。它會(huì)成為我今后不斷進(jìn)取、永不懈怠的動(dòng)力。 在整個(gè)實(shí)訓(xùn)過程中,老師給了我很大的幫助,使我由不了解怎樣運(yùn)用鏈表到逐漸懂得鏈表的結(jié)構(gòu)及初步掌握鏈表結(jié)構(gòu)。還重新復(fù)習(xí)了一些語句的使用,比如for(0;switch();if….elser();結(jié)構(gòu)體的使用;枚舉等。而且我能夠堅(jiān)持虛心的向老師以及同學(xué)請(qǐng)教問題。它使我明白了虛心好學(xué)的重要性,更讓我懂得了如何跟老師同學(xué)去相處、去溝通。沒有老師和同學(xué)們的無私幫助,我不可能圓滿完成這次實(shí)訓(xùn)任務(wù)。非常感謝幫助過我的所有老師和同學(xué)們,在此,謹(jǐn)向他們一并表示感謝!我開始喜歡這個(gè)程序設(shè)計(jì)了,尤其覺得它是很有挑戰(zhàn)性的,是對(duì)知識(shí)點(diǎn)扎實(shí)程度的考察,也是對(duì)個(gè)人能力的考察,還是對(duì)個(gè)人化毅力的考驗(yàn)。它讓我明白做任何事都不應(yīng)該輕易放棄。這樣的課程設(shè)計(jì),既有利于教學(xué),又可以教會(huì)學(xué)生書本以外的很多知識(shí)?,F(xiàn)在我對(duì)它越來越感興趣,今后我會(huì)更加關(guān)注C語言程序,把C語言學(xué)好。希望老師以后多多指導(dǎo),給予一定的幫助! 軟件工程課設(shè)報(bào)告 題 目:軟件工程課設(shè)管理系統(tǒng) ——需求分析報(bào)告 學(xué)生姓名:王星 學(xué) 號(hào):1176807448 專 業(yè):計(jì)算機(jī)4班 指導(dǎo)教師:趙宇紅 文檔名稱: 需求分析報(bào)告 項(xiàng)目名稱: 軟件工程課設(shè)管理系統(tǒng) 項(xiàng)目負(fù)責(zé)人:王星 編寫: 完成日期: 2014.6.19 審核: 開發(fā)單位: 王星 薛浩楠 軟件工程課設(shè)管理系統(tǒng)小組 目錄 需求分析報(bào)告...................................................................................................................................4 一.引言...................................................................................................................................4 1.編寫目的:...................................................................................................................4 2.背景及范圍:.................................................................................................................4 3.名詞定義:...................................................................................................................4 4.參考資料:...................................................................................................................5 二、任務(wù)概述...........................................................................................................................5 1.目標(biāo):.........................................................................................................................5 2.系統(tǒng)功能劃分:...........................................................................................................6 3.安全性:.......................................................................................................................6 三、具體需求分析...................................................................................................................6 1.系統(tǒng)流程圖:.............................................................................................................6 2.數(shù)據(jù)流圖:...................................................................................................................8 3.數(shù)據(jù)字典:...................................................................................................................8 需求分析報(bào)告 一.引言 隨著計(jì)算機(jī)的普及,人們對(duì)計(jì)算機(jī)的認(rèn)識(shí)及需求有了明顯的增加。計(jì)算機(jī)對(duì)于大量信息的管理的優(yōu)勢(shì)更是顯而易見。有了這個(gè)軟件工程課程設(shè)計(jì)管理系統(tǒng),學(xué)生與老師的工作任務(wù)就可能會(huì)事半功倍。1.編寫目的: 計(jì)算機(jī)專業(yè)的學(xué)生有90多名,而且隨著每年的擴(kuò)招,人數(shù)不斷的增加,每次軟件工程課程設(shè)計(jì)都采用手工操作,費(fèi)時(shí)費(fèi)力。為了解決這個(gè)問題,決定做一個(gè)軟件工程課程設(shè)計(jì)管理系統(tǒng),對(duì)每個(gè)學(xué)期選修軟件工程課程設(shè)計(jì)的學(xué)生基本情況作個(gè)統(tǒng)計(jì)。主要是學(xué)生從該系統(tǒng)中選題,填寫同組學(xué)生的姓名,學(xué)號(hào),班級(jí),組長(zhǎng)等基本情況;查詢自己的課程設(shè)計(jì)成績(jī)。老師通過該系統(tǒng)查看學(xué)生的選題情況,填寫學(xué)生的項(xiàng)目進(jìn)度情況,且給出學(xué)生的分?jǐn)?shù),這有利于老師教學(xué),及時(shí)了解學(xué)生的情況,提高教學(xué)質(zhì)量,減輕老師的工作量,改善原有的比較繁鎖的工作。2.背景及范圍: 名稱:軟件工程課程設(shè)計(jì)管理系統(tǒng) 任務(wù)的開發(fā)人員:楊宇飛,薛浩楠,王星,陳晶 開發(fā)軟件的單位:軟件工程課程設(shè)計(jì)管理系統(tǒng)小組 軟硬件設(shè)施:個(gè)人計(jì)算機(jī),JAVA,Acess數(shù)據(jù)庫,Windows 97/xp操作系統(tǒng) 決定開發(fā)軟件工程課程設(shè)計(jì)管理系統(tǒng),估價(jià)成本不高于1000元,二周交付使用。3.名詞定義: 實(shí)體:客觀世界中存在的且可互相區(qū)別的事物。聯(lián)系:客觀事物中的彼此之間的關(guān)系。屬性:實(shí)體或者聯(lián)系所具有的性質(zhì)。4.參考資料: 軟件工程基礎(chǔ) 湯淮 西安交通大學(xué)出版社 軟件工程------技術(shù),方法與環(huán)境 王立福,張世琨,朱冰 編著 北京大學(xué)出版社 軟件開發(fā)技術(shù) 倪秉營(yíng) 電子科技大學(xué)出版社 軟件工程 張權(quán)范 清華大學(xué)出版社 二、任務(wù)概述 該軟件工程課程設(shè)計(jì)管理系統(tǒng)軟件目前已有比較完善的管理與使用功能。研制軟件工程課程設(shè)計(jì)管理系統(tǒng)軟件是為了滿足軟件工程教師與學(xué)生方便對(duì)課程的各種管理與操作。1.目標(biāo):(1)開發(fā)意圖: a.為了軟件工程課程管理系統(tǒng)更完善; b.為了軟件工程課程管理更方便; c.為了減輕軟件工程管理工作人員的工作負(fù)擔(dān);d.為了加強(qiáng)學(xué)院的正規(guī)化管理;(2)應(yīng)用目標(biāo): 通過本系統(tǒng)軟件,能幫助課程設(shè)計(jì)教師利用計(jì)算機(jī),快速方便的對(duì)課程進(jìn)行管理,上傳資料,填寫進(jìn)度報(bào)告,查找的所需操作。(3)產(chǎn)品描述: 本產(chǎn)品是一種工作在windows系統(tǒng)平臺(tái)的軟件,它是以Acess數(shù)據(jù)庫。(4)產(chǎn)品功能: 2.系統(tǒng)功能劃分: 使用該系統(tǒng)有三個(gè)角色教師,學(xué)生,客戶。教師可以查看學(xué)生選課情況,可以查看學(xué)生設(shè)計(jì)報(bào)告,填寫學(xué)生項(xiàng)目進(jìn)度情況,給出分?jǐn)?shù),修改密碼,上傳課程設(shè)計(jì)題目,學(xué)習(xí)資料。學(xué)生可以查看選課情況和成績(jī),選課??蛻糁豢梢詾g覽選課信息。 2.系統(tǒng)可分為5個(gè)模塊: (1)基本信息:教師和學(xué)生的信息包括教師號(hào),學(xué)生號(hào),教師開設(shè)的課程設(shè)計(jì)的題目,學(xué)生選的課程設(shè)計(jì)題目,項(xiàng)目進(jìn)度和分?jǐn)?shù)。(2)選課:顯示教師開設(shè)的課程設(shè)計(jì)題目,實(shí)現(xiàn)學(xué)生選課。 (3)查詢:學(xué)生查詢可選題,自己選題情況,自己課程設(shè)計(jì)成績(jī)。教師查詢學(xué)生選題情況,學(xué)生設(shè)計(jì)報(bào)告。 (4)修改:教師填寫項(xiàng)目進(jìn)度情況和給出分?jǐn)?shù),學(xué)生填寫同組的其他同學(xué)的姓名,學(xué)號(hào),班級(jí),小組長(zhǎng),修改結(jié)果存入相應(yīng)數(shù)據(jù)庫等。 (5)密碼:教師和學(xué)生可以修改自己的登陸密碼,結(jié)果保存用戶信息數(shù)據(jù)庫。3.安全性: 設(shè)立三種級(jí)別的用戶:Student,Teacher,Guest,對(duì)每種類型的用戶設(shè)置不同的權(quán)限。 Student:查詢分?jǐn)?shù),課程設(shè)計(jì)報(bào)告上傳功能 Teacher:提供對(duì)系統(tǒng)的實(shí)際操作功能 Guest: 提供信息瀏覽功能 三、具體需求分析 1.系統(tǒng)流程圖: 學(xué)生登陸教師登陸驗(yàn)證學(xué)生身份驗(yàn)證教師身份驗(yàn)證成功驗(yàn)證成功修改密碼查詢選課信息查詢選課上傳資料與設(shè)計(jì)題目查看設(shè)計(jì)報(bào)告查看選題情況修改密碼學(xué)生信息數(shù)據(jù)庫選課給出分?jǐn)?shù)和填寫進(jìn)度情況教師信息數(shù)據(jù)庫課程設(shè)計(jì)報(bào)告上傳填寫同組人員信息選課數(shù)據(jù)庫客戶登陸客戶瀏覽 圖3.1系統(tǒng)流程圖 2.數(shù)據(jù)流圖: 客戶用戶信息數(shù)據(jù)庫選題數(shù)據(jù)庫用戶學(xué)號(hào)與密碼顯示修改密碼上傳確定選題驗(yàn)證口令題目與有關(guān)資料課程設(shè)計(jì)題目數(shù)據(jù)庫登陸教師顯示登陸成員列表驗(yàn)證口令填寫進(jìn)度表顯示選課學(xué)生小組成員信息核對(duì)填寫同組人員信息教工號(hào)和密碼進(jìn)度數(shù)據(jù)庫工作報(bào)告表課程設(shè)計(jì)報(bào)告修改密碼用戶設(shè)計(jì)報(bào)告表給出分?jǐn)?shù)上傳學(xué)生信息數(shù)據(jù)庫成績(jī)數(shù)據(jù)庫顯示 圖3.2數(shù)據(jù)流圖 3.數(shù)據(jù)字典: 數(shù)據(jù)流描述: 數(shù)據(jù)流名:用戶名密碼 數(shù)據(jù)來源:用戶登陸處理 數(shù)據(jù)去向:驗(yàn)證信息處理。說明:用戶輸入用戶名和密碼 數(shù)據(jù)組成:用戶名+密碼 數(shù)據(jù)流量:小 數(shù)據(jù)流名:直接登陸 數(shù)據(jù)來源:用戶登陸處理 數(shù)據(jù)去向:客戶界面 說明:普通用戶不輸入用戶名和密碼直接以客戶身份登陸 數(shù)據(jù)流名:登陸 數(shù)據(jù)來源:驗(yàn)證信息處理正確 數(shù)據(jù)去向:根據(jù)驗(yàn)證信息返回條件決定是教師界面還是學(xué)生界面 說明:系統(tǒng)登陸到教師界面。數(shù)據(jù)流名:選題,資料 數(shù)據(jù)來源:教師界面的輸入選題和資料窗口 數(shù)據(jù)去向:上傳處理 說明:教師輸入要上傳的課題和資料 數(shù)據(jù)流名:小組成員信息 數(shù)據(jù)來源:選課信息界面 數(shù)據(jù)去向:驗(yàn)證填寫信息處理 說明:學(xué)生填寫同組其他同學(xué)姓名,學(xué)號(hào),班級(jí),小組長(zhǎng)名。數(shù)據(jù)流名:工作報(bào)告。數(shù)據(jù)來源:課題信息界面 數(shù)據(jù)去向:上傳處理 說明:學(xué)生將各階段工作報(bào)告上傳。數(shù)據(jù)流名:設(shè)計(jì)報(bào)告 數(shù)據(jù)來源:選題信息界面 數(shù)據(jù)去向:上傳處理 說明:學(xué)生填寫所選課題的設(shè)計(jì)報(bào)告上傳。第二篇:網(wǎng)站建設(shè)課設(shè)圖書管理系統(tǒng)(DOC)
第三篇:c語言圖書管理系統(tǒng)
第四篇:C語言程序設(shè)計(jì)圖書管理系統(tǒng)
第五篇:軟件工程課設(shè)管理系統(tǒng)——需求分析報(bào)告