1 Star 0 Fork 1

Lyew18/火车票务系统

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
主分支·最终代码 11.94 KB
一键复制 编辑 原始数据 按行查看 历史
Lyew18 提交于 2023-03-15 16:15 . add 主分支\·最终代码.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//火车票信息模块 (以结构体实现)
typedef struct train_infor
{
char number[10];//火车车次
char start[20];//始发地
char end[20];//终点站
int year1,month1,day1,h1,m1;//始发时间
int year2,month2,day2,h2,m2;//到站时间
int price;//票价
}train;
int cnum=0;//记录总共列车信息的数量
train info[10000];//以结构体类型的数组用来保存所有的车次信息;
train users[100][100];//二维数组用来保存用户信息,每一行可以用来表示一个用户的购票信息
int vcs[100]={0};//记录每一个用户自己账户的票数,初始为0
//录入火车票信息(即添加模块)
void Traininfo()
{
int sum,i;
printf("请输入要录入的列车信息条数:");
scanf("%d",&sum);
printf("请依次输入火车车次 始发地 终点站 始发时间(年/月/日 时:分) 到站时间(年/月/日 时:分) 票价 ;\n");
printf("每输入一项数据后以空格结束,进行下一数据录入\n");
for(i=cnum;i<cnum+sum;i++)/*录入信息从cnum开始录入信息,避免管理员先进行插入或添加、删除等操作后再来录入数据,
发生覆盖;同时这样可以多次循环进行录入操作(在之前的信息下继续添加)*/
{
scanf("%s %s %s %d/%d/%d %d:%d %d/%d/%d %d:%d %d",info[i].number,info[i].start,info[i].end,&info[i].year1,&info[i].month1,&info[i].day1,&info[i].h1,&info[i].m1,&info[i].year2,&info[i].month2,&info[i].day2,&info[i].h2,&info[i].m2,&info[i].price);
}
printf("录入成功!\n");
cnum+=sum;
return ;
}
//显示火车票信息
void showtrain()
{
if(cnum==0)
{
printf("暂无列车信息!\n");
return ;
}
int i;
printf("车次\t始发地\t终点站\t发车时间\t\t到达时间\t\t票价\n");
//\t 即水平制表符。将当前位置移到下一个tab位置。使车票信息显示更清晰
for(i=0;i<cnum;i++)
printf("%s\t%s\t%s\t%d/%02d/%02d %02d:%02d\t%d/%02d/%02d %02d:%02d\t%d\n",info[i].number,info[i].start,info[i].end,info[i].year1,info[i].month1,info[i].day1,info[i].h1,info[i].m1,info[i].year2,info[i].month2,info[i].day2,info[i].h2,info[i].m2,info[i].price);
return ;
}
//查询火车票信息(管理员以车次查询更便捷,地点区间查询在用户界面)
void searchtrain()
{
int i;
printf("请输入查询车次:");
char ch[10];//记录要查询的车次
scanf("%s",ch);
for(i=0;i<cnum;i++)
{
if(strcmp(ch,info[i].number)==0)//比较所有的列车信息一直到和输入的车次相同则找到并输出,字符串的比较要是用strcmp()函数;如果相等则为0
{
printf("车次\t始发地\t终点站\t发车时间\t\t到达时间\t\t票价\n");
printf("%s\t%s\t%s\t%d/%02d/%02d %02d:%02d\t%d/%02d/%02d %02d:%02d\t%d\n",info[i].number,info[i].start,info[i].end,info[i].year1,info[i].month1,info[i].day1,info[i].h1,info[i].m1,info[i].year2,info[i].month2,info[i].day2,info[i].h2,info[i].m2,info[i].price);
return ;//由于车次唯一确定,找到后直接结束无需再查找
}
}
printf("无此列车信息!\n");//如果找到前面就结束则不会运行到此处;所以运行到此处只能是没有找到;
return ;
}
//修改火车票信息
void Modify()
{
int i;
printf("请输入要修改的车次:");
char ch[10];//记录要修改的车次
scanf("%s",ch);
//和查询车票一样先找到该列车所在的位置,然后对其进行修改
for(i=0;i<cnum;i++)
{
if(strcmp(ch,info[i].number)==0)//比较所有的列车信息一直到和输入的车次相同则找到并输出,字符串的比较要是用strcmp()函数;如果相等则为0
{
printf("该列车原信息:\n");
printf("车次\t始发地\t终点站\t发车时间\t\t到达时间\t\t票价\n");
printf("%s\t%s\t%s\t%d/%02d/%02d %02d:%02d\t%d/%02d/%02d %02d:%02d\t%d\n",info[i].number,info[i].start,info[i].end,info[i].year1,info[i].month1,info[i].day1,info[i].h1,info[i].m1,info[i].year2,info[i].month2,info[i].day2,info[i].h2,info[i].m2,info[i].price);
printf("请输入新的数据:\n");
printf("车次\t始发地\t终点站\t发车时间\t\t到达时间\t\t票价\n");
scanf("%s %s %s %d/%d/%d %d:%d %d/%d/%d %d:%d %d",info[i].number,info[i].start,info[i].end,&info[i].year1,&info[i].month1,&info[i].day1,&info[i].h1,&info[i].m1,&info[i].year2,&info[i].month2,&info[i].day2,&info[i].h2,&info[i].m2,&info[i].price);
printf("修改成功!\n");
return ;//修改后直接结束无需再进行
}
}
printf("无此列车信息!\n");//如果找到前面就结束则不会运行到此处;所以运行到此处只能是没有找到;
return ;
}
//管理员菜单
void admin_menu()
{
printf("***************************************************************\n");
printf("* 欢迎进入火车票信息管理系统 *\n");
printf("***************************************************************\n");
printf("* 1、录入火车票信息 *\n");
printf("* 2、显示火车票信息 *\n");
printf("* 3、查询火车票信息 *\n");
printf("* 4、修改火车票信息 *\n");
printf("* 0、退出 *\n");
printf("***************************************************************\n");
}
//管理员界面
void admin()
{
admin_menu();//先显示菜单页面
int choose2;
while(~scanf("%d",&choose2))//选择对应的操作;
{
switch (choose2)
{
case 1:
Traininfo();
break;
case 2:
showtrain();
break;
case 3:
searchtrain();
break;
case 4:
Modify();
break;
case 0:
return ;//输入0直接退出整个函数
default :
printf("请注意选择有效操作对应编号!\n");
break ;
}
admin_menu();//每次操作结束后再次打印菜单栏
}
}
//用户订票模块
void bookticket(int no)
{
int i;
printf("请输入你要购票的车次:\n");
char che[10];
scanf("%s",che);
for(i=0;i<cnum;i++)
{
if(strcmp(che,info[i].number)==0)
{
users[no][vcs[no]]=info[i];
vcs[no]++;//该用户的购票数加一;
printf("购票成功!\n");
return ;
}
}
printf("无此列车信息!\n");
return ;
}
//火车票区间查询
void look_up(int no)
{
if(cnum==0)
{
printf("无车次信息,请管理员进行车次信息录入!\n");
return ;
}
char starts[20];
char ends[20];
int cnums=0,i;//记录查询到的车次条数
printf("请输入查询的首发地 终点站区间(中间使用空格隔开):\n");
scanf("%s %s",starts,ends);
for(i=0;i<cnum;i++)
{
if(strcmp(starts,info[i].start)==0&&strcmp(ends,info[i].end)==0)
{
printf("车次\t始发地\t终点站\t发车时间\t\t到达时间\t\t票价\n");
printf("%s\t%s\t%s\t%d/%02d/%02d %02d:%02d\t%d/%02d/%02d %02d:%02d\t%d\n",info[i].number,info[i].start,info[i].end,info[i].year1,info[i].month1,info[i].day1,info[i].h1,info[i].m1,info[i].year2,info[i].month2,info[i].day2,info[i].h2,info[i].m2,info[i].price);
cnums++;
}
}
if(cnums==0)
{
printf("无此区间车次信息!\n");
return ;
}
else
{
printf("------------------------\n");
printf("| 是否购票 |\n");
printf("------------------------\n");
printf("| 1、是 | 2、否 |\n");
printf("------------------------\n");
int choose4;//记录用户的选择
while(~scanf("%d",&choose4))
{
switch(choose4)
{
case 1:
bookticket(no);
return;
case 2:
return ;
default :
printf("请选择有效操作对应编号哦!\n");
break ;
}
printf("------------------------\n");
printf("| 是否购票 |\n");
printf("------------------------\n");
printf("| 1、是 | 2、否 |\n");
printf("------------------------\n");
}
}
}
//用户查询购票信息(即购票信息保存模块)
void SaveTraininfo(int no)
{
int i;
if(vcs[no]==0)
{
printf("无购票记录!\n");
return ;
}
else
{
printf("车次\t始发地\t终点站\t发车时间\t\t到达时间\t\t票价\n");
for(i=0;i<vcs[no];i++)
{
printf("%s\t%s\t%s\t%d/%02d/%02d %02d:%02d\t%d/%02d/%02d %02d:%02d\t%d\n",users[no][i].number,users[no][i].start,users[no][i].end,users[no][i].year1,users[no][i].month1,users[no][i].day1,users[no][i].h1,users[no][i].m1,users[no][i].year2,users[no][i].month2,users[no][i].day2,users[no][i].h2,users[no][i].m2,users[no][i].price);
}
}
}
//用户菜单
void user_menu()
{
printf("***************************************************************\n");
printf("* 欢迎进入火车票售票系统 *\n");
printf("***************************************************************\n");
printf("* 1、火车票区间查询 *\n");
printf("* 2、查询已购票信息 *\n");
printf("* 0、退出 *\n");
printf("***************************************************************\n");
}
//用户界面
void user()
{
int no;
printf("请输入你的用户编码:");
scanf("%d",&no);//记录用户编码用来对应的保存其购票信息
user_menu();
int choose3;
while(~scanf("%d",&choose3))//记录用户选择的操作;
{
switch(choose3)
{
case 1:
look_up(no);
break;
case 2:
SaveTraininfo(no);
break;
case 0:
return ;//输入0直接退出整个函数
default :
printf("请选择有效操作对应编号哦!\n");
break ;
}
user_menu();
}
}
int main()
{
printf("提示:整个输入过程请严格按照格式,标点均为英文状态下输入!\n");
printf("-------------请选择身份-------------\n");
printf("| 1、管 理 员 | 2、用 户 |\n");
printf("| 0、结束程序 |\n");
printf("------------------------------------\n");
//输入1表示进入管理员界面,2进入用户界面
int choose1;
while(~scanf("%d",&choose1))//记录选择的序号,多组测试
{
if(choose1==0)
break;
switch (choose1)
{
case 1:
admin();
break;
case 2:
user();
break;
default :
printf("请选择有效操作对应编号哦!\n");
break;
}
printf("-------------请选择身份-------------\n");
printf("| 1、管 理 员 | 2、用 户 |\n");
printf("| 0、结束程序 |\n");
printf("------------------------------------\n");
}
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/lyew18/train-ticketing-system.git
[email protected]:lyew18/train-ticketing-system.git
lyew18
train-ticketing-system
火车票务系统
master

搜索帮助