數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告書(shū)_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告書(shū)_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告書(shū)_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告書(shū)_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告書(shū)_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、JIANGSU UNIVERSITY OF TECHNOLOGY數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)學(xué)院名稱(chēng):計(jì)算機(jī)工程學(xué)院專(zhuān)業(yè):信息管理與信息系統(tǒng)班級(jí):姓名:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)任務(wù)書(shū)學(xué)院計(jì)算機(jī)工程學(xué)院系部信息與軟件工程系_學(xué)號(hào)學(xué)生姓名專(zhuān)業(yè)(班級(jí))設(shè)計(jì)題目第一類(lèi)、第二類(lèi)、第三類(lèi)設(shè)計(jì)技術(shù)參數(shù)第一類(lèi)題目設(shè)計(jì)技術(shù)參數(shù):頭文件:#nclude 、#include調(diào)用的函數(shù):void output(L in kList L,L in kList p, int m)等第二類(lèi)題目設(shè)計(jì)技術(shù)參數(shù):頭文件:# include、#include、#include 、#include調(diào)用的函數(shù):void print(Sqlist* L)、

2、void InsertSort(Sqlist*L,Sort_result* T)、void ShellInsert(Sqlist* L,int dk,Sort_result* T)第三類(lèi)題目設(shè)計(jì)技術(shù)參數(shù):頭文件:#include 、#include 調(diào)用的函數(shù):void Login()、int Menu() void Init() void Menu_select()、 void Insert New Book()、void Find Book()、void add reader()等設(shè) 計(jì) 要 求第一類(lèi)題目:設(shè)計(jì)程序解決約瑟夫環(huán)問(wèn)題。第二類(lèi)題目:1)至少采用三種方法實(shí)現(xiàn)所提出的問(wèn)題求解(提示

3、,可采用的方 法有插入排序、希爾排序、起泡排序、快速排序、選擇排序、堆排序、歸并排 序)。并把排序后的結(jié)果保存在不同的文件中。2)統(tǒng)計(jì)每一種排序方法的性能(以上機(jī)運(yùn)行程序所花費(fèi)的時(shí)間為準(zhǔn)進(jìn)行對(duì)比),找出其中兩種較快的方法。第三類(lèi)題目:1)每種書(shū)的登記內(nèi)容包括書(shū)號(hào)、書(shū)名、著作者、現(xiàn)存量和庫(kù)存量;2)對(duì)書(shū)號(hào)建立索引表(線(xiàn)性表)以提高查找效率;3)系統(tǒng)主要功能如下:采編入庫(kù)、借閱、歸還。工作量編寫(xiě)并完成三個(gè)應(yīng)用程序,設(shè)計(jì)說(shuō)明書(shū)總字?jǐn)?shù)7000多字,一共39張紙。工 作 計(jì) 劃第一周:理解實(shí)驗(yàn)的基本要求,查閱相關(guān)資料;整理設(shè)計(jì)思路,設(shè)計(jì)算法,完 成第一、二、三題的初步編寫(xiě);第二周:調(diào)試并完善;最后兩天完

4、成設(shè)計(jì)報(bào)告并演示程序。參 考 資 料1. 數(shù)據(jù)結(jié)構(gòu)教程第4版李春葆主編清華大學(xué)出版社2. 數(shù)據(jù)結(jié)構(gòu)教程第4版上機(jī)實(shí)驗(yàn)指導(dǎo)李春葆主編清華大學(xué)出版社3. 網(wǎng)上資料等指導(dǎo)教師簽字年 月曰數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告一、第一類(lèi)題目1問(wèn)題陳述約瑟夫環(huán)問(wèn)題:編號(hào)是1,2,n的n個(gè)人按照順時(shí)針?lè)较驀蝗?,?個(gè)人只有一個(gè)密碼(正整數(shù)),一開(kāi)始任選一個(gè)正整數(shù)作為報(bào)數(shù)上限值m從第一個(gè)仍開(kāi)始順時(shí)針?lè)较蜃?開(kāi)始順序報(bào)數(shù),報(bào)到m時(shí)停止報(bào)數(shù)。報(bào)m的人出列, 將他的密碼作為新的m值,從他在順時(shí)針?lè)较虻南乱粋€(gè)人開(kāi)始重新從1報(bào)數(shù),如此下去,直到所有人全部出列為止。請(qǐng)?jiān)O(shè)計(jì)一個(gè)程序求出出列順序。2程序代碼#include#includ

5、eint n,m;typedef struct LNodeint num,data;struct LNode *next;LNode,*LinkList;void List(LinkList &L,int n)LinkList p,q;int i;L=(LinkList)malloc(sizeof(LNode);L-next=NULL;for(i=0;inum=i+1;printf( 輸入編號(hào)為d的人的密碼:,i+1); scanf(%d,&p-data);if(L-next=NULL) L-next=p;/ 頭結(jié)點(diǎn) L else q-next=p;/ 前后節(jié)點(diǎn)關(guān)系建立 q=p; /q 為前節(jié)

6、點(diǎn)p-next=L-next;void input()printf( 輸入總?cè)藬?shù) n:);scanf(%d,&n);printf( 輸入報(bào)數(shù)上限值 m:);scanf(%d,&m);void output(LinkList L,LinkList p,int m)int i;LinkList q;for(i=1;i+)q=p;p=p-next;if(i=m)printf(”編號(hào)為4的人出列,他的密碼4作為新的m值n ,p-nu m,p-data);m=p-data;q-n ext=p-n ext;q=q-n ext;free(p);if(q!=p)L-n ext=q;p=L;i=0;if(q=p

7、)printf(編號(hào)為4的人出列,至此所有人出列完畢n ,p-nu m);free(p);break;mai n()Lin kList L,p,q;in put();List(L, n);p=L;output(L,p,m);3 運(yùn)行結(jié)果昌H Jara宜 n n n n n mtr 勺勺勺勺一71 騎%4騎肓 & Ha55r u 密密密密密算5 riPnJPrip馬馬 %打打旳旳肖肖比匸 帀 I-* R Tfl 帀帀 hHhnniB.DUbu.B n 密密密密密密密至皿 9 1 4- 9 - V o 1A人人入入t !?II *1Iay 一 n 陸 29456 7 VwwA k 號(hào)號(hào)號(hào)口包巨籥泊

8、詢(xún)iff簾泊泊an rrA 勺 亡”報(bào).冷,卻41VI/耳/斗斗/ 8 人人入入入入入入入號(hào)口苗號(hào)號(hào)號(hào)口萬(wàn)瀘 d刖.一刖.3 1 7 2 .4 7 4 nffloanCJ冊(cè) 心4# ,比上 flgM仏&4 設(shè)計(jì)體會(huì)與總結(jié)通過(guò)此次課程設(shè)計(jì),使我更加扎實(shí)的掌握了有關(guān)數(shù)據(jù)結(jié)構(gòu)方面的知識(shí), 在設(shè) 計(jì)過(guò)程中雖然遇到了一些問(wèn)題,但經(jīng)過(guò)一次又一次的思考,一遍又一遍的檢查終 于找出了原因所在,也暴露出了前期我在這方面的知識(shí)欠缺和經(jīng)驗(yàn)不足。 實(shí)踐出 真知,通過(guò)親自動(dòng)手制作,使我們掌握的知識(shí)不再是紙上談兵。二、第二類(lèi)題目1 問(wèn)題陳述排序綜合(限1人完成)利用隨機(jī)函數(shù)產(chǎn)生N個(gè)隨機(jī)整數(shù)(20000以上),對(duì)這些數(shù)進(jìn)行

9、多種方法進(jìn) 行排序。要求:1)至少采用三種方法實(shí)現(xiàn)上述問(wèn)題求解(提示,可采用的方法有插入排序、希爾排序、起泡排序、快速排序、選擇排序、堆排序、歸并排序)。并把排序后的結(jié)果保存在不同的文件中。2)統(tǒng)計(jì)每一種排序方法的性能(以上機(jī)運(yùn)行程序所花費(fèi)的時(shí)間為準(zhǔn)進(jìn)行對(duì) 比),找出其中兩種較快的方法。3)如果采用4種或4種以上的方法者,可適當(dāng)加分。2 .需求分析利用隨機(jī)函數(shù)產(chǎn)生N個(gè)隨機(jī)整數(shù)(20000以上),對(duì)這些數(shù)進(jìn)行多種方法進(jìn) 行排序。要求:1)至少采用三種方法實(shí)現(xiàn)上述問(wèn)題求解(提示,可采用的方法有插入排序、希爾排序、起泡排序、快速排序、選擇排序、堆排序、歸并排序)。并把排序后的結(jié)果保存在不同的文件中。

10、2)統(tǒng)計(jì)每一種排序方法的性能(以上機(jī)運(yùn)行程序所花費(fèi)的時(shí)間為準(zhǔn)進(jìn)行對(duì) 比),找出其中兩種較快的方法。3. 概要設(shè)計(jì)1)用戶(hù)輸入隨機(jī)數(shù)的個(gè)數(shù)n2)隨機(jī)數(shù)在排序函數(shù)作用下進(jìn)行排序3)程序給出隨機(jī)數(shù)的移動(dòng)次數(shù)yd、比較次數(shù)bj、以及排序所用的時(shí)間。4. 詳細(xì)設(shè)計(jì)1)插入排序:將一個(gè)記錄插入到已排好的有序表中,從而得到一個(gè)新的,記 錄數(shù)增加1的有序表。2)希爾排序:先取一個(gè)小于n的整數(shù)d1作為第一個(gè)增量,把文件的全部記 錄分組。所有距離為d1的倍數(shù)的記錄放在同一個(gè)組中。先在各組內(nèi)進(jìn)行 直接插 入排序;然后,取第二個(gè)增量d2d1重復(fù)上述的分組和排序,直至所有記錄放在 同一組中進(jìn)行直接插入排序?yàn)橹埂?)起泡

11、排序:首先將第一個(gè)記錄的關(guān)鍵字和第二個(gè)記錄的關(guān)鍵字進(jìn)行比較,若為逆序,則將兩個(gè)記錄交換,然后比較第二個(gè)記錄和第三個(gè)記錄的關(guān)鍵字。依此類(lèi)推,直到第N-1和第N個(gè)記錄的關(guān)鍵字進(jìn)行過(guò)比較為止。上述為第一趟排序, 其結(jié)果使得關(guān)鍵字的最大紀(jì)錄被安排到最后一個(gè)記錄的位置上。然后進(jìn)行第二趟起泡排序,對(duì)前N-1個(gè)記錄進(jìn)行同樣操作。一共要進(jìn)行 N-1趟起泡排序。4)快速排序:通過(guò)一趟排序?qū)⒋庞涗浄指畛瑟?dú)立的兩部分,其中一部分記錄的關(guān)鍵字均比另一部分記錄的關(guān)鍵字小, 則可分別對(duì)這兩部分記錄繼續(xù)進(jìn)行排 序,已達(dá)到整個(gè)序列有序。5程序代碼#include#include#include#include#define

12、 MAXSIZE 9999typedef int Keytype;typedef structKeytype rMAXSIZE+1;/ 儲(chǔ)存數(shù)值 int length;/ 數(shù)組大小Sqlist;typedef structint NumberOfJudgement;/ 比較次數(shù) int NumberOfMovement;/ 移動(dòng)次數(shù) double time;/ 排序所用時(shí)間S_time;typedef structS_time Sort4;int n;Sort_result;排序結(jié)果/*void print(Sqlist* L) int i;for(i=1;ilength;i+)prin tf

13、(第 %4d個(gè) 數(shù) -5d|,i,L-ri); if(!(i%5) printf(n);插入排序void InsertSort(Sqlist* L,Sort_result* T)int i,j; for(i=2;ilength;+i)T-Sort0.NumberOfJudgement+;if(L-riri-1)T-Sort0.NumberOfMovement+;L-r0=L-ri;L-ri=L-ri-1;for(j=i-2;L-r0rj;j-)T-Sort0.NumberOfJudgement+;T-Sort0.NumberOfMovement+;L-rj+1=L-rj;L-rj+1=L-r0

14、;希爾排序*/void ShellInsert(Sqlist* L,int dk,Sort_result* T) int i,j;for(i=dk+1;ilength;i+)T-Sort1.NumberOfJudgement+; if(L-riri-dk)L-r0=L-ri;for(j=i-dk;j0&L-r0rj;j-=dk)T-Sort1.NumberOfJudgement+;T-Sort1.NumberOfMovement+;L-rj+dk=L-rj;L-rj+dk=L-r0;void Shellsort(Sqlist* L,int dlta,int t,Sort_result* T)i

15、nt k;for(k=0;kt;k+)ShellInsert(L,dltak,T);/*起泡排序 */shellsortvoid Bubblesort(Sqlist* L,Sort_result* T)int i,j,temp;for(i=1;ilength;i+)for(j=i+1;jlength;j+)T-Sort2.NumberOfJudgement+;if(L-riL-rj)T-Sort2.NumberOfMovement+;temp=L-ri;L-ri=L-rj;L-rj=temp;/*快速排序*/int Partition(Sqlist* L,int low,int high,So

16、rt_result* T)int pivotkey;L-r0=L-rlow;pivotkey=L-rlow;while(lowSort3.NumberOfJudgement+; while(lowrhigh=pivotkey) T-Sort3.NumberOfJudgement+;-high;T-Sort3.NumberOfMovement+;L-rlow=L-rhigh;while(lowrlowSort3.NumberOfJudgement+;+low;T-Sort3.NumberOfMovement+;L-rhigh=L-rlow;L-rlow=L-r0;return low;void

17、Qsort(Sqlist* L,int low,int high,Sort_result* T) int pivotloc; T-Sort3.NumberOfJudgement+; if(lowlength,T);選擇排序方法void sort(int* choose,Sqlist* L,Sort_result* T)int i;clock_t start,end;FILE* fp;快速排起泡增量char sortname450= 插入排序 , 希爾排序 , 起泡排序 , 序;char fname450= 插入排序結(jié)果 .txt, 希爾排序結(jié)果 .txt, 排序結(jié)果 .txt, 快速排序結(jié)果

18、.txt;int dlta=5000,2500,1250,625,313,167,79,39,23,1,t=10;/ 序列和數(shù)列大小if(*choose!=5) fp=fopen(fname*choose-1,w); if(!fp)printf( 打開(kāi)文件失敗 );exit(1);switch(*choose)case 1:printf( 現(xiàn)在開(kāi)始插入排序 n); start=clock();InsertSort(L,T);end=clock();break;case 2:case 2:printf( 現(xiàn)在開(kāi)始希爾排序 n); start=clock();Shellsort(L,dlta,t,

19、T); end=clock();break;case 3:case 3:printf( 現(xiàn)在開(kāi)始起泡排序 n); start=clock();Bubblesort(L,T);end=clock();break;case 4:case 4:printf( 現(xiàn)在開(kāi)始快速排序 n);start=clock();Quicksort(L,T);end=clock(); break;case 5:序方法的信息 );case 5:序方法的信息 );if(T-n=0) printf( 請(qǐng)先使用任意一種排序方法再查閱排elsefor(i=0;iSorti.NumberOfJudgement)printf(%s

20、排序:移動(dòng)元素次數(shù) :%d 判斷次,sortnamei,T-Sorti.NumberOfMovement,T-Sorti.NumberOfJudge ment,T-Sorti.time);getchar(); if(*choose=5) elseT-Sort*choose-1.time=(double)(end-start); T-n+;print(L);/ 顯示排序結(jié)果 for(i=1;ilength;i+) fprin tf(fp,第 %4d個(gè) 數(shù) -5d|,i,L-ri);if(!(i%5) fprintf(fp,n); fclose(fp); fp=NULL; getchar();ge

21、tchar();*choose=0;主函數(shù) */ /*int main()存放待排序數(shù)值的數(shù)組Sqlist L;/Sort_result T;/ 存放 排序的比較次數(shù)和移動(dòng)次數(shù) int i,a,choose=0,arrMAXSIZE+1;/ choose 功能選擇 srand(time(NULL);printf( 請(qǐng)輸入需要排序的數(shù)字個(gè)數(shù) :); scanf(%d,&a);L.length=a;/ 取1-9999 的隨機(jī)數(shù) printf(=n);printf(要排列 c個(gè)整數(shù) n,L.length); printf(=n); getchar();for(i=1;i=L.length;i+)生成

22、 N 個(gè)隨機(jī)數(shù)L.ri=rand()%10000+1;for(i=1;i=L.length;i+)/ 把隨機(jī)數(shù)組放到備份數(shù)組中 arri=L.ri;for(i=1;i=L.length;i+)prin tf(第 %4d個(gè) 數(shù) -5d|,i,L.ri);if(!(i%5)printf(n);getchar();for(i=0;i4;i+)/ 初始化排序的比較次數(shù)和移動(dòng)次數(shù)T.Sorti.NumberOfJudgement=0;T.Sorti.NumberOfMovement=0;T.n=0;for(;)for(;choose6;) system(cls);printf(= =n);printf(

23、1. 插入排序 2. 希爾排序 3. 起泡排序 4. 快速排序 5. 顯示已使用排序方法的信息 6. 退出 n);printf(= =n);printf( 請(qǐng)輸入你需要功能的序號(hào) :); scanf(%d,&choose);if(choose6) printf( 請(qǐng)重新輸入序號(hào) n); if(choose=6) exit(0);sort(&choose,&L,&T);/ 調(diào)用排序函數(shù) if(choose!=5)for(i=1;i=L.length;i+)L.ri=arri;/ 每次排序后恢復(fù)原始數(shù)據(jù)getchar();return 0;6 運(yùn)行結(jié)果與測(cè)試1、首先選擇需要排序的數(shù)字個(gè)數(shù),比如輸入

24、n=100請(qǐng)輸入需要排序的數(shù)字彳:1004個(gè)數(shù)如骯1J;笫17515221個(gè)數(shù)1淞02681465;第眈個(gè)數(shù)2 42 427884918入數(shù)244曲個(gè)數(shù)93252&個(gè)數(shù)3醐;第丄9個(gè)數(shù)卻0424個(gè)數(shù)砧1&29個(gè)數(shù)列5Z20 個(gè) g776025、數(shù) 132630八數(shù)西陽(yáng)2、再選擇用哪種方法進(jìn)行排序,比如輸入方法-插入排序2.希爾排序丸起泡排序乩快速排序5-顯示已使用排序方法的信息退出請(qǐng)輸入你需要功能的序號(hào)M3、各種方法排序顯示已排序方法的信息5rrrHrnn Jr J J- - J- t USB#起快02& 1 4 83 2 3 12 8 2 3 =5次次次次 號(hào)民 序一兀元元元 的動(dòng)動(dòng)動(dòng)動(dòng) ,

25、8s# 功:;齊插入排序2.希爾排序沢起泡排序4.快速排序証顯示E使用排序方法的信息退出理斷迭款= 2367B|B:0.000000判斷次數(shù):107?所用時(shí)|B: 0,000000 訶羽0飭用吋間證餉脯師1030 所用時(shí)簡(jiǎn)皿 0808BB7.設(shè)計(jì)體會(huì)與總結(jié)做什么都需要耐心,做設(shè)計(jì)寫(xiě)程序則更需要耐心。一開(kāi)始的時(shí)候,好不容易 寫(xiě)好了程序,可是等最后調(diào)試的時(shí)候發(fā)現(xiàn)錯(cuò)誤很隱蔽, 就很費(fèi)時(shí)間了。后來(lái)我先 在紙上構(gòu)思出函數(shù)的功能和參數(shù),先把各小部分編好才編主函數(shù) ,考慮好接口之 后才動(dòng)手編,這樣就比較容易成功了。做任何事情我覺(jué)得都應(yīng)該有個(gè)總體規(guī)劃。之后的工作按照規(guī)劃逐步展開(kāi)完 成。對(duì)于一個(gè)完整的程序設(shè)計(jì),

26、首先需要總體規(guī)劃寫(xiě)程序的步驟,分塊寫(xiě),分函數(shù)寫(xiě),然后寫(xiě)完一部分馬上糾錯(cuò)調(diào)試。而不是像我第一次那樣,一口氣寫(xiě)完,然 后再花幾倍的時(shí)間調(diào)試。一步步來(lái),走好一步再走下一步。感覺(jué)一開(kāi)始設(shè)計(jì)結(jié)構(gòu)寫(xiě)函數(shù)體現(xiàn)的是數(shù)據(jù)結(jié)構(gòu)的思想,后面的調(diào)試則更加體 現(xiàn)了人的綜合素質(zhì),專(zhuān)業(yè)知識(shí)、堅(jiān)定耐心、鍥而不舍,真的缺一不可。通過(guò)這次課設(shè),不僅僅復(fù)習(xí)了 C語(yǔ)言相關(guān)知識(shí)、 而且也了解并初步掌握了 C+,通過(guò)這一次課程設(shè)計(jì),磨練了我的意志,使我更有了自信心。三、第三類(lèi)題目1問(wèn)題陳述圖書(shū)管理系統(tǒng)(限 1 人完成)【問(wèn)題描述】 設(shè)計(jì)一個(gè)計(jì)算機(jī)管理系統(tǒng)完成圖書(shū)管理基本業(yè)務(wù)?!净疽蟆?)每種書(shū)的登記內(nèi)容包括書(shū)號(hào)、書(shū)名、著作者、現(xiàn)存量

27、和庫(kù)存量;2)對(duì)書(shū)號(hào)建立索引表(線(xiàn)性表)以提高查找效率;3)系統(tǒng)主要功能如下: *采編入庫(kù):新購(gòu)一種書(shū),確定書(shū)號(hào)后,登記到圖書(shū)帳目表中,如果表中已 有,則只將庫(kù)存量增加;* 借閱:如果一種書(shū)的現(xiàn)存量大于 0,則借出一本,登記借閱者的書(shū)證號(hào)和 歸還期限,改變現(xiàn)存量;*歸還:注銷(xiāo)對(duì)借閱者的登記,改變?cè)摃?shū)的現(xiàn)存量。【進(jìn)一步完成內(nèi)容】1)系統(tǒng)功能的進(jìn)一步完善;2)索引表采用樹(shù)表。3)設(shè)計(jì)內(nèi)容4)程序流程圖5)源程序6)軟件測(cè)試報(bào)告(包括所用到的數(shù)據(jù)及結(jié)果)2需求分析 設(shè)計(jì)一個(gè)計(jì)算機(jī)管理系統(tǒng)完成圖書(shū)管理基本業(yè)務(wù)。【基本要求】1)每種書(shū)的登記內(nèi)容包括書(shū)號(hào)、書(shū)名、著作者、現(xiàn)存量和庫(kù)存量;2)對(duì)書(shū)號(hào)建立索引表

28、(線(xiàn)性表)以提高查找效率;3)系統(tǒng)主要功能如下: *采編入庫(kù):新購(gòu)一種書(shū),確定書(shū)號(hào)后,登記到圖書(shū)帳目表中,如果表中已 有,則只將庫(kù)存量增加;* 借閱:如果一種書(shū)的現(xiàn)存量大于 0,則借出一本,登記借閱者的書(shū)證號(hào)和 歸還期限,改變現(xiàn)存量;*歸還:注銷(xiāo)對(duì)借閱者的登記,改變?cè)摃?shū)的現(xiàn)存量。3概要設(shè)計(jì)有八個(gè)模塊1)圖書(shū)初始化 輸入圖書(shū)的一些信息,編號(hào)、作者、書(shū)名、數(shù)量,使有一定的庫(kù)存。2)新書(shū)入庫(kù) 新書(shū)采編入庫(kù),輸入編號(hào)后如果有次數(shù)只需輸入數(shù)量, 沒(méi)有則繼續(xù)輸入書(shū)名、 作者、數(shù)量。3)添加讀者信息讀者信息初始化, 輸入讀書(shū)證號(hào)和姓名, 只有輸入書(shū)證號(hào)和姓名才能進(jìn)行借 書(shū)還書(shū)。4)借書(shū)模塊讀者輸入讀書(shū)證號(hào),

29、證號(hào)存在輸入要借的圖書(shū)編號(hào),不能借同一本書(shū),如果 借書(shū)數(shù)量以達(dá)到最大也不能借書(shū)。5)還書(shū)模塊歸還已借的圖書(shū),要先輸入讀者書(shū)證號(hào),書(shū)證號(hào)存在繼續(xù)輸入要還的圖書(shū)編 號(hào),圖書(shū)編號(hào)存在并且借來(lái)此書(shū),歸還成功。6)查詢(xún)圖書(shū)信息7)查詢(xún)讀者信息可查詢(xún)讀者姓名書(shū)證號(hào),借了幾本書(shū),都是什么書(shū)和還書(shū)日期,還可以借幾 本書(shū)。8)退出退出讀書(shū)管理系統(tǒng)并保存讀者和圖書(shū)信息。4. 詳細(xì)設(shè)計(jì)1)進(jìn)入系統(tǒng)后首先進(jìn)行圖書(shū)初始化,輸入圖書(shū)的信息。進(jìn)入系統(tǒng)后首先進(jìn)行2)初始化之后,進(jìn)入系統(tǒng),顯示功能列表,可選擇任意系統(tǒng),但在借書(shū)之前3)米編入庫(kù)4)輸入讀者信息否5)借閱圖書(shū)6)歸還圖書(shū)結(jié)束7)查詢(xún)圖書(shū)信息8)查詢(xún)讀者信息輸出讀者

30、書(shū)證號(hào)、姓名、 圖書(shū)編碼和還書(shū)日期輸出讀者信息打印完畢5. 程序代碼#in clude#i nclude #i nclude #in clude #defi ne Max 4typedef struct bookchar book_num10; char book_name20; char book_writer10; int book_xy; int book_kc; struct book *next;BK; typedef struct borrow char borrow_book_num10; char limit_date8;BO; typedef struct reader ch

31、ar reader_num10; char reader_name10; int right;BO borrowMax; struct reader *next; RD;BK *h_book;RD *h_reader; void Login(); int Menu(); void Init(); void Init_book(); void Menu_select(); void Insert_New_Book(); void Find_Book(); void add_reader(); void Print_reader(); void Print_book(); void Borrow_

32、Book(); void Return_Book(); void Save(); void Save_Book(); void Save_Reader(); void Load(); void Load_Reader(); void Load_Book(); void Login()system(cls);printf(nnntt*n);printf(nnnttt歡迎使用圖書(shū)管理系統(tǒng) n);printf(nnntt*n);printf(nnntt按任意鍵進(jìn)入系統(tǒng) .);getch(); system(cls);int Menu() /* 主菜單 */ int dm;printf(ntt 圖書(shū)管

33、理系統(tǒng)主菜單 n); printf(=n); printf(*t0 退出系統(tǒng)n);printf(*t1 采編入庫(kù)n);printf(*t2 登記讀者n);printf(*t3 借閱登記n);printf(*t4 還書(shū)管理n);printf(*t5 查詢(xún)圖書(shū)信息n);printf(*t6 查詢(xún)讀者信息n);printf(=n);printf( 請(qǐng)選擇相應(yīng)的代碼 :); for(;) scanf(%d,&dm); /dm 輸入的數(shù)字 if(dm6)printf(n錯(cuò)誤!請(qǐng)重新輸入 :);else break; return dm;void Menu_select()/* 主菜單選擇函數(shù) */ fo

34、r(;) switch(Menu() /* 功能選擇 */ case 0: system(cls);Save();printf(nnt 文件保存成功 !n);printf(nnt 歡迎下次使用本系統(tǒng) !n); getch();exit(0);case 1:Insert_New_Book();break;case 2:add_reader();break;case 3:Borrow_Book();break;case 4:Return_Book();break;case 5:Print_book();break;case 6:Print_reader();break; default:print

35、f(n 錯(cuò)誤 !);exit(0);void Init() /* 初始化 */BK *p0;printf(n 圖書(shū)初始化開(kāi)始 , 請(qǐng)輸入圖書(shū)信息 .n 包括編號(hào) . 書(shū)名 . 數(shù)量.n);p0=(BK*)malloc(sizeof(BK); h_book=p0;printf(n 請(qǐng)輸入圖書(shū)信息 :n); printf(圖書(shū)編號(hào) :);/*scanf(%s,p0-book_num); printf(圖書(shū)名稱(chēng) :);/*scanf(%s,p0-book_name); printf( 圖書(shū)作者 :); /* scanf(%s,p0-book_writer); printf(圖書(shū)數(shù)量 :);/*sca

36、nf(%d,&p0-book_kc); p0-book_xy=p0-book_kc; /* */p0-next=NULL;printf(n 圖書(shū)信息初始化完畢 getch();system(cls);輸入圖書(shū)編號(hào) ( 唯一)*/輸入圖書(shū)名稱(chēng) */輸入圖書(shū)作者 */輸入圖書(shū)數(shù)量 */ 開(kāi)始時(shí)圖書(shū)現(xiàn)有量和庫(kù)存量相等! 按任意鍵繼續(xù)下一步操作 .n);void Insert_New_Book()/* 新書(shū)入庫(kù) */BK *p,*p0,*p1;p=p1=h_book;printf(n 新書(shū)入庫(kù)模塊 .n);printf(n 請(qǐng)輸入新書(shū)信息 .n 包括書(shū)號(hào) . 書(shū)名. 數(shù)量 .n); p0=(BK *)

37、malloc(sizeof(BK);printf( 圖書(shū)編號(hào) :);scanf(%s,p0-book_num); while(strcmp(p0-book_num,p1-book_num)!=0&p1-next!=NULL) p1=p1-next;if(strcmp(p0-book_num,p1-book_num)=0) /* 此處分兩種情況 , 若 圖書(shū)編號(hào)存在 ,則直接進(jìn)庫(kù) ,只須輸入書(shū)的數(shù)量 */printf(n此編號(hào)圖書(shū)已存在 ! 直接入庫(kù) !n);printf( 圖書(shū)數(shù)量 :);scanf(%d,&p0-book_kc); p1-book_kc+=p0-book_kc; p1-boo

38、k_xy+=p0-book_kc;else/* 若不存在 , 則需要輸入其他的信息 , 然后在進(jìn)行插入操作 */printf( 圖書(shū)名稱(chēng) :); scanf(%s,p0-book_name);printf( 圖書(shū)作者 :); scanf(%s,p0-book_writer); printf( 圖書(shū)數(shù)量 :); scanf(%d,&p0-book_kc);/ 庫(kù)存數(shù)量while(p-next) p=p-next; if(h_book=NULL) h_book=p0; /* 此處分兩種情況 , 鏈表中沒(méi)有數(shù) 據(jù),head直接指向p0處*/else p-next=p0;/*此處分兩種情況 , 鏈表中

39、有數(shù)據(jù) ,鏈表中最后元素的 next 指向 p0 處*/p0-next=NULL; p0-book_xy=p0-book_kc;printf(n新書(shū)入庫(kù)完畢 ! 按任意鍵繼續(xù)下一步操作 .n);getch();system(cls);void add_reader()/* 添加讀者 */ RD *p0;int i;printf(n讀者初始化開(kāi)始 , 請(qǐng)輸入讀者信息 .n包括書(shū)證號(hào) . 姓名.n);p0=(RD*)malloc(sizeof(RD); /*申請(qǐng)新結(jié)點(diǎn)存儲(chǔ)空間 */h_reader=p0;printf(n 請(qǐng)輸入讀者的信息 :n); printf(讀者書(shū)證號(hào) :);scanf(%s

40、,p0-reader_num); printf(讀者姓名 :);scanf(%s,p0-reader_name); p0-right=0;for(i=0;iborrowi.borrow_book_num,0); /* 所借圖書(shū)直接置為 ( 即 沒(méi)有借書(shū) )*/strcpy(p0-borrowi.limit_date,0);p0-next=NULL;printf(n 讀者信息初始化完畢 ! 按任意鍵繼續(xù)下一步操作 .n); getch();system(cls);void Borrow_Book() /* 借書(shū)模塊 */BK *p0; RD *p1;char bo_num10,rea_num10

41、,lim_date8;int i;p0=h_book; p1=h_reader;printf(n 借書(shū)模塊 .n);printf(n 請(qǐng)輸入借書(shū)的讀者書(shū)證號(hào) :); scanf(%s,rea_num);while(p1-next!=NULL&strcmp(rea_num,p1-reader_num)!=0) p1=p1-next;if(p1-next=NULL&strcmp(rea_num,p1-reader_num)!=0)printf(n此讀者編號(hào)不存在 ! 按任意鍵返回 .n);goto END;printf(n 請(qǐng)輸入你要借的書(shū)的編號(hào) :); scanf(%s,bo_num);whil

42、e(strcmp(bo_num,p0-book_num)!=0&p0-next!=NULL) p0=p0-next;if(p0-next=NULL&strcmp(bo_num,p0-book_num)!=0)printf(n 此圖書(shū)編號(hào)不存在 ! 按任意鍵返回 .n);goto END;else if(p0-book_xyrightMax|p1-right=Max)printf(n 不好意思 , 借書(shū)數(shù)目已滿(mǎn) ! 不能借書(shū) !n 按任意鍵返回);goto END;else if(strcmp(p1-borrow0.borrow_book_num,0)!=0)for(i=0;iborrowi.b

43、orrow_book_num,bo_num)=0)printf(n抱歉 ! 同一個(gè)讀者不能同借兩本相同的書(shū) !n 按任意鍵返回);goto END;else if(strcmp(p1-borrowi.borrow_book_num,0)=0)printf(n 請(qǐng)輸入你要?dú)w還圖書(shū)的日期 :);scanf(%s,lim_date); strcpy(p1-borrowp1-right+.borrow_book_num,bo_num); strcpy(p1-borrowp1-right-1.limit_date,lim_date);p0-book_xy-;p0-book_kc-;printf(n讀 者

44、 編 號(hào) %s 借 書(shū) 完 畢 ! 按 任 意 鍵 繼 續(xù) 下 步 操作.,p1-reader_num);goto END;elseprintf(n 請(qǐng)輸入你要?dú)w還圖書(shū)的日期 :);scanf(%s,lim_date);strcpy(p1-borrowp1-right+.borrow_book_num,bo_num);strcpy(p1-borrowp1-right-1.limit_date ,lim_date );p0-book_xy-;p0-book_kc-;printf(n讀 者 編 號(hào) %s 借 書(shū) 完 畢 ! 按 任 意 鍵 繼 續(xù) 下 步 操作.,p1-reader_num);EN

45、D:getch(); system(cls);void Return_Book() /* 還書(shū)模塊 */BK *p; RD *q;int i,j,find=0;char return_book_num10,return_reader_num10;p=h_book; q=h_reader;printf(n還書(shū)模塊 .n);printf(n 請(qǐng)輸入要還書(shū)的讀者編號(hào) :); scanf(%s,return_reader_num); while(q-next!=NULL&strcmp(return_reader_num,q-reader_num)!=0) q=q-next;if(q-next=NULL

46、&strcmp(return_reader_num,q-reader_num)!=0)find=2;printf(n 此讀者編號(hào)不存在 ! 按任意鍵返回 .n);goto end;printf(n 請(qǐng)輸入讀者還書(shū)的編號(hào) :); scanf(%s,return_book_num); while(p-next!=NULL&strcmp(return_book_num,p-book_num)!=0) p=p-next;if(p-next=NULL&strcmp(return_book_num,p-book_num)!=0)find=2;printf(n錯(cuò)誤!此圖書(shū)編號(hào)不存在 !按任意鍵返回 .n);goto end; for(i=0;iborrowi.borrow_book_num)=0)/* 如果此讀者借了此書(shū) */find=1;for(j=i;j

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論