火车票务管理系统_列车票务管理系统
火车票务管理系统由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“列车票务管理系统”。
///////////////////////达内课后训练项目-火车票务管理系统///////////////////////// //
// //
姓名: X X
学号:1005010124
//
//
//
//
(1)火车时刻信息录入:包括车次、日期、起点、终点、开车时间、到达时间、票价// //
数据存入数据文件hchsk.dat或hchsk.txt中。
// //
每次打开软件自动读入文件中的信息
// //
(2)火车时刻信息查询。
// //
按照车次查询
// //
按终点查询
// //
按起点查询
// //
按终点和日期查询
// //
(3)统计
// //
按终点统计每日的车次数
// //
按起点统计每日的车次数
// // 系统主界面应有以下功能选项
// //
录入火车时刻信息
// //
浏览火车时刻信息
// //
查询火车时刻信息
// //
删除火车时刻信息
// //
统计火车车次
// //
退出
// /////////////////////////////////////////////////////////////////////////////////
#include #include #include #include
#define N 30
void menu();
//函数菜单 void save();
//保存文件信息
void open();
//运行软件的时候 自动打开以前录入的信息,并读入链表 void display();
//浏览输入的消息记录 void SearchTrain();
//根据火车车次查询 void Search();
//选择查询方式 void Quit();
//退出系统 void Great_Ticket();
//信息整体录入 void GoMenu();
//返回主菜单
void search(int x);
//按车次,启动,终点查询 void SearchEnd_Data();
//按终点和日期终点查询 void Statistics_Star();
//按起点统计车次数量 void Statistics_End();
//按终点统计车次数量 void Detele();
//删除火车时刻信息
struct Train_Ticket *Input(struct Train_Ticket *h);//单个信息输入 struct Train_Ticket *Output(struct Train_Ticket *h);//单个信息输出
struct Train_Ticket { char trains[N];
//车次
char data[N];
// 日期
char star[N];
//起点
char end[N];
// 终点
char star_time[N];
//开车时间
char end_time[N];
//到大时间
char prices[N];
//票价
struct Train_Ticket *next;
};struct Train_Ticket *head;//链表头
//录入单个信息
struct Train_Ticket *Input(struct Train_Ticket *h){
printf(“请输入:日期
起点
终点
开车时间
到达时间
票价n”);fflush(stdin);scanf(“%s %s %s %s %s %s”,h->data, h->star, h->end, h->star_time, h->end_time, h->prices);return h;}
//输出单个信息
struct Train_Ticket *Output(struct Train_Ticket *h){ printf(“%s %s %s %s %s %s %sn”,h->trains,h->data, h->star, h->end, h->star_time, h->end_time, h->prices);return h;}
//保存文件 void save(){ FILE *fp;struct Train_Ticket *p;p = head;fp = fopen(“hchsk.txt”,“w+”);if(fp == NULL){
printf(“打开文件失败!n”);
return;} else {
while(p!= NULL)
{
fprintf(fp,“ %s %s %s %s %s %s %s”,p->trains,p->data, p->star, p->end, p->star_time, p->end_time, p->prices);
p = p->next;
} // printf(“成功保存文件!n”);} printf(“n”);fclose(fp);}
//录入整个链表信息
车次号不能相同 否则录入信息失败 void Great_Ticket(){
struct Train_Ticket *p1,*p2;p1 = p2 =(struct Train_Ticket *)malloc(sizeof(struct Train_Ticket));printf(“请输入车次(车次为'0'时结束输入):”);if(p2 == NULL){
free(p2);
printf(“ 未分配内存成功!n”);
return;} else {
fflush(stdin);
scanf(“%s”, &p2->trains);
p2->next = NULL;} while(p2->trains[0]!= '0')
//车次号不为结束标志‘0’
{
p2 = Input(p2);
if(head == NULL)
{
head = p2;
}
else
{
p1 = head;
while(p1->next!= NULL)
{
if(!strcmp(p1->trains,p2->trains))
//判断车次是否存在{
printf(“该车次已存在,输入信息失败!nn”);
return;
}
p1 = p1->next;
}
p1->next = p2;
}
p2 =(struct Train_Ticket *)malloc(sizeof(struct Train_Ticket));
printf(“请输入车次(车次为'0'时结束输入):”);
if(p2!= NULL)
{
fflush(stdin);
scanf(“%s”, &p2->trains);
p2->next = NULL;
} } save();//输入完成后 自动保存输入的信息到文件件
return;}
//打开文件信息 void open(){ FILE *fp;if((fp = fopen(“hchsk.txt”,“r”))== NULL){
printf(“文件无任何消息记录!n”);
return;} struct Train_Ticket *p1,*p2;p1 = p2 =(struct Train_Ticket *)malloc(sizeof(struct Train_Ticket));head = p1;while(!feof(fp))
//文件不到结束时,将文件内容写到链表中 {
fscanf(fp,“%s %s %s %s %s %s %s”,&p2->trains,&p2->data, &p2->star, &p2->end, &p2->star_time, &p2->end_time, &p2->prices);
p1->next = p2;
p1 = p2;
p2 =(struct Train_Ticket *)malloc(sizeof(struct Train_Ticket));
p1->next = NULL;} fclose(fp);return;}
//浏览
void display(){ char ch;struct Train_Ticket *p1;p1 = head;if(p1 == NULL){
printf(“无任何记录!n”);
return;}
printf(“车次
日期
起点
终点
开车时间 while(p1!= NULL){
Output(p1);
if(p1->next!= NULL)
p1 = p1->next;
else
{
printf(”n“);
printf(”返回主菜单?(y/n): “);
fflush(stdin);
scanf(”%c“, &ch);
if(ch == 'y' || ch == 'Y')
{
system(”cls“);
GoMenu();
}
else
return;
到达时间票价n”);
} } }
//删除火车时刻信息 void Delete(){ char c[30];char ch;printf(“请输入要删除的火车车次:”);scanf(“%s”, c);struct Train_Ticket *p1,*p2;p1 =(struct Train_Ticket *)malloc(sizeof(struct Train_Ticket));p1 = head;if(p1 == NULL){
printf(“无任何记录!n”);
return;} p2 = p1->next;
if(!strcmp(p1-> trains, c))
//如果删除的信息是在表头
{
printf(“您要删除的信息如下:n”);
printf(“车次
日期
起点
终点
开车时间
到达时间
票价n”);
Output(p1);
printf(“确定删除吗?(y/n): ”);
fflush(stdin);
scanf(“%c”, &ch);
if(ch == 'y' || ch == 'Y')
{
head = p2;
printf(“成功删除该信息!nn”);
save();
//删除完成后,自动保存信息
free(p1);
//释放p1
return;
}
else
return;
}
else
//要删除的信息不在表头
{
while(p2!= NULL)
{
if(!strcmp(p2->trains, c))
{
printf(“您要删除的信息如下:n”);
printf(“车次
日期
起点
终点
开车时间
到达时间
票价n”);
Output(p2);
printf(“确定删除吗?(y/n): ”);
fflush(stdin);
scanf(“%c”, &ch);
if(ch == 'y' || ch == 'Y')
{
p1->next = p2->next;
printf(“成功删除该信息!nn”);
save();
//删除完成后,自动保存信息
free(p2);
//释放p2
return;
}
}
else if(p2->next!= NULL)
{
p1 = p1->next;
p2 = p2->next;
}
else
{
printf(“无此车次信息,删除失败!n”);
return;
}
} } }
//按火车车次、起点、终点查询 void search(int x){ char Tra[30];char a[30];struct Train_Ticket *p;p = head;printf(“请输入您要查询的内容:”);scanf(“%s”, Tra);if(p == NULL){
printf(“对不起,无资料记录!n”);
exit(0);} else {
while(p!= NULL)
{
if(x == 1)
strcpy(a, p->trains);
if(x == 2)
strcpy(a, p->star);
if(x == 3)
strcpy(a, p->end);
if(!strcmp(a, Tra))
{
printf(“车次
日期
起点
终点
Output(p);
return;
}
p = p-> next;
}
printf(”没有您要查询的车次记录!n“);} }
//按终点和日期查询 void SearchEnd_Data(){ char end[30];char data[30];struct Train_Ticket *p;p = head;printf(”请输入您要查询的车次和日期:“);fflush(stdin);scanf(”%s %s“, end,data);if(p == NULL){
printf(”对不起,无资料记录!n“);
exit(0);} else {
开车时间到达时间票价n”);
while(p!= NULL)
{
if(!strcmp(p->end, end)&&!strcmp(p->data,data))
{
printf(“车次
日期
起点
终点
开车时间
到达时间
票价n”);
Output(p);
}
if(p->next!= NULL)
{
p = p-> next;
}
else
return;
}
return;} }
//返回主菜单 void GoMenu(){ system(“cls”);menu();}
//查询
void Search(){ system(“cls”);int i;printf(“
1.按车次查找n”);printf(“
2.起点次查找n”);printf(“
3.终点次查找n”);printf(“
4.终点和日期次查找n”);printf(“
5.返回主菜单n”);T: printf(“请选择:”);fflush(stdin);scanf(“%d”,&i);switch(i){ case 1:
search(1);
break;case 2:
search(2);
break;case 3:
search(3);
break;case 4:
SearchEnd_Data();
break;case 5:
GoMenu();
break;default:
printf(“输入无效,请重试!n”);
goto T;} goto T;}
//按起点统计车数量 void Statistics_Star(){ int cout = 0;char b[30];struct Train_Ticket *p;p = head;printf(“请输入起点名:”);fflush(stdin);scanf(“%s”, b);if(p == NULL){
printf(“对不起,无资料记录!n”);
return;} else {
while(p!= NULL)
{
if(!strcmp(p->star, b))
{
cout ++;
}
if(p->next!= NULL)
{
p = p-> next;
}
else
{
printf(“起点为:%s 的车次共有 %d 次n”,b,cout);
return;
}
}
} }
//按终点统计车数量 void Statistics_End(){ int cout = 0;char b[30];struct Train_Ticket *p;p = head;printf(“请输入终点名:”);fflush(stdin);scanf(“%s”, b);if(p == NULL){
printf(“对不起,无资料记录!n”);
return;} else {
while(p!= NULL)
{
if(!strcmp(p->end, b))
{
cout ++;
}
if(p->next!= NULL)
{
p = p-> next;
}
else
{
printf(“终点为:%s 的车次共有 %d 次n”,b,cout);
return;
}
} } }
//统计车数量 void Statistics(){ int n;printf(“1.按起点统计
2.按终点统计n”);if(!scanf(“%d”, &n)){
printf(“输入无效!n”);
return;} else {
if(n == 1)
Statistics_Star();
else if(n == 2)
Statistics_End();
else
{
printf(“输入无效!n”);
return;
} } }
//退出 void Quit(){ char ch;printf(“确定退出吗?(y/n)n”);fflush(stdin);scanf(“%c”,&ch);if(ch == 'y' || ch == 'Y')
exit(0);else
return;}
//菜单 void menu(){ int m;printf(“************************************n”);printf(“*
火车票务管理系统
*n”);printf(“************************************n”);printf(“ ① 录入火车时刻信息
n”);
printf(“ ② 浏览火车时刻信息
n”);printf(“ ③ 查询火车时刻信息
n”);printf(“ ④ 删除火车车次
n”);printf(“ ⑤ 统计火车车次
n”);printf(“ ⑥ 退出
nn”);L: printf(“请选择功能:”);fflush(stdin);if(!scanf(“%d”,&m)){
printf(“输入无效,请重试:n”);
goto L;} switch(m){ case 1:
Great_Ticket();
break;case 2:
display();
break;
case 3:
Search();
break;case 4:
Delete();
break;case 5:
Statistics();//统计
break;
case 6:
Quit();
break;default:
printf(“输入无效,请重新输入:n”);
goto L;} goto L;}
//主菜单 int main(){ printf(“欢迎进入火车票务管理系统!n”);printf(“正在加载文档信息:”);open();
//运行软件的时候自动打开存入文件中的相关信息
for(int i = 0;i
printf(“* ”);
Sleep(400);} system(“cls”);menu();return 0;}