C++课设电影院售票管理系统.docx
《C++课设电影院售票管理系统.docx》由会员分享,可在线阅读,更多相关《C++课设电影院售票管理系统.docx(31页珍藏版)》请在冰点文库上搜索。
C++课设电影院售票管理系统
内蒙古科技大学
本科生《C++程序设计》课程设计说明书
题目:
电影院售票管理系统
学生姓名:
学号:
专业:
计算机科学与技术
班级:
计2010-2班
指导教师:
成绩评定标准
课程设计的验收答辩采取“讲解程序+提问+即时编程”的方式。
考核项目
评价质量
成绩
程序功能完全实现,并能通过答辩。
(60%)
A能完全正确回答提问;
B问题回答的基本意思正确;
C不能回答或回答错误,抽取程序小的功能即时编程,能完成;
D不能回答或回答错误,即时编程无法完成;
程序设计符合面向对象的思想和原则,结构合理(15)
A程序结构层次分明,提取出各个实体类,类的设计合理;
B程序结构层次分明,具有客户类和服务类;
C类的设计基本正确;
D几乎在一个类或者方法中实现了大部分的逻辑,结构不够清晰;
程序的风格(10%)
A遵守编码规范,有良好的风格;
以下问题每出现一项成绩降一个等级:
1.类、方法和变量命名不符合规范;
2.方法和属性前缺少注释;
3.程序没有适当缩进;
设计说明书
(15%)
从以下几方面考核:
1.结构完整
2.图表正确
3.文字通顺
4.版面工整
………………………………………………………………………………………………
………………………………………………………………………
摘要
论文主要描述了电影院售票管理系统,具体可分为以下五章:
问题描述,问题分析,数据模型,算法描述,设计总结。
在第一部分主要阐述了关于电影院售票系统的问题描述,包括所包含的录入信息,浏览信息,查询信息,以及售票和退票功能。
第二部分主要是对电影院售票系统的设计方法和解决方案以及系统的模块划分等。
第三部分是数据模型,叙述系统中数据结构和对类的设计,各功能之间的联系,以及各变量的意义等。
第四部分是算法描述,其中需要详细介绍各功能的功能介绍和演示。
第五部分描述了本次设计的总结。
第一章问题描述
……………………………………………………………………………………。
用C++设计一个电影院售票管理系统,能够提供以下服务:
(1)录入放映信息,格式为:
放映日期
放映时间
场次
电影名称
票价
会员折扣
剩余座位
2011-11-2
10:
30
1
桃姐
30
8
78
2011-11-2
14:
00
2
桃姐
30
8
86
可不定时的增加放映数据。
(2)浏览放映信息,可显示出某日期所有放映信息,如果当前系统时间超过了某电影的放映时间,则显示“此电影放映结束”的提示信息。
(3)查询电影:
可按日期或电影名查询。
(4)售票和退票功能
A:
查询电影名。
当剩余座位数大于0,并且当前系统时间小于放映时间时才能售票,计算会员折扣,售票后自动更新剩余座位数。
B:
退票时,输入退票的电影名和场次,当电影未放映时才能退票,如果以会员折扣购买的电影票,退票按照折扣价退款,退票后自动更新剩余座位数。
第二章问题分析
……………………………………………………………………………………。
二.1阐述对问题的理解、解决问题的方案说明
用C++设计电影院售票系统需要用到类,为了存储数据,需要用remember,也就是需要定义类Film_remember,设计公有成员函数copy(参数)和remembershow()函数,然后在类外实现,公有数据成员设计date3_year,date3_mon,date3_day,time3_hour,time3_min,order3,name3[20],price3,discount3,left_number。
在
(1)录入信息时,依次输入各数据值,然后同copy函数传值,用for循环来存储每次录入的信息。
在
(2)中浏览信息时,需要用到时间函数来判断所录入的电影是否存在,以及是否放映,若存在且放映时间小于系统时间则显示此电影放映结束,若大于系统时间则显示出来。
在(3)中按日期查找同样需要判断是否所查询的日期有要放映的电影,若存在放映的电影则需要判断是否已经放映,若放映了则显示此电影已放映,否则显示出来。
按电影名查询电影时同样需要判断要查询的电影是否存在,若存在则需要判断是否放映结束,若结束则输出结束信息,若还没有放映则显示出来。
在(4)设计购票时需要判断当前是否还有剩余座位,以及是否放映了,若剩余座位还有且还没有放映则显示出来。
否则输出已经放映的信息。
在使用时间函数时,时间函数的年需要加上1900才是当前年数,当使用月时要加上1才是当前月份。
而且在判断日期时需要年月日都得判断,依次用if语句嵌套使用。
……………………………………………………………………………………。
二.2系统功能模块的划分
……………………………………………………………………………………。
分析电影院售票管理系统,大致可分为五大模块(包含7个小模块)。
第一大模块:
录入放映信息。
录入信息模块为其他模块的基础,没有录入放映信息就不可能浏览放映信息,不可能按日期和电影名称查询电影,更不能买票和退票了。
第二大模块:
浏览放映信息。
这个模块中需要用到时间函数,判断是否放映时间大于系统时间,若是就输出放映信息,否则输出已经放映结束的提示信息。
第三大模块:
按日期和电影名查询。
1.按日期查询,需要输入一个日期,若该日期与存储的信息相同则判断系统时间是否大于此日期,若大于则显示提示放映结束的信息,否则输出放映信息供用户查看。
2.按电影名查询,输入一个电影名,首先判断是否存在此电影,若存在继续判断是否系统时间大于放映此电影放映时间,若大于则输出提示放映结束的语句,否则输出放映信息供用户查看。
第四大模块:
售票和退票。
1.售票。
售票时首先查询电影名以及剩余座位数量,若电影不存在以及没有剩余座位就输出提示无法购买的信息。
若以上两者都满足则需要判断是否电影已经放映,若已经放映了也不能售票。
只有要买的电影票存在、没有放映且剩余座位还有才能售票,售票时判断是否是会员,时会员则按折扣售票,否则按原价售票。
2.退票。
退票时需要输入电影名和场次,仍然需要判断两者是否与放映信息匹配,若都满足则还需判断要退票的电影是否已经放映,若已经放映了则无法退票。
若可以退票,还需判断是否是会员,若是会员则按会员购买价钱退还,不是会员则按原价退还。
第五大模块:
退出系统。
当所需的操作结束后,实现用户退出系统功能。
第三章数据模型
三.1相关数据结构的说明
定义了一个类Film_rmember,用来存储记录所录入的信息,并设计它为一个类数组方便存取数据。
为了使主界面在某一操作完成后立即出现,设计了一个while语句体进行条件判断,内部设计了if条件判断执行相应的录入、浏览、查询、购票、退票操作。
三.2类的设计
类Film_rmember设计了公有数据成员和公有成员函数copy(参数),以及显示函数remember_show,把他们设计成类外实现。
从主函数录入信息并传值。
在浏览、查询、购票、退票时都需要类数组来判断条件,调用类数组所存储的数据。
三.3程序结构说明,程序各个部分之间如何协调来完成任务
首先在主函数前定义类Film_rmember,以及成员函数的实现,然后再主函数里定义类数组。
当进行录入信息时,用for循环来存储信息,并同过copy函数实现对数值的传递存储。
当进行浏览信息时需要时间函数的判断,若系统时间超过放映时间则显示放映已经结束,若系统时间小于放映时间则输出所有信息供浏览。
当按日期查询时,同样需要用时间函数判断放映时间是否已经超过系统时间,也需要用for循环依次查找。
当按电影名查询时同样需要判断时间,方法同按日期查询差不多。
当购票与退票时,同样需要判断显示是否已经放映信息。
各部分之间用while语句实现多次循环判断。
三.4全局变量,重要形式参数、局部变量,它们的命名及用途解释
全局变量date_year,date_mon,date_day,time_hour,time_min,order,price,numbername[]
等用于输入数值进行传值。
Choice则用于选择操作。
形参intdate2_year,intdate2_mon,intdate2_day,inttime2_hour,inttime2_min,intorder2,charname2[20],intprice2,intdiscount2,intleft_number2分别表示年、月、日、小时、分钟、场次、电影名,价格,会员折扣,剩余座位数量。
局部变量t1,t2,t3等都分别用于for循环。
变量命名随结构层次而变化,条理清晰。
第四章算法描述
四.1解题算法的设计思路介绍
由于需要判断电影是否放映的条件很多,比如,年,月,日,小时和分钟,而且功能比较全面,所以需要分模块设计。
在每一模块中分别详细的判断年月日,以及小时和分钟。
四.2主要程序代码,加上详细的注释
//头文件:
#include
usingnamespacestd;
#include
#include
#include
//时间函数,time_t是一个在time.h中定义好的结构体。
而tm结构体的原形如下:
struct
{
inttm_sec;//secondsaftertheminute-[0,59]
inttm_min;//minutesafterthehour-[0,59]
inttm_hour;//minutesafterthehour-[0,59]
inttm_mday;//dayofthemonth-[1,31]
inttm_mon;//monthssinceJanuary-[0,11]
inttm_year;//yearssince1900
inttm_wday;//dayssinceSunday-[0,6]
inttm_yday;//dayssinceJanuary1-[0,365]
inttm_isdst;//daylightsavingstimeflag
};
//这是Film_remember类
classFilm_remember
{
public:
intdate3_year;
intdate3_mon;
intdate3_day;
inttime3_hour;
inttime3_min;
intorder3;
charname3[20];
intprice3;
intdiscount3;
intleft_number3;
copy(intdate2_year,intdate2_mon,intdate2_day,inttime2_hour,inttime2_min,intorder2,charname2[20],intprice2,intdiscount2,intleft_number2);//把数值传入记忆函数
remembershow();
};
//类外实现copy函数和remembershow函数
Film_remember:
:
copy(intdate2_year,intdate2_mon,intdate2_day,inttime2_hour,inttime2_min,intorder2,charname2[20],intprice2,intdiscount2,intleft_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<<"放映日期"<<"时间"<<"场次"<<"电影名称"<<"票价"<<"会员折扣"<<"剩余座位数量"<cout<"<}
//在主函数中
while(choice<=6)//用循环来进行不断操作,直至结束操作
{
cout<<"****************请从以下选择操作****************"<cout<<"**1.录入放映信息*"<cout<<"**2.浏览放映信息*"<cout<<"**3.按日期查询电影*"<cout<<"**4.按电影名查询电影*"<cout<<"**5.售票和退票*"<cout<<"**6.退出*"<cout<<"************************************************"<显示如下界面:
//录入放映信息
if(choice==1)
{
rem++;
cout<<"请输入放映日期"<<"时间"<<"场次"<<"电影名称"<<"票价"<<"会员折扣"<<"剩余座位数量"<cin>>date1_year>>date1_mon>>date1_day>>time1_hour>>time1_min>>order1>>name1>>price1>>discount1>>left_number1;
re[rem].copy(date1_year,date1_mon,date1_day,time1_hour,time1_min,order1,name1,price1,discount1,left_number1);//向类remember传值
cout<}
//浏览放映信息:
if(choice==2)//浏览放映信息
{
for(intt1=1;t1<=rem;t1++)//从类的对象数组里依次输出浏览信息
{
if(timenow->tm_year+1900{
re[t1].remembershow();
}
elseif(timenow->tm_year+1900==re[t1].date3_year)//判断在相同时间年份里月份的大小
{
if(timenow->tm_mon+1{
re[t1].remembershow();
}
elseif(timenow->tm_mon+1==re[t1].date3_mon)//判断在相同时间月份里天数的大小
{
if(timenow->tm_mday{
re[t1].remembershow();//若系统时间小于放映时间则显示出放映信息
}
elseif(timenow->tm_mday==re[t1].date3_day)
{
if(timenow->tm_hour{
re[t1].remembershow();
}
elseif(timenow->tm_hour==re[t1].time3_hour)
{
if(timenow->tm_min{
re[t1].remembershow();
}
else
cout<<"电影《"<"<"<}
else
cout<<"电影《"<"<"<}
else
cout<<"电影《"<"<"<}
else
cout<<"电影《"<"<"<}
else
cout<<"电影《"<"<"<cout<}
}
//按日期查询电影:
if(choice==3)//按日期查询电影
{
intseyear,semon,seday,p=0;
cout<<"请输入要查询的日期,年、月、日:
"<cin>>seyear>>semon>>seday;
for(intt2=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();
}
elseif(timenow->tm_mday>re[t2].date3_day)
cout<<"电影《"<"<"<else
re[t2].remembershow();
}
elseif(timenow->tm_mon+1>semon)
{
cout<<"电影《"<"<"<}
else
re[t2].remembershow();
}
elseif(timenow->tm_year+1900>seyear)
{
cout<<"电影《"<"<"<}
else
re[t2].remembershow();
}
}
if(p==0)//判断是否有与此日期相同的放映的电影
{
cout<<"很抱歉!
您所查询的此日的电影不存在!
"<cout<}
}
//按电影名查询电影:
if(choice==4)//按电影名查询电影
{
charsename[10];
intp1=0;
cout<<"请输入要查询的电影名称为:
"<cin>>sename;
for(intt3=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();//输出还没有放映的电影信息
}
elseif(timenow->tm_mday>re[t3].date3_day)
cout<<"电影《"<"<"<else
re[t3].remembershow();
}
elseif(timenow->tm_mon+1>re[t3].date3_mon)
{
cout<<"电影《"<"<"<}
else
re[t3].remembershow();
cout<