版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 内蒙古科技大学 课程设计论文题 目:C+课程设计电影院售票管理系统学生:张雪婉学 号:1167119224专 业:通信工程 班 级:2011-2指导教师:郝斌【摘要】1第一章 问题描述1.1 电影院售票管理系统的设计第二章 问题分析2.1 阐述你对问题的理解、解决问题的方案说明2.2 系统功能模块的划分第三章 数据模型3.1 相关数据结构的说明类的设计3.2 程序结构说明,即程序各个部分之间如何协调来完成任务第四章 算法描述4.1 解题算法的设计思路介绍4.2 主要程序代码,加上详细的注释第五章 设计总结第六章 附录【摘要】电影院售票管理系统实现的功能:1、录入信息:且可不定时增加数据。并根
2、据放映时间排序。2、浏览信息:可显示出某日期所有放映信息,如果当前系统时间超过了某电影的放映时间,则显示“此电影放映结束”的提示信息。3、查询电影:可按日期或电影名查询。并显示目标的详细信息。 4、售票:售票即为影片预定。可根据输出的可预订信息选择订票,如果该影片已放映,则提示不能订票,如果售票成功,自动跟新座位数。5、退票:影片退订即退票。根据放映时间和系统时间来判断是否能进行退票,并自动更新座位数。其他参数:程序中定义了一个moive结构和一个ticket类,在结构体和类外还定义了seat()和putout()两个函数。moive结构用来存放电影的数据属性信息;ticket类实现管理moi
3、ve结构体里面的数据和系统功能模块;seat()和putout()函数用来辅助结构体和类,简化程序。第一章: 问题描述1.1、设计资料及参数用C+设计一个系统,能提供以下服务:1录入放映信息,格式为:放映日期放映时间场次电影名称票价会员折扣剩余座位2011-11-210:301桃姐308782011-11-214:002桃姐30886可不定时地增加放映数据。2浏览放映信息,可显示出某日期所有放映信息,如果当前系统时间超过了某电影的放映时间,则显示“此电影放映结束”的提示信息。3查询电影:可按日期或电影名查询。 4售票和退票功能A:查询电影名。当剩余座位数大于0,并且当前系统时间小于放映时间时才
4、能售票,计算会员折扣,售票后自动更新剩余座位数。 B:退票时,输入退票的电影名和场次,当电影未放映时才能退票,如果以会员折扣购买的电影票,退票按照折扣价退款,退票后自动更新剩余座位数。1.2、设计要求及成果根据系统功能要求,可以将问题解决分为以下步骤:1分析系统中的各个实体之间的关系及其属性和行为;2根据问题描述,设计系统的类层次;3完成类层次中各个类的描述(包括属性和方法);4完成类中各个成员函数的定义;5完成系统的应用模块;6功能调试;7提交课程设计报告:完成系统总结报告以及系统使用说明书第二章:问题分析2.1、对问题理解的阐述、解决方案的说明由设计题目知电影院售票管理系统主要由1、录入i
5、nput2、显示show3、查询search4、售票sell5、退票refund五个模块组成。对整个系统进行功能分析不难发现,电影院管理系统可以对所有数据的信息进行操作,比方:录入input、显示show、查询search、售票sell和退票refund。所以需要设计一个moive结构体和ticket类来实现对基本数据的储存和模块功能的实现。考虑到程序实现程序的尽量简洁明了,又增加了时间比较函数timecmp、座位判断函数seat和信息输出函数putout三个函数,对程序实现一定程度的简化。2.2、系统的模块功能流程图如下:运行程序时,需要先输入数据。并定义了时间的输入格式。如2013-6-2
6、1 22:00。显示数据时,会先跟系统时间比较,如果小于系统当前时间,则输出提示“已播放”。查找时满足要求的按名字查找和按日期查找。找到之后与系统时间比较输出提示,如果没找到,输出提示。查询时分为按电影名和日期两种查询功能。查询时将会出现界面来供操作者选择。订票函数中会先给出可预订的提示,这样可以更有效订票。输入之后会先检查是否播放,假设播放则给出提示,退出。假设未找到,则同样给出提示。如果票卖光了,仍然有提示,如果电影到达预定要求,则先给出现有座位的预订情况,方便用户高效率订票。当客户输入一座位时程序会判断这个作为是否被预订,如果是,则给出提示;如果no就输出用户需要支付的金额,并记录在座位
7、号对应的数组中。方便退票时退款。订票成功后还会输出现有座位的信息方便核实。退票时,操作者要先输入电影名,假设电影名不存在或时间以过,会提示“输入错误”或“电影已播放,无法退票”。假设在预定的电影中,还会要求输入退订的座位号,以便进一步确认是否真正该电影。假设两道确认都成功通过,就会输出要腿还的金额。其中订票和退票函数都是用大篇幅一两百行来构建起强大而有完善的提示功能,已完成快捷而又便利操作。第三章:数据模型struct moive /定义moive结构体,存放数据int year;/年int month;/月int day;/日int hour;/时int minute;/分int datet
8、ime5;/装电影放映时间,方便比较与系统时间比较 int num;/场次string name;/电影名float price;/票价float discount;/折扣int rest;/余票float seat1010;/初始值都为0,只在预定后改变其值;class ticket/定义ticket类private:moive ticN;/存电影数据的数组int len;/现有电影数量public:ticket();/构造函数ticket();/析构函数friend void seat(int i);/把seat函数定义为类ticket的友元函数friend void putout(int
9、 i);/把putout函数定义为类ticket的友元函数void input();/录入void show();/显示void search();/查找void sell();/订票void refund();/退票;tick;在类中把seat和putout函数定义为类的友元函数,实现类外的函数访问类内的成员,这样可以源代码的篇章幅度,实现在一定程度上简化程序。私有数据成员moive ticN,便于操作数据。数据组织结构图:3.2 程序结构说明,即程序各个部分之间如何协调来完成任务程序的主要实现过程是在ticket类 中定义的成员函数和友元函数来实现完成,并且在类外实现。这样方便了对数据进行
10、操作。并且定义了一个全局的比较函数timecmp,可以比较两个时间数组的大小;函数seat实现判断某一座位是否被预定;函数putout实现对电影信息的输出。这三个函数在程序中用途很广泛,在整个程序中多次有时间的比较,座位的检索,电影的信息的输出,当用到某一函数时,直接在模块调用即可,不必多次编写,实现程序的简化。其中程序总很多代码是重复用到的,但是没有写成函数来调用有两点原因。首先如果写成函数调用的话会降低程序的可读性,其次写成函数的话,代码就固定下来了,使得程序不够灵活。所以在程序不必要的地方,就用代码来代替函数调用。举个例子说,在修改,删除,订票,退票中都会用到按电影名查找。可是没有单独把
11、按电影名查找单独写成函数来调用,是因为在按电影名查找会输出很多详细的电影信息和提示信息。这样也不便于调用函数。第四章:算法的描述4.1 解题算法的设计思路介绍timecmp函数是用来比较日期时间函数,它需要先把两个时间装入数组再传进来地址,然后从年月日时分进行比较。如果有大小区分,直接返回。int timecmp(int a,int b,int n)int i; for(i=0;i<n;i+)if(ai>bi)return 1;if(ai<bi)return -1;if(i=n)return 0;Seat函数作为检索某一座位是否已被预订,因为seatmn=0,即初始化都为0。
12、二当该座位被预订后就会赋予座位号,所以用两层for循环,把所有的座位都检索了一遍。在输出,就一下子看出那些座位被预定,那些没有。因为seat函数是类外函数,不能直接操作类ticket的成员,所以要在类中写入“friend voidseatint i;”即定义为类的友元函数。假设不加,编译将会出错。void seat(int i) for(int m=0;m<10;m+) cout<<endl<<"t"for(int n=0;n<10;n+) cout<<"" if(tick.tici.seatmn!=0)
13、cout<<"有人" else cout<<"无人" cout<<"" putout函数是便于把电影的属性数据信息输出,因为tic是类中的数据成员且又是结构体moive类型的变量,故要用两层引用。但putout函数也是全局的类外函数,要想访问类ticket中的成员,也需把其定义为类的友元函数。不然编译阶段会出错。void putout(int i) cout<<tick.tici.year<<"-"<<tick.tici.month<&l
14、t;"-"<<tick.tici.day<<"t" cout<<tick.tici.hour<<":"<<tick.tici.minute<<"t" cout<<tick.tici.num<<"t"<<<<"tt" cout<<tick.tici.price<<"t"<<ti
15、ck.tici.discount<<"t"<<tick.tici.rest<<endl;4.2 主要程序代码和运行结果图主函数,即选择菜单:char as; while(1) cout<<"ntttt欢送进入管理系统nn" cout<<"ntttt1.录入影片" cout<<"ntttt2.显示影片" cout<<"ntttt3.查找影片" cout<<"ntttt4.售票" co
16、ut<<"ntttt5.退票"<<endl; cout<<"输入数字 执行相应功能:" cin>>as; switch(as) case '1':tick.input();break; case '2':tick.show();break; case '3':tick.search();break; case '4':tick.sell();break;case '5':tick.refund();break;default :
17、system("pause"); return;/任意键继续 录入电影信息:void ticket:input() system("cls");/清屏 char ch;/接受日期中的字符-或: cout<<"nnntttt录入模块nnn"<<endl; for(int i=tick.len;i<N;i+) cout<<"n请输入日期如(2011-11-11):" cin>>tick.tici.year>>ch>>tick.tici.mon
18、th>>ch>>tick.tici.day; cout<<"n请输入放映时间如(12:30):"cin>>tick.tici.hour;cin>>ch;cin>>tick.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.dat
19、etime4=tick.tici.minute; cout<<"n请输入场次:" cin>>tick.tici.num; cout<<"n请输入电影名称:" cin>>; cout<<"n请输入电影票价:" cin>>tick.tici.price; cout<<"n请输入会员折扣:" cin>>tick.tici.discount; tick.tici.rest=100; for(int m
20、=0;m<10;m+) for(int n=0;n<10;n+)tick.tici.seatmn=0; tick.len+;/个数加1 cout<<endl; cout<<"是否继续录入?y/n:" while(1) cin>>ch; if(ch='y' | ch='Y' | ch='n' | ch='N') break; else cout<<"输入错误请重新输入:" if(ch='n' | ch='N
21、39;) break; 显示电影信息:void ticket:show()system("cls");/清屏cout<<"nnntttt显示模块nnn"<<endl;cout<<" 所有电影信息如下:"<<endl;cout<<"日-期t时-间t场次t电影名称t票价t折扣t余票"<<endl<<endl;time_t t;struct tm *tim;/时间变量,已包含在头文件库函数ctime中 t=time(NULL);/获取当前
22、系统时间 tim=localtime(&t); int array5=tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min; int r; for(int i=0;i<tick.len;i+) r=timecmp(tick.tici.datetime,array,5);/与系统时间比较 ,返回值给r putout( i);/调用putout函数 if(r<=0) cout<<"a已播放!" <<endl; else
23、cout<<endl; 查询电影:void ticket:search()char flag;int i;int k=0;/标记找到的记录 system("cls");/清屏 cout<<"nnntttt查找模块nnn"<<endl; while(flag!='1'&&flag!='2') cout<<endl<<"tttt1.按影片名查找" cout<<endl<<"tttt2.按日期查找&q
24、uot; cout<<endl<<"tttt请输入查找模式:" cin>>flag; if(flag!='1'&&flag!='2') cout<<"natttt选择有误!请选择正确的查找模式。"<<endl; 【按电影名查询】if(flag='1') string na;int j=1;cout<<"n请输入影片名:"cin>>na;for(i=0;i<tick.len;i+)if
25、(=na)/找到 k+;/找到的记录数 if(j=1) cout<<" n 查找结果如下:"<<endl; cout<<"日-期t时-间t场次t电影名称t票价t折扣t余票"<<endl<<endl; j+; putout( i);/调用putout函数 time_t t; struct tm *tim; t=time(NULL);/获取当前系统时间 tim=localtime(&t); int array5=tim->tm_year+1900,tim-&
26、gt;tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min; int r; r=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(r<=0) cout<<"a已播放!" <<endl; else cout<<endl; cout<<endl<<"tttt当前预订情况" seat(i);/调用seat函数if(j!=1)cout<<endl;system("pause
27、");/任意键继续 return;if(i=tick.len&&k=0)cout<<"natttt未找到结果!"<<endl;system("pause");/任意键继续 return;【按日期查询】elsechar ch;int temp3; cout<<"n请输入放映日期:"cin>>temp0>>ch>>temp1>>ch>>temp2;int j=1;for(i=0;i<tick.len;i+)/遍历
28、 if(timecmp(tick.tici.datetime,temp,3)=0)/找到 k+;/找到的记录数 if(j=1) cout<<"n 查找结果如下:"<<endl; cout<<"日-期t时-间t场次t电影名称t票价t折扣t余票"<<endl<<endl; j+; putout( i);/调用putout函数 time_t t; struct tm *tim;/时间类型的结构体 t=time(NULL);/获取当前系统时间 tim=localtime(&t); int arr
29、ay5=tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min; int s; s=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(s<=0) cout<<"a已播放!" <<endl; else cout<<endl; cout<<endl<<"tttt当前预订情况" seat(i);/调用seat函数 cout<<
30、endl;if(j!=1)cout<<endl;system("pause");/任意键继续 return;if(i=tick.len&&k=0)cout<<"natttt未找到结果!"<<endl;system("pause");/任意键继续 return;售票:void ticket:sell()system("cls");/清屏 cout<<"nnntttt售票模块nnn"<<endl; cout<<&
31、quot; 可预订的电影信息如下:"<<endl; cout<<"日-期t时-间t场次t电影名称t票价t折扣t余票"<<endl<<endl; time_t t; struct tm *tim; t=time(NULL);/获取当前系统时间 tim=localtime(&t); int array5=tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min; int r,i; int k=0;/标记
32、可供预定的影片数量 for(i=0;i<tick.len;i+) r=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(r>0) k+; putout( i);/调用putout函数 if(i=tick.len&&k=0) cout<<"natttt暂无可供预定的影片!"<<endl;system("pause");/任意键继续 return;string na;cout<<endl<<"请输入要预订的影片名:"c
33、in>>na; k=0;/再次做标记for(i=0;i<tick.len;i+) if(=na)/找到 k+;/找到的记录数 int j=1; if(j=1) cout<<"n 查找结果如下:"<<endl; cout<<"日-期t时-间t场次t电影名称t票价t折扣t余票"<<endl<<endl; j+; putout( i);/调用putout函数 time_t t; struct tm *tim; t=time(NULL);/获取当前系统时间
34、tim=localtime(&t); int array5=tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min; int s; s=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(s<=0) cout<<"anttt此电影已播放,无法订票!" <<endl;system("pause");/任意键继续 return; cout<<endl&l
35、t;<"tttt当前预订情况" int m,n; seat(i);/调用seat函数 cout<<endl<<"n请输入预订的座位号1100:" int seatnum; cin>>seatnum; if(seatnum>100|seatnum<1) cout<<endl<<"att对不起,无此座位!" system("pause");/任意键继续 return; m=(seatnum-1)/10; n=(seatnum-1)%10; i
36、f(tick.tici.seatmn=0&&tick.tici.rest!=0) cout<<endl<<"n是否以会员权限购买(Y/N):" char a; cin>>a; 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-; cout<<endl<&
37、lt;"tttt您需要支付:"<<tick.tici.seatmn<<"元。"<<endl; cout<<endl<<"tttt您的座位号是:"<<seatnum<<endl; cout<<endl<<"tttt预订成功!" seat(i);/调用seat函数cout<<endl;system("pause");/任意键继续 return; else if(tick.tici.
38、rest=0) cout<<endl<<"atttt对不起,没有票了!" system("pause");/任意键继续 return; else if(tick.tici.seatmn!=0) cout<<endl<<"att对不起,无此座位或此座位已被预订!" system("pause");/任意键继续 return; if(i=tick.len&&k=0)cout<<"natttt没有找到您要预定的电影!"<
39、<endl;system("pause");/任意键继续 return;退票:void ticket:refund()system("cls");/清屏 cout<<"nnntttt退票模块nnn"<<endl; string na; int i;int k=0;/标记修改数量 cout<<"n请输入影片名:"cin>>na;for(i=0;i<tick.len;i+) if(=na)/找到 k+;/找到的记录数 int j=1
40、;if(j=1) cout<<"n 查找结果如下:"<<endl; cout<<"日-期t时-间t场次t电影名称t票价t折扣t余票"<<endl<<endl; j+; putout( i);/调用putout函数 time_t t; struct tm *tim; t=time(NULL);/获取当前系统时间 tim=localtime(&t); int array5=tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim-&g
41、t;tm_hour,tim->tm_min; int r; r=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(r<=0) cout<<"an此电影已播放,不能申请退票!" <<endl;system("pause");/任意键继续 return; elsecout<<endl<<"tttt当前预订情况"int m,n; seat(i);/调用seat函数 cout<<endl<<"n请输入退订
42、的座位号1100:" int seatnum; cin>>seatnum; if(seatnum>100|seatnum<1) cout<<endl<<"att对不起,无此座位!" system("pause");/任意键继续 return; m=(seatnum-1)/10; n=(seatnum-1)%10; if(tick.tici.seatmn!=0) tick.tici.rest+; cout<<endl<<"tttt您要退订座位号是:"<
43、;<seatnum<<endl; cout<<endl<<"tttt退给您:"<<tick.tici.seatmn<<"元。"<<endl; cout<<endl<<"tttt退订成功!"tick.tici.seatmn=0; else cout<<endl<<"attn对不起,此座位未预订,无法退票!n" system("pause");/任意键继续 return; s
44、eat(i);/调用seat函数 cout<<endl; system("pause");/任意键继续 return;if(i=tick.len&&k=0)cout<<"natt没有找到您要退定的电影!"<<endl;system("pause");/任意键继续 return;第五章:设计总结这次的设计,让我体会深刻,总结如下:开始拿到题目,感觉好难,因为在课堂上学到的都是关于c+的理论知识,只是对类、构造函数、析构函数、继承和派生、重载、虚函数等的讲解。都没涉及过实例的解析。写起程
45、序根本不知道从何入手。自己就去图书馆找资料,看了一个上午,慢慢有点眉目,就开始写程序。首先,是数据的储存问题。本来打算只定义一个结构体来装载数据就行,其他的都可以变成全局函数,在主函数里调用即可。但慢慢发现这样以来,就对数据的访问带来诸多不变,还有定义大量的变量。不过网上有大量实例参考,最后还是有定义了一个类,在类里间接地引用结构体里的数据,防止了大量的参数之间的数值传递,增加程序的可读性。在一点就是要大量实践,平常的理论学习,并不代表你会编、会运用。在这次的编写中,特别在构造函数和数据的初始化上没少出错,没法还得回归课本,看了好几遍,才知道怎样修改。最后设计了一个结构体,一个类,在类中定义5
46、个函数,3个全局函数,实现了基本功能。同时增加了一些修改排序功能。第六章:附录#include<iostream>#include<string>#include<conio.h>#include<ctime>#define N 50/可存电影总数 using namespace std;/标准命名空间struct moive /定义moive结构体,存放数据int year;/年int month;/月int day;/日int hour;/时int minute;/分int datetime5;/装时间 ,方便比较 int num;/场次st
47、ring name;/电影名float price;/票价float discount;/折扣int rest;/余票float seat1010;/初始值都为0,只在预定后改变其值;/class ticket/定义ticket类private:moive ticN;/存电影的数组int len;/现有电影数量public:ticket();/构造函数ticket();/析构函数friend void seat(int i);/把seat函数定义为类ticket的友元函数friend void putout(int i);/把putout函数定义为类ticket的友元函数void input(
48、);/录入void show();/显示void search();/查找void sell();/订票void refund();/退票;tick;/构造函数和析构函数的实现ticket:ticket();ticket:ticket();/timecmp函数是用来比较日期时间函数,它需要先把两/个时间装入数组再传进来地址,然后从年月日时分进行比较。int timecmp(int a,int b,int n)int i; for(i=0;i<n;i+)if(ai>bi)return 1;if(ai<bi)return -1;if(i=n)return 0;/seat函数的功能
49、:查看某一座位是否有人void seat(int i) for(int m=0;m<10;m+) cout<<endl<<"t"for(int n=0;n<10;n+) cout<<"" if(tick.tici.seatmn!=0) cout<<"有人" else cout<<"无人" cout<<"" /putout函数实现的功能:输出对象tici的数据void putout(int i) cout<&
50、lt;tick.tici.year<<"-"<<tick.tici.month<<"-"<<tick.tici.day<<"t" cout<<tick.tici.hour<<":"<<tick.tici.minute<<"t" cout<<tick.tici.num<<"t"<<<<"tt" cout<<tick.tici.price<<"t"<<tick.tici.discount<<"t"<<tick.tici.rest<<endl;/录入模块void ticket:input() system("cls");/清屏 char ch;/接受日期中的字符-或: cout&l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版实习生实习期间实习单位培训责任协议3篇
- 写字楼电梯管理协议
- 2025个人货车租赁合同书
- 建筑工程:车库雨棚施工合同范本
- 家政服务伸缩缝安装施工协议
- 2025版劳动合同补充协议范本汇编3篇
- 2024年教育培训机构广告合作合同范本3篇
- 自建房屋建筑设备租赁合同
- 证券投资联合体投标协议模板
- 2025年度爬架租赁及拆除服务合同3篇
- 电子表格表格会计记账凭证模板
- 信阳市光山县2023-2024学年七年级上学期期末数学测试卷(含答案)
- 抽沙船施工方案
- 内蒙古苏尼特右旗铜铅锌矿选矿试验报告
- 诺如病毒检测技术培训
- 物业工程维修作业安全操作指南
- 自考05627职业辅导个人笔记
- 昆山通海中学小升初考试试卷
- 成人高等教育行业营销方案
- 活动义齿(设计)课件
- SA8000-2014社会责任绩效委员会SPT组织架构、职责和定期检讨及评审会议记录
评论
0/150
提交评论