《C++程序設(shè)計》課程設(shè)計說明書電影院售票系統(tǒng)
《《C++程序設(shè)計》課程設(shè)計說明書電影院售票系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《《C++程序設(shè)計》課程設(shè)計說明書電影院售票系統(tǒng)(74頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 內(nèi)蒙古科技大學(xué) 本科生《C++程序設(shè)計》課程設(shè)計說明書 題 目:電影院售票系統(tǒng) 學(xué)生姓名: 學(xué) 號: 專 業(yè):計算機科學(xué)與技術(shù) 班 級:計2010-1班 指導(dǎo)教師: 74 內(nèi)蒙古科技大學(xué)課程設(shè)計說明書 成績評定標(biāo)準(zhǔn) 課程設(shè)計的驗收答辯采取“講解程序+提問+即時編程”的方式。 考核項目 評價質(zhì)量 成績 程序功能完全實現(xiàn),并能通過答辯。(60%) A能完全正確回答提問; B問題回答的基本意思正確; C不能回答或回答錯誤,抽取程序小的功能即時編程,能完成; D不能回答或回答錯誤,即時編程無法完成;
2、程序設(shè)計符合面向?qū)ο蟮乃枷牒驮瓌t,結(jié)構(gòu)合理(15) A程序結(jié)構(gòu)層次分明,提取出各個實體類,類的設(shè)計合理; B程序結(jié)構(gòu)層次分明,具有客戶類和服務(wù)類; C類的設(shè)計基本正確; D幾乎在一個類或者方法中實現(xiàn)了大部分的邏輯,結(jié)構(gòu)不夠清晰; 程序的風(fēng)格(10%) A遵守編碼規(guī)范,有良好的風(fēng)格; 以下問題每出現(xiàn)一項成績降一個等級: 1.類、方法和變量命名不符合規(guī)范; 2.方法和屬性前缺少注釋; 3.程序沒有適當(dāng)縮進; 設(shè)計說明書 (15%) 從以下幾方面考核: 1.結(jié)構(gòu)完整 2.圖表正確 3.文字通順 4.版面工整
3、 目 錄 成績評定標(biāo)準(zhǔn) 2 【摘要】 5 第一章 問題描述 6 1.1 電影院售票管理系統(tǒng)的設(shè)計 6 第二章 問題分析 8 2.1 闡述你對問題的理解、解決問題的方案說明 8 2.2 系統(tǒng)功能模塊的劃分 8 第三章 數(shù)據(jù)模型 10 3.1 相關(guān)數(shù)據(jù)結(jié)構(gòu)的說明類的設(shè)計 10 3.2 程序結(jié)構(gòu)說明,即程序各個部分之間如何協(xié)調(diào)來完成任務(wù) 12 3.3 全局變量,重要形式參數(shù)、局部變量等等,它們的命名及用途解釋 15 第四章 算法描述 18 4.1 解題算法的設(shè)計思路介紹 18 4.2 主要程序代碼,加上詳細的注釋 20 4.3 畫出程序流程圖 44 第五章 設(shè)計
4、總結(jié) 55 第六章 附錄 56 參考文獻 75 【摘要】 電影院售票管理系統(tǒng)兩個模塊管理系統(tǒng)和售票系統(tǒng)。 1.管理系統(tǒng)具有如下功能: (1)錄入信息:且可不定時增加數(shù)據(jù)。并根據(jù)放映時間排序。 (2)瀏覽信息:可顯示出某日期所有放映信息,如果當(dāng)前系統(tǒng)時間超過了某電影的放映時間,則顯示“此電影放映結(jié)束”的提示信息。 (3)查詢電影:可按日期或電影名查詢。并顯示目標(biāo)的詳細信息。 (4)修改信息:可根據(jù)電影名修改該電影的各種信息(余票除外)并簡單排序。 (5)刪除電影:根據(jù)電影名找到該電影并刪除。 2.售票系統(tǒng)功能如下: (1)售票:售票即為影片預(yù)定???/p>
5、根據(jù)輸出的可預(yù)訂信息選擇訂票,如果該影片已放映,則提示不能訂票,如果售票成功,自動跟新座位數(shù)。 (2)退票:影片退訂即退票。根據(jù)放映時間和系統(tǒng)時間來判斷是否能進行退票,并自動更新座位數(shù)。 其他參數(shù):程序中定義了一個node結(jié)構(gòu)和一個ticket類。結(jié)構(gòu)用來存信息,節(jié)點類存節(jié)點長度,和管理里面的數(shù)據(jù)。 第一章 問題描述 1.1 電影院售票管理系統(tǒng)的設(shè)計 1.設(shè)計資料及參數(shù): 用C++設(shè)計一個系統(tǒng),能提供下列服務(wù): (1)錄入放映信息,格式為: 放映日期 放映時間 場次 電影名稱 票價 會員折扣 剩余座位 2011-11-2 10:30 1 桃姐 30 8
6、 78 2011-11-2 14:00 2 桃姐 30 8 86 可不定時地增加放映數(shù)據(jù)。 (2)瀏覽放映信息,可顯示出某日期所有放映信息,如果當(dāng)前系統(tǒng)時間超過了某電影的放映時間,則顯示“此電影放映結(jié)束”的提示信息。 (3)查詢電影:可按日期或電影名查詢。 (4)售票和退票功能 A:查詢電影名。當(dāng)剩余座位數(shù)大于0,并且當(dāng)前系統(tǒng)時間小于放映時間時才能售票,計算會員折扣,售票后自動更新剩余座位數(shù)。 B:退票時,輸入退票的電影名和場次,當(dāng)電影未放映時才能退票,如果以會員折扣購買的電影票,退票按照折扣價退款,退票后自動更新剩余座位數(shù)。 2.設(shè)計要求及成果 根據(jù)系統(tǒng)功能要
7、求,可以將問題解決分為以下步驟: (1)分析系統(tǒng)中的各個實體之間的關(guān)系及其屬性和行為; (2)根據(jù)問題描述,設(shè)計系統(tǒng)的類層次; (3)完成類層次中各個類的描述(包括屬性和力一法); (4)完成類中各個成.員函數(shù)的定義; (5)完成系統(tǒng)的應(yīng)用模塊; (6)功能調(diào)試; (7)完成系統(tǒng)總結(jié)報告以及系統(tǒng)使用說明書。 第二章 問題分析 2.1 闡述你對問題的理解、解決問題的方案說明 由設(shè)計題目知電影院售票管理系統(tǒng)主要可分為兩個大模塊:1.管理系統(tǒng)2.售票系統(tǒng)。 對整個系統(tǒng)進行功能分析不難發(fā)現(xiàn),管理系統(tǒng)和售票系統(tǒng)的權(quán)限是不一樣的,管理系統(tǒng)具有管理員權(quán)限,可以對所有數(shù)據(jù)的信息進行操
8、作,比如:錄入(input)、顯示(show)、查找(search)、修改(change)、刪除(del);而售票系統(tǒng)則只進行售票(sell)和退票(refund)。所以需要設(shè)計一個manager和customer函數(shù)來區(qū)分權(quán)限的函數(shù)。所以,manager里包含了需要實現(xiàn)的input、show、search、change、del等函數(shù)來滿足管理要求的功能。Customer包含sell和refund。 2.2 系統(tǒng)功能模塊的劃分 系統(tǒng)的模塊圖如下: 歡迎界面 主函數(shù) 售票customer 管理manager 刪除 退票 售票 顯示 輸入 查找 修
9、改 管理函數(shù)進入時需要管理密碼:1234 運行程序時,需要先輸入數(shù)據(jù),根據(jù)需要在對數(shù)據(jù)進行簡單操作。錄入時,每錄入一個信息就會對現(xiàn)有信息進行插入排序。 顯示數(shù)據(jù)時,會先跟系統(tǒng)時間比較,如果小于系統(tǒng)當(dāng)前時間,則輸出提示“已播放”。 查找時滿足要求的按名字查找和按日期查找。找到之后與系統(tǒng)時間比較輸出提示,如果沒找到,輸出提示。 修改函數(shù)支持多種修改,可以避免輸入的一些錯誤。也可以修改日期,以調(diào)整放映時間。 刪除函數(shù)是為防止輸入錯誤,或是內(nèi)存不夠用而設(shè)計的。比如前幾天已播放的,在內(nèi)存中如果作用不是很大,完全是可以刪除的。這樣能跟有效利用資源。 售票系統(tǒng)設(shè)計較為簡單,主要是訂
10、票和退票。 訂票函數(shù)中會先給出可預(yù)訂的提示,這樣可以更有效訂票。輸入之后會先檢查是否播放,若播放則給出提示,退出。若未找到,則同樣給出提示。如果票賣光了,仍然有提示,如果電影達到預(yù)定要求,則先給出現(xiàn)有座位的預(yù)訂情況,方便用戶高效率訂票。當(dāng)客戶輸入一座位時程序會判斷這個作為是否被預(yù)訂,如果是,則給出提示;如果no就輸出用戶需要支付的金額,并記錄在座位號對應(yīng)的數(shù)組中。方便退票時退款。訂票成功后還會輸出現(xiàn)有座位的信息方便核實。 其中訂票和退票函數(shù)都是用大篇幅(一兩百行)來構(gòu)建起強大而有完善的提示功能,趨于人性化的設(shè)計跟拉近了與客戶的距離。 第三章 數(shù)據(jù)模型 3.1 相關(guān)數(shù)據(jù)結(jié)構(gòu)的說明類的
11、設(shè)計 程序中定義的數(shù)據(jù): struct node { int year; int month; int day; int hour; int minute; int datetime[5];//裝時間 ,方便比較 int num; string name; float price; float discount; int rest; float seat[10][10]; }; class ticket { private: node tic[N]; int len; public: ticket
12、(); ~ticket(); int sort(int i); void input(); void show(); void search(); void change(); void del(); void sell(); void refund(); }tick; 內(nèi)蒙古科技大學(xué)課程設(shè)計說明書 對系統(tǒng)進行數(shù)據(jù)分析就會知道電影院售票管理系統(tǒng)主要處理的是基本電影信息。每個電影的基本信息放在struct node中定義,包括基本的放映日期(date),時間(time),場次(num),影片名(name),票價(price),會員折扣(dis
13、count)及余座(rest)。其中日期是包含有年、月、日,時間包含時、分,整形數(shù)據(jù),其中還有一個數(shù)組(detetime[5])是把該影片時間存儲進去,方便以后的排序和與系統(tǒng)時間比較。還有一個而二維數(shù)組seat[10][10],是用來存儲座位信息(初始化全為0),如果此座位被預(yù)定,則對應(yīng)的座位存的就是訂票時的付款,這也方便了退票時的退款。 還要解決數(shù)據(jù)的組織問題,怎么才能把不同的電影存起來呢?方法目前只學(xué)了兩種,數(shù)組和鏈表。數(shù)組和鏈表各有優(yōu)缺點。用鏈表實現(xiàn)雖然對空間進行了充分利用,但其對數(shù)據(jù)的存儲讓人實在無奈,并且操作也不容易實現(xiàn)。剩下就是數(shù)組了,雖然需要定義一個大點的數(shù)組,但其對數(shù)據(jù)操作非
14、常方便,這深受初學(xué)者的我們的青睞。所以在ticket類中定義了個node[50]。如果需要擴大直接改文件前的#define N后的數(shù)字就可以了。 其實質(zhì)隨意選擇把電影信息存在結(jié)構(gòu)體而不是類中,主要考慮到,結(jié)構(gòu)體存取數(shù)據(jù)的方便性,而采用類無疑會給程序很多負擔(dān)存取。 數(shù)據(jù)組織結(jié)構(gòu)圖: ticket類 Input() Show() Search() Change() Del() Sell() Refund() len node[50] 3.2 程序結(jié)構(gòu)說明,即程序各個部分之間如何協(xié)調(diào)來完成任務(wù) 程序的主要實現(xiàn)過程是在ticket類 中定義的成員函數(shù)來實現(xiàn)完
15、成,并且在類外定義。這樣方便了對數(shù)據(jù)進行操作。并且定義了一個全局的比較函數(shù)timecmp,可以比較兩個時間數(shù)組的大小。此函數(shù)在程序中用途很廣泛,每次輸入輸出都需要與系統(tǒng)時間進行比較,所以在每個操作函數(shù)中都用到了。此外sort函數(shù)也是非常有用的,它主要用在輸入和修改上。每次更新數(shù)據(jù)都會根據(jù)現(xiàn)有數(shù)據(jù)的時間進行排序。這也方便了讀數(shù)據(jù)的客戶。其中程序總很多代碼是重復(fù)用到的,但是沒有寫成函數(shù)來調(diào)用有兩點原因。首先如果寫成函數(shù)調(diào)用的話會降低程序的可讀性,其次寫成函數(shù)的話,代碼就固定下來了,使得程序不夠靈活。所以在程序不必要的地方,就用代碼來代替函數(shù)調(diào)用。舉個例子說,在修改,刪除,訂票,退票中都會用到按電影
16、名查找??墒菦]有單獨把按電影名查找單獨寫成函數(shù)來調(diào)用,是因為在按電影名查找會輸出很多詳細的電影信息,會使客戶感覺到是在浪費時間。下面是按電影名查找的代碼片段:
for(i=0;i 17、<"_______________________________________________________________________________"< 18、< 19、//獲取當(dāng)前系統(tǒng)時間
tim=localtime(&t);
int array[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
int s;
s=timecmp(tick.tic[i].datetime,array,5);//與系統(tǒng)時間比較
if(s<=0)
{
20、 cout<<"\a(已播放?。? < 21、
{
cout<<"[";
if(tick.tic[i].seat[m][n]!=0)
{
cout<<"有人";
}
else
{
cout<<"無人";
}
22、 cout<<"]";
}
}
cout< 23、
}
}
}
而在另一些函數(shù)種植需要提示用戶找沒找到就可以了。下面是del函數(shù)的按電影名查找
for(i=0;i 24、 cout<<"\n\a\t\t\t\t未找到結(jié)果,刪除失??!\n"< 25、tetime[5];//裝時間 ,方便比較
int num;//場次
string name;//電影名
float price;//票價
float discount;//會員折扣
int rest;//余票
float seat[10][10];//座位信息
};
class ticket
{
private:
node tic[N];//存電影的數(shù)組
int len;//現(xiàn)有電影數(shù)量
public:
ticket();//構(gòu)造函數(shù)
~ticket();//析構(gòu)函數(shù)
int sort(int i);//排序
void 26、input();//錄入
void show();//顯示
void search();//查找
void change();//修改
void del();//刪除
void sell();//訂票
void refund()//退票;
}tick;
3. int timecmp(int a[],int b[],int n)//時間比較函數(shù),先把時間裝入兩個數(shù)組,把數(shù)組地址傳進來,比較a,b分別是數(shù)組名。n表示循環(huán)比較的次數(shù)。
4. char ch;//接受日期中的字符—或:
5. string na;//輸入的姓名
6. time_t t;//時間 27、變量,已包含在頭文件庫函數(shù)ctime中。
7. struct tm *tim;//時間類型的結(jié)構(gòu)體
8. t=time(NULL);//獲取當(dāng)前系統(tǒng)時間
9. tim=localtime(&t);
10. int array[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
//將系統(tǒng)時間裝入數(shù)組,方便比較
11. int k=0;//標(biāo)記找到的記錄
12. r=timecmp(tick.tic[i].datetime,array,5);//與系統(tǒng)時間比較 ,返回值給r 28、。
13. int j=0;//修改函數(shù)中標(biāo)記修改數(shù)量
14. string inpass;//manager函數(shù)中的管理員密碼初始值1234
15. Flag,as,choice//是用來存接受的選擇的
第四章 算法描述
4.1 解題算法的設(shè)計思路介紹
timecmp函數(shù)是用來比較日期時間函數(shù),它需要先把兩個時間裝入數(shù)組再傳進來地址,然后從年月日時分進行比較。如果有大小區(qū)分,直接返回。
int timecmp(int a[],int b[],int n)
{
for(int i=0;i 29、rn 1;
}
if(a[i]
30、-1)//找到第一個比他大的日期 ,插入其前面
{
break;
}
}
if(j==tick.len-1)
{
return j;
}
if(j==i)
{
for(j=i+1;j 31、emp=tick.tic[i];
if(jj;n--)
{
tick.tic[n]=tick.tic[n-1];
}
tick.tic[j]=temp;
return j;
}
else
{
if(j==tick.len)
{
for(n=i;n 32、 tick.tic[n]=tick.tic[n+1];
}
}
tick.tic[n]=temp;
return n;
}
}
4.2 主要程序代碼,加上詳細的注釋
下面簡單介紹一下程序運行結(jié)果
主函數(shù)開始運行界面:
do
{
cout< 33、<"\n\n\n\t\t\t\t請選擇:";
cin>>choice;
switch(choice)
{
case 1:manager();break;
case 2:customer();break;
default :exit(0);
}
}
while(1);
Manager系統(tǒng)代碼及運行截圖
密碼輸入界面代碼
do
{
cout< 34、
{
break;
}
else
{
cout< 35、\t\t\t2.顯示影片";
cout<<"\n\t\t\t\t3.查找影片";
cout<<"\n\t\t\t\t4.修改影片";
cout<<"\n\t\t\t\t5.刪除影片";
cout<<"\n\t\t\t\t6.退出";
cout<<"\n\n\n\t\t\t\t請選擇:";
cin>>as;
switch(as)
{
case 1:tick.input();break;
case 2:tick.show();break;
36、 case 3:tick.search();break;
case 4:tick.change();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 37、ch;//接受日期中的字符—或:
cout<<"\n\n\n\t\t\t\t《錄入模塊》\n\n\n"< 38、in>>tick.tic[i].minute;
tick.tic[i].datetime[0]=tick.tic[i].year;
tick.tic[i].datetime[1]=tick.tic[i].month;
tick.tic[i].datetime[2]=tick.tic[i].day;
tick.tic[i].datetime[3]=tick.tic[i].hour;
tick.tic[i].datetime[4]=tick.tic[i].minute;
cout<<"\n請輸入場次:";
ci 39、n>>tick.tic[i].num;
cout<<"\n請輸入電影名稱:";
cin>>tick.tic[i].name;
cout<<"\n請輸入電影票價:";
cin>>tick.tic[i].price;
cout<<"\n請輸入會員折扣:";
cin>>tick.tic[i].discount;
tick.tic[i].rest=100;
for(int m=0;m<10;m++)
{
for(int n=0;n<10;n++)
tick.t 40、ic[i].seat[m][n]=0;
}
tick.len++;//個數(shù)加1
if(i!=0)//按時間,插入排序
{
int j=sort(i);
}
cout< 41、if(ch==n || ch==N)
break;
}
}
選擇n退出——>選2顯示。
代碼如下
================================================================
cout<<"\n\n\n\t\t\t\t《顯示模塊》\n\n\n"< 42、____________________________"< 43、ick.len;i++)
{
r=timecmp(tick.tic[i].datetime,array,5);
cout< 44、<<"\t"< 45、面代碼
===============================================================
cout<<"\n\n\n\t\t\t\t《查找模塊》\n\n\n"< 46、 {
cout<<"\n\a\t\t\t\t選擇有誤!請選擇正確的查找模式。"< 47、for(i=0;i 48、 cout<<"日----期\t時-間\t場次\t電影名稱\t票價\t折扣\t余票"< 49、name<<"\t\t";
cout< 50、on+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
int r;
r=timecmp(tick.tic[i].datetime,array,5);//與系統(tǒng)時間比較
if(r<=0)
{
cout<<"\a(已播放?。? < 51、endl;
}
cout< 52、 {
cout<<"有人";
}
else
{
cout<<"無人";
}
cout<<"]";
}
}
}
}
if(j!=1)
{
co 53、ut< 54、================================
char ch;
int temp[3];
cout<<"\n請輸入放映日期:";
cin>>temp[0]>>ch>>temp[1]>>ch>>temp[2];
int j=1;
for(i=0;i 55、 查找結(jié)果如下:"< 56、tic[i].month<<"-"< 57、 struct tm *tim;
t=time(NULL);//獲取當(dāng)前系統(tǒng)時間
tim=localtime(&t);
int array[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
int s;
s=timecmp(tick.tic[i].datetime,array,5);//與系 58、統(tǒng)時間比較
if(s<=0)
{
cout<<"\a(已播放!)" < 59、 cout< 60、 cout<<"無人";
}
cout<<"]";
}
}
cout< 61、未找到結(jié)果!"< 62、 {
cout< 63、"\t\t\t\t6.修改會員折扣";
cout< 64、i].month>>ch>>tick.tic[i].day;
tick.tic[i].datetime[0]=tick.tic[i].year;
tick.tic[i].datetime[1]=tick.tic[i].month;
tick.tic[i].datetime[2]=tick.tic[i].day;i=sort(i);break;
case 2:cout<<"\n請輸入放映時間:";
cin>>tick.tic[i].hour>>ch>>tick.tic[i].minute 65、;
tick.tic[i].datetime[3]=tick.tic[i].hour;
tick.tic[i].datetime[4]=tick.tic[i].minute;i=sort(i);break;
case 3:cout<<"\n請輸入放映場次:";cin>>tick.tic[i].num;break;
case 4:cout<<"\n請輸入影片名:";cin>>tick.tic[i].name;break;
case 5:cout<<"\n請輸入票價:";cin>>tick 66、.tic[i].price;break;
case 6:cout<<"\n請輸入會員折扣:";cin>>tick.tic[i].discount;break;
default:break;
}
cout<
- 溫馨提示:
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)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇教版五上《小數(shù)乘整數(shù)》ppt課件
- 蘇教版一年級數(shù)學(xué)上冊《數(shù)一數(shù)》ppt課件
- 江南1優(yōu)秀課件
- 提高印字質(zhì)量課件
- 服務(wù)分銷策略課件
- 數(shù)學(xué)必修蘇教版互斥事件課件3(共32張PPT)
- 第三章要素費用的核算PPT優(yōu)秀資料
- 元素的質(zhì)量分?jǐn)?shù)計算答案
- 圖形的欣賞與設(shè)計
- 八年級下期Uuit10SectionA課件
- 部編七年級語文下冊4孫權(quán)勸學(xué)課件
- 部編一年級語文下冊端午粽課件
- 超市防損的技能課件
- 表彰班會教學(xué)課件教學(xué)課件
- 第17講中考數(shù)學(xué)專題復(fù)習(xí) 函數(shù)的綜合應(yīng)用中考數(shù)學(xué)專題復(fù)習(xí)課件課件各版通用