我自己写的学籍管理系统,不知道是不是文件读入时出了什么问题,有几个功能运行时就提示windows出现错误

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>
#include<windows.h>
#define N 100
typedef struct student{
	char num[13];//字符数组记录学号
	char name[20];//
	float math;
	float english;
	float cprogram;//c程序
	float culture;//文化课成绩
	float average;//平均成绩
	float score[4];//用数组记录成绩,后面在函数中在看
}jibenxingxi;//定义结构体变量的类型名为jjibenxingxi
//
void mainprint();//打印主界面
void scoreInput();//成绩录入
void scoreStat();//成绩统计系统
void studentStatus();//学生管理功能界面
void bukao();         /*生成并打印补考通知单*/                                            
void sortAnhao();    /*按学号排序*/             
void jisuanPingjun();/*计算平均分并排序*/             
void tongjiFenshu(); /*统计分数段*/      
void outdanke(); //输出单科成绩
void qitafunction();//
void findstudent();//查找学生
//
void main()
{
	char choose='\0',yes_no='\0';
	do
	{
		system("color 4f");
		system("cls");
		mainprint();
		printf("                             ");
		choose=getch();
		switch(choose)
		{
			case '1':scoreInput(); break;//成绩录入
			case '2':scoreStat(); break;
			case '3':studentStatus(); break;
			case '4':qitafunction(); break;
			case '0': break;
			default:printf("   你所输入的选项非法\n");
		}
		if(choose=='0') break;
		printf("                          即将进入主菜单,要继续选择吗(Y/N)?\n");
		do
		{
			yes_no=getch();
		}while(yes_no!='y'&&yes_no!='Y'&&yes_no!='n'&&yes_no!='N');
	}while(yes_no=='Y'||yes_no=='y');
}
void mainprint()
{
	printf("                        |******************************************|\n"); 
	printf("                        |          欢迎使用学籍管理系统            |\n");
	printf("                        |******************************************|\n");
	printf("                        |            请输入选项编号(0~4)           |\n");
	printf("                        |------------------------------------------|\n");
	printf("                        |              1--录入成绩                 |\n");
	printf("                        |              2--统计成绩                 |\n");
	printf("                        |              3--处理学籍                 |\n");
	printf("                        |              4--创新功能                 |\n");
	printf("                        |              0--  退出                   |\n"); 
	printf("                        |------------------------------------------|\n");
}

void scoreInput()
{
	int i=0;
	char yes_no='\0';//
	jibenxingxi stu[N]={0};
	FILE *fp=NULL;
	system("color 5f");//头文件windows中的函数,调用DOS命令,5f,中间5代表设置背景颜色,f代表前景颜色(字体颜色)
	system("cls");//头文件windows中的函数,清屏
	fp=fopen("d:\\学生基本信息.txt","w");//以写入的方式打开文件d:\\学生基本信息.txt
	if(fp==NULL) 
	{
		printf("    打开文件失败!\n");
		return;
	}
	printf("\n欢迎进入成绩录入系统\n");
	printf("请输入第%d个记录:\n",i+1);
	puts("请输入学生学号:(用#结束程序)\n");
	scanf("%s",stu[i].num);
	puts("请输入学生姓名:(用#结束程序)\n");
	scanf("%s",stu[i].name);
	puts("请依次输入学生的数学、英语、编程、文化课成绩:\n");
	scanf("%f%f%f%f",&stu[i].math,&stu[i].english,&stu[i].cprogram,&stu[i].culture);
	while(strcmp(stu[i].num,"#")&&strcmp(stu[i].name,"#"))//字符数组比较函数,如果字符相等,则返回0,即跳出循环
	{
		fprintf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",i+1,stu[i].num,stu[i].name,stu[i].math,
			stu[i].english,stu[i].cprogram,stu[i].culture);//赋值给结构体变量,且把结构体变量写入文件
		i++;
		printf("请输入第%d个记录",i+1);
		puts("请输入学生学号:(用#结束程序)\n");
		scanf("%s",stu[i].num);
		puts("请输入学生姓名:(用#结束程序)\n");
		scanf("%s",stu[i].name);
		puts("请依次输入学生的数学、英语、编程、文化课成绩:\n");
		scanf("%f%f%f%f",&stu[i].math,&stu[i].english,&stu[i].cprogram,&stu[i].culture);
	}
	fclose(fp);
}
//
void scoreStat()
{
	char choose='\0',yes_no='\0';
	system("color 6f");
	do
	{
		system("cls");
		printf("欢迎进入成绩统计系统\n");
		printf("\n                                 |------------------------|");
		printf("\n                                 |    请输入选项编号(0~4) |");
		printf("\n                                 |------------------------|");
		printf("\n                                 |      1--按学号排序     |");
		printf("\n                                 |      2--按平均分数排序 |");
		printf("\n                                 |      3--统计分数段     |");
		printf("\n                                 |      4--返回           |");
		printf("\n                                 |      0--退出系统       |");
		printf("\n                                 |------------------------|\n");
		choose=getch();
		switch(choose)
		{
		case '1':sortAnhao();
		case '2':jisuanPingjun();
		case '3':tongjiFenshu();
		case '4':main();
		case '0':break;
		default:printf("       这是一个非法选项!");break;
		}
		if(choose==0) break;
		printf("     要继续选择吗?(Y/N)");
		do
		{
			yes_no=getch();
		}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
	}while(yes_no=='y'||yes_no=='Y');
}
//
void studentStatus()
{
	char choose='\0',yes_no='\0';
	jibenxingxi stu[N]={0};
	FILE *fp=NULL;
	fp=fopen("d:\\学生基本信息.txt","r");
	if(fp==NULL)
	{printf("文件打开失败!"); return; }
	system("color 2f");
	do
	{
		system("cls");
		printf ("                 |---------------------------------------|\n");
		printf ("                 |   请输入选项编号(0-3)                 |\n");
		printf ("                 |---------------------------------------|\n");
		printf ("                 |   1----------生成并打印补考通知单     |\n");
		printf ("                 |   2----------查找学生                 |\n");
		printf ("                 |   3----------输出单科成绩                 |\n");		
		printf ("                 |   4----------返回                     |\n");
		printf ("                 |   0----------退出系统                 |\n");
		printf ("                 |---------------------------------------|\n");
		choose=getche();
		while(choose!='0'&&choose!='1'&&choose!='2'&&choose!='3'&&choose!='4')
        {
			printf("                  %c为非法选项!请重新输入:",choose);
			choose=getchar();
		}
		switch(choose)
		{
		case '1':bukao(); break;
		case '2':findstudent(); break;
		case '3':outdanke(); break;
		case '4':main(); break;
		case '0':break;
		}
		if(choose==0)
		{
			printf("\n");
			printf("感谢您的使用!\n");
			break;
		}
		printf("要继续选择吗?(Y/N)\n");
		do
		{
			yes_no=getch();
		}while(yes_no!='y'&&yes_no!='Y'&&yes_no!='n'&&yes_no!='N');
	}while(yes_no=='y'||yes_no=='Y');
}

void findstudent()
{
	int i=0,j=0,count=0,n=0,t=0;
	char ch[20]="",yes_no='\0';
	struct student stu[N]={0};
	FILE *fp=NULL;
	fp=fopen("d:\\学生基本信息.txt","r");
	if(fp==NULL)
	{
		printf("\n 打开文件失败!\n");  return; 
	}
	while(feof(fp)==0)
	{
		fscanf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",&t,stu[i].num,
			stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3]);
		i++;
		n++;
	}
	fclose(fp);
	do
	{ 
		system("color  8f");
		system("cls");
		printf("\n                   欢迎进入查询学生系统!\n");
		printf("\n请输入要查学的学生的姓名:");
		scanf("%s",&ch);
		for(i=0;i<n;i++)
			if(strcmp(stu[i].name,ch)==0)
			{ 
				printf("\n        您查询的是学号为%s的学生,他的成绩如下:",stu[i].num);
				printf("\n        高数:%7.1f,英语:%7.1f,c语言编程:%7.1f,乱七八遭:%7.1f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3]);
				break;
			}
			if(i>=n)
				printf("\n                      查无此人.......\n");
			printf("\n                 要继续选择查询学生吗(Y/N)?\n");
			do   
			{
				yes_no=getche();
			}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
	}while(yes_no=='y'||yes_no=='Y'); 
}                   
void sortAnhao()
{
	int k,i=0,j=0,n=0,t=0;
	jibenxingxi stu2[N]={0},temp={0};//temp是为了排序时与结构体变量值进行交换的中间变量
	FILE *fp=NULL;
	system("color 9f");
	fp=fopen("d:\\学生基本信息.txt","r");
	if(fp=NULL)
	{printf("文件打开失败!\n"); return;}
	printf("欢迎进入按学号排序系统\n");
	for(i=0;feof(fp)==0;i++)
	{
		fscanf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",&t,stu2[i].num
			,stu2[i].name,&stu2[i].math,&stu2[i].english,&stu2[i].cprogram,&stu2[i].culture);
	}
	fclose(fp); 
	for(j=0;j<i-2;j++)//选择法排序
	{
		k=j;
		for(n=j+1;n<i-1;n++)
		{
			if(strcmp(stu2[j].num,stu2[n].num)>0)
				k=n;
		}
			temp=stu2[j];
			stu2[j]=stu2[k];
			stu2[k]=temp;
	}
	fp=fopen("d:\\按学号排序.txt","w");
	if(fp=NULL)
	{printf("文件打开失败"); return;}
	fprintf(fp,"序号    学号      姓名        高数      英语      C语言      乱七八糟\n");
	for(j=0;j<i;j++)
	{
		fprintf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",j+1,stu2[j].num
			,stu2[j].name,stu2[j].math,stu2[j].english,stu2[j].cprogram,stu2[j].culture);
	}
	printf("        文件已保存至D:\\按学号排序.txt");
	fclose(fp);
}        
void jisuanPingjun()
{
	int i,j=0,k,n;
	jibenxingxi stu3[N]={0},temp={0};
	FILE *fp=NULL;
	system("color 9f");
	fp=fopen("d:\\学生基本信息.txt","r");
	if(fp==NULL)
	{printf("文件打开失败\n"); return;}
	printf("欢迎进入按平均成绩排序系统");
	while(feof(fp)==0)
	{
		fscanf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",&i,stu3[i].num,
			stu3[i].name,&stu3[i].math,&stu3[i].english,&stu3[i].cprogram,&stu3[i].culture);
		i++;
	}
	for(j=0;j<i-1;j++)
	stu3[j].average=(float)(stu3[j].math+stu3[j].english+stu3[j].cprogram+stu3[j].culture)/4;
	//平均分不一定是整数,所以要强制转换为浮点型变量
	for(i=0;i<j;i++)//选择法排序平均分,此时j记录了有多少个人
	{
		k=i;
		for(n=i+1;n<=j;n++)
		{
			if(stu3[k].average>stu3[n].average)
				k=n;
		}
		temp=stu3[k];
		stu3[k]=stu3[i];
		stu3[i]=temp;
	}
	fp=fopen("d:\\按平均成绩排序.txt","w");
	if(fp==NULL)
		{printf("文件打开失败\n"); return;}
	fprintf(fp,"序号       学号        姓名        数学        英语       C语言      乱七八糟    平均分\n");
	for(i=0;i<=j;i++)
		fprintf(fp,"%3d%15s%16s%7.1f%7.1f%7.1f%7.1f\n",i+1,stu3[i].num
			,stu3[i].name,stu3[i].math,stu3[i].english,stu3[i].cprogram,stu3[i].culture,stu3[i].average);
	printf("   文件已保存至D:\\按平均成绩排序.txt\n");//把按平均成绩排序的信息写入文件
	fclose(fp);
}


三十二应遍尘刹
浏览 1569回答 1
1回答

慕粉1146083187

可能是SDK中的windows.h这个文件有问题,可以重装Visual Studio,选择“修复”试试。
打开App,查看更多内容
随时随地看视频慕课网APP