#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <process.h>//包含access函数的头文件
#include <windows.h>
#include <conio.h>
#include <io.h>
#define N 9999//定义最多的航班数
#define PRINT “%d\t%s\t%s\t星期 %s\t%d\t%d\t%f\n”,s[i].num,s[i].start,s[i].over,s[i].time,s[i].count,s[i].pay,s[i].discount //宏定义输出格式
struct air //定义结构体数组
{
int num;//定义航班号
char start[20];//起点站
char over[20];//终点站
char time[10];//飞行时间
int count;//机票数量
int pay;//机票单价
float discount;//机票折扣
}s[N];
int i,a,m=0;//定义全局变量
char ii[10];
void add();//增加航班信息函数
void print();//显示航班信息
void search();//查找航班信息
void dingpiao();//订票业务
void tuipiao();//退票
void read();//读取文件
void save();//保存文件
void output();//输出格式
void paixu();//航班排序
void chushihua();//系统初始化
void build();//建立数据文件
void paixu1();//按航班号从小到大排序
void paixu2();// 从大到小排序
int head();//进入订票系统
int main()
{
int j;
system(“color b5”);
chushihua();
system(“cls”);
head();
system(“cls”);
do{
printf(“1.增加航班信息\n”
“\t2.浏览航班信息\n”
“\t\t3.查找航班信息(按航班号)\t\t\n”
“\t\t\t4.航班排序(按航班号)\n”
“\t\t\t\t5.订票业务\n”
“\t\t\t\t\t6.退票业务\n”
“\t\t\t\t\t\t0.退出\n”);
printf("=");
printf(“请在0-6中选择以回车键结束:”);
scanf("%d",&j);
switch(j)
{
case 1:add();system(“cls”);//调用增加航班函数
break;
case 2:print();system(“cls”);//调用显示模块
break;
case 3:search();system(“cls”);
break;
case 4:paixu();system(“cls”);
break;
case 5:dingpiao();system(“cls”);
break;
case 6:tuipiao();system(“cls”);
break;
case 0: //退出系统
save();system(“cls”);
printf("\n\n\n\t\t\t\t\n\n\t谢谢使用,再见!");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
break;
}
}while(j!=0);//判断是否调用其他函数
}
int head()
{
printf("\n");
printf("* \n");
printf(" 欢迎使用机票订票管理系统 \n");
printf(" *\n");
printf("==========\n");
printf(“请按回车进入界面”);
getchar();
printf(“正在进入系统选项”);
for(a=0;a<3;a++)
{
printf(".");
Sleep(600);
}
printf("\n");
return 0;
}
void read()
{
FILE *fp;
if((fp=fopen(“hangban.dat”,“r”))==NULL)
{
printf(“创建文件失败!”);
getchar();
return ;
}
i=0;
while(!feof(fp))
{
fread(&s[i],sizeof(struct air),1,fp);//逐块读取数据
i++;
m++;//计算存在航班数
}
m–;
fclose(fp);
printf(“请稍等,正在初始化”);
for(a=0;a<3;a++)
{
printf(".");
Sleep(600);
}
printf("\n");
}
void save()
{
FILE *fp;
if((fp=fopen(“hangban.dat”,“w+”))NULL)
{
printf(“创立文件夹失败!”);
getchar();
return;
}
for(i=0;i<m;i++)//逐块保存数据
fwrite(&s[i],sizeof(struct air),1,fp);
fclose(fp);
printf(“正在保存数据并退出”);
for(a=0;a<3;a++)
{
printf(".");
Sleep(600);
}
printf("\n");
printf("\n");
}
void search()
{
int n;
do
{
printf("\n 请输入航班号: “);
scanf(”%d",&n); //输入查询的航班号
printf(“正在查询”);
for(a=0;a<5;a++)
{
printf(".");
Sleep(400);
}
printf("\n");
for(i=0;i<m;i++)
{
if(s[i].numn)//按航班号判定输出条件
{
printf("\n 您所查找的航班信息为: \n");
printf(“航班号\t\t起始站\t\t终点站\t\t时间\t\t机票数\n\n”);
printf(PRINT);//显示信息
printf("\n查询完毕,按回车键继续");
getchar();
getchar();
return;
}
}
printf("\n对不起,没有您需要的信息!\n");
printf("是否重新查找?请输入y或n按回车键结束 ");
scanf("%s",&ii);
}while(!strcmp(ii,"y"));
}
void dingpiao()
{
int n,x;
char a[10]=“y”;
do
{
search();//调用查询模块
if(!strcmp(ii,“n”))
{
printf(“对不起!没有找到您所需的航班,所以不能订票。\n”);
printf("\n请按回车键返回上层 “);
getchar();
getchar();
strcpy(ii,“n”);
break;
}
do
{
printf(“请输入您要订的机票数(以回车键结束):”);
scanf(”%d",&n);//输入订票数
printf(“请稍后,正在订票”);
for(x=0;x<3;x++)
{
printf(".");
Sleep(600);
}
printf("\n");
if(n<=0)//判断机票数是否出错
{
printf(“输入错误!至少需订一张机票。\n”);
}
else if(s[i].count==0)//判断机票是否售完
{
printf("对不起,您所选择的航班的机票已售完!\n");
break;
}
else if(s[i].count!=0&&s[i].count>=n)//判断及机票数是否大于订票数
{
s[i].count=s[i].count-n;
printf("订票成功!");
break;
}
else if(s[i].count<n)//判断机票数小于订票数
{
printf("对不起,您选择的航班只剩%d张机票\n",s[i].count);
printf("是否需要重新输入机票数?\n请输入y或者n以回车键结束: ");
scanf("%s",&a);
printf("请稍后,正在订票");
for(x=0;x<3;x++)
{
printf(".");
Sleep(600);
}
printf("/n");
}
}while(!strcmp(a,"y"));
printf("是否需要订其他航班的机票?\n请输入y或n以回车键结束:");
scanf("%s",&a);
}while(!strcmp(a,"y"));
}
void build()
{
FILE *fp;
if((fp=fopen(“hangban.dat”,“wb”))==NULL)
{
printf(“创建文件失败!”);
getchar();
return;
}
printf(“请依次输入航班信息(以回车键结束):\n”);
printf("------------------------------------------\n");
for(i=0;i<N;i++)
{
printf(“请输入航班号: “);
scanf(”%d”,&s[i].num);
printf(“请输入起始站: “);
scanf(”%s”,&s[i].start);
printf(“请输入终点站: “);
scanf(”%s”,&s[i].over);
printf(“请输入时间(星期几): “);
scanf(”%s”,&s[i].time);
printf(“请输入机票数: “);
scanf(”%d”,&s[i].count);
printf(“请输入机票单价: “);
scanf(”%d”,&s[i].pay);
printf(“请输入机票折扣: “);
scanf(”%f”,&s[i].discount);
fwrite(&s[i],sizeof(struct air),1,fp);
m++;
printf(“添加完毕,是否继续添加?请键入y或者n以回车键结束: “);
scanf(”%s”,&ii);
if(strcmp(ii,“y”)!=0)
{
fclose(fp);
return;
}
}
}
void paixu()
{
int n;
printf("\n*******************************************");
printf(“1.按航班号从小到大排序\n”);
printf(“2.按航班号从大到小排序\n”);
printf("*******************************************\n");
printf(“请在1-2中选择以回车键结束: “);
scanf(”%d”,&n);//输入排序方式
switch(n)
{
case 1:paixu1();
break;
case 2:paixu2();
break;
}
printf("排序后的航班信息为: \n");
output();//显示排序后航班信息
printf("\n 请按回车键返回上层菜单 ");
getchar();
getchar();
/*for(a=0;a<5;a++)
{
printf(“.”);
Sleep(400);
}
printf("\n");*/
}
void paixu1()
{
int k,j;
struct air t;
for(i=0;i<m;i++)
{
k=i;
for(j=i+1;j<m;j++)
if(s[k].num>s[j].num)
k=j;
if(i!=k)
{
t=s[k];
s[k]=s[i];
s[i]=t;
}
}
printf(“正在排序,请稍后”);
for(a=0;a<5;a++)
{
printf(".");
Sleep(400);
}
printf("\n");
}
void paixu2()
{
int k,j;
struct air t;
for(i=0;i<m;i++)
{
k=i;
for(j=i+1;j<m;j++)
if(s[k].num<s[j].num )
k=j;
if(i!=k)
{
t=s[k];
s[k]=s[i];
s[i]=t;
}
}
printf(“正在排序,请稍后”);
for(a=0;a<5;a++)
{
printf(".");
Sleep(400);
}
printf("\n");
}
void output()
{
printf(“航班号\t起始站\t终点站\t时间\t机票数\t机票单价 机票折扣\n”);
for(i=0;i<m;i++)
printf(PRINT);//打印出信息
}
void tuipiao()//定义退票函数
{
int n,x;
char a[10];
do
{
search();
if(!strcmp(ii,“n”))
{
printf(“对不起!没有找到您所需的航班,所以不能退票。\n”);
printf("\n请按回车键返回上层菜单 “);
getchar();
getchar();
strcpy(ii,“n”);
break;
}
printf(“请输入您要退的机票数目: “);
scanf(”%d”,&n);
printf(“正在退票请稍等\n”);
for(x=0;x<3;x++)
{
printf(”.");
Sleep(600);
}
printf("/n");
if(n<=0)//判断机票数是否有效
printf("对不起,至少退一张票.\n");
else {
s[i].count=s[i].count+n;
printf("退票成功\n");
}
printf("是否继续退票,请输入y或n以回车键结束: ");
scanf("%s",&a);
}while(!strcmp(a,"y"));//判断跳出循环
}
void print()
{
printf(“正在加载,请稍后”);
for(a=0;a<5;a++)
{
printf(".");
Sleep(400);
}
printf("\n");
system(“cls”);
printf("\n 目前我们有以下航班:\n\n");
output();//调用输出格式函数
printf("\n 请按回车键返回上层菜单");
getchar();
getchar();
}
void add()
{
do{
printf(“请依次输入您要增加的航班信息(以回车键结束): \n”);
printf("-----------------------------------------\n");
printf(“请输入航班号: “);
scanf(”%d”,&s[m].num);
printf(“请输入起始站: “);
scanf(”%s”,&s[m].start);
printf(“请输入终点站: “);
scanf(”%s”,&s[m].over);
printf(“请输入时间(星期几): “);
scanf(”%s”,&s[m].time);
printf(“请输入机票数: “);
scanf(”%d”,&s[m].count);
printf(“请输入机票单价: “);
scanf(”%d”,&s[m].pay);
printf(“请输入机票折扣: “);
scanf(”%f”,&s[m].discount);
m++;
printf(“添加完毕,是否继续添加?请键入y或n以回车键结束:”);
scanf("%s",ii);
}while(strcmp(ii,"y"));
printf("正在保存,请稍等");
for(a=0;a<5;a++)
{
printf(".");
Sleep(600);
}
printf("\n");
}
void chushihua()
{
if(access(“hangban.dat”,0))
{
build();
}
else
read();
}