高超群修复的.docx
- 文档编号:29664451
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:38
- 大小:625.61KB
高超群修复的.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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 超群 修复