# include<stdio.h>
# include<string.h>
# include<conio.h>
# include<stdlib.h>
char seat[2],set='A';
struct fly//定义航班信息结构体
{
char fnumber;
char place1;
char place2;
int flightnum;
int all;
int pay;
int surplus;
};
//!!!!!!!!
int inspectpass(char password[17])//检验输入的密码是否正确
{
FILE *p;
char sign,s[16];
int len,i;
len=strlen(password);
if(len<6||len>16) return 0;
p=fopen("password.txt","r");
for(;feof(p)==0;)
{ sign=fgetc(p);
if(sign==seat[0])
{ for(i=0;feof(p)==0;i++)
{ s[i]=fgetc(p);
if(s[i]=='#')
{ s[i]='\0';
break;}}
if(strcmp(s,password)==0) return 1;
else return 0;}}
}
//!!!!!!!!!!
int inspectnum(char number[17])//检验输入的账号文件中是否存在
{
FILE *p;
char sign,s[17];
int len,i;
len=strlen(number);
if(len<6||len>16) return 0;
p=fopen("number.txt","r");
for(;feof(p)==0;)
{ sign=fgetc(p);
if(sign<'A'||sign>'Z') return 0;
for(i=0;feof(p)==0;i++)
{ s[i]=fgetc(p);
if(s[i]=='#')
{ s[i]='\0';
break;}}
if(strcmp(s,number)==0)
{ seat[0]=sign;
return 1;}
else
{ set=sign+1;
fgetc(p);}}
return 0;
}
//!!!!!!!!
void logon()//注册系统主界面
{
char home();
FILE *p;
char number[16],password[16];
int len;
system("cls");
printf("\t注册系统!\n\n设置账号(6~16位数字或字符):\n");
G: scanf("%s",&number);
len=strlen(number);
if(len>=6&&len<=16)
{ if(inspectnum(number)==1)
{ printf("账户已存在!请重新设置:");
goto G;}
else
{ p=fopen("number.txt","a");
fputc(set,p);
fputs(number,p);
fputc('#',p);
fputc('\n',p);
fclose(p);}}
else
{ printf("输入错误!请重新设置:");
goto G;}
printf("\n设置密码(6~16位非纯数字,不含空格):\n");
H: scanf("%s",&password);
len=strlen(password);
if(len<6||len>16)
{ printf("输入错误!请重新设置:");
goto H;}
else
{ p=fopen("password.txt","a");
fputc(set,p);
fputs(password,p);
fputc('#',p);
fputc('\n',p);
fclose(p);}
system("cls");
printf("注册成功!自动返回主界面!\n");
home();
}
//!!!!!!!!!!
void enter()//登录系统主界面
{
void home1();
char home();
char password[16],number[16];
printf("\t登录系统!\n\n请输入(输入后回车确认!在账号区域输入#号返回上一页!)\n\n账号:");
A: scanf("%s",&number);
if(strcmp(number,"#")==0)
{
system("cls");
home();}
else
{ if(inspectnum(number)!=1)
{ printf("输入失败,不存在此用户!\n请再次输入账号:");
goto A;}
else
{ printf("\n密码:");
B: scanf("%s",&password);
if(inspectpass(password)!=1)
{ printf("\n密码错误!请重新输入:\n");
goto B;}
else
{ system("cls");
printf("\t\t登录成功!\n\n");
home1();}}}
}
//!!!!!!!!!
char home()//整个系统的首页
{
char num;
printf("请选择服务项目:\n\n1.登录\n\n2.注册\n\n3.退出系统\n\n(从键盘键入序号)");
D: num=getch();
if(num=='1')
{ system("cls");
enter();}
else if(num=='2')
{ system("cls");
logon();}
else if(num=='3') ;
else
{ printf("输入错误!请重新选择:\n1.登录\t2.注册\t3.退出\n您的选择(填写序号):");
goto D;}
return num;
}
//!!!!!!!!!!
//!!!!
int main()
{
void home1();
printf("\t\t欢迎进入航空客运订票系统!\n");
home();
printf("\n\n\n\t\t\t系统安全退出!\n\n按任意键关闭窗口。\n");
}
//!!!!
//!!!!!!!!!!
int inspectfnum(char flightnum)//检查文件中是否含有输入的字符(航班号),有则返回0,没有返回1
{
FILE *p;
char s[100];
int i;
p=fopen("航班号.txt","r");
for(i=0;feof(p)==0;i++)
{ s[i]=fgetc(p);
if(s[i]==flightnum)
{ fclose(p);
return 0;}}
fclose(p);
return 1;
}
//!!!!!!!!
void place(char flightnum)//录入航班信息(除航班票数)到相应文件
{
FILE *p;
char place1[10],place2[10];
int num;
p=fopen("航班信息.txt","a");
fputc(flightnum,p);
fputc('\t',p);
//!
printf("出发地:");
scanf("%s",&place1);
fputs(place1,p);
fputc('\t',p);
//!
printf("目的地:");
scanf("%s",&place2);
fputs(place2,p);
fputc('\t',p);
//!
printf("乘员定额:");
scanf("%d",&num);
fprintf(p,"%d",num);
fputc('#',p);
fputc('\n',p);
fclose(p);
}
//!!!!!!!!
void ticket(char flightnum)//录入各类票数相关数据
{
FILE *p;
int all,pay,surplus;
p=fopen("航班票数.txt","a");
fputc(flightnum,p);
fputc('\t',p);
//!
printf("总票数:");
scanf("%d",&all);
fprintf(p,"%d",all);
fputc('\t',p);
//!!
printf("已订票数:");
scanf("%d",&pay);
fprintf(p,"%d",pay);
fputc('\t',p);
//!!
surplus=all-pay;
fprintf(p,"%d",surplus);
fputc('#',p);
fputc('\n',p);
fclose(p);
printf("剩余票数:%d\n",surplus);
}
//!!!!!!!!
void outother(char flightnum,int i)//删除各文件对应数据
{
FILE *p,*k;
char a[100],b[100];
int j,z;
if(i==1) p=fopen("航班信息.txt","r");
if(i==2) p=fopen("航班票数.txt","r");
k=fopen("1.txt","w");
for(j=0;feof(p)==0;j++)
{ a[j]=fgetc(p);
if(a[j]==flightnum)
{ j=j-1;
for(z=0;;z++)
{ b[z]=fgetc(p);
if(b[z]=='#')
{ b[z+1]=fgetc(p);
break;}}}}
a[j]='\0';
fputs(a,k);
fputc('\n',k);
fclose(p);
fclose(k);
if(i==1)
{ remove("航班信息.txt");
rename("1.txt","航班信息.txt");}
if(i==2)
{ remove("航班票数.txt");
rename("1.txt","航班票数.txt");}
}
//!!!!!!!!
void output(char flightnum)//在文件中删除输入的航班号
{
FILE *p,*k;
char a[100],b[100];
int i;
p=fopen("航班号.txt","r");
k=fopen("1.txt","w");
for(i=0;;i++)
{ a[i]=fgetc(p);
if(a[i]==flightnum)
{ a[i]='\0';
break;}}
for(i=0;feof(p)==0;i++)
b[i]=fgetc(p);
b[i-1]='\0';
strcat(a,b);
fputs(a,k);
fclose(p);
fclose(k);
remove("航班号.txt");
rename("1.txt","航班号.txt");
for(i=1;i<=2;i++)
outother(flightnum,i);
}
//!!!!!!!!
void inputf(int num)//执行函数(录入和删除)
{
FILE *p;
void home1();
int k;
struct fly f;
printf("请输入对应航班信息:\n航班号(A~Z):");
I: scanf("%s",&f.fnumber);
k=inspectfnum(f.fnumber);
if(k==0&&num==1)
{ printf("录入失败!已存在该航班!请重新输入:\n");
goto I;}
if(k!=0&&num==2)
{ printf("删除失败!不存在该航班!请重新输入:\n");
goto I;}
else
{ if(num==1)
{ p=fopen("航班号.txt","a");
fputc(f.fnumber,p);
fclose(p);
place(f.fnumber);
ticket(f.fnumber);
system("cls");
printf("相关信息录入成功!自动返回主菜单!");
home1();}
else if(num==2)
{ output(f.fnumber);
system("cls");
printf("相关信息删除成功!自动返回主菜单!");
home1();}}
}
//!!!!!!!!11
void charge()//管理页
{
int flightpass,num;
printf("请输入管理员密码:");
J: scanf("%d",&flightpass);
if(flightpass==123456) printf("密码正确!\n");
else
{ printf("密码错误!请重新输入:");
goto J;}
printf("录入信息输入1,删除信息输入2:");
A: scanf("%d",&num);
if(num==1||num==2) inputf(num);
else
{ printf("输入错误,请重新输入:");
goto A;}
}
//!!!!!!!
int research()//航班票数信息查询
{
FILE *p;
char flightnum,information[100];
int k=0,i;
printf("输入航班号查询该航班订票情况(输入#键返回首页):");
A: scanf("%s",&flightnum);
if(flightnum!='#'&&inspectfnum(flightnum)==1)
{ printf("输入错误,不存在此航班!\n\n请重新输入:");
goto A;}
if(flightnum=='#')
{ system("cls");
return 0;}
else
{ printf("航班号|\t总票数|\t订票数|\t剩余票数|\n\n");
putchar(flightnum);
p=fopen("航班票数.txt","r");
for( ;feof(p)==0; )
{ if(fgetc(p)==flightnum)
{ for(i=0;;i++)
{ information[i]=fgetc(p);
if(information[i]=='#')
{ information[i]='\0';
k=1;
fclose(p);
putchar('\n');
break;}
else putchar(information[i]);}
break;}
}
fclose(p);
putchar('\n');
}
printf("进入订、退票系统请输入1,返回上一步请输入2\n");
flightnum=getch();
if(flightnum=='1')
{ system("cls");
return 1;}
else
{ putchar('\n');
research();}
}
//!!!!!!
void search()//航班行程信息查询
{
void buy();
void home1();
FILE *p,*num;
char flightnum,information[100];
int k=0,i;
printf("下表为所有航班及其相关信息:\n\n");
printf("航班号|\t出发地|\t目的地|\t乘员定额|\n");
num=fopen("航班号.txt","r");
A: flightnum=fgetc(num);
putchar(flightnum);
p=fopen("航班信息.txt","r");
for( ;feof(p)==0; )
{ if(fgetc(p)==flightnum && feof(num)==0)
{ for(i=0;;i++)
{ information[i]=fgetc(p);
if(information[i]=='#')
{ information[i]='\0';
k=1;
fclose(p);
putchar('\n');
goto A;}
else putchar(information[i]);}}}
fclose(p);
putchar('\n');
k=research();
if(k==0) home1();
else if(k==1)
{ buy();
search();}
}
//!!!!!!
void home1()//界面2
{
char num;
printf("请再次选择服务项目:\n\n1.录入、删除航班信息(管理员)\n\n2.浏览及查询航班\n\n3.退出登录并返回主页\n\n4.退出系统\n");
num=getch();
system("cls");
if(num=='1') charge();
if(num=='2') search();
if(num=='3') home();
}
//!!!!!!!!!!!
void buy()//订、退票系统主函数
{
void putin1(char,int,char);
void residue(char,int,char);
char num,flightnum;
int pay;
printf("\t\t\t订、退票系统!");
B: printf("\n\n订票请输入1.\n\n退票请输入2.\n\n返回上一菜单输入#.\n\n");
num=getch();
system("cls");
if(num=='1'||num=='2')
{ printf("请输入您订、退票航班的航班号:");
A: scanf("%s",&flightnum);
if(inspectfnum(flightnum)==1)
{ printf("\n输入错误,不存在此航班!\n\n请重新输入:");
goto A;
}
if(num=='1') printf("\n输入订票数量:");
else if(num=='2') printf("\n输入退票数量:");
scanf("%d",&pay);
residue(flightnum,pay,num);
system("cls");
if(num=='1') printf("订票成功!自动返回上一菜单!\n\n");
else if(num=='2') printf("退票成功!自动返回上一菜单!\n\n");
}
else if(num=='#') ;
else
{ system("cls");
printf("输入错误!请重新输入:");
goto B;}
}
//!!!!!!!!!
void residue(char flightnum,int pay,char num)//增加或减少票数
{
FILE *p;
struct fly f1;
p=fopen("航班票数.txt","r");
for(;;)
{ f1.fnumber=fgetc(p);
if(f1.fnumber==flightnum) break;}
fscanf(p,"%d%d%d",&f1.all,&f1.pay,&f1.surplus);
if(num=='1')
{ f1.pay=f1.pay+pay;
f1.surplus=f1.surplus-pay;}
if(num=='2')
{ f1.pay=f1.pay-pay;
f1.surplus=f1.surplus+pay;}
fclose(p);
outother(flightnum,2);
p=fopen("航班票数.txt","a");
fputc(f1.fnumber,p);
fputc('\t',p);
fprintf(p,"%d",f1.all);
fputc('\t',p);
fprintf(p,"%d",f1.pay);
fputc('\t',p);
fprintf(p,"%d",f1.surplus);
fputc('#',p);
fputc('\n',p);
fclose(p);
}
//!!!!!!!!!!