您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言集中上机实验报告 - 车票管理系统
C语言集中上机报告院系:计算机学院班级:xxx姓名:xxx合作者:无指导教师:xxx2009年6月11日车车票票管管理理系系统统目录一.概述.....................................................................................................3二.总体方案设计.....................................................................................3三.详细设计.............................................................................................5四.程序的调试与运行结果说明............................................................8五.课程设计总结...................................................................................10六.后记...................................................................................................10七.附录...................................................................................................11参考文献...................................................................................................20一概述1.课程设计的目的熟练掌握C语言的应用及特点;掌握函数声明、定义和使用的方法;熟练掌握C语言中的对文件进行操作的基本方法;熟练掌握结构体的使用方法;掌握链表的基本操作。2.课程设计的要求1.要求利用C语言面向过程的编程思想完成系统设计;2.突出C语言的函数特征,以多个函数实现每一个子功能;3.画出功能模块图;4.进行简单的界面设计,能够实现友好交互;5.具有清晰的程序流程图和数据结构的详细定义;6.源码格式规范,要有适当的注释,使程序容易阅读。3.课程设计的主要设计思想这次设计的车票管理系统,实现了对车票的实时管理,功能包括录入、增加班次信息(信息用文件保存),浏览班次信息,查询路线以及售票和退票功能。主要使用了链表实现了数据的保存和修改,同时使用文件相关函数对文件进行同步。二总体方案设计这个程序比较简单,主要分为菜单,浏览/查询,售票/退票,和增加数据四个部分。采用了链表作为存储的方式,并实现了结构体与文件的同步修改,已经具备了题目要求的所有功能。这个程序由我个人完成。在编程过程中遇到的关键问题有系统时间的获取与显示,从文件中读取链表,处理每天班次的人数刷新问题,以及如何提高代码的复用率等。程序整体框图如下:启动程序文件是否存在5增加新班次记录结构体链表文件是否为空否是是修改3查找班次4退出系统数据文件banci.dat修改菜单1-5否关闭文件将文件读入结构体链表更新班次日期等读取写入修改1显示班次读取调用2售票/退票调用判断是否能够售票/退票(根据时间,已订票人数)是修改三详细设计程序结构以及各函数的具体功能main.c:voidmain();程序入口,对文件进行打开和初始化后进入菜单voidmenu(structbanci*head,structbanci*nw,FILE*data,unsignedintserial);显示菜单,从主函数中得到各种信息,通过switch语句调用其他功能operate.c:voidupdate(structbanci*ut,FILE*data);更新结构体中的各个数据,主要对日期进行处理,当班次更新后重新写入日期并将已订票人数清零voiddisplaybanci(structbanci*head,unsignedshortmode);作为整个程序中唯一的数据显示函数,显示班次信息,有3个显示模式structbanci*addbanci(structbanci*tail,FILE*data,unsignedserial);增加一条新的班次信息到链表末尾,并写入文件voidsearchbanci(structbanci*head);查找班次信息,可按班次号查询或按终点站查询voidpiao(structbanci*head,FILE*data);实现售票和退票功能,并自动更新文件operate.h声明结构体和各个自定义函数部分函数的算法分析1.对文件进行打开和初始化。这个功能在主函数main()中完成。有关代码如下,具体功能解释在程序注释中。FILE*data;structbanci*head,*nw;head=(structbanci*)malloc(sizeof(structbanci));if((data=fopen(banci.dat,r+))==NULL){data=fopen(banci.dat,w);printf(\n\n建立新文件,请至少输入一条班次记录\n);nw=addbanci(head,data,1);head=nw;}elseif(fread(head,sizeof(structbanci),1,data)==0)//判断文件是否为空。fread()返回的是读取成功的数据块数目,返回0说明读取失败。若文件不为空则实现读取文件{printf(\n\n数据文件是空的,请至少输入一条班次记录\n);nw=addbanci(head,data,1);head=nw;}else{nw=head;}while(1)//把整个链表从文件中读出来,同时获取目前的班次总数{serial++;//if(nw-next==NULL)break;//这么判断结尾时不可行的,因为nw-next已经被赋值不可能为空了nw-next=malloc(sizeof(structbanci));if((fread(nw-next,sizeof(structbanci),1,data))==0)//逐条读取。若遇到结尾,结束读取{nw-next=NULL;break;}nw=nw-next;}2.update()函数。使用这个函数主要是考虑到系统日期变化后对班次的售票信息进行更新。在程序中每进入一次菜单就要执行一次update()函数。当结构体中存储的年月日和系统目前的时间都相等是则跳过并不清零已订票人数,否则对结构体进行更新并清零已订票人数。主要代码如下:if(nowtime.wYear==ut-fache.wYear&&nowtime.wMonth==ut-fache.wMonth&&nowtime.wDay==ut-fache.wDay){fseek(data,sizeof(structbanci),1);//不需要更新,则跳过这个结构体,不写文件}else{ut-fache.wYear=nowtime.wYear;ut-fache.wMonth=nowtime.wMonth;ut-fache.wDay=nowtime.wDay;ut-fache.wDayOfWeek=nowtime.wDayOfWeek;ut-yidingpiaorenshu=0;fwrite(ut,sizeof(structbanci),1,data);}3.displaybanci()函数。通过显示模式这一变量,实现了代码的重复利用。当显示整个链表时,循环显示所有信息;当在查找中仅需要显示单条记录时,不再继续显示之后的信息。这是有关显示模式的主要代码:while(head!=NULL){………………………………if(mode==1||mode==3)//显示全部记录时,继续显示head=head-next;if(mode==2)//显示单条记录时,不再显示break;}if(mode==1)getch();//模式2和3不需要暂停,故有这个判断4.关于班次的序列号。这个程序中班次是固定的,不需要修改或删除,故班次的序号又系统自动分配,不需要输入。在程序开始初始化文件时,就获取了目前的班次总数,若再增加班次,则序列号自动加一。具体实现:(菜单menu()中)case'5':serial++;nw=addbanci(nw,data,serial);break;(addbanci()中)newnode-serial=serial;四程序的调试与运行结果说明1.启动程序,提示输入第一条记录建立文件————————————————————————————建立新文件,请至少输入一条班次记录这是第1个班次输入发车时间(小时:分钟)————————————————————————————2.若文件为空,也提示输入第一条记录————————————————————————————数据文件是空的,请至少输入一条班次记录这是第1个班次输入发车时间(小时:分钟)————————————————————————————3.输入记录后进入菜单,使用了简单的文本菜单界面————————————————————————————C题目二十三:车票管理系统今天是2009年6月12日,目前读取的时间为8时37分1.浏览班次信息2.售票/退票3.查询班次4.退出系统5.增加班次————————————————————————————4.浏览班次信息————————————————————————————浏览班次班次发车时间起点站终点站行车时间额定载量已定票人数是否已发出18:00aaabbb0.5400已发出223:00bbbaaa0.5402312:00rtfbbb1.5401417:30bbbrtf1.5400519:30tttrtf0.3400————————————————————————————6.查询班次信息,按终点站查询————————————————————————————查询班次1.按班次号查询2.按终点站查询输入要查询的终点站:bbb浏览班次班次发车时间起点站终点站行车时间额定载量已定票人数是否已发出18:00aaabbb0.5400已发出浏览班次班次发车时间起点站终点站行车时间额定载量已定票人数是否已发出312:00rtfbbb1.5401————————————————————————————7.售票、退票,以售票为例————————————————————————————浏览班次班次发车时间起点站终点站行车时间额定载量已定票人数是否已发出18:00aaabbb0.5400已发出223:00bbbaaa0.5402312:00rtfbbb1.5402417:30bbbrtf1.5400519:30tttrtf0.3400售票/退票1.售票2.退票输入要售票的班次号:3第3班次完成一次售票————————————————————————————8.增加班次信息————————————————————————————这是第6个班次输入发车时间(小时:分钟)10:15输入起点站ytr输入终点站aaa输入行车时间(分钟)60输入额定载量32————————————————————————————五课程设计总结经过测试,这个系统已经达到了题目中的全部要求。从功能上讲,这个程序还有不完善的地方,如不能修改或删除班次信息等。另外,由于追求代码复用率的原因,在查询班次时会显示出多余的信息,有待进一步改进。这个程序有一个特点就是界面简明,但从另一方面讲也可以说是界面简陋,如果可能的话,下一个版本将采用图形界面。在编程过程中也遇到了一些困难,
本文标题:C语言集中上机实验报告 - 车票管理系统
链接地址:https://www.777doc.com/doc-6012381 .html