1、土木工程11级C课程设计任务书 作者: 日期:2 个人收集整理 勿做商业用途课 程 设 计 报 告课程名称 C语言课程设计 课题名称 车票管理系统 专 业 土木工程 班 级 1101 学 号 201109070120 姓 名 张辉 指导教师 胡倩 廖智 罗静 2012年 12 月 28 日湖南工程学院课 程 设 计 任 务 书课程名称 C课程设计 课 题 车票管理系统 专业班级 土木1101 学生姓名 张辉 学 号 201109070120 指导老师 胡倩 廖智 罗敬 审 批 任务书下达日期 2012 年 12 月 23 日任务完成日期 2012年 12 月 29 日一、设计内容与设计要求1设
2、计内容: 1.1.车票管理系统功能概述(1)录入班次信息(信息用文件保存),可不定时地增加班次数据 (2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时 间超过了某班次的发车时间,则显示“此班已发出”的提示信息).(3)查询路线(起点、终点):可按班次号查询 ,可按终点站查询 (4)增加及修改班次和删除班次信息 (5)售票和退票功能 当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数 退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数1.2车票管理系统设计思想 车票管理系统的功能为1. 录入班次2。 显示所有班次3. 查询班次4。
3、增加班次 5. 售票6. 退票7。 修改班次8. 删除班次9. 退出 车票管理系统软件的功能模块有: (1)提供菜单界面,方便用户对程序个功能进行选择,选择要实现的功能按enter键进入该功能。 (2)接受用户输入的功能项,按enter键结束输入并将进入该系统,其需要的结果显示出来,方便用户查看。2设计要求:(1) 设计正确,方案合理。(2) 界面友好,使用方便。(3) 程序精炼,结构清晰。(4) 设计报告3000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图.(5) 上机演示。二、进度安排第十七周 星期天: 课题讲解,查阅资料星期一: 总体设计,详细设计星期二、三: 编程,上机调
4、试、修改程序星期四: 上机调试、完善程序星期五: 答辩星期六: 撰写课程设计报告附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单). 正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。正文总字数要求在5000字以上(不含程序原代码)。三、程序设计说明车票信息管理系统录入班次显示班次查询班次增加班次售票功能退票功能修
5、改班次删除班次退出系统四、用户使用说明1 车票管理系统软件详细设计 一个名TICKET的结构体进行定义,包括num10 hour3; min3 from10; to10; hours max; now;等结构体成员。 然后对调用函数进行定义。int system_time()系统时间,void NewMessage() 新纪录录入函数,void ShowTable1() void ShowTable2(int i) 线框调用1和2不用没次输,void Display()显示所有函数,void add()增加记录,void save() 保存函数,void save()保存函数,void loa
6、d() 按班次查询函数,void search() 查询函数,void change()修改函数,void quit()退出函数,void Ticketorder() 售票函数,void Ticketdelete()删除函数,int menu_select()菜单函数, int whether(int)判断时间是否超出函数,void find(char s1,char s2) 查询函数/s1为班次/s2为终点站,void deletemessage()删除函数,int findnum(char s1)班次查询函数,void get(int,int)修改及增加班次,char menu菜单函数。
7、该系统将这些信息均放在文件d:车票管理系统0中。 最后定义main()函数,利用函数调用,实现程序的各种功能。将其放在系统文件d:车票管理系统0中。文档为个人收集整理,来源于网络个人收集整理,勿做商业用途2程序调试2.1 界面菜单 图1-1如上图所示,该程序为用户提供菜单界面,用户可以对程序的各种功能进行选择,方便用户使用。选择1-9并按enter键进行操作.如选择出错,系统将提出警告,并提醒用户重新进行选择.2。2 录入班次界面 图1-2 第一次输入界面 图1-3 第二次输入界面如上图所示,该功能实现录入班次信息.选择1按enter键进入该功能,程序提醒用户输入车次。发车时间.起始站。终点站
8、.行车时间。额定载量。已售票数,输入完毕后按enter键将完成录入班次结果,同时程序将再次提醒用户进行新的选择。而第二次输入时提醒已经输过,不能在加.23 查询班次界面 图14 字符串重新统计界面如上图所示,该功能实现显示所有班次。选择2按enter键进入该功能,程序提直接显示出信息,按enter键,程序进入菜单项,程序将再次提醒用户进行新的选择.2。4 查询班次界面 图1-5 查询班次界面 图 1-6 选择查询方式界面如上图所示,该功能将实现程序运行班次的查询。选择3并按enter键将实现该功能。分班次和终点站两种方式查询。2。5 增加班次界面 图1-6 增加功能界面 图 1-7 增加前界面
9、 图1-8 增加后界面如上图所示,该功能将增加班次信息,帮助用户更新班次信息.选择4并按enter键将实现该功能,再按提示输入就行.按任意键返回主菜单。2.6 售票界面图 19 选择售票功能界面 图110 选择后界面 图 111 订票界面如上图所示,该功能将帮助人们选择买票。选择5按enter键实现该功能,按任意键关闭程序。买票程序可提示买票成功否,且自动判断是否可卖。2.7 退票界面 图 112 退票时的界面如上图所示,该功能将帮助人们选择退票。选择6按enter键实现该功能,按任意键关闭程序.退票程序可提示退票成功否,且自动判断是否可退。2。8 修改界面 图 113 修改班次时的界面如上图
10、所示,该功能将帮助人们修改班次信息。选择7按enter键实现该功能,按任意键关闭程序。按提示操作修改班次。2。9 删除班次界面图 1-14 删除班次时界面如上图所示,该功能可删除班次信息。选择8按enter键实现该功能,按任意键关闭程序.按提示操作删除班次。2.10 退出界面图 1-15 退出时的界面如上图所示,该功能可退出系统。选择9按enter键实现该功能.五、总结为了提高我们的实践能力和合作能力,让我们学以致用,能灵活运用所学的知识进行再创造,学校特安排我们进行为期一周的C语言课程设计实习,并安排了专门的指导老师帮助辅导,让我们在规范化、严谨化、实用化上面有了很大进展。为今后的工作适应环
11、境。 在此次车票管理系统开发过程中,有很多东西值得我们思考并总结。 开发过程大体可分为以下几个步骤: (1)思考总体设计方案:总体结构和模块外部设计,功能分配。思考要实现整个程序大体需要的几个模块和其中用到的 C语言基本操作符、语句格式等。 (2)画出总体设计方案流程图:用流程图的形式展现你的基本编程思想。 (3)流程图具体化:即将流程图中的几大模块的具体实现思考清楚,可以用流程图的形式展现并想好实现的关键代码框架。 (4)编辑程序代码:这是一个至关重要复杂而且需要反复修改的环节,在此环节中你将发现总体设计和模块思想会存在很多问题,需不断改进如何实现各函数功能,达到预期效果也将是一项繁复的工作
12、。 (5)代码的调试:在Visual C+6。0环境下输入代码并进行调试和正确运行。在调试过程中会遇到很多需要精化的地方,需要十足的耐心与细心,不断改进完善程序. (6)最后修饰:程序可以正确运行之后,再不影响程序功能的情况下,运用各种辅助性符号,使界面更加美观漂亮,操作更人性化增强程序的新意与可行性. 通过这次课程设计,使我们更加熟悉的掌握了C语言的运用.帮助我们熟悉了更多C语言的功能,提高了我们的动手能力,学到了许多解决实际问题的宝贵经验同时也挖掘出了我们潜在的能力,使我们对自己更有自信,对编程也更有兴趣.我相信,只要努力、勤奋、坚持不懈,就没有什么做不到的事,不能还没开始就退缩,要勇于拼
13、搏,敢于创新。 本文为互联网收集,请勿用作商业用途文档为个人收集整理,来源于网络最后,在这里郑重的感谢张老师的帮助,让我得到了许多的收获。同时感谢学校提供给我们这次宝贵的实践机会,让我们可以动手动脑,大大提高了个人的能力和素质。非常的感谢! 六、源程序清单#include /宏定义函数#includestring.h /串操作及内存操作函数#includestdlib.h /调用系统函数#includetime。h /时间库函数 #includeconio。h /输入输出函数#define N 1000 /宏定义多条记录typedef struct TICKET /定义新结构体TICKETch
14、ar num10; /车次编号char hour3; /时间,小时char min3; /分钟char from10; /起始站char to10; /终点站float hours; /车程实际时间int max; /最大车载容量int now; /已售票数CLASS;int class_num=0; /初始班次总数为0 CLASS recordsN; / 多条记录int system_time(); /系统时间void NewMessage(); /新纪录*录入函数*void ShowTable1(); /线框调用1,,,不用没次输 void ShowTable2(int i); /线框调用
15、2,,不用没次输 void Display(); /显示所有函数void add(); /增加记录void save(); / 保存函数void load(); / 按班次查询函数void search(); /查询函数void change(); /修改函数* void quit(); / /退出函数*void Ticketorder(); / /售票函数* void Ticketdelete(); /删除函数int menu_select(); /菜单函数int whether(int); /判断时间是否超出函数*void find(char s1,char s2); /查询函数/s1为班
16、次/s2为终点站void deletemessage(); /删除函数int findnum(char s1); /班次查询函数void get(int,int); /修改及增加班次*char menu=*欢迎使用车票查询系统*”,”n*MENU功能菜单*,n 1. 录入班次 ,n 2。 显示所有班次 ”,n 3. 查询班次 ”,”n 4。 增加班次 ,”n 5。 售票 ,n 6。 退票 ”,n 7。 修改班次 ”,n 8. 删除班次 ,n 9。 退出 ; /*主函数*/void main()system(cls); /刷屏while(1) /菜单函数循环switch(menu_select(
17、)) /菜单函数*case 1: NewMessage();break; /新纪录录入函数*case 2: Display();break; / /显示case 3: search();break; /查找函数*case 4: add();break; / /增加记录case 5: Ticketorder();break; /*售票函数*case 6: Ticketdelete();break; /删除函数*case 7: change();break; /修改函数*case 8: deletemessage();break; /选择调用删除函数case 9: quit();break; /退
18、出函数*/*菜单函数*/int menu_select() /菜单函数char s5; /定义要输入的数字功能int c,i; system(cls”); /刷屏 system(”color 09);/改变颜色 for(i=0;i11;i+)printf(”%s,menui); /输出菜单各项) i=0; while(c0|c9) /判断是否是1到9的命令printf(”n”); /输出换行 printf(*); printf(”n请选择(1-9):”);scanf(%s”,s);c=atoi(s); /atoi将字符串转换成一个整数值 /输出菜单面return c; /返回请求 /*录入函数
19、*/void NewMessage() /录入函数* int i=0,j=5,h; /char s5;FILE fp; /定义文件型指针变量system(cls”); /刷屏if((fp=fopen(”d:车票管理系统0.dat”,”rb)!=NULL) /fopen打开文件 printf(车票信息已经存在请选择增加功能!n);printf(任意输入则返回菜单n);scanf(%s,s);i=1; /通过是1if(i=0) system(cls”); /刷屏printf(”请输入要录入班次总数:n);scanf(%d,class_num); /指向班次指针system(”cls”); /刷屏f
20、or(i=0;iclass_num;i+) system(”cls”); /刷屏printf(”请输入第%d个班次信息:n,i+1);h=1;for(;h!=i;) /循环输出printf(”请输入班次:n);scanf(s,recordsi.num);for(h=0;hi;h+)if(strcmp(recordsh。num,recordsi。num)=0) /判断字符串比较是否相等,, 待比较的字符串 printf(”输入错误!该班次已存在!n);break; /返回get(i,j); /修改及增加班次*j=5;save(); /调用保存函数/*显示所有函数*/void Display()
21、/显示所有函数int i,j;system(cls); /刷屏load(); / 调用按班次查询函数ShowTable1(); /线框调用1,,,不用没次输 for(i=0,j=0;iclass_num;i+,j+=2) /按班次顺序输出 printf(n|-|-|-|-|-|-|n”);if(whether(i)) /判断时间是否超出函数*printf(10s%5s:%-4s|%10s10s|%8.1f%8d|8d|,recordsi.num,recordsi.hour,recordsi。min,recordsi.from,recordsi。to,recordsi.hours,records
22、i.max,recordsi。now);else printf(”|10s 已发车 |10s%10s8。1f|8d8d|,recordsi。num,recordsi.from,recordsi。to,recordsi.hours,recordsi.max,recordsi.now);ShowTable2(j); /线框调用2printf(n按任意键继续。.n);getch(); /从控制台读取一个字符,但不显示在屏幕上/*打印表头*/void ShowTable1() /线框调用1,不用没次输int i=2;system(”cls”); /刷屏printf(”*MESSAGE车程信息*n”);
23、printf(n-|-|-|-|-|-n); printf(”n| 班次 | 发车时间 | 起点站 | 终点站 |行车时间额定载量 已售票 |n”);/*打印表尾*/void ShowTable2(int i) /线框调用2。不用没次输。printf(n-|-|-|-|n”);/*查找函数11*/void search() /查询调用int i;char s110=0,s210=0;system(cls”); /刷屏printf(”1。 按班次查询n);printf(”2. 按终点站查询n);printf(”3. 退出n”);printf(”请选择(13):n);scanf(%d”,&i);l
24、oad(); / 调用按班次查询函数switch(i) /多分枝选择语句 case 1: printf(”请输入要查询的班次:n); /s1为班次scanf(%s”,s1);find(s1,s2); /调用查找函数222 2 break;case 2:printf(”请输入要查询终点站:n); /s2为终点站scanf(”s”,s2);find(s1,s2); /调用查找函数222 2 break; case 3: break;default : printf(”输入错误!n);break;printf(按任意键继续.。.n);getch(); /从控制台读取一个字符,但不显示在屏幕上/*查询
25、函数22*/void find(char s1,char s2)int i,h=0,m;ShowTable1(); /调用线框1if(s20=0)m=1; /1为无条件执行else m=0;for(i=0;iclass_num;i+)if(strcmp(s1,recordsi.num)=0|strcmp(s2,recordsi。to)=0) /判断字符串比较是否相等, 待比较的字符串 printf(”n-|-|-|-|-|-n);printf(”|10s|5s:%4s|10s%10s|%8.1f8d|%8d|,recordsi。num,recordsi。hour,recordsi。min,re
26、cordsi。from,recordsi。to,recordsi.hours,recordsi。max,recordsi。now);h+=2;if(m=1)break;ShowTable2(h); /调用线框2if(h=0)printf(”要查找的班次不存在!n);/*增加函数*/void add() / /增加记录int i,j=5;load(); / 调用按班次查询函数system(cls”); /刷屏printf(1。 增加班次n);printf(2. 返回n”);printf(”请选择(1-2)n”);scanf(%d”,i);if(i=1)system(”cls”); /刷屏prin
27、tf(”1。 请输入要增加的班次:n);scanf(”s,recordsclass_num.num);for(i=0;iclass_num;i+)if(strcmp(recordsclass_num。num,recordsi。num)=0)/判断字符串比较是否相等,, 待比较的字符串 判断车次没重复 printf(输入错误!n);getch(); /从控制台读取一个字符,但不显示在屏幕上break;if(i=class_num) get(i,j); /修改及增加班次class_num+; /使班次数加1save(); /调用保存函数/*售票函数*/void Ticketorder() /售票函
28、数*int i;char num10;system(cls”); /刷屏printf(”1。 售票n);printf(2。 返回n”);printf(请选择(1-2):n);scanf(”d”,&i);if(i=1)load(); / 调用按班次查询函数search(); /查找函数*printf(”请输入要订票的班次(若无请输入0):n”);scanf(”%s”,num);for(i=0;iclass_num;i+)if(strcmp(num,recordsi。num)=0)/判断字符串比较是否相等, 待比较的字符串 if(recordsi.maxrecordsi.now&whether(i
29、)=1) /判断时间是否超出函数*并且*没超出最大客量recordsi。now+; /使已售的暑假1printf(通向s班次为%s的票订票成功!n”,recordsi。to,recordsi。num);save(); /调用保存函数getch(); /从控制台读取一个字符,但不显示在屏幕上break;elseprintf(该班次已满或已发出!n);getch(); /从控制台读取一个字符,但不显示在屏幕上/*退票删除函数*/void Ticketdelete() /删除函数*int i;char num10;system(cls); /刷屏printf(”1。 退票n);printf(2. 返
30、回n);printf(请选择(12)n:”);scanf(%d”,&i);if(i=1)system(”cls”); /刷屏load(); / 调用按班次查询函数printf(请输入要退票的班次:n”);scanf(”%s,num);i=findnum(num); /调用班次查询函数if(strcmp(num,recordsi.num)=0) /判断字符串比较是否相等 待比较的字符串 if(whether(i)) /判断时间是否超出函数*printf(”确定(Y/N)?”);scanf(”s”,num);if(num0=y|num0=Y) recordsi.now-; /使已售票加1printf(退票成功!n”);save(); /调用保存函数getch(); /从控制台读取一个字符,但不显示在屏幕上elseprintf(”该班车已发出,无法退票!n);getch(); /从控制台读取一个字符,但不显示在屏幕上if(i=class_num)printf(输入错