内蒙古科技大学
课程
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
论文
题 目:C++课程设计
——电影院售票管理系统
学生姓名:张雪婉
学 号:1167119224
专 业:通信工程
班 级:2011-2
指导教师:郝斌
【摘要】 1
第一章 问题描述
1.1 电影院售票管理系统的设计
第二章 问题分析
2.1 阐述你对问题的理解、解决问题的方案说明
2.2 系统功能模块的划分
第三章 数据模型
3.1 相关数据结构的说明类的设计
3.2 程序结构说明,即程序各个部分之间如何协调来完成任务
第四章 算法描述
4.1 解题算法的设计思路介绍
4.2 主要程序代码,加上详细的注释
第五章 设计总结
第六章 附录
【摘要】
电影院售票管理系统实现的功能:
1、录入信息:且可不定时增加数据。并根据放映时间排序。
2、浏览信息:可显示出某日期所有放映信息,如果当前系统时间超过了某电影的放映时间,则显示“此电影放映结束”的提示信息。
3、查询电影:可按日期或电影名查询。并显示目标的详细信息。
4、售票:售票即为影片预定。可根据输出的可预订信息选择订票,如果该影片已放映,则提示不能订票,如果售票成功,自动跟新座位数。
5、退票:影片退订即退票。根据放映时间和系统时间来判断是否能进行退票,并自动更新座位数。
其他参数:程序中定义了一个moive结构和一个ticket类,在结构体和类外还定义了seat()和putout()两个函数。moive结构用来存放电影的数据(属性)信息;ticket类实现管理moive结构体里面的数据和系统功能模块;seat()和putout()函数用来辅助结构体和类,简化程序。
第一章: 问题描述
1.1、设计资料及参数
用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.2、设计要求及成果
根据系统功能要求,可以将问题解决分为以下步骤:
(1)分析系统中的各个实体之间的关系及其属性和行为;
(2)根据问题描述,设计系统的类层次;
(3)完成类层次中各个类的描述(包括属性和方法);
(4)完成类中各个成员函数的定义;
(5)完成系统的应用模块;
(6)功能调试;
(7)提交课程设计报告:完成系统总结报告以及系统使用说明书
第二章:问题分析
2.1、对问题理解的阐述、解决方案的说明
由设计题目知电影院售票管理系统主要由1、录入(input)2、显示(show)3、查询(search)4、售票(sell)5、退票(refund)五个模块组成。
对整个系统进行功能分析不难发现,电影院管理系统可以对所有数据的信息进行操作,比如:录入(input)、显示(show)、查询(search)、售票(sell)和退票(refund)。所以需要设计一个moive结构体和ticket类来实现对基本数据的储存和模块功能的实现。考虑到程序实现程序的尽量简洁明了,又增加了时间比较函数(timecmp)、座位判断函数(seat)和信息输出函数(putout)三个函数,对程序实现一定程度的简化。
2.2、系统的模块功能流程图如下:
运行程序时,需要先输入数据。并定义了时间的输入格式。如(2013-6-21 22:00)。
显示数据时,会先跟系统时间比较,如果小于系统当前时间,则输出提示“已播放”。
查找时满足要求的按名字查找和按日期查找。找到之后与系统时间比较输出提示,如果没找到,输出提示。
查询时分为按电影名和日期两种查询功能。查询时将会出现界面来供操作者选择。
订票函数中会先给出可预订的提示,这样可以更有效订票。输入之后会先检查是否播放,若播放则给出提示,退出。若未找到,则同样给出提示。如果票卖光了,仍然有提示,如果电影达到预定要求,则先给出现有座位的预订情况,方便用户高效率订票。当客户输入一座位时程序会判断这个作为是否被预订,如果是,则给出提示;如果no就输出用户需要支付的金额,并
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
在座位号对应的数组中。方便退票时退款。订票成功后还会输出现有座位的信息方便核实。
退票时,操作者要先输入电影名,若电影名不存在或时间以过,会提示“输入错误”或“电影已播放,无法退票”。若在预定的电影中,还会要求输入退订的座位号,以便进一步确认是否真正该电影。若两道确认都成功通过,就会输出要腿还的金额。
其中订票和退票函数都是用大篇幅(一两百行)来构建起强大而有完善的提示功能,已完成快捷而又便利操作。
第三章:数据模型
3.1相关数据结构和类的说明
struct moive //定义moive结构体,存放数据
{
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];//初始值都为0,只在预定后改变其值
};
class ticket//定义ticket类
{
private:
moive tic[N];//存电影数据的数组
int len;//现有电影数量
public:
ticket();//构造函数
~ticket();//析构函数
friend void seat(int i);//把seat函数定义为类ticket的友元函数
friend void putout(int i);//把putout函数定义为类ticket的友元函数
void input();//录入
void show();//显示
void search();//查找
void sell();//订票
void refund();//退票;
}tick;
在类中把seat()和putout()函数定义为类的友元函数,实现类外的函数访问类内的成员,这样可以源代码的篇章幅度,实现在一定程度上简化程序。
私有数据成员moive tic[N],便于操作数据。
数据组织结构图:
3.2 程序结构说明,即程序各个部分之间如何协调来完成任务
程序的主要实现过程是在ticket类 中定义的成员函数和友元函数来实现完成,并且在类外实现。这样方便了对数据进行操作。并且定义了一个全局的比较函数timecmp,可以比较两个时间数组的大小;函数seat实现判断某一座位是否被预定;函数putout实现对电影信息的输出。这三个函数在程序中用途很广泛,在整个程序中多次有时间的比较,座位的检索,电影的信息的输出,当用到某一函数时,直接在模块调用即可,不必多次编写,实现程序的简化。
其中程序总很多代码是重复用到的,但是没有写成函数来调用有两点原因。首先如果写成函数调用的话会降低程序的可读性,其次写成函数的话,代码就固定下来了,使得程序不够灵活。所以在程序不必要的地方,就用代码来代替函数调用。举个例子说,在修改,删除,订票,退票中都会用到按电影名查找。可是没有单独把按电影名查找单独写成函数来调用,是因为在按电影名查找会输出很多详细的电影信息和提示信息。这样也不便于调用函数。
第四章:算法的描述
4.1 解题算法的设计思路介绍
timecmp函数是用来比较日期时间函数,它需要先把两个时间装入数组再传进来地址,然后从年月日时分进行比较。如果有大小区分,直接返回。
int timecmp(int a[],int b[],int n)
{
int i;
for(i=0;i
b[i])
{
return 1;
}
if(a[i]>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 :system("pause"); return;//任意键继续
}
}
录入电影信息:
void ticket::input()
{
system("cls");//清屏
char ch;//接受日期中的字符-或:
cout<<"\n\n\n\t\t\t\t《录入模块》\n\n\n"<>tick.tic[i].year>>ch>>tick.tic[i].month>>ch>>tick.tic[i].day;
cout<<"\n请输入放映时间如(12:30):";
cin>>tick.tic[i].hour;
cin>>ch;
cin>>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请输入场次:";
cin>>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.tic[i].seat[m][n]=0;
}
tick.len++;//个数加1
cout<>ch;
if(ch=='y' || ch=='Y' || ch=='n' || ch=='N')
break;
else
cout<<"输入错误请重新输入:";
}
if(ch=='n' || ch=='N')
break;
}
}
显示电影信息:
void ticket::show()
{
system("cls");//清屏
cout<<"\n\n\n\t\t\t\t《显示模块》\n\n\n"<tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
int r;
for(int i=0;i>flag;
if(flag!='1'&&flag!='2')
{
cout<<"\n\a\t\t\t\t选择有误!请选择正确的查找模式。"<>na;
for(i=0;itm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
int r;
r=timecmp(tick.tic[i].datetime,array,5);//与系统时间比较
if(r<=0)
{
cout<<"\a(已播放!)" <>temp[0]>>ch>>temp[1]>>ch>>temp[2];
int j=1;
for(i=0;itm_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);//与系统时间比较
if(s<=0)
{
cout<<"\a(已播放!)" <tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
int r,i;
int k=0;//标记可供预定的影片数量
for(i=0;i0)
{
k++;
putout( i);//调用putout函数
}
}
if(i==tick.len&&k==0)
{ cout<<"\n\a\t\t\t\t暂无可供预定的影片!"<>na;
k=0;//再次做标记
for(i=0;itm_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);//与系统时间比较
if(s<=0)
{ cout<<"\a\n\t\t\t此电影已播放,无法订票!" <>seatnum;
if(seatnum>100||seatnum<1)
{ cout<>a;
if(a!='N'&&a!='n')
{
tick.tic[i].seat[m][n]=tick.tic[i].price*tick.tic[i].discount/10;
}
else
{ tick.tic[i].seat[m][n]=tick.tic[i].price;
}
tick.tic[i].rest--;
cout<>na;
for(i=0;itm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
int r;
r=timecmp(tick.tic[i].datetime,array,5);//与系统时间比较
if(r<=0)
{
cout<<"\a\n此电影已播放,不能申请退票!" <>seatnum;
if(seatnum>100||seatnum<1)
{
cout<
#include
#include
#include
#define N 50//可存电影总数
using namespace std;//
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
命名空间
struct moive //定义moive结构体,存放数据
{
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];//初始值都为0,只在预定后改变其值
};
//
class ticket//定义ticket类
{
private:
moive tic[N];//存电影的数组
int len;//现有电影数量
public:
ticket();//构造函数
~ticket();//析构函数
friend void seat(int i);//把seat函数定义为类ticket的友元函数
friend void putout(int i);//把putout函数定义为类ticket的友元函数
void input();//录入
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;ib[i])
{
return 1;
}
if(a[i]>tick.tic[i].year>>ch>>tick.tic[i].month>>ch>>tick.tic[i].day;
cout<<"\n请输入放映时间如(12:30):";
cin>>tick.tic[i].hour;
cin>>ch;
cin>>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请输入场次:";
cin>>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.tic[i].seat[m][n]=0;
}
tick.len++;//个数加1
cout<>ch;
if(ch=='y' || ch=='Y' || ch=='n' || ch=='N')
break;
else
cout<<"输入错误请重新输入:";
}
if(ch=='n' || ch=='N')
break;
}
}
//显示模块
void ticket::show()
{
system("cls");//清屏
cout<<"\n\n\n\t\t\t\t《显示模块》\n\n\n"<tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
int r;
for(int i=0;i>flag;
if(flag!='1'&&flag!='2')
{
cout<<"\n\a\t\t\t\t选择有误!请选择正确的查找模式。"<>na;
for(i=0;itm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
int r;
r=timecmp(tick.tic[i].datetime,array,5);//与系统时间比较
if(r<=0)
{
cout<<"\a(已播放!)" <>temp[0]>>ch>>temp[1]>>ch>>temp[2];
int j=1;
for(i=0;itm_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);//与系统时间比较
if(s<=0)
{
cout<<"\a(已播放!)" <tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
int r,i;
int k=0;//标记可供预定的影片数量
for(i=0;i0)
{
k++;
putout( i);//调用putout函数
}
}
if(i==tick.len&&k==0)
{
cout<<"\n\a\t\t\t\t暂无可供预定的影片!"<>na;
k=0;//再次做标记
for(i=0;itm_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);//与系统时间比较
if(s<=0)
{
cout<<"\a\n\t\t\t此电影已播放,无法订票!" <>seatnum;
if(seatnum>100||seatnum<1)
{
cout<>a;
if(a!='N'&&a!='n')
{
tick.tic[i].seat[m][n]=tick.tic[i].price*tick.tic[i].discount/10;
}
else
{
tick.tic[i].seat[m][n]=tick.tic[i].price;
}
tick.tic[i].rest--;
cout<>na;
for(i=0;itm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
int r;
r=timecmp(tick.tic[i].datetime,array,5);//与系统时间比较
if(r<=0)
{
cout<<"\a\n此电影已播放,不能申请退票!" <>seatnum;
if(seatnum>100||seatnum<1)
{ cout<>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 :system("pause"); return;//任意键继续
}
}
}
参考文献
1、 C++程序设计案例精编 孔令德 叶瑶 杨慧炯 编著 中国铁道出版社
2、 张毅. 铸造工艺CAD及其应用[M]. 北京:机械工业出版社.1994,14-15.