火车票售票系统C.doc

上传人:PIYPING 文档编号:11476718 上传时间:2021-08-07 格式:DOC 页数:21 大小:302.35KB
返回 下载 相关 举报
火车票售票系统C.doc_第1页
第1页 / 共21页
火车票售票系统C.doc_第2页
第2页 / 共21页
火车票售票系统C.doc_第3页
第3页 / 共21页
火车票售票系统C.doc_第4页
第4页 / 共21页
火车票售票系统C.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《火车票售票系统C.doc》由会员分享,可在线阅读,更多相关《火车票售票系统C.doc(21页珍藏版)》请在三一文库上搜索。

1、 C语言程序设计-车票管理系统Computer programming项目报告题 目:车票管理系统项目完成人及学号:边 浩 (101144101)张鹤从 (101041234)杨 旭 (090543136)完成日期: 2013.12.21目 录1.问题描述 .32.系统功能分解 2.1模块结构 .3 2.2 程序流程图 2.2.1 主程序模块 .4 2.2.2 录入车次信息模块 .4 2.2.3 现有班次浏览模块 .4 2.2.4 班次查询模块 .5 2.2.5票务系统(购票及退票)模块 .53 程勋运行和调试 .64. 总结和提高 .125. 程序清单 .131.问题描述 一车站每天有n个发

2、车班次,每个班次都有一班次号(1、2、3n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。如班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数1 8:00 郫县 广汉 2 45 302 6:30 郫县 成都 0.5 40 403 7:00 郫县 成都 0.5 40 204 10:00 郫县 成都 0.5 40 2功能要求: (1)录入班次信息(信息用文件保存),可不定时地增加班次数据(2)浏览班次信息,可显示出所有班次当前状况(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。(3)查询路线:可按班次号查询 ,可按终点站查

3、询(4)售票和退票功能 A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数 B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数2.系统功能分解录入班次信息浏览现有班次车票管理系统线路查询按班次按终点票务系统购票退票辅助功能:清屏、退出2.1模块结构2.2 程序流程图开始2.2.1主程序模块清屏操作调用票务系统模块调用班次查询模块调用班次浏览模块调用录入车次信息模块终止录入完成返回主界面开始输入班次编号输入发车时间调用信息录入模块输入起始站输入终点站输入行车时间输入载客限额2.2.2 录入车次信息模块 2.2.3 现有班次浏览模块显示

4、所有车次信息返回主界面调用已录入数据模块选用浏览功能模块开始2.2.4 班次查询模块按终点站查询按班次查询无对应信息输入终点站输入班次号显示所查询班次信息返回主界面报错返回主界面开始选择查询模式信息比对信息比对无对应信息有对应信息有对应信息开始选择票务模块调用购票模块调用退票模块选择购票选择退票输入车次信息输入车次信息报错退出显示车次信息询问是否确认显示车次信息询问是否确认返回主菜单显示“购票成功”已售车票项+1显示“退票成功”已售车票项-1确认或无对应车次2.2.5 票务系统(购票/退票)模块对应车次票已售完或无对应车次对应车次尚未售出车票否认否认确认3.程序运行和测试主界面3.1录入车次信

5、息3.2浏览所有班次信息(下午14:00截图)(早上9:30截图)3.3班次查询3.3.1按班次查询a)信息正确b)信息错误3.3.2按终点站查询a)信息正确b)信息错误3.4票务系统3.4.1购票对应车次票已售完时:3.4.2退票输入信息错误时:尚无售票记录时:4. 总结和提高通过本学期C程序的学习,我们初步掌握了C程序的简单设计与编写。尽管在学习的初期,我们在编写程序时,总是会遇到这样那样的问题,但是就像老师每章PPT最后说的那样,“学好计算机的唯一途径是上机练习”,“你的编程能力与你在计算机上的投入能力成正比”,在一次一次的错误和失败中,我们编程思维在不断趋于严谨,编程能力得到了很大提高

6、。同时,我们也体会到了“失败是成功之母”的深刻含义,因为之前认真学好每一章节的内容并且认真完成每次作业,“不怕写错,就怕不做”,使得我们在编写本次车票管理系统的时候感觉较为顺利。首先,关于本次程序代码编写过程中,我们也确实遇到了一些问题,并且通过自己思考和查阅资料解决了问题。例如查询车次信息时,我们需要比较车次信息与电脑系统时间,而”time.h”里面的系统函数和时间数组是我们上课暂时没有涉及的,但是通过自己在网上搜集资料,我们基本搞懂了它的使用方法。与此同时,我们得到的启发是,课堂是没办法把所有的信息和知识传授给我们的,我们需要有意识的去主动寻找自己需要或者想要了解的知识,才能不断完善自我。

7、其次,在程序初步编写完成时,我们并没有将其作为最终版代码,而是对程序进行多次、多方面的实践和实验,在此过程中,发现了许多的漏洞和小错误,例如:当车次发车时间为21:00时,浏览车次信息的时候只能输入21:0 的问题;按终点站查询时,对于终点站相同的几个班次,只能输出一个班次的问题;查询车次信息时,多次输出表头“班次 发车时间 .”的问题等等。通过再次思考和讨论,我们逐步解决和修复了这些BUG。并且,这也让我们感受到了小组讨论和工作的优越之处。最后,对于程序代码,我们感觉这并不是最简洁和最高效的。在购票和买票系统里面,我们重新定义了一个结构数组x80读出并且保存已经录入的车次信息,然后通过对数组

8、x的改动、删除原数据文件信息并且重新写入结构数组x的方法实现对已发售车票数的修改。这就产生了两个坏处:1.每次买票和退票需要系统分配一个较大的存储空间储存x80,造成了存储空间的浪费;2.提前分配结构数组,就必须让输入车次数小于80,使得该程序的班次管理数量收到了限制。我们正在思考的改进办法是:将数组x替换为使用动态分配存储或者通过链表方法修改班次信息。但是由于对相应知识不太熟悉,暂时没有采用该方法。通过该程序的编写,我们所学的程序设计知识得到了进一步的加深和巩固。当然,我们现阶段所学的程序知识只是冰山一角,要想编写更为复杂的程序和应用,我们还有很长的路要走。在此,也十分感谢衡老师本学期的悉心

9、严谨的教学,成功地为我们今后C语言的学习打下了良好的基础。5.程序清单#includestdio.h#include time.h#includestring.hlong size;FILE *fp,*fp2;struct bus_infolong Num; /*记录车次班次号*/int Timehour; /*记录发车时间-小时*/int Timemin; /*记录发车时间-分钟*/char Start10; /*记录起点站*/char End10; /*记录终点站*/double Duration; /*记录行车时间*/int Limit ; /*额定载人数*/int Sold; /*已订

10、票数*/;int inputchoice() /*选择操作参数*/ int mychoice;printf(n); printf(n *欢迎使用车票管理系统*n);printf( |n); printf( | 1 - 录入新班次信息. 2 - 浏览所有班次信息. |n); printf( | 3 - 查询线路. 4 - 售票大厅(购票/退票) |n);printf( | 5 - 清除屏幕信息. 0 - 结束程序. |n);printf( |n);printf(*请选择服务项目*n); scanf(%d,&mychoice); return mychoice;long getbuscount(F

11、ILE *fp) /*获取班次记录总数*/ long begin,end,buscount; fseek(fp,0L,SEEK_SET); /*将指针移到文件开始位置*/ begin=ftell(fp); /*获取当前指针的位置*/ fseek(fp,size,SEEK_END); /*找到文件末尾指针位置*/ end=ftell(fp); buscount=(end-begin)/size-1; return buscount;int gethour () /*获取系统时间-小时数*/time_t rawtime;struct tm * timeinfo;time ( &rawtime );

12、timeinfo = localtime ( &rawtime );return timeinfo-tm_hour;int getmin () /*获取系统时间-分钟数*/time_t rawtime;struct tm * timeinfo;time ( &rawtime );timeinfo = localtime ( &rawtime );return timeinfo-tm_min;void Viewbusinfo(FILE *fp) /*查询所有班次的信息*/struct bus_info bus;int a,b;time_t rawtime;struct tm * timeinfo

13、;time ( &rawtime );timeinfo = localtime ( &rawtime );a=gethour(); /获取系统时间b=getmin();fseek(fp,0L,SEEK_SET); /*定位指针到文件开始位置*/ fread(&bus,size,1,fp);printf( 班 次 发车时间 始发站 终点站 行车时间 额定载量 已定票数 发车状态n);while(!feof(fp)printf(%5ld%8d:%02d%10s%9s%10.1f%10d%9d,bus.Num,bus.Timehour,bus.Timemin,bus.Start,bus.End,bu

14、s.Duration,bus.Limit,bus.Sold);if(abus.Timehour)printf( 已发车n);else if(a=bus.Timehour)if(b=bus.Timemin)printf( 已发车n);else printf( 未发车n);elseprintf( 未发车n);fread(&bus,size,1,fp);void Queryline_Num(FILE *fp) /*按班次号查询车次信息*/struct bus_info bus;long num;int count1,count2; /*计数器,记录扫描次数和总班次数*/printf( 请输入查询班次

15、:);scanf(%ld,&num);count1=getbuscount(fp); /*获得已经储存的车次总数*/count2=0; /*count2用作计数器,用于判断是否存在需要查询的班次号*/fseek(fp,0L,SEEK_SET); fread(&bus,size,1,fp);while(!feof(fp)if(num=bus.Num)printf( 班 次 发车时间 始发站 终点站 行车时间 额定载量 已定票数n);printf(%5ld%8d:%02d%10s%9s%10.1f%10d%9dn,bus.Num,bus.Timehour,bus.Timemin,bus.Start

16、,bus.End,bus.Duration,bus.Limit,bus.Sold);break; /*假设班次号没有重复的,那么一旦扫描到相应车次,就跳出循环*/elsecount2+; /*记录已扫描数据块个数*/fread(&bus,size,1,fp);if(count1=count2) /*如果扫描数据块个数与总班次数相等,说明没有输入的车次*/printf(*对不起,没有该班次信息*n);void Queryline_End(FILE *fp) /*按终点站查询*/struct bus_info bus;char end10;int count1,count2,j; printf(

17、请输入终点站:);scanf(%s,end);count1=getbuscount(fp);count2=0;j=0;fseek(fp,0L,SEEK_SET); fread(&bus,size,1,fp);while(!feof(fp)if(strcmp(end,bus.End)=0)j+;if(j=1) /*防止表头信息重复出现*/printf( 班 次 发车时间 始发站 终点站 行车时间 额定载量 已定票数n);printf(%5ld%8d:%02d%10s%9s%10.1f%10d%9dn,bus.Num,bus.Timehour,bus.Timemin,bus.Start,bus.E

18、nd,bus.Duration,bus.Limit,bus.Sold);elsecount2+;fread(&bus,size,1,fp);if(count1=count2)printf( *对不起,没有该班次信息*n);void Queryline(FILE *fp) /*查询线路*/int n;printf( 请选择查询方式: 1-按班次查询. 2-按终点站查询.n);scanf(%d,&n);switch(n)case 1:Queryline_Num(fp);break; /*按班次查询*/case 2:Queryline_End(fp);break; /*按终点站查询*/default

19、:printf(*输入信息有误,请重新输入*n);break;void Buy(FILE *fp) /*购票*/struct bus_info bus;long line;struct bus_info x80;int i,count1,count2;int a,b;int ch;a=gethour();b=getmin();count1=getbuscount(fp);count2=0;printf(请输入购票班次:);scanf(%ld,&line);i=1;fseek(fp,0L,SEEK_SET); fread(&bus,size,1,fp);while(!feof(fp) /*读入所

20、有车次信息,并保存到结构数组x中*/xi=bus;i+;fread(&bus,size,1,fp);for(i=1;ixi.Timehour)printf( =对不起,该班次已发车,不能完成购票!=n);break;else if(a=xi.Timehour)if(bxi.Timemin)printf( =对不起,该班次已发车,不能完成购票!=n);break;elseif(xi.Sold xi.Limit)printf( 班 次 发车时间 始发站 终点站 行车时间 额定载量 已定票数n);printf(%5ld%8d:%02d%10s%9s%10.1f%10d%9dn,xi.Num,xi.T

21、imehour,xi.Timemin,xi.Start,xi.End,xi.Duration,xi.Limit,xi.Sold);printf(确定购买该班次车票?n 1.确定 2.取消n); scanf(%d,&ch);if(ch=2)printf(=谢谢使用!=n);return;xi.Sold+; printf(=购票成功!=n);printf( .信息已储存.n);elseprintf(= 该车次车票已售罄!=n);elsecount2+;if(count1=count2)printf(*对不起,没有您需要购票的班次!*n);fp2=fopen(Goupiao_xitong.txt,

22、w+); /*新建车次信息保存文件,并写入修改后的信息数组x*/for(i=1;i=count1;i+)fwrite(&xi,size,1,fp2);fclose(fp2);void Return(FILE *fp) /*退票*/struct bus_info bus;long line;struct bus_info x80;int i,count1,count2;int a,b,ch;a=gethour();b=getmin();count1=getbuscount(fp);count2=0;printf( =请输入需要退票的班次:);scanf(%ld,&line);i=1;fseek(

23、fp,0L,SEEK_SET); fread(&bus,size,1,fp);while(!feof(fp)xi=bus;i+;fread(&bus,size,1,fp);for(i=1;ixi.Timehour)printf( =对不起,该班次已发车,不能完成退票!=n);break;else if(a=xi.Timehour)if(b xi.Timemin)printf(=对不起,该班次已发车,不能完成退票!=n);elseif(xi.Sold =1 )printf( 班 次 发车时间 始发站 终点站 行车时间 额定载量 已定票数n);printf(%5ld%8d:%02d%10s%9s%

24、10.1f%10d%9dn,xi.Num,xi.Timehour,xi.Timemin,xi.Start,xi.End,xi.Duration,xi.Limit,xi.Sold);printf(确定退还该班次车票?n 1.确定 2.取消n); scanf(%d,&ch);if(ch=2)printf(=谢谢使用!=n);return;xi.Sold-;printf(=退票成功!=n);printf( .信息已储存.n);break;elseprintf( =车票数已为零,请核实信息后操作!=n);break;elseif(xi.Sold =1 )xi.Sold-;printf( 班 次 发车时

25、间 始发站 终点站 行车时间 额定载量 已定票数n);printf(%5ld%8d:%02d%10s%9s%10.1f%10d%9dn,xi.Num,xi.Timehour,xi.Timemin,xi.Start,xi.End,xi.Duration,xi.Limit,xi.Sold);printf(确定退还该班次车票?n 1.确定 2.取消n); scanf(%d,&ch);if(ch=2)printf(=谢谢使用!=n);return;printf(=退票成功!=n);printf( .信息已储存.n);break;elseprintf(=车票数已为零,请核实信息后操作!=n);break

26、;elsecount2+;if(count1=count2)printf(*对不起,没有您需要退票的班次!*n);fp2=fopen(Goupiao_xitong.txt, w+);for(i=1;i24 | bus.Timemin60 )printf(输入时间项有误,请修正后录入!);return;printf(输入班次起始站:);scanf(%s,bus.Start);printf(输入班次终点站:);scanf(%s,bus.End);printf(输入行车时间:);scanf(%lf,&bus.Duration);printf(输入额定载人数:);scanf(%d,&bus.Limit

27、);bus.Sold=0; rewind(fp); fwrite(&bus,size,1,fp);printf(*信息已录入系统*n);void main()int choice;if(fp=fopen(Goupiao_xitong.txt, ab+) = NULL)printf(文件打开错误!n);exit(0); size=sizeof(struct bus_info);while(choice=inputchoice()!=0) switch(choice)case 1: AddNewbus(fp);break; /*录入信息*/case 2: Viewbusinfo(fp);break; /*查看所有车次信息*/case 3: Queryline(fp);break; /*查询线路*/case 4:BuyOrReturn(fp);break; /*购票*/case 5:system(cls); break; /*清屏*/default:printf(=输入错误,请重新操作!=);break; fclose(fp);return 0;21

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1