1、 内蒙古科技大学 课程设计论文题 目:C+课程设计电影院售票管理系统学生姓名:张雪婉学 号:专 业:通信工程 班 级:-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类实现管理moive结构体里面数据和系统功效模块;seat()和
3、putout()函数用来辅助结构体和类,简化程序。第一章: 问题描述1.1、设计资料及参数用C+设计一个系统,能提供下列服务:(1)录入放映信息,格式为:放映日期放映时间场次电影名称票价会员折扣剩下座位-11-210:301桃姐30878-11-214:002桃姐30886可不定时地增加放映数据。(2)浏览放映信息,可显示出某日期全部放映信息,假如目前系统时间超出了某电影放映时间,则显示“此电影放映结束”提醒信息。(3)查询电影:可按日期或电影名查询。 (4)售票和退票功效A:查询电影名。当剩下座位数大于0,而且目前系统时间小于放映时间时才能售票,计算会员折扣,售票后自动更新剩下座位数。 B:
4、退票时,输入退票电影名和场次,当电影未放映时才能退票,假如以会员折扣购置电影票,退票根据折扣价退款,退票后自动更新剩下座位数。1.2、设计要求及结果依据系统功效要求,能够将问题处理分为以下步骤:(1)分析系统中各个实体之间关系及其属性和行为;(2)依据问题描述,设计系统类层次;(3)完成类层次中各个类描述(包含属性和方法);(4)完成类中各个组员函数定义;(5)完成系统应用模块;(6)功效调试;(7)提交课程设计汇报:完成系统总结汇报和系统使用说明书第二章:问题分析2.1、对问题了解叙述、处理方案说明由设计题目知电影院售票管理系统关键由1、录入(input)2、显示(show)3、查询(sea
5、rch)4、售票(sell)5、退票(refund)五个模块组成。对整个系统进行功效分析不难发觉,电影院管理系统能够对全部数据信息进行操作,比如:录入(input)、显示(show)、查询(search)、售票(sell)和退票(refund)。所以需要设计一个moive结构体和ticket类来实现对基础数据储存和模块功效实现。考虑到程序实现程序尽可能简练明了,又增加了时间比较函数(timecmp)、座位判定函数(seat)和信息输出函数(putout)三个函数,对程序实现一定程度简化。2.2、系统模块功效步骤图以下:运行程序时,需要先输入数据。并定义了时间输入格式。如(-6-21 22:00
6、)。显示数据时,会先跟系统时间比较,假如小于系统目前时间,则输出提醒“已播放”。查找时满足要求按名字查找和按日期查找。找到以后和系统时间比较输出提醒,假如没找到,输出提醒。查询时分为按电影名和日期两种查询功效。查询时将会出现界面来供操作者选择。订票函数中会先给出可预订提醒,这么能够更有效订票。输入以后会先检验是否播放,若播放则给出提醒,退出。若未找到,则一样给出提醒。假如票卖光了,仍然有提醒,假如电影达成预定要求,则先给出现有座位预订情况,方便用户高效率订票。当用户输入一座位时程序会判定这个作为是否被预订,假如是,则给出提醒;假如no就输出用户需要支付金额,并统计在座位号对应数组中。方便退票时
7、退款。订票成功后还会输出现有座位信息方便核实。退票时,操作者要先输入电影名,若电影名不存在或时间以过,会提醒“输入错误”或“电影已播放,无法退票”。若在预定电影中,还会要求输入退订座位号,方便深入确定是否真正该电影。若两道确定全部成功经过,就会输出要腿还金额。其中订票和退票函数全部是用大篇幅(一两百行)来构建起强大而有完善提醒功效,已完成快捷而又便利操作。第三章:数据模型3.1相关数据结构和类说明struct moive /定义moive结构体,存放数据int year;/年int month;/月int day;/日int hour;/时int minute;/分int datetime5;
8、/装电影放映时间,方便比较和系统时间比较 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 i);/把
9、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;ibi)return 1;if(aibi)return -1;if(i=n)return 0;Seat函数作为检索某一座位是否已被预订,因为seatmn=0,即初始化全部为0。二当该座位被预订后就会给予座位号,所以用两层for循环,把全部座位全部检索了一遍。在输出,
12、就一下子看出那些座位被预定,那些没有。因为seat函数是类外函数,不能直接操作类ticket组员,所以要在类中写入“friend voidseat(int i);”即定义为类友元函数。若不加,编译将会犯错。void seat(int i) for(int m=0;m10;m+) coutendlt;for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有些人; else cout无人; cout; putout函数是便于把电影属性(数据信息)输出,因为tic是类中数据组员且又是结构体moive类型变量,故要用两层引用。但putout函数也是
13、全局类外函数,要想访问类ticket中组员,也需把其定义为类友元函数。不然编译阶段会犯错。void putout(int i) couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; couttick.tici.numttick.tici.namett; couttick.tici.pricettick.tici.discountttick.tici.restendl;4.2 关键程序代码和运行结果图主函数,即选择菜单:char as; while(1) coutntttt
14、欢迎进入管理系统nn; coutntttt1.录入影片; coutntttt2.显示影片; coutntttt3.查找影片; coutntttt4.售票; coutntttt5.退票endl; coutas; 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 :system(pause); return;/任意键继续 录入电影信息:void t
15、icket: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.month; tick.tici.datetime2=tick.tici
16、.day;tick.tici.datetime3=tick.tici.hour;tick.tici.datetime4=tick.tici.minute; couttick.tici.num; couttick.tici.name; 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+;/个数加1 coutendl; coutch; if(ch=y | ch=Y | ch=n | c
17、h=N) break; else cout输入错误请重新输入:; if(ch=n | ch=N) break; 显示电影信息:void ticket:show()system(cls);/清屏coutnnntttt显示模块nnnendl;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,
18、5);/和系统时间比较 ,返回值给r putout( i);/调用putout函数 if(r=0) couta(已播放!) endl; else coutendl; 查询电影:void ticket:search()char flag;int i;int k=0;/标识找到统计 system(cls);/清屏 coutnnntttt查找模块nnnendl; while(flag!=1&flag!=2) coutendltttt1.按影片名查找; coutendltttt2.按日期查找; coutendlflag; if(flag!=1&flag!=2) coutnatttt选择有误!请选择正确
19、查找模式。endl; 【按电影名查询】if(flag=1) string na;int j=1;coutna;for(i=0;itick.len;i+)if(tick.tici.name=na)/找到 k+;/找到统计数 if(j=1) cout n 查找结果以下: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);/和系统时间比较 if(r=0) couta
20、(已播放!) endl; else coutendl; coutendltttt目前预订情况; seat(i);/调用seat函数if(j!=1)coutendl;system(pause);/任意键继续 return;if(i=tick.len&k=0)coutnatttt未找到结果!endl;system(pause);/任意键继续 return;【按日期查询】elsechar ch;int temp3; couttemp0chtemp1chtemp2;int j=1;for(i=0;itick.len;i+)/遍历 if(timecmp(tick.tici.datetime,temp,3
21、)=0)/找到 k+;/找到统计数 if(j=1) coutn 查找结果以下: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 s; s=timecmp(tick.tici.datetime,array,5);/和系统时间比较 if(s=0) couta(已播放!) endl; else coutendl; coutendltttt目前预订情况; seat(i);/调用seat函数 coutendl;if(j!=1)coutendl;sy
22、stem(pause);/任意键继续 return;if(i=tick.len&k=0)coutnatttt未找到结果!endl;system(pause);/任意键继续 return;售票:void ticket:sell()system(cls);/清屏 coutnnntttt售票模块nnnendl; 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;/标识可供预定影片数量 fo
23、r(i=0;i0) k+; putout( i);/调用putout函数 if(i=tick.len&k=0) coutnatttt暂无可供预定影片!endl;system(pause);/任意键继续 return;string na;coutendlna; k=0;/再次做标识for(i=0;itick.len;i+) if(tick.tici.name=na)/找到 k+;/找到统计数 int j=1; if(j=1) coutn 查找结果以下:endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_md
24、ay,tim-tm_hour,tim-tm_min; int s; s=timecmp(tick.tici.datetime,array,5);/和系统时间比较 if(s=0) coutanttt此电影已播放,无法订票! endl;system(pause);/任意键继续 return; coutendltttt目前预订情况; int m,n; seat(i);/调用seat函数 coutendlseatnum; if(seatnum100|seatnum1) coutendlatt对不起,无此座位!; system(pause);/任意键继续 return; m=(seatnum-1)/10
25、; 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预订成功!; seat(i);/调
26、用seat函数coutendl;system(pause);/任意键继续 return; else if(tick.tici.rest=0) coutendlatttt对不起,没有票了!; system(pause);/任意键继续 return; else if(tick.tici.seatmn!=0) coutendlatt对不起,无此座位或此座位已被预订!; system(pause);/任意键继续 return; if(i=tick.len&k=0)coutnatttt没有找到您要预定电影!endl;system(pause);/任意键继续 return;退票:void ticket:r
27、efund()system(cls);/清屏 coutnnntttt退票模块nnnendl; string na; int i;int k=0;/标识修改数量 coutna;for(i=0;itick.len;i+) if(tick.tici.name=na)/找到 k+;/找到统计数 int j=1;if(j=1) coutn 查找结果以下: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);/和系统时间比较 if(r=0) coutan此电影已播放,不能申请退票! endl;system(pause);/任意键继续 return; elsecoutendltttt目前预订情况;int m,n; seat(i);/调用seat函数 coutendlseatnum; if(seatnum100|seatnum1) coutendlatt对不起,无此座位!; system(pause);/任意键继续 return; m=(seatnum-1)/10; n=(seatnum-1)%10;
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100