c 语言程序设计基础 学生成绩管理系统

学生成绩管理系统

在1.0的基础上找了部分问题
版本2.0

#include <stdio.h>
#include <string.h> 
#include <windows.h>
#define N 30
#define M 10

typedef struct date
{
	int year;
	int month;
	int day;
}D;

typedef struct student
{
	long ID;          //学号 
	char name[10];    //姓名 
	char sex;         //性别 男:M 女:F
	D birthday;     //出生日期 
	int score[M];     //课程成绩 
	int sum;          //总分 
	float aver;       //平均分 
}STUDENT;

void Wolcome();
void gotoxy(int,int);

void Read(STUDENT stu[],int n,int m);

void Sum_Aver(STUDENT stu[],int n,int m); 

void Total_Aver(STUDENT stu[],int n,int m);
void SdudentTotal_Aver(STUDENT stu[],int n,int m); 

void SelectionSort(STUDENT stu[],int n,int m,int (*compare)(int a,int b));
int DescendingScoreSort(int a,int b);
int AscendingScoreSort(int a,int b);
void Print(STUDENT stu[],int n,int m);

void IDSort(STUDENT stu[],int n,int m);
void SortString(STUDENT stu[],int n,int m);
int LinSearch(STUDENT stu[],int n,int x);
int NameSearch(STUDENT stu[],char Name[],int n);
void StatisticAnalysis(STUDENT stu[],int n,int m);
void WritetoFile(STUDENT stu[],int n,int m);
void ReadfromFile(STUDENT stu[],int *n,int *m); 

void Fanhui(); 

int main()
{
	Wolcome();
}

void gotoxy(int x, int y)       //定位坐标
{
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

void Fanhui()
{
	char p; //用于按成绩排序,按任意键结束
	printf("按任意键返回菜单");
	while(getchar()!='\n');
	{
		scanf("%c",&p);
	}
	system("cls");
	Wolcome();
}

void Wolcome()                //欢迎界面
{
	int i,j;
	static STUDENT stu[N];
	int ret;      //查找学生成绩时的返回值,若为-1则未找到,否则找到
	long x;       //被搜索学生学号
	char Name[10];//被搜索学生姓名
	int p;        //选择序号
	static int n,m;   //输入学生人数
	gotoxy(46,2);
	printf("学 生 成 绩 管 理 系 统");
	gotoxy(25,4);
	for(i=0;i<35;i++)
	{
		printf("* ");
	}
	gotoxy(25,21);
	for(i=0;i<35;i++)
	{
		printf("* ");
	}
	gotoxy(25,25);
	for(i=0;i<35;i++)
	{
		printf("* ");
	}                                 //横框

	for(j=5;j<25;j++)
	{
		gotoxy(25,j);
		printf("*");
	}
	for(j=5;j<25;j++)
	{
		gotoxy(93,j);
		printf("*");
	}                                 //竖框

	gotoxy(32,6);
	printf("1.录入每个学生的学号、姓名和各科考试成绩");
	gotoxy(32,7);
	printf("2.计算每门课程的总分和平均分");
	gotoxy(32,8); 
	printf("3.计算每个学生的总分和平均分");
	gotoxy(32,9);
	printf("4.按每个学生的总分由高到低排出名次表");
	gotoxy(32,10);
	printf("5.按每个学生的总分由低到高排出名次表");
	gotoxy(32,11);
	printf("6.按学号由小到大排出成绩表");
	gotoxy(32,12);
	printf("7.按姓名的字典顺序排出成绩表");
	gotoxy(32,13);
	printf("8.按学号查找学生排名及其考试成绩");
	gotoxy(32,14);
	printf("9.按姓名查找学生排名及其考试成绩");
	gotoxy(32,15);
	printf("10.对每门课程分别统计每个类别的人数及其所占百分比");
	gotoxy(32,16);
	printf("11.输出每个学生的名次学号姓名性别出生日期各科分数总分平均分");
	gotoxy(32,17);
	printf("12.将每个学生的记录信息写入文件");
	gotoxy(32,18);
	printf("13.从文件中读出每个学生的记录信息并显示");
	gotoxy(32,19);
	printf("0.Exit");
	gotoxy(32,23);
	printf("Please enter your choice[  ]\b\b\b");
	scanf("%d",&p);
	switch(p)
	{
	case 1:
		system("cls");
		printf("输入学生人数和考试科目数:");
		scanf("%d %d",&n,&m);
		Read(stu,n,m);
		system("cls");
		Wolcome();
		break;
	case 2:
		system("cls");
		Total_Aver(stu,n,m);
		break;
	case 3:
		system("cls");
		SdudentTotal_Aver(stu,n,m);
		break;
	case 4:
		system("cls");
		printf("按每个学生的总分由高到低排出名次表:\n");
		SelectionSort(stu,n,m,DescendingScoreSort);
		Print(stu,n,m);
		break;
	case 5:
		system("cls");
		printf("按每个学生的总分由低到高排出名次表:\n");
		SelectionSort(stu,n,m,AscendingScoreSort);
		Print(stu,n,m);
		break;
	case 6:
		system("cls");
		printf("按学号由小到大排出成绩表:\n");
		IDSort(stu,n,m);
		Print(stu,n,m);
		Fanhui();
		break;
	case 7:
		system("cls");
		printf("按姓名的字典顺序排出成绩表:\n");
		SortString(stu,n,m);
		Print(stu,n,m);
		Fanhui();
		break;
	case 8:
		system("cls");
		SelectionSort(stu,n,m,DescendingScoreSort);
		printf("Input the search ID:");
		scanf("%ld",&x);
		ret=LinSearch(stu,n,x);
		if(ret != -1)
		{
			printf("排名 : %d  姓名: %s 成绩 : %d\n",ret+1,stu[ret].name,stu[ret].sum);
		}
		else
		{
			printf("Not found!\n");
			Fanhui();
		}
		break;
	case 9:
		system("cls");
		SelectionSort(stu,n,m,DescendingScoreSort);
		
		printf("Input the search name:");
		while(getchar()!='\n');
		gets(Name);
		ret=NameSearch(stu,Name,n);
		if(ret != -1)
		{
			printf("排名 : %d 成绩 : %d\n",ret+1,stu[ret].sum);
		}
		else
		{
			printf("Not found!\n");
		}
		printf("任意键加回车结束");
		Fanhui();
		break;
	case 10:
		system("cls");
		printf("等级分析:\n");
		StatisticAnalysis(stu,n,m);
		break;
	case 11:
		system("cls");
		Print(stu,n,m);
		break;
	case 12:
		system("cls");
		WritetoFile(stu,n,m);
		break;
	case 13:
		system("cls");
		ReadfromFile(stu,&n,&m);
		break;
	case 0:
		exit(0);
	}
}

void Sum_Aver(STUDENT stu[],int n,int m)
{
	int i,j;
	int sum;
	for(i=0;i<n;i++)
	{
		sum=0;
		for(j=0;j<m;j++)
		{
			sum=sum+stu[i].score[j];
		}
		stu[i].sum=sum;
		stu[i].aver=(float)sum/m; 
	}
}

/*
  1.录入每个学生的学号、姓名和各科考试成绩
*/
void Read(STUDENT stu[],int n,int m)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		printf("输入第%d个学生的 学号 姓名 性别 出生日期 各科分数:\n",i+1);
		scanf("%ld",&stu[i].ID);
		scanf("%s",&stu[i].name);
		scanf(" %c",&stu[i].sex);
		scanf("%d",&stu[i].birthday.year);
		scanf("%d",&stu[i].birthday.month);
		scanf("%d",&stu[i].birthday.day);
		for(j=0;j<m;j++)
		{
			scanf("%d",&stu[i].score[j]);
		}
	}
	Sum_Aver(stu,n,m); 
}

/*
  2.计算每门课程的总分和平均分
*/
void Total_Aver(STUDENT stu[],int n,int m)
{
	int i,j;
	int sum;
	for(i=0;i<m;i++)
	{
		sum=0;
		for(j=0;j<n;j++)
		{
			sum=sum+stu[j].score[i];
		}
		printf("第%d门课:\tsum=%6d\taver=%6.1f\n",i+1,sum,(float)sum/n);
	}
	Fanhui();
}

/*
  3.计算每个学生的总分和平均分
*/
void SdudentTotal_Aver(STUDENT stu[],int n,int m)
{
	Sum_Aver(stu,n,m);
	Print(stu,n,m);
	Fanhui();
}

/*
  调用函数指针compare指向的函数排序
*/
void SelectionSort(STUDENT stu[],int n,int m,int (*compare)(int a,int b))
{
	int i,j,k;
	STUDENT temp;
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if((*compare)(stu[j].sum,stu[k].sum))
			{
				k=j;
			}
		}
		if(k!=i)
		{
			temp=stu[i];
			stu[i]=stu[k];
			stu[k]=temp;
		}
	}
}

/*
  由高到低排序(4) 
*/
int DescendingScoreSort(int a,int b)
{
	return a>b;
}

/*
  由低到高排序 (5) 
*/
int AscendingScoreSort(int a,int b)
{
	return a<b;
}

/*
  打印 名次 学号 姓名 性别 出生日期 各科分数 总分 平均分  
*/
void Print(STUDENT stu[],int n,int m)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		printf("%d %10ld %s %c %6d/%02d/%02d",i+1,stu[i].ID,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
		for(j=0;j<m;j++)
		{
			printf("\t%d",stu[i].score[j]);
		}
		printf("\t%d\t%6.2f\n",stu[i].sum,stu[i].aver);
	}
	Fanhui();
}

/*
  6.按学号由小到大排列
*/
void IDSort(STUDENT stu[],int n,int m)
{
	int i,j,k;
	STUDENT temp;
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(stu[j].ID<stu[i].ID)
			{
				k=j;
			}
		}
		if(k!=i)
		{
			temp=stu[i];
			stu[i]=stu[k];
			stu[k]=temp;
		}
	}
}

/*
  7.按姓名的字典顺序排出成绩表   //按字符串由小到大排列 
*/
void SortString(STUDENT stu[],int n,int m)
{
	int i,j;
	STUDENT temp; 
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(strcmp(stu[j].name,stu[i].name)<0)
			{
				temp=stu[i];
				stu[i]=stu[j];
				stu[j]=temp;
			}
		}
	}
}

/*
  8.按学号查找学生排名及其考试成绩
*/
int LinSearch(STUDENT stu[],int n,int x)
{
	int i;
	for(i=0;i<n;i++)
	{
		if(stu[i].ID==x)
		{
			return i;
		}
	}
	return -1;
}

/*
  9.按姓名查找学生排名及其考试成绩
*/
int NameSearch(STUDENT stu[],char Name[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		if(strcmp(stu[i].name,Name)==0)
		{
			return i;
		}
	}
	return -1;
}

/*
  各等级人数及百分比
*/
void StatisticAnalysis(STUDENT stu[],int n,int m)
{
	int A=0,B=0,C=0,D=0,E=0;
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			if(stu[j].score[i]>=90 && stu[j].score[i]<=100)
			{
				A++;
			}
			if(stu[j].score[i]>=80 && stu[j].score[i]<=89)
			{
				B++;
			}
			if(stu[j].score[i]>=70 && stu[j].score[i]<=79)
			{
				C++;
			}
			if(stu[j].score[i]>=60 && stu[j].score[i]<=69)
			{
				D++;
			}
			if(stu[j].score[i]>=0 && stu[j].score[i]<=59)
			{
				E++;
			}
		}
		printf("第%d门课等级分析:\n",i+1);
		printf("优秀(A)\t良好(B)\t中等(C)\t及格(D)\t不及格(E)\n  %2d\t  %2d\t  %2d\t  %2d\t  %2d\n%5.2f%%  %5.2f%%  %5.2f%%  %5.2f%%   %5.2f%%\n",A,B,C,D,E,(float)A*100/n,(float)B*100/n,(float)C*100/n,(float)D*100/n,(float)E*100/n);
		A=0;
		B=0;
		C=0;
		D=0; 
		E=0;
	}
	Fanhui();
}

/*
  12.将每个学生的记录信息写入文件
*/
void WritetoFile(STUDENT stu[],int n,int m)
{
	FILE *fp;
	int i,j;
	if((fp=fopen("student.txt","w"))==NULL)
	{
		printf("Failure to open student.txt!\n");
		exit(0);
	}
	fprintf(fp,"%d\t%d\n",n,m);
	for(i=0;i<n;i++)
	{
		fprintf(fp,"%10ld%8s%3c%6d/%02d/%02d",stu[i].ID,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
		for(j=0;j<m;j++)
		{
			fprintf(fp,"%4d",stu[i].score[j]);
		}
		fprintf(fp,"%4d%6.1f\n",stu[i].sum,stu[i].aver);
	}
	fclose(fp);
	Fanhui();
}

/*
  13.从文件中读出每个学生的记录信息并显示
*/
void ReadfromFile(STUDENT stu[],int *n,int *m)
{
	FILE *fp;
	int i,j;
	if((fp=fopen("student.txt","r"))==NULL)
	{
		printf("Failure to open student.txt!\n");
		exit(0);
	}
	fscanf(fp,"%d\t%d",n,m);
	for(i=0;i<*n;i++)
	{
		fscanf(fp,"%10ld",&stu[i].ID);
		fscanf(fp,"%8s",&stu[i].name);
		fscanf(fp," %c",&stu[i].sex);
		fscanf(fp,"%6d/%02d/%02d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day);
		for(j=0;j<*m;j++)
		{
			fscanf(fp,"%4d",&stu[i].score[j]);
		}
		fscanf(fp,"%4d\n",&stu[i].sum);
		fscanf(fp,"%f\n",&stu[i].aver);
	}
	fclose(fp);
	Print(stu,*n,*m);
	Fanhui();
}

有些问题可能没有测试出来
版本1.0

#include <stdio.h>
#include <string.h> 
#include <windows.h>
#define N 30
#define M 10

typedef struct date
{
	int year;
	int month;
	int day;
}D;

typedef struct student
{
	long ID;          //学号 
	char name[10];    //姓名 
	char sex;         //性别 男:M 女:F
	D birthday;     //出生日期 
	int score[M];     //课程成绩 
	int sum;          //总分 
	float aver;       //平均分 
}STUDENT;

void Wolcome();
void gotoxy(int,int);

void Read(STUDENT stu[],int n,int m);

void Sum_Aver(STUDENT stu[],int n,int m); 

void Total_Aver(STUDENT stu[],int n,int m);
void SdudentTotal_Aver(STUDENT stu[],int n,int m); 

void SelectionSort(STUDENT stu[],int n,int m,int (*compare)(int a,int b));
int DescendingScoreSort(int a,int b);
int AscendingScoreSort(int a,int b);
void Print(STUDENT stu[],int n,int m);

void IDSort(STUDENT stu[],int n,int m);
void SortString(STUDENT stu[],int n,int m);
int LinSearch(STUDENT stu[],int n,int x);
int NameSearch(STUDENT stu[],char Name[],int n);
void StatisticAnalysis(STUDENT stu[],int n,int m);
void WritetoFile(STUDENT stu[],int n,int m);
void ReadfromFile(STUDENT stu[],int *n,int *m); 

void Fanhui(); 

int main()
{
	Wolcome();
}

void gotoxy(int x, int y)       //定位坐标
{
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

void Fanhui()
{
	char p; //用于按成绩排序,按任意键结束
	printf("按任意键返回菜单");
	while(getchar()!='\n');
	{
		scanf("%c",&p);
	}
	system("cls");
	Wolcome();
}

void Wolcome()                //欢迎界面
{
	int i,j;
	static STUDENT stu[N];
	int ret;      //查找学生成绩时的返回值,若为-1则未找到,否则找到
	long x;       //被搜索学生学号
	char Name[10];//被搜索学生姓名
	int p;        //选择序号
	static int n,m;   //输入学生人数
	gotoxy(46,2);
	printf("学 生 成 绩 管 理 系 统");
	gotoxy(25,4);
	for(i=0;i<35;i++)
	{
		printf("* ");
	}
	gotoxy(25,21);
	for(i=0;i<35;i++)
	{
		printf("* ");
	}
	gotoxy(25,25);
	for(i=0;i<35;i++)
	{
		printf("* ");
	}                                 //横框

	for(j=5;j<25;j++)
	{
		gotoxy(25,j);
		printf("*");
	}
	for(j=5;j<25;j++)
	{
		gotoxy(93,j);
		printf("*");
	}                                 //竖框

	gotoxy(32,6);
	printf("1.录入每个学生的学号、姓名和各科考试成绩");
	gotoxy(32,7);
	printf("2.计算每门课程的总分和平均分");
	gotoxy(32,8); 
	printf("3.计算每个学生的总分和平均分");
	gotoxy(32,9);
	printf("4.按每个学生的总分由高到低排出名次表");
	gotoxy(32,10);
	printf("5.按每个学生的总分由低到高排出名次表");
	gotoxy(32,11);
	printf("6.按学号由小到大排出成绩表");
	gotoxy(32,12);
	printf("7.按姓名的字典顺序排出成绩表");
	gotoxy(32,13);
	printf("8.按学号查找学生排名及其考试成绩");
	gotoxy(32,14);
	printf("9.按姓名查找学生排名及其考试成绩");
	gotoxy(32,15);
	printf("10.对每门课程分别统计每个类别的人数及其所占百分比");
	gotoxy(32,16);
	printf("11.输出每个学生的名次学号姓名性别出生日期各科分数总分平均分");
	gotoxy(32,17);
	printf("12.将每个学生的记录信息写入文件");
	gotoxy(32,18);
	printf("13.从文件中读出每个学生的记录信息并显示");
	gotoxy(32,19);
	printf("0.Exit");
	gotoxy(32,23);
	printf("Please enter your choice[  ]\b\b\b");
	scanf("%d",&p);
	switch(p)
	{
	case 1:
		system("cls");
		printf("输入学生人数和考试科目数:");
		scanf("%d %d",&n,&m);
		Read(stu,n,m);
		system("cls");
		Wolcome();
		break;
	case 2:
		system("cls");
		Total_Aver(stu,n,m);
		break;
	case 3:
		system("cls");
		SdudentTotal_Aver(stu,n,m);
		break;
	case 4:
		system("cls");
		printf("按每个学生的总分由高到低排出名次表:\n");
		SelectionSort(stu,n,m,DescendingScoreSort);
		Print(stu,n,m);
		break;
	case 5:
		system("cls");
		printf("按每个学生的总分由低到高排出名次表:\n");
		SelectionSort(stu,n,m,AscendingScoreSort);
		Print(stu,n,m);
		break;
	case 6:
		system("cls");
		printf("按学号由小到大排出成绩表:\n");
		IDSort(stu,n,m);
		Print(stu,n,m);
		Fanhui();
		break;
	case 7:
		system("cls");
		printf("按姓名的字典顺序排出成绩表:\n");
		SortString(stu,n,m);
		Print(stu,n,m);
		Fanhui();
		break;
	case 8:
		system("cls");
		SelectionSort(stu,n,m,DescendingScoreSort);
		printf("Input the search ID:");
		scanf("%ld",&x);
		ret=LinSearch(stu,n,x);
		if(ret != -1)
		{
			printf("排名 : %d  姓名: %s 成绩 : %d\n",ret+1,stu[i].name,stu[ret].sum);
		}
		else
		{
			printf("Not found!\n");
			Fanhui();
		}
		break;
	case 9:
		system("cls");
		SelectionSort(stu,n,m,DescendingScoreSort);
		
		printf("Input the search name:");
		while(getchar()!='\n');
		gets(Name);
		ret=NameSearch(stu,Name,n);
		if(ret != -1)
		{
			printf("排名 : %d 成绩 : %d\n",ret+1,stu[ret].sum);
		}
		else
		{
			printf("Not found!\n");
		}
		printf("任意键加回车结束");
		Fanhui();
		break;
	case 10:
		system("cls");
		printf("等级分析:\n");
		StatisticAnalysis(stu,n,m);
		break;
	case 11:
		system("cls");
		Print(stu,n,m);
		break;
	case 12:
		system("cls");
		WritetoFile(stu,n,m);
		break;
	case 13:
		system("cls");
		ReadfromFile(stu,&n,&m);
		break;
	case 0:
		exit(0);
	}
}

void Sum_Aver(STUDENT stu[],int n,int m)
{
	int i,j;
	int sum;
	for(i=0;i<n;i++)
	{
		sum=0;
		for(j=0;j<m;j++)
		{
			sum=sum+stu[i].score[j];
		}
		stu[i].sum=sum;
		stu[i].aver=(float)sum/m; 
	}
}

/*
  1.录入每个学生的学号、姓名和各科考试成绩
*/
void Read(STUDENT stu[],int n,int m)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		printf("输入第%d个学生的 学号 姓名 性别 出生日期 各科分数:\n",i+1);
		scanf("%ld",&stu[i].ID);
		scanf("%s",&stu[i].name);
		scanf(" %c",&stu[i].sex);
		scanf("%d",&stu[i].birthday.year);
		scanf("%d",&stu[i].birthday.month);
		scanf("%d",&stu[i].birthday.day);
		for(j=0;j<m;j++)
		{
			scanf("%d",&stu[i].score[j]);
		}
	}
	Sum_Aver(stu,n,m); 
}

/*
  2.计算每门课程的总分和平均分
*/
void Total_Aver(STUDENT stu[],int n,int m)
{
	int i,j;
	int sum;
	for(i=0;i<m;i++)
	{
		sum=0;
		for(j=0;j<n;j++)
		{
			sum=sum+stu[j].score[i];
		}
		printf("第%d门课:\tsum=%6d\taver=%6.1f\n",i+1,sum,(float)sum/n);
	}
	Fanhui();
}

/*
  3.计算每个学生的总分和平均分
*/
void SdudentTotal_Aver(STUDENT stu[],int n,int m)
{
	Sum_Aver(stu,n,m);
	Print(stu,n,m);
	Fanhui();
}

/*
  调用函数指针compare指向的函数排序
*/
void SelectionSort(STUDENT stu[],int n,int m,int (*compare)(int a,int b))
{
	int i,j,k;
	STUDENT temp;
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if((*compare)(stu[j].sum,stu[k].sum))
			{
				k=j;
			}
		}
		if(k!=i)
		{
			temp=stu[i];
			stu[i]=stu[k];
			stu[k]=temp;
		}
	}
}

/*
  由高到低排序(4) 
*/
int DescendingScoreSort(int a,int b)
{
	return a>b;
}

/*
  由低到高排序 (5) 
*/
int AscendingScoreSort(int a,int b)
{
	return a<b;
}

/*
  打印 名次 学号 姓名 性别 出生日期 各科分数 总分 平均分  
*/
void Print(STUDENT stu[],int n,int m)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		printf("%d %10ld %s %c %6d/%02d/%02d",i+1,stu[i].ID,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
		for(j=0;j<m;j++)
		{
			printf("\t%d",stu[i].score[j]);
		}
		printf("\t%d\t%6.2f\n",stu[i].sum,stu[i].aver);
	}
	Fanhui();
}

/*
  6.按学号由小到大排列
*/
void IDSort(STUDENT stu[],int n,int m)
{
	int i,j,k;
	STUDENT temp;
	for(i=0;i<n-1;i++)
	{
		k=i;
		for(j=i+1;j<n;j++)
		{
			if(stu[j].ID<stu[i].ID)
			{
				k=j;
			}
		}
		if(k!=i)
		{
			temp=stu[i];
			stu[i]=stu[k];
			stu[k]=temp;
		}
	}
}

/*
  7.按姓名的字典顺序排出成绩表   //按字符串由小到大排列 
*/
void SortString(STUDENT stu[],int n,int m)
{
	int i,j;
	STUDENT temp; 
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(strcmp(stu[j].name,stu[i].name)<0)
			{
				temp=stu[i];
				stu[i]=stu[j];
				stu[j]=temp;
			}
		}
	}
}

/*
  8.按学号查找学生排名及其考试成绩
*/
int LinSearch(STUDENT stu[],int n,int x)
{
	int i;
	for(i=0;i<n;i++)
	{
		if(stu[i].ID==x)
		{
			return i;
		}
	}
	return -1;
}

/*
  9.按姓名查找学生排名及其考试成绩
*/
int NameSearch(STUDENT stu[],char Name[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		if(strcmp(stu[i].name,Name)==0)
		{
			return i;
		}
	}
	return -1;
}

/*
  各等级人数及百分比
*/
void StatisticAnalysis(STUDENT stu[],int n,int m)
{
	int A=0,B=0,C=0,D=0,E=0;
	int i,j;
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			if(stu[j].score[i]>=90 && stu[j].score[i]<=100)
			{
				A++;
			}
			if(stu[j].score[i]>=80 && stu[j].score[i]<=89)
			{
				B++;
			}
			if(stu[j].score[i]>=70 && stu[j].score[i]<=79)
			{
				C++;
			}
			if(stu[j].score[i]>=60 && stu[j].score[i]<=69)
			{
				D++;
			}
			if(stu[j].score[i]>=0 && stu[j].score[i]<=59)
			{
				E++;
			}
		}
		printf("第%d门课等级分析:\n",i+1);
		printf("优秀(A)\t良好(B)\t中等(C)\t及格(D)\t不及格(E)\n  %2d\t  %2d\t  %2d\t  %2d\t  %2d\n%5.2f%%  %5.2f%%  %5.2f%%  %5.2f%%   %5.2f%%\n",A,B,C,D,E,(float)A*100/n,(float)B*100/n,(float)C*100/n,(float)D*100/n,(float)E*100/n);
		A=0;
		B=0;
		C=0;
		D=0; 
		E=0;
	}
	Fanhui();
}

/*
  12.将每个学生的记录信息写入文件
*/
void WritetoFile(STUDENT stu[],int n,int m)
{
	FILE *fp;
	int i,j;
	if((fp=fopen("student.txt","w"))==NULL)
	{
		printf("Failure to open student.txt!\n");
		exit(0);
	}
	fprintf(fp,"%d\t%d\n",n,m);
	for(i=0;i<n;i++)
	{
		fprintf(fp,"%10ld%8s%3c%6d/%02d/%02d",stu[i].ID,stu[i].name,stu[i].sex,stu[i].birthday.year,stu[i].birthday.month,stu[i].birthday.day);
		for(j=0;j<m;j++)
		{
			fprintf(fp,"%4d",stu[i].score[j]);
		}
		fprintf(fp,"%6.1f\n",stu[i].aver);
	}
	fclose(fp);
	Fanhui();
}

/*
  13.从文件中读出每个学生的记录信息并显示
*/
void ReadfromFile(STUDENT stu[],int *n,int *m)
{
	FILE *fp;
	int i,j;
	if((fp=fopen("student.txt","r"))==NULL)
	{
		printf("Failure to open student.txt!\n");
		exit(0);
	}
	fscanf(fp,"%d\t%d",n,m);
	for(i=0;i<*n;i++)
	{
		fscanf(fp,"%10ld",&stu[i].ID);
		fscanf(fp,"%8s",stu[i].name);
		fscanf(fp," %c",&stu[i].sex);
		fscanf(fp,"%6d/%02d/%02d",&stu[i].birthday.year,&stu[i].birthday.month,&stu[i].birthday.day);
		for(j=0;j<*m;j++)
		{
			fscanf(fp,"%4d",&stu[i].score[j]);
		}
		fscanf(fp,"%f\n",&stu[i].aver);
	}
	fclose(fp);
	Print(stu,*n,*m);
	Fanhui();
}
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值