ImageVerifierCode 换一换
格式:DOC , 页数:35 ,大小:152KB ,
资源ID:2741591      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2741591.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(火车订票管理系统.doc)为本站会员(weiwoduzun)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

火车订票管理系统.doc

1、火车订票管理系统假设有 5 条火车线路(起点均为济南) ,每条线路所涉及的信息有:终点站、车次、发车时间(年.月.日.时.分) 、票价、余票数(假设火车总票数为 300) 。乘客订票信息包括:乘客姓名、乘客身份证号码、订票数,总票价。 本系统要求用结构体数组和链表实现,将火车线路信息存放在结构体数组中,每条线路对应一个链表,乘客订票就是在链表中插入结点,乘客退票就是在链表中删除结点。链表的结点类型和结构体类型定义如下:struct node /乘客订票信息 char name10; /乘客姓名char IDcard20; /乘客身份证号码int TicketNum; /订票数float Far

2、eSum; /总票价struct node *next; /指针成员;struct Dtime /发车时间 short year;short month;short day;short hour;short minute;struct train /线路 char terminal10; /终点站char sequence10; /车次struct Dtime StartTime; /发车时间float fare; /票价int SpareTicketNum; /余票数struct node *head; /指针成员,指向该线路第一个订票乘客;系统整体结构见图 9.3 所示。系统的主要功能包括

3、:1. 火车线路查询功能,乘客输入终点站名称或输入车次,输出相应的火车线路信息。2. 订票功能。乘客输入车次和订票数,先查询该车次的余票数,若余票数大于等于订票数,则为乘客办理订票手续,要求乘客输入姓名、身份证号码,计算出总票价,产生一个新结点,将该结点添加到对应车次的链表中,然后修改该车次的余票数。若余票数小于订票数,则输出提示信息“余票数不足,订票失败! “。3. 退票功能。乘客输入车次和身份证号码,在该车次对应的链表中查找该乘客,若找到,询问乘客退票数量,若退票数小于订票数,则只需修改结点的订票数;若退票数等于订票数,则将该乘客对应的结点删除,然后修改该车次的余票数;若没找到,则应提示“

4、未找到相应信息“,要求乘客重新输入车次和身份证号码,再进行查找,如果仍未找到,则输出提示信息“输入信息错误,退票失败!“ 。 4. 其他查询功能。(1) 输入车次,输出该车次的全部订票信息。(2) 输入车次,输出该车次的订票数和余票数。(3) 输入终点站名称,输出相关火车线路的信息。(4) 输入日期(年.月.日) ,输出发车时间为该天的火车线路的信息。(5) 输出余票数为 0 的火车线路的信息。*/#include “stdio.h“#include “string.h“#include “stdlib.h“#include “conio.h“ #include “cstdlib“#defin

5、e SUM_TICKET 300; /车票总数#define PASS_N 5 /车次总数,对应这些个乘客文件/=/函数声明add_train(); /增加车次admin_passger(); /乘客管理admin_password(); /管理员密码管理admin_train(); /管理员权限:管理车次和乘客booking(); /订票checking(int n,char check20); /检查输入的省份证好是否符合规定的位数check_Date(int max,int min,int mn); /检查日期是否符合标准的格式else_find(); /其他查询功能find(); /查

6、找功能mod_train(); /管理员权限:修改车次的信息print(); /从屏幕输出车次信息print_p(struct train *train_p1); /输出对应车次的全部乘客信息read(); /从文件中读取车次和乘客信息refund(); /退票功能void save(); /将车次和乘客信息保存到文件中/=/全局变量struct node *node_p1, *node_p2; /乘客struct train *head=NULL,*train_p1,*train_p2;/线路char admin20;int MaxTicket=300;struct node /乘客 pas

7、sengers 订票信息 char name20; /乘客姓名char IDcard20; /乘客身份证号码int TicketNum; /订票数int FareSum; /总票价struct node *next; /指针成员;struct Dtime /发车时间 int year;int month;int day;int hour;int minute;struct train /线路 char terminal20; /终点站char sequence20; /车次struct Dtime *StartTime; /发车时间int fare; /票价int SpareTicketNum

8、; /余票数int MaxTicket; /最大票数struct node *nhead; /指针成员,指向该线路第一个订票乘客struct train *next; /指针成员,指向下一条线路;/=/从文件中读取车次和乘客信息int read(void) /从文件读取信息system(“color 1f“); /设置控制台背景色FILE *fp,*pa,*ad; /打开文件,实例化三个文件结构体的指针int site_sum=0,sum_ch=0; /总站点int pass_sum5=0; /char ch;printf(“n正在读取文件.n“);/读取 train.txt 文件名和文件路径

9、/printf(“n正在读取 train.txt 文件.n“);/如果打不开也写不进,那就新建个if( (fp=( fopen(“train.txt“,“r“)=NULL )if( (fp=fopen(“train.txt“,“w“)=NULL ) printf(“nCannot open the file: train.txt! nPlease confirm the file already exists!n“); exit(0); /找不到文件 train.txt,请确定 train.txt 的确存在。fclose(fp);head=NULL; /链表置为空 NULL/如果车次源文件不存

10、在,则新建空 train 文件elseif( (fp=fopen(“train.txt“,“r+“)=NULL ) putchar(10);/在控制台输出 10 的 ASSIC 码,同 nfor(int i=0; i=0 )rewind(fp);while( !feof(fp) ) train_p1=(struct train *)malloc(sizeof(struct train); train_p1-nhead=NULL;train_p1-StartTime=(struct Dtime *)malloc(sizeof(struct Dtime); /开辟新节点fscanf(fp,“%s%

11、s%d%d%d%d%d%d%dn“,train_p1-terminal,train_p1-sequence,site_sum+;if(site_sum = 1) head=train_p1;else train_p2-next=train_p1;train_p2=train_p1;train_p2-next=NULL;/printf(“n共有车次 %d 次!n“,site_sum);fclose(fp);/print();/读取 admin 密码/printf(“n正在读取密码文件.n“);if( ( fopen(“admin.txt“,“r“)=NULL )if( (ad=fopen(“ad

12、min.txt“,“w“)=NULL ) putchar(10);for(int i=0; isequence);/node_p1=train_p1-nhead;strcpy(pass,train_p1-sequence);strcat(pass,“.txt“);if( (pa=fopen(pass,“r+“)=NULL )if( (pa=fopen(pass,“w“)=NULL ) for(int i=0; i=0 )rewind(pa);while( !feof(pa) )node_p1=(struct node *)malloc(sizeof(struct node); node_p1-

13、next=NULL;fscanf(pa,“%s%s%d%dn“,node_p1-name,node_p1-IDcard,pass_sumj+;if( pass_sumj=1 ) train_p1-nhead=node_p1;else node_p2-next=node_p1;node_p2=node_p1;node_p2-next=NULL;fclose(pa);/printf(“ %dn“,j);train_p1=train_p1-next;/=/*if( ( fopen(“MaxTicket1.txt“,“r“)=NULL )ad=fopen(“MaxTicket1.txt“,“w“);

14、MaxTicket=300; fprintf(ad,“%d“,MaxTicket); fclose(ad); /printf(“n正在读取文件 MaxTicketn“);if( (fopen(“MaxTicket.txt“,“r“)=NULL ) ma=fopen(“MaxTicket.txt“,“W“); MaxTicket=300; printf(“n MaxTicket=%dn“,MaxTicket);fprintf(ma,“%s“,admin); else fscanf(ma,“%d“,fclose(ma);*/ printf(“n全部文件读取完毕!n“);/=/从屏幕输出车次信息in

15、t print(void)/调试 :输出putchar(10); int i=1;if( (train_p1=head)=NULL ) /如果车次文件是空文件printf(“没有任何车次!按任意键返回上一层n“); getch(); return 0; /printf(“终点站 车次 发车时间 t 票价t 余票数nn“);while( train_p1!=NULL )printf(“%s %s %4d-%2d-%2d %2d:%2dtY%dt%dn“,train_p1-terminal,train_p1-sequence,train_p1-StartTime-year,train_p1-Sta

16、rtTime-month,train_p1-StartTime-day,train_p1-StartTime-hour,train_p1-StartTime-minute,train_p1-fare,train_p1-SpareTicketNum);train_p1=train_p1-next;/ printf(“i=%dn“,i); i+;return 1;/=/输出对应车次的全部乘客信息print_p(struct train *train_p1)/调试 :输出putchar(10); int i=1;if( (node_p1=train_p1-nhead)=NULL ) printf(“

17、该车次没有乘客!n“);return 0;printf(“车次t 乘客姓名t 乘客身份证号nn“);while( node_p1!=NULL )printf(“%st%stt%sn“,train_p1-sequence,node_p1-name,node_p1-IDcard);node_p1=node_p1-next;return 0;/=find(void) /查询start_f:system( “cls “); /清屏putchar(10);char sect_120=“1“;char terminal20; /终点站char sequence20; /车次/格式putchar(10);f

18、or(int i=0; iterminal)!=0 if( strcmp(terminal,train_p1-terminal)=0 ) printf(“n 终点站 车次 发车时间 t 票价 t 余票数n“);printf(“%s %s %4d-%2d-%2d %2d:%2dtY%dt%dn“,train_p1-terminal,train_p1-sequence,train_p1-StartTime-year,train_p1-StartTime-month,train_p1-StartTime-day,train_p1-StartTime-hour,train_p1-StartTime-m

19、inute,train_p1-fare,train_p1-SpareTicketNum);else printf(“n 没有查询到! n“);printf(“n-“);putchar(10);printf(“ n“); printf(“ 请选择您所需的操作 n“); printf(“ 1.继续查询 n“); printf(“ 2.返回上一层 n“); printf(“ 3.退出 n“); printf(“ n“); printf(“n请输入: “);scanf(“%s“,if( strcmp(sect_1,“1“)=0 ) goto start_f1;else if( strcmp(sect_

20、1,“2“)=0 ) goto start_f;else if( strcmp(sect_1,“3“)=0 ) exit(0);else return 0;else if(strcmp(sect_1,“2“)=0) start_f2:if( (train_p1=head)=NULL ) /如果车次文件是空文件printf(“没有任何车次!按任意键返回上一层n“); getch(); goto start_f; printf(“请输入车次:“); scanf(“%s“,sequence); while( strcmp(sequence,train_p1-sequence)!=0 if( strc

21、mp(sequence,train_p1-sequence)=0)printf(“n 终点站 车次 发车时间 t 票价 t 余票数n“);printf(“%s %s %4d-%2d-%2d %2d:%2dtY%dt%dn“,train_p1-terminal,train_p1-sequence,train_p1-StartTime-year,train_p1-StartTime-month,train_p1-StartTime-day,train_p1-StartTime-hour,train_p1-StartTime-minute,train_p1-fare,train_p1-SpareTi

22、cketNum);else printf(“n 没有查询到! n“);printf(“n-“);putchar(10);printf(“ n“); printf(“ 请选择您所需的操作 n“); printf(“ 1.继续查询 n“); printf(“ 2.返回上一层 n“); printf(“ 3.退出 n“); printf(“ n“); printf(“n请输入: “);scanf(“%s“,if( strcmp(sect_1,“1“)=0 ) goto start_f2;else if( strcmp(sect_1,“2“)=0 ) goto start_f;else if( str

23、cmp(sect_1,“3“)=0 ) exit(0);else return 0;else if(strcmp(sect_1,“3“)=0) return 0;else if(strcmp(sect_1,“4“)=0) exit(0);else printf(“请输入正确的选择!n 按任意键继续“); getch(); goto start_f;/=/订票booking() start_b:read();system( “cls “); /清屏putchar(10);char sequence10; /车次int ticket_sum=0; /订票总数char name20; /乘客姓名ch

24、ar IDcard20; /乘客身份证号码char sect_210; /int boolean=0; /是否用的 goto,默认为否/格式for(int i=0; isequence); train_p1=train_p1-next; /=printf(“n请输入车次: “); scanf(“%s“,sequence);if( strcmp(sequence,“B“)=0 | strcmp(sequence,“b“)=0 ) return 0;/train_p1=head;/printf(“n 你将要定车次:%s 的车票,要定其它车次请返回上一层n“,train_p1-sequence);

25、/查找车次while( strcmp(sequence,train_p1-sequence)!=0 if( strcmp(sequence,train_p1-sequence)!=0 ) printf(“n没有查询到车次%s!n“,sequence); goto end_b;node_p2=train_p1-nhead;if( strcmp(sequence,train_p1-sequence)=0 )printf(“n 余票数:%dn“,train_p1-SpareTicketNum); / 输出余票数printf(“请输入订票数量:“); scanf(“%d“,if( ticket_sum

26、=0 ) printf(“你没有订票!n“); goto end_b; if( train_p1-SpareTicketNum = ticket_sum )/查找到最后的结点,node_p2 指向最后的链表if( node_p2!=NULL )while( node_p2-next!=NULL ) node_p2=node_p2-next; /=start_b2:printf(“请输入姓名t 身份证号码(7 位)n “);scanf(“%s%s“,name,IDcard);/验证身份证号码位数是否正确if( !checking(7,IDcard) printf(“身份证号格式不正确! n“);

27、 goto start_b2; node_p1=(struct node *)malloc(sizeof(struct node); strcpy(node_p1-name,name); /乘客姓名strcpy(node_p1-IDcard,IDcard); /乘客身份证号码node_p1-TicketNum=ticket_sum; /订票总数node_p1-FareSum=ticket_sum * train_p1-fare ; /总票价 /printf(“MaxTicket=%d“,MaxTicket);if( train_p1-nhead=NULL ) train_p1-nhead=no

28、de_p1;else node_p2-next=node_p1;node_p2=node_p1;node_p2-next=NULL;train_p1-SpareTicketNum-=ticket_sum; /修改该车次的余票数printf(“n 订票成功!n“);else printf(“n 余票数不足,订票失败! n“);/ else printf(“n没有查询到!n“); boolean=0; goto start_b; save();/getch();/print();end_b:printf(“n-“);putchar(10);printf(“ n“); printf(“ 请选择您所需

29、的操作 n“); printf(“ 1.继续订票 n“); printf(“ 2.返回上一层 n“); printf(“ 3.返回主菜单 n“); printf(“ 4.退出 n“); printf(“ n“); printf(“n请输入: “);scanf(“%s“,if( strcmp(sect_2,“1“)=0 ) boolean=1; goto start_b1; else if( strcmp(sect_2,“2“)=0 ) goto start_b; else if( strcmp(sect_2,“3“)=0 ) return 0;else if( strcmp(sect_2,“4

30、“)=0 ) exit(0);else return 0;/=/检查输入的省份证好是否符合规定的位数checking(int n,char check20) int len=0;if( (len=strlen(check)!=n ) return 0;else return 1;/=void save(void)FILE *fp,*pa;printf(“n正在保存.n“);/存入 Trani.txt 车次信息/printf(“n正在保存 Trani.txt .n“);/if( (fp=fopen(“train.txt“,“w“)=NULL ) for(int i=0; iterminal,tr

31、ain_p1-sequence,train_p1-StartTime-year,train_p1-StartTime-month,train_p1-StartTime-day,train_p1-StartTime-hour,train_p1-StartTime-minute,train_p1-fare,train_p1-SpareTicketNum);train_p1=train_p1-next;fclose(fp);/print();/存入 passenger.txtint i=0,j=0;/* /=char passPASS_N20,cc2;for( i=0; inhead;strcpy(

32、pass,train_p1-sequence);strcat(pass,“.txt“);if( (pa=fopen(pass,“w“)=NULL )for(int i=0; iname,node_p1-IDcard,node_p1-TicketNum,node_p1-FareSum);node_p1=node_p1-next;/printf(“已存完%sn“,passj);fclose(pa);/train_p1=train_p1-next;j+;printf(“已保存完毕!n“);/=/将车次和乘客信息保存到文件中refund(void) int false_IDSum=0; /记录退票 输

33、入身份证错误次数int false_trainNum=0; /记录退票 输入车次错误次数int idcode=0; /booleanstart_ref:system( “cls “); /清屏char sequence10; /车次char IDcard20; /乘客身份证号码int TicketNum=0; /退票数char sect_110;/格式for(int i=0; isequence)!=0 train_p1=train_p1-next; if( strcmp(sequence,train_p1-sequence)!=0 ) false_trainNum+;printf(“提示:没

34、有该车次!“); if( false_trainNumnhead)=NULL ) printf(“该车次没有乘客! 按任意键重新输入.n“); getch(); goto start_ref; /=/输入身份证号printf(“n请输入 身份证号码: “);scanf(“%s“,IDcard);if( false_trainNum=0 ) false_IDSum+; /如果车次一次也没有输错else false_IDSum=false_trainNum; /车次输入错误过/printf(“false_IDSum=%d“,false_IDSum);/=/继续退票start_ticket: /查找

35、相应的车次结点=train_p1=head;while( strcmp(sequence,train_p1-sequence)!=0 train_p1=train_p1-next; /找到了相应的车次if( strcmp(sequence,train_p1-sequence)=0 )IDCARD:/以下是身份证验证区if( idcode=1)if( false_IDSumnhead)=NULL ) printf(“该车次没有乘客!n“);goto start_ref;while( strcmp(IDcard,node_p1-IDcard)!=0 node_p1=node_p1-next; /=

36、if(node_p1=NULL) printf(“本车次没有你的信息!n按 R 键重新输入身份证号 按 B 键返回上一层n请输入: “);scanf(“%s“,sect_1);if( strcmp(sect_1,“B“)=0 ) goto start_ref;else if( strcmp(sect_1,“R“)=0 ) idcode=1; goto IDCARD; else goto start_ref;if( strcmp(IDcard,node_p1-IDcard)=0 )printf(“n您的已定票总数:%dn“,node_p1-TicketNum);printf(“n请输入退票数量:

37、 “);scanf(“%d“,if( TicketNum TicketNum ) /退票数小于订票数train_p1-SpareTicketNum+=TicketNum; /余票数增加node_p1-TicketNum-=TicketNum; printf(“n退票%d 张成功!n“,TicketNum);/printf(“n.1n“); getch();else if( TicketNum = node_p1-TicketNum) /退票数等于订票数train_p1-SpareTicketNum+=TicketNum; /余票数增加if( train_p1-nhead=node_p1 ) t

38、rain_p1-nhead=node_p1-next ;else node_p2-next=node_p1-next ;free(node_p1); /printf(“n退票%d 张成功!n“,TicketNum);/printf(“n2.n“); getch();else /退票数大于订票数 printf(“n输入的退票数量不正确,请重新输入!n按 R 键继续按 B 返回n “); scanf(“%s“,if( strcmp(sect_1,“R“)=0 ) goto start_ticket; /重新输入退票数if( strcmp(sect_1,“B“)=0 ) goto start_ref

39、; /返回退票系统elseprintf(“n 未找到相应信息或没有订票,重新输入身份证号码!“);idcode=1; goto IDCARD;/=save();printf(“n-n“);printf(“ n“); printf(“ 请选择您所需的操作 n“); printf(“ 1.继续退票 n“); printf(“ 2.退其他车次车票 n“); printf(“ 3.返回主菜单 n“); printf(“ 4.退出 n“); printf(“ n“); printf(“n请输入: “);scanf(“%s“,if( strcmp(sect_1,“1“)=0 ) idcode=0; got

40、o start_ticket; if( strcmp(sect_1,“2“)=0 ) goto start_ref;else if( strcmp(sect_1,“3“)=0 ) return 0;else if( strcmp(sect_1,“4“)=0 ) exit(0);else return 0;/=/其他查询else_find(void) start_e_f:read();system( “cls “); /清屏putchar(10);char sect_310;char terminal20; /终点站char sequence20; /车次int sum_Ticket=SUM_TICKET; int year=2010,month=1,day=1; /日期(年.月.日)int n_train=0; /int n_0=0;/格式for(int i=0; iSpareTicketNum=0 ) n_0+;if( n_0=1 ) printf(“n 余票数为 0 的车次:n“);printf(“车次:

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报