「已注销」 2021-01-08 14:45 采纳率: 0%
浏览 21
已结题

请问为什么编译的时候会出现这种情况,呜呜呜~~~有没有小哥哥愿意帮个忙

 好难不会鸭/(ㄒ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"));
}
  • 写回答

1条回答 默认 最新

  • 追逐时代的脚步 2021-01-08 15:14
    关注

    void search() 函数没有把用户要检索的航班索引信息返回出来.

    void dingpiao() 函数里面的 i 一直等于 0;search();只是改变了ii的值;

    } else if (s[i].count != 0 && s[i].count >= n) { 这个判断有点问题,应该在加个 n > 0;


    void tuipiao() int i;没有被合理的赋值, search();search();只是改变了ii的值;
    按理说在做 s[i].count = s[i].count + n; 之前,要判断下总和是不是超过了zuowei数.

    其它还有一点小问题,需要你自己努力了

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月14日

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?