#include<stdio.h> //标准输入、输出头文件
#include<string.h> //包含字符串函数处理 头文件
#define N 9999 //定义最多的航班数
#define PRINTF "%d\t\t%s\t\t%s\t\t星 期 %s\t\t%d\n",s[i].num,s[i].qidian,s[i].zhongdian,s[i].time,s[i].count //宏定义输出格式
struct air //定义结构体数组
{
int num;//定义航班号
char qidian[20];//航班起始站
char zhongdian[20];//终点站
char time[10];//飞行时间
int count;//机票数量
} s[N];
int i,m=0;//定义全局变量
char hangbanhao[10];
void add();//函数声明增加航班信息函数
void print();//显示航班信息
void search();//查找航班信息
void dingpiao();//订票业务
void tuipiao();//退票
void read();//读取文件
void save();//保存文件
void output();//输出格式
void paixu();//航班排序
void build();//建立数据文件
void paixu1();//按航班好从小到大排序
void paixu2();//从大到小
int main()//主函数
{
int j;
read();
printf("\n\t\t欢迎使用航班订票系统!\n");
printf("**************************************\n");
printf("1.增加航班信息\n");
printf("2.浏览航班信息\n");
printf("3.查找航班信息\n");
printf("4.航班排序(按航班号)\n");
printf("5.办理订票业务\n");
printf("6.办理退票业务\n");
printf("0.退出系统(exit)\n");
printf("**************************************\n");
printf("却在0-6中选择以回车键结束:");
scanf("%d",&j);
switch(j)
{
case1:add();//调用增加航班函数
break;
case2:print();//调用显示模块
break;
case3:search();//调用查找模块
break;
case4:paixu();//调用排序函数
break;
case5:dingpiao();//调用订票模块
break;
case6:tuipiao();//调用退票模块
break;
case0: save();//退出系统
printf("使用,再见!");
break;
return 0;
}
}
void read()//定义读取文件函数
{
FILE*fp;
if((fp=fopen("hangban.dat","rb"))=NULL)
{
printf("创建文件失败!");
getchar();
return;
}
i=0;
while(!feof(fp))
{
fread(&s[i],sizeof(struct air),1,fp);//逐块读取数据
i++;
m++;//计算存在航班数
}
m--;
fclose(fp);
}
void save()//定义保存函数
{
FILE*fp;
if((fp=fopen("hangban.dat","wb"))=NULL)
{
printf("创建文件失败!");
getchar();
return;
}
for(i=0;i<=m;i++)//逐块保存数据
fwrite(&s[i],sizeof(struct air),1,fp);
fclose(fp);
}
void add()//定义增加航班信息函数
{
do{
printf("请依次输入您要增加的航班信息(以回车键结束):\n");
printf("请输入航班号:");
scanf("%d",s[m].num);//读取航班号
printf("请输入起始站:");
scanf("%s",s[m].qidian);//读取起始站
printf("请输入终点站:");
scanf("%s",s[m].zhongdian);//读取终点站
printf("请输入时间:");
scanf("%s",s[m].time);//读取时间
printf("请输入机票数:");
scanf("%d",&s[m].count);//读取机票数
m++;
printf("添加完毕,是否继续添加?请键入y或n以回车键结束:");
scanf("%s",hangbanhao);
} while(!strcmp(hangbanhao,"y"));//判断是否继续添加
}
void output()//定义输出格式函数
{
printf("航班号\t\t起始站\t\t终点站\t\t时间\t\t机票数\n");//信息标题
for(i=0;i<m;i++)
printf(PRINTF);//打印出信息
}
void print()//定义输出格式函数
{
printf("\n目前我们有如下航班:\n");
output();//调用输出格式函数
printf("\n请按回车键返回上层菜单");
getchar();
getchar();
}
void seach()//定义查询函数
{
int n;
{
printf("航班号\t\t起始站\t\t终点站\t\t时间\t\t机票数\n");//信息标题
for (i = 0; i < m; i++)
printf(PRINTF);//打印出信息
}
void print()//定义显示航班信息函数
{
printf("\n目前我们有如下航班:\n");
output();//调用输出格式函数
printf("\n请按回车键返回上层菜单");
getchar();
getchar();
}
void search()//定义查询函数
{
int n;
do {
printf("\n请输入航班号:");
scanf("%d", &n);//输入查询的航班号
for (i = 0; i < m; i++) {
if (s[i].num = n)//按航班号判定输出条件
{
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", hangbanhao);
} while (!strcmp(hangbanhao, "y"));//判定是否重新查找
}
void dingpiao()//定义订票业务函数
{
int n;
char a[10] = "y";
do {
printf("请输入你想定的机票数(以回车键结束):");
scanf("%d", &n);//输入所订机票数
if (n <= 0)//判定机票数是否出错
{
printf("输入错误!至少需订1机票。\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("是否需要重新输入机票数?请输入y或n以回车键结束:");//判定是否重新输入订票数
scanf("%s", a);
}
printf("是否需要订其他航班的机票?请输入y或n以回车键结束:");
scanf("%s", a);
} while (!strcmp(a, "y"));//判定是否继续订票
}
void tuipiao()//定义退票函数
{
int n;
char a[10];
do {
search();//调用查询函数
printf("请输入您要退的机票数目:");
scanf("%d ", &n);//输入所退票数
if (n <= 0) //定票数是否有效
printf("输入错误!至少需退1机票");
else {
s[i].count = s[i].count + n;
printf("退票成功!");
}
printf("是否继续?请键入 y 或 n 以回车键结束:"); //定是否继续退票
scanf("% s ", a);
} while (Istrcmp ( a ," y ")); //定并跳出循环
}
void paixu() //义排序函数
{
int n;
printf("\n ****************************************************************************");
printf("1.按航班号从小到大排序 \n "
"2.按航班号从大到小排序 \n ");
prntf("\n**********************************************************************************");
printft("请在1-2中选择以回车键结束:");
scanf("% d ", &n); //输入排序方式
switch (n)
{
case 1:
paixul();//调用从小到大排序函数
break;
case 2:
paixu2();//调用从大到小排序函数
break;
}
printf("排序后的航班信息为:\n");
output(); //湿示排序后航班信息
printf("\n 请按回车键返回上层菜单");
getchar():
getchar();
}
void paixul()//定义从小到大排序函
{
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;
}
}
}
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[t];
s[i]=t;
trturn 0;
}
}
}
函数 read():
if((fp=fopen("hangban.dat","rb"))=NULL) 中 等于 应为 ==,= 是赋值,== 才是比较。
函数 save():
与read()函数同样的错误。
函数 search():
语句 printf(PRINT) 应为 printf(PRINTF)。
函数paixu():
第一个 getchar() 结尾使用了冒号(:),应为封号(;)。
函数paixu2():
for(j=i+1,j<m;j++) 应为:for(j=i+1;j<m;j++)。
语句 s[k] = s[t]; 看上下文,应为:s[k] = s[i];
最后trturn 0; 应为 return 0;
似乎都是拼写错误,应仔细些。