getchar()不停止的原因-------学生成绩管理系统源码

你的输入流中还有残留的字符,getchar()()会接受那个字符。你可以在调用getchar()之前用fflush(stdin)刷新一下输入缓冲区。  
应该有读入语句吧,没读干净,输入流里还有剩余的字符,就直接被getchar吞掉了,所以没有等待输入。
#include "stdio.h"
#include"string.h"
#include"stdlib.h"
void creat(), add(), modify(), del(), show(), search(), sort(), showmenu();
#define N 100
struct student
{
	char num[6];
	char name[8];
	int score[3];
	double av;
}stu[N];
int main()
{
	int choice;
	showmenu();
	scanf("%d", &choice);
	while (choice != 0)
	{
		switch (choice)
		{
		case 1:creat(); break;
		case 2:add(); break;
		case 3:modify(); break;
		case 4:del(); break;
		case 5:show(); break;
		case 6:search(); break;
		case 7:sort(); break;
		}
		showmenu();
		scanf("%d", &choice);
	}
	return 0;
}
void showmenu()
{
	system("cls"); /*清屏*/
	printf("\n        学生成绩管理系统         \n");
	printf("\n=================================\n");
	printf("        1. 录入学生数据        \n");
	printf("        2. 追加学生数据        \n");
	printf("        3. 修改学生数据        \n");
	printf("        4. 删除学生数据        \n");
	printf("        5. 显示学生数据        \n");
	printf("        6. 查找学生数据        \n");
	printf("        7. 排序学生数据        \n");
	printf("        0. 退出系统            \n");
	printf("===============================\n");
	printf("\n请输入您的选择(0-7):");
}
void save(int n)     /*将学生记录保存到二进制格式文件stud中*/
{
	FILE *fp;
	int i;
	fp = fopen("stud", "wb");
	for (i = 0; i<n; i++)
		fwrite(&stu[i], sizeof(struct student), 1, fp);
	fclose(fp);
}
/*******************************统计函数*****************************/
int count()   /*统计数据文件"stud"中记录个数*/
{
	FILE *fp;
	int i;
	fp = fopen("stud", "rb");
	for (i = 0; !feof(fp); i++)
		fread(&stu[i], sizeof(struct student), 1, fp);
	fclose(fp);
	return(i - 1);
}
void  creat()  /*录入学生原始数据并写入磁盘文件*/
{
	int  i, j, n;
	system("cls");   /*清屏*/
	printf("请输入首次输入记录的数量:");
	scanf("%d", &n);
	for (i = 0; i<n; i++)
	{
		printf("\n请输入第%d个学生数据:\n", i + 1);
		printf("学号: ");
		scanf("%s", stu[i].num);
		printf("姓名: ");
		scanf("%s", stu[i].name);
		for (j = 0; j<3; j++)
		{
			printf("成绩%d: ", j + 1);
			scanf("%d", &stu[i].score[j]);
		}
		stu[i].av = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;
	}
	save(n);      /*调用保存函数将录入的记录存入数据文件中*/
}
void  add()  /*追加数据并写入磁盘文件*/
{
	int  i, j, n, k, sum = 0;
	system("cls");
	n = count();  /*调用统计函数统计数据文件中的记录数*/
	printf("请输入追加记录的个数:");
	scanf("%d", &k);
	for (i = 1; i <= k; i++)
	{
		printf("\n请输入需追加的第%d个学生数据:\n", i);
		printf("学号: ");
		scanf("%s", stu[n - 1 + i].num);
		printf("姓名: ");
		scanf("%s", stu[n - 1 + i].name);
		sum = 0;
		for (j = 0; j<3; j++)
		{
			printf("成绩%d: ", j + 1);
			scanf("%d", &stu[n - 1 + i].score[j]);
			sum += stu[n - 1 + i].score[j];
		}
		stu[n - 1 + i].av = sum / 3.0;
	}
	save(n + k);   /*调用保存函数把新追加的数据存入数据文件中*/
}
void  modify()  /*根据学号修改学生数据*/
{
	int  i, j, n, k = -1;
	struct student s;
	system("cls");
	n = count();
	printf("请输入要修改数据的学号:");
	scanf("%s", s.num);
	for (i = 0; i<n; i++)
		if (strcmp(s.num, stu[i].num) == 0)
		{
			k = i; break;
		}
	if (k == -1) printf("该学号不存在\n");
	else
	{
		printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
		printf("%s\t%s\t", stu[k].num, stu[k].name);
		for (j = 0; j<3; j++)
			printf("%d\t", stu[k].score[j]);
		printf("%.2lf\n", stu[k].av);
		printf("\n");
		printf("\n请重新输入该学生数据:\n");
		printf("学号: ");
		scanf("%s", stu[k].num);
		printf("姓名: ");
		scanf("%s", stu[k].name);
		for (j = 0; j<3; j++)
		{
			printf("成绩%d: ", j + 1);
			scanf("%d", &stu[k].score[j]);
		}
		stu[k].av = (stu[k].score[0] + stu[k].score[1] + stu[k].score[2]) / 3.0;
	}
	save(n);  /*调用保存函数保存修改后的数据*/
}
void  del()  /*根据学号删除学生的记录*/
{
	int  i, j, k, n;
	struct student s;
	system("cls");
	n = count();
	printf("\n\n-----------------学生成绩表------------------\n\n");
	printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
	for (i = 0; i<n; i++)
	{
		printf("%s\t%s\t", stu[i].num, stu[i].name);
		for (j = 0; j<3; j++)
			printf("%d\t", stu[i].score[j]);
		printf("%.2lf", stu[i].av);
		printf("\n");
	}
	printf("请输入要删除的学生的学号:");
	scanf("%s", s.num);
	for (i = 0; i<n; i++)
		if (strcmp(s.num, stu[i].num) == 0)
		{
			k = i; break;
		}
	if (k == -1) printf("数据不存在\n");
	else
	{
		printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
		printf("%s\t%s\t", stu[k].num, stu[k].name);
		for (j = 0; j<3; j++)
			printf("%d\t", stu[k].score[j]);
		printf("%.2lf\n", stu[k].av);
		printf("\n");
		for (i = k; i<n - 1; i++)
			stu[i] = stu[i + 1];
		n = n - 1;
		save(n);  /*调用保存函数保存删除后的数据文件*/
	}
}
void  show() /*显示所有学生数据*/
{
	int  i, j, n;
	system("cls");
	n = count();
	printf("\n\n-----------------学生成绩表------------------\n\n");
	printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
	for (i = 0; i<n; i++)
	{
		printf("%s\t%s\t", stu[i].num, stu[i].name);
		for (j = 0; j<3; j++)
			printf("%d\t", stu[i].score[j]);
		printf("%.2lf", stu[i].av);
		printf("\n");
	}
	fflush(stdin);
	getchar();   /*按任意键继续*/
}
void  search()  /*按学号查找学生数据并显示*/
{
	int  i, j, n, k = -1;
	struct student s;
	system("cls");
	n = count();
	printf("请输入要查找的学生的学号:");
	scanf("%s", &s.num);
	for (i = 0; i<n; i++)
		if (strcmp(s.num, stu[i].num) == 0)
		{
			k = i; break;
		}
	if (k == -1) printf("数据不存在\n");
	else
	{
		printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
		printf("%s\t%s\t", stu[k].num, stu[k].name);
		for (j = 0; j<3; j++)
			printf("%d\t", stu[k].score[j]);
		printf("%.2lf\n", stu[k].av);
		printf("\n");
	}
	getchar();
}
void  sort()  /*按个人平均成绩降序排序*/
{
	int  i, j, n;
	struct student  temp;
	system("cls");
	n = count(); /*调用统计函数统计数据文件中的记录数*/
	for (i = 0; i<n - 1; i++)   /*排序*/
		for (j = i + 1; j<n; j++)
			if (stu[i].av<stu[j].av)
			{
				temp = stu[i];
				stu[i] = stu[j];
				stu[j] = temp; printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均成绩\n");
				for (i = 0; i<n; i++)
				{
					printf("%s\t%s\t", stu[i].num, stu[i].name);
					for (j = 0; j<3; j++)
						printf("%d\t", stu[i].score[j]);
					printf("%.2lf\n", stu[i].av);
				}
				printf("\n\n");
				getchar();
			}

}
//printf("-------------学生成绩表(排序后)--------------\n");

支付宝账号:[email protected]

发布了259 篇原创文章 · 获赞 67 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/linjingtu/article/details/92380483
今日推荐