简单的汽车站售票系统.docx
- 文档编号:11399475
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:17
- 大小:121KB
简单的汽车站售票系统.docx
《简单的汽车站售票系统.docx》由会员分享,可在线阅读,更多相关《简单的汽车站售票系统.docx(17页珍藏版)》请在冰豆网上搜索。
简单的汽车站售票系统
沈阳航空工业学院
课程设计
学号200504061274
班级5406108
姓名胡乃杰
指导教师尹航
2007年7月17日
沈阳航空工业学院
课程设计任务书
机械与汽车学院机械设计制造及其自动化专业5406108班学号200504061274
一、课程设计题目:
简单的汽车站售票系统
二、课程设计工作自2007年7月9日起至2007年7月17日止
三、课程设计内容:
用C语言编写软件完成以下任务:
每天“沈阳→植物园”有5个班次的汽车(假设),具体的数据如下:
班次发车时间载客量已售票数
106:
40500
209:
30400
313:
00400
416:
00400
520:
00500
请你为售票员开发一个小程序,以完成每天的“沈阳→植物园”的售票业务。
要求:
①能够售票和退票。
②某个班次已经过了开车时间,则该班次今天不再售票。
③可以随时显示售票现状,并以文件(myfile.txt)形式保存当天各个车次的售票情况。
四、课程设计要求:
程序质量:
●贯彻结构化程序设计思想。
●用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。
●用户界面中的菜单至少应包括“售票”、“退票”、“显示当前售票情况”、“保存当天数据”、“退出”5项。
●代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:
●封面
●课程设计任务书
●目录
●需求分析(分析题目的要求)
●程序流程图(总体流程图和主要功能模块流程图)
●核心技术的实现说明及相应程序段
●个人总结
●参考资料
●源程序及适当的注释
指导教师:
________________学生签名:
________________
目录
一、需求分析1
二、程序流程图2
三、核心技术的实现说明及相应程序段5
四、个人总结9
五、参考文献10
六、源程序10
一、需求分析
根据对程序设计题目的分析可知,整个程序的设计实现大致可分为五大模块。
其中每一个模块对应一个函数,他们的功能分别是:
查询当前时间(localtimes),查询当前的售票情况(search),买票(sell),退票(return)和保存数据(save)。
在这几个函数中,除第一个外其他都按照题目要求编写。
1、查询当前时间主要用于查询时间,以防止汽车已经发出还继续进行售票。
2、查询当前售票情况主要用于查询当前的卖票情况。
3、买票对顾客出售各车次车票。
4、退票对顾客需要返退的车票进行处理。
5、保存数据对当前的车票出售情况进行保存,生成myfile.txt文件,以便查询。
除此之外,程序还设立了退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
并且每一次售票或退票都会提示是否成功,并且将文件自动保存到myfile.txt中,以便查询。
二、程序流程图
1、程序总体结构图
图1总体结构图
2、查询车次函数search结构图
图2查询车次函数search结构图
3、售票函数sell结构图
图3售票函数sell结构图
4、退票函数return结构图
图4退票函数return结构图
5、保存文件函数save结构图
图5保存文件函数save图
三、核心技术的实现说明及相应程序段
本程序主要由五个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。
在这些函数当中,查询当前售票情况函数、售票函数、退票函数和保存当天售票记录函数是程序中较为核心的部分,下面分别进行说明。
1、查询当前售票情况函数(search)
查询当前时间是通过一个循环命令,使结构体内的容依次输出,这样就可以看到当天全部的售票情况。
具体程序如下:
voidsearch()/*查询当前的车次及售票数*/{
inti;
printf("\n\n**********SearchResult**********\n");
printf("NO.TimeTotalSellLeave\n");
for(i=0;i printf("%4s%10s%10s%8d%8d\n",QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave); printf("\n"); } 2、售票函数(sell) 售票函数是先用循环语句输出当前的售票情况,然后依次输入需要购买的车号b以及要购买的票数m,然后将结构体中的车号QC[i].NO与b进行比较,成功后原售票数数组QC[i].sell+m,原剩余票数数组QC[i].leave-m,依次输出结构体中的内容,最后运行保存程序(save)。 具体程序如下: voidsell()/*售票*/ { inti,m; charb[15]; { printf("\n\n**********SellResult**********\n"); printf("NO.TimeTotalSellLeave\n"); for(i=0;i printf("%4s%10s%10s%8d%8d\n",QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave); } printf("PleaseenterthecarNO.youwanttobuy! (For Example: 02): \n"); scanf("%s",b);/*输入的值给b*/ printf("PleaseentertheticketNO.youwanttobuy! (ForExample: 5): \n"); scanf("%d",&m);/*输入的值给m*/ for(i=0;i if(strcmp(QC[i].NO,b)==0)/*对QC[i].NO和b进行比较*/ { QC[i].sell=QC[i].sell+m; QC[i].leave=QC[i].leave-m; printf("******PurchaseSuccess! ******\n"); printf("\n\n**********SellResult**********\n"); printf("NO.TimeTotalSellLeave\n"); for(i=0;i printf("%4s%10s%10s%8d%8d\n",QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave); save(); } } 3、退票函数(leave) 退票函数是先用循环语句输出当前的售票情况,然后依次输入需要购买的车号b以及要购买的票数m,然后将结构体中的车号QC[i].NO与b进行比较,如果售票数大于m则原售票数数组QC[i].sell-m,原剩余票数数组QC[i].leave+m,依次输出结构体中的内容,最后运行保存程序(save)。 具体程序如下: voidleave()/*退票*/ { inti,m; charb[15]; { printf("\n\n**********PresentSituation**********\n"); printf("NO.TimeTotalSellLeave\n"); for(i=0;i printf("%4s%10s%10s%8d%8d\n",QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave); } printf("PleaseenterthecarNO.youwanttoreturn! (ForExample: 02): \n"); scanf("%s",b);/*输入的值给b*/ printf("PleaseentertheticketNO.youwanttoreturn! (ForExample: 3): \n"); scanf("%d",&m);/*输入的值给m*/ for(i=0;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; QC[i].leave=QC[i].leave+m; printf("******ReturnSuccess! ******\n"); printf("\n\n**********ReturnResult**********\n"); printf("NO.TimeTotalSellLeave\n"); for(i=0;i printf("%4s%10s%10s%8d%8d\n",QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave); save(); } } 4、保存函数(leave) 打开名字是myfile.txt的文件,使用文件方式为读写,用循环语句将结构体中的内容依次写入文件,完成对售票情况的保存。 具体程序如下: voidsave()/*对当前售票情况进行保存*/ { FILE*fp;/*打开文件*/ inti; if((fp=fopen("myfile.txt","w+"))==NULL) { printf("******Cannotopeninfile! ******\n"); exit(0); } for(i=0;i fwrite(&QC[i],sizeof(structrecord),1,fp);/*写入文件*/ fclose(fp);/*关闭文件*/ printf("\n"); printf("******SaveSuccess! ******\n\n"); } 四、个人总结 这次课程设计基本上含盖了大学一年纪学习到的C语言知识点,课设题目要求不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。 这次课设使我了解我编程思想和编程技巧,也认识了软件生命周期的各个环境,包括构思、设计、编写、调试、文档化和修订。 编程的风格也很重要,只关心程序运行的结果,而对程序代码的结构的良好丝毫不在意。 这是非常不可取的,如果我希望将来从事编程工作,在这一点上该引起足够的重视。 这是严谨的态度,很重要。 做课设不仅让我修补了以前学习的漏洞,也让我知道一个道理: 编程需要兴趣和实际动手。 创新思维也至关重要,这不仅让我们写出精简的代码,也有助于开发出高效的程序。 这次程序的设计基本完成了题目的要求,只有一项是关于如何在时间到达后不能继续售票问题没有解决,我于是想到查询当前时间来解决。 最后我要感谢帮助过我的同学和老师,让我能够在有限的时间内完成题目。 五、参考文献 1谭浩强.C程序设计.北京: 清华大学出版社,2005 2刘成等.C语言程序设计实验指导与习题集.北京: 中国铁道出版社,2006 六、源程序 #include #include #include #include #include #defineK5/*起用宏定义变量K*/ structrecord/*定义结构体类型变量*/ { charNO[10]; chartime[20]; chartotal[20]; intsell; intleave; }QC[K]={/*用QC[K]表示*//*给数组QC[K]赋值*/ {"01","06: 40","50",0,50}, {"02","09: 30","40",0,40}, {"03","13: 00","40",0,40}, {"04","16: 00","40",0,40}, {"05","20: 00","50",0,50}, }; voidsearch(); voidsave(); voidsell(); voidlocaltimes(); voidleave(); intmenu(); intmenu()/*定义菜单*/ { intc; printf("1.Time.\n"); printf("2.Serch.\n"); printf("3.Sell.\n"); printf("4.Return.\n"); printf("5.Save.\n"); printf("6.Exit.\n"); do { printf("Pleasechoose(1-6)tobegin! : "); scanf("%d",&c);/*把输入的值赋给c*/ if(c<1||c>6) printf("\n*******Error! ********\n"); } while(c<1||c>6); return(c); } main() { for(;;) { switch(menu()) { case1: localtimes();break; case2: search();break; case3: sell();break; case4: leave();break; case5: save();break; case6: exit(0); } } } voidlocaltimes()/*显示当前时间*/ { time_trawtime; structtm*timeinfo; time(&rawtime); timeinfo=localtime(&rawtime); printf("Thecurrentdate/timeis: %s\n",asctime(timeinfo)); } voidsearch()/*查询当前的车次及售票数*/{ inti; printf("\n\n**********SearchResult**********\n"); printf("NO.TimeTotalSellLeave\n"); for(i=0;i printf("%4s%10s%10s%8d%8d\n",QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave); printf("\n"); } voidsell()/*售票*/ { inti,m; charb[15]; { printf("\n\n**********SellResult**********\n"); printf("NO.TimeTotalSellLeave\n"); for(i=0;i printf("%4s%10s%10s%8d%8d\n",QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave); } printf("PleaseenterthecarNO.youwanttobuy! (ForExample: 02): \n"); scanf("%s",b);/*输入的值给b*/ printf("PleaseentertheticketNO.youwanttobuy! (ForExample: 5): \n"); scanf("%d",&m);/*输入的值给m*/ for(i=0;i if(strcmp(QC[i].NO,b)==0)/*对QC[i].NO和b进行比较*/ { QC[i].sell=QC[i].sell+m; QC[i].leave=QC[i].leave-m; printf("******PurchaseSuccess! ******\n"); printf("\n\n**********SellResult**********\n"); printf("NO.TimeTotalSellLeave\n"); for(i=0;i printf("%4s%10s%10s%8d%8d\n",QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave); save(); } } voidleave()/*退票*/ { inti,m; charb[15]; { printf("\n\n**********PresentSituation**********\n"); printf("NO.TimeTotalSellLeave\n"); for(i=0;i printf("%4s%10s%10s%8d%8d\n",QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave); } printf("PleaseenterthecarNO.youwanttoreturn! (ForExample: 02): \n"); scanf("%s",b);/*输入的值给b*/ printf("PleaseentertheticketNO.youwanttoreturn! (ForExample: 3): \n"); scanf("%d",&m);/*输入的值给m*/ for(i=0;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; QC[i].leave=QC[i].leave+m; printf("******ReturnSuccess! ******\n"); printf("\n\n**********ReturnResult**********\n"); printf("NO.TimeTotalSellLeave\n"); for(i=0;i printf("%4s%10s%10s%8d%8d\n",QC[i].NO,QC[i].time,QC[i].total,QC[i].sell,QC[i].leave); save(); } } voidsave()/*对当前售票情况进行保存*/ { FILE*fp;/*打开文件*/ inti; if((fp=fopen("myfile.txt","w+"))==NULL) { printf("******Cannotopeninfile! ******\n"); exit(0); } for(i=0;i fwrite(&QC[i],sizeof(structrecord),1,fp);/*写入文件*/ fclose(fp);/*关闭文件*/ printf("\n"); printf("******SaveSuccess! ******\n\n"); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 汽车站 售票 系统