c++課程設(shè)計報告電影院售票系統(tǒng)_第1頁
c++課程設(shè)計報告電影院售票系統(tǒng)_第2頁
c++課程設(shè)計報告電影院售票系統(tǒng)_第3頁
c++課程設(shè)計報告電影院售票系統(tǒng)_第4頁
c++課程設(shè)計報告電影院售票系統(tǒng)_第5頁
已閱讀5頁,還剩69頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

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

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

4、0 HYPERLINK l _Toc6163 3.1 相關(guān)數(shù)據(jù)結(jié)構(gòu)的說明類的設(shè)計 PAGEREF _Toc6163 10 HYPERLINK l _Toc27979 3.2 程序結(jié)構(gòu)說明,即程序各個部分之間如何協(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è)計思路介紹

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

6、管理系統(tǒng)和售票系統(tǒng)。1.管理系統(tǒng)具有如下功能:(1)錄入信息:且可不定時增加數(shù)據(jù)。并根據(jù)放映時間排序。(2)瀏覽信息:可顯示出某日期所有放映信息,如果當(dāng)前系統(tǒng)時間超過了某電影的放映時間,則顯示“此電影放映結(jié)束”的提示信息。(3)查詢電影:可按日期或電影名查詢。并顯示目標(biāo)的詳細(xì)信息。 (4)修改信息:可根據(jù)電影名修改該電影的各種信息(余票除外)并簡單排序。(5)刪除電影:根據(jù)電影名找到該電影并刪除。2.售票系統(tǒng)功能如下:(1)售票:售票即為影片預(yù)定。可根據(jù)輸出的可預(yù)訂信息選擇訂票,如果該影片已放映,則提示不能訂票,如果售票成功,自動跟新座位數(shù)。(2)退票:影片退訂即退票。根據(jù)放映時間和系統(tǒng)時間來

7、判斷是否能進(jìn)行退票,并自動更新座位數(shù)。其他參數(shù):程序中定義了一個node結(jié)構(gòu)和一個ticket類。結(jié)構(gòu)用來存信息,節(jié)點(diǎn)類存節(jié)點(diǎn)長度,和管理里面的數(shù)據(jù)。問題描述電影院售票管理系統(tǒng)的設(shè)計1.設(shè)計資料及參數(shù):用C+設(shè)計一個系統(tǒng),能提供下列服務(wù):(1)錄入放映信息,格式為:放映日期放映時間場次電影名稱票價會員折扣剩余座位2011-11-210:301桃姐308782011-11-214:002桃姐30886可不定時地增加放映數(shù)據(jù)。(2)瀏覽放映信息,可顯示出某日期所有放映信息,如果當(dāng)前系統(tǒng)時間超過了某電影的放映時間,則顯示“此電影放映結(jié)束”的提示信息。(3)查詢電影:可按日期或電影名查詢。 (4)售票

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

9、問題的方案說明由設(shè)計題目知電影院售票管理系統(tǒng)主要可分為兩個大模塊:1.管理系統(tǒng)2.售票系統(tǒng)。對整個系統(tǒng)進(jìn)行功能分析不難發(fā)現(xiàn),管理系統(tǒng)和售票系統(tǒng)的權(quán)限是不一樣的,管理系統(tǒng)具有管理員權(quán)限,可以對所有數(shù)據(jù)的信息進(jìn)行操作,比如:錄入(input)、顯示(show)、查找(search)、修改(change)、刪除(del);而售票系統(tǒng)則只進(jìn)行售票(sell)和退票(refund)。所以需要設(shè)計一個manager和customer函數(shù)來區(qū)分權(quán)限的函數(shù)。所以,manager里包含了需要實(shí)現(xiàn)的input、show、search、change、del等函數(shù)來滿足管理要求的功能。Customer包含sell和r

10、efund。系統(tǒng)功能模塊的劃分系統(tǒng)的模塊圖如下:歡迎界面主函數(shù)售票customer管理manager刪除退票售票顯示輸入查找修改管理函數(shù)進(jìn)入時需要管理密碼:1234運(yùn)行程序時,需要先輸入數(shù)據(jù),根據(jù)需要在對數(shù)據(jù)進(jìn)行簡單操作。錄入時,每錄入一個信息就會對現(xiàn)有信息進(jìn)行插入排序。顯示數(shù)據(jù)時,會先跟系統(tǒng)時間比較,如果小于系統(tǒng)當(dāng)前時間,則輸出提示“已播放”。查找時滿足要求的按名字查找和按日期查找。找到之后與系統(tǒng)時間比較輸出提示,如果沒找到,輸出提示。修改函數(shù)支持多種修改,可以避免輸入的一些錯誤。也可以修改日期,以調(diào)整放映時間。刪除函數(shù)是為防止輸入錯誤,或是內(nèi)存不夠用而設(shè)計的。比如前幾天已播放的,在內(nèi)存中如

11、果作用不是很大,完全是可以刪除的。這樣能跟有效利用資源。售票系統(tǒng)設(shè)計較為簡單,主要是訂票和退票。訂票函數(shù)中會先給出可預(yù)訂的提示,這樣可以更有效訂票。輸入之后會先檢查是否播放,若播放則給出提示,退出。若未找到,則同樣給出提示。如果票賣光了,仍然有提示,如果電影達(dá)到預(yù)定要求,則先給出現(xiàn)有座位的預(yù)訂情況,方便用戶高效率訂票。當(dāng)客戶輸入一座位時程序會判斷這個作為是否被預(yù)訂,如果是,則給出提示;如果no就輸出用戶需要支付的金額,并記錄在座位號對應(yīng)的數(shù)組中。方便退票時退款。訂票成功后還會輸出現(xiàn)有座位的信息方便核實(shí)。其中訂票和退票函數(shù)都是用大篇幅(一兩百行)來構(gòu)建起強(qiáng)大而有完善的提示功能,趨于人性化的設(shè)計跟

12、拉近了與客戶的距離。數(shù)據(jù)模型相關(guān)數(shù)據(jù)結(jié)構(gòu)的說明類的設(shè)計程序中定義的數(shù)據(jù):struct nodeint year;int month;int day;int hour;int minute;int datetime5;/裝時間 ,方便比較 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 s

13、earch();void change();void del();void sell();void refund();tick;對系統(tǒng)進(jìn)行數(shù)據(jù)分析就會知道電影院售票管理系統(tǒng)主要處理的是基本電影信息。每個電影的基本信息放在struct node中定義,包括基本的放映日期(date),時間(time),場次(num),影片名(name),票價(price),會員折扣(discount)及余座(rest)。其中日期是包含有年、月、日,時間包含時、分,整形數(shù)據(jù),其中還有一個數(shù)組(detetime5)是把該影片時間存儲進(jìn)去,方便以后的排序和與系統(tǒng)時間比較。還有一個而二維數(shù)組seat1010,是用來存儲座

14、位信息(初始化全為0),如果此座位被預(yù)定,則對應(yīng)的座位存的就是訂票時的付款,這也方便了退票時的退款。還要解決數(shù)據(jù)的組織問題,怎么才能把不同的電影存起來呢?方法目前只學(xué)了兩種,數(shù)組和鏈表。數(shù)組和鏈表各有優(yōu)缺點(diǎn)。用鏈表實(shí)現(xiàn)雖然對空間進(jìn)行了充分利用,但其對數(shù)據(jù)的存儲讓人實(shí)在無奈,并且操作也不容易實(shí)現(xiàn)。剩下就是數(shù)組了,雖然需要定義一個大點(diǎn)的數(shù)組,但其對數(shù)據(jù)操作非常方便,這深受初學(xué)者的我們的青睞。所以在ticket類中定義了個node50。如果需要擴(kuò)大直接改文件前的#define N后的數(shù)字就可以了。其實(shí)質(zhì)隨意選擇把電影信息存在結(jié)構(gòu)體而不是類中,主要考慮到,結(jié)構(gòu)體存取數(shù)據(jù)的方便性,而采用類無疑會給程序很

15、多負(fù)擔(dān)存取。數(shù)據(jù)組織結(jié)構(gòu)圖:ticket類Input()Show()Search()Change()Del()Sell()Refund()lennode50程序結(jié)構(gòu)說明,即程序各個部分之間如何協(xié)調(diào)來完成任務(wù)程序的主要實(shí)現(xiàn)過程是在ticket類 中定義的成員函數(shù)來實(shí)現(xiàn)完成,并且在類外定義。這樣方便了對數(shù)據(jù)進(jìn)行操作。并且定義了一個全局的比較函數(shù)timecmp,可以比較兩個時間數(shù)組的大小。此函數(shù)在程序中用途很廣泛,每次輸入輸出都需要與系統(tǒng)時間進(jìn)行比較,所以在每個操作函數(shù)中都用到了。此外sort函數(shù)也是非常有用的,它主要用在輸入和修改上。每次更新數(shù)據(jù)都會根據(jù)現(xiàn)有數(shù)據(jù)的時間進(jìn)行排序。這也方便了讀數(shù)據(jù)的客

16、戶。其中程序總很多代碼是重復(fù)用到的,但是沒有寫成函數(shù)來調(diào)用有兩點(diǎn)原因。首先如果寫成函數(shù)調(diào)用的話會降低程序的可讀性,其次寫成函數(shù)的話,代碼就固定下來了,使得程序不夠靈活。所以在程序不必要的地方,就用代碼來代替函數(shù)調(diào)用。舉個例子說,在修改,刪除,訂票,退票中都會用到按電影名查找??墒菦]有單獨(dú)把按電影名查找單獨(dú)寫成函數(shù)來調(diào)用,是因?yàn)樵诎措娪懊檎視敵龊芏嘣敿?xì)的電影信息,會使客戶感覺到是在浪費(fèi)時間。下面是按電影名查找的代碼片段:for(i=0;itick.len;i+)/遍歷 if(timecmp(tick.tici.datetime,temp,3)=0)/找到 k+;/找到的記錄數(shù) if(j=1)

17、 coutn 查找結(jié)果如下:endl; cout_endl; cout日-期t時-間t場次t電影名稱t票價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; i

18、nt s; s=timecmp(tick.tici.datetime,array,5);/與系統(tǒng)時間比較 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無人; cout; coutendl;if(j!=1)coutendl;system(pause);/任意鍵繼續(xù) return;if(i=tick.len&k=0)coutna

19、tttt未找到結(jié)果!endl;system(pause);/任意鍵繼續(xù) return;而在另一些函數(shù)種植需要提示用戶找沒找到就可以了。下面是del函數(shù)的按電影名查找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é)果,刪除失敗!ntm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,

20、tim-tm_min;/將系統(tǒng)時間裝入數(shù)組,方便比較int k=0;/標(biāo)記找到的記錄r=timecmp(tick.tici.datetime,array,5);/與系統(tǒng)時間比較 ,返回值給 j=0;/修改函數(shù)中標(biāo)記修改數(shù)量string inpass;/manager函數(shù)中的管理員密碼初始值1234Flag,as,choice/是用來存接受的選擇的算法描述解題算法的設(shè)計思路介紹timecmp函數(shù)是用來比較日期時間函數(shù),它需要先把兩個時間裝入數(shù)組再傳進(jìn)來地址,然后從年月日時分進(jìn)行比較。如果有大小區(qū)分,直接返回。int timecmp(int a,int b,int n)for(int i

21、=0;ibi)return 1;if(aibi)return -1;if(i=n)return 0;/Sort函數(shù)主要是對第i個元素進(jìn)行插入排序。需要先遍歷數(shù)組然后插入到第一個比他大的元素前面。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)/找到第一個比他大的日期 ,插入其前面 break;if(j=tick.len-1)return j;if(j=i)for(j=i+1;jtick.len;j+)/從首元素

22、開始比較日期 r=timecmp(tick.tici.datetime,tick.ticj.datetime,5); if(r=-1)/找到第一個比他大的日期 ,插入其前面 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;主要程序代碼

23、,加上詳細(xì)的注釋下面簡單介紹一下程序運(yùn)行結(jié)果主函數(shù)開始運(yùn)行界面:docoutendlendlendlendl;couttttt歡迎使用電影售票系統(tǒng); coutendlendlendl;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;elsecouten

24、dlatttt密碼錯誤!; coutendla;if(a=N|a=n)exit(0);while(1);選擇菜單代碼 do coutntttt歡迎進(jìn)入管理系統(tǒng)nn; coutntttt1.錄入影片; 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.chang

25、e();break; case 5:tick.del();break; case 6:default :system(pause); return;/任意鍵繼續(xù) while(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;cintic

26、k.tici.minute; tick.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; f

27、or(int m=0;m10;m+) for(int n=0;n10;n+)tick.tici.seatmn=0; tick.len+;/個數(shù)加1 if(i!=0)/按時間,插入排序 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時-間t場次t電影名稱t票價t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_md

28、ay,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.discountttick.tici.rest; if(r=0) couta(已播放!) e

29、ndl; else cout繼續(xù)錄入選擇2顯示選3查找查找的界面代碼=coutnnntttt查找模塊nnnendl; do coutendltttt1.按影片名查找; coutendltttt2.按日期查找; coutendlflag; if(flag!=1&flag!=2) coutnatttt選擇有誤!請選擇正確的查找模式。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

30、查找結(jié)果如下:endl; cout_endl; cout日-期t時-間t場次t電影名稱t票價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 r; r

31、=timecmp(tick.tici.datetime,array,5);/與系統(tǒng)時間比較 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無人; cout; if(j!=1)coutendl;system(pause);/任意鍵繼續(xù) return;if(i=tick.len&k=0)coutnatttt未找到結(jié)果!endl;s

32、ystem(pause);/任意鍵繼續(xù) return;=按日期查找代碼=char 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日-期t時-間t場次t電影名稱t票價t折扣t余票endlendl; j+; couttick.tici.year-tick.tici.month-tick.tici.dayt; co

33、uttick.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)時間比較 if(s=0) couta(已播放?。?endl; else coutendl; coutendltttt當(dāng)前預(yù)訂情況; for(int m=0;

34、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é)果!修改修改界面的源代碼=if(=na)/找到 j+;char a;do coutendltttt1.修改放映日期(2011-11-11); coutendltttt2.修改放映時間(12:30); cout

35、endltttt3.修改放映場次; coutendltttt4.修改影片名稱; coutendltttt5.修改影片票價; coutendltttt6.修改會員折扣; coutendlendlendl; 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.d

36、ay;i=sort(i);break; case 2:couttick.tici.hourchtick.tici.minute;tick.tici.datetime3=tick.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:br

37、eak; coutendla; while(a!=N&a!=n); cout 當(dāng)前電影信息如下:endl; cout_endl; cout日-期t時-間t場次t電影名稱t票價t折扣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; coutti

38、tt; couttick.tici.pricettick.tici.discountttick.tici.rest; if(r=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

39、-1=tick.ticj;coutendltttt刪除成功!n;tick.len-; if(i=tick.len&j=0) coutnatttt未找到結(jié)果,刪除失?。退出進(jìn)入售票系統(tǒng)選1訂票可預(yù)訂電影信息輸出=coutnnntttt售票模塊nnnendl; cout 可預(yù)訂的電影信息如下:endl; cout_endl; cout日-期t時-間t場次t電影名稱t票價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

40、+; couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; 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.da

41、tetime,array,5);/與系統(tǒng)時間比較 if(s=0) coutanttt此電影已播放,無法訂票! endl;system(pause);/任意鍵繼續(xù) return; =如果滿足訂票條件=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對不起,無此座位!; system(pause);/任意鍵繼續(xù) return; m=(seatnu

42、m-1)/10; n=(seatnum-1)%10; if(tick.tici.seatmn=0&tick.tici.rest!=0) coutendla; if(a!=N&a!=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您的座位號是:seatnumendl; coutendltttt預(yù)訂成功!;for

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

44、tttt當(dāng)前預(yù)訂情況;int m,n; 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對不起,無此座位!; system(pause);/任意鍵繼續(xù) return; m=(seatnum-1)/10; n=(seatnum-1)%10; if(tick.tici.seatmn!=0) tick.tici.rest+; coutendlttt

45、t您要退訂座位號是:seatnumendl; coutendltttt退給您:tick.tici.seatmn元。endl; coutendltttt退訂成功!;tick.tici.seatmn=0; =退訂未定的座位,提示代碼=else coutendlattn對不起,此座位未預(yù)訂,無法退票!n; system(pause);/任意鍵繼續(xù) return; =退出畫出程序流程圖程序中函數(shù)的流程圖:main()終止Choice=2Choice=1Choice=othercustomermanager輸入choice開始break退出5刪除6其他4修改3查找2顯示選擇功能1錄入YN密碼正確輸入管理

46、密碼開始2.manager()開始leng=0;i=len;輸入日期和時間,場次電影名等YN退出Len0與系統(tǒng)時間比較返回值為r輸出ticki的信息Y退出Nileni=0;開始,獲取系統(tǒng)時間;4.show()開始輸出提示5.search()退出輸出詳細(xì)信息提示,返回NY遍歷找到輸入日期輸入電影名flag=2flag=1flag=other輸入flag6.change()YY退出N輸出信息繼續(xù)修改Sort(i)其他屬性修改日期時間輸入修改項(xiàng)flag退出N遍歷找到輸入電影名開始開始輸入電影名7.del()NY退出刪除(后項(xiàng)向前覆蓋)遍歷找到8.customer()開始輸入as訂票as=2退票as=

47、otheras=1退出開始遍歷不能訂票不能訂票NY以會員購票YN此座位未預(yù)訂輸入預(yù)訂座位號輸出當(dāng)前預(yù)訂YN比系統(tǒng)時間大退出N遍歷找到輸入預(yù)訂名與系統(tǒng)時間比較輸出可供預(yù)定的9.sell()pricePrice*discount輸出當(dāng)前預(yù)訂更新座位退出開始10.refund()輸出當(dāng)前預(yù)訂Y已預(yù)訂輸入退訂座位N不能退票Y不能退票N比系統(tǒng)時間大N遍歷找到輸入退訂影片退出當(dāng)前預(yù)訂更新座位退票,退款設(shè)計總結(jié)這次課程設(shè)計中我感覺設(shè)計的比較滿意的是訂票和退票函數(shù),根據(jù)提示信息就可以輕松完成訂票和退票。這次的代碼已經(jīng)是我寫的第三份了。其中前兩份都或多或少出現(xiàn)了大漏洞,先拿第一份來說,雖然功能比較完善,里面定義

48、了六個類,40的個成員函數(shù),總代碼量1000多行,然而卻犯了最致命的錯誤,里面存儲數(shù)據(jù)使用鏈表實(shí)現(xiàn),可是開辟內(nèi)存單元卻在局部函數(shù),這樣局部函數(shù)執(zhí)行完內(nèi)存單元動消失,造成數(shù)據(jù)丟失。因此我放棄了第一份,重寫了第二份,第二份中吸取了第一份的教訓(xùn),同樣適用鏈表實(shí)現(xiàn),定義了兩個類,寫了十幾個函數(shù),雖然已經(jīng)能運(yùn)行,但是其中函數(shù)傳遞參數(shù)頻繁降低了程序的可讀性。所以再此放棄修改。最后設(shè)計了一個結(jié)構(gòu)體,一個類,10個函數(shù)同樣實(shí)現(xiàn)了基本功能,同時增加了一些修改排序功能。當(dāng)然這個程序也是有瑕疵的,在修改日期后可以完成排序,可是修改了時間會造成排序不正確。這可能需要答辯之后在進(jìn)行修改了。還有就是整個程序的設(shè)計思想,大

49、型一點(diǎn)的程序設(shè)計,如果從上向下考慮功能的實(shí)現(xiàn)會節(jié)約很多時間,這也是比較合理的設(shè)計方法。以上是我的總結(jié)。附錄#include#include#include#include#define N 50/可存電影總數(shù) using namespace std;struct nodeint year;int month;int day;int hour;int minute;int datetime5;/裝時間 ,方便比較 int num;string name;float price;float discount;int rest;float seat1010;/class ticketprivate:

50、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;/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

51、 i)/=int r,n,j;for(j=0;ji;j+)/從首元素開始比較日期 r=timecmp(tick.tici.datetime,tick.ticj.datetime,5);if(r=-1)/找到第一個比他大的日期 ,插入其前面 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)/找到第一個比他大的日期 ,插入其前面 break;node temp=tick.tici;i

52、f(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;/void ticket:input()/錄入信息 system(cls);/清屏 char ch;/接受日期中的字符或: coutnnntttt錄入模塊nnnendl; for(int i=tick.len;iN;i+) couttick

53、.tici.yearchtick.tici.monthchtick.tici.day; couttick.tici.hour;cinch;cintick.tici.minute; tick.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.ti

54、; 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+;/個數(shù)加1 if(i!=0)/按時間,插入排序 int j=sort(i); coutendl; coutch; if(ch=y | ch=Y | ch=n | ch=N) break; else cout輸入錯誤請重新輸入:; if(ch=n | ch=N) break; /void ticket:show()

55、system(cls);/清屏coutnnntttt顯示模塊nnnendl;cout 所有電影信息如下:endl;cout_endl;cout日-期t時-間t場次t電影名稱t票價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.datetime,array,5); couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.ho

56、ur:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttick.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.按日期查找; couten

57、dlflag; if(flag!=1&flag!=2) coutnatttt選擇有誤!請選擇正確的查找模式。endl; while(flag!=1&flag!=2);if(flag=1) 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時-間t場次t電影名稱t票價t折扣t余票endlendl; j+; couttick.tici.year-tick.tici.month-tick.tici

58、.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)時間比較 if(r=0) couta(已播放?。?endl; else coutendl; coutendltttt當(dāng)前預(yù)訂情況; for

59、(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;elsechar ch;int temp3; couttemp0chtemp1chtemp2;int j=1;for(i=0;itick.len;i+)/遍歷 if(

60、timecmp(tick.tici.datetime,temp,3)=0)/找到 k+;/找到的記錄數(shù) if(j=1) coutn 查找結(jié)果如下:endl; cout_endl; cout日-期t時-間t場次t電影名稱t票價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_y

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論