




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、圖書銷售管理系統設計2一、設計要求2二、總體設計思路21.主要功能:系統主要包括八個功能模塊。32.總體思路框圖33.系統流程圖3三、主要參數和函數41.全局變量42.主要函數5四、程序調試及整體實現141.主菜單運行界面142.圖書信息錄入界面143.圖書信息瀏覽界面144.圖書查詢界面155.圖書信息修改界面166.圖書信息刪除界面167.圖書信息排序主界面178.購書清單界面17五、體會總結18附件19圖書銷售管理系統設計一、 設計要求1. 圖書信息包括:序號、書名、作者、出版單位、價格。2. 系統以菜單方式工作。v3. 圖書信息錄入功能(圖書信息用文件保存)輸入。v4. 圖書信息的刪除
2、與修改功能。5. 圖書信息瀏覽功能輸出。v6. 查詢功能算法:(按書名/作者查詢)。7. 排序功能算法:(按書名排序/按價格排序)。8. 圖書購買功能:統計選購圖書的總價,給出清單,屏幕輸出參考以下的實際購書單。二、 總體設計思路通過編譯一個c語言函數,其中包含一個主函數,多個子函數,主函數調用余的子函數實現人們能夠簡易、快捷的了解并找到自己所學要的信息的功能。1. 主要功能:系統主要包括八個功能模塊。1) 圖書信息的錄入:將所要錄入的圖書信息包括序號、書名、作者、出版社、價格等錄入一個文本文件中。每錄入一本書,系統提示是否繼續,若不繼續,則返回主界面。2) 圖書信息的查詢:將所有圖書信息包括
3、序號、書名、出版社、作者、價格等顯示在屏幕上,最后返回主界面。3) 圖書信息的查詢:通過輸入圖書名稱或作者完成圖書信息的查找,并在屏幕上顯示,返回主界面。4) 圖書信息的修改:通過輸入序號,判斷此圖書是否存在,若不存在則提示用戶重新輸入圖書序號,若存在則要求輸入要修改圖書的序號,對該圖書重新錄入信息。錄入后,提示是否繼續,如不繼續,則返回主界面。 5) 圖書信息的刪除:通過輸入序號,判斷此圖書是否存在,若存在, 則提示用戶是否顯示刪除后的信息,若不存在則提示用戶重新輸入圖書序號,刪除完畢后,返回主界面。6) 圖書信息的排序:通過輸入書名或價格,提示用戶輸入想要使用的排序方式,排序后的信息顯示在
4、屏幕上,返回主界面。7) 圖書的購買:通過輸入要購買的圖書序號,計算出總本書和總價格并連同其他購買信息一并顯示在屏幕上。8) 退出系統:返回主頁面。2. 總體思路框圖圖書銷售管理系統退出系統圖書信息排序圖書信息刪除圖書信息修改圖書信息查詢圖書購買清單圖書信息瀏覽圖書信息錄入圖1. 總體思路框圖3. 系統流程圖開始編譯運行打開文件數據讀入結構體中選擇調用不同函數執行退出main函數圖2. 系統流程圖三、 主要參數和函數1. 全局變量1) 定義一個存放圖書信息的結構體struct book,并定義此類型的變量struct book listn,用來表示圖書數組。struct book /*定義結構
5、體類型*/ int num; /*序號為整型*/ char name40; /*書名為字符串*/ char author20; /*作者為字符串*/ char publish50; /*出版社為字符串*/ float price; /*價格為浮點型*/ ;struct book listn; /*定義struct book類型的變量 list n個*/2) int count=0,定義全局變量,用來表示圖書的個數,初始值為0。2. 主要函數1) 主函數main(),控制整個系統的執行流程,使系統菜單可以循環執行。根據圖書館信息管理系統的要求,可設計一個主函數,及定義多個用戶自定義函數。通過將s
6、witch語句與break語句聯合使用來實現多分支選擇結構程序的設計。case1至case7分別實現不同的功能,并能返回主界面;case0直接返回主界面。程序代碼:void main() int choice1; printf( *n); printf( * 歡迎進入圖書銷售管理系統 *n); printf( *n); do printf(#); /*顯示菜單*/printf(功能選項: n);printf( 1 : 圖書信息錄入 n);printf( 2 : 圖書信息瀏覽 n);printf( 3 : 圖書信息查詢 n);printf( 4 : 圖書信息修改 n);printf( 5 : 圖
7、書信息刪除 n); printf( 6 : 圖書信息排序 n); printf( 7 : 圖書的購買 n);printf( 0 : 退出系統 n);printf(#);printf(t請選擇操作:); scanf(%d, &choice1); switch (choice1) /*菜單選擇*/ case 1 : input();break; case 2 : show_bookinformation(list); break ; case 3 : check_bookinformation (list); break ; case 4 : modify_bookinformation (lis
8、t); break ; case 5 :delete_bookinformation(list);break ; case 6 :reorder_bookinformation(list);break; case 7 :buytotal(list);break; case 0 :break ; while (choice1!=0); printf(謝謝! 歡迎下次使用使用!n);2) 打開數據文件函數open(),把文件的信息打開到一個結構體數組中。定義指向文件的指針讀取數據,若指針指向null,則顯示“無法操作,無文件信息!”,要調用fopen、fclose和fread函數。程序代碼:voi
9、d open() int i; file *fp; if(fp=fopen(book.txt,rb+)=null) printf(無法操作,無文件信息!n); exit(0); for(i=0;in;i+) if(fread(&listi,sizeof(struct book),1,fp)=0) printf(數據輸出失敗!n); exit(0); fclose(fp);3) 信息錄入文件函數read(),函數類型為void。定義指向文件的指針讀取數據,把輸入的圖書信息保存到文件中,若指針指向null,則輸出無法操作。利用for循環保存信息到指定文件。程序代碼:void read() int
10、i; file *fp; if(fp=fopen(book.txt,wr+)=null) printf(n不能打開文件!n); exit(0); for(i=0;in;i+) if(fwrite(&listi,sizeof(struct book),1,fp)!=1) printf(文件寫入錯誤!n); fclose(fp);4) 信息錄入系統函數input(),提供錄入圖書信息功能。在for循環下,一次提示用戶輸入圖書序號、書名、作者、出版社以及價格。每循環一次,提示用戶是否繼續,當選“1”時繼續輸入圖書信息,選“2”時返回主界面;每循環一次count自增1。程序代碼:void input(
11、) int i,k,j,t; for(j=0;listj.num!=0;j+) t=j+1; for(i=t;in;i+) printf(t請輸入您的圖書序號:); scanf(t%d,&listi.num); printf(t請輸入書名:); scanf(t%s,); printf(t請輸入作者:); scanf(t%s,listi.author); printf(t請輸入出版社:); scanf(t%s,listi.publish); printf(t請輸入價格:); scanf(t%f,&listi.price); fflush(stdin); printf(tn是否
12、繼續錄入?(1.是 2.否); scanf(%d,&k); if(k=2) break; count=i+1; read();5) 刪除圖書信息函數delete_bookinformation (struct book list),提供對圖書信息的刪除功能。此函數運行時利用open函數打開數據文件,讀取信息;利用for循環,當輸入序號與循環中的某一對應數據相同時,將后一個賦值給前一個從而把要刪除的圖書信息刪除掉。如果i=0,則直接輸出“圖書銷售系統沒有你要輸出的圖書信息!”。刪除后會顯示“刪除成功”,同時count自減1;最后還要執行read函數,重新記錄圖書信息。程序代碼:void dele
13、te_bookinformation (struct book list) int j,k,d,i=0; open(); printf(請輸入要刪除的圖書的序號:n); scanf(%d,&d); for(j=0;listj.num!=0;j+) if(listj.num=d) for(k=j;listk.num!=0;k+) listk=listk+1; i+; if(i=0) printf(圖書銷售系統沒有你輸入的圖書序號,請重新選擇輸入!n); else count=count-1; read(); printf(刪除成功n);6) 修改圖書信息函數modify_bookinformat
14、ion (struct book list),提供對圖書信息的修改功能。首先提示用戶輸入要修改的圖書序號,利用for循環找到要修改的list,系統提示用戶依次輸入修改后的圖書序號、圖書名、作者、出版社、價格。如果輸入的序號a為0,則提示“未發現您要找的書!”。輸入圖書序號查看是否存在此序號存在輸出;打開文件,重新寫入圖書信息t=0,不存在輸出失敗提示信息開始圖3. 修改函數流程圖程序代碼:void modify_bookinformation (struct book list) int j,k=0,number; open(); printf(t請輸入您要修改的圖書的序號:); scanf(
15、%d,&number); for (j=0;listj.num!=0;j+) if (listj.num=number) printf(nt請輸入您修改后的圖書信息:nn); printf(t請輸入您要修改的圖書的序號:); scanf(%d,&listj.num); printf(t請輸入您修改后的書名:); scanf(%s,); printf(t請輸入您修改后的作者名:); scanf(%s,listj.author); printf(t請輸入您修改后的出版社:); scanf(%s,listj.publish); printf(t請輸入您修改后的書的價格:); sc
16、anf(%f,&listj.price); read(); printf(n修改成功!); k+; if (k=0) printf(nnt找不到需要修改的圖書!);7) 圖書信息輸出函數show_bookinformation(struct book list),提供圖書信息輸出功能,瀏覽圖書信息。通過printf()語句將所有的圖書信息包括包括編號、書名、出版社、作者、價格等信息顯示在屏幕上。運用for語句加printf()實現圖書信息的循環輸出顯示。程序代碼:void show_bookinformation(struct book list)int i;open();printf(n*圖
17、書信息顯示*n);printf(圖書序號t圖書名t作者名t出版社t圖書價格n); for(i=0;listi.num!=0;i+) printf( %dtt%st%st%st%6.2fn,listi.num,, listi.author,listi.publish,listi.price); 8) 圖書信息查詢函數check_bookinformation (struct book list),提供用戶根據圖書書名或作者查詢圖書信息功能。通過printf()語句將所有的圖書信息包括包括編號、書名、出版社、作者、價格等信息顯示在屏幕上。運用for語句加printf()實現圖書
18、信息的循環輸出顯示。通過將switch語句與break語句聯合使用來實現多分支選擇結構。若選“1”實現按書名查詢;若選“2”實現按作者查詢。兩者代碼類似,都利用字符串操作,最后依次顯示查詢后的結果。程序代碼:void check_bookinformation (struct book list) /*查詢圖書信息*/int j,i,t,k=0;char c20,d20;printf(請輸入查詢方式:n 1.按書名查詢 2按作者查詢:n);scanf(%d,&t); if(t=1) open(); printf(請輸入要查詢的書名號:n); scanf(%s,c); printf(n *你想要
19、查詢的圖書信息(按作者名)* n); for(j=0;listj.num!=0;j+) if(strcmp(c,)=0) printf(圖書序號t圖書名t作者名t出版社t圖書價格n); printf( %dtt%st%st%st%6.2fn,listj.num,, listj.author,listj.publish,listj.price); k+; if(k=0) printf(n不存在你要查詢的圖書信息!n); if(t=2) open(); printf(請輸入要查詢的作者名:n); scanf(%s,d); for(i=0;listi.num!
20、=0;i+) if(strcmp(d,listi.author)=0) printf(圖書序號t圖書名t作者名t出版社t圖書價格n); printf( %dtt%st%st%st%6.2fn,listi.num,, listi.author,listi.publish,listi.price); k+; if(k=0) printf(n不存在你要查詢的圖書信息!n); 輸入圖書名稱/作者查找圖書名稱/作者是否存在存在顯示該圖書信息 不存在在提示不存在開始圖4. 查詢函數示意圖9) 圖書信息排序函數reorder_bookinformation(struct book lis
21、t),提供對圖書信息按書名和價格排序功能。排序共有兩種可選擇的方式,按書名排序和按價格排序。利用switch和break實現功能的選擇。按書名排序:利用選擇排序法和strcmp、strcpy函數在for循環下依次重新循環賦值,按字母的先后順序依次排序。如果定義的指針fp指向null則顯示“cant open the file!”,再利用for循環向屏幕輸出排序后的全部圖書信息,最后要返回主界面。按價格排序:價格按大小排序。利用冒泡排序法,在for循環下依次重新循環賦值,再利用for循環向屏幕輸出排序后的全部圖書信息,最后返回主界面。程序代碼:void reorder_bookinformati
22、on(struct book list)int i,j,a,k;struct book t;file *fp;char temp40;open();printf(n請選擇排序方式n1-書名(按字母順序)n2-價格(按從高到低)n);scanf(%d,&a);switch(a)case 1: for(i=0;icount-1;i+) k=i; for(j=i+1;j0) k=j; if(k!=i) strcpy(temp,); strcpy(,);strcpy(,temp); if(fp=fopen(book.txt
23、,w)=null) printf(cant open the file!n); exit(0); printf(新序列為:n); for(j=0;jcount;j+) printf(圖書序號t圖書名t作者名t出版社t圖書價格n); printf( %dtt%st%st%st%6.2fn,listj.num,, listj.author,listj.publish,listj.price); read();break;case 2:for(k=0;listk.num!=0;k+) for(j=0;listj.num!=0;j+) if(listj.pricelistj+1.p
24、rice) t=listj;listj=listj+1;listj+1=t; for(j=0;listj.num!=0;j+) printf(圖書序號t圖書名t作者名t出版社t圖書價格n); printf( %dtt%st%st%st%6.2fn,listj.num,, listj.author,listj.publish,listj.price); k+; read(); break; 10) 圖書購買清單函數buytotal(struct book list),提供統計選購圖書的總價,給出清單的功能。用戶輸入所購圖書的序號,輸入“0”時結束,系統利用for循環,當輸入序
25、號與系統內所存序號相同時,價格相加賦新值,書本數同時計數。最后打印出想要的清單。程序代碼: void buytotal(struct book list) int k,m,n,q,r,t=0; float sum=0; char e50,f50,l50,o50,p50; printf(n *n); printf(n 人民郵電出版社樣書清單 n); printf(n *n); printf( 請輸入所購各圖書的序號(輸入0 結束):n); scanf(%d,&q); do for(r=0;rcount;r+) if(q=listr.num) sum=sum+listr.price; t+; sc
26、anf(%d,&q); while(q!=0); printf( 合計發書:%dn,r); printf( 收書單位:); scanf(%s,e); printf( 發書依據:); scanf(%s,f); printf( 價格:%.2fn,sum); printf( 郵政編碼:); scanf(%d,&k); printf( 收貨地址:); scanf(%s,l); printf( 聯系電話:); scanf(%d,&m); printf( 制單日期:); scanf(%d,&n); printf( 貨運公司:); scanf(%s,o); printf( 驗書人:); scanf(%s,p
27、);四、 程序調試及整體實現1. 主菜單運行界面連接,檢錯完畢后,運行程序,開始進入主菜單。結果顯示如下:圖5. 主菜單界面2. 圖書信息錄入界面在主菜單上選擇“1”,根據提示錄入圖書信息。屏幕顯示如下:圖6. 圖書信息錄入界面3. 圖書信息瀏覽界面在主菜單上選擇“2”,顯示以下全部圖書信息并回到主界面。圖7. 圖書信息瀏覽界面4. 圖書查詢界面在主菜單上選擇“3”,然后根據提示選擇查詢方式。選擇“1”時,若圖書名存在,則顯示以下全部圖書信息并回到主界面。圖8. 按書名圖書查詢界面選擇“2”時,若圖書作者存在,則顯示以下全部圖書信息并回到主界面。圖9. 按作者圖書查詢界面5. 圖書信息修改界面
28、在主界面上選擇“4”, 若圖書序號存在,根據提示輸入修改信息,顯示以下結果:圖10. 圖書信息修改界面在主菜單上選擇“2”,顯示修改后的信息。6. 圖書信息刪除界面 在主菜單上選擇“5”,然后根據提示選擇刪除的圖書序號。若圖書序號存在,則刪除選擇結果如下:圖11. 圖書信息刪除界面在主菜單上選擇“2”,顯示刪除后的信息。下圖為刪除后的信息:圖12. 刪除后結果7. 圖書信息排序主界面在主菜單上選擇“6”,然后根據提示選擇排序方式。選擇“1”時,按書名排序(根據英文字母排序)。顯示結果為:圖13. 按書名排序結果選擇“2”,按價格排序(價格由高到低)。排序結果如下:圖14. 按價格排序結果8.
29、購書清單界面在主菜單上選擇“7”進入購書界面,選擇想購書的序號最后輸入“0”回車,即可顯示購書數量和總價,根據提示輸入相關信息完成清單。購書清單如下:圖15. 購書清單示例五、 體會總結通過這次課程設計,使我對c語言有了更進一步的認識和了解,要想學好它要重在實踐,要通過不斷的上機操作才能更好地學習它,我也發現我的好多不足之處,通過學習也有所改進;再有對c語言的一些標準庫函數不太了解,還有對函數調用的正確使用不夠熟悉,還有對c語言中經常出現的錯誤也不了解,所以后在學習過程中,我會更加注視實踐操作。 在課程設計過程中,收獲知識,提高能力的同時,我也懂得怎么樣去制定、實現計劃,課程設計是培養學生綜合
30、運用所學知識發現提出分析和解決實際問題鍛煉實踐能力的重要環節是對學生實際工作能力的具體訓練和考察過程.隨著科學技術發展的日新月異,自從拿到題目到完成整個編程,從理論到實踐,可以學到很多很多的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我們懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,在設計的過程中發現了自己的不足之處,對一些前面學過的知識理解得不夠深刻,掌握得不夠牢固,在設計中我們遇到了很多編程問題,運用的函數也是非常的復雜,所以設計程序一定要仔細,不容一點的馬虎。當然也有大問題,關于
31、文件的操作,是我們最大的問題。要有模塊化思維能力 ,就是編寫任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作。同時,我也認識到團隊合作的力量,編程中遇到很多問題,但是通過和同學的交流學習,改正了自身的不少缺陷,獲益匪淺。附件/*定義結構體*/#include stdafx.h#include string.h#include stdlib.h#define n 100 /*定義圖書總容量為100*/int count=0; /*定義
32、全局變量,用來表示圖書的個數*/struct book /*定義結構體類型*/ int num; /*序號為整型*/ char name40; /*書名為字符串*/ char author20; /*作者為字符串*/ char publish50; /*出版社為字符串*/ float price; /*價格為浮點型*/ ;struct book listn; /*定義struct book類型的變量 list n個*/void show_bookinformation(struct book list); /*聲明圖書信息瀏覽函數*/void check_bookinformation (st
33、ruct book list); /*聲明圖書信息查詢函數*/void modify_bookinformation (struct book list); /*聲明圖書信息修改函數*/void delete_bookinformation (struct book list); /*聲明圖書信息刪除函數*/void reorder_bookinformation(struct book list); /*聲明圖書信息排序函數*/void buytotal(struct book list); /*聲明圖書購買信息函數*/void read(); /*聲明數據讀入函數*/ void input
34、(); /*聲明圖書信息錄入函數*/ void open(); /*聲明數據信息打開函數*/*主函數*/void main() int choice1; printf( *n); printf( * 歡迎進入圖書銷售管理系統 *n); printf( *n); do printf(#); /*顯示菜單*/printf( 功能選項: n);printf( 1 : 圖書信息錄入 n);printf( 2 : 圖書信息瀏覽 n);printf( 3 : 圖書信息查詢 n);printf( 4 : 圖書信息修改 n);printf( 5 : 圖書信息刪除 n); printf( 6 : 圖書信息排序
35、n); printf( 7 : 圖書的購買 n);printf( 0 : 退出系統 n);printf(#);printf(t請選擇操作:); scanf(%d, &choice1); switch (choice1) /*菜單選擇*/ case 1 : input();break; case 2 : show_bookinformation(list); break ; case 3 : check_bookinformation (list); break ; case 4 : modify_bookinformation (list); break ; case 5 : delete_b
36、ookinformation(list); break ; case 6 : reorder_bookinformation(list);break; case 7 : buytotal(list);break; case 0 : break ; while (choice1!=0); printf(謝謝! 歡迎下次使用使用!n); /*打開文件函數*/void open() int i; file *fp; if(fp=fopen(book.txt,rb)=null) printf(無法操作,無文件信息!n); exit(0); for(i=0;in;i+) if(fread(&listi,
37、sizeof(struct book),1,fp)=0) printf(數據輸出失敗!n); exit(0); fclose(fp);/*錄入文件函數*/void read() int i; file *fp; if(fp=fopen(book.txt,wr)=null) printf(n不能打開文件!n); exit(0); for(i=0;in;i+) if(fwrite(&listi,sizeof(struct book),1,fp)!=1) printf(文件寫入錯誤!n); fclose(fp);/*錄入函數*/void input() int i,k,j,t; for(j=0;li
38、stj.num!=0;j+) t=j+1; for(i=0;in;i+) printf(t請輸入您的圖書序號:); scanf(t%d,&listi.num); printf(t請輸入書名:); scanf(t%s,); printf(t請輸入作者:); scanf(t%s,listi.author); printf(t請輸入出版社:); scanf(t%s,listi.publish); printf(t請輸入價格:); scanf(t%f,&listi.price); fflush(stdin); printf(tn是否繼續錄入?(1.是 2.否); scanf(%d,
39、&k); if(k=2) break; count=i+1; read();/*刪除函數*/void delete_bookinformation (struct book list) int j,k,d,i=0; open(); printf(請輸入要刪除的圖書的序號:n); scanf(%d,&d); for(j=0;listj.num!=0;j+) if(listj.num=d) for(k=j;listk.num!=0;k+) listk=listk+1; i+; if(i=0) printf(圖書銷售系統沒有你輸入的圖書序號,請重新選擇輸入!n); else count=count-
40、1; read(); printf(刪除成功n);/*修改函數*/void modify_bookinformation (struct book list) int j,k=0,number; open(); printf(t請輸入您要修改的圖書的序號:); scanf(%d,&number); for (j=0;listj.num!=0;j+) if (listj.num=number) printf(nt請輸入您修改后的圖書信息!nn); printf(t請輸入您要修改的圖書的序號:); scanf(%d,&listj.num); printf(t請輸入您修改后的書名:); scanf(%s,); printf(t請輸入您修改后的作者名:); scanf(%s,listj.author); printf(t請輸入您修改后的出版社:); scanf(%s,listj.publish); printf(t請輸入您修改后的書的價
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論