




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一、需求與功能分析第二章概要設計52.1 總體設計52.2 面向對象設計52.3 運行界面設計6第三章詳細設計73.1 系統設計與實現73.2 模塊設計8第四章測試分析10第五章課程設十方總結10附錄:程序代碼(僅電子版需要、紙質版不需要)I、需求與功能分析1.1需求為了方便管理校內各種實驗設備,能夠翻遍快捷的錄入查詢各個實驗設備的基本信息而編寫了此程序實驗設備管理系統設計實驗設備信息包括:設備編號,設備種類(如:微機、打印機、掃描儀等等),設備名稱,設備價格,設備購入日期,是否報廢,報廢日期等。1.2主要功能:1、能夠完成對設備的錄入和修改。2、對設備進行分類統計。4、設備的破損耗費和遺損處
2、理。4、設備的查詢。1.3功能需求1、可實現管理員登陸管理系統,游客查詢系統。2、對實驗設備類型的管理。3、對實驗設備各項信息的錄入和修改。4、對實驗設備的分類查詢統計。5、對實驗設備的遺損處理二、概要設計2.1總體設計程序總體共分為4個類:1、菜單類2、設備類型類3、設備類4、管理員類由主函數主持整體運行,由菜單類調用其它三類1.1 面向對象設計1 .設備類型類:(見圖2)voidshuru();設備類型的輸入voidtianjia();設備類型的添加voidshanchu();設備類型的刪除voidshow();設備類型的輸出顯示voidxieru();設備類型的寫入voidduqu();
3、設備類型的讀取2 .設備類:nfom*write()設備的創建寫入(見圖3)Infom*load()從文檔中讀取數據(見圖4)voidacquire(Infom*head)/分類查詢數據(見圖5)voidacquire2(Infom*head)/查詢全部數據(見圖5)voidacqu(charchoose)分類查詢的內容支持(見圖5)voidadd()添加新內容(見圖6)voidundo(Infom*head)/刪除(見圖7)intsave(Infom*head)/將現數據進行保存voidrevise(Infom*head)修改數據voidclassify(Infom*head)/對數據的分類
4、統計(見圖8)voidclasK(Infom*head)/類型的分類統計(見圖8)voidclasP(Infom*head)價格的分類統計(見圖8)voidclasE(Infom*head)/是否報廢的統計(見圖8)3 .管理員類:voidcreate()創建用戶名和密碼intlog()登陸voidchange()修改用戶名和密碼4 .2運行界面設計運行界面由菜單類實現;菜單類:1.intmenu1(device*p,structShiyanEquip*head,DeviceTipe*a,manager*b)/管理模式主菜單2.intmenu2(device*p,structShiyanEqu
5、ip*head,DeviceTipe*a)/游客模式主菜單管理模式錄入菜單游客模式錄入菜單修改菜單查詢菜單分類統計菜單賬號菜單設備類型菜單3.structShiyanEquip*entering(device*p)/4.structShiyanEquip*entering2(device*p)/5.structShiyanEquip*change(device*p)/6.structShiyanEquip*query(device*p)/7.structShiyanEquip*statistic(device*p)/8.structShiyanEquip*account(manager*b)/
6、9.structShiyanEquip*type(DeviceTipe*a)/三、詳細設計3.1系統設計與實現6【總體框架、流程設計,模塊劃分及接口設計等】總體框架:主菜單1開始主菜單2接口設計:1. intmenu1(device*p,structShiyanEquip*head,DeviceTipe*a,manager*b)功能調用管理模式主菜單并指向管理模式各項分菜單2. intmenu2(device*p,structShiyanEquip*head,DeviceTipe*a)功能調用游客模式主菜單并指向游客模式各項分菜單3. structShiyanEquip*entering(de
7、vice*p)功能指向設備類中的新建,載入和添加函數并完成相應函數功能4. structShiyanEquip*entering2(device*p)功能指向設備類中的載入函數并完成函數功能5. structShiyanEquip*change(device*p)功能指向設備類中的修改和刪除函數并完成相應函數功能6. structShiyanEquip*query(device*p)功能指向設備類中的分類查詢和全部查詢函數并完成相應函數功能7. structShiyanEquip*statistic(device*p)功能指向設備類中的分類統計函數并完成相應三類的統計8. structShiy
8、anEquip*account(manager*b)功能指向管理員類中的修改函數完成修改賬戶及密碼的功能9. structShiyanEquip*type(DeviceTipe*a)功能指向設備類型類中的各個函數并完成有關設備類型的全部功能10. 模塊設計設備類:loadwrite輸入是否儲存A否是否為0load賦予結束Acquire2全部顯示選擇查詢方式是否為空分類選擇分類讀取匹配是否為空顯示結束19ClassifyE讀取匹配1匹配2匹配3是否為空是圖7Undo刪除結束四、測試分析MM-M“溫饕提云;請熹尢載入清單再進行操作誠裳設備管理系統上.退出系統置備的載人2 .設備信息查詢【測試中發現
9、的問題及解決方案】1 .缺少必要的文字描述(已解決)2 .輸出的格式問題(已解決)3 .不能刪除唯一一項數據的問題(已解決)4 .設備操作中缺失最后一行的問題(已解決)5 .不能返回上一級菜單的問題(已解決)6 .價格統計時不能確定準確比較的問題(已解決)【對最終成果的評價】整體來說比較滿意,是最近辛苦努力的偉大成果,但是有如下幾點有待改進1 .可以進行漢字輸入但是不能進行漢字查詢的問題2 .管理員賬號不能隨意登出的問題3 .設備類中沒有使用private導致保密性不強的問題五、源程序#include#include#include#include#include#includeusingna
10、mespacestd;classDeviceTipe定義設備類型類(private:charsblx2020;設備類型public:voidshuru();設備類型的輸入voidtianjia();/設備類型的添加voidshanchu();設備類型的刪除voidshow();/設備類型的輸出顯示voidxieru();設備類型的寫入voidduqu();設備類型的讀取;=classdevice定義設備類(public:typedefstructinfom(charidnum10;/編號charkind10;類型charname10;/名稱charprice10;/價格charpurda10;
11、/購買日期charexist10;/是否報廢chardamda10;/報廢日期structinfom*next;Infom;Infom*head;DeviceTipewcs;Infom*write()設備的創建寫入(fstreamthe(aaa.txt,ios:out|ios:app);Infom*p1,*p2;head=NULL;wcs.duqu();wcs.show();p1=p2=(Infom*)malloc(sizeof(Infom);cout請輸入編號種類名稱價格購買日期是否報廢報廢日期(空格鍵斷開/按0鍵結束輸入):p1-idnump1-kindp1-namep1-pricep1-
12、purdap1-existp1-damda;theidnumkindnamepricepurdaexistdamdanext=NULL;while(1)(if(head=NULL)head=p1;if(head!=NULL)p2-next=p1;p2=p1;p1=(Infom*)malloc(sizeof(Infom);cinp1-idnum;if(*(p1-idnum)=0)free(p1);break;cinp1-kindp1-namep1-pricep1-purdap1-existp1-damda;theidnumkindnamepricepurdaexistdamdanext=NULL
13、;the.close();cout寫入成功endl;load();returnhead;:Infom*load()/從文檔中讀取數據(intn,a;chartran780;intb;Infom*p1,*p2;fstreamt(aaa.txt);head=NULL;p1=p2=(Infom*)malloc(sizeof(Infom);if(t.getline(tran0,80,n)=NULL)(cout載入失敗idnuma=tran0n;a+;)p1-idnuma尸0;for(a=0,n=n+1;tran0n!=;n+)(p1-kinda=tran0n;a+;p1-kinda=0;for(a=0
14、,n=n+1;tran0n!=;n+)(p1-namea=tran0n;a+;p1-namea=0;for(a=0,n=n+1;tran0n!=;n+)(p1-pricea=tran0n;a+;p1-pricea=0;for(a=0,n=n+1;tran0n!=;n+)(p1-purdaa=tran0n;a+;p1-purdaa=0;for(a=0,n=n+1;tran0n!=;n+)(p1-exista=tran0n;a+;p1-exista=0;for(a=0,n=n+1;tran0n!=0;n+)(p1-damdaa=tran0n;a+;p1-damdaa=0;p1-next=NULL;
15、for(b=1;t.getline(tranb,80,n)!=NULL;b+)(if(head=NULL)head=p1;elsep2-next=p1;p2=p1;p1=(Infom*)malloc(sizeof(Infom);for(n=0,a=0;tranbn!=;n+)(p1-idnuma=tranbn;a+;p1-idnuma=0;for(a=0,n=n+1;tranbn!=;n+)(p1-kinda=tranbn;a+;p1-kinda=0;for(a=0,n=n+1;tranbn!=;n+)(p1-namea=tranbn;a+;p1-namea=0;for(a=0,n=n+1;t
16、ranbn!=;n+)p1-pricea=tranbn;a+;)p1-pricea=0;for(a=0,n=n+1;tranbn!=;n+)p1-purdaa=tranbn;a+;)p1-purdaa=0;for(a=0,n=n+1;tranbn!=;n+)p1-exista=tranbn;a+;)p1-exista=0;for(a=0,n=n+1;tranbn!=0;n+)p1-damdaa=tranbn;a+;)p1-damdaa=0;)p2-next=p1;p1-next=NULL;if(b=1)head=p1;cout載入成功endl;returnhead;=voidacquire(I
17、nfom*head)/分類查詢數據(charchoose;cout請選擇查詢方式:endl;cout1.編號endl;cout2.名稱endl;cout3.類型endl;cout4.價格endl;cout5.購買日期endl;cout6.是否報廢endl;cout7.報廢日期endl;cout0.結束查詢endl;choose=getch();switch(choose)(case1:acqu(choose);break;case2:acqu(choose);break;case3:acqu(choose);break;case4:acqu(choose);break;case5:acqu(c
18、hoose);break;case6:acqu(choose);break;case7:acqu(choose);break;case0:break;voidacquire2(Infom*head)/查詢全部數據Infom*t=head;if(t=NULL)cout對不起,信息不存在endl;else購買日期是cout編號種類名稱價格否報廢報廢日期next!=NULL;)coutsetfill()setw(10)idnumsetfill()setw(10)kindsetfill()setw(10)namesetfill()setw(10)pricesetfill()setw(10)purdas
19、etfill()setw(10)existsetfill()setw(10)damdanext;coutsetfill()setw(10)idnumsetfill()setw(10)kindsetfill()setw(10)namesetfill()setw(10)pricesetfill()setw(10)purdasetfill()setw(10)existsetfill()setw(10)damdaendl;voidacqu(charchoose)分類查詢的內容支持Infom*t=head;char*s;inta=0;charxyz10;coutxyz;for(;t-next!=NULL
20、;)(switch(choose)(case1:s=t-idnum;break;case2:s=t-name;break;case3:s=t-kind;break;case4:s=t-price;break;case5:s=t-purda;break;case6:s=t-exist;break;case7:s=t-damda;break;if(strcmp(s,xyz)=0)(if(a=0)購買日cout編號種類名稱價格期是否報廢報廢日期endl;coutsetfill()setw(10)idnumsetfill()setw(10)kindsetfill()setw(10)namesetfil
21、l()setw(10)pricesetfill()setw(10)purdasetfill()setw(10)existsetfill()setw(10)damdanext;)switch(choose)(case1:s=t-idnum;break;case2:s=t-name;break;case3:s=t-kind;break;case4:s=t-price;break;case5:s=t-purda;break;case6:s=t-exist;break;case7:s=t-damda;break;)if(strcmp(s,xyz)=0)(if(a=0)購買日期cout編號種類名稱價格是
22、否報廢報廢日期endl;coutsetfill()setw(10)idnumsetfill()setw(10)kindsetfill()setw(10)namesetfill()setw(10)pricesetfill()setw(10)purdasetfill()setw(10)existsetfill()setw(10)damdaendl;a+;)if(a=0)cout對不起,您查詢白信息不存在endl;:voidadd()添加新內容(fstreamthe(aaa.txt,ios:out|ios:app);Infom*p1,*p2;head=NULL;wcs.duqu();wcs.show
23、();p1=p2=(Infom*)malloc(sizeof(Infom);cout請輸入編號種類名稱價格購買日期是否報廢報廢日期(空格鍵斷開/按0鍵結束輸入):p1-idnump1-kindp1-namep1-pricep1-purdap1-existp1-damda;theidnumkindnamepricepurdaexistdamdanext=NULL;while(1)(if(head=NULL)head=p1;if(head!=NULL)p2-next=p1;p2=p1;p1=(Infom*)malloc(sizeof(Infom);cinp1-idnum;if(*(p1-idnum
24、)=0)free(p1);break;cinp1-kindp1-namep1-pricep1-purdap1-existp1-damda;theidnumkindnamepricepurdaexistdamdanext=NULL;the.close();cout添力口成功endl;load();=voidundo(Infom*head)/刪除(structinfom*p1,*p2;charnum10;charaaa10=0;charchoose;wcs.duqu();wcs.show();cout請輸入要刪除的編號(空格鍵斷開按0鍵結束):“num;if(strcmp(num,aaa)=0)b
25、reak;if(head=NULL)cout您使用的地址不存在idnum,num)!=0&p1-next!=NULL;)(p2=p1;p1=p1-next;if(strcmp(p1-idnum,num)=0)(if(p1=head)(head=p1-next;free(p1);else(p2-next=p1-next;p1-next=NULL;free(p1);)elseif(strcmp(p1-idnum,num)!=0&p1-next=NULL)cout該內容不存在endl;)cout輸入1儲存,輸入0放棄endl;choose=getch();switch(choose)(case1:s
26、ave(head);break;case0:break;)if(choose=1)(cout刪除成功next!=NULL;)(Theidnumkindnamepricepurdaexistdamdanext;Theidnumkindnamepricepurdaexistdamdaendl;The.close();return0;=voidrevise(Infom*head)修改數據charnum10;Infom*p1;charchoose;charx;wcs.duqu();wcs.show();cout請輸入更改項目的編號:num;p1=head;for(;strcmp(p1-idnum,nu
27、m)!=0&p1-next!=NULL;)(p1=p1-next;if(p1-next=NULL&strcmp(p1-idnum,num)!=0)cout不存在此編號endl;else(cout請選擇修改內容:endl;cout”1.endl;cout”2.名稱endl;cout”3.典型endl;cout”4.價格endl;cout”5.購買日期endl;cout”6.是否報廢endl;cout”7.報廢日期endl;cout”0.結束修改endl;choose=getch();30cout請輸入修改內容:p1-idnum;break;case2:cinp1-name;break;case3
28、:cinp1-kind;break;case4:cinp1-price;break;case5:cinp1-purda;break;case6:cinp1-exist;break;case7:cinp1-damda;break;case0:break;cout輸入1儲存,輸入0放棄endl;x=getch();switch(x)(case1:save(head);break;case0:break;=voidclassify(Infom*head)/對數據的分類統計(charchoose;cout請選擇統計內容:endl;cout1.類型endl;cout2.價格endl;cout3.是否報廢
29、endl;43cout”0.結束統計kind);p1-next!=NULL;)p1=p1-next;for(y=0;ykind,ay)=0)by+;break;if(y=x+1)x+;bx+;strcpy(ax,p1-kind);for(i=0;i=x;i+)cout類型:ai數量:binext!=NULL;)x=strlen(p1-price);for(i=0,y=0;i=(9-x)(transi=p1-pricey;y+;elsetransi=0;if(strcmp(trans,de)0&strcmp(p1-price,deg)=0)b2+;p1=p1-next;x=strlen(p1-p
30、rice);for(i=0,y=0;i=(9-x)(transi=p1-pricey;y+;elsetransi=0;if(strcmp(trans,de)0&strcmp(trans,deg)=0)b2+;p1=p1-next;cout價格小于等于5000:數量:b0endl;cout價格大于5000小于10000:數量:b1endl;cout價格大于等于10000:數量:b2exist);p1-next!=NULL;)p1=p1-next;for(y=0;yexist,ay)=0)by+;break;)if(y=x+1)(x+;bx+;strcpy(ax,p1-exist);)for(i=
31、0;i=x;i+)(cout是否報廢:ai數量:biendl;);=inti,n=0;設備類型類的函數實現部分voidDeviceTipe:xieru()(ofstreamfout(sblx.txt);char(*p)20;p=sblx;for(i=0;in;i+)(fout*(p+i)endl;fout*(p+i);i+;while(pi0!=0);for(i=0;pi0!=0;i+);n=i;file.close();=voidDeviceTipe:shuru()(char(*p)20;p=sblx;system(cls);cout請輸入設備類型個數:n;cout請依次輸入設備類型名稱en
32、dl;for(i=0;i*(p+i);)=voidDeviceTipe:tianjia()(char(*p)20;p=sblx;intk;system(cls);cout請輸入要添加的設備類型個數k;cout請依次輸入設備類型名稱endl;for(i=n;i*(p+i);)n=n+k;)=voidDeviceTipe:shanchu()(char(*p)20;charw20;p=sblx;intx=0;intj;intr;cout請輸入要刪除的設備類型w;for(i=0;in;i+)(if(strcmp(w,*(p+i)=0)for(j=i;jn;j+)(strcpy(*(p+j),*(p+j
33、+1);x=1;if(x=1)(n=n-1;system(cls);else(cout設備類型中沒有此類endl是否重新輸入/1r;if(r=0)system(cls);elseDeviceTipe:shanchu();=voidDeviceTipe:show()(char(*p)20;p=sblx;system(cls);coutendlendl;for(i=0;in;i+)(couti+1.*(p+i)endl;cout以上為所有設備類型endlendlendl;=classmanager定義管理員類(public:voidcreate()創建用戶名和密碼(charname100;charcode100;FILE*fp1;if(fp1=fopen(user.txt,w)=NULL)(printf(該文件不存在);coutname;fprintf(fp1,%s,name);coutcode;fprintf(fp1,%s,code);fclose(fp1);)=intlog()/登陸(chara200,b200,c,d100;intr=0;couta;coutd;strcat(a,d);FILE*fp1;if(fp1=fopen(user.txt,r)=NULL)(printf(該文件不存在n);)fscanf(fp1,%s,b);c=strcmp(a,b);if(c=0)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 多元評價點亮英語課堂-小學英語教學過程性評價實踐
- 高中思想政治教學中如何調動學生課堂參與積極性
- DB43-T 2782.2-2023 湖南省省長質量獎 第2部分:評審規程
- 睡覺時講安全大班課件
- 認知康復講課件
- 發展心理學講課件
- Unit7期末復習要點 課件2024-2025學年滬教牛津版英語八年級下冊
- 抽煙喝酒主題班會課件
- 第09講 組合體尺寸標注(課件)-2026年高考機械制圖一輪復習講練測
- 從教育心理學角度解析學生情感教育的重要性
- 深圳“20+8”之生物醫藥產業-前景機遇與技術趨勢探析報告-前瞻產業研究院
- 高壓電力知識培訓課件
- 2024煤礦安全生產條例、兩辦意見、硬措施試卷
- 2025年江蘇省安全員《A證》考試題庫及答案
- 老年社會工作期末復習題
- 《湯姆索亞歷險記》閱讀題及答案
- 鈉離子電池-武漢大學楊漢西老師文檔
- DB65-T 4824-2024 干旱區蒸散發量計算規范
- 地域文化(專)-終結性考試-國開(SC)-參考資料
- 我是為了您的孩子 您是為了我的學生-期中測試家長會 課件
- 2023年中考物理復習《三類液面高度變化問題的深度解析》
評論
0/150
提交評論