题目:电影院售票系统一、课程设计时间2010~11第2学期第15周,共计1周,20学时。二、课程设计内容:某电影院的观众席共有A、B、C、D四个区,每个区有500个座位。请写程序模拟这个售票过程(允许退票)。三、课程设计要求程序质量:贯彻结构化的程序设计思想。用户界面友好,功能明确,操作方便。用户界面中的菜单至少应包括“售票”、“退票”、“统计满座率”、“退出”4项。代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书:课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板。四、指导教师和学生签字指导教师:________学生签名:________五、成绩六、教师评语沈阳航空航天大学设计用纸I目录一、需求分析......................................................1二、设计分析......................................................2三、主要界面截图..............................................6四、技术要点......................................................8五、个人总结......................................................10六、参考文献......................................................11七、源程序..........................................................11沈阳航空航天大学设计用纸1一、需求分析根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。售票系统要求存储当天各部电影售票情况,所以程序需要定义结构体变量存储售票情况。系统的整体功能通过记录当天各部电影了解售票情况。编程时采取模块化设计思想,设计主函数,通过主函数选择调用各子函数以实现该系统的各种功能。然后设计相应的子函数来执行系统的各种功能,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。1、经过对程序设计题目的分析可知,整个程序的设计实现大致分为5个模块,其中每一个模块对应一个函数,他们的功能分别是查询当前的电影及售票数、售票、退票、统计满座率、退出。在这些函数当中,后4个函数的实现严格按照题目的要求,而前面的2个函数属于附加功能。2、增强了程序的实用性,使系统用户界面友好、功能沈阳航空航天大学设计用纸2明确、操作方便,应采取直接用printf函数的方式在界面上输出可供用户选择的菜单。据此应该能够很好成要求。1、售票,对顾客出售各票2、退票,对顾客需要票进行处理,十分钟内可退票。二、设计分析主要有5个功能模块,每个模块对应一个C语言自定义函数。这些函数原型及其功能简述如下:1、程序总体结构图(传统流程图或N-S框图)图1沈阳航空航天大学设计用纸32、主要功能模块框图(传统流程图或N-S框图)(1)查询当前的电影及售票数图2(2)售票图3沈阳航空航天大学设计用纸4(3)退票图4沈阳航空航天大学设计用纸5三、主要界面截图图1程序主界面图2查询当前电影沈阳航空航天大学设计用纸6图3售票图4退票沈阳航空航天大学设计用纸7四、技术要点(对本程序贡献较大的C语言知识点;重要算法的设计与实现)1、结构体的应用定义了结构体用来描述电影院的场次、放映时间、座位数量以及已售票数。具体的定义如下QC[K]={{A,500,0,0},{B,500,0,0},{C,500,0,0},{D,500,0,0},};所定义的结构体主要用于定义数组。2、售票系统sellvoidsell()/*售票*/{inti,m;charb[15];{printf(\n\n**********售票**********\n);printf(场次座位数量已售票数\n);for(i=0;iK;i++)/*利用循环语句输出票的信息*/printf(%4s%10s%10d%8d%13s\n,QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave);}printf(请选择场次(例如:A):\n);scanf(%s,b);/*输入的值给b*/printf(需要买的张数(例如:5):\n);scanf(%d,&m);/*输入的值给m*/沈阳航空航天大学设计用纸8for(i=0;iK;i++)if(strcmp(QC[i].NO,b)==0)/*对QC[i].NO和b进行比较*/{QC[i].sell=QC[i].sell+m;printf(******买票成功!******\n);printf(\n\n**********售票**********\n);printf(场次座位数量已售票数\n);for(i=0;iK;i++)/*利用循环语句输出票的信息*/printf(%4s%10s%10d%8d%13s\n,QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave);writetofile();}}其中应用了结构体内容。结构体类型也是属于一种构造类型数据,它将不同类型的数据项组织成一个组合项,这些组合项中的数据项是互相联系的。3、退票系统leavevoidleave()/*退票*/{inti,m;charb[15];{printf(\n\n**********目前票务情况**********\n);printf(场次座位数量已售票数\n);for(i=0;iK;i++)printf(%4s%10s%10d%8d%13s\n,QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave);}printf(请选择要退票的场次(例如:A):\n);scanf(%s,b);/*输入的值给b*/printf(请输入要退的张数(例如:3):\n);沈阳航空航天大学设计用纸9scanf(%d,&m);/*输入的值给m*/for(i=0;iK;i++)if(strcmp(QC[i].NO,b)==0)/*对QC[i].NO和b进行比较*/if(QC[i].sell-m=0)/*判断能否退票*/{QC[i].sell=QC[i].sell-m;printf(******退票成功!******\n);printf(\n\n**********退票**********\n);printf(场次座位数量已售票数\n);for(i=0;iK;i++)printf(%4s%10s%10d%8d%13s\n,QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave);writetofile();}}五、个人总结这次课程设计基本上含盖了大学一年纪学习到的C语言知识点,课设题目要求不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。这次课设使我了解我编程思想和编程技巧,也认识了软件生命周期的各个环境,包括构思、设计、编写、调试、文档化和修订。编程的风格也很重要,只关心程序运行的结果,而对程序代码的结构的良好丝毫不在意。这是非常不可取的,如果我希望将来从事编程工作,在这一点上该引起足够的重视。这是严谨的态度,很重要。做课设不仅让我修补了以前学习的漏洞,也让我知道一个道理:编程需要兴沈阳航空航天大学设计用纸10趣和实际动手。创新思维也至关重要,这不仅让我们写出精简的代码,也有助于开发出高效的程序。这次程序的设计基本完成了题目的要求,只有一项是关于如何在时间到达后不能继续售票问题没有解决,我于是想到查询当前时间来解决。最后我要感谢帮助过我的同学和老师,让我能够在有限的时间内完成题目。六、参考文献1谭浩强.C程序设计.北京:清华大学出版社,20052刘成等.C语言程序设计实验指导与习题集.北京:中国铁道出版社,2006.七、源程序#includestdio.h#includestdlib.h#includestring.h#includeconio.h#includetime.h#defineK4/*起用宏定义变量K*/structrecord/*定义结构体类型变量*/{沈阳航空航天大学设计用纸11charNO[10];inttotal;intsell;charleave[10];}QC[K]={/*用QC[K]表示*//*给数组QC[K]赋值*/{A,500,0,0},{B,500,0,0},{C,500,0,0},{D,500,0,0},};FILE*fp;voidsearch();voidsell();voidtongji();voidleave();intmenu();voidwritetofile();voidreadfromfile();intmenu()/*定义菜单*/{intc;printf(1.查询当前的电影及售票数\n);printf(2.售票\n);printf(3.退票\n);printf(4.统计满座率\n);printf(5.退出\n);do{printf(请选择(1-5)!:);scanf(%d,&c);/*把输入的值赋给c*/if(c1||c5)printf(\n*******错误!********\n);}while(c1||c5);return(c);}voidmain()沈阳航空航天大学设计用纸12{readfromfile();for(;;){switch(menu()){case1:search();break;case2:sell();break;case3:leave();break;case4:tongji();break;case5:exit(0);}}}voidsearch()/*查询当前的电影及售票数*/{inti;printf(\n\n**********查询当前的电影及售票数**********\n);printf(场次座位数量已售票数\n);for(i=0;iK;i++)printf(%4s%10d%8d%13s\n,QC[i].NO,QC[i].total,QC[i].sell,QC[i].leave);printf(\n);}voidsell()/*售票*/{inti,m;charb[15];{printf(\n\n**********售票**********\n);printf(场次座位数量已售票数\n);for(i=0;iK;i++)printf(%4s%10d%8d%13s\n,QC[i].NO,QC[i].total,QC[i].sell,QC[i].leave);}printf(请选择场次(例如:A):\n);scanf(%s,b);/*输入的值给b*/沈阳航空航天大学设计用纸13printf(需要买的张数(例如:5):\n);scanf(%d,&m);/*输入的值给m*/for(i=0;iK;i++)if(strcmp(QC[i].NO,b)==0)/*对QC[i].NO和b进行比较*/{if(strcmp(QC[i].NO,b)=0)QC[i].sell=QC[i].sell+m;printf(******买票成功!******\n);elseprintf(******买票失败!******\n);printf(\n\n**********售票**********\n);printf(场次座位数量已售票数\n);for(i=0;iK;i++)printf(%4s%10d%8d%13s\n,QC[i].NO,QC[i].total,QC[i].sell,QC[i].leave);writetofile();}}voidlea