高超群修复的.docx
《高超群修复的.docx》由会员分享,可在线阅读,更多相关《高超群修复的.docx(38页珍藏版)》请在冰豆网上搜索。
高超群修复的
《C++程序设计》
课程设计说明书
题目
电影院售票管理系统的设计
学号
******
姓名
****
指导教师
孙涛
日期
2014-2015春学期第19周
内蒙古科技大学课程设计任务书
课程名称
C++语言课程设计
设计题目
电影院售票管理系统的设计
指导教师
孙涛
时间
2013-2014春学期第18、19周
一、教学要求
1.巩固和加深学生对C++语言课程的基本知识的理解和掌握
2.掌握C++语言编程和程序调试的基本技能
3.利用C++语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用C++语言解决实际问题的能力
二、设计资料及参数
用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)根据问题描述,设计系统的类层次;
(3)完成类层次中各个类的描述(包括属性和方法);
(4)完成类中各个成员函数的定义;
(5)完成系统的应用模块;
(6)功能调试;
(7)提交课程设计报告:
完成系统总结报告以及系统使用说明书
目录
第1章需求分析4
第2章总体设计5
第3章类的设计5
3.1ticket类的设计5
第4章详细设计6
4.1工程视图6
4.2类图视图7
4.3函数的调用关系7
4.4主要算法8
第5章测试12
第6章总结18
附录:
程序代码19
第1章需求分析
用C++设计一个系统,能提供下列服务:
1.录入放映信息,格式为:
放映日期放映时间场次电影名称票价会员折扣剩余座位
2011-11-210:
301桃姐30878
2011-11-214:
002桃姐30886
可不定时地增加放映数据。
(2)浏览放映信息,可显示出某日期所有放映信息,如果当前系统时间超过了某电影的放映时间,则显示“此电影放映结束”的提示信息。
(3)查询电影:
可按日期或电影名查询。
(4)售票和退票功能
(1:
查询电影名。
当剩余座位数大于0,并且当前系统时间小于放映时间时才能售票,计算会员折扣,售票后自动更新剩余座位数。
B:
退票时,输入退票的电影名和场次,当电影未放映时才能退票,如果以会员折扣购买的电影票,退票按照折扣价退款,退票后自动更新剩余座位数。
功能结构图如图1.1所示:
图1.1总体功能结构图
第2章总体设计
由设计题目知电影院售票管理系统主要可分为两个大模块:
1.管理界面
2.顾客界面。
根据题意,管理界面和售票界面的权限是不一样的,管理界面具有管理员权限,可以对所有数据的信息进行操作,比如:
电影信息录入(input)、电影信息显示(show)、查找(search)。
顾客界面则只可以进行售票(sell)和退票(refund)操作。
所以需要设计一个manager和customer函数来区分权限的函数。
所以,manager里包含了需要实现的input、show、search等函数来满足管理要求的功能。
Customer函数则包含sell和refund。
运行程序时,需要先输入数据,根据需要在对数据进行简单操作。
显示数据时,会先跟系统时间比较,如果小于系统当前时间,则输出提示“已播放”。
查找时满足要求的按名字查找和按日期查找。
找到之后与系统时间比较输出提示,如果没找到,输出提示。
售票系统设计较为简单,主要是订票和退票。
订票函数中会先给出可预订的提示,这样可以更有效订票。
输入之后会先检查是否播放,若播放则给出提示,退出。
若未找到,则同样给出提示。
如果票卖光了,仍然有提示,如果电影达到预定要求,则先给出现有座位的预订情况,方便用户高效率订票。
当客户输入一座位时程序会判断这个作为是否被预订,如果是,则给出提示;如果no就输出用户需要支付的金额,并记录在座位号对应的数组中。
方便退票时退款。
第3章类的设计
3.1ticket类的设计
Classticket{
数据成员:
nodetic[N];//储存电影信息的数组
intlen;//当前电影的数量
函数成员:
ticket();//构造函数
~ticket();//析构函数
voidinput();//输入
voidshow();//显示
voidsearch();//查找
voidsell();//售票
voidrefund();//退订
}
接口设计,如表3.1所示
表3.1:
函数列表
函数名
函数格式//即函数首部
函数功能
tick
class
创建类
input
void
信息输入
show
void
信息显示
search
void
查找信息
sell
void
售票
refund
void
退票
ticket
-
构造函数
~ticket
-
析构函数
第4章详细设计
4.1工程视图
4.2类图视图
4.3函数的调用关系
根据要求,作出如图4.1的函数调用关系图
图4.1函数调用关系图
4.4主要算法
timecmp函数是用来比较日期时间函数,它需要先把时间装入数组再传进来地址,然后从年月日时分与系统时间进行比较。
如果有大小区分,直接返回。
流程图见图4.2所示。
inttimecmp(inta[],intn)
{
time_tt;
structtm*tim;
t=time(NULL);//获取当前系统时间
tim=localtime(&t);
Intb[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
inti;
for(i=0;i{
if(a[i]>b[i])
{
return1;
}
if(a[i]
{
return-1;
}
}
if(i==n)
{
return0;
}
}
N
Y
图4.2时间比较流程图
售票的函数算法,首先和系统时间比较,显示可预订的电影信息,输入预定电影的电影名,然后选择预定的座位,最后是否会员身份订票。
由于退票模块和订票模块流程差不多,所以下面就不再设计退票模块的流程图。
voidticket:
:
sell()
{
system("cls");//清屏
cout<<"\t\t\t\t《售票模块》"<cout<<"可预订的电影信息如下:
"<cout<<"日----期\t时-间\t场次\t电影名称\t票价\t折扣\t余票"<ints,i;
s=timecmp(tick.tic[i].time,5);
intk=0;//标记可供预定的影片数量
for(i=0;i{
if(s>0)
{
k++;
cout<cout<"<cout<cout<}
}
if(i==tick.len&&k==0)
{
cout<<"\n\a\t\t\t\t暂无可供预定的影片!
"<system("pause");//任意键继续
return;
}
stringna;
cout<";
cin>>na;
k=0;//再次做标记
for(i=0;i{
if(tick.tic[i].name==na&&s>0)//找到
{
k++;//找到的记录数
cout<<"\n查找结果如下:
"<cout<<"日----期\t时-间\t场次\t电影名称\t票价\t折扣\t余票"<cout<cout<"<cout<cout<intm,n;
cout<";
intseatnum;
cin>>seatnum;
m=(seatnum-1)/10;
n=(seatnum-1)%10;
if(tick.tic[i].seat[m][n]==0&&tick.tic[i].rest!
=0)
{
cout<";
chara;
cin>>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<"<"<cout<"<cout<";
cout<system("pause");//任意键继续
return;
}
else
{
if(tick.tic[i].rest==0)
{
cout<";
system("pause");//任意键继续
return;
}
elseif(tick.tic[i].seat[m][n]!
=0)
{
cout<";
system("pause");//任意键继续
return;
}
}
}
}
if(i==tick.len&&k==0)
{
cout<<"\n\a\t\t\t\t没有找到您要预定的电影!
"<system("pause");//任意键继续
return;
}
}
N
Y
YN
图4.3售票流程图
第5章测试
欢迎进入电影售票系统主界面,主界面包含需要输入密码的管理界面和顾客界面。
你想进入哪个模块,按数字1或2.。
如图5.1所示。
图5.1主界面
输入管理密码1234,进入管理界面。
管理界面包含录入信息,显示信息,查找信息
退出等模块,各模块相互依存,但又互不干涉,保证程序的安全性。
操作员想进入哪个模块,选择按键1234等进入下一模块。
如图5.2所示。
图5.2管理界面
在管理界面,选择按1键,进入信息输入模块,该模块包含影片的播放日期及时间,影片的场次,名称,影片的票价及会员身份的折扣。
而且此模块可以输入多部影片的信息。
如图5.3所示。
图5.3录入信息模块
在管理界面,按2键,能够对上一模块信息的输入进行显示,显示影片播放日期及时间,场次,名称,票价及其折扣,并能够显示剩余票数,最后能根据影片的播放日期和系统时间进行比较,判断该影片是否播放。
如图5.4所示。
图5.4显示影片信息
在管理界面,按3键进入查找模块,该模块包含按播放日期的查找和按按影片名查找,根据按键,选择你所需要进行查找的方式。
图5.5所示。
图5.5查找模块
按1键,按影片名进行查找,如图5.6所示。
图5.6按影片名查找
按2键,按播放日期进行查找。
如图5.7所示。
图5.7按日期查找
在主界面,按2键进入顾客界面。
该界面包含影片的预定和退订功能。
如图5.8所示。
图5.8顾客界面
在顾客界面,按1键进入影片预定模块,首先该模块显示可预订的影片的信息,输入你想要预定影片的名称,程序进行检索,显示符合要求的电影的信息,然后选择你要预定影片的座位号,并是否以会员身份进行订票。
最后显示出你所要支付的金额和座位号。
牢记你预定的座位号,以便退票时的方便。
如图5.9所示。
图5.9订票
在顾客界面,按2键进入退票模块,输入你要推定的影片的名称,显示出结果后,输入先前你预定的座位号,完成退票,否则就退票失败。
如5.10所示。
图5.11退票成功
第6章总结
在课程设计过程中,我学到了许多人生哲理,懂得了怎样去制定计划,怎样去实现这个计划,课程设计让我成长了不少。
1.课程设计是考验一个人的耐性与能力很强的作业,制作课程设计花费太长时间,在遇到问题时,没有头里,一头蛮干,没有达到细心,平静思考,不过在不断制作过程,慢慢发现自己的缺点,逐渐改进,有所收获。
2.自己也发现一个好的程序不仅要求代功能组件完善可用,还要清晰代码梳理,要清晰明确,还要一个考虑全面的头脑。
3.不足点与努力点:
(1)由于个人能力问题,在该程序中本想在每一个考虑到用户错误操作后,加入安保程序,现在无法实现。
功能不完善,在开始规划时,本想通过链表加入增添程序,由于对链表并没有掌握,无法添加,没有成功。
(2)正如所说该程序安全性不高,无法应对错误情况,需要进一步提高自己的能力。
4.自己起初对c++没有任何概念,在不断学习过程,渐渐的对它有了了解,也慢慢体验到c中能带给自己的快乐。
自己也不断在为自己找未来的路,我能干些什么。
在以后要努力进取了。
附录:
程序代码
#include
#include
#include
#include
#defineN50//可存电影总数
usingnamespacestd;
structnode
{
inttime[5];//装时间,方便比较
intnum;
stringname;
floatprice;
floatdiscount;
intrest;
floatseat[10][10];
};
classticket
{
private:
nodetic[N];
intlen;
public:
ticket();
~ticket();
voidinput();
voidshow();
voidsearch();
voidsell();
voidrefund();
}tick;
ticket:
:
ticket(){};
ticket:
:
~ticket(){};
inttimecmp(inta[],intn)
{
time_tt;
structtm*tim;
t=time(NULL);//获取当前系统时间
tim=localtime(&t);
intb[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min};
inti;
for(i=0;i{
if(a[i]>b[i])
return1;
if(a[i]
return-1;
}
if(i==n)
return0;
}
voidticket:
:
input()//录入信息
{
system("cls");//清屏
charch,ch1;//接受日期中的字符-或:
cout<<"\t\t\t\t《录入模块》"<for(inti=tick.len;i{
cout<<"\n请输入日期(2014-6-30):
";
cin>>tick.tic[i].time[0]>>ch>>tick.tic[i].time[1]>>ch>>tick.tic[i].time[2];
cout<<"\n请输入放映时间(12:
30):
";
cin>>tick.tic[i].time[3]>>ch1>>tick.tic[i].time[4];
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;
tick.len++;//个数加1
cout<<"是否继续录入?
(y/n):
";
cin>>ch;
if(ch=='n'||ch=='N')
break;
else
continue;
}
}
//
voidticket:
:
show()
{
system("cls");//清屏
cout<<"\t\t\t\t《显示模块》"<cout<<"日----期\t时-间\t场次\t电影名称\t票价\t折扣\t余票"<intr;
for(inti=0;i{
r=timecmp(tick.tic[i].time,5);
cout<cout<"<cout<cout<if(r<=0)
cout<<"\a(已播放!
)"<else
cout<}
}
//
voidticket:
:
search()
{
charflag;
inti;
intk=0;//标记找到的记录
system("cls");//清屏
cout<<"\n\n\n\t\t\t\t《查找模块》\n\n\n"<cout<cout<cout<";
cin>>flag;
if(flag=='1')
{
stringna;
cout<<"\n请输入影片名:
";
cin>>na;
for(i=0;i{
if(tick.tic[i].name==na)//找到
{
k++;//找到的记录数
cout<<"\n查找结果如下:
"<cout<<"日----期\t时-间\t场次\t电影名称\t票价\t折扣\t余票"<cout<cout<"<cout<cout<}
}
if(i==t