C语言火车票管理系统.docx
《C语言火车票管理系统.docx》由会员分享,可在线阅读,更多相关《C语言火车票管理系统.docx(20页珍藏版)》请在冰点文库上搜索。
C语言火车票管理系统
#include
#include
#include
#include
#include
#defineN1000
typedefstructTICKET//定义新结构体TICKET
{
charnum[10];//车次
charhour[3];
charmin[3];
charfrom[10];
charto[10];
floathours;
intmax;//车载容量
intnow;//已售票数
}CLASS;
intclass_num=0;
CLASSrecords[N];
intsystem_time();
voidmessage();
voidShowTable1();
voidShowTable2(inti);
voidDisplay();
voidadd();
voidsave();
voidload();//按班次查询
voidsearch();//查询
voidchange();//修改
voidquit();//退出
voidbuyticket();//售票
voiddeleteticket();//取消
intmenu_select();//菜单
intwhether(int);//判断购买时间
voidfind(chars1[],chars2[]);//按起点终点查询
voiddeletemessage();//删除
intfindnum(chars1[]);//班次查询
voidget(int,int);//修改及增加班次
char*menu[]={"欢迎使用车票查询系统",
"\n*******************菜单***********************",
"\n1.录入班次",
"\n2.浏览班次信息",
"\n3.查询路线",
"\n4.增加班次",
"\n5.售票",
"\n6.退票",
"\n7.修改班次",
"\n8.删除班次",
"\n9.退出"};
intmain()
{
system("cls");
while
(1)
{
switch(menu_select())//菜单
{
case1:
message();break;
case2:
Display();break;
case3:
search();break;
case4:
add();break;
case5:
buyticket();break;
case6:
deleteticket();break;
case7:
change();break;
case8:
deletemessage();break;
case9:
quit();break;
}
}
}
intmenu_select()//菜单
{
chars[5];
intc,i;
system("cls");
for(i=0;i<11;i++)
{
printf("%s",menu[i]);//输出菜单
}
i=0;
while(c<0||c>9)
{
printf("\n");
printf("\n请输入选项(1-9):
");
scanf("%s",s);
c=atoi(s);
}//输出菜单
returnc;
}
voidmessage()//录入
{
inti=0,j=5,h;
chars[5];
FILE*fp;//定义文件型指针变量
system("cls");//刷屏
if((fp=fopen("d:
车票管理系统0.dat","rb"))!
=NULL)//fopen打开文件
{
printf("增加信息\n");
printf("请输入任意键返回\n");
scanf("%s",s);
i=1;
}
if(i==0)
{
system("cls");//刷屏
printf("请输入班次总数:
\n");
scanf("%d",&class_num);//指向班次指针
system("cls");//刷屏
for(i=0;i{
system("cls");//刷屏
printf("请输入%d班次信息:
\n",i+1);
h=-1;
for(;h!
=i;)///循环输出
{
printf("请输入班次:
\n");
scanf("%s",records[i].num);
for(h=0;h
if(strcmp(records[h].num,records[i].num)==0)
{
printf("该班次已存在\n");
break;
}
}
get(i,j);//修改及增加班次
j=5;
}
save();//调用保存函数
}
}
/*******************************显示所有函数********************************/
voidDisplay()//显示所有函数
{
inti,j;
system("cls");//刷屏
load();//按班次查询
ShowTable1();
for(i=0,j=0;i{
if(whether(i))//判断时间是否超出
printf("|%10s|%5s:
%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,
records[i].min,records[i].from,records[i].to,records[i].hours,
records[i].max,records[i].now);
else
printf("|%10s|已发车|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
}
ShowTable2(j);
printf("\n按任意键继续\n");
getch();
}
voidShowTable1()
{
inti=2;
system("cls");//刷屏
printf("班次信息\n");
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
printf("\n|班次|发车时间|起点站|终点站|行车时间|额定载量|已售票|\n");
}
voidShowTable2(inti)
{
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
}
voidsearch()//查询班次
{
inti;
chars1[10]={'\0'},s2[10]={'\0'};
system("cls");//刷屏
printf("1.按班次查询\n");
printf("2.按终点站查询\n");
printf("3.退出\n");
printf("请选择(1-3):
\n");
scanf("%d",&i);
load();//按班次查询
switch(i)
{
case1:
printf("请输入要查询的班次:
\n");
scanf("%s",s1);
find(s1,s2);
break;
case2:
printf("请输入要查询终点站:
\n");
scanf("%s",s2);
find(s1,s2);
break;
case3:
break;
default:
printf("输入错误!
\n");
break;
}
printf("按任意键继续\n");
getch();
}
voidfind(chars1[],chars2[])
{
inti,h=0,m;
ShowTable1();
if(s2[0]=='\0')
m=1;
elsem=0;
for(i=0;iif(strcmp(s1,records[i].num)==0||strcmp(s2,records[i].to)==0)
{
printf("\n");
printf("|%10s|%5s:
%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,records[i].min,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
h+=2;
if(m==1)
break;
}
ShowTable2(h);
if(h==0)
printf("查找的班次不存在\n");
}
voidadd()
{
inti,j=5;
load();
system("cls");
printf("1.增加班次\n");
printf("2.返回\n");
printf("请选择(1-2)\n");
scanf("%d",&i);
if(i==1)
{
system("cls");
printf("1.输入要增加的班次:
\n");
scanf("%s",records[class_num].num);
for(i=0;iif(strcmp(records[class_num].num,records[i].num)==0)
{
printf("输入错误\n");
getch();
break;
}
if(i==class_num)
{
get(i,j);
class_num++;
save();
}
}
}
voidbuyticket()
{
inti;
charnum[10];
system("cls");
printf("1.售票\n");
printf("2.返回\n");
printf("请选择(1-2):
\n");
scanf("%d",&i);
if(i==1)
{
load();//按班次查询
search();
printf("请输入要订票的班次(若无请输入0):
\n");
scanf("%s",num);
for(i=0;iif(strcmp(num,records[i].num)==0)
if(records[i].max>records[i].now&&whether(i)==1)
{
records[i].now++;
printf("通向%s班次为%s的票订票成功\n",records[i].to,records[i].num);
save();
getch();
break;
}
else
{
printf("该班次已满或已发出!
\n");
getch();
}
}
}
voiddeleteticket()
{
inti;
charnum[10];
system("cls");
printf("1.退票\n");
printf("2.返回\n");
printf("请选择(1-2)\n:
");
scanf("%d",&i);
if(i==1)
{
system("cls");
load();
printf("请输入要退票的班次:
\n");
scanf("%s",num);
i=findnum(num);
if(strcmp(num,records[i].num)==0)
if(whether(i))
{
printf("是否确认");
scanf("%s",num);
if(num[0]=='y'||num[0]=='Y')
{
records[i].now--;
printf("退票成功\n");
save();
getch();
}
}
else
{
printf("该班车已发出,无法退票\n");
getch();
}
if(i==class_num)
{printf("输入错误\n");
getch();
}
}
}
voidchange()
{
charnum[10],s[10];
inth=0,j=13,i;
load();
system("cls");
printf("请输入要修改的班次:
\n");
scanf("%s",num);
i=findnum(num);
if(i==class_num)
{
printf("输入错误\n");
getch();
}
else
{
printf("确认修改\n");
scanf("%s",s);
if(s[0]=='y'||s[0]=='Y')
{
get(i,j);
save();
}
}
}
voiddeletemessage()
{
inti,h=0;
charnum[10];
system("cls");
printf("1.删除班次\n");
printf("2.返回\n");
printf("请选择(1-2):
\n");
scanf("%d",&i);
if(i==1)
{
system("cls");
printf("请输入要删除的班次:
\n");
scanf("%s",num);
i=findnum(num);
if(i==class_num)
{
printf("输入错误\n");
getch();
}
else
{
printf("是否确认\n");
scanf("%s",num);
if(num[0]=='y'||num[0]=='Y')
{
for(;irecords[i]=records[i+1];
class_num--;
save();
printf("删除成功\n");
getch();
}
}
}
}
intfindnum(chars1[])
{
inti,h=0;
ShowTable1();
for(i=0;i{
if(strcmp(s1,records[i].num)==0)
{
printf("|%10s|%5s:
%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,
records[i].min,records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
h+=2;
break;
}
}
ShowTable2(h);
returni;
}
voidsave()
{
FILE*fp1,*fp2;
if((fp1=fopen("d:
车票管理系统.dat","wb"))==NULL)//打开文件
{
printf("文件打开错误!
\n");
exit(0);
}
if((fp2=fopen("d:
车票管理系统0.dat","wb"))==NULL)
{
printf("文件打开错误!
\n");
exit(0);
}
fwrite(&class_num,sizeof(int),1,fp2);
fwrite(records,sizeof(CLASS),class_num,fp1);
fclose(fp1);fclose(fp2);
}
voidload()
{
FILE*fp1,*fp2;
if((fp1=fopen("d:
车票管理系统.dat","rb"))==NULL)
{
system("cls");
printf("文件打开错误\n");
getch();
exit(0);
}
if((fp2=fopen("d:
车票管理系统0.dat","rb"))==NULL)
{
system("cls");
printf("文件打开错误\n");
getch();
exit(0);
}
fread(&class_num,sizeof(int),1,fp2);
fread(records,sizeof(CLASS),class_num,fp1);
fclose(fp1);fclose(fp2);
}
voidquit()
{
chars[5];
printf("确认退出\n");
scanf("%s",s);
if(s[0]=='y'||s[0]=='Y')
exit(0);
}
voidget(inti,intj)
{
for(;;)
{
printf("请输入发车时间(xxxx)");scanf("%s%s",records[i].hour,records[i].min);
if((atoi(records[i].hour)<24&&atoi(records[i].hour)>=0)&&(atoi(records[i].min)<60&&atoi(records[i].min)>=0))
break;
else
{
printf("输入错误\n");
getch();
}
}
printf("请输入起点站:
\n");
scanf("%s",records[i].from);
printf("请输入终点站:
\n");
scanf("%s",records[i].to);
printf("请输入行车时间:
\n");
scanf("%f",&records[i].hours);
printf("请输入额定载量:
\n");
scanf("%d",&records[i].max);
for(;;)
{
printf("请输入已售票数:
\n");
scanf("%d",&records[i].now);
if(records[i].now<=records[i].max)
break;
else
{
printf("输入错误\n");
getch();
}
}
}
intwhether(inti)
{
structtm*local;
time_tt;
t=time(NULL);//NULL在stdio.h中定义为0
local=localtime(&t);/////获取当前系统时间
if(local->tm_hourtm_hour==atoi(records[i].hour)&&local->tm_min//atoi将字符串转换成一个整数值
return1;
else
return0;
}