火车订票管理系统.docx

上传人:b****5 文档编号:5366375 上传时间:2022-12-15 格式:DOCX 页数:48 大小:29.21KB
下载 相关 举报
火车订票管理系统.docx_第1页
第1页 / 共48页
火车订票管理系统.docx_第2页
第2页 / 共48页
火车订票管理系统.docx_第3页
第3页 / 共48页
火车订票管理系统.docx_第4页
第4页 / 共48页
火车订票管理系统.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

火车订票管理系统.docx

《火车订票管理系统.docx》由会员分享,可在线阅读,更多相关《火车订票管理系统.docx(48页珍藏版)》请在冰豆网上搜索。

火车订票管理系统.docx

火车订票管理系统

火车订票管理系统

假设有5条火车线路(起点均为济南),每条线路所涉及的信息有:

终点站、车次、发车时间(年.月.日.时.分)、票价、余票数(假设火车总票数为300)。

乘客订票信息包括:

乘客姓名、乘客身份证号码、订票数,总票价。

本系统要求用结构体数组和链表实现,将火车线路信息存放在结构体数组中,每条线路对应一个链表,乘客订票就是在链表中插入结点,乘客退票就是在链表中删除结点。

链表的结点类型和结构体类型定义如下:

structnode//乘客订票信息

{

charname[10];//乘客姓名

charIDcard[20];//乘客身份证号码

intTicketNum;//订票数

floatFareSum;//总票价

structnode*next;//指针成员

};

structDtime//发车时间

{

shortyear;

shortmonth;

shortday;

shorthour;

shortminute;

};

structtrain//线路

{

charterminal[10];//终点站

charsequence[10];//车次

structDtimeStartTime;//发车时间

floatfare;//票价

intSpareTicketNum;//余票数

structnode*head;//指针成员,指向该线路第一个订票乘客

};

系统整体结构见图9.3所示。

系统的主要功能包括:

1.火车线路查询功能,乘客输入终点站名称或输入车次,输出相应的火车线路信息。

2.订票功能。

乘客输入车次和订票数,先查询该车次的余票数,若余票数大于等于订票数,则为乘客办理订票手续,要求乘客输入姓名、身份证号码,计算出总票价,产生一个新结点,将该结点添加到对应车次的链表中,然后修改该车次的余票数。

若余票数小于订票数,则输出提示信息"余票数不足,订票失败!

"。

3.退票功能。

乘客输入车次和身份证号码,在该车次对应的链表中查找该乘客,若找到,询问乘客退票数量,若退票数小于订票数,则只需修改结点的订票数;若退票数等于订票数,则将该乘客对应的结点删除,然后修改该车次的余票数;若没找到,则应提示"未找到相应信息",要求乘客重新输入车次和身份证号码,再进行查找,如果仍未找到,则输出提示信息"输入信息错误,退票失败!

"。

4.其他查询功能。

(1)输入车次,输出该车次的全部订票信息。

(2)输入车次,输出该车次的订票数和余票数。

(3)输入终点站名称,输出相关火车线路的信息。

(4)输入日期(年.月.日),输出发车时间为该天的火车线路的信息。

(5)输出余票数为0的火车线路的信息。

*/

#include"stdio.h"

#include"string.h"

#include"stdlib.h"

#include"conio.h"

#include"cstdlib"

#defineSUM_TICKET300;//车票总数

#definePASS_N5//车次总数,对应这些个乘客文件

//================================================================

//函数声明

add_train();//增加车次

admin_passger();//乘客管理

admin_password();//管理员密码管理

admin_train();//管理员权限:

管理车次和乘客

booking();//订票

checking(intn,charcheck[20]);//检查输入的省份证好是否符合规定的位数

check_Date(intmax,intmin,intmn);//检查日期是否符合标准的格式

else_find();//其他查询功能

find();//查找功能

mod_train();//管理员权限:

修改车次的信息

print();//从屏幕输出车次信息

print_p(structtrain*train_p1);//输出对应车次的全部乘客信息

read();//从文件中读取车次和乘客信息

refund();//退票功能

voidsave();//将车次和乘客信息保存到文件中

//================================================================

//全局变量

structnode*node_p1,*node_p2;//乘客

structtrain*head=NULL,*train_p1,*train_p2;//线路

charadmin[20];

intMaxTicket=300;

structnode//乘客passengers订票信息

{

charname[20];//乘客姓名

charIDcard[20];//乘客身份证号码

intTicketNum;//订票数

intFareSum;//总票价

structnode*next;//指针成员

};

structDtime//发车时间

{

intyear;

intmonth;

intday;

inthour;

intminute;

};

structtrain//线路

{

charterminal[20];//终点站

charsequence[20];//车次

structDtime*StartTime;//发车时间

intfare;//票价

intSpareTicketNum;//余票数

intMaxTicket;//最大票数

structnode*nhead;//指针成员,指向该线路第一个订票乘客

structtrain*next;//指针成员,指向下一条线路

};

//============================================================================================================

//从文件中读取车次和乘客信息

intread(void)//从文件读取信息

{

system("color1f");//设置控制台背景色

FILE*fp,*pa,*ad;//打开文件,实例化三个文件结构体的指针

intsite_sum=0,sum_ch=0;//总站点

intpass_sum[5]={0};//

charch;

printf("\n※※正在读取文件.......\n");

//读取train.txt文件名和文件路径

//printf("\n※※正在读取train.txt文件.......\n");/////////////////////////////////////////////

//如果打不开也写不进,那就新建个

if((fp=(fopen("train.txt","r")))==NULL)

{

if((fp=fopen("train.txt","w"))==NULL)

{printf("\n※※Cannotopenthefile:

train.txt!

\n※※Pleaseconfirmthefilealreadyexists!

\n");exit(0);}//找不到文件train.txt,请确定train.txt的确存在。

fclose(fp);

head=NULL;//链表置为空NULL

}

//如果车次源文件不存在,则新建空train文件

else

{

if((fp=fopen("train.txt","r+"))==NULL)

{

putchar(10);//在控制台输出10的ASSIC码,同\n

for(inti=0;i<50;i++)

printf("%c",23);

putchar(10);

printf("※※Cannotopenthefile:

train.txt!

\n※※Pleaseconfirmthefilealreadyexists!

\n");exit(0);

}

/*while(!

feof(fp))//feof用来判断是否到了某个流的结尾

{

ch=fgetc(fp);//读取字符

if(ch=='\n'||ch=='')

sum_ch++;

site_sum++;

}

if(sum_ch==site_sum)

{head=NULL;return0;}

*/else

if(ch=fgetc(fp)>=0)

{

rewind(fp);

while(!

feof(fp))

{

train_p1=(structtrain*)malloc(sizeof(structtrain));

train_p1->nhead=NULL;

train_p1->StartTime=(structDtime*)malloc(sizeof(structDtime));//开辟新节点

fscanf(fp,"%s%s%d%d%d%d%d%d%d\n",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->SpareTicketNum);

site_sum++;

if(site_sum==1)head=train_p1;

elsetrain_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("admin.txt","w"))==NULL)

{

putchar(10);

for(inti=0;i<50;i++)printf("%c",23);

putchar(10);

printf("※※Cannotopenthefile:

admin.txt!

\n※※Pleaseconfirmthefilealreadyexists!

\n");exit(0);

}

strcpy(admin,"admin");

fprintf(ad,"%s",admin);//文件指针,输出字符串,输出表列;将格式化的数据写入文件

fclose(ad);

}//如果密码源文件不存在,则新建空admin.txt文件,初始密码:

admin

if((ad=fopen("admin.txt","r"))==NULL)

{

putchar(10);

for(inti=0;i<50;i++)printf("%c",23);

putchar(10);

printf("※※Cannotopenthefile:

admin.txt!

\n※※Pleaseconfirmthefilealreadyexists!

\n");exit(0);

}

fscanf(ad,"%s",admin);

//printf("admin=%s\n",admin);

if(strcmp(admin,"")==0)

{

strcpy(admin,"admin");

fprintf(ad,"%s",admin);

fprintf(ad,"%s",admin);

}//如果密码为空,怎初始化为admin

fclose(ad);

//读取passenger.txt

//printf("site=%d\n",site_sum);

/*//数字转换为字符串

charpass[N][20],cc[2];

//======================

for(i=0;i

{

cc[0]=i+'0';cc[1]='\0';

strcpy(pass[i],"passenger");

strcat(pass[i],cc);

strcat(pass[i],".txt\0");

}

*///=====================

charpass[20];

inti=0,j=0;

train_p1=head;

for(j=0;train_p1!

=NULL;j++)

{

//printf("\n※※正在读取%s文件.......\n",train_p1->sequence);////////////////////////////////////////////

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(inti=0;i<50;i++)printf("%c",23);putchar(10);

printf("※※Cannotopenthefile:

%s!

\n※※Pleaseconfirmthefilealreadyexists!

\n",pass);

exit(0);

}

elsefclose(pa);

}

else

{

if((ch=fgetc(pa))>=0)

{

rewind(pa);

while(!

feof(pa))

{

node_p1=(structnode*)malloc(sizeof(structnode));node_p1->next=NULL;

fscanf(pa,"%s%s%d%d\n",node_p1->name,node_p1->IDcard,&node_p1->TicketNum,&node_p1->FareSum);

pass_sum[j]++;

if(pass_sum[j]==1)train_p1->nhead=node_p1;

elsenode_p2->next=node_p1;

node_p2=node_p1;

}

node_p2->next=NULL;

}

fclose(pa);

}

//

//printf("%d\n",j);

train_p1=train_p1->next;

}

//=================================

/*

if((fopen("MaxTicket1.txt","r"))==NULL)

{

ad=fopen("MaxTicket1.txt","w");

MaxTicket=300;

fprintf(ad,"%d",MaxTicket);

fclose(ad);

}

//printf("\n※※正在读取文件MaxTicket......\n");

if((fopen("MaxTicket.txt","r"))==NULL)

{

ma=fopen("MaxTicket.txt","W");

MaxTicket=300;

printf("\nMaxTicket=%d\n",MaxTicket);

fprintf(ma,"%s",admin);

}

elsefscanf(ma,"%d",&MaxTicket);

fclose(ma);

*/

//printf("\n※※全部文件读取完毕!

\n");

}

//============================================================================================================

//从屏幕输出车次信息

intprint(void)

{

//调试:

输出

putchar(10);inti=1;

if((train_p1=head)==NULL)

{

//如果车次文件是空文件

printf("※※没有任何车次!

按任意键返回上一层\n");

getch();return0;

}//

printf("终点站车次发车时间\t票价\t余票数\n\n");

while(train_p1!

=NULL)

{

printf("%s%s%4d-%2d-%2d%2d:

%2d\tY%d\t%d\n",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->SpareTicketNum);

train_p1=train_p1->next;

//printf("i=%d\n",i);i++;

}

return1;

}

//============================================================================================================

//输出对应车次的全部乘客信息

print_p(structtrain*train_p1)

{

//调试:

输出

putchar(10);inti=1;

if((node_p1=train_p1->nhead)==NULL)

{

printf("※※该车次没有乘客!

\n");

return0;

}

printf("车次\t乘客姓名\t乘客身份证号\n\n");

while(node_p1!

=NULL)

{

printf("%s\t%s\t\t%s\n",train_p1->sequence,node_p1->name,node_p1->IDcard);

node_p1=node_p1->next;

}

return0;

}

//============================================================================================================

find(void)//查询

{

start_f:

system("cls");//清屏

putchar(10);

charsect_1[20]={"1"};

charterminal[20];//终点站

charsequence[20];//车次

//格式

putchar(10);

for(inti=0;i<50;i++)

printf("%c",23);

printf("\n欢迎使用火车票查询系统\n");

for(i=0;i<50;i++)

printf("%c",23);putchar(10);

for(i=0;i<50;i++)

printf("%c",3);

//

putchar(10);

printf("┌————————————┐\n");

printf("│请选择您所需操作│\n");

printf("│1.按终点站查询│\n");

printf("│2.按车次查询│\n");

printf("│3.返回主菜单│\n");

printf("│4.退出│\n");

printf("└————————————┘\n");

printf("\n\n※※请选择:

");

scanf("%s",sect_1);

if(strcmp(sect_1,"1")==0)

{

start_f1:

if((train_p1=head)==NULL)

{

//如果车次文件是空文件

printf("※※没有任何车次!

按任意键返回上一层\n");

getch();gotostart_f;

}

printf("※※请输入终点站:

");scanf("%s",terminal);

while(strcmp(terminal,train_p1->terminal)!

=0&&train_p1->next!

=NULL)

{train_p1=train_p1->next;}

if(strcmp(terminal,train_p1->terminal)==0)

{

printf("\n终点站车次发车时间\t票价\t余票数\n");

printf("%s%s%4d-%2d-%2d%2d:

%2d\tY%d\t%d\n",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->min

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

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1