西安交通大學(xué)“計算機程序設(shè)計”大作業(yè)._第1頁
西安交通大學(xué)“計算機程序設(shè)計”大作業(yè)._第2頁
西安交通大學(xué)“計算機程序設(shè)計”大作業(yè)._第3頁
西安交通大學(xué)“計算機程序設(shè)計”大作業(yè)._第4頁
西安交通大學(xué)“計算機程序設(shè)計”大作業(yè)._第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、西安交通大學(xué)“計算機程序設(shè)計”大作業(yè)說 明 書題 目 圖書管理系統(tǒng) 目錄1.需求分析32.總體設(shè)計33.詳細(xì)設(shè)計34.調(diào)試與測試35.用戶手冊36.設(shè)計體會37.參考文獻資料4 1.需求分析 描述問題。簡述課題要解決的問題是什么,有什么要求和限制條件。設(shè)計一個圖書館的圖書管理,對應(yīng)一個文本book.txt,可以從文本中讀取圖書信息,也可以從鍵盤鍵入圖書信息并保存到文本中;同時可以對文本經(jīng)行查看編輯,包括顯示所有圖書信息,查找圖書,圖書排序,圖書統(tǒng)計等功能。2.總體設(shè)計(軟件由哪些部分組成,軟件組成框圖、流程圖,有哪些函數(shù)、類、文件等,它們的功能和接口)軟件包括一個結(jié)構(gòu)體book,若干函數(shù),一個

2、文本book.txt(如果沒有可以重新建立)。結(jié)構(gòu)體儲存一本圖書的信息,由函數(shù)產(chǎn)生鏈表結(jié)構(gòu)儲存整個圖書清單,可以由鍵盤輸入或文件導(dǎo)入。3.詳細(xì)設(shè)計(模塊功能說明(如函數(shù)功能、參數(shù)說明,函數(shù)的實現(xiàn)方法、算法等)每一本圖書定義為一個結(jié)構(gòu)體,包含本書信息以及指向下一本書的指針,以產(chǎn)生一個鏈表結(jié)構(gòu)儲存。該鏈表可以通過鍵盤輸入及文本輸入兩種情況生成。主函數(shù)為一個循環(huán)結(jié)構(gòu),在開始處清空屏幕并調(diào)用void Help()顯示幫助信息,每次用戶輸入一個字符,然后調(diào)用相對應(yīng)的函數(shù),運行結(jié)束后顯示信息,并開始下一個循環(huán)。函數(shù)包括void add()增加圖書,void order ()圖書排序,void print(

3、)顯示全部圖書,void search()圖書查找,void count()圖書統(tǒng)計,void del()刪除圖書。函數(shù)調(diào)用開始時都會調(diào)用book *creat()或book *fcreat()產(chǎn)生新的鏈表,結(jié)束時調(diào)用void deletelist(book *p1)清空鏈表。4.調(diào)試與測試編程環(huán)境、運行環(huán)境(操作系統(tǒng),編程軟件,版本)使用了哪些測試用例,檢驗?zāi)男┕δ?,程序的運行結(jié)果,是否正確。P數(shù)據(jù)顯示A增加圖書P數(shù)據(jù)顯示O排序后顯示S查找C統(tǒng)計D刪除數(shù)據(jù)顯示5.用戶手冊使用說明。選擇增加圖書后,至少要輸入一個完整的圖書信息(5個數(shù)據(jù))后才能輸入n退出,不能不輸入或輸入不完整信息。輸入圖書類

4、型時,可以輸入Q,T,R以外的數(shù)據(jù),可以儲存,在統(tǒng)計圖書時,會作為其他圖書統(tǒng)計。為排版需要,圖書名稱最好46個漢字統(tǒng)計函數(shù)只是統(tǒng)計圖書種類,并不是整個圖書冊數(shù)。6.設(shè)計體會鏈表的結(jié)果純屬自學(xué),可能使用不是很規(guī)范。體會到了指針的重要作用,通過鏈表結(jié)構(gòu)產(chǎn)生了一種類似數(shù)組但完全不同的結(jié)構(gòu)形式。7.參考文獻資料#include <iostream>#include <fstream>using namespace std;struct bookchar code4;char name50;char author30;char year5;char kinds2;int num;

5、struct book *next;int count;book *creat()/創(chuàng)ä¡ä建¡§鏈¢¡ä表À¨ªbook *head, *p1, *p2;head = p1 = p2 = new book;cin >> p1->code >> p1->name >> p1->author >> p1->year >> p1->kinds;p1->count = 1;while(true)p

6、1 = new book;cin >> p1->code;if(p1->code0 = 'n')/判D斷?輸º?入¨?的Ì?第̨²一°?個?元a素?是º?不?是º?n,ê?是º?n則¨°停ª¡ê止1輸º?入¨?break; cin >> p1->name >> p1->author >> p1->year >>

7、 p1->kinds; p1->count = 1;p2->next = p1;p2 = p1;p2->next = NULL;delete p1;return head;book *fcreat()/從䨮文?件t中D讀¨¢取¨?數(shù)ºy據(jù)Y并¡é創(chuàng)ä¡ä建¡§鏈¢¡ä表À¨ªifstream in("book.txt");int number=0;b

8、ook *head, *p1, *p2;head = p1 = p2 = new book;if (in)in >> p1->code >> p1->name >> p1->author >> p1->year >> p1->kinds >> p1->count;p1->num = number;while (true)number+;p1 = new book;in >> p1->code >> p1->name >> p1->

9、;author >> p1->year >> p1->kinds >> p1->count; if (p1->count < 0)delete p1;break;p1->num = number;p2->next = p1;p2 = p1;p2->next = NULL;in.close();return head;void deletelist(book *p1)/釋º¨ª放¤?之?后¨®的Ì?鏈¢¡ä表

10、92;¨ª空?間?book *p2 = p1;while(p1 != NULL)p1 = p1->next;delete p2;p2 = p1;void print()/顯?示º?鏈¢¡ä表À¨ª全¨?部?book *p, *head;p = head = fcreat();if(head = NULL)cout << "Your type is wrong!"elsecout << "tcodetnamettauthortyeartk

11、indstnumbers" << endl;docout << "t" << p->code << "t" << p->name << "t" << p->author << "t" << p->year << "t" << p->kinds << "t" << p->coun

12、t << endl; p = p->next;while(p != NULL); deletelist(head);void order()/排?序¨°int n, i, j;book *head, *p1, *p2;head = fcreat();p1 = p2 = head;while(p1->next != NULL)p1 = p1->next;n = p1->num;p1 = head;for(i = 0;i < n;i+)/冒¡ã泡Y排?序¨°if(strcmp(p1->nex

13、t->code,p1->code) < 0)/若¨?第̨²一°?節(jié)¨²點Ì?后¨®一°?項?的Ì?書º¨¦號?小?于®¨²前¡ã一°?項?,ê?則¨°換?位?,ê?同ª?時º¡À更¨¹換?head指?針?內(nèi)¨²容¨Yp2 = p1->

14、next;p1->next = p2->next;p2->next = p1;head = p2;elsep1 = p1->next;for(j = i+1;j < n;j+)if(strcmp(p1->next->code,p1->code)<0)/后¨®一°?節(jié)¨²點Ì?小?于®¨²前¡ã一°?項?,ê?則¨°換?位?p2->next = p1->next;p2 = p1-&g

15、t;next;p1->next = p2->next;p2->next = p1;else/如¨?果?判D定¡§不?成¨¦立¢¡é,ê?則¨°p1、¡ép2后¨®移°?p1 = p1->next;p2 = p2->next;p1 = p2 = head;p1 = p2 = head;for(j = 0;j < n;j+)/若¨?后¨®一°?項?書º&#

16、168;¦與®?前¡ã一°?項?的Ì?書º¨¦名?、¡é書º¨¦號?均¨´相¨¤同ª?,ê?則¨°前¡ã一°?項?數(shù)ºy目?+1,ê?后¨®一°?項?空?間?被À?釋º¨ª放¤?if(strcmp(p1->next->code,p1-&g

17、t;code) = 0 && strcmp(p1->next->name,p1->name) = 0)p2->count+;p1 = p1->next->next;delete p2->next;p2->next = p1;p1 = p2;else/如¨?果?判D定¡§不?成¨¦立¢¡é,ê?則¨°p1、¡ép2后¨®移°?p1 = p2 = p2->next;p1

18、= head;ofstream out("book.txt");while(p1 != NULL)/將?排?序¨°結(jié)¨¢果?寫¡ä到Ì?文?件tbook.txt中Dout << "t" << p1->code << "t" << p1->name << "t" << p1->author << "t" << p1-

19、>year << "t" << p1->kinds << "t" << p1->count << endl;p1=p1->next;out.close();deletelist(head);void add()book *p1, *p2;ofstream out("book.txt",ios:app);/在¨²文?件t末?尾2寫¡ä入¨?cout << "Please input

20、the information" << endl; cout << "R=人¨?文?,ê?T=科?技?,ê?Q=其?他?,n to exit" << endl;cout << "Codetbooktauthortyeartkinds" << endl;p1 = creat();p2 = p1; while(p1 != NULL)out << p1->code << "t" << p1->n

21、ame << "t" << p1->author << "t" << p1->year << "t" << p1->kinds << "t" << p1->count << endl;p1 = p1->next;out.close();deletelist(p2);void search()/查¨¦找¨°book *p,*p2;p2 = p

22、 = fcreat();char ch50;cout << "Please input your code,bookname,author,year or kinds" << endl;while(true)bool k = true;cin >> ch;while(p != NULL)/如¨?果?輸º?入¨?的Ì?數(shù)ºy據(jù)Y與®?書º¨¦名?、¡é書º¨¦號?、¡é作Á

23、¡Â者?、¡é年¨º份¤Y、¡é類¤¨¤型¨ª等̨¨相¨¤同ª?,ê?則¨°按ã¡ä要°a求¨®給?出?結(jié)¨¢果?if(strcmp(ch,p->code) = 0 | strcmp(ch,p->name) = 0 | strcmp(ch,p->author) = 0

24、| strcmp(ch,p->year) = 0 | strcmp(ch,p->kinds) = 0)cout << "t" << p->code << "t" << p->name << "t" << p->author << "t" << p->year <<"t" << p->kinds << "t"

25、; << p->count << endl;k = false;p = p->next;p = p2;if(k)/如¨?果?查¨¦詢¡¥沒?有®D找¨°到Ì?所¨´需¨¨書º¨¦籍?,ê?則¨°輸º?出?sorrycout << "Sorry, we don't have your book" << endl;

26、cout << "Continue?Y/N" << endl;getchar();if(getchar()='N')break;deletelist(p2);void count()/統(tǒng)ª3計?book *p1, *p2;int number = 0, b3=0,0,0;p1 = fcreat();p2 = p1;while(p1 != NULL)switch(p1->kinds0)case 'R':b0+;break;case 'T':b1+;break;default:b2+;bre

27、ak;number = p1->num;p1 = p1->next;cout << "The sum of the books is " << number+1 << endl;cout << "The number of the books of 人¨?文? is " << b0 << endl;cout << "The number of the books of 科?技? is " << b1 <<

28、endl;cout << "The number of the books of 其?他? is " << b2 << endl;deletelist(p2);void del()/刪¦?除ybook *p1, *p2, *head, *p3;char ch50;head = fcreat();p3 = p1 = p2 = head;cout << "Please input the book code or name you want to delete" << endl;cin &

29、gt;> ch;while(p1 = head)/如¨?果?刪¦?除y的Ì?是º?第̨²一°?節(jié)¨²點Ì?,ê?則¨°更¨¹改?鏈¢¡ä表À¨ª頭ª¡¤指?針?head的Ì?內(nèi)¨²容¨Yif(strcmp(ch,p1->code) = 0 | strcmp(ch,p1->name) = 0

30、)head = p1->next;delete p2;p1 = p2 = p3 = head;elsep1 = p1->next;p2 = p2->next;while(p1 != NULL)if(strcmp(ch,p1->code) = 0 | strcmp(ch,p1->name) = 0)p3->next = p1->next;p1 = p1->next;delete p2;p2 = p1;elsep1 = p1->next;p2 = p2->next;p3 = p3->next;p1 = p2 = head;ofstr

31、eam out("book.txt",ios:trunc);/將?新?信?息¡é再¨´次ä?寫¡ä入¨?文?件t,ê?并¡é覆2蓋?原-文?件twhile(p1 != NULL)out << "t" << p1->code << "t" << p1->name << "t" << p1->author <<

32、 "t" << p1->year << "t" << p1->kinds << "t" << p1->count << endl;p1 = p1->next;out.close();deletelist(p2);void Help()/幫ã?助¨²信?息¡écout << " Hello!This is the library system! " << endl;cout << endl;cout << " A is add: To add more information into your files " << endl;cout << " S is search: To find the book you want " << endl;cout << " O is order: To arrange your file

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論