1、C语言课程设计报告武 汉 科 技 大 学C程序设计课程设计报告设计题目: 汽车售票系统 学生姓名: 学 号: 班 级:_ 电子信息工程0802班_ 指导老师: 日 期: 1. 题目与要求1.1问题提出:计划编写一个汽车售票系统的程序,以帮助售票员完成汽车售票业务。1.2本系统涉及的知识点:结构体、数组、循环(for循环,while语句,switch语句等)、函数、分支、指针和文件的一些简单应用。1.3功能要求:(1)能够售票和退票,并以文件的形式保存当天各个车次的售退票情况。售票功能当查询出已订票人数小于额定载量且系统时间小于发车时间才能售票,自动更新已售票人数。退票功能退票时,输入退票的班次
2、,当本班车未发出时才能退票,自动更新已售票人数。(2)查询显示功能。可以随时显示当前售票现状(如:班次 发车时间 载客量 已售票数 余票等信息)。(3) 用户界面中的菜单至少应包括“售票”、“退票”、“显示当前售票情况”、“保存当天数据”、“退出”5项。可适当增加其他附加功能。2.功能设计2.1算法设计:该程序要求具备“售票”、“退票”、“显示当前售票情况”、“保存当天数据”、“退出”5项功能。首先编写一个menue函数,对这五项功能进行简要介绍。对“售票”功能:进入系统后,首先选择购票方式,输入汽车班次或发车时间后,即显示出售票情况。对“退票”功能:首先输入所退票的班次,在确认输入信息正确并
3、且车未发出后则退票成功,并修改系统中的相关信息。对“显示当前售票情况”功能:将当前的售票情况按相应的格式输出。对“保存当天数据”功能:打开程序所在的文件,在文件中按相应格式输出对应的汽车班次情况,然后关闭文件。通过“Cur_tim”函数获取系统当前时间。2.2 部分模块流程图3.程序代码设计:Amenue函数:/*菜单项*/void menue(void) system(cls);/*清屏*/ printf(tt*售票系统*n); printf(t1.售票n); printf(t2.退票n); printf(t3.显示当前售票情况n); printf(t4.保存当天数据n); printf(t
4、5.退出n); printf(请选择:);B售票函数:/*售票*/void Sell(struct Tickit tickit,int n) int select,flag=1,i,no,flag2=1,flag1=1,H,M; system(cls); printf(tt*售票系统*n); printf(售票:按7退出n); printf(请选择购票方式:5-按班次购票;6-按发车时间购票;按7退出:); scanf(%d,&select);/*等待用户选择购票方式*/ while(select!=7)/*非退出*/ switch(select) case 5:/*按班次售票*/ print
5、f(请输入汽车班次:); scanf(%d,&no); for(i=0;itickiti.Start_Time0|(Hour=tickiti.Start_Time0&Mintickiti.Start_Time1)/*已发出的班次不能购票*/ printf(对不起,该车已发出。不能购票.n); break; printf(%dn,tickiti.No); printf(详细信息:n); min=change(tickiti.Start_Time1); printf(班次t发车时间t载客量t已售n); printf(%dt%d:%c%dtt%dt%dn,tickiti.No,tickiti.Sta
6、rt_Time0,min,tickiti.Start_Time1,tickiti.Pasenger_Total,tickiti.Sold_Ticklts); printf(请输入购票数量:);scanf(%d,&count); if(tickiti.Sold_Ticklts+count=tickiti.Pasenger_Total) printf(确认购买?y/nn); if(_getch()=y|_getch()=Y) tickiti.Sold_Ticklts+=count ;/*购买成功,已售票额更新*/ printf(购买成功!n); else printf(票额不足!n); break
7、; if(flag2) printf(该班次不存在,请核对后购买!n); break; case 6:/*按发车时间来购票(基本思路同上)*/ printf(友情提示:汽车时间表:n); printf(06:40t09:30t12:00t14:30t16:00n); printf(请输入发车时间(时 分格式):); scanf(%d%d,&H,&M); for(i=0;itickiti.Start_Time0|(Hour=tickiti.Start_Time0&Mintickiti.Start_Time1) printf(对不起,该车已发出。不能购票.n); break; printf(详细信
8、息:n); min=change(tickiti.Start_Time1); printf(班次t发车时间t载客量t已售n); printf(%dt%d:%c%dtt%dt%dn,tickiti.No,tickiti.Start_Time0,min,tickiti.Start_Time1,tickiti.Pasenger_Total,tickiti.Sold_Ticklts); printf(请输入购票数量:);scanf(%d,&count); if(tickiti.Sold_Ticklts+counttickitno.Start_Time0|(Hour=tickitno.Start_Tim
9、e0&Mintickitno.Start_Time1)/*已发出的班次不能退*/ printf(对不起,该车已发出。不能退票.n); else int count; printf(请输入退票数额:); scanf(%d,&count); /*更新*/ tickitno-1.Sold_Ticklts-=count; tickitno-1.Back_count+=count; printf(退票成功!); printf(按任意键继续.); _getch();/*显示当前*/void Show_Curr(struct Tickit tickit,int n) int i; system(cls);
10、printf(tt*售票系统*n当前票额信息:n); printf(班次t发车时间t载客量t已售n); for(i=0;in;i+)/*遍历所有班次*/ char min; min=change(tickiti.Start_Time1); printf(%dt%d:%c%dtt%dt%dn,tickiti.No,tickiti.Start_Time0,min,tickiti.Start_Time1,tickiti.Pasenger_Total,tickiti.Sold_Ticklts); printf(按任意键退出.); _getch();D保存当日数据 save函数:/*保存当日数据*/vo
11、id Save(struct Tickit tickit,int n) int i; FILE * p; p=fopen(Tickit.txt,w);/*文件指针。以“写”的方式打开文件“Tickit.txt”,不存在则创建*/ /*开始写入数据*/ fprintf(p,售票情况:n); fprintf(p,班次t发车时间t载客量t已售t曾退票数n); for(i=0;in;i+)/*遍历结构体数组中的信息,写入文件*/ char min; min=change(tickiti.Start_Time1); fprintf(p,%dt%d:%c%dtt%dt%dt%dn,tickiti.No,t
12、ickiti.Start_Time0,min,tickiti.Start_Time1,tickiti.Pasenger_Total,tickiti.Sold_Ticklts,tickiti.Back_count); /*写入结束*/ printf(保存成功!); _getch(); fclose(p);/*关闭已打开的文件*/E加载车票信息 load函数:/*加载车票信息*/void Load(struct Tickit tickit) int i; for(i=1;i=5;i+)/*初始化结构体数组*/ tickiti-1.No=i; tickiti-1.Sold_Ticklts=0; ti
13、ckiti-1.Back_count=0; /*开始加载*/ tickit0.Start_Time0=6; tickit0.Start_Time1=40; tickit1.Start_Time0=9; tickit1.Start_Time1=30; tickit2.Start_Time0=12; tickit2.Start_Time1=0; tickit3.Start_Time0=14; tickit3.Start_Time1=30; tickit4.Start_Time0=16; tickit4.Start_Time1=0; tickit0.Pasenger_Total=tickit4.Pa
14、senger_Total=50; tickit1.Pasenger_Total=tickit2.Pasenger_Total=tickit3.Pasenger_Total=40; /*结束*/4.C程序设计总结:这一次的C程序设计让我的C语言驾驭能力有了很大的提高。从对老师给我们的课题目瞪口呆,到逐渐深入学习探索,再到不断修改调试程序,最后达到标准状态,整个过程中我学习了很多原来没有接触过的C语言知识,比如如何清屏,如何调用系统时间,同时也对很多原来不是很熟悉的知识进行了更深入的学习,比如结构体知识。在编写程序的过程中,我也比较粗心,常常把字母,单词拼错,导致一些小的错误。这些小的错误在程序设
15、计过程中是完全可以避免的。同时,在编程过程中,我深刻的意识到作为一名编程人员,耐心和细心是必不可少的优秀品质,通过本次设计,我的细心程度有所提高,也更加锻炼了做事耐心的优秀品质。我还从总学到了一种比较高效的学习方法,就是理论与实践相结合的学习方法。只有在理论的基础上加以实践,加以感受,才能更好的理解理论知识,才能更好的掌握需要学习的知识,从而更好的运用。参考文献1 谭浩强,C程序设计(第二版),北京:清华大学出版社,2007.1 2 陈朔鹰,C语言程序设计习题集,北京:人民邮电出版社,2003.6附录:程序清单:#include#include#include#include#include
16、/*存储车票信息*/struct Tickit int No; /*车票编号*/ int Start_Time2; /*发车时间*/ int Pasenger_Total; /*最大票额*/ int Sold_Ticklts; /*已售票额*/ int Back_count; /*退票数额*/;void menue(void); /*菜单项*/void Sell(struct Tickit tickit,int n);/*售票模块*/void Back(struct Tickit tickit);/*退票模块*/void Show_Curr(struct Tickit tickit,int n
17、);/*显示当日信息*/void Save(struct Tickit tickit,int n);/*文件存盘.txt文件格式*/void Load(struct Tickit tickit);/*加载车票信息*/void Cur_Tim();/*获取系统当前时间*/char change(int n);/*转化输出*/#define N 5 /*定义车票种类数*/int Hour,Min; /*全局变量,保存系统当前的时间*/void main(void) int select; struct Tickit tickitN; Load(tickit);/*加载车票*/ Cur_Tim();
18、/*获取系统时间*/ menue();/*显示菜单*/ scanf(%d,&select);/*等待用户选择功能*/ while(select!=5)/*选择为非退出*/ int flag=1; switch(select)/*根据用户选择进入相应模块*/ case 1:Sell(tickit,N); break; case 2:Back(tickit); break; case 3:Show_Curr(tickit,N); break; case 4:Save(tickit,N); break; default: printf(您的输入有误,请重新输入:); flag=0; if(flag)
19、 menue(); scanf(%d,&select); else scanf(%d,&select); /*菜单项*/void menue(void) system(cls);/*清屏*/ printf(tt*售票系统*n); printf(t1.售票n); printf(t2.退票n); printf(t3.显示当前售票情况n); printf(t4.保存当天数据n); printf(t5.退出n); printf(请选择:);/*售票*/void Sell(struct Tickit tickit,int n) int select,flag=1,i,no,flag2=1,flag1=1
20、,H,M; system(cls); printf(tt*售票系统*n); printf(售票:按7退出n); printf(请选择购票方式:5-按班次购票;6-按发车时间购票;按7退出:); scanf(%d,&select);/*等待用户选择购票方式*/ while(select!=7)/*非退出*/ switch(select) case 5:/*按班次售票*/ printf(请输入汽车班次:); scanf(%d,&no); for(i=0;itickiti.Start_Time0|(Hour=tickiti.Start_Time0&Mintickiti.Start_Time1)/*已
21、发出的班次不能购票*/ printf(对不起,该车已发出。不能购票.n); break; printf(%dn,tickiti.No); printf(详细信息:n); min=change(tickiti.Start_Time1); printf(班次t发车时间t载客量t已售n); printf(%dt%d:%c%dtt%dt%dn,tickiti.No,tickiti.Start_Time0,min,tickiti.Start_Time1,tickiti.Pasenger_Total,tickiti.Sold_Ticklts); printf(请输入购票数量:);scanf(%d,&cou
22、nt); if(tickiti.Sold_Ticklts+count=tickiti.Pasenger_Total) printf(确认购买?y/nn); if(_getch()=y|_getch()=Y) tickiti.Sold_Ticklts+=count ;/*购买成功,已售票额更新*/ printf(购买成功!n); else printf(票额不足!n); break; if(flag2) printf(该班次不存在,请核对后购买!n); break; case 6:/*按发车时间来购票(基本思路同上)*/ printf(友情提示:汽车时间表:n); printf(06:40t09:30t12:00t14:30t16:00n); printf(请输入发车时间(时 分格式):); scanf(%d%d,&H,&M); for(i=0;itickiti.Start_Time0|(Hour=tickiti.Start_Time0&Mintickiti.Start_Time1) printf(对不起,该车已发出。不能购票.n); break; printf(详细信息:n);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1