好难不会鸭/(ㄒoㄒ)/~~,我今年读大一,这是我写的飞机订票程序,为什么订票的时候飞机的座位数共用了啊,还有退票的时候退的比买的多也成功了,最后飞机的总座位数还增加了。。。麻烦大神教教我怎么改。。。谢谢啦
#include <stdio.h>
#include <string.h>
#include <process.h>
#define N 10
#define PRINT "%d\t\t%s\t\t%s\t\t%s\t\t%d\n",s[i].num,s[i].start,s[i].over,s[i].time,s[i].count
struct air {
int num; //航班号//
char start[20]; //起点站//
char over[20]; //终点站//
char time[10]; //起飞时间//
int count; //订座位数//
int zuowei; //座位数//
char dingchu[10]; //座位是否订出//
char name[20]; //订票者姓名拼音//
char ID[20]; //身份证号//
} s[N];
int m = 0;
char i[10];
char ii[10];
void add();
void print();
void search();
void dingpiao();
void tuipiao();
void read();
void save();
void output();
void chushihua();
void build();
void main() { /*定义主函数*/
int j;
chushihua();
do {
system("cls");
printf(" 欢迎使用松仁订票系统! ");
printf(" \n");
printf("1.增加航班信息\n"
"2.浏览航班信息\n"
"3.查找航班信息(根据航班号)\t\t\n"
"4.订票业务\n"
"5.退票业务\n"
"0.退出\n");
printf(" \n");
printf("请在0-5中选择并以回车键结束: ");
scanf("%d", &j);
switch (j) {
case 1:
add();
break;
case 2:
print();
break;
case 3:
search();
break;
case 4:
dingpiao();
break;
case 5:
tuipiao();
break;
case 0:
save();
printf("感谢您使用松仁订票,欢迎下次使用!");
system("pause");
break;
}
} while (j != 0);
}
void chushihua() {
/*定义系统初始化函数*/
if (access("Flight.txt", 0)) {
build();
} else
read();
}
void build() {
/*定义建立数据文件函数*/
FILE *fp;
if ((fp == fopen("Flight.txt", "w")) == NULL) {
printf("文件创建失败!请重试");
getchar();
}
printf("请输入航班信息:\n");
for (int 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);
fwrite(&s[i], sizeof(struct air), 1, fp);
m++;
printf("添加已完成,是否继续添加?添加则输入y,不添加则输入n:");
scanf("%s", ii);
if (strcmp(ii, "y") != 0) {
fclose(fp);
return;
}
}
}
void read() {
/*定义读取文件函数*/
FILE *fp;
if ((fp = fopen("Flight.txt", "r")) == NULL) {
printf("文件创建失败");
getchar();
return;
}
int 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("Flight.txt", "w")) == NULL) {
printf("创建文件失败!");
getchar();
return;
}
for (int 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].start);
printf("请输入终点站:");
scanf("%s", &s[m].over);
printf("请输入时间:");
scanf("%s", s[m].time);
printf("请输入座位数:");
scanf("%d", &s[m].count);
m++;
printf("添加已完成,是否继续添加?添加则输入y,不添加则输入n:");
scanf("%s", ii);
} while (!strcmp(ii, "y"));
}
void output() {
/*定义输出格式函数*/
printf("航班号\t\t起始站\t\t终点站\t\t时间\t\t座位数\n");
for (int i = 0; i < m; i++)
printf(PRINT);
}
void print() {
/*定义显示信息函数*/
printf("\n有以下航班可选择:\n");
output();
printf("\n按回车键以返回");
getchar();
getchar();
}
void search() {
/*定义查询函数*/
int n;
do {
printf("\n请输入航班号:");
scanf("%d", &n);
for (int i = 0; i < m; i++) {
if (s[i].num == n) {
printf("\n该航班具体信息为:");
printf("\n航班号\t\t起始站\t\t终点站\t\t时间\t\t座位数\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, i = 0;
char a[10] = "y";
do {
search();
if (!strcmp(ii, "y")) {
printf("抱歉没有找到您所需要的航班\n");
printf("\n回车返回上层菜单");
getchar();
getchar();
strcpy(ii, "n");
break;
}
printf("请输入您要订的机票数:");
scanf("%d", &n);
if (n <= 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);
continue;
}
while (!strcmp(a, "y"));
printf("是否需要订其他航班的机票?确认请输入y,取消请输入n:");
scanf("%s", a);
} while (!strcmp(a, "y"));
system("pause");
}
void tuipiao() {
/*定义退票函数*/
int i;
int n;
char a[10];
do {
search();
if (!strcmp(ii, "y")) {
printf("未查询到相关信息。\n");
printf("\n请按回车返回上层菜单");
getchar();
getchar();
strcpy(ii, "n");
break;
}
printf("请输入您要退票的数目:");
scanf("%d", &n);
if (n <= 0 || n > 12)
printf("输入有误\n");
else {
s[i].count = s[i].count + n;
printf("退票成功\n");
}
printf("是否继续退票?确认请输入y,取消请输入n:");
scanf("%s", a);
} while (!strcmp(a, "y"));
}