《C程序設(shè)計(jì)》課程設(shè)計(jì)說明書-電影院售票系統(tǒng)_第1頁
《C程序設(shè)計(jì)》課程設(shè)計(jì)說明書-電影院售票系統(tǒng)_第2頁
《C程序設(shè)計(jì)》課程設(shè)計(jì)說明書-電影院售票系統(tǒng)_第3頁
《C程序設(shè)計(jì)》課程設(shè)計(jì)說明書-電影院售票系統(tǒng)_第4頁
《C程序設(shè)計(jì)》課程設(shè)計(jì)說明書-電影院售票系統(tǒng)_第5頁
已閱讀5頁,還剩115頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、內(nèi)蒙古科技大學(xué)本科生?C+程序設(shè)計(jì)?課程設(shè)計(jì)說明書題 目:電影院售票系統(tǒng) 學(xué)生姓名: 學(xué) 號(hào):專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班 級(jí):計(jì)2021-1班指導(dǎo)教師: 成績(jī)?cè)u(píng)定標(biāo)準(zhǔn)課程設(shè)計(jì)的驗(yàn)收辯論采取“講解程序+提問+即時(shí)編程的方式。考核工程評(píng)價(jià)質(zhì)量成績(jī)程序功能完全實(shí)現(xiàn),并能通過辯論。60%A能完全正確答復(fù)提問;B問題答復(fù)的根本意思正確;C不能答復(fù)或答復(fù)錯(cuò)誤,抽取程序小的功能即時(shí)編程,能完成;D不能答復(fù)或答復(fù)錯(cuò)誤,即時(shí)編程無法完成;程序設(shè)計(jì)符合面向?qū)ο蟮乃枷牒驮敲?,結(jié)構(gòu)合理15A程序結(jié)構(gòu)層次清楚,提取出各個(gè)實(shí)體類,類的設(shè)計(jì)合理;B程序結(jié)構(gòu)層次清楚,具有客戶類和效勞類;C類的設(shè)計(jì)根本正確;D幾乎在一個(gè)類或

2、者方法中實(shí)現(xiàn)了大局部的邏輯,結(jié)構(gòu)不夠清晰;程序的風(fēng)格10%A遵守編碼標(biāo)準(zhǔn),有良好的風(fēng)格; 以下問題每出現(xiàn)一項(xiàng)成績(jī)降一個(gè)等級(jí): 1類、方法和變量命名不符合標(biāo)準(zhǔn); 2方法和屬性前缺少注釋; 3程序沒有適當(dāng)縮進(jìn);設(shè)計(jì)說明書15%從以下幾方面考核: 1結(jié)構(gòu)完整 2圖表正確 3文字通順 4版面工整目 錄TOC o 1-3 h u HYPERLINK l _Toc2945 成績(jī)?cè)u(píng)定標(biāo)準(zhǔn) PAGEREF _Toc2945 2 HYPERLINK l _Toc2291 【摘要】 PAGEREF _Toc2291 5 HYPERLINK l _Toc22893 第一章 問題描述 PAGEREF _Toc2289

3、3 6 HYPERLINK l _Toc6465 1.1 電影院售票管理系統(tǒng)的設(shè)計(jì) PAGEREF _Toc6465 6 HYPERLINK l _Toc25325 第二章 問題分析 PAGEREF _Toc25325 8 HYPERLINK l _Toc21408 2.1 闡述你對(duì)問題的理解、解決問題的方案說明 PAGEREF _Toc21408 8 HYPERLINK l _Toc7380 2.2 系統(tǒng)功能模塊的劃分 PAGEREF _Toc7380 8 HYPERLINK l _Toc8703 第三章 數(shù)據(jù)模型 PAGEREF _Toc8703 10 HYPERLINK l _Toc61

4、63 3.1 相關(guān)數(shù)據(jù)結(jié)構(gòu)的說明類的設(shè)計(jì) PAGEREF _Toc6163 10 HYPERLINK l _Toc27979 3.2 程序結(jié)構(gòu)說明,即程序各個(gè)局部之間如何協(xié)調(diào)來完成任務(wù) PAGEREF _Toc27979 12 HYPERLINK l _Toc11961 3.3 全局變量,重要形式參數(shù)、局部變量等等,它們的命名及用途解釋 PAGEREF _Toc11961 15 HYPERLINK l _Toc12506 第四章 算法描述 PAGEREF _Toc12506 18 HYPERLINK l _Toc31267 4.1 解題算法的設(shè)計(jì)思路介紹 PAGEREF _Toc31267 1

5、8 HYPERLINK l _Toc1652 4.2 主要程序代碼,加上詳細(xì)的注釋 PAGEREF _Toc1652 20 HYPERLINK l _Toc25454 4.3 畫出程序流程圖 PAGEREF _Toc25454 44 HYPERLINK l _Toc22379 第五章 設(shè)計(jì)總結(jié) PAGEREF _Toc22379 55 HYPERLINK l _Toc26788 第六章 附錄 PAGEREF _Toc26788 56 HYPERLINK l _Toc923 參考文獻(xiàn) PAGEREF _Toc923 75 【摘要】電影院售票管理系統(tǒng)兩個(gè)模塊管理系統(tǒng)和售票系統(tǒng)。1.管理系統(tǒng)具有如下

6、功能:1錄入信息:且可不定時(shí)增加數(shù)據(jù)。并根據(jù)放映時(shí)間排序。2瀏覽信息:可顯示出某日期所有放映信息,如果當(dāng)前系統(tǒng)時(shí)間超過了某電影的放映時(shí)間,那么顯示“此電影放映結(jié)束的提示信息。3查詢電影:可按日期或電影名查詢。并顯示目標(biāo)的詳細(xì)信息。 4修改信息:可根據(jù)電影名修改該電影的各種信息余票除外并簡(jiǎn)單排序。5刪除電影:根據(jù)電影名找到該電影并刪除。2.售票系統(tǒng)功能如下:1售票:售票即為影片預(yù)定??筛鶕?jù)輸出的可預(yù)訂信息選擇訂票,如果該影片已放映,那么提示不能訂票,如果售票成功,自動(dòng)跟新座位數(shù)。2退票:影片退訂即退票。根據(jù)放映時(shí)間和系統(tǒng)時(shí)間來判斷是否能進(jìn)行退票,并自動(dòng)更新座位數(shù)。其他參數(shù):程序中定義了一個(gè)nod

7、e結(jié)構(gòu)和一個(gè)ticket類。結(jié)構(gòu)用來存信息,節(jié)點(diǎn)類存節(jié)點(diǎn)長(zhǎng)度,和管理里面的數(shù)據(jù)。問題描述電影院售票管理系統(tǒng)的設(shè)計(jì)1.設(shè)計(jì)資料及參數(shù):用C+設(shè)計(jì)一個(gè)系統(tǒng),能提供以下效勞:1錄入放映信息,格式為:放映日期放映時(shí)間場(chǎng)次電影名稱票價(jià)會(huì)員折扣剩余座位2011-11-210:301桃姐308782011-11-214:002桃姐30886可不定時(shí)地增加放映數(shù)據(jù)。2瀏覽放映信息,可顯示出某日期所有放映信息,如果當(dāng)前系統(tǒng)時(shí)間超過了某電影的放映時(shí)間,那么顯示“此電影放映結(jié)束的提示信息。3查詢電影:可按日期或電影名查詢。 4售票和退票功能A:查詢電影名。當(dāng)剩余座位數(shù)大于0,并且當(dāng)前系統(tǒng)時(shí)間小于放映時(shí)間時(shí)才能售票,

8、計(jì)算會(huì)員折扣,售票后自動(dòng)更新剩余座位數(shù)。B:退票時(shí),輸入退票的電影名和場(chǎng)次,當(dāng)電影未放映時(shí)才能退票,如果以會(huì)員折扣購(gòu)置的電影票,退票按照折扣價(jià)退款,退票后自動(dòng)更新剩余座位數(shù)。根據(jù)系統(tǒng)功能要求,可以將問題解決分為以下步驟:1分析系統(tǒng)中的各個(gè)實(shí)體之間的關(guān)系及其屬性和行為;2根據(jù)問題描述,設(shè)計(jì)系統(tǒng)的類層次;3完成類層次中各個(gè)類的描述(包括屬性和力一法);4完成類中各個(gè)成.員函數(shù)的定義;5完成系統(tǒng)的應(yīng)用模塊;6功能調(diào)試;7完成系統(tǒng)總結(jié)報(bào)告以及系統(tǒng)使用說明書。問題分析闡述你對(duì)問題的理解、解決問題的方案說明由設(shè)計(jì)題目知電影院售票管理系統(tǒng)主要可分為兩個(gè)大模塊:1.管理系統(tǒng)2.售票系統(tǒng)。對(duì)整個(gè)系統(tǒng)進(jìn)行功能分析

9、不難發(fā)現(xiàn),管理系統(tǒng)和售票系統(tǒng)的權(quán)限是不一樣的,管理系統(tǒng)具有管理員權(quán)限,可以對(duì)所有數(shù)據(jù)的信息進(jìn)行操作,比方:錄入input、顯示show、查找search、修改change)、刪除del;而售票系統(tǒng)那么只進(jìn)行售票sell和退票refund。所以需要設(shè)計(jì)一個(gè)manager和customer函數(shù)來區(qū)分權(quán)限的函數(shù)。所以,manager里包含了需要實(shí)現(xiàn)的input、show、search、change、del等函數(shù)來滿足管理要求的功能。Customer包含sell和refund。系統(tǒng)功能模塊的劃分系統(tǒng)的模塊圖如下:歡送界面主函數(shù)售票customer管理manager刪除退票售票顯示輸入查找修改管理函數(shù)進(jìn)

10、入時(shí)需要管理密碼:1234運(yùn)行程序時(shí),需要先輸入數(shù)據(jù),根據(jù)需要在對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)單操作。錄入時(shí),每錄入一個(gè)信息就會(huì)對(duì)現(xiàn)有信息進(jìn)行插入排序。顯示數(shù)據(jù)時(shí),會(huì)先跟系統(tǒng)時(shí)間比擬,如果小于系統(tǒng)當(dāng)前時(shí)間,那么輸出提示“已播放。查找時(shí)滿足要求的按名字查找和按日期查找。找到之后與系統(tǒng)時(shí)間比擬輸出提示,如果沒找到,輸出提示。修改函數(shù)支持多種修改,可以防止輸入的一些錯(cuò)誤。也可以修改日期,以調(diào)整放映時(shí)間。刪除函數(shù)是為防止輸入錯(cuò)誤,或是內(nèi)存不夠用而設(shè)計(jì)的。比方前幾天已播放的,在內(nèi)存中如果作用不是很大,完全是可以刪除的。這樣能跟有效利用資源。售票系統(tǒng)設(shè)計(jì)較為簡(jiǎn)單,主要是訂票和退票。訂票函數(shù)中會(huì)先給出可預(yù)訂的提示,這樣可以更

11、有效訂票。輸入之后會(huì)先檢查是否播放,假設(shè)播放那么給出提示,退出。假設(shè)未找到,那么同樣給出提示。如果票賣光了,仍然有提示,如果電影到達(dá)預(yù)定要求,那么先給出現(xiàn)有座位的預(yù)訂情況,方便用戶高效率訂票。當(dāng)客戶輸入一座位時(shí)程序會(huì)判斷這個(gè)作為是否被預(yù)訂,如果是,那么給出提示;如果no就輸出用戶需要支付的金額,并記錄在座位號(hào)對(duì)應(yīng)的數(shù)組中。方便退票時(shí)退款。訂票成功后還會(huì)輸出現(xiàn)有座位的信息方便核實(shí)。其中訂票和退票函數(shù)都是用大篇幅一兩百行來構(gòu)建起強(qiáng)大而有完善的提示功能,趨于人性化的設(shè)計(jì)跟拉近了與客戶的距離。數(shù)據(jù)模型相關(guān)數(shù)據(jù)結(jié)構(gòu)的說明類的設(shè)計(jì)程序中定義的數(shù)據(jù):struct nodeint year;int month

12、;int day;int hour;int minute;int datetime5;/裝時(shí)間 ,方便比擬 int num;string name;float price;float discount;int rest;float seat1010;class ticketprivate:node ticN;int len;public:ticket();ticket();int sort(int i);void input();void show();void search();void change();void del();void sell();void refund();tick;對(duì)

13、系統(tǒng)進(jìn)行數(shù)據(jù)分析就會(huì)知道電影院售票管理系統(tǒng)主要處理的是根本電影信息。每個(gè)電影的根本信息放在struct node中定義,包括根本的放映日期date,時(shí)間time,場(chǎng)次num,影片名name,票價(jià)price,會(huì)員折扣discount及余座rest。其中日期是包含有年、月、日,時(shí)間包含時(shí)、分,整形數(shù)據(jù),其中還有一個(gè)數(shù)組detetime5是把該影片時(shí)間存儲(chǔ)進(jìn)去,方便以后的排序和與系統(tǒng)時(shí)間比擬。還有一個(gè)而二維數(shù)組seat1010,是用來存儲(chǔ)座位信息初始化全為0,如果此座位被預(yù)定,那么對(duì)應(yīng)的座位存的就是訂票時(shí)的付款,這也方便了退票時(shí)的退款。還要解決數(shù)據(jù)的組織問題,怎么才能把不同的電影存起來呢?方法目前只

14、學(xué)了兩種,數(shù)組和鏈表。數(shù)組和鏈表各有優(yōu)缺點(diǎn)。用鏈表實(shí)現(xiàn)雖然對(duì)空間進(jìn)行了充分利用,但其對(duì)數(shù)據(jù)的存儲(chǔ)讓人實(shí)在無奈,并且操作也不容易實(shí)現(xiàn)。剩下就是數(shù)組了,雖然需要定義一個(gè)大點(diǎn)的數(shù)組,但其對(duì)數(shù)據(jù)操作非常方便,這深受初學(xué)者的我們的青睞。所以在ticket類中定義了個(gè)node50。如果需要擴(kuò)大直接改文件前的#define N后的數(shù)字就可以了。其實(shí)質(zhì)隨意選擇把電影信息存在結(jié)構(gòu)體而不是類中,主要考慮到,結(jié)構(gòu)體存取數(shù)據(jù)的方便性,而采用類無疑會(huì)給程序很多負(fù)擔(dān)存取。數(shù)據(jù)組織結(jié)構(gòu)圖:ticket類Input()Show()Search()Change()Del()Sell()Refund()lennode50程序結(jié)構(gòu)

15、說明,即程序各個(gè)局部之間如何協(xié)調(diào)來完成任務(wù)程序的主要實(shí)現(xiàn)過程是在ticket類 中定義的成員函數(shù)來實(shí)現(xiàn)完成,并且在類外定義。這樣方便了對(duì)數(shù)據(jù)進(jìn)行操作。并且定義了一個(gè)全局的比擬函數(shù)timecmp,可以比擬兩個(gè)時(shí)間數(shù)組的大小。此函數(shù)在程序中用途很廣泛,每次輸入輸出都需要與系統(tǒng)時(shí)間進(jìn)行比擬,所以在每個(gè)操作函數(shù)中都用到了。此外sort函數(shù)也是非常有用的,它主要用在輸入和修改上。每次更新數(shù)據(jù)都會(huì)根據(jù)現(xiàn)有數(shù)據(jù)的時(shí)間進(jìn)行排序。這也方便了讀數(shù)據(jù)的客戶。其中程序總很多代碼是重復(fù)用到的,但是沒有寫成函數(shù)來調(diào)用有兩點(diǎn)原因。首先如果寫成函數(shù)調(diào)用的話會(huì)降低程序的可讀性,其次寫成函數(shù)的話,代碼就固定下來了,使得程序不夠靈

16、活。所以在程序不必要的地方,就用代碼來代替函數(shù)調(diào)用。舉個(gè)例子說,在修改,刪除,訂票,退票中都會(huì)用到按電影名查找??墒菦]有單獨(dú)把按電影名查找單獨(dú)寫成函數(shù)來調(diào)用,是因?yàn)樵诎措娪懊檎視?huì)輸出很多詳細(xì)的電影信息,會(huì)使客戶感覺到是在浪費(fèi)時(shí)間。下面是按電影名查找的代碼片段:for(i=0;itick.len;i+)/遍歷 if(timecmp(tick.tici.datetime,temp,3)=0)/找到 k+;/找到的記錄數(shù) if(j=1) coutn 查找結(jié)果如下:endl; cout_endl; cout日期t時(shí)-間t場(chǎng)次t電影名稱t票價(jià)t折扣t余票endlendl; j+; couttick.t

17、ici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int s; s=timecmp(tick.tici.datetime,array,5);/與系統(tǒng)時(shí)間比擬 if(s=0) couta已播放! endl; else c

18、outendl; coutendltttt當(dāng)前預(yù)訂情況; for(int m=0;m10;m+) coutendlt; for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout無人; cout; coutendl;if(j!=1)coutendl;system(pause);/任意鍵繼續(xù) return;if(i=tick.len&k=0)coutnatttt未找到結(jié)果!endl;system(pause);/任意鍵繼續(xù) return;而在另一些函數(shù)種植需要提示用戶找沒找到就可以了。下面是del函數(shù)的按電影名查找for

19、(i=0;itick.len;i+)if(=na)/找到j(luò)+;for(int j=i+1;jtick.len;j+)tick.ticj-1=tick.ticj;coutendltttt刪除成功!n;tick.len-; if(i=tick.len&j=0) coutnatttt未找到結(jié)果,刪除失??!ntm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min;/將系統(tǒng)時(shí)間裝入數(shù)組,方便比擬int k=0;/標(biāo)記找到的記錄r=timecmp(tick.tici.datetime,array,5);/與系統(tǒng)時(shí)

20、間比擬 ,返回值給 j=0;/修改函數(shù)中標(biāo)記修改數(shù)量string inpass;/manager函數(shù)中的管理員密碼初始值1234Flag,as,choice/是用來存接受的選擇的算法描述解題算法的設(shè)計(jì)思路介紹timecmp函數(shù)是用來比擬日期時(shí)間函數(shù),它需要先把兩個(gè)時(shí)間裝入數(shù)組再傳進(jìn)來地址,然后從年月日時(shí)分進(jìn)行比擬。如果有大小區(qū)分,直接返回。int timecmp(int a,int b,int n)for(int i=0;ibi)return 1;if(aibi)return -1;if(i=n)return 0;/Sort函數(shù)主要是對(duì)第i個(gè)元素進(jìn)行插入排序。需要先遍歷數(shù)組然后插入到

21、第一個(gè)比他大的元素前面。int ticket:sort(int i)int r,n,j;for(j=0;ji;j+)/從首元素開始比擬日期 r=timecmp(tick.tici.datetime,tick.ticj.datetime,5);if(r=-1)/找到第一個(gè)比他大的日期 ,插入其前面 break;if(j=tick.len-1)return j;if(j=i)for(j=i+1;jtick.len;j+)/從首元素開始比擬日期 r=timecmp(tick.tici.datetime,tick.ticj.datetime,5); if(r=-1)/找到第一個(gè)比他大的日期 ,插入其前

22、面 break;node temp=tick.tici;if(jj;n-) tick.ticn=tick.ticn-1; tick.ticj=temp; return j;elseif(j=tick.len)for(n=i;nj-1;n+) tick.ticn=tick.ticn+1;else for(n=i;nj;n+) tick.ticn=tick.ticn+1;tick.ticn=temp;return n;主要程序代碼,加上詳細(xì)的注釋下面簡(jiǎn)單介紹一下程序運(yùn)行結(jié)果主函數(shù)開始運(yùn)行界面:docoutendlendlendlendl;couttttt歡送使用電影售票系統(tǒng); coutendlen

23、dlendl;coutntttt1.管理系統(tǒng);coutntttt2.售票系統(tǒng);coutchoice;switch(choice)case 1:manager();break;case 2:customer();break;default :exit(0); while(1);Manager系統(tǒng)代碼及運(yùn)行截圖密碼輸入界面代碼docoutendlinpass; if(inpass=password)break;elsecoutendlatttt密碼錯(cuò)誤!; coutendla;if(a=N|a=n)exit(0);while(1);選擇菜單代碼 do coutntttt歡送進(jìn)入管理系統(tǒng)nn; co

24、utntttt1.錄入影片; coutntttt2.顯示影片; coutntttt3.查找影片; coutntttt4.修改影片; coutntttt5.刪除影片; coutntttt6.退出; coutas; switch(as) case 1:tick.input();break; case 2:tick.show();break; case 3:tick.search();break; case 4:tick.change();break; case 5:tick.del();break; case 6:default :system(pause); return;/任意鍵繼續(xù) whil

25、e(1);選擇1管理系統(tǒng)輸入密碼選擇1錄入void ticket:input()/錄入信息 system(cls);/清屏 char ch;/接受日期中的字符或: coutnnntttt?錄入模塊?nnnendl; for(int i=tick.len;iN;i+) couttick.tici.yearchtick.tici.monthchtick.tici.day; couttick.tici.hour;cinch;cintick.tici.minute; tick.tici.datetime0=tick.tici.year; tick.tici.datetime1=tick.tici.mo

26、nth; tick.tici.datetime2=tick.tici.day;tick.tici.datetime3=tick.tici.hour;tick.tici.datetime4=tick.tici.minute; couttick.tici.num; ; couttick.tici.price; couttick.tici.discount; tick.tici.rest=100; for(int m=0;m10;m+) for(int n=0;n10;n+)tick.tici.seatmn=0; tick.len+;/個(gè)數(shù)加1 if(i!=0)/

27、按時(shí)間,插入排序 int j=sort(i); coutendl; coutch; if(ch=y | ch=Y | ch=n | ch=N) break; else cout選2顯示。代碼如下=coutnnntttt?顯示模塊?nnnendl;cout 所有電影信息如下:endl;cout_endl;cout日期t時(shí)-間t場(chǎng)次t電影名稱t票價(jià)t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r; for(int i=0;itick.len;i+) r=timecmp(tick.tici.da

28、tetime,array,5); couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttick.tici.rest; if(r=0) couta已播放! endl; else cout繼續(xù)錄入選擇2顯示選3查找查找的界面代碼=coutnnntttt?查找模塊?nnnendl; do coutendltttt1.按影片名查找

29、; coutendltttt2.按日期查找; coutendlflag; if(flag!=1&flag!=2) coutnatttt選擇有誤!請(qǐng)選擇正確的查找模式。endl; while(flag!=1&flag!=2);=按電影名查找代碼=string na;int j=1;coutna;for(i=0;itick.len;i+)if(=na)/找到 k+;/找到的記錄數(shù) if(j=1) coutn 查找結(jié)果如下:endl; cout_endl; cout日期t時(shí)-間t場(chǎng)次t電影名稱t票價(jià)t折扣t余票endlendl; j+; couttick.tici.yea

30、r-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r; r=timecmp(tick.tici.datetime,array,5);/與系統(tǒng)時(shí)間比擬 if(r=0) couta已播放! endl; else coutendl

31、; coutendltttt當(dāng)前預(yù)訂情況; for(int m=0;m10;m+) coutendlt; for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout無人; cout; if(j!=1)coutendl;system(pause);/任意鍵繼續(xù) return;if(i=tick.len&k=0)coutnatttt未找到結(jié)果!endl;system(pause);/任意鍵繼續(xù) return;=按日期查找代碼=char ch;int temp3; couttemp0chtemp1chtemp2;int j=

32、1;for(i=0;itick.len;i+)/遍歷 if(timecmp(tick.tici.datetime,temp,3)=0)/找到 k+;/找到的記錄數(shù) if(j=1) coutn 查找結(jié)果如下:endl; cout_endl; cout日期t時(shí)-間t場(chǎng)次t電影名稱t票價(jià)t折扣t余票endlendl; j+; couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.

33、pricettick.tici.discountttm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int s; s=timecmp(tick.tici.datetime,array,5);/與系統(tǒng)時(shí)間比擬 if(s=0) couta已播放! endl; else coutendl; coutendltttt當(dāng)前預(yù)訂情況; for(int m=0;m10;m+) coutendlt; for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout無人

34、; cout; coutendl;if(j!=1)coutendl;system(pause);/任意鍵繼續(xù) return;if(i=tick.len&k=0)coutnatttt未找到結(jié)果!修改修改界面的源代碼=if(=na)/找到 j+;char a;do coutendltttt1.修改放映日期(2011-11-11); coutendltttt2.修改放映時(shí)間(12:30); coutendltttt3.修改放映場(chǎng)次; coutendltttt4.修改影片名稱; coutendltttt5.修改影片票價(jià); coutendltttt6.修改會(huì)員折扣; cout

35、endlendlendl; coutendlflag; char ch; switch(flag) case 1:couttick.tici.yearchtick.tici.monthchtick.tici.day;tick.tici.datetime0=tick.tici.year; tick.tici.datetime1=tick.tici.month; tick.tici.datetime2=tick.tici.day;i=sort(i);break; case 2:couttick.tici.hourchtick.tici.minute;tick.tici.datetime3=tick

36、.tici.hour; tick.tici.datetime4=tick.tici.minute;i=sort(i);break; case 3:couttick.tici.num;break; case 4:;break; case 5:couttick.tici.price;break; case 6:couttick.tici.discount;break; default:break; coutendla; while(a!=N&a!=n); cout 當(dāng)前電影信息如下:endl; cout_endl; cout日期t時(shí)-間t場(chǎng)次t電影名稱t票價(jià)t折

37、扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r; r=timecmp(tick.tici.datetime,array,5); couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttick.tici.rest; if(r

38、=0) couta已播放! endl; else cout顯示退出選5刪除刪除代碼如下=system(cls);/清屏 coutnnntttt?刪除模塊?nnnendl; string na; int i;int j=0;/標(biāo)記刪除的數(shù)量 coutna;for(i=0;itick.len;i+)if(=na)/找到j(luò)+;for(int j=i+1;jtick.len;j+)tick.ticj-1=tick.ticj;coutendltttt刪除成功!n;tick.len-; if(i=tick.len&j=0) coutnatttt未找到結(jié)果,刪除失?。退出進(jìn)入售

39、票系統(tǒng)選1訂票可預(yù)訂電影信息輸出=coutnnntttt?售票模塊?nnnendl; cout 可預(yù)訂的電影信息如下:endl; cout_endl; cout日期t時(shí)-間t場(chǎng)次t電影名稱t票價(jià)t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r,i; int k=0;/標(biāo)記可供預(yù)定的影片數(shù)量 for(i=0;i0) k+; couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minut

40、et; tt; couttick.tici.pricettick.tici.discountttick.tici.restendl; =查找信息=if(i=tick.len&k=0)coutnatttt沒有找到您要預(yù)定的電影!endl;system(pause);/任意鍵繼續(xù) return;=已播放顯示不能訂票= s=timecmp(tick.tici.datetime,array,5);/與系統(tǒng)時(shí)間比擬 if(s=0) coutanttt此電影已播放,無法訂票! endl;system(pause);/任意鍵繼續(xù) return;

41、 =如果滿足訂票條件=for(m=0;m10;m+) coutendlt; for(n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout無人; cout; coutendlseatnum; if(seatnum100|seatnum1) coutendlatt對(duì)不起,無此座位!; system(pause);/任意鍵繼續(xù) return; m=(seatnum-1)/10; n=(seatnum-1)%10; if(tick.tici.seatmn=0&tick.tici.rest!=0) coutendla; if(a!=N&a

42、!=n) tick.tici.seatmn=tick.tici.price*tick.tici.discount/10; else tick.tici.seatmn=tick.tici.price; tick.tici.rest-; coutendltttt您需要支付:tick.tici.seatmn元。endl; coutendltttt您的座位號(hào)是:seatnumendl; coutendltttt預(yù)訂成功!;for(int m=0;m10;m+) coutendlt; for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; el

43、se cout無人; cout100|seatnum1) coutendlatt對(duì)不起,無此座位!; system(pause);/任意鍵繼續(xù) return; else if(tick.tici.seatmn!=0) coutendl退票查找不到=if(i=tick.len&k=0)coutnatt沒有找到您要退定的電影!endl;system(pause);/任意鍵繼續(xù) return;=正確退票流程=coutendltttt當(dāng)前預(yù)訂情況;int m,n; for(m=0;m10;m+) coutendlt; for(n=0;n10;n+) cout; if(tick.tici.seatmn!

44、=0) cout有人; else cout無人; cout; coutendlseatnum; if(seatnum100|seatnum1) coutendlatt對(duì)不起,無此座位!; system(pause);/任意鍵繼續(xù) return; m=(seatnum-1)/10; n=(seatnum-1)%10; if(tick.tici.seatmn!=0) tick.tici.rest+; coutendltttt您要退訂座位號(hào)是:seatnumendl; coutendltttt退給您:tick.tici.seatmn元。endl; coutendltttt退訂成功!;tick.tic

45、i.seatmn=0; =退訂未定的座位,提示代碼=else coutendlattn對(duì)不起,此座位未預(yù)訂,無法退票!n; system(pause);/任意鍵繼續(xù) return; =退出畫出程序流程圖程序中函數(shù)的流程圖:main()終止Choice=2Choice=1Choice=othercustomermanager輸入choice開始break退出5刪除6其他4修改3查找2顯示選擇功能1錄入YN密碼正確輸入管理密碼開始2.manager()開始leng=0;i=len;輸入日期和時(shí)間,場(chǎng)次電影名等YN退出Len0與系統(tǒng)時(shí)間比擬返回值為r輸出ticki的信息Y退出Nileni=0;開始,

46、獲取系統(tǒng)時(shí)間;4.show()開始輸出提示5.search()退出輸出詳細(xì)信息提示,返回NY遍歷找到輸入日期輸入電影名flag=2flag=1flag=other輸入flag6.change()YY退出N輸出信息繼續(xù)修改Sort(i)其他屬性修改日期時(shí)間輸入修改項(xiàng)flag退出N遍歷找到輸入電影名開始開始輸入電影名7.del()NY退出刪除后項(xiàng)向前覆蓋遍歷找到8.customer開始輸入as訂票as=2退票as=otheras=1退出開始遍歷不能訂票不能訂票NY以會(huì)員購(gòu)票YN此座位未預(yù)訂輸入預(yù)訂座位號(hào)輸出當(dāng)前預(yù)訂YN比系統(tǒng)時(shí)間大退出N遍歷找到輸入預(yù)訂名與系統(tǒng)時(shí)間比擬輸出可供預(yù)定的9.sell()

47、pricePrice*discount輸出當(dāng)前預(yù)訂更新座位退出開始10.refund輸出當(dāng)前預(yù)訂Y已預(yù)訂輸入退訂座位N不能退票Y不能退票N比系統(tǒng)時(shí)間大N遍歷找到輸入退訂影片退出當(dāng)前預(yù)訂更新座位退票,退款設(shè)計(jì)總結(jié)這次課程設(shè)計(jì)中我感覺設(shè)計(jì)的比擬滿意的是訂票和退票函數(shù),根據(jù)提示信息就可以輕松完成訂票和退票。這次的代碼已經(jīng)是我寫的第三份了。其中前兩份都或多或少出現(xiàn)了大漏洞,先拿第一份來說,雖然功能比擬完善,里面定義了六個(gè)類,40的個(gè)成員函數(shù),總代碼量1000多行,然而卻犯了最致命的錯(cuò)誤,里面存儲(chǔ)數(shù)據(jù)使用鏈表實(shí)現(xiàn),可是開辟內(nèi)存單元卻在局部函數(shù),這樣局部函數(shù)執(zhí)行完內(nèi)存單元?jiǎng)酉?,造成?shù)據(jù)喪失。因此我放棄了

48、第一份,重寫了第二份,第二份中吸取了第一份的教訓(xùn),同樣適用鏈表實(shí)現(xiàn),定義了兩個(gè)類,寫了十幾個(gè)函數(shù),雖然已經(jīng)能運(yùn)行,但是其中函數(shù)傳遞參數(shù)頻繁降低了程序的可讀性。所以再此放棄修改。最后設(shè)計(jì)了一個(gè)結(jié)構(gòu)體,一個(gè)類,10個(gè)函數(shù)同樣實(shí)現(xiàn)了根本功能,同時(shí)增加了一些修改排序功能。當(dāng)然這個(gè)程序也是有瑕疵的,在修改日期后可以完成排序,可是修改了時(shí)間會(huì)造成排序不正確。這可能需要辯論之后在進(jìn)行修改了。還有就是整個(gè)程序的設(shè)計(jì)思想,大型一點(diǎn)的程序設(shè)計(jì),如果從上向下考慮功能的實(shí)現(xiàn)會(huì)節(jié)約很多時(shí)間,這也是比擬合理的設(shè)計(jì)方法。以上是我的總結(jié)。附錄#include#include#include#include#define N

49、50/可存電影總數(shù) using namespace std;struct nodeint year;int month;int day;int hour;int minute;int datetime5;/裝時(shí)間 ,方便比擬 int num;string name;float price;float discount;int rest;float seat1010;/class ticketprivate:node ticN;int len;public:ticket();ticket();int sort(int i);void input();void show();void search

50、();void change();void del();void sell();void refund();tick;/ticket:ticket();ticket:ticket();/int timecmp(int a,int b,int n)int i; for(i=0;ibi)return 1;if(aibi)return -1;if(i=n)return 0;/int ticket:sort(int i)/=int r,n,j;for(j=0;ji;j+)/從首元素開始比擬日期 r=timecmp(tick.tici.datetime,tick.ticj.datetime,5);if(

51、r=-1)/找到第一個(gè)比他大的日期 ,插入其前面 break;if(j=tick.len-1)return j;if(j=i)for(j=i+1;jtick.len;j+)/從首元素開始比擬日期 r=timecmp(tick.tici.datetime,tick.ticj.datetime,5); if(r=-1)/找到第一個(gè)比他大的日期 ,插入其前面 break;node temp=tick.tici;if(jj;n-) tick.ticn=tick.ticn-1; tick.ticj=temp; return j;elseif(j=tick.len)for(n=i;nj-1;n+) tic

52、k.ticn=tick.ticn+1;else for(n=i;nj;n+) tick.ticn=tick.ticn+1;tick.ticn=temp;return n;/void ticket:input()/錄入信息 system(cls);/清屏 char ch;/接受日期中的字符或: coutnnntttt?錄入模塊?nnnendl; for(int i=tick.len;iN;i+) couttick.tici.yearchtick.tici.monthchtick.tici.day; couttick.tici.hour;cinch;cintick.tici.minute; tic

53、k.tici.datetime0=tick.tici.year; tick.tici.datetime1=tick.tici.month; tick.tici.datetime2=tick.tici.day;tick.tici.datetime3=tick.tici.hour;tick.tici.datetime4=tick.tici.minute; couttick.tici.num; ; couttick.tici.price; couttick.tici.discount; tick.tici.rest=100; for(int m=0;m10;m+)

54、 for(int n=0;n10;n+)tick.tici.seatmn=0; tick.len+;/個(gè)數(shù)加1 if(i!=0)/按時(shí)間,插入排序 int j=sort(i); coutendl; coutch; if(ch=y | ch=Y | ch=n | ch=N) break; else cout輸入錯(cuò)誤請(qǐng)重新輸入:; if(ch=n | ch=N) break; /void ticket:show()system(cls);/清屏coutnnntttt?顯示模塊?nnnendl;cout 所有電影信息如下:endl;cout_endl;cout日期t時(shí)-間t場(chǎng)次t電影名稱t票價(jià)t折扣

55、t余票endltm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r; for(int i=0;itick.len;i+) r=timecmp(tick.tici.datetime,array,5); couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.disc

56、ountttick.tici.rest; if(r=0) couta已播放! endl; else coutendl; /void ticket:search()char flag;int i;int k=0;/標(biāo)記找到的記錄 system(cls);/清屏 coutnnntttt?查找模塊?nnnendl; do coutendltttt1.按影片名查找; coutendltttt2.按日期查找; coutendlflag; if(flag!=1&flag!=2) coutnatttt選擇有誤!請(qǐng)選擇正確的查找模式。endl; while(flag!=1&flag!=2);if(flag=1

57、) string na;int j=1;coutna;for(i=0;itick.len;i+)if(=na)/找到 k+;/找到的記錄數(shù) if(j=1) coutn 查找結(jié)果如下:endl; cout_endl; cout日期t時(shí)-間t場(chǎng)次t電影名稱t票價(jià)t折扣t余票endlendl; j+; couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tic

58、i.pricettick.tici.discountttm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r; r=timecmp(tick.tici.datetime,array,5);/與系統(tǒng)時(shí)間比擬 if(r=0) couta已播放! endl; else coutendl; coutendltttt當(dāng)前預(yù)訂情況; for(int m=0;m10;m+) coutendlt; for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout

59、無人; cout; if(j!=1)coutendl;system(pause);/任意鍵繼續(xù) return;if(i=tick.len&k=0)coutnatttt未找到結(jié)果!endl;system(pause);/任意鍵繼續(xù) return;elsechar ch;int temp3; couttemp0chtemp1chtemp2;int j=1;for(i=0;itick.len;i+)/遍歷 if(timecmp(tick.tici.datetime,temp,3)=0)/找到 k+;/找到的記錄數(shù) if(j=1) coutn 查找結(jié)果如下:endl; cout_endl; cout日

60、期t時(shí)-間t場(chǎng)次t電影名稱t票價(jià)t折扣t余票endlendl; j+; couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int s; s=timecmp(tick.tici.datetime,ar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論