15

2024-05

当前位置: 网事范文网 > 心得体会 >

火车票管理系统

| 来源:网友投稿

火车票管理系统 一、 课题内容和要求 改系统要求实现一个简单、实用的火车票管理程序,主要功能包括火车票数据的录入、查找、删除、显示、售票、退票等。所有火车票数据都要利用文件系统保存,以备系统下次运行时使用。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。

二、 需求分析 功能框架图:(见图2-1)
火车票管理系统 录入 查找 删除 排序 售票 退票 保存 图2-1。

1. 新增火车票数据记录:预先建立一个txt文档,存入数据,然后在程序中读取文档。

2. 查找火车票数据(可按车次,发车时间、起点站、终点站等查找)。

3. 删除火车票数据记录(先查找,再删除。若查找出多条记录,则进一步提示用户选择记录的车次,再删除)。

4. 对火车票排序(可按车次、发车时间、起点站、终点站等排序。)。

5. 显示当前所有火车票信息列表。

6. 售票(先查找,当确定车次后,根据售票张数对该车次的已售票人数进行修改)。

7. 退票(售票的逆处理,过程与售票类似)。

8. 保存火车票数据到文件中。

9. 从文件中读入火车票数据。

三、概要设计 1)主要结构体:
struct time { int hour; int minutes; }; struct ticket { char SerialNumber[10]; struct time SetOut; char DeparturePoint[MAX]; char TerminalPoint[MAX]; float LastTime; int FixNumber; int FixedNumber; }train[N]; 2)主要函数流程图:
l 载入函数:用于从文本中载入信息。(见图3-1)
打开文本 能否打开 读入数据 是否结束 结束 否 否 开始 开始 否 是 是 读入车次 是否符合 输出信息 结束 是 图3-2 图3-1 l 查找函数:利用输入的车次或站点进行顺序查找并将找到的信息输出。(见图3-2)
l 删除函数:先查找出要删除的信息再删除。(见图3-3)
否 否 是 无法订票 人数加一 是否超载 否 图3-4 结束 开始 读入车次 是否误点 否 图3-3 是 是 否 是否符合 读入车次 开始 记录下标i i=i+1,i++ i<车次总数-1 结束 l 售票退票函数:先判断该车是否已发车,若未发车且人未满则订票成功,否则无法订票退票。(见图3-4)
l 备份文件函数:将文件内容存储到用户给定的地址中(见图3—5)
图3-5 l 排序函数(见图3-6)
图3-6 四、源程序代码 #include<stdio.h> #include<stdlib.h> #include<dos.h> #include<time.h> #include<conio.h> #include<string.h> const int MAX=20; const int N=50; const int MAXFILENAME=100; enum {FALSE,TRUE}; struct time { int hour; int minutes; }; struct ticket { char SerialNumber[10]; struct time SetOut; char DeparturePoint[MAX]; char TerminalPoint[MAX]; float LastTime; int FixNumber; int FixedNumber; }train[N]; int RecordNumber; int FLAG=FALSE; /**********************************************/ int ShowMessage(void); //载入原始数据 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 TicketDelete(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(“ 火车票管理系统\n\n“); printf(“============================================================================\n“); printf(“ 1.录入班次信息\t\n“); printf(“ 2.显示所有车票信息列表\t\n“); printf(“ 3.查询火车票数据\t\n“); printf(“ 4.删除火车票数据记录\t\n“); printf(“ 5.按行车时间排序\t\n“); printf(“ 6.售票与退票系统\t\n“); printf(“ 7.退出该系统\t\n“); printf(“============================================================================\n“); printf(“请选择你所需要的功能:“); scanf(“%c“,&functionNumber); switch(functionNumber) { case '1': { InsertMessage(); printf(“\n按任意键回主菜单......\n“); getchar(); getchar(); } break; case '2': { RecordNumber=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=0;i<RecordNumber;i++) { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } printf(“\n按任意键回主菜单......\n“); getchar(); getchar(); } break; case '6': { TicketManagement(); getchar(); getchar(); } break; case '7': { int i; FLAG=TRUE; for(i=0;i<RecordNumber;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 filename[MAXFILENAME]; int i; printf(“请输入文件名或者文件路径名:“); scanf(“%s“,filename); if((fp=fopen(filename,“r“))==NULL) { printf(“文件%s不可读,请确认文件%s存在或者文件路径正确.\n\n“,filename,filename); mainmenu(); } for(i=RecordNumber;!feof(fp)&&!ferror(fp);i++) { fscanf(fp,“%s%d%d“,&train[i].SerialNumber,&train[i].SetOut.hour,&train[i].SetOut.minutes); fscanf(fp,“%s%s%f%d%d“,&train[i].DeparturePoint,&train[i].TerminalPoint,&train[i].LastTime,&train[i].FixNumber,&train[i].FixedNumber); } RecordNumber=i; /*******************************输出更新后的订票记录************************************************************/ printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i<RecordNumber;i++) { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].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“,&train[i].SerialNumber,&train[i].SetOut.hour,&train[i].SetOut.minutes); fscanf(fp,“%s%s%f%d%d“,&train[i].DeparturePoint,&train[i].TerminalPoint,&train[i].LastTime,&train[i].FixNumber,&train[i].FixedNumber); } int count=i; printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i<count;i++) { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\t“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); printf(“\n“); } return count; } void SearchMenu(void) { system(“mode con: cols=140 lines=130“); char functionNumber; printf(“ 查询子菜单\n“); printf(“============================================================================\n“); printf(“ 1.按班次号查询\t\n“); printf(“ 2.按终点站查询\t\n“); printf(“ 3.返回主菜单\t\n“); 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“); printf(“按任意键回查询子菜单......\n“); getchar(); getchar(); SearchMenu(); } } void SearchByNumber(void) { int i; char Number[MAX]; printf(“请输入班次号:“); scanf(“%s“,&Number); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i<RecordNumber;i++) { //对比终点站记录,找到并输出 if((strcmp(Number,train[i].SerialNumber))==0) { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } } } void SearchByAddress(void) { int i; char Address[MAX]; printf(“请输入终点站的名称:“); scanf(“%s“,&Address); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i<RecordNumber;i++) { //对比终点站记录,找到并输出 if((strcmp(Address,train[i].TerminalPoint))==0) { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } } } void cancle(void) { SearchMenu(); int i,j; char m[MAX]; printf(“请输入要删除的班次:“); scanf(“%s“,&m); for(i=0;i<RecordNumber&&(strcmp(m,train[i].SerialNumber))!=0;i++) { if(i==RecordNumber) { printf(“对不起,没有这趟车\n“); } } for(j=i;j<RecordNumber-1;j++) { train[j]=train[j+1]; } printf(“删除成功\n“); } void selection(ticket *pa,int n) { int i,k,index; struct ticket temp; for(k=0;k<n-1;k++) { index=k; for(i=k+1;i<n;i++) if(pa[i].LastTime<pa[index].LastTime) index=i; if(index!=k) { temp=pa[index]; pa[index]=pa[k]; pa[k]=temp; } } } void TicketManagement(void) { char functionNumber; system(“mode con: cols=140 lines=130“); printf(“ 订票与退票菜单\n“); printf(“============================================================================\n“); printf(“ 1.订票\t\n“); printf(“ 2.退票\t\n“); 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(“按任意键回主菜单......\n“); getchar(); getchar(); mainmenu(); } } } void TicketOrder(void) { SearchMenu(); int i,j; char a[MAX]; printf(“请输入要订购的车票的班次:“); scanf(“%s“,&a); printf(“请输入要订购的车票的张数:“); scanf(“%d“,&j); for(i=0;i<RecordNumber;i++) { if((strcmp(a,train[i].SerialNumber))==0) { if(train[i].FixedNumber<train[i].FixNumber) { (train[i].FixedNumber)+=j; printf(“你的订票成功,请按时上车,谢谢使用!\n“); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } else printf(“对不起,票已卖完\n“); } } } void TicketDelete(void) { SearchMenu(); int i,j; char b[MAX]; printf(“请输入要退购的车票的班次:“); scanf(“%s“,&b); printf(“请输入要退购的车票的张数:“); scanf(“%d“,&j); for(i=0;i<RecordNumber;i++) { if((strcmp(b,train[i].SerialNumber))==0) { if(train[i].FixedNumber>=1) { train[i].FixedNumber-=j; printf(“退订车票成功,谢谢使用!\n“); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } else printf(“对不起,今天的这趟车的票尚未卖出,无法完成退票!\n“); } } } void exit(void) { printf(“\n\n*********************谢谢使用本系统,欢迎下次继续使用***********************\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%s\t%d\t%d\t\t“,x.SerialNumber,x.SetOut.hour,x.SetOut.minutes); fprintf(fp,“%s\t%s\t\t%.1f\t %d\t\t%d“,x.DeparturePoint,x.TerminalPoint,x.LastTime,x.FixNumber,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 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)查询火车票记录 输入: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 输出:查询子菜单 ============================================================================ 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 按任意键回主菜单...... 6)售票 输入:6 输出:
订票与退票菜单 =================================================== 1.订票 2.退票 3.返回主菜单 ================================================== 选择你需要的功能:
输入:1 输出:
查询子菜单 ======================================================================== 1.按班次号查询 2.按终点站查询 3.返回主菜单 ========================================================================= 请选择你所需要的功能: (查询过程同上)
输出:请输入需要订购的车票班次 输入:k1111 输出:请输入要订购的车票张数 输入:10 输出:
您的订票成功,请按时上车,谢谢使用! 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 210 7)退票 输入:6 输出:
订票与退票菜单 =================================================== 1.订票 2.退票 3.返回主菜单 ================================================== 选择你需要的功能:
输入:2 输出:
查询子菜单 ======================================================================== 1.按班次号查询 2.按终点站查询 3.返回主菜单 ========================================================================= 请选择你所需要的功能: (查询过程同上)
输出:请输入需要退购的车票班次 输入:k1111 输出:请输入要订购的车票张数 输入:5 退订车票成功,谢谢使用! 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 195 8)退出 输入:7 输出:****************谢谢使用本系统,欢迎下次继续使用**************** 结果分析:(1).若输入数字不在1——7之间,则会提示错误。

(2).当输入列车班次信息不正确时,将不会得到结果。

(3).文件录入不正确时,将不会得到任何结果。

六、调试过程中的问题 1)文件存储方式不正确:应先定义一个文件存储函数,在其它函数中调用,方便有效。

2)删除时若遇到没有的班次则程序出错。应在不存在输入的列车班次时,输出不存在的提示 3)保存后在下次运行时出错问题:在保存信息时,应在每个信息之间加一空格来保存,否则在文件下次使用时读取就会没有分界点。

4)订票退票只能一次一张。应在用户输入列车班次后让用户输入需要订购的张数。

5)结构指针定义错误,ticket前不应加struct。

推荐访问:火车票管理系统数据库

上一篇:态度改变与社会影响

下一篇:廉洁颂

最新推荐New Ranking

1捡垃圾心得体会19篇

捡垃圾心得体会第1篇作为一名大学生,我第一次参加社会实践活动,为此我感到很兴奋,以前的我总是为没...

2职业生涯心得体会7篇

职业生涯心得体会第1篇去年选课的时候,很不理解为什么我们文科学院的学生必须要修工程、创新等和我们...

3初中军训心得体会14篇

初中军训的心得体会第1篇我们在这个星期到少年军校总校进行了为期五天的军人生活,学习解放军叔叔不怕...

4实干担当心得体会8篇

实干担当心得体会第1篇爱岗,是我们的职责;敬业,是我们的本分;青春,是我们的资本;奉献,是我们崇...

52023年度护理培训心得体会范本汇编9篇(完整文档)

护理培训心得体会范文第1篇首先,感谢院领导、科室主任、护士长的培养以及各位同事在工作上的支持,让...

62023年魏书生班级管理心得体会23篇【完整版】

魏书生班级管理心得体会第1篇魏书生的管理艺术我深受启发,对于当班主任的我,受益匪浅。当班主任都有...

7风险防范心得体会6篇(完整)

风险防范心得体会第10月13日,宣传统战部、学生工作处、保卫处、团委和各学院联合举办的“防范电信网...

8小学数学新课标培训心得体会8篇【完整版】

小学数学新课标培训心得体会第1篇十分有幸参加了本次江苏省新课标小学数学教师网络培训,本人认真研读...

9计算机审计心得体会必备11篇(完整文档)

计算机审计心得体会第1篇虽然受疫情影响我们不能够正常报到,正常去教室里上课,但各学校都秉承着“停...

102023年情商心得体会10篇

情商心得体会第1篇通过认真聆听公司组织的“情商与影响力”培训视频讲座,感觉收获很大。培训课上,吴...