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