武漢理工大學(xué)計(jì)算機(jī)影碟租賃租賃者管理課程設(shè)計(jì)_第1頁(yè)
武漢理工大學(xué)計(jì)算機(jī)影碟租賃租賃者管理課程設(shè)計(jì)_第2頁(yè)
武漢理工大學(xué)計(jì)算機(jī)影碟租賃租賃者管理課程設(shè)計(jì)_第3頁(yè)
武漢理工大學(xué)計(jì)算機(jī)影碟租賃租賃者管理課程設(shè)計(jì)_第4頁(yè)
武漢理工大學(xué)計(jì)算機(jī)影碟租賃租賃者管理課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、學(xué) 號(hào): 課 程 設(shè) 計(jì)題 目影碟租賃系統(tǒng)租賃者管理的設(shè)計(jì)與實(shí)現(xiàn)學(xué) 院計(jì)算機(jī)科學(xué)與技術(shù)專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班 級(jí)姓 名指導(dǎo)教師年月日目 錄計(jì)算機(jī)基礎(chǔ)強(qiáng)化訓(xùn)練任務(wù)書21問(wèn)題描述31.1問(wèn)題描述31.2基本要求31.3數(shù)據(jù)需求31.4功能需求32.實(shí)現(xiàn)分析43程序設(shè)計(jì)43.1存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)43.2主要算法設(shè)計(jì)5程序主要函數(shù)原型及功能5各函數(shù)的實(shí)現(xiàn)6函數(shù)模塊183.2.4 程序流程圖184.調(diào)試報(bào)告204.1調(diào)試中的問(wèn)題204.2對(duì)設(shè)計(jì)和編碼的討論和分析215. 程序運(yùn)行結(jié)果216.經(jīng)驗(yàn)和體會(huì)286.1感受和體會(huì)286.2對(duì)算法改進(jìn)的想法297.租賃信息鏈表內(nèi)容和源程序307.1租賃信息鏈表內(nèi)容30

2、7.2源程序30本科生課程設(shè)計(jì)成績(jī)?cè)u(píng)定表42計(jì)算機(jī)基礎(chǔ)強(qiáng)化訓(xùn)練任務(wù)書學(xué)生姓名: 專業(yè)班級(jí): 計(jì)算機(jī)班 指導(dǎo)教師: 工作單位: 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 題 目: 初始條件:理論:學(xué)完計(jì)算機(jī)基礎(chǔ)知識(shí),掌握C+語(yǔ)言編程基礎(chǔ)和VC開(kāi)發(fā)平臺(tái)的使用。實(shí)踐:計(jì)算機(jī)科學(xué)系實(shí)驗(yàn)中心提供計(jì)算機(jī)及軟件開(kāi)發(fā)環(huán)境。要求完成的主要任務(wù): (1)系統(tǒng)需求分析,得到系統(tǒng)的數(shù)據(jù)需求和功能需求,分析結(jié)果用表格記錄。 (2)系統(tǒng)設(shè)計(jì),包括內(nèi)存數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)文件設(shè)計(jì)、代碼設(shè)計(jì)、輸入/輸出設(shè)計(jì)、用戶界面設(shè)計(jì)、處理過(guò)程設(shè)計(jì)。要求內(nèi)存數(shù)據(jù)用鏈表組織,數(shù)據(jù)文件用文本文件,用戶界面用字符界面。至少實(shí)現(xiàn)數(shù)據(jù)記錄的增加、修改、刪除、查詢(查詢應(yīng)

3、能按不同數(shù)據(jù)項(xiàng)進(jìn)行)。(2)編制好程序后,設(shè)計(jì)若干測(cè)試用例,上機(jī)測(cè)試所設(shè)計(jì)的程序。(4)設(shè)計(jì)報(bào)告按格式要求書寫。設(shè)計(jì)報(bào)告正文的內(nèi)容應(yīng)包括:1)系統(tǒng)描述 包括問(wèn)題說(shuō)明、數(shù)據(jù)需求和功能需求。2)系統(tǒng)設(shè)計(jì) 包括內(nèi)存數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)文件設(shè)計(jì)、代碼設(shè)計(jì)、輸入/輸出設(shè)計(jì)、用戶界面設(shè)計(jì)、處理過(guò)程設(shè)計(jì)。3)系統(tǒng)測(cè)試 包括測(cè)試用例的描述、測(cè)試方法和測(cè)試結(jié)果。4)設(shè)計(jì)的特點(diǎn)、不足、收獲和體會(huì)。時(shí)間安排:1、第20周(7月4日至7月8日)完成。2、7月8日8:00到計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心(三樓)檢查程序、交課程設(shè)計(jì)報(bào)告、源程序(CD盤)。指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 年 月 日課程設(shè)計(jì)報(bào)告書1

4、問(wèn)題描述1.1問(wèn)題描述針對(duì)影像店影碟出租的管理,設(shè)計(jì)一個(gè)對(duì)租賃者進(jìn)行管理的系統(tǒng)。1.2基本要求內(nèi)存數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、數(shù)據(jù)文件設(shè)計(jì)、代碼設(shè)計(jì)、輸入/輸出設(shè)計(jì)、用戶界面設(shè)計(jì)、處理過(guò)程設(shè)計(jì)。要求內(nèi)存數(shù)據(jù)用鏈表組織,數(shù)據(jù)文件用文本文件,用戶界面用字符界面。至少實(shí)現(xiàn)數(shù)據(jù)記錄的增加、修改、刪除、查詢(查詢應(yīng)能按不同數(shù)據(jù)項(xiàng)進(jìn)行)。1.3數(shù)據(jù)需求經(jīng)過(guò)對(duì)影像店的觀察,最終確定租賃者的信息包括:租賃者注冊(cè)時(shí)間、租賃時(shí)間、對(duì)應(yīng)時(shí)間的租賃影碟的名稱、租賃影碟的數(shù)量、租賃押金、租賃者的編號(hào)。如下表:姓名編號(hào)注冊(cè)時(shí)間租賃數(shù)量租賃影碟的信息押金(元)租賃時(shí)間影碟名字張三000120110101220110103哈利波特7502

5、0110509指環(huán)王31.4功能需求為實(shí)現(xiàn)對(duì)影碟租賃者的管理,本系統(tǒng)主要實(shí)現(xiàn)以下幾個(gè)功能:1 增加租賃會(huì)員。其中信息包括注冊(cè)時(shí)間、租賃時(shí)間、對(duì)應(yīng)時(shí)間的租賃影碟的名稱、租賃影碟的數(shù)量、租賃押金、租賃者的編號(hào)。2 刪除租賃會(huì)員。將對(duì)應(yīng)的會(huì)員的信息刪除。3 修改會(huì)員的租賃信息。對(duì)需要修改租賃信息的會(huì)員實(shí)現(xiàn)影碟數(shù)量的增減及相關(guān)租賃時(shí)間、影碟名字的修改。4 查詢租賃信息。設(shè)計(jì)的查詢功能分為以下兩種:Ø 按租賃者相關(guān)信息查詢。包括按照租賃者姓名查詢和按照編號(hào)查詢,若成功,則返回相關(guān)租賃信息,若失敗,返回失敗信息。Ø 按照租賃日期查詢。對(duì)輸入的一個(gè)日期進(jìn)行查詢,查詢結(jié)果為:對(duì)應(yīng)日期注冊(cè)會(huì)

6、員的數(shù)量、對(duì)應(yīng)日期租賃影碟的信息(租賃者、租賃數(shù)量)。5 保存文件。將內(nèi)存的信息保存到外存儲(chǔ)器上,實(shí)現(xiàn)信息的永久保存。2.實(shí)現(xiàn)分析(1)針對(duì)某個(gè)影像店的租賃者信息先建立一個(gè)鏈表,存儲(chǔ)租賃者的信息:注冊(cè)時(shí)間、租賃時(shí)間、對(duì)應(yīng)時(shí)間的租賃影碟的名稱、租賃影碟的數(shù)量、租賃押金、租賃者的編號(hào)。(2)對(duì)于已經(jīng)建立的鏈表通過(guò)人機(jī)交互窗口進(jìn)行相關(guān)的操作。包括:退出系統(tǒng)、查詢租賃者、添加新租賃者、 修改租賃數(shù)量、刪除租賃者 、查看所有租賃者、按日期查詢、保存成文件。(3)對(duì)于用戶的各種選擇操作進(jìn)行相關(guān)的操作,并對(duì)用戶的錯(cuò)誤輸入進(jìn)行處理。3程序設(shè)計(jì)3.1存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)本次課程設(shè)計(jì)采用鏈表來(lái)存儲(chǔ)租賃者的相關(guān)信息,用到的

7、存儲(chǔ)結(jié)構(gòu)如下:typedef struct char Name20; / 租賃者姓名int Mount; /租借影碟數(shù)量double Price; /押金long int Data; /注冊(cè)日期long int CDData10; /租賃影碟的時(shí)間long int Num; /租賃者編號(hào)char CDNameCDNUMMAX20; /租賃影碟的名稱members; /結(jié)構(gòu)體memember,每個(gè)結(jié)點(diǎn)的內(nèi)容typedef struct nodemembers data; node *next;LNode,*LinkList; /結(jié)構(gòu)體LNode,鏈表的結(jié)點(diǎn)3.2主要算法設(shè)計(jì)3.2.1程序主要函數(shù)

8、原型及功能1 主要函數(shù)原型及功能:LinkList Creat_LinkList()功能:創(chuàng)建一個(gè)空鏈表,并返回鏈表的頭結(jié)點(diǎn)。int equal(char a,char b) 功能:判斷兩個(gè)字符數(shù)組是否相等函數(shù)。void Add_LinkList(LinkList H) 功能:添加新的租賃者信息,信息包括:注冊(cè)時(shí)間、租賃時(shí)間、對(duì)應(yīng)時(shí)間的租賃影碟的名稱、租賃影碟的數(shù)量、租賃押金、租賃者的編號(hào);并輸出租賃會(huì)員的總數(shù)。void Revise_LinkList(LinkList H) 功能:修改租賃人的租賃信息。首先需要用戶輸入需要修改信息的人數(shù),如果人數(shù)大于已經(jīng)注冊(cè)的會(huì)員數(shù),則會(huì)提示出錯(cuò)信息,并讓用

9、戶重新輸入;在正確輸入后,用戶可以輸入相關(guān)租賃者姓名,并修改其租賃信息,如:張三原本租賃一張影碟,現(xiàn)在又租借了1張影碟,將這張影碟的租賃信息增加到張三的租賃信息中。void Del_LinkList(LinkList H) 功能:根據(jù)用戶輸入的需要?jiǎng)h除的租賃者姓名,完成刪除該租賃者的租賃信息,并返回剩余租賃者的數(shù)量。LinkList Search(LinkList H) 功能:按照用戶的選擇:按姓名查找和按編號(hào)查找,完成對(duì)相關(guān)信息的查找功能。void Search_Time(LinkList H) 功能:按日期查詢租賃信息。包括對(duì)于用戶輸入的日期,查詢?cè)撊掌诘淖?cè)人數(shù)和租賃影碟的信息;如201

10、10101,有一個(gè)人注冊(cè),沒(méi)人租借影碟;20110109,租賃影碟1張:哈利波特7,租賃者李四,押金20等。void browsing(LinkList H) 功能:瀏覽所有租賃者的租賃信息。void Printff(LinkList p)功能:輸出租賃者的信息。void WriteCDdata(LinkList H)功能:將主存中的鏈表信息以文本文件的形式存儲(chǔ)到外存儲(chǔ)器中。void main( )功能:實(shí)現(xiàn)人機(jī)交互,提供用戶選擇相關(guān)操作。3.2.2各函數(shù)的實(shí)現(xiàn)(1)創(chuàng)建一個(gè)空鏈表,并返回頭指針:函數(shù)LinkList Creat_LinkList()的實(shí)現(xiàn):LinkList Creat_Lin

11、kList()LinkList H;H=(LinkList)malloc(sizeof(LNode);if(H)H->next=NULL;return H;(2)判斷兩個(gè)字符數(shù)組是否相等函數(shù) 函數(shù)int equal(char a,char b)的實(shí)現(xiàn):int equal(char a,char b) /定義一個(gè)判斷兩個(gè)字符數(shù)組是否相等函數(shù)int i=0,j;while(ai!='0'|bi!='0')j=0;if(ai=bi)i+;j=1;elsebreak;return j;/字符串比較,返回值非零相等,零不相等(3)添加租賃者Ø 使用尾插法插

12、入鏈表的結(jié)點(diǎn),結(jié)點(diǎn)信息包括:租賃者注冊(cè)時(shí)間、租賃時(shí)間、對(duì)應(yīng)時(shí)間 的租賃影碟的名稱、租賃影碟的數(shù)量、租賃押金、租賃者的編號(hào)。Ø 添加租賃者信息void Add_LinkList(LinkList H)的實(shí)現(xiàn):void Add_LinkList(LinkList H) /添加新的租賃者信息LinkList p,q,temp,r;int k=0,i=0,j=1,n,count=0,x;char name20,name120;float price=0.0;long int data,n1,cddata;doprintf("請(qǐng)輸入需要增加租賃者數(shù)量:");scanf(&q

13、uot;%d",&k);if(k=0) return ;if(H->next=NULL) q=H;elsetemp=H->next;while(temp->next) temp=temp->next; q=temp;while(j<=k) p=(LinkList)malloc(sizeof(LNode);if(!p)printf("申請(qǐng)空間失敗!n");return ;elseq->next=p;p->next=NULL;doprintf("請(qǐng)輸入第%d個(gè)租賃者的姓名:",j);scanf(&q

14、uot;%s",&name);printf("請(qǐng)輸入租借數(shù)目,押金,注冊(cè)時(shí)間,租賃者編號(hào) 例如: 3 50.0 20100701 1n");scanf("%d %f %ld %ld",&n,&price,&data,&n1);/把新信息賦給新結(jié)點(diǎn)strcpy(p->data.Name,name);p->data.Mount=n;p->data.Price=price;p->data.Data=data;p->data.Num=n1;if(n>0)while(i<n

15、)printf("請(qǐng)輸入要增加的第%d個(gè)影碟的信息:n",i+1); printf("請(qǐng)輸入增加租賃日期:"); scanf("%d",&cddata);p->data.CDDataj+i-1=cddata; printf("請(qǐng)輸入對(duì)應(yīng)的影碟名字:"); scanf("%s",name1); strcpy(p->data.CDNamej+i-1,name1);i+;i=0;while(n<=0|price<=0|n1<=0|data<=0);print

16、f("新會(huì)員添加成功!n");j+;q=p;j=1;r=H->next;while(r)count+;r=r->next;printf("此時(shí)共有%d個(gè)注冊(cè)會(huì)員n",count);count=0;printf("繼續(xù)添加 8;其他數(shù)字退出添加n請(qǐng)輸入:");scanf("%d",&x);while(x=8);(4)修改租賃者的租賃信息Ø 首先提示用戶選擇相應(yīng)的修改方式:按姓名修改信息、按編號(hào)修改信息。Ø 根據(jù)用戶選擇的修改方式,輸入要修改租賃信息的租賃者名字或編號(hào),進(jìn)行查找,

17、若查找成功,則修改相關(guān)租賃信息,同時(shí)對(duì)租借數(shù)量進(jìn)行判斷是否超過(guò)最大租借限度;查找失敗,返回失敗信息。Ø 顯示哈希表的函數(shù)void Revise_LinkList(LinkList H)的實(shí)現(xiàn):void Revise_LinkList(LinkList H) /修改租賃人的租賃信息LinkList p,q;int k=0,k2=1,mount=0,i=0,j=0,count=0,x,m,n,u,v;char name20,name120;doprintf("請(qǐng)輸入需要修改信息的租賃者數(shù)量:");scanf("%d",&k);q=H->

18、;next;while(q)count+;q=q->next;while(k>count)printf("你輸入的修改人數(shù)大于注冊(cè)數(shù)量!");printf("請(qǐng)重新輸入:");scanf("%d",&k);p=H;doprintf("1 按照姓名修改t2 按照編號(hào)修改n請(qǐng)輸入:");scanf("%d",&m);if(m!=1&&m!=2) printf("你的輸入有誤!請(qǐng)重新輸入!");while(m!=1&&m!

19、=2);if(m=1)printf("請(qǐng)輸入要修改信息的租賃者姓名:");scanf("%s",&name);while(p->next)if(equal(p->next->data.Name,name)=1)k=0;break;elsep=p->next;if(m=2)printf("請(qǐng)輸入要修改信息的租賃者編號(hào):");scanf("%d",&n);while(p->next)if(p->next->data.Num=n)k=0;break;elsep=p

20、->next;if(k=0) /修改租借數(shù)量printf("會(huì)員中有記錄!n請(qǐng)輸入修改租借數(shù)量:");scanf("%d",&mount);j=p->next->data.Mount;p->next->data.Mount=p->next->data.Mount+mount;while(p->next->data.Mount)if(p->next->data.Mount>10)printf("租借數(shù)量超出上限!n請(qǐng)重新輸入修改租借數(shù)量:");scanf(&

21、quot;%d",&mount);p->next->data.Mount=p->next->data.Mount+mount;else break;if(mount>0)while(i<mount)printf("請(qǐng)輸入要增加的第%d個(gè)影碟的信息:n",i+1);printf("請(qǐng)輸入租賃日期:");scanf("%d",&p->next->data.CDDataj+i);printf(" 請(qǐng)輸入對(duì)應(yīng)的影碟名字:");scanf("

22、%s",name1);strcpy(p->next->data.CDNamej+i,name1);i+;if(mount<0)printf("輸入修改租借數(shù)量為負(fù),既需要?jiǎng)h除租賃的影碟!n");while(i<0-mount)doprintf("1 按影碟名字修改t2 按租賃日期修改n請(qǐng)輸入:");scanf("%d",&u);if(u!=1&&u!=2) printf("你的輸入有誤!請(qǐng)重新輸入!");while(u!=1&&u!=2);i

23、f(u=1)printf("請(qǐng)輸入要?jiǎng)h除影碟名字:");scanf("%sd",&name1);int h=0;while(h<j)if(equal(p->data.CDNameh,name1)=1)while(h<j-1)strcpy(p->data.CDNameh,p->data.CDNameh+1);p->data.CDDatah=p->data.CDDatah+1;h+;h+;if(u=2)printf("請(qǐng)輸入要?jiǎng)h除影碟的租賃日期:");scanf("%d"

24、;,&v);int h=0;while(h<j)if(p->data.CDDatah=v)while(h<j-1)strcpy(p->data.CDNameh,p->data.CDNameh+1);p->data.CDDatah=p->data.CDDatah+1;h+;h+;i+;i=0;printf("修改成功!n");else printf("沒(méi)有相應(yīng)的會(huì)員!n");printf("繼續(xù)修改 8;其他數(shù)字退出修改n請(qǐng)輸入:");scanf("%d",&

25、x);while(x=8);(5)刪除某些租賃者的信息Ø 首先提示用戶選擇相應(yīng)的刪除方式:按姓名刪除信息、按編號(hào)刪除信息。Ø 根據(jù)用戶選擇的刪除方式,輸入要?jiǎng)h除租賃信息的租賃者名字或編號(hào),進(jìn)行查找,若查找成功,則刪除相關(guān)租賃信息,同時(shí)對(duì)租借者數(shù)量進(jìn)行減操作;查找失敗,返回失敗信息。Ø 刪除租賃者信息函數(shù)void Del_LinkList(LinkList H)的實(shí)現(xiàn):void main()char ch1;InitNameList(); CreateHashList (); doprintf("D. 顯示哈希表nF. 查找nQ. 退出n請(qǐng)選擇: &quo

26、t;);cin>>&ch1;switch(ch1)case 'D':Display(); cout<<endl;break;case 'F':FindList();cout<<endl;break;case 'Q':exit(0);cout<<"come on !(y/n):"cin>>&ch1;while(ch1!='n'); (6)租賃信息的查找Ø 首先提示用戶選擇相應(yīng)的查找方式:按姓名查找信息、按編號(hào)編號(hào)信息。Ø

27、; 根據(jù)用戶選擇的查找方式,輸入要查找租賃信息的租賃者名字或編號(hào),進(jìn)行查找,若查找成功,則輸出相關(guān)租賃信息;查找失敗,返回失敗信息。Ø 查找租賃者信息函數(shù)LinkList Search(LinkList H)的實(shí)現(xiàn):LinkList Search(LinkList H) /查找功能函數(shù)定義int k1,x;LinkList p;char name20;long int num;dop=H;printf("請(qǐng)選擇:t1,按租賃者姓名查詢t2,按租賃者編號(hào)查詢t0,退出查詢n");printf("請(qǐng)選擇:");scanf("%ld&quo

28、t;,&k1);if(k1=1) /按租賃者姓名查詢printf("請(qǐng)輸入租賃者姓名:");scanf("%s",name);while(p)if(equal(p->data.Name,name)=1) /查找租賃者姓名printf("查找成功!n");Printff(p);break;elsep=p->next;if(!p)printf("查找失敗,未注冊(cè)!n");if(k1=2) /按租賃者編碼查詢printf("請(qǐng)輸入租賃者編碼(數(shù)字):");scanf("%

29、ld",&num);while(p)if(p->data.Num=num)printf("查找成功!n");Printff(p);break;elsep=p->next;if(!p)printf("查找失敗,未注冊(cè)!n");if(k1=0) return(NULL);printf("繼續(xù)查找 8;其他數(shù)字退出查找n請(qǐng)輸入:");scanf("%d",&x);while(x=8); return p;(7)按日期查找租賃信息Ø 根據(jù)用戶輸入的日期,進(jìn)行查找,若查找到相關(guān)

30、日期有會(huì)員注冊(cè)或者有影碟租賃出去,則返回相關(guān)注冊(cè)信息或者租賃信息Ø 按日期查找函數(shù)void Search_Time(LinkList H)的實(shí)現(xiàn):void Search_Time(LinkList H) /按日期查詢租賃信息 LinkList p;long int time;int i=0,x,j=0,k=0;dop=H;printf("請(qǐng)輸入日期(格式):");scanf("%ld",&time);while(p) /遍歷查找if(p->data.Data=time)i+; /統(tǒng)計(jì)數(shù)量Printff(p);if(p->da

31、ta.Data!=time)while(j<p->data.Mount)if(p->data.CDDataj=time)Printff(p);k+;j+;j=0;p=p->next;printf("共有%d人在%ld注冊(cè)n",i,time);printf("共有%d人在%ld租借影碟n",k,time);k=0;i=0;printf("繼續(xù)按日期查詢 8;其余輸入退出查詢n請(qǐng)輸入:");scanf("%d",&x);while(x=8);(8)顯示所有租賃者的租賃信息Ø 顯

32、示出所有租賃者的租賃信息,包括:租賃者注冊(cè)時(shí)間、租賃時(shí)間、對(duì)應(yīng)時(shí)間的租賃影碟的名稱、租賃影碟的數(shù)量、租賃押金、租賃者的編號(hào)。Ø 函數(shù)void browsing(LinkList H)的實(shí)現(xiàn):void browsing(LinkList H) /顯示所有租賃者的信息LinkList p;int k8=1;p=H->next;if(p=NULL) printf("表為空!");while(p)printf("第%d個(gè)租賃人信息:n",k8);Printff(p);k8+;p=p->next;(9)輸出函數(shù)函數(shù)void Printff(L

33、inkList p)的實(shí)現(xiàn):void Printff(LinkList p) /輸出函數(shù)int i=0;printf("租賃者姓名: %s 租借影碟數(shù)量: %d 押金: %fn注冊(cè)日期: %ld 租賃者編號(hào):%ldn",p->data.Name,p->data.Mount,p->data.Price,p->data.Data,p->data.Num);while(i<p->data.Mount)printf("租賃日期:%d 對(duì)應(yīng)的",p->data.CDDatai);printf("影碟名字:%

34、sn",p->data.CDNamei);i+;(10)將內(nèi)存鏈表以文本文件的形式寫入外存儲(chǔ)器函數(shù)void WriteCDdata(LinkList H)的實(shí)現(xiàn):void WriteCDdata(LinkList H)LinkList p;fstream cddata;cddata.open("影碟租賃租賃者管理.txt",ios:out);if(!cddata) printf("文件打開(kāi)失敗!");elsep=H->next;if(p=NULL) printf("鏈表為空,無(wú)法完成信息存入硬盤!");elsew

35、hile(p)cddata.write(char*)&(p->data.Name),sizeof(p->data.Name);cddata.write(char*)&(p->data.Num),sizeof(p->data.Num);cddata.write(char*)&(p->data.Data),sizeof(p->data.Data);cddata.write(char*)&(p->data.Mount),sizeof(p->data.Mount);cddata.write(char*)&(p-&g

36、t;data.Price),sizeof(p->data.Price);cddata.write(char*)&(p->data.CDData),sizeof(p->data.CDData);cddata.write(char*)&(p->data.CDName),sizeof(p->data.CDName);p=p->next;cddata.close();(11)人機(jī)交互的實(shí)現(xiàn)主函數(shù)void main( )的實(shí)現(xiàn):void main( ) / 主函數(shù),菜單形式int key=0; LinkList H;char l;H=Creat_Lin

37、kList( );printf("-歡迎使用影碟租賃者管理系統(tǒng)-n");printf("由于現(xiàn)在沒(méi)會(huì)員注冊(cè),請(qǐng)先注冊(cè)會(huì)員:n");Add_LinkList(H);/ 主菜單內(nèi)容doprintf(" -$-n");printf(" * 0 退出系統(tǒng) *n");printf(" * 1 查詢租賃者 *n");printf(" * 2 添加新租賃者 *n");printf(" * 3 修改租賃數(shù)量 *n");printf(" * 4 刪除租賃者 *n&

38、quot;);printf(" * 5 查看所有租賃者 *n");printf(" * 6 按日期查詢 *n");printf(" * 7 保存成文件 *n");printf(" -$-n");printf("請(qǐng)選擇: ");scanf("%d",&key);printf("n");switch(key)case 0: printf("你選擇退出系統(tǒng),謝謝使用!n"); return ;break;case 1: Search(

39、H);printf("n");break;case 2: Add_LinkList(H);printf("n");break;case 3: Revise_LinkList(H);printf("n");break;case 4: Del_LinkList(H);printf("n");break;case 5: browsing(H);printf("n");break;case 6: Search_Time(H);printf("n");break;case 7: Wri

40、teCDdata(H);printf("n");break;default: printf("你的選擇有誤!n");printf("繼續(xù)Y;退出Nn");printf("請(qǐng)選擇: ");scanf("%s",&l);while(l='Y'|l='y');3.2.3函數(shù)模塊模塊調(diào)用關(guān)系主函數(shù)main添加信息模塊刪除信息模塊修改信息模塊文件寫入模塊信息顯示模塊按時(shí)間查找信息模塊查找信息模塊3.2.4 程序流程圖本次程序流程圖如下開(kāi)始添加成員函數(shù)0 退出 1查詢

41、 2 添加3 修改 4 刪除 5 查看6. 日期查詢 7 存文件查詢信息添加信息修改信息刪除信息按日期查詢顯示全部信息以文件存入12345678 繼續(xù)其他數(shù)字,退出88Y繼續(xù)N退出其他數(shù)字Y結(jié)束N4.調(diào)試報(bào)告4.1調(diào)試中的問(wèn)題經(jīng)過(guò)對(duì)影碟租賃和系統(tǒng)的研究后,即進(jìn)行程序的設(shè)計(jì)和編碼;將原程序編好后,經(jīng)過(guò)編譯,有如下幾個(gè)問(wèn)題:Ø 鏈表的頭結(jié)點(diǎn)不存放信息,僅作鏈表的表示起點(diǎn),因此每次對(duì)鏈表的增加或查找應(yīng)從第二個(gè)結(jié)點(diǎn)開(kāi)始,即從H->next開(kāi)始。Ø 增加新的租賃者信息的函數(shù)void Add_LinkList(LinkList H)中,采用尾插法插入,因此插入點(diǎn)是最后一個(gè)結(jié)點(diǎn),而

42、不是第二個(gè)結(jié)點(diǎn),開(kāi)始以第二個(gè)結(jié)點(diǎn)作為插入點(diǎn),在插入后沒(méi)有將第二個(gè)結(jié)點(diǎn)后的結(jié)點(diǎn)用指針連接起來(lái),導(dǎo)致每次鏈表中都只有兩個(gè)結(jié)點(diǎn);最后改成:temp=H->next;while(temp->next) temp=temp->next; q=temp;q既是鏈表尾結(jié)點(diǎn),以q為結(jié)點(diǎn)開(kāi)始插入。Ø 增加新的租賃者信息的函數(shù)void Add_LinkList(LinkList H)中,設(shè)置了兩個(gè)變量i、j作為存儲(chǔ)租出影碟的時(shí)間數(shù)組和名字?jǐn)?shù)組的下標(biāo),由于每次對(duì)一個(gè)用戶租賃信息的插入時(shí),i、j的值都會(huì)改變,但是對(duì)下一個(gè)插入租賃者,其存儲(chǔ)租出影碟的時(shí)間數(shù)組和名字?jǐn)?shù)組的下標(biāo)i、j應(yīng)該是二者的

43、初始值,不應(yīng)該是上一次租賃者插入結(jié)束后的修改值;經(jīng)過(guò)分析,在每次一個(gè)租賃者信息插入結(jié)束后修改i、j的值,即i=j=0。Ø 修改租賃信息函數(shù)void Revise_LinkList(LinkList H)中,由于對(duì)租賃影碟的數(shù)量有限制,因此通過(guò)判斷語(yǔ)句if(p->next->data.Mount>10)來(lái)控制用戶修改租賃影碟的數(shù)量,如果要修改的影碟數(shù)量超過(guò)上限,則要求用戶重新輸入修改值,若沒(méi)有超過(guò)上限,則進(jìn)行相關(guān)的操作。Ø 在顯示全部租賃者信息的函數(shù)void browsing(LinkList H)中,由于空表無(wú)法顯示信息,因此要對(duì)空表提示失敗信息,通過(guò)語(yǔ)句

44、p=H->next;if(p=NULL) printf("表為空!");來(lái)實(shí)現(xiàn)。Ø 在添加信息函數(shù)、刪除信息函數(shù)、修改信息函數(shù)、查找信息函數(shù)中,采用dowhile()語(yǔ)句提供用戶選擇是否繼續(xù)相關(guān)操作,開(kāi)始while語(yǔ)句中的判斷條件為:x=Y|x=y;這樣的條件對(duì)于主函數(shù)中的switch語(yǔ)句中,系統(tǒng)將字符型數(shù)據(jù)默認(rèn)為數(shù)值0,因此每次上述函數(shù)調(diào)用結(jié)束后,都只執(zhí)行switch語(yǔ)句中case 0對(duì)應(yīng)的語(yǔ)句;經(jīng)過(guò)分析,對(duì)dowhile()語(yǔ)句判斷條件進(jìn)行修改,判斷條件也改成輸入數(shù)字:printf("繼續(xù)* 8;其他數(shù)字退出*n請(qǐng)輸入:");和whi

45、le(x=8) 。Ø 在把內(nèi)存里的鏈表信息以文本文件的形式寫入外存儲(chǔ)器時(shí),對(duì)應(yīng)的每個(gè)結(jié)點(diǎn)里的數(shù)據(jù)項(xiàng)應(yīng)分別寫入,開(kāi)始采用cddata.write(char*)&(p->data),sizeof(p->data);一次寫入文件,最后發(fā)現(xiàn)寫入的數(shù)據(jù)有些數(shù)據(jù)項(xiàng)為寫入,應(yīng)將每個(gè)數(shù)據(jù)項(xiàng)單獨(dú)寫入,即改成:cddata.write(char*)&(p->data.Name),sizeof(p->data.Name);cddata.write(char*)&(p->data.Num),sizeof(p->data.Num);cddata.wr

46、ite(char*)&(p->data.Data),sizeof(p->data.Data);cddata.write(char*)&(p->data.Mount),sizeof(p->data.Mount)cddata.write(char*)&(p->data.Price),sizeof(p->data.Price);cddata.write(char*)&(p->data.CDData),sizeof(p->data.CDData);cddata.write(char*)&(p->data.CD

47、Name),sizeof(p->data.CDName) 。4.2對(duì)設(shè)計(jì)和編碼的討論和分析算法采用鏈表和數(shù)組來(lái)存儲(chǔ)數(shù)據(jù),結(jié)點(diǎn)間為鏈表結(jié)構(gòu),結(jié)點(diǎn)內(nèi)用數(shù)組來(lái)存儲(chǔ)租賃者名字、租賃日期和對(duì)應(yīng)的租賃影碟的名字,由于租賃者名字、租賃日期和對(duì)應(yīng)的租賃影碟的名字等信息長(zhǎng)度較短,因此選擇數(shù)組來(lái)存儲(chǔ),但是由于不同信息的長(zhǎng)度不一樣,因此存在內(nèi)存的浪費(fèi)。租賃者的信息在程序開(kāi)始需要用戶輸入,建立一個(gè)鏈表,以便在通過(guò)人機(jī)交互界面進(jìn)行相關(guān)的操作,如果開(kāi)始鏈表為空,顯然無(wú)法執(zhí)行刪除操作、修改操作、查找操作、文件寫入操作和顯示操作。算法的時(shí)間復(fù)雜度為:O(n2)。5. 程序運(yùn)行結(jié)果經(jīng)過(guò)對(duì)程序錯(cuò)誤的修改后,程序執(zhí)行,經(jīng)過(guò)分

48、析,程序運(yùn)行結(jié)果正確,滿足題目要求!運(yùn)行結(jié)果主要截圖如下:Ø 程序開(kāi)始后,輸入增加租賃者數(shù)量為1,輸入姓名:蒲平,租借數(shù)量:1,押金:20,注冊(cè)時(shí)間:20110101,編號(hào):1,租借時(shí)間:20110107,租借影碟名:哈利波特7。初始界面為:Ø 添加結(jié)束后,選擇1查詢,查詢按姓名,分別輸入:平平、蒲平,只有輸入蒲平時(shí)查詢成功;按編號(hào),輸入:1、2,只有輸入1時(shí)查詢成功。查詢結(jié)果為:Ø 查詢結(jié)束后選擇2添加新的租賃者,增加姓名:韓江,租賃數(shù)目:1,注冊(cè)時(shí)間: 20110101,押金:20,編號(hào):2,租借時(shí)間:20110109,影碟:天龍八部,結(jié)果為:Ø 添

49、加結(jié)束后,選擇3,對(duì)蒲平的租賃信息進(jìn)行修改。增加一個(gè)租借影碟數(shù)目,租借時(shí)間為:20110705,名字:海上鋼琴師,結(jié)果如下:Ø 添加結(jié)束后,選擇5顯示全部租賃者信息:Ø 選擇6,按日期查詢。輸入查詢時(shí)間:20110101、20110107、20110109.結(jié)果為:Ø 繼續(xù)選擇4刪除,刪除韓江的信息:Ø 刪除韓江之后顯示鏈表信息:Ø 刪除韓江的租賃信息之后按日期查詢。輸入時(shí)間:20110101、20110107、20110109、20110705。結(jié)果為:6.經(jīng)驗(yàn)和體會(huì)6.1感受和體會(huì)面向?qū)ο蟪绦蛟O(shè)計(jì)這門課程是計(jì)算機(jī)專業(yè)一門基礎(chǔ)性學(xué)科,重要性可

50、見(jiàn)一般,學(xué)好這門課程對(duì)以后人生的發(fā)展具有深遠(yuǎn)的影響。而課程設(shè)計(jì)便是對(duì)學(xué)習(xí)效果的檢驗(yàn)。課程設(shè)計(jì)不僅可以鍛煉我們獨(dú)立思考問(wèn)題、解決問(wèn)題的能力,而且可以培養(yǎng)我們的整體性思維的能力;通過(guò)課程設(shè)計(jì),加深了對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)的再認(rèn)識(shí),鞏固了面向?qū)ο蟪绦蛟O(shè)計(jì)基礎(chǔ)性知識(shí),比如:存儲(chǔ)結(jié)構(gòu)、數(shù)據(jù)查找、對(duì)用戶錯(cuò)誤輸入的處理、算法分析等。這次課程設(shè)計(jì),我明白了對(duì)于編寫程序,解題的思路尤為重要。在編寫程序之前,如果沒(méi)有比較清晰的思路,根本不可能編出好的程序。就算馬馬虎虎的編出來(lái),程序的邏輯性、健壯性、完善性、合理性也不會(huì)很強(qiáng)。在編程之前,我們應(yīng)反復(fù)研究題目要求,對(duì)題目涉及的情況進(jìn)行比較充分的分析,以便編寫出更加符合題意

51、的程序;其次要充分考慮各種臨界情況,對(duì)一些錯(cuò)誤的輸入進(jìn)行處理。因此在我們編程序之前一定要做好充分的準(zhǔn)備,首先要理清自己的思路,然后再將思路分劃成幾個(gè)模塊,逐塊的寫好算法,最后再將所有的模塊有機(jī)的聯(lián)系起來(lái),組成一個(gè)完整的程序。在成功通過(guò)編譯的情況下,對(duì)程序運(yùn)行的結(jié)果進(jìn)行系統(tǒng)的分析,檢驗(yàn)其正確性,如果有錯(cuò)誤,應(yīng)立即去分析源程序的邏輯錯(cuò)誤,直到得到正確的結(jié)果。在程序編寫的過(guò)程中,不僅要對(duì)實(shí)際問(wèn)題的各種情況進(jìn)行充分完全的考慮和分析,還要對(duì)各種無(wú)法預(yù)期的輸入的處理,對(duì)于不正確的輸入應(yīng)該進(jìn)行相關(guān)的排錯(cuò)處理,程序不僅培養(yǎng)我們的邏輯思維能力,還鍛煉我們整體考慮問(wèn)題的能力,對(duì)解決實(shí)際問(wèn)題應(yīng)該考慮的方面,鍛煉了我

52、們思考問(wèn)題的方式和嚴(yán)密性,開(kāi)拓了思考問(wèn)題的全面性能力。在這次課程設(shè)計(jì)的過(guò)程中,我也遇到了很多難題。在種種的困難中,我明白了在編寫程序時(shí)要有耐心。如果你沒(méi)有耐心,即使再好的算法思路也不會(huì)得到很好的表達(dá),特別是在調(diào)試的過(guò)程中,對(duì)于各種各樣的錯(cuò)誤,要特別的有耐心去自習(xí)分析原因,特別是一些基本的語(yǔ)法錯(cuò)誤,不能一看到錯(cuò)誤很多就亂了陣腳,更不能輕易的放棄,半途而廢。比如在調(diào)試中沒(méi)有定義某些變量的錯(cuò)誤、基本的輸入輸出錯(cuò)誤、數(shù)據(jù)選取不合理的錯(cuò)誤、變量名前后不一的錯(cuò)誤、函數(shù)返回值的錯(cuò)誤等等。其實(shí)只要有耐心,你就會(huì)發(fā)現(xiàn),在你修改了一個(gè)錯(cuò)誤之后,其它有的錯(cuò)誤也會(huì)跟著消失,所以在編譯的時(shí)候一定要有耐心。6.2對(duì)算法改進(jìn)的想法本次程序設(shè)計(jì)采用的存儲(chǔ)結(jié)構(gòu)為鏈表,這樣的存儲(chǔ)結(jié)構(gòu)簡(jiǎn)單易操作,節(jié)約存儲(chǔ)空間,但是在每個(gè)結(jié)點(diǎn)內(nèi)有采用順序存儲(chǔ)結(jié)構(gòu)來(lái)存儲(chǔ)租賃者名字、租賃日期和對(duì)應(yīng)的租賃影碟的名字,由于租賃者名字、租賃日期和對(duì)應(yīng)的租賃影碟的名字等信息長(zhǎng)度較短,因此選擇數(shù)組來(lái)存儲(chǔ),但是由于不同信息的長(zhǎng)度不一樣,因此存在內(nèi)存的浪費(fèi)。因此可以將結(jié)點(diǎn)內(nèi)的存儲(chǔ)結(jié)構(gòu)也改成鏈?zhǔn)酱鎯?chǔ),這樣便不會(huì)浪費(fèi)存儲(chǔ)空間。算法中存在很多對(duì)用戶錯(cuò)誤輸入的處理,有的處理存在雙重循環(huán),在一定程度上增加了時(shí)間復(fù)雜度,因此可以對(duì)錯(cuò)誤輸入進(jìn)行再考慮,對(duì)主要錯(cuò)誤輸入盡量用簡(jiǎn)單的算法解決,盡量降低程序的時(shí)間復(fù)雜度。7.租賃信息鏈表內(nèi)容和源程序7.1租

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論