版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、軟件工程導論題目:圖書管理系統(tǒng)文檔名稱:編碼設計班級:科技0801項目組長:唐子龍項目成員:唐子龍(05082019)朱磊(05082025)趙欣(05082023)劉華?。?5082004)編碼設計1.根本任務依據(jù)軟件工程的基本原理,詳細設計階段的根本任務是確定應該怎樣具體實現(xiàn)所要求的系統(tǒng),也就是說,經(jīng)過這個階段的設計工作,應該得出對目標系統(tǒng)的精確描述,具體來說就是把經(jīng)過總體設計得到的各個模塊詳細的加以描述。2、總體設計需求概述錄入功能: 輸入相關(guān)數(shù)據(jù)瀏覽功能: 以列表方式列出所有記錄信息信息查詢功能: 根據(jù)書名匹配查詢,并將查詢結(jié)果列出借出歸還功能: 根據(jù)借出與歸還的書籍信息修改相應數(shù)據(jù)插
2、入與刪除功能:插入一條新的圖書信息,刪除某圖書的信息信息的備份與讀入功能:將輸入文件進行備份和從指定文件讀入數(shù)據(jù)設置訪問權(quán)限功能:只有輸入正確密碼才可以進行操作 否則無權(quán)操作系統(tǒng)結(jié)構(gòu)圖3、程序描述m1身份驗證功能:驗證身份性能:輸入項:預設密碼輸出項:歡迎語句算法: int keyword=111,a; printf(please input keyword:); scanf(%d,&a); if(a!=keyword) exit(0); else printf(welcome!);測試要求:運行正常。m2主菜單模塊功能:選擇功能性能:輸入項:數(shù)字0-9輸出項:對應功能項算法: int dis
3、play_mainmenu() /*顯示菜單的函數(shù)*/char x; do system(cls); printf(*n); printf(1.create booklistn); printf(2.display all booksn); printf(3.insert a bookinformationn); printf(4.delete a bookn); printf(5.borrow a bookn); printf(6.return a bookn); printf(7.queryn); printf(8.add records from a filen); printf(9.w
4、rite to a filen); printf(0.goodbyen); printf(*n); printf(please choose from 0-9:); printf(n); x=getchar(); while(x9); return(x-0);測試要求:運行正常。m3插入模塊功能:插入新信息性能:輸入項:書名 數(shù)量輸出項:成功提示算法: book *insert(book *head,book *s) /*插入結(jié)點的函數(shù)*/ book *p0,*p1,*p2; p1=head;p0=s; /*使p1指向第一個結(jié)點,p0指向要插入的結(jié)點*/ if(head=null) /*原來的
5、鏈表是空表*/ head=p0;p0-next=null; /*使p0作為首結(jié)點*/ while(strcmp(p0-name,p1-name)0&(p1-next!=null) p2=p1; p1=p1-next; if(strcmp(p0-name,p1-name)next=p1; if(head=p1) head=p0; else p2-next=p0; elsep1-next=p0;p0-next=null; return(head);book *insert_a_record(book *head) book *newrecord; newrecord=(book *)malloc(
6、len); /*動態(tài)分配存儲空間*/ scanf(%s%d,newrecord-name,&newrecord-all); newrecord-borrow=0; newrecord-left=newrecord-all; head=insert(head,newrecord); printf(insert successfullyn); /*輸出插入成功的信息*/ return(head);測試要求:運行正常。刪除模塊功能:刪除信息性能:輸入項:所刪書名輸出項:成功提示算法: book *delete(book *head,char *name) book *p1,*p2; if(head=
7、null) printf(sorry no record!n); p1=head; while(strcmp(p1-name,name)!=0&p1-next!=null) /*p1不是要找的結(jié)點,且后面還有結(jié)點*/ p2=p1;p1=p1-next; /*p1后移一個結(jié)點*/ if(strcmp(p1-name,name)=0) /*找到了*/ if(p1=head)head=p1-next; /*若p1為首指針,使下一結(jié)點為首指針*/ else p2-next=p1-next; /*否則將下一結(jié)點地址賦給前一結(jié)點地址*/ printf(delete %s successfullyn,nam
8、e); /*輸出刪除成功的信息*/ return(head);book *delete_a_record(book *head) char name20,ch; book *p; scanf(%s,name); getchar(); /*接收回車*/ p=query(head,name); if(p=null) printf(cannot find %sn,name); /*找不到結(jié)點*/ else printf(delete %s, y/n?n,name); ch=getchar(); system(pause); if(ch=y|ch=y) while(p!=null) head=dele
9、te(head,name); /*刪除所有與輸入相同的記錄*/ p=query(head,name); return(head);測試要求:運行正常。m5查詢模塊功能: 查詢功能性能:輸入項:查詢書名輸出項:相應書籍信息算法: book *query(book *head,char *name) book *p; p=head; while(strcmp(name,p-name)!=0&p-next!=null) p=p-next; if(strcmp(name,p-name)=0) /*找到了,返回結(jié)點地址*/ return(p); else /*找不到返回空指針*/ return(null
10、);void query_a_record(book *head) char name20; book *p; scanf(%s,name); p=query(head,name); if(p!=null) /*找到了*/ printf(find successfullyn%s total:%d left:%d borrow:%dn, p-name,p-all,p-left,p-borrow); else printf(cant find the records of %sn,name); /*找不到*/測試要求:運行正常。m6顯示功能功能: 顯示所有信息性能:輸入項:相應的菜單序號輸出項:所
11、有書籍信息算法: void display(book *head) book *p; int i; p=head; printf(num bookname total left borrown); for(i=1;p!=null;i+) printf(%-5d%-14s%-10d%-10d%-5dn, i,p-name,p-all,p-left,p-borrow); p=p-next; if(i%10=0) system(pause); /*按回車翻頁顯示*/ printf(num bookname total left borrown); 測試要求:運行正常。m7借出模塊功能:借出書籍性能:
12、輸入項:所借書名 數(shù)量輸出項:成功信息算法: book *borrow_a_book(book *head) char name20,ch; int n; book *p; scanf(%s%d,name,&n); getchar(); /*接收回車*/ p=query(head,name); if(p=null) printf(cannot find %sn,name); /*找不到結(jié)點*/ else printf(are you sure to borrow? %s, y/n?n,name); ch=getchar(); system(pause); if(ch=y|ch=y) head=
13、borrow(head,name,n); return(head);測試要求:運行正常。m8歸還模塊功能:歸還書籍性能:輸入項:所換書名 數(shù)量輸出項:成功提示算法: book *return_a_book(book *head) char name20,ch; int n; book *p; scanf(%s%d,name,&n); getchar(); /*接收回車*/ p=query(head,name); if(p=null) printf(cannot find %sn,name); /*找不到結(jié)點*/ else printf(are you sure to return? %s, y
14、/n?n,name); ch=getchar(); system(pause); if(ch=y|ch=y) head=return(head,name,n); return(head);book *return(book *head,char *name,int sum) book *p1; p1=head; while(strcmp(p1-name,name)!=0&p1-next!=null) /*p1不是要找的結(jié)點,且后面還有結(jié)點*/ p1=p1-next; /*p1后移一個結(jié)點*/ if(strcmp(p1-name,name)=0) /*找到了*/ p1-borrow=p1-bor
15、row-sum; p1-left=p1-left+sum; return(head);測試要求:運行正常。m9讀入模塊功能:從文件讀入信息性能:輸入項:文件名輸出項:成功提示算法: book *addfromtext(book *head,char *filename) file *fp; int n,i; if(fp=fopen(filename,r)=null) printf(cannot find file:%sn,filename); /*打不開所指定文件*/ return(head); fscanf(fp,%d,&n); /*待插入記錄個數(shù)*/ for(i=0;iname,&p-al
16、l,&p-left,&p-borrow); head=insert(head,p); /*插入結(jié)點*/ printf(add from %s successfullyn,filename); fclose(fp);return(head);測試要求:運行正常。m10備份模塊功能:數(shù)據(jù)備份性能:輸入項:所建文檔名輸出項:成功提示算法: book *writetotext(book *head,char *filename)file *fp;book *p; if(head=null) printf(no record!n); return(head); fp=fopen(filename,w);
17、 /*打開文件*/ p=head; while(p!=null) fprintf(fp,%-14s%-10d%-10d%-10dnn,p-name,p-all,p-left,p-borrow); /*文件輸出*/ p=p-next; printf(write to %s successfullyn,filename); /*輸出寫到文件完畢的信息*/ fclose(fp); return(head);測試要求:運行正常。m11退出模塊功能:退出程序性能:輸入項:數(shù)字0輸出項:再見語句算法: void quit(book *head)book *p,*p1,*p2;file *fp; char
18、filename=last; p2=p1=head; if(head!=null) fp=fopen(filename,w); /*打開文件*/ p=head; while(p!=null) fprintf(fp,%s %d %d %dn,p-name,p-all,p-left,p-borrow); /*文件輸出*/ p=p-next; printf(write to %s successfullyn,filename); /*輸出寫到文件完畢的信息*/ fclose(fp); while(p1!=null) /*p1指向的結(jié)點不是空指針*/ p2=p1-next; free(p1); /*釋
19、放存儲空間*/ p1=p2; /*p1后移一個結(jié)點*/ 測試要求:運行正常。五、測試報告1、引言編寫目的:測試圖書館管理系統(tǒng)軟件的各項功能是否符合預期要求。本報告讀者為軟件設計者。項目背景:該軟件由學生個人設計,無開發(fā)部門和主管部門,主要供學生練習使用。該軟件獨立于其它軟件系統(tǒng)。參考資料: 萬曉東 施玉霞 等著軟件技術(shù)基礎(chǔ)教程09年7月 譚浩強 著c語言程序設計 第三版 張志航 王珊珊等 著程序設計語言c 07年9月2、測試計劃執(zhí)行情況權(quán)限功能測試數(shù)據(jù):輸入正確密111測試結(jié)果:成功進入主界面,說明本模塊功能正常插入功能測試數(shù)據(jù):無測試結(jié)果:菜單顯示正常。本模塊功能正常。插入功能測試數(shù)據(jù):hi
20、story 100測試結(jié)果:調(diào)用顯示函數(shù)顯示結(jié)果。本模塊功能正常。刪除操作測試數(shù)據(jù):history 測試結(jié)果調(diào)用顯示函數(shù)顯示結(jié)果:輸出結(jié)果正確,說明本模塊功能正常。查詢模塊測試數(shù)據(jù):預輸入數(shù)據(jù) history 100 physics 200 查詢history測試結(jié)果:顯示結(jié)果 history 100 0 0說明本模塊運行正常。顯示模塊上述過程已經(jīng)對本功能進行了測試。結(jié)果:顯示模塊運行正常。借出模塊測試數(shù)據(jù):預輸入數(shù)據(jù) history 100 physics 200 調(diào)用借出函數(shù)借 history 50 maths 100測試結(jié)果 調(diào)用顯示函數(shù)顯示結(jié)果:歸還模塊測試數(shù)據(jù):預輸入數(shù)據(jù) histo
21、ry 100 physics 200 調(diào)用歸還函數(shù)還 history 50 測試結(jié)果:文件讀入模塊測試數(shù)據(jù):文本文檔 a.txt測試結(jié)果:調(diào)用顯示函數(shù)顯示結(jié)果測試結(jié)果正確。文件備份模塊測試數(shù)據(jù): 測試數(shù)據(jù)采用上一步寫入的數(shù)據(jù)測試結(jié)果退出模塊測試數(shù)據(jù): 無測試結(jié)果 成功退出程序 并生自動成備份文件 last.txt 退出模塊運行正常。3、評價結(jié)果軟件能力: 軟件各項功能復合預期,各子程序運行正常缺陷和限制:每次登陸后必須手工調(diào)入上一次的備份文件以恢復系統(tǒng)數(shù)據(jù),給操作者帶來不便建議: 完善系統(tǒng)的數(shù)據(jù)庫功能,提供安全可靠的數(shù)據(jù)保存功能。測試結(jié)論: 本軟件測試通過。附源程序代碼:#include#in
22、clude#include#include#define null 0#define len sizeof(book)struct a char name20; int all,left,borrow; struct a *next; ;typedef struct a book;int display_main_menu(); /*主菜單顯示*/book *create(); /*功能函數(shù)聲明*/ void display(book *head);book *insert(book *head,book *s);book *insert_a_record(book *head);book *
23、delete(book *head,char *name);book *delete_a_record(book *head);book *borrow(book *head,char *name,int sum);book *borrow_a_book(book *head);book *return(book *head,char *name,int sum);book *return_a_book(book *head);book *query(book *head,char *name); void query_a_record(book *head);book *addfromtex
24、t(book *head,char *filename);book *writetotext(book *head,char *filename); void quit(book *head);void main() /*主函數(shù)部分*/book *head; /*定義變量*/ char filename20; int keyword=111,a; printf(please input keyword:); scanf(%d,&a); if(a!=keyword) exit(0); else printf(welcome!); head=null; /*置首指針為空*/ for(;) swit
25、ch(display_mainmenu() case 1:printf(1.create booklistn); /*調(diào)用create函數(shù)創(chuàng)建鏈表*/ head=create(); system(pause); break; case 2:printf(display all booksn); display(head); /*調(diào)用display函數(shù)顯示所有*/ system(pause);break; case 3:printf(insert a recordn); head=insert_a_record(head);/*調(diào)用insert_a_record函數(shù)插入*/ system(pau
26、se);break; case 4:printf(delete a bookn); head=delete_a_record(head);/*調(diào)用delete_a_record函數(shù)刪除*/ system(pause);break; case 5:printf(borrow a bookninput bookname and sum you borrow:); head=borrow_a_book(head); system(pause);break; case 6:printf(return a bookninput bookname and sum you return:); head=re
27、turn_a_book(head); system(pause);break; case 7:printf(queryninput the bookname you want:); query_a_record(head);/*調(diào)用查詢函數(shù)*/ system(pause);break; case 8:printf(input the name of text filen); scanf(%s,filename);/*輸入文件名*/ head=addfromtext(head,filename); system(pause);break; case 9:printf(input the name
28、 of the newtext filen); scanf(%s,filename);/*輸入要寫入的文件名*/ head=writetotext(head,filename); system(pause);break; case 0:printf(goodbyen); quit(head); exit(0); int display_mainmenu() /*顯示菜單的函數(shù)*/char x; do system(cls); printf(*n); printf(1.create booklistn); printf(2.display all booksn); printf(3.insert
29、 a bookinformationn); printf(4.delete a bookn); printf(5.borrow a bookn); printf(6.return a bookn); printf(7.queryn); printf(8.add records from a filen); printf(9.write to a filen); printf(0.goodbyen); printf(*n); printf(please choose from 0-9:); printf(n); x=getchar(); while(x9); return(x-0);book *
30、create() /*創(chuàng)建鏈表的函數(shù),返回首指針*/book *head,*newrecord; char ch; printf(input a bookn); head=null;/*首指針置空*/ do newrecord=(book *)malloc(len); /*動態(tài)分配存儲空間*/ scanf(%s%d,newrecord-name,&newrecord-all); newrecord-left=newrecord-all; newrecord-borrow=0; head=insert(head,newrecord); /*調(diào)用insert函數(shù)判斷位置插入*/ getchar()
31、; / *接收最后輸入的回車符*/ printf(add another book y/n?n); ch=getchar(); getchar(); /*接收回車符*/while(ch!=n&ch!=n); /*判斷是否繼續(xù)*/ return(head);book *insert(book *head,book *s)/*插入結(jié)點的函數(shù)*/ book *p0,*p1,*p2; p1=head;p0=s; if(head=null) head=p0;p0-next=null; while(strcmp(p0-name,p1-name)0&(p1-next!=null) p2=p p1=p1-ne
32、xt; if(strcmp(p0-name,p1-name)next=p1; if(head=p1) head=p0; else p2-next=p0; elsep1-next=p0;p0-next=null; return(head);book *insert_a_record(book *head) book *newrecord; newrecord=(book *)malloc(len); /*動態(tài)分配存儲空間*/ scanf(%s%d,newrecord-name,&newrecord-all); newrecord-borrow=0; newrecord-left=newrecor
33、d-all; head=insert(head,newrecord); printf(insert successfullyn);/*輸出插入成功的信息*/ return(head);book *delete(book *head,char *name) /*刪除功能函數(shù)*/ book *p1,*p2; if(head=null) printf(sorry no record!n); p1=head; while(strcmp(p1-name,name)!=0&p1-next!=null) / p2=p1;p1=p1-next; if(strcmp(p1-name,name)=0) if(p1
34、=head)head=p1-next; else p2-next=p1-next; printf(delete %s successfullyn,name); return(head);book *delete_a_record(book *head) char name20,ch; book *p; scanf(%s,name); getchar(); p=query(head,name); if(p=null) printf(cannot find %sn,name); else printf(delete %s, y/n?n,name); ch=getchar(); system(pau
35、se); if(ch=y|ch=y) while(p!=null) head=delete(head,name); p=query(head,name); return(head);book *borrow_a_book(book *head) char name20,ch; int n; book *p; scanf(%s%d,name,&n); getchar(); / p=query(head,name); if(p=null) printf(cannot find %sn,name); else printf(are you sure to borrow? %s, y/n?n,name
36、); ch=getchar(); system(pause); if(ch=y|ch=y) head=borrow(head,name,n); return(head);book *borrow(book *head,char *name,int sum) book *p1; p1=head; while(strcmp(p1-name,name)!=0&p1-next!=null) p1=p1-next; if(strcmp(p1-name,name)=0) p1-borrow=sum; p1-left=p1-all-sum; return(head);book *return_a_book(
37、book *head) char name20,ch; int n; book *p; scanf(%s%d,name,&n); getchar(); /*接收回車*/ p=query(head,name); if(p=null) printf(cannot find %sn,name); /*找不到結(jié)點*/ else printf(are you sure to return? %s, y/n?n,name); ch=getchar(); system(pause); if(ch=y|ch=y) head=return(head,name,n); return(head);book *ret
38、urn(book *head,char *name,int sum) book *p1; p1=head; while(strcmp(p1-name,name)!=0&p1-next!=null) /*p1不是要找的結(jié)點,且后面還有結(jié)點*/ p1=p1-next; /*p1后移一個結(jié)點*/ if(strcmp(p1-name,name)=0) /*找到了*/ p1-borrow=p1-borrow-sum; p1-left=p1-left+sum; return(head);void display(book *head) book *p; int i; p=head; printf(num
39、bookname total left borrown); for(i=1;p!=null;i+) printf(%-5d%-14s%-10d%-10d%-5dn, i,p-name,p-all,p-left,p-borrow); p=p-next; if(i%10=0) system(pause); /*按回車繼續(xù)顯示*/ printf(num bookname total left borrown); book *query(book *head,char *name) book *p; p=head; while(strcmp(name,p-name)!=0&p-next!=null) p=p-next; if(strcmp(name,p-name)=0) /*找到了,返回結(jié)點地址*/ return(p); else /*找不到返回空指針*/ re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度旅游景區(qū)停車場經(jīng)營管理權(quán)轉(zhuǎn)讓合同6篇
- 2025年度商業(yè)房產(chǎn)買賣及投資風險評估合同3篇
- 2025年兒童服飾電商平臺入駐合同3篇
- 大學學生實習報告模板合集6篇
- 2024年勞務協(xié)議書標準版本8篇
- 2024年健康醫(yī)療大數(shù)據(jù)分析合同補充協(xié)議模板3篇
- 2024年體育設施租賃及維護服務合同3篇
- 2025年人教A版四年級語文下冊月考試卷含答案
- 2024年版:租車公司駕駛員商業(yè)機密協(xié)議2篇
- 辦公空間智能化改造中的開關(guān)插座設計
- 一年級看圖寫話集錦省公開課獲獎課件說課比賽一等獎課件
- 化療后胃腸道反應護理
- 天津市武清區(qū)2024-2025學年九年級上學期11月期中物理試題(無答案)
- 山西省2024-2025學年九年級上學期11月期中考試化學試題
- 商業(yè)街招商運營年終總結(jié)
- 2023屆安徽省馬鞍山市高三第一次教學質(zhì)量監(jiān)測(一模)理綜生物試題(原卷版)
- 家庭年度盤點模板
- 河南省鄭州市2023-2024學年高二上學期期末考試 數(shù)學 含答案
- 2024年男方因賭博離婚協(xié)議書
- 2024年資格考試-WSET二級認證考試近5年真題集錦(頻考類試題)帶答案
- 部編版五年級上冊道德與法治期末測試卷含答案精練
評論
0/150
提交評論