当前位置:文档之家› C++课设电影院售票管理系统

C++课设电影院售票管理系统

内蒙古科技大学本科生《C++程序设计》课程设计说明书题目:电影院售票管理系统学生姓名:学号:专业:计算机科学与技术班级:计2010-2班指导教师:成绩评定标准课程设计的验收答辩采取“讲解程序+提问+即时编程”的方式。

目录摘要......................................................................................................... 错误!未定义书签。

第一章问题描述. (1)第二章问题分析 (2)2.1 阐述你对问题的理解、解决问题的方案说明 (2)2.2 系统功能模块的划分 (3)第三章数据模型 (6)3.1 相关数据结构的说明 (6)3.2 类的设计 (6)3.3 程序结构说明,即程序各个部分之间如何协调来完成任务 (6)3.4 全局变量,重要形式参数、局部变量等等,它们的命名及用途解释 (7)第四章算法描述 (8)4.1 解题算法的设计思路介绍 (8)4.2 主要程序代码,加上详细的注释 (8)4.3 画出程序流程图 (36)第五章设计总结 (37)参考文献 (38)………………………………………………………………………………………………………………………………………………………………………摘要论文主要描述了电影院售票管理系统,具体可分为以下五章:问题描述,问题分析, 数据模型, 算法描述,设计总结。

在第一部分主要阐述了关于电影院售票系统的问题描述,包括所包含的录入信息,浏览信息,查询信息,以及售票和退票功能。

第二部分主要是对电影院售票系统的设计方法和解决方案以及系统的模块划分等。

第三部分是数据模型,叙述系统中数据结构和对类的设计,各功能之间的联系,以及各变量的意义等。

第四部分是算法描述,其中需要详细介绍各功能的功能介绍和演示。

第五部分描述了本次设计的总结。

……………………………………………………………………………………。

用C++设计一个电影院售票管理系统,能够提供以下服务:(1)录入放映信息,格式为:可不定时的增加放映数据。

(2) 浏览放映信息,可显示出某日期所有放映信息,如果当前系统时间超过了某电影的放映时间,则显示“此电影放映结束”的提示信息。

(3)查询电影:可按日期或电影名查询。

(4)售票和退票功能A:查询电影名。

当剩余座位数大于0,并且当前系统时间小于放映时间时才能售票,计算会员折扣,售票后自动更新剩余座位数。

B:退票时,输入退票的电影名和场次,当电影未放映时才能退票,如果以会员折扣购买的电影票,退票按照折扣价退款,退票后自动更新剩余座位数。

……………………………………………………………………………………。

2.1 阐述对问题的理解、解决问题的方案说明用C++设计电影院售票系统需要用到类,为了存储数据,需要用remember,也就是需要定义类Film_remember ,设计公有成员函数copy(参数)和remembershow()函数,然后在类外实现,公有数据成员设计date3_year,date3_mon,date3_day,time3_hour,time3_min,order3,name3[20],price3,discount3,l eft_number。

在(1)录入信息时,依次输入各数据值,然后同copy函数传值,用for循环来存储每次录入的信息。

在(2)中浏览信息时,需要用到时间函数来判断所录入的电影是否存在,以及是否放映,若存在且放映时间小于系统时间则显示此电影放映结束,若大于系统时间则显示出来。

在(3)中按日期查找同样需要判断是否所查询的日期有要放映的电影,若存在放映的电影则需要判断是否已经放映,若放映了则显示此电影已放映,否则显示出来。

按电影名查询电影时同样需要判断要查询的电影是否存在,若存在则需要判断是否放映结束,若结束则输出结束信息,若还没有放映则显示出来。

在(4)设计购票时需要判断当前是否还有剩余座位,以及是否放映了,若剩余座位还有且还没有放映则显示出来。

否则输出已经放映的信息。

在使用时间函数时,时间函数的年需要加上1900才是当前年数,当使用月时要加上1才是当前月份。

而且在判断日期时需要年月日都得判断,依次用if语句嵌套使用。

……………………………………………………………………………………。

2.2 系统功能模块的划分……………………………………………………………………………………。

分析电影院售票管理系统,大致可分为五大模块(包含7个小模块)。

第一大模块:录入放映信息。

录入信息模块为其他模块的基础,没有录入放映信息就不可能浏览放映信息,不可能按日期和电影名称查询电影,更不能买票和退票了。

第二大模块:浏览放映信息。

这个模块中需要用到时间函数,判断是否放映时间大于系统时间,若是就输出放映信息,否则输出已经放映结束的提示信息。

第三大模块:按日期和电影名查询。

1.按日期查询,需要输入一个日期,若该日期与存储的信息相同则判断系统时间是否大于此日期,若大于则显示提示放映结束的信息,否则输出放映信息供用户查看。

2.按电影名查询,输入一个电影名,首先判断是否存在此电影,若存在继续判断是否系统时间大于放映此电影放映时间,若大于则输出提示放映结束的语句,否则输出放映信息供用户查看。

第四大模块:售票和退票。

1.售票。

售票时首先查询电影名以及剩余座位数量,若电影不存在以及没有剩余座位就输出提示无法购买的信息。

若以上两者都满足则需要判断是否电影已经放映,若已经放映了也不能售票。

只有要买的电影票存在、没有放映且剩余座位还有才能售票,售票时判断是否是会员,时会员则按折扣售票,否则按原价售票。

2.退票。

退票时需要输入电影名和场次,仍然需要判断两者是否与放映信息匹配,若都满足则还需判断要退票的电影是否已经放映,若已经放映了则无法退票。

若可以退票,还需判断是否是会员,若是会员则按会员购买价钱退还,不是会员则按原价退还。

第五大模块:退出系统。

当所需的操作结束后,实现用户退出系统功能。

第三章数据模型3.1 相关数据结构的说明定义了一个类Film_rmember,用来存储记录所录入的信息,并设计它为一个类数组方便存取数据。

为了使主界面在某一操作完成后立即出现,设计了一个while语句体进行条件判断,内部设计了if条件判断执行相应的录入、浏览、查询、购票、退票操作。

3.2 类的设计类Film_rmember设计了公有数据成员和公有成员函数copy(参数),以及显示函数remember_show,把他们设计成类外实现。

从主函数录入信息并传值。

在浏览、查询、购票、退票时都需要类数组来判断条件,调用类数组所存储的数据。

3.3 程序结构说明,程序各个部分之间如何协调来完成任务首先在主函数前定义类Film_rmember,以及成员函数的实现,然后再主函数里定义类数组。

当进行录入信息时,用for循环来存储信息,并同过copy函数实现对数值的传递存储。

当进行浏览信息时需要时间函数的判断,若系统时间超过放映时间则显示放映已经结束,若系统时间小于放映时间则输出所有信息供浏览。

当按日期查询时,同样需要用时间函数判断放映时间是否已经超过系统时间,也需要用for循环依次查找。

当按电影名查询时同样需要判断时间,方法同按日期查询差不多。

当购票与退票时,同样需要判断显示是否已经放映信息。

各部分之间用while语句实现多次循环判断。

3.4 全局变量,重要形式参数、局部变量,它们的命名及用途解释全局变量date_year,date_mon,date_day,time_hour,time_min,order,price,numbername[] 等用于输入数值进行传值。

Choice则用于选择操作。

形参int date2_year,int date2_mon,int date2_day,int time2_hour,int time2_min,int order2,char name2[20],int price2,int discount2,int left_number2分别表示年、月、日、小时、分钟、场次、电影名,价格,会员折扣,剩余座位数量。

局部变量t1,t2,t3等都分别用于for循环。

变量命名随结构层次而变化,条理清晰。

第四章算法描述4.1 解题算法的设计思路介绍由于需要判断电影是否放映的条件很多,比如,年,月,日,小时和分钟,而且功能比较全面,所以需要分模块设计。

在每一模块中分别详细的判断年月日,以及小时和分钟。

4.2 主要程序代码,加上详细的注释//头文件:#include<iostream>using namespace std;#include<string.h>#include<stdio.h>#include<time.h>//时间函数,time_t是一个在time.h中定义好的结构体。

而tm结构体的原形如下:struct{int tm_sec; // seconds after the minute - [0,59]int tm_min; // minutes after the hour - [0,59]int tm_hour; // minutes after the hour - [0,59]int tm_mday; //day of the month - [1,31]int tm_mon; //months since January - [0,11]int tm_year; //years since 1900int tm_wday; //days since Sunday - [0,6]int tm_yday; //days since January 1 - [0,365]int tm_isdst; //daylight savings time flag};//这是Film_remember类class Film_remember{public:int date3_year;int date3_mon;int date3_day;int time3_hour;int time3_min;int order3;char n ame3[20];int price3;int discount3;int left_number3;copy(int date2_year,int date2_mon,int date2_day,int time2_hour,int time2_min,int order2,char name2[20],int price2,int discount2,int left_number2); //把数值传入记忆函数remembershow();};//类外实现copy函数和remembershow函数Film_remember::copy(int date2_year,int date2_mon,int date2_day,int time2_hour,int time2_min,int order2,char name2[20],int price2,int discount2,int left_number2){date3_year=date2_year;date3_mon=date2_mon;date3_day=date2_day;time3_hour=time2_hour;time3_min=time2_min;order3=order2;strcpy(name3,name2);price3=price2;discount3=discount2;left_number3=left_number2;}Film_remember::remembershow(){cout<<"放映日期"<<"时间"<<"场次"<<"电影名称"<<"票价"<<"会员折扣"<<"剩余座位数量"<<endl;cout<<date3_year<<" 年"<<date3_mon<<"月"<<date3_day<<" 日"<<time3_hour<<":"<<time3_min<<" "<<order3<<" 《"<<name3<<"》"<<price3<<" "<<discount3<<" "<<left_number3<<endl;}//在主函数中while(choice<=6) //用循环来进行不断操作,直至结束操作{cout<<"****************请从以下选择操作****************"<<endl;cout<<"* * 1.录入放映信息*"<<endl;cout<<"* * 2.浏览放映信息*"<<endl;cout<<"* * 3.按日期查询电影*"<<endl;cout<<"* * 4.按电影名查询电影*"<<endl;cout<<"* * 5.售票和退票*"<<endl;cout<<"* * 6.退出*"<<endl;cout<<"************************************************"<<endl; 显示如下界面:// 录入放映信息if(choice==1){rem++;cout<<"请输入放映日期"<<"时间"<<"场次"<<"电影名称"<<"票价"<<"会员折扣"<<"剩余座位数量"<<endl;cin>>date1_year>>date1_mon>>date1_day>>time1_hour>>time1_min>>or der1>>name1>>price1>>discount1>>left_number1;re[rem].copy(date1_year,date1_mon,date1_day,time1_hour,time1_min,order 1,name1,price1,discount1,left_number1); //向类remember传值cout<<endl;}//浏览放映信息:if(choice==2) // 浏览放映信息{for(int t1=1;t1<=rem;t1++) //从类的对象数组里依次输出浏览信息{if(timenow->tm_year+1900<re[t1].date3_year) //判断系统时间中得年份是否小于电影放映时间{re[t1].remembershow();}else if(timenow->tm_year+1900==re[t1].date3_year) //判断在相同时间年份里月份的大小{if(timenow->tm_mon+1<re[t1].date3_mon){re[t1].remembershow();}else if(timenow->tm_mon+1==re[t1].date3_mon) //判断在相同时间月份里天数的大小{if(timenow->tm_mday<re[t1].date3_day){re[t1].remembershow(); //若系统时间小于放映时间则显示出放映信息}else if(timenow->tm_mday==re[t1].date3_day){if(timenow->tm_hour<re[t1].time3_hour){re[t1].remembershow();}else if(timenow->tm_hour==re[t1].time3_hour){if(timenow->tm_min<re[t1].time3_min){re[t1].remembershow();}elsecout<<"电影《"<<re[t1].name3<<"》,场次:"<<re[t1].order3<<" 放映结束!"<<endl; //若系统时间大于放映时间则显示出放映结束信息}elsecout<<"电影《"<<re[t1].name3<<"》,场次:"<<re[t1].order3<<" 放映结束!"<<endl;}elsecout<<"电影《"<<re[t1].name3<<"》,场次:"<<re[t1].order3<<" 放映结束!"<<endl;}elsecout<<"电影《"<<re[t1].name3<<"》,场次:"<<re[t1].order3<<" 放映结束!"<<endl;}elsecout<<"电影《"<<re[t1].name3<<"》,场次:"<<re[t1].order3<<" 放映结束!"<<endl;cout<<endl;}}//按日期查询电影:if(choice==3) //按日期查询电影{int seyear,semon,seday,p=0;cout<<"请输入要查询的日期,年、月、日:"<<endl;cin>>seyear>>semon>>seday;for(int t2=1;t2<=rem;t2++){if(seday == re[t2].date3_day && semon ==re[t2].date3_mon && seyear ==re[t2].date3_year) //判断所查询的日期是否与存储的电影放映日期相同{p++; //判断是否有电影在所查询的日期内放映if(timenow->tm_year+1900 == seyear){if(timenow->tm_mon+1 == semon){if(timenow->tm_mday == seday){re[t2].remembershow();}else if(timenow->tm_mday > re[t2].date3_day)cout<<"电影《"<<re[t2].name3<<"》,场次:"<<re[t2].order3<<" 放映结束!"<<endl;elsere[t2].remembershow();}else if(timenow->tm_mon+1 > semon){cout<<"电影《"<<re[t2].name3<<"》,场次:"<<re[t2].order3<<" 放映结束!"<<endl;}elsere[t2].remembershow();}else if(timenow->tm_year+1900 > seyear){cout<<"电影《"<<re[t2].name3<<"》,场次:"<<re[t2].order3<<" 放映结束!"<<endl;}elsere[t2].remembershow();}}if(p==0) //判断是否有与此日期相同的放映的电影{cout<<"很抱歉!您所查询的此日的电影不存在!"<<endl;cout<<endl;}}//按电影名查询电影:if(choice==4) // 按电影名查询电影{char sename[10];int p1=0;cout<<"请输入要查询的电影名称为:"<<endl;cin>>sename;for(int t3=1;t3<=rem;t3++){if(strcmp(sename,re[t3].name3)==0) //判断所查询的电影名是否存在于放映信息中{p1++;if(timenow->tm_year+1900 == re[t3].date3_year) //判断所查询的电影是否已经放映结束,分别与系统时间比较年月日{if(timenow->tm_mon+1 == re[t3].date3_mon){if(timenow->tm_mday == re[t3].date3_day){re[t3].remembershow(); //输出还没有放映的电影信息}else if(timenow->tm_mday > re[t3].date3_day)cout<<"电影《"<<re[t3].name3<<"》,场次:"<<re[t3].order3<<" 放映结束!"<<endl; //输出此电影放映结束的信息elsere[t3].remembershow();}else if(timenow->tm_mon+1 > re[t3].date3_mon){cout<<"电影《"<<re[t3].name3<<"》,场次:"<<re[t3].order3<<" 放映结束!"<<endl;}elsere[t3].remembershow();cout<<endl;}else if(timenow->tm_year+1900 > re[t3].date3_year){cout<<"电影《"<<re[t3].name3<<"》,场次:"<<re[t3].order3<<" 放映结束!"<<endl;}elsere[t3].remembershow();}}if(p1==0) //判断所查询的电影是否存在于放映列表{cout<<"很抱歉!您所查询的电影不存在!"<<endl;cout<<endl;}}//售票:if(choice==5) // 售票和退票{int choice1;cout<<"若买票请选择1,若退票请选择2:"<<endl;cin>>choice1;if(choice1==1) //进行买票操作{char m[10] ;cout<<"请输入您要购买的电影票:"<<endl;cin>>m;int q=0;for(int n=1;n<=rem;n++){if(strcmp(m,re[n].name3)==0) //判断所要看的电影是否待放映{q++;if(re[n].left_number3>0) //判断是否还有座位{if(timenow->tm_year+1900 < re[n].date3_year) //判断系统年是否小于待放电影日期{re[n].remembershow();char fff;cout<<"您是否是会员?y/n:"<<endl; //判断是否是会员cin>>fff;if(fff=='y'||fff=='Y')cout<<"您所购买的电影票价格为:"<<re[n].price3*re[n].discount3/10<<endl;elsecout<<"您所购买的电影票价格为:"<<re[n].price3<<endl;re[n].left_number3--;}else if(timenow->tm_year+1900==re[n].date3_year){if(timenow->tm_mon+1<re[n].date3_mon){re[n].remembershow();char fff;cout<<"您是否是会员?y/n:"<<endl;//判断是否是会员cin>>fff;if(fff=='y'||fff=='Y')cout<<"您所购买的电影票价格为:"<<re[n].price3*re[n].discount3/10<<endl;elsecout<<"您所购买的电影票价格为:"<<re[n].price3<<endl;re[n].left_number3--;}else if(timenow->tm_mon+1==re[n].date3_mon){if(timenow->tm_mday<re[n].date3_day){re[n].remembershow();char fff;cout<<"您是否是会员?y/n:"<<endl;//判断是否是会员cin>>fff;if(fff=='y'||fff=='Y')cout<<"您所购买的电影票价格为:"<<re[n].price3*re[n].discount3/10<<endl;elsecout<<"您所购买的电影票价格为:"<<re[n].price3<<endl;re[n].left_number3--;}else if(timenow->tm_mday==re[n].date3_day){if(timenow->tm_hour<re[n].time3_hour){re[n].remembershow();char fff;cout<<"您是否是会员?y/n:"<<endl;//判断是否是会员cin>>fff;if(fff=='y'||fff=='Y')cout<<"您所购买的电影票价格为:"<<re[n].price3*re[n].discount3/10<<endl;elsecout<<"您所购买的电影票价格为:"<<re[n].price3<<endl;re[n].left_number3--;}elseif(timenow->tm_hour==re[n].time3_hour){if(timenow->tm_min<re[n].time3_min){re[n].remembershow();char fff;cout<<"您是否是会员?y/n:"<<endl; //判断是否是会员cin>>fff;if(fff=='y'||fff=='Y')cout<<"您所购买的电影票价格为:"<<re[n].price3*re[n].discount3/10<<endl; //时会员就按会员折扣买票elsecout<<"您所购买的电影票价格为:"<<re[n].price3<<endl; //不是会员就按原价买票re[n].left_number3--;}elsecout<<"很抱歉,电影《"<<re[n].name3<<"》,场次"<<re[n].order3<<" 已放映结束!"<<endl;//要购买的电影票已经放映结束,无法购买}elsecout<<"很抱歉,电影《"<<re[n].name3<<"》,场次"<<re[n].order3<<" 已放映结束!"<<endl;}elsecout<<"很抱歉,电影《"<<re[n].name3<<"》,场次"<<re[n].order3<<" 已放映结束!"<<endl;}elsecout<<"很抱歉,电影《"<<re[n].name3<<"》,场次"<<re[n].order3<<" 已放映结束!"<<endl;}elsecout<<"很抱歉,电影《"<<re[n].name3<<"》,场次"<<re[n].order3<<" 已放映结束!"<<endl;cout<<endl;}elsecout<<"很抱歉,票已卖完!"<<endl;}}if(q==0) //要购买的电影票不存在{cout<<"很抱歉,您所要购买的电影票不存在!"<<endl;}}//退票:if(choice1==2) //进行退票操作{char m1[10];int order5;cout<<"请输入退票的电影名和场次:"<<endl;cin>>m1;cin>>order5;int t4=0; //计数for(int n1=1;n1<=rem;n1++){char ffff;if(strcmp(m1,re[n1].name3)==0 && re[n1].order3 == order5) //判断退票的电影名和场次是否正确{t4++;if(timenow->tm_year+1900 < re[n1].date3_year && re[n1].order3 == order5) //判断系统年是否小于待放电影日期以及场次是否正确{cout<<"是否是会员?y/n:"<<endl; //判断是否是会员cin>>ffff;if(ffff=='y'||ffff=='Y')cout<<"退票成功!退还给您钱:"<<re[n1].price3*re[n1].discount3/10<<endl;elsecout<<"退票成功!退还给您钱:"<<re[n1].price3<<endl;re[n1].left_number3++;}else if(timenow->tm_year+1900 == re[n1].date3_year && re[n1].order3 == order5){if(timenow->tm_mon+1 < re[n1].date3_mon && re[n1].order3 == order5){cout<<"是否是会员?y/n:"<<endl; //判断是否是会员cin>>ffff;if(ffff=='y'||ffff=='Y')cout<<"退票成功!退还给您钱:"<<re[n1].price3*re[n1].discount3/10<<endl;elsecout<<"退票成功!退还给您钱:"<<re[n1].price3<<endl;re[n1].left_number3++;}else if(timenow->tm_mon+1 == re[n1].date3_mon && re[n1].order3 == order5){if(timenow->tm_mday < re[n1].date3_day && re[n1].order3 == order5){cout<<"是否是会员?y/n:"<<endl; //判断是否是会员cin>>ffff;if(ffff=='y'||ffff=='Y')cout<<"退票成功!退还给您钱:"<<re[n1].price3*re[n1].discount3/10<<endl;elsecout<<"退票成功!退还给您钱:"<<re[n1].price3<<endl;re[n1].left_number3++;}else if(timenow->tm_mday == re[n1].date3_day && re[n1].order3 == order5){if(timenow->tm_hour < re[n1].time3_hour && re[n1].order3 == order5){cout<<"是否是会员?y/n:"<<endl; //判断是否是会员cin>>ffff;if(ffff=='y'||ffff=='Y')cout<<"退票成功!退还给您钱:"<<re[n1].price3*re[n1].discount3/10<<endl;elsecout<<"退票成功!退还给您钱:"<<re[n1].price3<<endl;re[n1].left_number3++;}else if(timenow->tm_hour == re[n1].time3_hour && re[n1].order3 == order5){if(timenow->tm_min < re[n1].time3_min && re[n1].order3 == order5){cout<<"是否是会员?y/n:"<<endl;//判断是否是会员cin>>ffff;if(ffff=='y'||ffff=='Y')cout<<"退票成功!退还给您钱:"<<re[n1].price3*re[n1].discount3/10<<endl; //是会员就按会员购买价退钱elsecout<<"退票成功!退还给您钱:"<<re[n1].price3<<endl; //不是会员就按原价退钱re[n1].left_number3++;}elsecout<<"很抱歉,此电影已放映,票无法退还!"<<endl;}elsecout<<"很抱歉,此电影已放映,票无法退还!"<<endl;}elsecout<<"很抱歉,此电影已放映,票无法退还!"<<endl;}elsecout<<"很抱歉,此电影已放映,票无法退还!"<<endl;}elsecout<<"很抱歉,此电影已放映,票无法退还!"<<endl;cout<<endl;}}if(t4==0)cout<<"很抱歉,您的电影票不是此电影院发放的!"<<endl;}elsecout<<"您的输入有误,请重新选择!"<<endl;}//退出系统:else //退出系统{cout<<"************************************************"<<endl;cout<<"*************谢谢使用此系统,再见!*************"<<endl;cout<<"************************************************"<<endl;break;}4.3 画出程序流程图第五章设计总结总结设计及编程中的亮点,分析可能存在的不足之处及可以进一步改善的方法,本次项目任务中值得吸取的经验教训等。

相关主题