火车票管理系统.doc

上传人:yyf 文档编号:6314758 上传时间:2020-10-23 格式:DOC 页数:18 大小:40.50KB
返回 下载 相关 举报
火车票管理系统.doc_第1页
第1页 / 共18页
火车票管理系统.doc_第2页
第2页 / 共18页
火车票管理系统.doc_第3页
第3页 / 共18页
火车票管理系统.doc_第4页
第4页 / 共18页
火车票管理系统.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

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

1、火车票管理系统火车票管理系统 一、 课题内容和要求 改系统要求实现一个简单、实用的火车票管理程序,主要功能包括火车票数据的录入、查找、删除、显示、售票、退票等。所有火车票数据都要利用文件系统保存,以备系统下次运行时使用。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。 二、 需求分析 功能框架图:(见图2-1) 火车票管理系统 录入 查找 删除 排序 售票 退票 保存 图2-1。1. 新增火车票数据记录:预先建立一个txtxx,存入数据,然后在程序中读取xx。2. 查找火车票数据(可按车次,发车时间、起点站、终点站等查找)。3. 删除火车票数据记录(先查找,再删除。

2、若查找出多条记录,则进一步提示用户选择记录的车次,再删除)。4. 对火车票排序(可按车次、发车时间、起点站、终点站等排序。)。5. 显示当前所有火车票信息列表。6. 售票(先查找,当确定车次后,根据售票张数对该车次的已售票人数进行修改)。7. 退票(售票的逆处理,过程与售票类似)。8. 保存火车票数据到文件中。9. 从文件中读入火车票数据。 三、概要设计 1)主要结构体:struct time int hour; int minutes; ; struct ticket char SerialNumber10; struct time SetOut; char DeparturePointMA

3、X; char TerminalPointMAX; float LastTime; int FixNumber; int FixedNumber; trainN; 2)主要函数流程图: l 载入函数:用于从文本中载入信息。(见图3-1)打开文本 能否打开 读入数据 是否结束 结束 否 否 开始 开始 否 是 是 读入车次 是否符合 输出信息 结束 是 图3-2 图3-1 l 查找函数:利用输入的车次或站点进行顺序查找并将找到的信息输出。(见图3-2)l 删除函数:先查找出要删除的信息再删除。(见图3-3)否 否 是 无法订票 人数加一 是否超载 否 图3-4 结束 开始 读入车次 是否误点 否

4、 图3-3 是 是 否 是否符合 读入车次 开始 记录下标i i=i+1,i+ i车次总数-1 结束 l 售票退票函数:先判断该车是否已发车,若未发车且人未满则订票成功,否则无法订票退票。(见图3-4)l 备份文件函数:将文件内容存储到用户给定的地址中(见图35) 图3-5 l 排序函数(见图3-6) 图3-6 四、源程序代码 #includestdio.h #includestdlib.h #includedos.h #includetime.h #includeconio.h #includestring.h const int MAX=20; const int N=50; const

5、int MAXFILENAME=100; enum FALSE,TRUE; struct time int hour; int minutes; ; struct ticket char SerialNumber10; struct time SetOut; char DeparturePointMAX; char TerminalPointMAX; float LastTime; int FixNumber; int FixedNumber; trainN; int RecordNumber; int FLAG=FALSE; /*/ int ShowMessage(void); /载入原始数

6、据 void mainmenu(void); /主菜单 void InsertMessage(void); /录入班次信息 void SearchMenu(void); /查询路线子菜单 void SearchByNumber(void); /按班次号查询 void SearchByAddress(void); /按终点站查询 void cancle(void);/删除数据 void selection(ticket *pa,int n);/排序 void TicketManagement(void); /车票售出与退回 void TicketOrder(void); /售票 void Tic

7、ketDelete(void); /退票 void exit(void); /退出该系统 void SaveRecord(ticket x); /储存信息到文件中 /*/ int main(void) do mainmenu; while(FLAG=FALSE); return 0; void mainmenu(void) system(“mode con: cols=140 lines=130“); char functionNumber; printf(“ 火车票管理系统nn“); printf(“=n“); printf(“ 1.录入班次信息tn“); printf(“ 2.显示所有车票

8、信息列表tn“); printf(“ 3.查询火车票数据tn“); printf(“ 4.删除火车票数据记录tn“); printf(“ 5.按行车时间排序tn“); printf(“ 6.售票与退票系统tn“); printf(“ 7.退出该系统tn“); printf(“=n“); printf(“请选择你所需要的功能:“); scanf(“%c“,functionNumber); switch(functionNumber) case 1: InsertMessage; printf(“n按任意键回主菜单.n“); getchar; getchar; break; case 2: Rec

9、ordNumber=ShowMessage; printf(“n按任意键回主菜单.n“); getchar; getchar; break; case 3: SearchMenu; printf(“n按任意键回主菜单.n“); getchar; getchar; break; case 4: cancle; printf(“n按任意键回主菜单.n“); getchar; getchar; break; case 5: selection(train,RecordNumber); printf(“班次t发车时间t起点t终点t行车时间(小时)t额定载量t已定票人数n“); int i; for(i

10、=0;iRecordNumber;i+) printf(“%st%d:%dtt“,traini.SerialNumber,traini.SetOut.hour,traini.SetOut.minutes); printf(“%st%stt%.1ft %dtt%dn“,traini.DeparturePoint,traini.TerminalPoint,traini.LastTime,traini.FixNumber,traini.FixedNumber); printf(“n按任意键回主菜单.n“); getchar; getchar; break; case 6: TicketManagem

11、ent; getchar; getchar; break; case 7: int i; FLAG=TRUE; for(i=0;iRecordNumber;i+) SaveRecord(*(train+i); exit; break; default: printf(“输入错误,请确保你的输入为1-7.n“); printf(“按任意键回主菜单.n“); getchar; getchar; /switch ends FLAG=FALSE; void InsertMessage(void) FILE *fp; char filenameMAXFILENAME; int i; printf(“请输

12、入文件名或者文件路径名:“); scanf(“%s“,filename); if(fp=fopen(filename,“r“)=NULL) printf(“文件%s不可读,请确认文件%s存在或者文件路径正确.nn“,filename,filename); mainmenu; for(i=RecordNumber;!feof(fp)!ferror(fp);i+) fscanf(fp,“%s%d%d“,traini.SerialNumber,traini.SetOut.hour,traini.SetOut.minutes); fscanf(fp,“%s%s%f%d%d“,traini.Depart

13、urePoint,traini.TerminalPoint,traini.LastTime,traini.FixNumber,traini.FixedNumber); RecordNumber=i; /*输出更新后的订票记录*/ printf(“班次t发车时间t起点t终点t行车时间(小时)t额定载量t已定票人数n“); for(i=0;iRecordNumber;i+) printf(“%st%d:%dtt“,traini.SerialNumber,traini.SetOut.hour,traini.SetOut.minutes); printf(“%st%stt%.1ft %dtt%dn“,

14、traini.DeparturePoint,traini.TerminalPoint,traini.LastTime,traini.FixNumber,traini.FixedNumber); fclose(fp); int ShowMessage(void) int i; FILE *fp; if(fp=fopen(“add.txt“,“r“)=NULL) printf(“读取数据失败,请检查文件add.txt是否存在.n“); exit(-1); for(i=RecordNumber;!feof(fp)!ferror(fp);i+) fscanf(fp,“%s%d%d“,traini.Se

15、rialNumber,traini.SetOut.hour,traini.SetOut.minutes); fscanf(fp,“%s%s%f%d%d“,traini.DeparturePoint,traini.TerminalPoint,traini.LastTime,traini.FixNumber,traini.FixedNumber); int count=i; printf(“班次t发车时间t起点t终点t行车时间(小时)t额定载量t已定票人数n“); for(i=0;icount;i+) printf(“%st%d:%dtt“,traini.SerialNumber,traini.S

16、etOut.hour,traini.SetOut.minutes); printf(“%st%stt%.1ft %dtt%dt“,traini.DeparturePoint,traini.TerminalPoint,traini.LastTime,traini.FixNumber,traini.FixedNumber); printf(“n“); return count; void SearchMenu(void) system(“mode con: cols=140 lines=130“); char functionNumber; printf(“ 查询子菜单n“); printf(“=

17、n“); printf(“ 1.按班次号查询tn“); printf(“ 2.按终点站查询tn“); printf(“ 3.返回主菜单tn“); printf(“=n“); printf(“请选择你所需要的功能:“); scanf(“%*c%c“,functionNumber); switch(functionNumber) case 1:SearchByNumber;break; case 2:SearchByAddress;break; case 3: getchar; mainmenu; break; default: printf(“输入错误,请确保你的输入为1-3.n“); prin

18、tf(“按任意键回查询子菜单.n“); getchar; getchar; SearchMenu; void SearchByNumber(void) int i; char NumberMAX; printf(“请输入班次号:“); scanf(“%s“,Number); printf(“班次t发车时间t起点t终点t行车时间(小时)t额定载量t已定票人数n“); for(i=0;iRecordNumber;i+) /对比终点站记录,找到并输出 if(strcmp(Number,traini.SerialNumber)=0) printf(“%st%d:%dtt“,traini.SerialN

19、umber,traini.SetOut.hour,traini.SetOut.minutes); printf(“%st%stt%.1ft %dtt%dn“,traini.DeparturePoint,traini.TerminalPoint,traini.LastTime,traini.FixNumber,traini.FixedNumber); void SearchByAddress(void) int i; char AddressMAX; printf(“请输入终点站的名称:“); scanf(“%s“,Address); printf(“班次t发车时间t起点t终点t行车时间(小时)

20、t额定载量t已定票人数n“); for(i=0;iRecordNumber;i+) /对比终点站记录,找到并输出 if(strcmp(Address,traini.TerminalPoint)=0) printf(“%st%d:%dtt“,traini.SerialNumber,traini.SetOut.hour,traini.SetOut.minutes); printf(“%st%stt%.1ft %dtt%dn“,traini.DeparturePoint,traini.TerminalPoint,traini.LastTime,traini.FixNumber,traini.Fixe

21、dNumber); void cancle(void) SearchMenu; int i,j; char mMAX; printf(“请输入要删除的班次:“); scanf(“%s“,m); for(i=0;iRecordNumber(strcmp(m,traini.SerialNumber)!=0;i+) if(i=RecordNumber) printf(“对不起,没有这趟车n“); for(j=i;jRecordNumber-1;j+) trainj=trainj+1; printf(“删除成功n“); void selection(ticket *pa,int n) int i,k,

22、index; struct ticket temp; for(k=0;kn-1;k+) index=k; for(i=k+1;in;i+) if(pai.LastTimepaindex.LastTime) index=i; if(index!=k) temp=paindex; paindex=pak; pak=temp; void TicketManagement(void) char functionNumber; system(“mode con: cols=140 lines=130“); printf(“ 订票与退票菜单n“); printf(“=n“); printf(“ 1.订票t

23、n“); printf(“ 2.退票tn“); printf(“ 3.返回主菜单.n“); printf(“=n“); printf(“选择你需要的功能:“); scanf(“%*c%c“,functionNumber); switch(functionNumber) case 1: TicketOrder; /getchar; /getchar; break; case 2:TicketDelete;break; case 3: getchar; mainmenu; break; default: printf(“输入错误,请确保你的输入为1-3.n“); printf(“按任意键回主菜单.

24、n“); getchar; getchar; mainmenu; void TicketOrder(void) SearchMenu; int i,j; char aMAX; printf(“请输入要订购的车票的班次:“); scanf(“%s“,a); printf(“请输入要订购的车票的张数:“); scanf(“%d“,j); for(i=0;iRecordNumber;i+) if(strcmp(a,traini.SerialNumber)=0) if(traini.FixedNumbertraini.FixNumber) (traini.FixedNumber)+=j; printf

25、(“你的订票成功,请按时上车,谢谢使用!n“); printf(“班次t发车时间t起点t终点t行车时间(小时)t额定载量t已定票人数n“); printf(“%st%d:%dtt“,traini.SerialNumber,traini.SetOut.hour,traini.SetOut.minutes); printf(“%st%stt%.1ft %dtt%dn“,traini.DeparturePoint,traini.TerminalPoint,traini.LastTime,traini.FixNumber,traini.FixedNumber); else printf(“对不起,票已

26、卖完n“); void TicketDelete(void) SearchMenu; int i,j; char bMAX; printf(“请输入要退购的车票的班次:“); scanf(“%s“,b); printf(“请输入要退购的车票的张数:“); scanf(“%d“,j); for(i=0;iRecordNumber;i+) if(strcmp(b,traini.SerialNumber)=0) if(traini.FixedNumber=1) traini.FixedNumber-=j; printf(“退订车票成功,谢谢使用!n“); printf(“班次t发车时间t起点t终点t

27、行车时间(小时)t额定载量t已定票人数n“); printf(“%st%d:%dtt“,traini.SerialNumber,traini.SetOut.hour,traini.SetOut.minutes); printf(“%st%stt%.1ft %dtt%dn“,traini.DeparturePoint,traini.TerminalPoint,traini.LastTime,traini.FixNumber,traini.FixedNumber); else printf(“对不起,今天的这趟车的票尚未卖出,无法完成退票!n“); void exit(void) printf(“

28、nn*谢谢使用本系统,欢迎下次继续使用*n“); exit(0); void SaveRecord(ticket x) FILE *fp; if(fp=fopen(“add.txt“,“a“)=NULL) printf(“打开文件%s失败n“,“add.txt“); exit(-1); fprintf(fp,“n%st%dt%dtt“,x.SerialNumber,x.SetOut.hour,x.SetOut.minutes); fprintf(fp,“%st%stt%.1ft %dtt%d“,x.DeparturePoint,x.TerminalPoint,x.LastTime,x.FixN

29、umber,x.FixedNumber); 五、测试数据及其结果分析 显示的主菜单界面: 火车票管理系统 = 1.录入班次信息 2.显示所有车票信息列表 3.查询火车票数据 4.删除火车票数据记录 5.按行车时间排序 6.售票与退票系统 7.退出该系统 = 请选择你所需要的功能: 1)录入班次信息 输入:1 输出:请输入文件名或者文件路径名: 输入:D:1.txt 输出:班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 k1234 10:20 上海 苏州 2.0 200 50 t2222 12:40 长沙 上海 9.0

30、 250 100 k2323 13:50 扬州 南京 1.5 200 70 k1122 9:20 广州 南京 20.0 300 170 按任意键回主菜单. 2)显示所有车票信息列表 输入:2 输出:班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 k1234 10:20 上海 苏州 2.0 200 50 t2222 12:40 长沙 上海 9.0 250 100 k2323 13:50 扬州 南京 1.5 200 70 k1122 9:20 广州 南京 20.0 300 170 按任意键回主菜单. 3)查询火车票记录

31、输入:3 输出:查询子菜单 = 1.按班次号查询 2.按终点站查询 3.返回主菜单 = 请选择你所需要的功能: 输入:1 输出:请输入班次号:输入:k1111 输出:班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 按任意键回主菜单. 输入:2 输出:请输入终点站的名称:输入:上海 输出:班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 t2222 12:40 长沙 上海 9.0 250 100 按任意键回主菜单. 4)删除火车票数据 输入:4

32、 输出:查询子菜单 = 1.按班次号查询 2.按终点站查询 3.返回主菜单 = 请选择你所需要的功能: (查找过程同上)输出:请输入要删除的班次:输入:t2222 输出:删除成功 按任意键回主菜单. 5)按行车时间排序:输入:5 输出:班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k2323 13:50 扬州 南京 1.5 200 70 k1234 10:20 上海 苏州 2.0 200 50 k1111 8:30 南京 上海 4.0 300 200 t2222 12:40 长沙 上海 9.0 250 100 k1122 9:20 广州 南京 20.0 300 170 按

33、任意键回主菜单. 6)售票 输入:6 输出:订票与退票菜单 = 1订票 2退票 3返回主菜单 = 选择你需要的功能:输入:1 输出:查询子菜单 = 1.按班次号查询 2.按终点站查询 3.返回主菜单 = 请选择你所需要的功能: (查询过程同上)输出:请输入需要订购的车票班次 输入:k1111 输出:请输入要订购的车票张数 输入:10 输出:您的订票成功,请按时上车,谢谢使用! 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 210 7)退票 输入:6 输出:订票与退票菜单 = 1订票 2退票 3返回主菜单 = 选择你需要的功

34、能:输入:2 输出:查询子菜单 = 1.按班次号查询 2.按终点站查询 3.返回主菜单 = 请选择你所需要的功能: (查询过程同上)输出:请输入需要退购的车票班次 输入:k1111 输出:请输入要订购的车票张数 输入:5 退订车票成功,谢谢使用! 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 195 8)退出 输入:7 输出:*谢谢使用本系统,欢迎下次继续使用* 结果分析:(1).若输入数字不在17之间,则会提示错误。 (2).当输入列车班次信息不正确时,将不会得到结果。 (3).文件录入不正确时,将不会得到任何结果。 六、调试过程中的问题 1)文件存储方式不正确:应先定义一个文件存储函数,在其它函数中调用,方便有效。2)删除时若遇到没有的班次则程序出错。应在不存在输入的列车班次时,输出不存在的提示 3)保存后在下次运行时出错问题:在保存信息时,应在每个信息之间加一空格来保存,否则在文件下次使用时读取就会没有分界点。4)订票退票只能一次一张。应在用户输入列车班次后让用户输入需要订购的张数。5)结构指针定义错误,ticket前不应加struct。

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

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


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