版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、内蒙古科技大学本科生C+程序设计课程设计说明书题 目:电影院售票系统 学生姓名:胡书培学 号:1067111106专 业:计算机科学与技术班 级:计2010-1班指导教师:周李勇成绩评定标准课程设计的验收答辩采取“讲解程序+提问+即时编程”的方式。考核项目评价质量成绩程序功能完全实现,并能通过答辩。(60%)A能完全正确回答提问;B问题回答的基本意思正确;C不能回答或回答错误,抽取程序小的功能即时编程,能完成;D不能回答或回答错误,即时编程无法完成;程序设计符合面向对象的思想和原则,结构合理(15)A程序结构层次分明,提取出各个实体类,类的设计合理;B程序结构层次分明,具有客户类和服务类;C类
2、的设计基本正确;D几乎在一个类或者方法中实现了大部分的逻辑,结构不够清晰;程序的风格(10%)A遵守编码规范,有良好的风格; 以下问题每出现一项成绩降一个等级: 1类、方法和变量命名不符合规范; 2方法和属性前缺少注释; 3程序没有适当缩进;设计说明书(15%)从以下几方面考核: 1结构完整 2图表正确 3文字通顺 4版面工整目 录TOC o 1-3 h u HYPERLINK l _Toc2945 成绩评定标准 PAGEREF _Toc2945 2 HYPERLINK l _Toc2291 【摘要】 PAGEREF _Toc2291 5 HYPERLINK l _Toc22893 第一章 问
3、题描述 PAGEREF _Toc22893 6 HYPERLINK l _Toc6465 1.1 电影院售票管理系统的设计 PAGEREF _Toc6465 6 HYPERLINK l _Toc25325 第二章 问题分析 PAGEREF _Toc25325 8 HYPERLINK l _Toc21408 2.1 阐述你对问题的理解、解决问题的方案说明 PAGEREF _Toc21408 8 HYPERLINK l _Toc7380 2.2 系统功能模块的划分 PAGEREF _Toc7380 8 HYPERLINK l _Toc8703 第三章 数据模型 PAGEREF _Toc8703 1
4、0 HYPERLINK l _Toc6163 3.1 相关数据结构的说明类的设计 PAGEREF _Toc6163 10 HYPERLINK l _Toc27979 3.2 程序结构说明,即程序各个部分之间如何协调来完成任务 PAGEREF _Toc27979 12 HYPERLINK l _Toc11961 3.3 全局变量,重要形式参数、局部变量等等,它们的命名及用途解释 PAGEREF _Toc11961 15 HYPERLINK l _Toc12506 第四章 算法描述 PAGEREF _Toc12506 18 HYPERLINK l _Toc31267 4.1 解题算法的设计思路介绍
5、 PAGEREF _Toc31267 18 HYPERLINK l _Toc1652 4.2 主要程序代码,加上详细的注释 PAGEREF _Toc1652 20 HYPERLINK l _Toc25454 4.3 画出程序流程图 PAGEREF _Toc25454 44 HYPERLINK l _Toc22379 第五章 设计总结 PAGEREF _Toc22379 55 HYPERLINK l _Toc26788 第六章 附录 PAGEREF _Toc26788 56 HYPERLINK l _Toc923 参考文献 PAGEREF _Toc923 75 【摘要】电影院售票管理系统两个模块
6、管理系统和售票系统。1.管理系统具有如下功能:(1)录入信息:且可不定时增加数据。并根据放映时间排序。(2)浏览信息:可显示出某日期所有放映信息,如果当前系统时间超过了某电影的放映时间,则显示“此电影放映结束”的提示信息。(3)查询电影:可按日期或电影名查询。并显示目标的详细信息。 (4)修改信息:可根据电影名修改该电影的各种信息(余票除外)并简单排序。(5)删除电影:根据电影名找到该电影并删除。2.售票系统功能如下:(1)售票:售票即为影片预定。可根据输出的可预订信息选择订票,如果该影片已放映,则提示不能订票,如果售票成功,自动跟新座位数。(2)退票:影片退订即退票。根据放映时间和系统时间来
7、判断是否能进行退票,并自动更新座位数。其他参数:程序中定义了一个node结构和一个ticket类。结构用来存信息,节点类存节点长度,和管理里面的数据。问题描述电影院售票管理系统的设计1.设计资料及参数:用C+设计一个系统,能提供下列服务:(1)录入放映信息,格式为:放映日期放映时间场次电影名称票价会员折扣剩余座位2011-11-210:301桃姐308782011-11-214:002桃姐30886可不定时地增加放映数据。(2)浏览放映信息,可显示出某日期所有放映信息,如果当前系统时间超过了某电影的放映时间,则显示“此电影放映结束”的提示信息。(3)查询电影:可按日期或电影名查询。 (4)售票
8、和退票功能A:查询电影名。当剩余座位数大于0,并且当前系统时间小于放映时间时才能售票,计算会员折扣,售票后自动更新剩余座位数。B:退票时,输入退票的电影名和场次,当电影未放映时才能退票,如果以会员折扣购买的电影票,退票按照折扣价退款,退票后自动更新剩余座位数。根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和力一法);(4)完成类中各个成.员函数的定义;(5)完成系统的应用模块;(6)功能调试;(7)完成系统总结报告以及系统使用说明书。问题分析阐述你对问题的理解、解决
9、问题的方案说明由设计题目知电影院售票管理系统主要可分为两个大模块:1.管理系统2.售票系统。对整个系统进行功能分析不难发现,管理系统和售票系统的权限是不一样的,管理系统具有管理员权限,可以对所有数据的信息进行操作,比如:录入(input)、显示(show)、查找(search)、修改(change)、删除(del);而售票系统则只进行售票(sell)和退票(refund)。所以需要设计一个manager和customer函数来区分权限的函数。所以,manager里包含了需要实现的input、show、search、change、del等函数来满足管理要求的功能。Customer包含sell和r
10、efund。系统功能模块的划分系统的模块图如下:欢迎界面主函数售票customer管理manager删除退票售票显示输入查找修改管理函数进入时需要管理密码:1234运行程序时,需要先输入数据,根据需要在对数据进行简单操作。录入时,每录入一个信息就会对现有信息进行插入排序。显示数据时,会先跟系统时间比较,如果小于系统当前时间,则输出提示“已播放”。查找时满足要求的按名字查找和按日期查找。找到之后与系统时间比较输出提示,如果没找到,输出提示。修改函数支持多种修改,可以避免输入的一些错误。也可以修改日期,以调整放映时间。删除函数是为防止输入错误,或是内存不够用而设计的。比如前几天已播放的,在内存中如
11、果作用不是很大,完全是可以删除的。这样能跟有效利用资源。售票系统设计较为简单,主要是订票和退票。订票函数中会先给出可预订的提示,这样可以更有效订票。输入之后会先检查是否播放,若播放则给出提示,退出。若未找到,则同样给出提示。如果票卖光了,仍然有提示,如果电影达到预定要求,则先给出现有座位的预订情况,方便用户高效率订票。当客户输入一座位时程序会判断这个作为是否被预订,如果是,则给出提示;如果no就输出用户需要支付的金额,并记录在座位号对应的数组中。方便退票时退款。订票成功后还会输出现有座位的信息方便核实。其中订票和退票函数都是用大篇幅(一两百行)来构建起强大而有完善的提示功能,趋于人性化的设计跟
12、拉近了与客户的距离。数据模型相关数据结构的说明类的设计程序中定义的数据:struct nodeint year;int month;int day;int hour;int minute;int datetime5;/装时间 ,方便比较 int num;string name;float price;float discount;int rest;float seat1010;class ticketprivate:node ticN;int len;public:ticket();ticket();int sort(int i);void input();void show();void s
13、earch();void change();void del();void sell();void refund();tick;对系统进行数据分析就会知道电影院售票管理系统主要处理的是基本电影信息。每个电影的基本信息放在struct node中定义,包括基本的放映日期(date),时间(time),场次(num),影片名(name),票价(price),会员折扣(discount)及余座(rest)。其中日期是包含有年、月、日,时间包含时、分,整形数据,其中还有一个数组(detetime5)是把该影片时间存储进去,方便以后的排序和与系统时间比较。还有一个而二维数组seat1010,是用来存储座
14、位信息(初始化全为0),如果此座位被预定,则对应的座位存的就是订票时的付款,这也方便了退票时的退款。还要解决数据的组织问题,怎么才能把不同的电影存起来呢?方法目前只学了两种,数组和链表。数组和链表各有优缺点。用链表实现虽然对空间进行了充分利用,但其对数据的存储让人实在无奈,并且操作也不容易实现。剩下就是数组了,虽然需要定义一个大点的数组,但其对数据操作非常方便,这深受初学者的我们的青睐。所以在ticket类中定义了个node50。如果需要扩大直接改文件前的#define N后的数字就可以了。其实质随意选择把电影信息存在结构体而不是类中,主要考虑到,结构体存取数据的方便性,而采用类无疑会给程序很
15、多负担存取。数据组织结构图:ticket类Input()Show()Search()Change()Del()Sell()Refund()lennode50程序结构说明,即程序各个部分之间如何协调来完成任务程序的主要实现过程是在ticket类 中定义的成员函数来实现完成,并且在类外定义。这样方便了对数据进行操作。并且定义了一个全局的比较函数timecmp,可以比较两个时间数组的大小。此函数在程序中用途很广泛,每次输入输出都需要与系统时间进行比较,所以在每个操作函数中都用到了。此外sort函数也是非常有用的,它主要用在输入和修改上。每次更新数据都会根据现有数据的时间进行排序。这也方便了读数据的客
16、户。其中程序总很多代码是重复用到的,但是没有写成函数来调用有两点原因。首先如果写成函数调用的话会降低程序的可读性,其次写成函数的话,代码就固定下来了,使得程序不够灵活。所以在程序不必要的地方,就用代码来代替函数调用。举个例子说,在修改,删除,订票,退票中都会用到按电影名查找。可是没有单独把按电影名查找单独写成函数来调用,是因为在按电影名查找会输出很多详细的电影信息,会使客户感觉到是在浪费时间。下面是按电影名查找的代码片段:for(i=0;itick.len;i+)/遍历 if(timecmp(tick.tici.datetime,temp,3)=0)/找到 k+;/找到的记录数 if(j=1)
17、 coutn 查找结果如下:endl; cout_endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endlendl; j+; couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; i
18、nt s; s=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(s=0) couta(已播放!) endl; else coutendl; coutendltttt当前预订情况; for(int m=0;m10;m+) coutendlt; for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout无人; cout; coutendl;if(j!=1)coutendl;system(pause);/任意键继续 return;if(i=tick.len&k=0)coutna
19、tttt未找到结果!endl;system(pause);/任意键继续 return;而在另一些函数种植需要提示用户找没找到就可以了。下面是del函数的按电影名查找for(i=0;itick.len;i+)if(=na)/找到j+;for(int j=i+1;jtick.len;j+)tick.ticj-1=tick.ticj;coutendltttt删除成功!n;tick.len-; if(i=tick.len&j=0) coutnatttt未找到结果,删除失败!ntm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,
20、tim-tm_min;/将系统时间装入数组,方便比较int k=0;/标记找到的记录r=timecmp(tick.tici.datetime,array,5);/与系统时间比较 ,返回值给 j=0;/修改函数中标记修改数量string inpass;/manager函数中的管理员密码初始值1234Flag,as,choice/是用来存接受的选择的算法描述解题算法的设计思路介绍timecmp函数是用来比较日期时间函数,它需要先把两个时间装入数组再传进来地址,然后从年月日时分进行比较。如果有大小区分,直接返回。int timecmp(int a,int b,int n)for(int i
21、=0;ibi)return 1;if(aibi)return -1;if(i=n)return 0;/Sort函数主要是对第i个元素进行插入排序。需要先遍历数组然后插入到第一个比他大的元素前面。int ticket:sort(int i)int r,n,j;for(j=0;ji;j+)/从首元素开始比较日期 r=timecmp(tick.tici.datetime,tick.ticj.datetime,5);if(r=-1)/找到第一个比他大的日期 ,插入其前面 break;if(j=tick.len-1)return j;if(j=i)for(j=i+1;jtick.len;j+)/从首元素
22、开始比较日期 r=timecmp(tick.tici.datetime,tick.ticj.datetime,5); if(r=-1)/找到第一个比他大的日期 ,插入其前面 break;node temp=tick.tici;if(jj;n-) tick.ticn=tick.ticn-1; tick.ticj=temp; return j;elseif(j=tick.len)for(n=i;nj-1;n+) tick.ticn=tick.ticn+1;else for(n=i;nj;n+) tick.ticn=tick.ticn+1;tick.ticn=temp;return n;主要程序代码
23、,加上详细的注释下面简单介绍一下程序运行结果主函数开始运行界面:docoutendlendlendlendl;couttttt欢迎使用电影售票系统; coutendlendlendl;coutntttt1.管理系统;coutntttt2.售票系统;coutchoice;switch(choice)case 1:manager();break;case 2:customer();break;default :exit(0); while(1);Manager系统代码及运行截图密码输入界面代码docoutendlinpass; if(inpass=password)break;elsecouten
24、dlatttt密码错误!; coutendla;if(a=N|a=n)exit(0);while(1);选择菜单代码 do coutntttt欢迎进入管理系统nn; coutntttt1.录入影片; coutntttt2.显示影片; coutntttt3.查找影片; coutntttt4.修改影片; coutntttt5.删除影片; coutntttt6.退出; coutas; switch(as) case 1:tick.input();break; case 2:tick.show();break; case 3:tick.search();break; case 4:tick.chang
25、e();break; case 5:tick.del();break; case 6:default :system(pause); return;/任意键继续 while(1);选择1管理系统输入密码选择1录入void ticket:input()/录入信息 system(cls);/清屏 char ch;/接受日期中的字符或: coutnnntttt录入模块nnnendl; for(int i=tick.len;iN;i+) couttick.tici.yearchtick.tici.monthchtick.tici.day; couttick.tici.hour;cinch;cintic
26、k.tici.minute; tick.tici.datetime0=tick.tici.year; tick.tici.datetime1=tick.tici.month; tick.tici.datetime2=tick.tici.day;tick.tici.datetime3=tick.tici.hour;tick.tici.datetime4=tick.tici.minute; couttick.tici.num; ; couttick.tici.price; couttick.tici.discount; tick.tici.rest=100; f
27、or(int m=0;m10;m+) for(int n=0;n10;n+)tick.tici.seatmn=0; tick.len+;/个数加1 if(i!=0)/按时间,插入排序 int j=sort(i); coutendl; coutch; if(ch=y | ch=Y | ch=n | ch=N) break; else cout选2显示。代码如下=coutnnntttt显示模块nnnendl;cout 所有电影信息如下:endl;cout_endl;cout日-期t时-间t场次t电影名称t票价t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_md
28、ay,tim-tm_hour,tim-tm_min; int r; for(int i=0;itick.len;i+) r=timecmp(tick.tici.datetime,array,5); couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttick.tici.rest; if(r=0) couta(已播放!) e
29、ndl; else cout继续录入选择2显示选3查找查找的界面代码=coutnnntttt查找模块nnnendl; do coutendltttt1.按影片名查找; coutendltttt2.按日期查找; coutendlflag; if(flag!=1&flag!=2) coutnatttt选择有误!请选择正确的查找模式。endl; while(flag!=1&flag!=2);=按电影名查找代码=string na;int j=1;coutna;for(i=0;itick.len;i+)if(=na)/找到 k+;/找到的记录数 if(j=1) coutn
30、查找结果如下:endl; cout_endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endlendl; j+; couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r; r
31、=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(r=0) couta(已播放!) endl; else coutendl; coutendltttt当前预订情况; for(int m=0;m10;m+) coutendlt; for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout无人; cout; if(j!=1)coutendl;system(pause);/任意键继续 return;if(i=tick.len&k=0)coutnatttt未找到结果!endl;s
32、ystem(pause);/任意键继续 return;=按日期查找代码=char ch;int temp3; couttemp0chtemp1chtemp2;int j=1;for(i=0;itick.len;i+)/遍历 if(timecmp(tick.tici.datetime,temp,3)=0)/找到 k+;/找到的记录数 if(j=1) coutn 查找结果如下:endl; cout_endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endlendl; j+; couttick.tici.year-tick.tici.month-tick.tici.dayt; co
33、uttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int s; s=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(s=0) couta(已播放!) endl; else coutendl; coutendltttt当前预订情况; for(int m=0;
34、m10;m+) coutendlt; for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout无人; cout; coutendl;if(j!=1)coutendl;system(pause);/任意键继续 return;if(i=tick.len&k=0)coutnatttt未找到结果!修改修改界面的源代码=if(=na)/找到 j+;char a;do coutendltttt1.修改放映日期(2011-11-11); coutendltttt2.修改放映时间(12:30); cout
35、endltttt3.修改放映场次; coutendltttt4.修改影片名称; coutendltttt5.修改影片票价; coutendltttt6.修改会员折扣; coutendlendlendl; coutendlflag; char ch; switch(flag) case 1:couttick.tici.yearchtick.tici.monthchtick.tici.day;tick.tici.datetime0=tick.tici.year; tick.tici.datetime1=tick.tici.month; tick.tici.datetime2=tick.tici.d
36、ay;i=sort(i);break; case 2:couttick.tici.hourchtick.tici.minute;tick.tici.datetime3=tick.tici.hour; tick.tici.datetime4=tick.tici.minute;i=sort(i);break; case 3:couttick.tici.num;break; case 4:;break; case 5:couttick.tici.price;break; case 6:couttick.tici.discount;break; default:br
37、eak; coutendla; while(a!=N&a!=n); cout 当前电影信息如下:endl; cout_endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r; r=timecmp(tick.tici.datetime,array,5); couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; coutti
38、tt; couttick.tici.pricettick.tici.discountttick.tici.rest; if(r=0) couta(已播放!) endl; else cout显示退出选5删除删除代码如下=system(cls);/清屏 coutnnntttt删除模块nnnendl; string na; int i;int j=0;/标记删除的数量 coutna;for(i=0;itick.len;i+)if(=na)/找到j+;for(int j=i+1;jtick.len;j+)tick.ticj
39、-1=tick.ticj;coutendltttt删除成功!n;tick.len-; if(i=tick.len&j=0) coutnatttt未找到结果,删除失败!n退出进入售票系统选1订票可预订电影信息输出=coutnnntttt售票模块nnnendl; cout 可预订的电影信息如下:endl; cout_endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endltm_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
40、+; couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttick.tici.restendl; =查找信息=if(i=tick.len&k=0)coutnatttt没有找到您要预定的电影!endl;system(pause);/任意键继续 return;=已播放显示不能订票= s=timecmp(tick.tici.da
41、tetime,array,5);/与系统时间比较 if(s=0) coutanttt此电影已播放,无法订票! endl;system(pause);/任意键继续 return; =如果满足订票条件=for(m=0;m10;m+) coutendlt; for(n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout无人; cout; coutendlseatnum; if(seatnum100|seatnum1) coutendlatt对不起,无此座位!; system(pause);/任意键继续 return; m=(seatnu
42、m-1)/10; n=(seatnum-1)%10; if(tick.tici.seatmn=0&tick.tici.rest!=0) coutendla; if(a!=N&a!=n) tick.tici.seatmn=tick.tici.price*tick.tici.discount/10; else tick.tici.seatmn=tick.tici.price; tick.tici.rest-; coutendltttt您需要支付:tick.tici.seatmn元。endl; coutendltttt您的座位号是:seatnumendl; coutendltttt预订成功!;for
43、(int m=0;m10;m+) coutendlt; for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout无人; cout100|seatnum1) coutendlatt对不起,无此座位!; system(pause);/任意键继续 return; -else if(tick.tici.seatmn!=0) coutendl退票查找不到=if(i=tick.len&k=0)coutnatt没有找到您要退定的电影!endl;system(pause);/任意键继续 return;=正确退票流程=coutendl
44、tttt当前预订情况;int m,n; for(m=0;m10;m+) coutendlt; for(n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout无人; cout; coutendlseatnum; if(seatnum100|seatnum1) coutendlatt对不起,无此座位!; system(pause);/任意键继续 return; m=(seatnum-1)/10; n=(seatnum-1)%10; if(tick.tici.seatmn!=0) tick.tici.rest+; coutendlttt
45、t您要退订座位号是:seatnumendl; coutendltttt退给您:tick.tici.seatmn元。endl; coutendltttt退订成功!;tick.tici.seatmn=0; =退订未定的座位,提示代码=else coutendlattn对不起,此座位未预订,无法退票!n; system(pause);/任意键继续 return; =退出画出程序流程图程序中函数的流程图:main()终止Choice=2Choice=1Choice=othercustomermanager输入choice开始break退出5删除6其他4修改3查找2显示选择功能1录入YN密码正确输入管理
46、密码开始2.manager()开始leng=0;i=len;输入日期和时间,场次电影名等YN退出Len0与系统时间比较返回值为r输出ticki的信息Y退出Nileni=0;开始,获取系统时间;4.show()开始输出提示5.search()退出输出详细信息提示,返回NY遍历找到输入日期输入电影名flag=2flag=1flag=other输入flag6.change()YY退出N输出信息继续修改Sort(i)其他属性修改日期时间输入修改项flag退出N遍历找到输入电影名开始开始输入电影名7.del()NY退出删除(后项向前覆盖)遍历找到8.customer()开始输入as订票as=2退票as=
47、otheras=1退出开始遍历不能订票不能订票NY以会员购票YN此座位未预订输入预订座位号输出当前预订YN比系统时间大退出N遍历找到输入预订名与系统时间比较输出可供预定的9.sell()pricePrice*discount输出当前预订更新座位退出开始10.refund()输出当前预订Y已预订输入退订座位N不能退票Y不能退票N比系统时间大N遍历找到输入退订影片退出当前预订更新座位退票,退款设计总结这次课程设计中我感觉设计的比较满意的是订票和退票函数,根据提示信息就可以轻松完成订票和退票。这次的代码已经是我写的第三份了。其中前两份都或多或少出现了大漏洞,先拿第一份来说,虽然功能比较完善,里面定义
48、了六个类,40的个成员函数,总代码量1000多行,然而却犯了最致命的错误,里面存储数据使用链表实现,可是开辟内存单元却在局部函数,这样局部函数执行完内存单元动消失,造成数据丢失。因此我放弃了第一份,重写了第二份,第二份中吸取了第一份的教训,同样适用链表实现,定义了两个类,写了十几个函数,虽然已经能运行,但是其中函数传递参数频繁降低了程序的可读性。所以再此放弃修改。最后设计了一个结构体,一个类,10个函数同样实现了基本功能,同时增加了一些修改排序功能。当然这个程序也是有瑕疵的,在修改日期后可以完成排序,可是修改了时间会造成排序不正确。这可能需要答辩之后在进行修改了。还有就是整个程序的设计思想,大
49、型一点的程序设计,如果从上向下考虑功能的实现会节约很多时间,这也是比较合理的设计方法。以上是我的总结。附录#include#include#include#include#define N 50/可存电影总数 using namespace std;struct nodeint year;int month;int day;int hour;int minute;int datetime5;/装时间 ,方便比较 int num;string name;float price;float discount;int rest;float seat1010;/class ticketprivate:
50、node ticN;int len;public:ticket();ticket();int sort(int i);void input();void show();void search();void change();void del();void sell();void refund();tick;/ticket:ticket();ticket:ticket();/int timecmp(int a,int b,int n)int i; for(i=0;ibi)return 1;if(aibi)return -1;if(i=n)return 0;/int ticket:sort(int
51、 i)/=int r,n,j;for(j=0;ji;j+)/从首元素开始比较日期 r=timecmp(tick.tici.datetime,tick.ticj.datetime,5);if(r=-1)/找到第一个比他大的日期 ,插入其前面 break;if(j=tick.len-1)return j;if(j=i)for(j=i+1;jtick.len;j+)/从首元素开始比较日期 r=timecmp(tick.tici.datetime,tick.ticj.datetime,5); if(r=-1)/找到第一个比他大的日期 ,插入其前面 break;node temp=tick.tici;i
52、f(jj;n-) tick.ticn=tick.ticn-1; tick.ticj=temp; return j;elseif(j=tick.len)for(n=i;nj-1;n+) tick.ticn=tick.ticn+1;else for(n=i;nj;n+) tick.ticn=tick.ticn+1;tick.ticn=temp;return n;/void ticket:input()/录入信息 system(cls);/清屏 char ch;/接受日期中的字符或: coutnnntttt录入模块nnnendl; for(int i=tick.len;iN;i+) couttick
53、.tici.yearchtick.tici.monthchtick.tici.day; couttick.tici.hour;cinch;cintick.tici.minute; tick.tici.datetime0=tick.tici.year; tick.tici.datetime1=tick.tici.month; tick.tici.datetime2=tick.tici.day;tick.tici.datetime3=tick.tici.hour;tick.tici.datetime4=tick.tici.minute; couttick.tici.num; couttick.ti
54、; couttick.tici.price; couttick.tici.discount; tick.tici.rest=100; for(int m=0;m10;m+) for(int n=0;n10;n+)tick.tici.seatmn=0; tick.len+;/个数加1 if(i!=0)/按时间,插入排序 int j=sort(i); coutendl; coutch; if(ch=y | ch=Y | ch=n | ch=N) break; else cout输入错误请重新输入:; if(ch=n | ch=N) break; /void ticket:show()
55、system(cls);/清屏coutnnntttt显示模块nnnendl;cout 所有电影信息如下:endl;cout_endl;cout日-期t时-间t场次t电影名称t票价t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r; for(int i=0;itick.len;i+) r=timecmp(tick.tici.datetime,array,5); couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.ho
56、ur:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttick.tici.rest; if(r=0) couta(已播放!) endl; else coutendl; /void ticket:search()char flag;int i;int k=0;/标记找到的记录 system(cls);/清屏 coutnnntttt查找模块nnnendl; do coutendltttt1.按影片名查找; coutendltttt2.按日期查找; couten
57、dlflag; if(flag!=1&flag!=2) coutnatttt选择有误!请选择正确的查找模式。endl; while(flag!=1&flag!=2);if(flag=1) string na;int j=1;coutna;for(i=0;itick.len;i+)if(=na)/找到 k+;/找到的记录数 if(j=1) coutn 查找结果如下:endl; cout_endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endlendl; j+; couttick.tici.year-tick.tici.month-tick.tici
58、.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r; r=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(r=0) couta(已播放!) endl; else coutendl; coutendltttt当前预订情况; for
59、(int m=0;m10;m+) coutendlt; for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout无人; cout; if(j!=1)coutendl;system(pause);/任意键继续 return;if(i=tick.len&k=0)coutnatttt未找到结果!endl;system(pause);/任意键继续 return;elsechar ch;int temp3; couttemp0chtemp1chtemp2;int j=1;for(i=0;itick.len;i+)/遍历 if(
60、timecmp(tick.tici.datetime,temp,3)=0)/找到 k+;/找到的记录数 if(j=1) coutn 查找结果如下:endl; cout_endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endlendl; j+; couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttm_y
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 门店强电施工方案(3篇)
- 隧道设计施工方案(3篇)
- 2026校招:陕西有色金属控股集团试题及答案
- 2026校招:陕西粮农集团笔试题及答案
- 娱乐行业艺人演出表现与收入考核表
- 2026校招:山药集团笔试题及答案
- 2026校招:山东港口集团笔试题及答案
- 2026校招:软件测试笔试题及答案
- 银行风险管理策略及操作手册
- 2026校招:人工智能训练师题目及答案
- 学生5mm坐标纸(虚线-文本版)直接打印
- 小班语言:迎春花
- 别克君威4T65E自动变速器
- 2024年江苏农林职业技术学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- 建设工程项目经济分析与评价PPT完整全套教学课件
- 技术交底制度
- 废塑料高温裂解干馏可行性报告
- 地质勘探原始记录表格【实用文档】doc
- GB/T 30812-2014燃煤电厂用玻璃纤维增强塑料烟道
- 住院医师规范化培训临床技能结业考核体格检查评分表(神经外科)
- 小学二年级下册体育教案(全册)
评论
0/150
提交评论