本人大一下哈,代码能力不是很强,希望各位大佬手下留情。有什么改进的可以在评论区讲讲。
飞机票查询与销售系统,小学期的大作业。昨天写了六七个小时,感觉还好。
放代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>
int flightnum=0;
int maxflight=100;
struct Passenger
{
char name[20];
char ID[30];
};
struct Plane
{
int planeID;//飞机ID
char flightcompany[10];//航空公司
char startplace[10];//起飞地
char arriveplace[10];//目的地
int seat;//座位数
int ticket;//剩余票数
int cost;//票价
char starttime[10];//起飞时间
struct Passenger person[1000];//储存乘客信息
}p[100];
int main()
{
void menu(),Passenger_menu(),Admin(),_filefunction();
menu();
int n;
a:scanf("%d",&n);
switch(n)
{
case 1:
Passenger_menu();
break;
case 2:
Admin();
break;
default :
printf("输入错误,请重新输入\n");
goto a;
}
printf(" ");
return 0;
}
void menu()
{
printf("**********************\n");
printf("**********************\n");
printf("** 欢迎使用票务系统 ** \n");
printf("\n");
system("pause");
printf("*** 您的身份是? ***\n");
printf("*** 1.乘客 ***\n");
printf("*** 2.管理 ***\n");
}
void Passenger_menu()
{ void searchplane(int x),researvation(),cancel();
printf("***亲爱的乘客您好,欢迎使用票务系统!\n");
f:printf("***输入1以查询航班信息\n");
printf("***输入2以进行机票订购\n");
printf("***输入3以进行机票退订\n");
printf("***输入4以退出系统\n");
int n;
scanf("%d",&n);
switch(n)
{
case 1:
searchplane(2);
break;
case 2:
researvation();
break;
case 3:
cancel();
break;
case 4:
printf("感谢您使用本系统,祝您旅途愉快,一路平安\n");
break;
default :
printf("输入错误!!!\n请重新输入:");
goto f;
}
}
void Admin()
{ int main();
void admin_menu();
char s[10],*sadmin="admin";
float num;
printf("请输入管理员帐号:");
scanf("%s",s);
while(strcmp(s,sadmin)!=0)
{
printf("!!!账号错误!!!\n请重新输入管理员账号:");
scanf("%s",s);
}
printf("请输入管理员密码:");
scanf("%f",&num);
while(num!=123456)
{
printf("!!!密码错误!!!\n请重新输入密码:");
scanf("%f",&num);
}
admin_menu();
system("cls");
main();
}
void admin_menu()
{ void _flight(int choosenum),searchplane(int x),_filefunction();
printf("***管理员您好,请问您需要什么服务?***\n");
printf("*** 1.增加航班信息 ***\n");
printf("*** 2.删除航班信息 ***\n");
printf("*** 3.查询航班信息 ***\n");
printf("*** 4.读取信息文件 ***\n");
printf("*** 5.退出管理系统 ***\n");
printf("***\t\t\t\t ***\n");
int n;
b:scanf("%d",&n);
switch(n)
{
case 1:
system("cls");
_flight(n);
break;
case 2:
if(flightnum==0)
{
printf("无任何航班信息,现为您选择增加航班信息服务");
system("pause");
system("cls");
_flight(1);
}
system("cls");
_flight(n);
break;
case 3:
if(flightnum==0)
{
printf("无任何航班信息,现为您选择增加航班信息服务");
system("pause");
system("cls");
_flight(1);
}
printf("正在载入航班信息,请稍后");
for(int i=0;i<3;i++)
{
printf(".");
Sleep(500);
system("pause");
system("cls");
searchplane(1);
}
break;
case 5:
printf("欢迎您下次使用,正在退出系统");
{
for(int i=0;i<6;i++)
{
printf(".");
Sleep(500);
}
}
system("pause");
break;
case 4:
_filefunction();
break;
default :
printf("输入错误!!!请重新输入\n");
goto b;
}
}
void _flight(int choosenum)
{
if(choosenum==1)
{//增加航班信息
int n;
c:printf("请输入要增加的航班个数:");
scanf("%d",&n);
if(n>100)
{
printf("超出最大航班数量,请重新输入!!!\n");
goto c;
}
else if(n<=0)
{
printf("输入错误!!!\n");
goto c;
}
else
{
flightnum+=n;
printf("请输入:航班ID 航空公司 起飞地 目的地 座位数 票价 预期起飞时间\n");
for(int i=0;i<n;i++)
{
scanf("%d %s %s %s %d %d %s",&p[i].planeID,p[i].flightcompany,p[i].startplace,p[i].arriveplace,&p[i].seat,&p[i].cost,p[i].starttime);
p[i].ticket=p[i].seat;
}
printf("输入完毕!!\n");
printf("系统将打印航班信息,请确认!\n");
for(int i=0;i<n;i++)
{
printf("%d %s %s %s %d %d %s\n",p[i].planeID,p[i].flightcompany,p[i].startplace,p[i].arriveplace,p[i].seat,p[i].cost,p[i].starttime);
}
printf("确认完毕请输入1\n");
int temp;
scanf("%d",&temp);
while(temp!=1)
{
printf("请输入错误的航班序号(以0为结束序号)");
int wrrong[maxflight];
int i=0,wrrongnum=0;
while(scanf("%d",&wrrong[i]))
{
if(wrrong[i]==0)break;
wrrong[i]-=1;
i++;
wrrongnum++;
}
for(i=0;i<wrrongnum;i++)
{
printf("错误航班信息为:\n");
printf("航班ID:%d\n",p[wrrong[i]].planeID);
printf("航空公司:%s\n",p[wrrong[i]].flightcompany);
printf("起飞地:%s\n",p[wrrong[i]].startplace);
printf("目的地:%s\n",p[wrrong[i]].arriveplace);
printf("座位数:%d\n",p[wrrong[i]].seat);
printf("票价:%d\n",p[wrrong[i]].cost);
printf("预期起飞时间:%s\n",p[wrrong[i]].starttime);
printf("请输入完整正确的航班信息:\n");
printf("航班ID 航空公司 起飞地 目的地 座位数 票价 预期起飞时间\n");
scanf("%d %s %s %s %d %d %s",&p[i].planeID,p[i].flightcompany,p[i].startplace,p[i].arriveplace,&p[i].seat,&p[i].cost,p[i].starttime);
}
printf("修改完毕!");
system("pause");
printf("系统将打印最终航班信息!\n");
for(int i=0;i<n;i++)
{
printf("%d %s %s %s %d %d %s\n",p[i].planeID,p[i].flightcompany,p[i].startplace,p[i].arriveplace,p[i].seat,p[i].cost,p[i].starttime);
}
system("pause");
system("cls");
break;
}
printf("航班信息增加完毕,欢迎您的使用!!!\n");
admin_menu();
}
}
else
{//删除航班信息
int deleteID;
d:printf("请输入您需要删除的航班ID:");
int flag=0;
scanf("%d",&deleteID);
for(int i=0;i<flightnum;i++)
{
if(deleteID==p[i].planeID)
{
for(int j=i; j<flightnum-1; j++)
{
p[j]=p[j+1];
}
flag++;
}
if(flag)
{
printf("删除成功!\n");
}
else
{
printf("查无此航班!!\n");
}
printf("请输入1以继续删除!!输入2以结束删除\n");
int n;
scanf("%d",&n);
if(n==1)
{
goto d;
}
else
{
printf("删除完毕!\n");
}
system("cls");
}
admin_menu();
}
}
void searchplane(int x)
{ void aftersearch(int choosenum);
int main();
if(flightnum==0)
{
printf("暂无任何航班信息\n");
if(x==1)
{
printf("正为您载入航班信息增加服务");
for(int i=0;i<3;i++)
{
printf(".");
Sleep(500);
}
_flight(1);
}
else if(x==2)
{
printf("请等待管理人员增加航班信息后查询!\n");
system("pause");
system("cls");
main();
}
}
else
{
printf("***请按以下要求输入***\n");
printf("*** 1.以航班ID查询 ***\n");
printf("***2.以航空公司查询***\n");
printf("***3.以起飞时间查询***\n");
printf("***4.以航班起飞地目的地查询***\n");
printf("***5.以乘客信息查找***\n");
int n;
scanf("%d",&n);
system("cls");
if(n==1)
{ int searchID;
printf("请输入航班ID号:");
scanf("%d",&searchID);
int account=0;
for(int i=0;i<flightnum;i++)
{
if(p[i].planeID==searchID)
{ account++;
printf("航班ID:%d 航空公司:%s 起飞地:%s 目的地:%s 剩余票数:%d 票价:%d 起飞时间:%s\n",p[i].planeID,p[i].flightcompany,p[i].startplace,p[i].arriveplace,p[i].ticket,p[i].cost,p[i].starttime);
}
}
printf("已查询到:%d个航班信息\n",account);
system("pause");
aftersearch(x);
}
else if(n==4)
{ char search_start[10],search_arrive[10];
int account=0;
printf("请输入起飞地:");
scanf("%s",search_start);
printf("请输入目的地:");
scanf("%s",search_arrive);
for(int i=0;i<flightnum;i++)
{
if(strcmp(search_start,p[i].startplace)==0)
{
if(strcmp(search_arrive,p[i].arriveplace)==0)
{
account++;
printf("航班ID:%d 航空公司:%s 起飞地:%s 目的地:%s 剩余票数:%d 票价:%d 起飞时间:%s\n",p[i].planeID,p[i].flightcompany,p[i].startplace,p[i].arriveplace,p[i].ticket,p[i].cost,p[i].starttime);
}
}
}
if(account==0)
{
printf("未查询到任何起飞地:%s目的地:%s的航班!",search_start,search_arrive);
}
else
{
printf("已查询到以上有关航班%d个\n",account);
}
system("pause");
aftersearch(x);
}
else if(n==2)
{
char searchcompany[10];
printf("请输入您需要查询的航空公司:");
scanf("%s",searchcompany);
int account =0;
for(int i=0;i<flightnum;i++)
{
if(strcmp(searchcompany,p[i].flightcompany)==0)
{
account++;
printf("航班ID:%d 航空公司:%s 起飞地:%s 目的地:%s 剩余票数:%d 票价:%d 起飞时间:%s\n",p[i].planeID,p[i].flightcompany,p[i].startplace,p[i].arriveplace,p[i].ticket,p[i].cost,p[i].starttime);
}
}
printf("以为您查询到航空公司%s相关航班%d个\n",searchcompany,account);
system("pause");
aftersearch(x);
}
else if(n==3)
{
int account=0;
char searchtime[10];
e:printf("请输入您要查询的起飞时间:");
scanf("%s",searchtime);
for(int i=0;i<flightnum;i++)
{
if(strcmp(searchtime,p[i].starttime)==0)
{
account++;
printf("航班ID:%d 航空公司:%s 起飞地:%s 目的地:%s 剩余票数:%d 票价:%d 起飞时间:%s\n",p[i].planeID,p[i].flightcompany,p[i].startplace,p[i].arriveplace,p[i].ticket,p[i].cost,p[i].starttime);
}
}
printf("已为您查询到%d个%s起飞的航班\n",account,searchtime);
system("pause");
aftersearch(x);
}
else if(n==5)
{ int flag=0;
printf("请输入乘客姓名:");
char tname[10];
i:scanf("%s",tname);
for(int i=0;i<flightnum;i++)
{
if(p[i].ticket<p[i].seat)
{
for(int j=0;j<p[i].seat-p[i].ticket;j++)
{
if(strcmp(tname,p[i].person[j].name)==0)
{
flag=1;
printf("已查询到航班信息:\n");
printf("航班ID:%d 航空公司:%s 起飞地:%s 目的地:%s 票价:%d 起飞时间:%s\n",p[i].planeID,p[i].flightcompany,p[i].startplace,p[i].arriveplace,p[i].cost,p[i].starttime);
printf("乘客姓名:%s\n乘客身份ID:%s\n",p[i].person[j].name,p[i].person[j].ID);
}
}
}
}
if(!flag)
{
printf("查无此人机票信息!!!请重新输入:");
goto i;
}
}
else
{
printf("输入错误!!");
printf("若想退出查询,请输入0,若想继续查询,请输入1");
int num;
scanf("%d",&num);
if(num==1)goto e;
else aftersearch(x);
}
}
}
void aftersearch(int choosenum)
{ void researvation(),cancel();
if(choosenum==1)
{
admin_menu();
}
else
{
if(choosenum==2)
{
printf("尊贵的乘客您好,若需要订票请输入1,退票请输入2,退出请输入3\n");
int n;
scanf("%d",&n);
if(n==1)researvation();
else if(n==2)cancel();
else if(n==3)
{
printf("欢迎您的使用,祝您一路平安!\n");
}
}
else if(choosenum==1)
{
Passenger_menu();
}
}
}
void researvation()
{ int rplaneID;
int main();
char rstartplace[10],rarriveplace[10],rstarttime[10];
if(flightnum==0)
{
printf("暂无航班信息!请等待管理员增加信息后使用!\n");
system("pause");
system("cls");
main();
}
else
{
g:printf("请输入您需要预定的航班ID:");
scanf("%d",&rplaneID);
printf("请输入您需要预定的航班起飞地与目的地:");
scanf("%s %s",rstartplace,rarriveplace);
printf("请输入您需要预定的航班时间:");
scanf("%s",rstarttime);
int flag=0;
for(int i=0;i<flightnum;i++)
{
if(strcmp(rstartplace,p[i].startplace)==0)
{
if(strcmp(rarriveplace,p[i].arriveplace)==0)
{
if(strcmp(rstarttime,p[i].starttime)==0)
{ flag=1;
printf("该航班剩余票数:");
printf("%d \n",p[i].ticket);
if(p[i].ticket>0)
{
printf("确认订购请输入1\n");
int n;
scanf("%d",&n);
if(n==1)
{
h:printf("请输入您的姓名:");
scanf("%s",p[i].person[p[i].seat-p[i].ticket].name);
printf("请输入您的身份ID:");
scanf("%s",p[i].person[p[i].seat-p[i].ticket].ID);
p[i].ticket--;
printf("贵宾%s您好,您所订的航班信息为\n",p[i].person[p[i].seat-p[i].ticket].name);
printf("航班ID:%d 航空公司:%s 起飞地:%s 目的地:%s 票价:%d 起飞时间:%s\n",p[i].planeID,p[i].flightcompany,p[i].startplace,p[i].arriveplace,p[i].cost,p[i].starttime);
printf("机票订购成功!");
system("pause");
system("cls");
Passenger_menu();
}
else
{
printf("???\n");
printf("需要重新查询请输入1,确认订购请输入2\n");
int temp;
scanf("%d",&temp);
if(temp==2)goto g;
else goto h;
}
}
else
{
printf("该航班无剩余机票!!!\n现为您转接机票查询系统");
for(int i=0;i<3;i++)
{
printf(".");
Sleep(500);
}
searchplane(2);
}
}
}
}
}
if(!flag)
{
printf("未查询到您的航班信息!!!请检查您的信息是否有误?\n");
printf("现为您转接机票查询系统");
for(int i=0;i<3;i++)
{
printf(".");
Sleep(500);
}
searchplane(2);
}
}
}
void cancel()
{
int cplaneID;
char cstartplace[10],carriveplace[10],cstarttime[10],cname[10];
int main();
if(flightnum==0)
{
printf("暂无航班信息!请等待管理员增加信息后使用!\n");
system("pause");
system("cls");
main();
}
else
{
printf("请输入您需要退订的航班ID:");
scanf("%d",&cplaneID);
printf("请输入您需要退订的航班起飞地与目的地:");
scanf("%s %s",cstartplace,carriveplace);
printf("请输入您需要退订的航班时间:");
scanf("%s",cstarttime);
printf("请输入您的姓名:");
scanf("%s",cname);
int flag=0;
for(int i=0;i<flightnum;i++)
{
if(strcmp(cstartplace,p[i].startplace)==0)
{
if(strcmp(carriveplace,p[i].arriveplace)==0)
{
if(strcmp(cstarttime,p[i].starttime)==0)
{
for(int j=0;j<p[i].seat-p[i].ticket;j++)
{
if(strcmp(cname,p[i].person[j].name)==0)
{ flag=1;
printf("确认退票请输入1\n");
int temp;
scanf("%d",&temp);
if(temp)
{
printf("退票成功!\n");
p[i].person[j]=p[i].person[j+1];
p[i].ticket++;
Passenger_menu();
}
else
{
printf("贵宾%s退票失败,现为您转接乘客票务系统",cname);
for(int t=0;t<3;t++)
{
printf(".");
Sleep(500);
Passenger_menu();
}
}
}
}
}
}
}
}
if(!flag)
{
printf("未查询到您的航班信息!!!请检查您的信息是否有误?\n");
system("pause");
printf("现为您转接机票查询系统");
for(int i=0;i<3;i++)
{
printf(".");
Sleep(500);
}
searchplane(2);
}
}
}
void _filefunction()
{
FILE *fp;
fp=fopen("information.txt","r+");
printf("需要写入航班信息请输入1,需要读入航班信息请输入2\n");
int n;
scanf("%d",&n);
if(n==1)
{
for(int i=0;i<flightnum;i++)
{
fprintf(fp,"航班ID:%d 航空公司:%s 起飞地:%s 目的地:%s 剩余票数:%d 票价:%d 起飞时间:%s\n",p[i].planeID,p[i].flightcompany,p[i].startplace,p[i].arriveplace,p[i].ticket,p[i].cost,p[i].starttime);
}
printf("写入完毕!\n");
}
if(n==2)
{
for(int i=0;i<100;i++)
{
fscanf(fp,"航班ID:%d 航空公司:%s 起飞地:%s 目的地:%s 剩余票数:%d 票价:%d 起飞时间:%s",&p[i].planeID,p[i].flightcompany,p[i].startplace,p[i].arriveplace,&p[i].ticket,&p[i].cost,p[i].starttime);
}
printf("读入完毕!\n");
}
fclose(fp);
admin_menu();
}
有些bug,改不动了,累死.....