C-学籍和成绩管理系统(无指针版)

系统设计说明

(1)系统启动后,弹出一个用户界面,能实现人机交互的功能。而且只能通过界面菜单命令实现各种功能(包括系统退出功能),可以设计欢迎词。
(2)学生基本信息录入:录入信息包括学号、姓名、性别、宿舍号、电话号码等。
(3)学生成绩基本信息录入:学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩。
(4)计算综合成绩:若本课程无实验(如实验成绩为-1),综合成绩=平时成绩*30% +卷面成绩*70%;若本课程有实验(如实验成绩不为-1),综合成绩=平时成绩*15%+实验成绩*15%+卷面成绩*70%。
(5)计算实得学分:采用等级学分制。综合成绩在90~100分之间,实得学分=学分*100%;综合成绩在80~90分之间,实得学分=学分*80%;综合成绩在70~80分之间,实得学分=学分*75%;综合成绩在60~70分之间,实得学分=学分*60%;综合成绩在60分以下,实得学分=学分*0%;
(6)学生基本情况的查询并输出:输入一个学生的学号或姓名,可查询出此学生的基本信息并显示输出;输入一个宿舍号码,可查询出本宿舍所有学生的基本信息并显示输出。
(7)学生成绩信息的查询并输出:输入一个学生的学号或姓名,可查询出此学生的所有课程情况。(如输出:学号,姓名,课程编号,课程姓名,综合成绩,实得学分等,并统计学生共修课程数目以及实得总学分值。)
(8)排序(分别按综合成绩和实得学分),输出按照综合成绩(或实得学分)升序或降序排序后的学生信息以及对应的课程成绩信息(或实得学分信息)。
(9)成绩修改:查找后修改成绩,修改后按照综合成绩重新排序,并输出学生信息和对应课程成绩和综合成绩。
(10)成绩追加:增补遗漏的学生以及对应的信息和对应的课程成绩,并计算出综合成绩和实得学分,增补以后重新排序,并输出新增学生信息和对应课程成绩和综合成绩。
附加功能:
(11)删除学生信息:删除不需要的学生对应的记录(包括姓名、学号、课程、成绩等)。
(12)成绩(学分)分段:将学生成绩(学分)分段。
(13)文件存储:把学生信息和对应的课程成绩信息存入到文件中。
(14)文件输出:输出文件中的内容。
(15)文件导入:从文件中导入数据到学籍管理系统中,然后进行管理。

阅读顺序:从上到下
语言:C语言

信息说明

3
111 张三 女 101 138123456
222 李四 男 101 138234567
333 王五 女 101 138345678

111
2
1 语文 
91 92 93 94
2 数学
92 93 94 95
222
2
2 数学
84 85 86 99
3 英语
97 94 84 85
333
2
1 语文
84 95 97 89
3 英语
84 59 87 91
  
追加:
2
444 赵六 男 101 456789
2 
1 语文
84 95 62 84
3 英语
78 89 46 59
555 胡七 女 101 567891
2
2 数学
98 95 95 95 
3 英语
85 92 70 91 

头文件和结构体引入

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<conio.h>

struct Course
{
	char cname[20];	//课程名字 
	int cnum;	//课程编号 
	float scores[3];	//平时成绩、实验成绩、卷面成绩 
	float sum;	//单课程综合成绩 
	float realmark;	//实得学分 
	float mark;	//学分 
}course;
struct Stu
{
	char num[14]; 	//学生的学号
	char name[14];	//学生的姓名
	char sex[10];	//学生的性别 
	char cls[10]; 	//学生所在班级
	char dor[14];	//学生宿舍号
	char phone[20];	//学生电话号码 
	int coursesum;	//学生所修课程总数 
	float realmarksum;	// 总学分值
	float avemark; //平均学分值 
	float sum;	//总 综合成绩
	float ave; //平均综合成绩 
	char rankm;//学生学分分段
	char ranks; //学生成绩分段
	struct Course course[10];
}stu[100];			//存储学生信息的全局结构体数组 
int stu_num = 0;		//存储学生人数
int count;

输入学生信息

void InputInformation()//输入学生信息 
{
	int i,j;; 
	printf("提示:信息之间以空格隔开。敲击回车键完成录入。\n\n");
	printf("请输入您要录入的学生个数:");
	scanf("%d",&stu_num);
	putchar(10);
	
	for(i=0;i<stu_num;i++)
	{
		printf("请输入第%d位学生信息:\n",i+1);
		printf("请输入学生的学号、姓名、性别、宿舍号、电话号码:\n");
		scanf("%s %s %s %s %s",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].dor,&stu[i].phone);
		putchar(10);
	}
	printf("【=*=---------学生信息录入完毕---------=*=】\n");
	system("pause");
}
void InputScores()//输入学生成绩
{
	int i,j;
	char inputnum[14];
	int index;
	int FindIndex_num(char str[]);
	printf("提示:\n1.信息之间以空格隔开。\n2.若该科目没有实验成绩,请输入-1。\n\n");
	
	if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else
	{
		for(i=0;i<stu_num;i++)
		{
			printf("请输入需要录入的学生学号:");
			scanf("%s",&inputnum);
			index=FindIndex_num(inputnum);
			if(index!=-1)
			{
				printf("请输入该生共修课程数目:");
				scanf("%d",&stu[index].coursesum);
				for(j=0;j<stu[index].coursesum;j++)
				{
				printf("请第%d门输入课程编号和课程名字:",j+1);
				scanf("%d %s",&stu[index].course[j].cnum,&stu[index].course[j].cname);
				label:
				printf("请输入学生的平时成绩、实验成绩、卷面成绩、学分:");
				scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);
				for(int k=0;k<4;k++)
				{
					if(stu[index].course[j].scores[k]>100||stu[index].course[j].scores[k]<0)
					{
						printf("--您输入的学生第%d科成绩有误,请重新输入--\n",k+1);
						goto label;
					}
						
					if(stu[index].course[j].mark>100||stu[index].course[j].mark<0) 
					{
						printf("--您输入的学生学分有误,请重新输入--\n");
						goto label;
					}
				}
				}
			}
			else 
			{
				printf("--学生不存在,请重新输入--\n");
				system("pause");
				InputScores();
			}
			printf("\n"); 
			
		} 
		void ScoreLevelCal(int stu_sum) ;
		void MarkLevelCal(int stu_sum) ;
		ScoreLevelCal(stu_num);
		MarkLevelCal(stu_num);
		printf("【=*=---------学生成绩信息录入完毕---------=*=】\n");
		system("pause");
	} 
}

计算模块

计算学生综合成绩

void Calsum(int stu_sum)	//计算学生综合成绩 
{
	int i,j;
	//若本课程有实验
	if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else
	{
		
		for(i=0;i<stu_sum;i++)
		{
			stu[i].sum=0; //学生总分初始化为 0 
			for(j=0;j<stu[i].coursesum;j++)
			{
				
				if(stu[i].course[j].scores[1]==-1)
					stu[i].course[j].sum = stu[i].course[j].scores[0]*0.3+stu[i].course[j].scores[2]*0.7;
				else
					stu[i].course[j].sum = stu[i].course[j].scores[0]*0.15+stu[i].course[j].scores[1]*0.15+stu[i].course[j].scores[2]*0.7;
				stu[i].sum+=stu[i].course[j].sum;
				stu[i].ave=stu[i].sum/(float)stu[i].coursesum; //学生平均成绩 
			}
		}
			
		void ScoreLevelCal(int stu_sum) ;
		void MarkLevelCal(int stu_sum) ;
		ScoreLevelCal(stu_num);
		MarkLevelCal(stu_num);
		printf("【=*=---------学生综合成绩计算完毕---------=*=】\n");
		system("pause");
	}
	
} 

计算学生实得学分

void Calmark(int stu_sum)	//计算学生实得学分
{
	int i,j;
	
	if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else
	{
		for(i=0;i<stu_sum;i++)
		{
			stu[i].realmarksum=0;
			for(j=0;j<stu[i].coursesum;j++)
			{
				if(stu[i].course[j].sum>=90&&stu[i].course[j].sum<100)
					stu[i].course[j].realmark=stu[i].course[j].mark;
				if(stu[i].course[j].sum>=80&&stu[i].course[j].sum<90)
					stu[i].course[j].realmark=stu[i].course[j].mark*0.8;
				if(stu[i].course[j].sum>=70&&stu[i].course[j].sum<80)
					stu[i].course[j].realmark=stu[i].course[j].mark*0.7;
				if(stu[i].course[j].sum>=60&&stu[i].course[j].sum<70)
					stu[i].course[j].realmark=stu[i].course[j].mark*0.6;
				if(stu[i].course[j].sum>=0&&stu[i].course[j].sum<60)
					stu[i].course[j].realmark=0.0;
				stu[i].realmarksum+=stu[i].course[j].realmark;//实得总学分值 
			}
			stu[i].avemark=stu[i].realmarksum/stu[i].coursesum;//实得平均学分 
		}
		printf("【=*=---------学生实得学分计算完毕---------=*=】\n");
		system("pause");
	}
 } 

查找学生信息

根据学号查找

int FindIndex_num(char str[])//根据学号寻找学生信息 
{
	int i,j;
	int index=-1;
	
	for(i=0;i<stu_num;i++)
	{
		if(strcmp(str,stu[i].num)==0) 
			index=i;
	}
	return index;
}

根据姓名查找

int FindIndex_name(char str[])//根据姓名寻找学生信息 
{
	int i,j;
	int index=-1;
	
	for(i=0;i<stu_num;i++)
	{
		if(strcmp(str,stu[i].name)==0) 
			index=i;
	}
	return index;
}
void FindIndex_dor(char str[])//根据宿舍号码寻找学生信息
{
	int i;
	
	printf("\n【=*=------------您所查询的宿舍信息如下------------=*=】\n\n");
	printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");
	
	for(i=0;i<stu_num;i++)
	{
		if(strcmp(str,stu[i].dor)==0)
		{
			printf("%10s %10s %10s %10s %10s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].dor,stu[i].phone);	
		}
	} 
}

判断学生是否存在

int FindIndex_dor0(char str[])//根据宿舍号码判断学生是否存在 
{
	int i;
	int index=-1;
	
	for(i=0;i<stu_num;i++)
	{
		if(strcmp(str,stu[i].dor)==0)
		{
			index=i;	
		}
	} 
	return index;
}

学生情况的输出

学生基本情况输出

void OutputInformation(int stu_sum)//学生基本情况的输出 {	int i;	printf("学生的基本情况输出如下:\n");	printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");	for(i=0;i<stu_num;i++)		printf("%10s %10s %10s %10s %10s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].dor,stu[i].phone); 	printf("【=*=-----------学生基本信息情况输出完毕----------=*=】\n");	system("pause");}

学生成绩情况输出

void OutputScores(int stu_sum)	//学生成绩情况输出 
{
	int i,j;
	//printf("学生的成绩信息输出如下:\n");
	
	for(i=0;i<stu_num;i++)
	{
		printf("学号为%s   姓名为%s 的同学课程信息如下:\n",stu[i].num,stu[i].name);
		for(j=0;j<stu[i].coursesum;j++)
		{
			printf("课程编号:%d\t课程名称:%s\n",stu[i].course[j].cnum,stu[i].course[j].cname);
			printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[i].course[j].scores[0],stu[i].course[j].scores[1],stu[i].course[j].scores[2],stu[i].course[j].realmark,stu[i].course[j].sum);
		}
		printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f\n",stu[i].coursesum,stu[i].realmarksum,stu[i].sum);
		
		putchar(10);
	}
	printf("\n【=*=-----------学生成绩信息输出完毕-----------=*=】\n");
	system("pause");
 } 

输出单个学生信息

void OutputScores_One(int index)//输出一个学生的成绩 
{
	int j;
	printf("学号:%s \t姓名:%s \n",stu[index].num,stu[index].name);
	for(j=0;j<stu[index].coursesum;j++)
	{
		printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);
		printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);
	}
	printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f",stu[index].coursesum,stu[index].realmarksum,stu[index].sum);
	putchar(10);
	
}

学生情况查询

学生基本情况查询

void InformationSearch()//学生基本情况查询
{
	int i,j;
	int choice;
	int index;
	char str[14];
	
	printf("请选择查询方式:\n学号查找请输入1  姓名查找请输入2  查找宿舍信息请输入3:") ;
	scanf("%d",&choice);
	
	if(choice==1)
	{
		printf("请输入学生的学号:");
		scanf("%s",&str);
		index=FindIndex_num(str);
		if(index!=-1) 
		{
			printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");
			printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");
			printf("%10s %10s %10s %10s %10s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone);
			printf("\n【=*=----------学生基本信息输出完毕----------=*=】\n\n");	
			system("pause");
		}
		else 
		{
			printf("\n【=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");
			InformationSearch();
		}
	}
	if(choice==2)
	{
		printf("请输入学生的姓名:");
		scanf("%s",&str);
		index=FindIndex_name(str);
		if(index!=-1) 
		{
			printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");
			printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");
			printf("%10s %10s %10s %10s %10s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone);
			printf("\n【=*=----------学生基本信息输出完毕----------=*=】\n\n");
			system("pause");
		}
		else 
		{
			printf("【\n=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");
			InformationSearch();
		}
		
	}
	if(choice==3)
	{
		printf("请输入宿舍号码:");
		scanf("%s",&str);
		index=FindIndex_dor0(str);
		if(index==-1)	
		{
			printf("【\n=*=----------您所查找的宿舍不存在,请重新输入----------=*=】\n\n");
			InformationSearch();
			
		}
		else 
		{
			FindIndex_dor(str);
			printf("\n【=*=----------学生基本信息输出完毕----------=*=】\n\n");
			system("pause");
		}
		
	 } 
	if(choice!=1&&choice!=2&&choice!=3)
	{
		printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
		system("pause");
		InformationSearch();
	}
 } 

学生成绩情况查询

void ScoresSearch()//学生成绩情况查询
{
	int i,j;
	int choice;
	int index;
	char str[14];
	printf("请选择查询方式:\n学号查找请输入1  姓名查找请输入2 :") ;
	scanf("%d",&choice);
	
	if(choice==1)
	{
		printf("请输入学生的学号:");
		scanf("%s",&str);
		index=FindIndex_num(str);
		if(index!=-1) 
		{
			printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");
			printf("学号为%s    姓名为 %s 的同学课程信息如下:\n",stu[index].num,stu[index].name);
			for(j=0;j<stu[i].coursesum;j++)
			{
				printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);
				printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);
			} 
			printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f",stu[index].coursesum,stu[index].realmarksum,stu[index].sum);
			printf("\n\n【=*=----------学生成绩信息输出完毕----------=*=】\n");
			system("pause");
		}
		else 
		{
			printf("\n\n【=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");
			ScoresSearch();
		}	
	}
	if(choice==2)
	{
		printf("请输入学生的姓名:");
		scanf("%s",&str);
		index=FindIndex_name(str);
		if(index!=-1)
		{
			printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");
			printf("学号为%s    姓名为 %s 的同学课程信息如下:\n",stu[index].num,stu[index].name);
			for(j=0;j<stu[i].coursesum;j++)
			{
				printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);
				printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);
			} 
			printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f",stu[index].coursesum,stu[index].realmarksum,stu[index].sum);
			printf("\n\n【=*=----------学生成绩信息输出完毕----------=*=】\n");
			system("pause");
		}
		else 
		{
			printf("\n\n【=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");
			ScoresSearch();
		}
	}
	if(choice!=1&&choice!=2)
	{
		printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
		system("pause");
		ScoresSearch();
	}
	
}

成绩排序

void SortSum_up(int stu_sum) //综合成绩升序排序 {	int i,j,k;	struct Stu temp;	struct Course t;		for (i=0;i<stu_num;i++)			for (j=i+1;j<stu_num;j++)				if (stu[i].sum > stu[j].sum)				{					temp=stu[i];	      			stu[i]=stu[j];	      			stu[j]=temp;//排序总综合成绩				}		for (i=0;i<stu_num;i++)			for (j=0;j<stu[i].coursesum;j++)				for (k=j+1;k<stu[i].coursesum;k++)				if (stu[i].course[j].sum > stu[i].course[k].sum)				{					t=stu[i].course[j];	      			stu[i].course[j]=stu[i].course[k];	      			stu[i].course[k]=t;//排序课程综合成绩				}}void SortSum_down(int stu_sum) //综合成绩降序排序 {	int i,j,k;	struct Stu temp;	struct Course t;		for (i=0;i<stu_num;i++)			for (j=i+1;j<stu_num;j++)				if (stu[i].sum < stu[j].sum)				{					temp=stu[i];	      			stu[i]=stu[j];	      			stu[j]=temp;//排序总综合成绩				}		for (i=0;i<stu_num;i++)			for (j=0;j<stu[i].coursesum;j++)				for (k=j+1;k<stu[i].coursesum;k++)				if (stu[i].course[j].sum < stu[i].course[k].sum)				{					t=stu[i].course[j];	      			stu[i].course[j]=stu[i].course[k];	      			stu[i].course[k]=t;				}}void SortRealMark_up() //实得总学分升序排序{	int i,j,k;	struct Stu temp;	struct Course t;		for (i=0;i<stu_num;i++)			for (j=i+1;j<stu_num;j++)				if (stu[i].realmarksum < stu[j].realmarksum)				{					temp=stu[i];	      			stu[i]=stu[j];	      			stu[j]=temp;//排序总综合成绩				}		for (i=0;i<stu_num;i++)			for (j=0;j<stu[i].coursesum;j++)				for (k=j+1;k<stu[i].coursesum;k++)				if (stu[i].course[j].realmark < stu[i].course[k].realmark)				{					t=stu[i].course[j];	      			stu[i].course[j]=stu[i].course[k];	      			stu[i].course[k]=t;//排序课程综合成绩				}}void SortRealMark_down() //实得总学分降序排序{	int i,j,k;	struct Stu temp;	struct Course t;		for (i=0;i<stu_num;i++)			for (j=i+1;j<stu_num;j++)				if (stu[i].realmarksum > stu[j].realmarksum)				{					temp=stu[i];	      			stu[i]=stu[j];	      			stu[j]=temp;//排序总综合成绩				}		for (i=0;i<stu_num;i++)			for (j=0;j<stu[i].coursesum;j++)				for (k=j+1;k<stu[i].coursesum;k++)				if (stu[i].course[j].realmark > stu[i].course[k].realmark)				{					t=stu[i].course[j];	      			stu[i].course[j]=stu[i].course[k];	      			stu[i].course[k]=t;//排序课程综合成绩				}}void Sort()//成绩排序 {	int i,j,k;	int choice;		if(stu_num==0)	{		printf("【=*=---------请先录入学生基本信息---------=*=】\n");		system("pause");		return ; 	}	else 	{		printf("请选择排序方式:\n按综合成绩升序请输入1  按综合成绩升序请输入2 按实得总学分值升序请输入3  按实得总学分值降序请输入4:") ;		scanf("%d",&choice);				if(choice==1||choice==2||choice==3||choice==4)		{			if(choice==1)			SortSum_up(stu_num); 					if(choice==2)				SortSum_down(stu_num); 					if(choice==3)				SortRealMark_up();							if(choice==4)				SortRealMark_down();							printf("\n【=*=----------学生成绩排序完毕  学生成绩表如下----------=*=】\n\n");			OutputScores(stu_num);		}		else 		{			printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");			Sort();		}	} } 

成绩修改

void Edit()//成绩修改
{
	int i,j;
	int choice;
	int index;
	char str[14];
	char strc[14];
	
	if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else
	{
		printf("请选择修改方式:\n学号修改请输入1  姓名修改请输入2 :") ;
		scanf("%d",&choice);
		if(choice==1||choice==2)
		{	
			if(choice==1) //学号修改 
			{
				printf("请输入学生的学号:");
				scanf("%s",&str);
				index=FindIndex_num(str);
				if(index!=-1)
				{
					printf("\n您希望修改的学生信息如下:\n");
					OutputScores_One(index);
					printf("\n请选择修改方式: 修改全部成绩请输入3  修改一科成绩请输入4:  ");
					scanf("%d",&choice);
					if(choice==3||choice==4)
					{
						if(choice==3) //学号修改-修改全部成绩 
						{
							printf("\n请输入该生共修课程数目:");
							scanf("%d",&stu[index].coursesum);
							for(j=0;j<stu[index].coursesum;j++)
							{
								printf("\n请输入课程编号和课程名字:");
								scanf("%d %s",&stu[index].course[j].cnum,&stu[index].course[j].cname);
								printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");
								scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);
								Calsum(stu_num);
								Calmark(stu_num);
							}
						}
						if(choice==4) //学号修改 修改单科成绩 
						{
							int num; 
							printf("请输入课程名称: ");
							scanf("%s",&strc);
							
							for(j=0;j<stu[index].coursesum;j++)
							{	
								if(strcmp(str,stu[index].course[j].cname)==0)
								{
									printf("您所寻找的学生课程情况如下:\n");
									printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);
									printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);
									printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");
									scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);
									Calsum(stu_num);
									Calmark(stu_num);
								} 
								//break;
							}	
					 	} 
					}
					else 
					{
						printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
						system("pause");
						Edit();
					}
				}
				
				 printf("【=*=----------学生信息修改完毕----------=*=】\n");
				 system("pause");
			}
			if(choice==2) //姓名修改 
			{
				printf("请输入学生的姓名:");
				scanf("%s",&str);
				index=FindIndex_name(str);
				if(index!=-1)
				{  
					printf("\n您希望修改的学生信息如下:\n");
					OutputScores_One(index);
					printf("\n请选择修改方式:修改全部成绩请输入5  修改一科成绩请输入6: ");
					scanf("%d",&choice);
					if(choice==5||choice==6)
					{
						if(choice==5) //姓名修改-修改全部成绩 
						{
							printf("请输入该生共修课程数目:");
							scanf("%d",&stu[index].coursesum);
							for(j=0;j<stu[index].coursesum;j++)
							{
								printf("\n请输入课程编号和课程名字:");
								scanf("%d %s",&stu[index].course[j].cnum,&stu[index].course[j].cname);
								printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");
								scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);
								Calsum(stu_num);
								Calmark(stu_num);
							} 
						}
						if(choice==6) //姓名修改-修改单科成绩 
						{
							int num; 
							printf("请输入课程名称: ");
							scanf("%s",&strc);
							
							for(j=0;j<stu[index].coursesum;j++)
							{
								if(strcmp(strc,stu[index].course[j].cname)==0)
								{
									printf("您所寻找的学生课程情况如下:\n");
									printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);
									printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);
									printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");
									scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);
									Calsum(stu_num);
									Calmark(stu_num); 
								} 
								//break;
							}
					 	}
					} 
					else 
					{
						printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
						system("pause");
						Edit();
					}
				}
			}
			printf("\n\n【=*=----------学生信息修改完毕----------=*=】\n");
			printf("\n\n【=*=----------修改后该生成绩如下----------=*=】\n\n");
			OutputScores_One(index);
			//else printf("您输入选项有误,请重新输入。\n"); //返回菜单
			printf("\n\n【=*=----------修改后所有学生综合成绩降序排列如下----------=*=】\n");  
			SortSum_down(stu_num);//成绩修改后按照综合成绩降序排序 
			OutputScores(stu_num);
		}
		else
		{
			printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
			Edit();
		}
	}
	
 } 

成绩追加

void Add() // 成绩追加{	int ad;	int i,j;		if(stu_num==0)	{		printf("【=*=---------请先录入学生基本信息---------=*=】\n");		system("pause");		return ; 	}	else	{		printf("请输入您要追加的学生人数: ");		scanf("%d",&ad);		for(i=stu_num;i<stu_num+ad;i++)		{			printf("\n请输入第%d位学生信息:\n",i+1);			printf("请输入学生的学号、姓名、性别、宿舍号、电话号码:");			scanf("%s %s %s %s %s",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].dor,&stu[i].phone);			printf("第%d位学生信息录入完毕,请录入学生成绩信息:\n",i+1);						printf("请输入该生共修课程数目:");			scanf("%d",&stu[i].coursesum);			for(j=0;j<stu[i].coursesum;j++)			{			printf("请输入课程编号和课程名字:");			scanf("%d %s",&stu[i].course[j].cnum,&stu[i].course[j].cname);			printf("请输入学生的平时成绩、实验成绩、卷面成绩、学分:");			scanf("%f %f %f %f",&stu[i].course[j].scores[0],&stu[i].course[j].scores[1],&stu[i].course[j].scores[2],&stu[i].course[j].mark);						if(stu[i].course[j].scores[1]==-1)					stu[i].course[j].sum = stu[i].course[j].scores[0]*0.3+stu[i].course[j].scores[2]*0.7;			else					stu[i].course[j].sum = stu[i].course[j].scores[0]*0.15+stu[i].course[j].scores[1]*0.15+stu[i].course[j].scores[2]*0.7;				stu[i].sum+=stu[i].course[j].sum;				stu[i].ave=stu[i].sum/(float)stu[i].coursesum; //学生平均成绩 			}			void CalmarkOne(int i);			CalmarkOne(i); 		}		printf("\n【=*=---------补录学生信息录入完毕---------=*=】\n\n");				//stu_num=stu_num+ad;		void MarkLevelCal(int stu_sum);		void ScoreLevelCal(int stu_sum);		ScoreLevelCal(stu_num+ad);		MarkLevelCal(stu_num+ad);				printf("【=*=-----------新增学生信息情况如下-----------=*=】\n\n");		for(i=stu_num;i<stu_num+ad;i++)		{			printf("学号:%s   姓名:%s\n",stu[i].num,stu[i].name);			for(j=0;j<stu[i].coursesum;j++)			{				printf("课程编号:%d\t课程名称:%s\n",stu[i].course[j].cnum,stu[i].course[j].cname);				printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[i].course[j].scores[0],stu[i].course[j].scores[1],stu[i].course[j].scores[2],stu[i].course[j].realmark,stu[i].course[j].sum);			}			printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f\n",stu[i].coursesum,stu[i].realmarksum,stu[i].sum);			putchar(10);		}		stu_num+=ad;				SortSum_down(stu_num);//成绩修改后按照综合成绩降序排序 		printf("\n\n【=*=----------增添信息后,所有学生综合成绩降序排序如下----------=*=】\n\n");		OutputScores(stu_num);	}	 } 

信息删除

void Delete() //删除学生信息{	int choice;	char str[20];	int index;	int i;	char ch;		if(stu_num==0)	{		printf("【=*=---------请先录入学生基本信息---------=*=】\n");		system("pause");		return ; 	}	else	{		printf("请选择删除方式: 通过学号删除请输入1,通过姓名删除请选择2:");		scanf("%d",&choice);		if(choice==1||choice==2)		{			if(choice==1)			{				printf("请输入学生学号:");				scanf("%s",&str);				index=FindIndex_num(str);				if(index!=-1)				{					printf("学生信息如下:\n");					printf("%8s %8s %8s %8s %8s\n","学号","姓名","性别","宿舍号","电话号码");					printf("%8s %8s %8s %8s %8s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone); 					getchar();					printf("输入Y或y删除学生信息,如果信息输入有误请输入N或n: ");					ch=getchar();					if(ch=='Y'||ch=='y')					{						for(i=index;i<stu_num;i++)						{							stu[i]=stu[i+1];						}						printf("\n学生信息删除成功!\n"); 						stu_num-=1;						SortSum_down(stu_num);//删除成绩后成绩重新排序 						printf("\n【=*=--------删除后所有学生按综合成绩降序排列如下----------=*=】\n\n");						OutputScores(stu_num);//查看删除后的所有学生成绩 						putchar(10); 					}					else if(ch=='N'||ch=='n')						Delete(); 					else 					{						printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");						Delete();					}				}				else				{					printf("\n【=*=------学生不存在,请重新输入-------=*=】\n\n");					Delete();				}			}			if(choice==2)			{				printf("请输入学生姓名:");				scanf("%s",&str);				index=FindIndex_name(str);				if(index!=-1)				{					printf("学生信息如下:\n");					printf("%8s %8s %8s %8s %8s\n","学号","姓名","性别","宿舍号","电话号码");					printf("%8s %8s %8s %8s %8s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone); 					getchar();					printf("输入Y或y删除学生信息,如果信息输入有误请输入N或n: ");					ch=getchar();					if(ch=='Y'||ch=='y')					{						for(i=index;i<stu_num;i++)						{							stu[i]=stu[i+1];						}						printf("\n学生信息删除成功!\n"); 						stu_num-=1;						SortSum_down(stu_num);//删除成绩后成绩重新排序 						printf("\n【=*=--------删除后所有学生按综合成绩降序排列如下----------=*=】\n\n");						OutputScores(stu_num);//查看删除后的所有学生成绩 						putchar(10);					}					else if(ch=='N'||ch=='n')						Delete(); 					else 					{						printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");						Delete();					}				 } 				else				{					printf("\n【=*=------学生不存在,请重新输入------=*=】\n\n");					Delete();				}			}					}		else 		{			printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");			system("pause");			Delete();		}		}	 } 

学生分段

void ScoreLevelCal(int stu_sum) //计算成绩分段 
{
	int i,j;
	 for(i=0;i<stu_sum;i++)
	 {
	 	if(stu[i].ave>=90.0&&stu[i].ave<=100.0)		stu[i].ranks='A';
	 	else if(stu[i].ave>=80.0&&stu[i].ave<90.0)		stu[i].ranks='B';
	 	else if(stu[i].ave>=70.0&&stu[i].ave<80.0)		stu[i].ranks='C';
	 	else if(stu[i].ave>=60.0&&stu[i].ave<70.0)		stu[i].ranks='D';
	 	else stu[i].ranks='E';
	 }
	 
}
void MarkLevelCal(int stu_sum) //计算学分分段 
{
	int i,j;
	 for(i=0;i<stu_sum;i++)
	 {
	 	if(stu[i].avemark>=90.0&&stu[i].avemark<=100.0)		stu[i].rankm='A';
	 	else if(stu[i].avemark>=80.0&&stu[i].avemark<90.0)		stu[i].rankm='B';
	 	else if(stu[i].avemark>=70.0&&stu[i].avemark<80.0)		stu[i].rankm='C';
	 	else if(stu[i].avemark>=60.0&&stu[i].avemark<70.0)		stu[i].rankm='D';
	 	else stu[i].rankm='E';
	 }
	 
}
void MarkLevel(int stu_sum)//学分分段
{
	MarkLevelCal(stu_num);
	int i,j;
	int flag=0;
	
	printf("%10s%15s%15s\n\n","学号","姓名","平均学分");
	printf("--------------*****A*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].rankm=='A')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****B*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].rankm=='B')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****C*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].rankm=='C')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****D*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].rankm=='D')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****E*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].rankm=='E')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	
	printf("\n【=*=----------学生成绩信息分段完毕----------=*=】\n");
	system("pause");
 } 
void ScoreLevel(int stu_sum)//分数分段
{ 
	ScoreLevelCal(stu_num);
	int i,j;
	int flag;
	char ch;
	printf("%10s%15s%15s\n\n","学号","姓名","平均综合分数");
	
	printf("--------------*****A*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].ranks=='A')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****B*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].ranks=='B')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****C*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].ranks=='C')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****D*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].ranks=='D')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****E*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].ranks=='E')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");

	printf("\n【=*=----------学生成绩信息分段完毕----------=*=】\n");
	system("pause");
 } 
void Level() //成绩分段 
{
	int choice;
	
	ScoreLevelCal(stu_num);
	MarkLevelCal(stu_num);
	 if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else
	{
		printf("请选择分段方式:输入1按学分分段,输入2按综合成绩分段:");
		scanf("%d",&choice);
		if(choice==1)	{MarkLevel(stu_num);} 
		else if(choice==2)	{ScoreLevel(stu_num);} 
		
		else
		{
			printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
			Level();
		}
	}

 } 

成绩分段

信息分段

计算综合成绩

void CalsumOne(int i)	//计算一个学生综合成绩 
{
	int j;
	//若本课程有实验
		for(j=0;j<stu[i].coursesum;j++)
		{
			if(stu[i].course[j].scores[1]==-1)
				stu[i].course[j].sum = stu[i].course[j].scores[0]*0.3+stu[i].course[j].scores[2]*0.7;
			else
				stu[i].course[j].sum = stu[i].course[j].scores[0]*0.15+stu[i].course[j].scores[1]*0.15+stu[i].course[j].scores[2]*0.7;
			stu[i].sum+=stu[i].course[j].sum;
			stu[i].ave=stu[i].sum/(float)stu[i].coursesum; //学生平均成绩 
		}
	system("pause");
} 
void CalmarkOne(int i)
{
	int j;
	for(j=0;j<stu[i].coursesum;j++)
		{
			if(stu[i].course[j].sum>=90&&stu[i].course[j].sum<100)
				stu[i].course[j].realmark=stu[i].course[j].mark;
			if(stu[i].course[j].sum>=80&&stu[i].course[j].sum<90)
				stu[i].course[j].realmark=stu[i].course[j].mark*0.8;
			if(stu[i].course[j].sum>=70&&stu[i].course[j].sum<80)
				stu[i].course[j].realmark=stu[i].course[j].mark*0.7;
			if(stu[i].course[j].sum>=60&&stu[i].course[j].sum<70)
				stu[i].course[j].realmark=stu[i].course[j].mark*0.6;
			if(stu[i].course[j].sum>=0&&stu[i].course[j].sum<60)
				stu[i].course[j].realmark=0.0;
			stu[i].realmarksum+=stu[i].course[j].realmark;//实得总学分值 
		}
		stu[i].avemark=stu[i].realmarksum/stu[i].coursesum;//实得平均学分
}

文件输出

void Read() //文件输出 
{
	FILE *fp;
	int i,j;
	char filename[30];
	printf("请输入文件名称:");
	scanf("%s",&filename); 
	
	if((fp=fopen(filename,"rb"))==NULL)
	{ //fopen 指定读写方式为二进制写方式 
	//未指定文件路径,从源文件所在目录创建 
		printf("文件打开失败\n");
		exit(0);
	}
	fp=fopen(filename,"rb");
	
	for(i=0; fread(&stu[i], sizeof(struct Stu), 1, fp)!=0; i++)
	{
		stu_num++;
	}
	
	printf("\n【=*=-----------文件中信息如下----------=*=】\n\n");
	for(i=0;i<stu_num;i++)
	{
		fread( &stu[i] , sizeof(Stu) ,1, fp );
		printf("学号:%s 姓名:%s 性别:%s 宿舍号:%s 电话号码:%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].dor,stu[i].phone); 
		for(j=0;j<stu[i].coursesum;j++) 
		{
			printf("课程编号:%d\t课程名称:%s\n",stu[i].course[j].cnum,stu[i].course[j].cname);
			printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[i].course[j].scores[0],stu[i].course[j].scores[1],stu[i].course[j].scores[2],stu[i].course[j].realmark,stu[i].course[j].sum);
		}
		printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f\n\n",stu[i].coursesum,stu[i].realmarksum,stu[i].sum);
	}

	fclose(fp);
	system("pause");
}

文件储存

void Storage()//文件储存 
{
	char filename[30];
	printf("请输入文件名称:");
	scanf("%s",&filename); 
	
	FILE *fp;
	int  i;
	if((fp=fopen(filename,"w"))==NULL)
	{
		printf("文件打开错误!\n");
		return;
	}
	for(i=0; i<stu_num; i++)
	{
		fwrite(&stu[i], sizeof(struct Stu), 1, fp);
	}
	fclose(fp);
	printf("\n【=*=----------文件储存成功----------=*=】\n") ;
	system("pause");
}

文件导入

void Into()//文件导入 
{
	char filename[30];
	printf("请输入文件名称:");
	scanf("%s",&filename); 
	
	int i;
	FILE *fp;
	if((fp=fopen(filename,"r"))==NULL)
	{
		printf("文件不能打开!\n");
		return;
	}
	for(i=0; fread(&stu[i], sizeof(struct Stu), 1, fp)!=0; i++)
	{
		stu_num++;
	}
	fclose(fp);
	printf("\n【=*=----------文件导入成功----------=*=】\n") ;
	system("pause");
}

主界面

void Page()
{
		int choice;
	   time_t rawtime;
       struct tm * timeinfo;
       time ( &rawtime );
       timeinfo = localtime ( &rawtime );
       system("cls");           /*运行前清屏*/           
       printf("\n");
       printf("\t===============学生*=*=*=*=*=*=*信息*=*=*=*=*=*=*管理=*=*=*=*=*=*=*系统===============\n\n");
	   printf ( "\t\t\t      当前系统时间:%4d年%02d月%02d日 %02d:%02d:%02d\n",1900+timeinfo->tm_year, 
		   1+timeinfo->tm_mon,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
       printf("\t*==*==*==*==*==*------------------------------------------------------*==*==*==*==*==*\n");
       printf("\n\t |***| (1)学生信息录入\t\t|***| (2)学生成绩录入\t\t|***| (3)综合成绩计算\n\n");
	   printf("\t |===| (4)实得学分计算\t\t|===| (5)基本信息查询\t\t|===| (6)成绩信息查询\n\n");
	   printf("\t |=*=| (7)学生成绩排序\t\t|=*=| (8)学生成绩修改\t\t|=*=| (9)学生成绩追加\n\n");
	   printf("\t |===| (10)删除学生信息\t\t|===| (11)学生成绩分段   \t|===| (12)相关文件储存\n\n");
	   printf("\t |=*=| (13)相关文件输出\t\t|=*=| (14)相关文件导入   \t|=*=| (0)退出系统\n\n");
	   putchar(10);
	   printf("\t*==*==*==*==*==*------------------------------------------------------*==*==*==*==*==*\n");
       printf("\t请选择操作序号(0-14):"); 
       scanf("%d",&choice);
       
       switch(choice)
	{
		case 1:system("cls");InputInformation();Page(); 
		case 2:system("cls");InputScores();Page();
		case 3:system("cls");Calsum(stu_num);Page();
		case 4:system("cls");Calmark(stu_num);Page();
		case 5:system("cls");InformationSearch();Page();
		case 6:system("cls");ScoresSearch();Page();
		case 7:system("cls");Sort();Page();
		case 8:system("cls");Edit();Page();
		case 9:system("cls");Add(); Page();
		case 10:system("cls");Delete(); Page();
		case 11:system("cls");Level(); Page();
		case 12:system("cls");Storage();Page;
		case 13:system("cls");Read();Page();
		case 14:system("cls");Into();Page();
		case 0: printf("\n\t【=*=----------您已成功退出系统----------=*=】\n");exit(0);
		default: printf("\t--您所输入的操作有误,请重新输入--\n\n");system("pause"); Page();
	}
}

主函数

int main()
{
	Page();
	
	return 0;
} 

完整代码实现

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<conio.h>

struct Course
{
	char cname[20];	//课程名字 
	int cnum;	//课程编号 
	float scores[3];	//平时成绩、实验成绩、卷面成绩 
	float sum;	//单课程综合成绩 
	float realmark;	//实得学分 
	float mark;	//学分 
}course;
struct Stu
{
	char num[14]; 	//学生的学号
	char name[14];	//学生的姓名
	char sex[10];	//学生的性别 
	char cls[10]; 	//学生所在班级
	char dor[14];	//学生宿舍号
	char phone[20];	//学生电话号码 
	int coursesum;	//学生所修课程总数 
	float realmarksum;	// 总学分值
	float avemark; //平均学分值 
	float sum;	//总 综合成绩
	float ave; //平均综合成绩 
	char rankm;//学生学分分段
	char ranks; //学生成绩分段
	struct Course course[10];
}stu[100];			//存储学生信息的全局结构体数组 
int stu_num = 0;		//存储学生人数
int count;

void InputInformation()//输入学生信息 
{
	int i,j;; 
	printf("提示:信息之间以空格隔开。敲击回车键完成录入。\n\n");
	printf("请输入您要录入的学生个数:");
	scanf("%d",&stu_num);
	putchar(10);
	
	for(i=0;i<stu_num;i++)
	{
		printf("请输入第%d位学生信息:\n",i+1);
		printf("请输入学生的学号、姓名、性别、宿舍号、电话号码:\n");
		scanf("%s %s %s %s %s",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].dor,&stu[i].phone);
		putchar(10);
	}
	printf("【=*=---------学生信息录入完毕---------=*=】\n");
	system("pause");
}
void InputScores()//输入学生成绩
{
	int i,j;
	char inputnum[14];
	int index;
	int FindIndex_num(char str[]);
	printf("提示:\n1.信息之间以空格隔开。\n2.若该科目没有实验成绩,请输入-1。\n\n");
	
	if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else
	{
		for(i=0;i<stu_num;i++)
		{
			printf("请输入需要录入的学生学号:");
			scanf("%s",&inputnum);
			index=FindIndex_num(inputnum);
			if(index!=-1)
			{
				printf("请输入该生共修课程数目:");
				scanf("%d",&stu[index].coursesum);
				for(j=0;j<stu[index].coursesum;j++)
				{
				printf("请第%d门输入课程编号和课程名字:",j+1);
				scanf("%d %s",&stu[index].course[j].cnum,&stu[index].course[j].cname);
				label:
				printf("请输入学生的平时成绩、实验成绩、卷面成绩、学分:");
				scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);
				for(int k=0;k<4;k++)
				{
					if(stu[index].course[j].scores[k]>100||stu[index].course[j].scores[k]<0)
					{
						printf("--您输入的学生第%d科成绩有误,请重新输入--\n",k+1);
						goto label;
					}
						
					if(stu[index].course[j].mark>100||stu[index].course[j].mark<0) 
					{
						printf("--您输入的学生学分有误,请重新输入--\n");
						goto label;
					}
				}
				}
			}
			else 
			{
				printf("--学生不存在,请重新输入--\n");
				system("pause");
				InputScores();
			}
			printf("\n"); 
			
		} 
		void ScoreLevelCal(int stu_sum) ;
		void MarkLevelCal(int stu_sum) ;
		ScoreLevelCal(stu_num);
		MarkLevelCal(stu_num);
		printf("【=*=---------学生成绩信息录入完毕---------=*=】\n");
		system("pause");
	} 
	
}
void Calsum(int stu_sum)	//计算学生综合成绩 
{
	int i,j;
	//若本课程有实验
	if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else
	{
		
		for(i=0;i<stu_sum;i++)
		{
			stu[i].sum=0; //学生总分初始化为 0 
			for(j=0;j<stu[i].coursesum;j++)
			{
				
				if(stu[i].course[j].scores[1]==-1)
					stu[i].course[j].sum = stu[i].course[j].scores[0]*0.3+stu[i].course[j].scores[2]*0.7;
				else
					stu[i].course[j].sum = stu[i].course[j].scores[0]*0.15+stu[i].course[j].scores[1]*0.15+stu[i].course[j].scores[2]*0.7;
				stu[i].sum+=stu[i].course[j].sum;
				stu[i].ave=stu[i].sum/(float)stu[i].coursesum; //学生平均成绩 
			}
		}
			
		void ScoreLevelCal(int stu_sum) ;
		void MarkLevelCal(int stu_sum) ;
		ScoreLevelCal(stu_num);
		MarkLevelCal(stu_num);
		printf("【=*=---------学生综合成绩计算完毕---------=*=】\n");
		system("pause");
	}
	
} 
void Calmark(int stu_sum)	//计算学生实得学分
{
	int i,j;
	
	if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else
	{
		for(i=0;i<stu_sum;i++)
		{
			stu[i].realmarksum=0;
			for(j=0;j<stu[i].coursesum;j++)
			{
				if(stu[i].course[j].sum>=90&&stu[i].course[j].sum<100)
					stu[i].course[j].realmark=stu[i].course[j].mark;
				if(stu[i].course[j].sum>=80&&stu[i].course[j].sum<90)
					stu[i].course[j].realmark=stu[i].course[j].mark*0.8;
				if(stu[i].course[j].sum>=70&&stu[i].course[j].sum<80)
					stu[i].course[j].realmark=stu[i].course[j].mark*0.7;
				if(stu[i].course[j].sum>=60&&stu[i].course[j].sum<70)
					stu[i].course[j].realmark=stu[i].course[j].mark*0.6;
				if(stu[i].course[j].sum>=0&&stu[i].course[j].sum<60)
					stu[i].course[j].realmark=0.0;
				stu[i].realmarksum+=stu[i].course[j].realmark;//实得总学分值 
			}
			stu[i].avemark=stu[i].realmarksum/stu[i].coursesum;//实得平均学分 
		}
		printf("【=*=---------学生实得学分计算完毕---------=*=】\n");
		system("pause");
	}
	 
 } 
int FindIndex_num(char str[])//根据学号寻找学生信息 
{
	int i,j;
	int index=-1;
	
	for(i=0;i<stu_num;i++)
	{
		if(strcmp(str,stu[i].num)==0) 
			index=i;
	}
	return index;
}
int FindIndex_name(char str[])//根据姓名寻找学生信息 
{
	int i,j;
	int index=-1;
	
	for(i=0;i<stu_num;i++)
	{
		if(strcmp(str,stu[i].name)==0) 
			index=i;
	}
	return index;
}
void FindIndex_dor(char str[])//根据宿舍号码寻找学生信息
{
	int i;
	
	printf("\n【=*=------------您所查询的宿舍信息如下------------=*=】\n\n");
	printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");
	
	for(i=0;i<stu_num;i++)
	{
		if(strcmp(str,stu[i].dor)==0)
		{
			printf("%10s %10s %10s %10s %10s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].dor,stu[i].phone);	
		}
	} 
}
int FindIndex_dor0(char str[])//根据宿舍号码判断学生是否存在 
{
	int i;
	int index=-1;
	
	for(i=0;i<stu_num;i++)
	{
		if(strcmp(str,stu[i].dor)==0)
		{
			index=i;	
		}
	} 
	return index;
}
void OutputInformation(int stu_sum)//学生基本情况的输出 
{
	int i;
	printf("学生的基本情况输出如下:\n");
	printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");
	for(i=0;i<stu_num;i++)
		printf("%10s %10s %10s %10s %10s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].dor,stu[i].phone); 
	printf("【=*=-----------学生基本信息情况输出完毕----------=*=】\n");
	system("pause");
}
void OutputScores(int stu_sum)	//学生成绩情况输出 
{
	int i,j;
	//printf("学生的成绩信息输出如下:\n");
	
	for(i=0;i<stu_num;i++)
	{
		printf("学号为%s   姓名为%s 的同学课程信息如下:\n",stu[i].num,stu[i].name);
		for(j=0;j<stu[i].coursesum;j++)
		{
			printf("课程编号:%d\t课程名称:%s\n",stu[i].course[j].cnum,stu[i].course[j].cname);
			printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[i].course[j].scores[0],stu[i].course[j].scores[1],stu[i].course[j].scores[2],stu[i].course[j].realmark,stu[i].course[j].sum);
		}
		printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f\n",stu[i].coursesum,stu[i].realmarksum,stu[i].sum);
		
		putchar(10);
	}
	printf("\n【=*=-----------学生成绩信息输出完毕-----------=*=】\n");
	system("pause");
 } 
void OutputScores_One(int index)//输出一个学生的成绩 
{
	int j;
	printf("学号:%s \t姓名:%s \n",stu[index].num,stu[index].name);
	for(j=0;j<stu[index].coursesum;j++)
	{
		printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);
		printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);
	}
	printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f",stu[index].coursesum,stu[index].realmarksum,stu[index].sum);
	putchar(10);
	
}
void InformationSearch()//学生基本情况查询
{
	int i,j;
	int choice;
	int index;
	char str[14];
	
	printf("请选择查询方式:\n学号查找请输入1  姓名查找请输入2  查找宿舍信息请输入3:") ;
	scanf("%d",&choice);
	
	if(choice==1)
	{
		printf("请输入学生的学号:");
		scanf("%s",&str);
		index=FindIndex_num(str);
		if(index!=-1) 
		{
			printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");
			printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");
			printf("%10s %10s %10s %10s %10s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone);
			printf("\n【=*=----------学生基本信息输出完毕----------=*=】\n\n");	
			system("pause");
		}
		else 
		{
			printf("\n【=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");
			InformationSearch();
		}
	}
	if(choice==2)
	{
		printf("请输入学生的姓名:");
		scanf("%s",&str);
		index=FindIndex_name(str);
		if(index!=-1) 
		{
			printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");
			printf("%10s %10s %10s %10s %10s\n","学号","姓名","性别","宿舍号","电话号码");
			printf("%10s %10s %10s %10s %10s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone);
			printf("\n【=*=----------学生基本信息输出完毕----------=*=】\n\n");
			system("pause");
		}
		else 
		{
			printf("【\n=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");
			InformationSearch();
		}
		
	}
	if(choice==3)
	{
		printf("请输入宿舍号码:");
		scanf("%s",&str);
		index=FindIndex_dor0(str);
		if(index==-1)	
		{
			printf("【\n=*=----------您所查找的宿舍不存在,请重新输入----------=*=】\n\n");
			InformationSearch();
			
		}
		else 
		{
			FindIndex_dor(str);
			printf("\n【=*=----------学生基本信息输出完毕----------=*=】\n\n");
			system("pause");
		}
		
	 } 
	if(choice!=1&&choice!=2&&choice!=3)
	{
		printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
		system("pause");
		InformationSearch();
	}
 } 
void ScoresSearch()//学生成绩情况查询
{
	int i,j;
	int choice;
	int index;
	char str[14];
	printf("请选择查询方式:\n学号查找请输入1  姓名查找请输入2 :") ;
	scanf("%d",&choice);
	
	if(choice==1)
	{
		printf("请输入学生的学号:");
		scanf("%s",&str);
		index=FindIndex_num(str);
		if(index!=-1) 
		{
			printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");
			printf("学号为%s    姓名为 %s 的同学课程信息如下:\n",stu[index].num,stu[index].name);
			for(j=0;j<stu[i].coursesum;j++)
			{
				printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);
				printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);
			} 
			printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f",stu[index].coursesum,stu[index].realmarksum,stu[index].sum);
			printf("\n\n【=*=----------学生成绩信息输出完毕----------=*=】\n");
			system("pause");
		}
		else 
		{
			printf("\n\n【=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");
			ScoresSearch();
		}	
	}
	if(choice==2)
	{
		printf("请输入学生的姓名:");
		scanf("%s",&str);
		index=FindIndex_name(str);
		if(index!=-1)
		{
			printf("\n【=*=----------您所寻找学生信息如下----------=*=】\n\n");
			printf("学号为%s    姓名为 %s 的同学课程信息如下:\n",stu[index].num,stu[index].name);
			for(j=0;j<stu[i].coursesum;j++)
			{
				printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);
				printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);
			} 
			printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f",stu[index].coursesum,stu[index].realmarksum,stu[index].sum);
			printf("\n\n【=*=----------学生成绩信息输出完毕----------=*=】\n");
			system("pause");
		}
		else 
		{
			printf("\n\n【=*=----------您所查找的学生不存在,请重新输入----------=*=】\n\n");
			ScoresSearch();
		}
	}
	if(choice!=1&&choice!=2)
	{
		printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
		system("pause");
		ScoresSearch();
	}
	
}
void SortSum_up(int stu_sum) //综合成绩升序排序 
{
	int i,j,k;
	struct Stu temp;
	struct Course t;
	
	for (i=0;i<stu_num;i++)
			for (j=i+1;j<stu_num;j++)
				if (stu[i].sum > stu[j].sum)
				{
					temp=stu[i];
	      			stu[i]=stu[j];
	      			stu[j]=temp;//排序总综合成绩
				}
		for (i=0;i<stu_num;i++)
			for (j=0;j<stu[i].coursesum;j++)
				for (k=j+1;k<stu[i].coursesum;k++)
				if (stu[i].course[j].sum > stu[i].course[k].sum)
				{
					t=stu[i].course[j];
	      			stu[i].course[j]=stu[i].course[k];
	      			stu[i].course[k]=t;//排序课程综合成绩
				}
}
void SortSum_down(int stu_sum) //综合成绩降序排序 
{
	int i,j,k;
	struct Stu temp;
	struct Course t;
	
	for (i=0;i<stu_num;i++)
			for (j=i+1;j<stu_num;j++)
				if (stu[i].sum < stu[j].sum)
				{
					temp=stu[i];
	      			stu[i]=stu[j];
	      			stu[j]=temp;//排序总综合成绩
				}
		for (i=0;i<stu_num;i++)
			for (j=0;j<stu[i].coursesum;j++)
				for (k=j+1;k<stu[i].coursesum;k++)
				if (stu[i].course[j].sum < stu[i].course[k].sum)
				{
					t=stu[i].course[j];
	      			stu[i].course[j]=stu[i].course[k];
	      			stu[i].course[k]=t;
				}
}
void SortRealMark_up() //实得总学分升序排序
{
	int i,j,k;
	struct Stu temp;
	struct Course t;
	
	for (i=0;i<stu_num;i++)
			for (j=i+1;j<stu_num;j++)
				if (stu[i].realmarksum < stu[j].realmarksum)
				{
					temp=stu[i];
	      			stu[i]=stu[j];
	      			stu[j]=temp;//排序总综合成绩
				}
		for (i=0;i<stu_num;i++)
			for (j=0;j<stu[i].coursesum;j++)
				for (k=j+1;k<stu[i].coursesum;k++)
				if (stu[i].course[j].realmark < stu[i].course[k].realmark)
				{
					t=stu[i].course[j];
	      			stu[i].course[j]=stu[i].course[k];
	      			stu[i].course[k]=t;//排序课程综合成绩
				}
}
void SortRealMark_down() //实得总学分降序排序
{
	int i,j,k;
	struct Stu temp;
	struct Course t;
	
	for (i=0;i<stu_num;i++)
			for (j=i+1;j<stu_num;j++)
				if (stu[i].realmarksum > stu[j].realmarksum)
				{
					temp=stu[i];
	      			stu[i]=stu[j];
	      			stu[j]=temp;//排序总综合成绩
				}
		for (i=0;i<stu_num;i++)
			for (j=0;j<stu[i].coursesum;j++)
				for (k=j+1;k<stu[i].coursesum;k++)
				if (stu[i].course[j].realmark > stu[i].course[k].realmark)
				{
					t=stu[i].course[j];
	      			stu[i].course[j]=stu[i].course[k];
	      			stu[i].course[k]=t;//排序课程综合成绩
				}
}
void Sort()//成绩排序 
{
	int i,j,k;
	int choice;
	
	if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else 
	{
		printf("请选择排序方式:\n按综合成绩升序请输入1  按综合成绩升序请输入2 按实得总学分值升序请输入3  按实得总学分值降序请输入4:") ;
		scanf("%d",&choice);
		
		if(choice==1||choice==2||choice==3||choice==4)
		{
			if(choice==1)
			SortSum_up(stu_num); 
		
			if(choice==2)
				SortSum_down(stu_num); 
		
			if(choice==3)
				SortRealMark_up();
				
			if(choice==4)
				SortRealMark_down();
				
			printf("\n【=*=----------学生成绩排序完毕  学生成绩表如下----------=*=】\n\n");
			OutputScores(stu_num);
		}
		else 
		{
			printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
			Sort();
		}
	}
	
	
 } 
void Edit()//成绩修改
{
	int i,j;
	int choice;
	int index;
	char str[14];
	char strc[14];
	
	if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else
	{
		printf("请选择修改方式:\n学号修改请输入1  姓名修改请输入2 :") ;
		scanf("%d",&choice);
		if(choice==1||choice==2)
		{	
			if(choice==1) //学号修改 
			{
				printf("请输入学生的学号:");
				scanf("%s",&str);
				index=FindIndex_num(str);
				if(index!=-1)
				{
					printf("\n您希望修改的学生信息如下:\n");
					OutputScores_One(index);
					printf("\n请选择修改方式: 修改全部成绩请输入3  修改一科成绩请输入4:  ");
					scanf("%d",&choice);
					if(choice==3||choice==4)
					{
						if(choice==3) //学号修改-修改全部成绩 
						{
							printf("\n请输入该生共修课程数目:");
							scanf("%d",&stu[index].coursesum);
							for(j=0;j<stu[index].coursesum;j++)
							{
								printf("\n请输入课程编号和课程名字:");
								scanf("%d %s",&stu[index].course[j].cnum,&stu[index].course[j].cname);
								printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");
								scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);
								Calsum(stu_num);
								Calmark(stu_num);
							}
						}
						if(choice==4) //学号修改 修改单科成绩 
						{
							int num; 
							printf("请输入课程名称: ");
							scanf("%s",&strc);
							
							for(j=0;j<stu[index].coursesum;j++)
							{	
								if(strcmp(str,stu[index].course[j].cname)==0)
								{
									printf("您所寻找的学生课程情况如下:\n");
									printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);
									printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);
									printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");
									scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);
									Calsum(stu_num);
									Calmark(stu_num);
								} 
								//break;
							}	
					 	} 
					}
					else 
					{
						printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
						system("pause");
						Edit();
					}
				}
				
				 printf("【=*=----------学生信息修改完毕----------=*=】\n");
				 system("pause");
			}
			if(choice==2) //姓名修改 
			{
				printf("请输入学生的姓名:");
				scanf("%s",&str);
				index=FindIndex_name(str);
				if(index!=-1)
				{  
					printf("\n您希望修改的学生信息如下:\n");
					OutputScores_One(index);
					printf("\n请选择修改方式:修改全部成绩请输入5  修改一科成绩请输入6: ");
					scanf("%d",&choice);
					if(choice==5||choice==6)
					{
						if(choice==5) //姓名修改-修改全部成绩 
						{
							printf("请输入该生共修课程数目:");
							scanf("%d",&stu[index].coursesum);
							for(j=0;j<stu[index].coursesum;j++)
							{
								printf("\n请输入课程编号和课程名字:");
								scanf("%d %s",&stu[index].course[j].cnum,&stu[index].course[j].cname);
								printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");
								scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);
								Calsum(stu_num);
								Calmark(stu_num);
							} 
						}
						if(choice==6) //姓名修改-修改单科成绩 
						{
							int num; 
							printf("请输入课程名称: ");
							scanf("%s",&strc);
							
							for(j=0;j<stu[index].coursesum;j++)
							{
								if(strcmp(strc,stu[index].course[j].cname)==0)
								{
									printf("您所寻找的学生课程情况如下:\n");
									printf("课程编号:%d\t课程名称:%s\n",stu[index].course[j].cnum,stu[index].course[j].cname);
									printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[index].course[j].scores[0],stu[index].course[j].scores[1],stu[index].course[j].scores[2],stu[index].course[j].realmark,stu[index].course[j].sum);
									printf("\n请输入学生的平时成绩、实验成绩、卷面成绩、学分:");
									scanf("%f %f %f %f",&stu[index].course[j].scores[0],&stu[index].course[j].scores[1],&stu[index].course[j].scores[2],&stu[index].course[j].mark);
									Calsum(stu_num);
									Calmark(stu_num); 
								} 
								//break;
							}
					 	}
					} 
					else 
					{
						printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
						system("pause");
						Edit();
					}
				}
			}
			printf("\n\n【=*=----------学生信息修改完毕----------=*=】\n");
			printf("\n\n【=*=----------修改后该生成绩如下----------=*=】\n\n");
			OutputScores_One(index);
			//else printf("您输入选项有误,请重新输入。\n"); //返回菜单
			printf("\n\n【=*=----------修改后所有学生综合成绩降序排列如下----------=*=】\n");  
			SortSum_down(stu_num);//成绩修改后按照综合成绩降序排序 
			OutputScores(stu_num);
		}
		else
		{
			printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
			Edit();
		}
	}
	
 } 
void Add() // 成绩追加
{
	int ad;
	int i,j;
	
	if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else
	{
		printf("请输入您要追加的学生人数: ");
		scanf("%d",&ad);
		for(i=stu_num;i<stu_num+ad;i++)
		{
			printf("\n请输入第%d位学生信息:\n",i+1);
			printf("请输入学生的学号、姓名、性别、宿舍号、电话号码:");
			scanf("%s %s %s %s %s",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].dor,&stu[i].phone);
			printf("第%d位学生信息录入完毕,请录入学生成绩信息:\n",i+1);
			
			printf("请输入该生共修课程数目:");
			scanf("%d",&stu[i].coursesum);
			for(j=0;j<stu[i].coursesum;j++)
			{
			printf("请输入课程编号和课程名字:");
			scanf("%d %s",&stu[i].course[j].cnum,&stu[i].course[j].cname);
			printf("请输入学生的平时成绩、实验成绩、卷面成绩、学分:");
			scanf("%f %f %f %f",&stu[i].course[j].scores[0],&stu[i].course[j].scores[1],&stu[i].course[j].scores[2],&stu[i].course[j].mark);
			
			if(stu[i].course[j].scores[1]==-1)
					stu[i].course[j].sum = stu[i].course[j].scores[0]*0.3+stu[i].course[j].scores[2]*0.7;
			else
					stu[i].course[j].sum = stu[i].course[j].scores[0]*0.15+stu[i].course[j].scores[1]*0.15+stu[i].course[j].scores[2]*0.7;
				stu[i].sum+=stu[i].course[j].sum;
				stu[i].ave=stu[i].sum/(float)stu[i].coursesum; //学生平均成绩 
			}
			void CalmarkOne(int i);
			CalmarkOne(i); 
		}
		printf("\n【=*=---------补录学生信息录入完毕---------=*=】\n\n");
		
		//stu_num=stu_num+ad;
		void MarkLevelCal(int stu_sum);
		void ScoreLevelCal(int stu_sum);
		ScoreLevelCal(stu_num+ad);
		MarkLevelCal(stu_num+ad);
		
		printf("【=*=-----------新增学生信息情况如下-----------=*=】\n\n");
		for(i=stu_num;i<stu_num+ad;i++)
		{
			printf("学号:%s   姓名:%s\n",stu[i].num,stu[i].name);
			for(j=0;j<stu[i].coursesum;j++)
			{
				printf("课程编号:%d\t课程名称:%s\n",stu[i].course[j].cnum,stu[i].course[j].cname);
				printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[i].course[j].scores[0],stu[i].course[j].scores[1],stu[i].course[j].scores[2],stu[i].course[j].realmark,stu[i].course[j].sum);
			}
			printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f\n",stu[i].coursesum,stu[i].realmarksum,stu[i].sum);
			putchar(10);
		}
		stu_num+=ad;
		
		SortSum_down(stu_num);//成绩修改后按照综合成绩降序排序 
		printf("\n\n【=*=----------增添信息后,所有学生综合成绩降序排序如下----------=*=】\n\n");
		OutputScores(stu_num);
	}
	
 } 
void Delete() //删除学生信息
{
	int choice;
	char str[20];
	int index;
	int i;
	char ch;
	
	if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else
	{
		printf("请选择删除方式: 通过学号删除请输入1,通过姓名删除请选择2:");
		scanf("%d",&choice);
		if(choice==1||choice==2)
		{
			if(choice==1)
			{
				printf("请输入学生学号:");
				scanf("%s",&str);
				index=FindIndex_num(str);
				if(index!=-1)
				{
					printf("学生信息如下:\n");
					printf("%8s %8s %8s %8s %8s\n","学号","姓名","性别","宿舍号","电话号码");
					printf("%8s %8s %8s %8s %8s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone); 
					getchar();
					printf("输入Y或y删除学生信息,如果信息输入有误请输入N或n: ");
					ch=getchar();
					if(ch=='Y'||ch=='y')
					{
						for(i=index;i<stu_num;i++)
						{
							stu[i]=stu[i+1];
						}
						printf("\n学生信息删除成功!\n"); 
						stu_num-=1;
						SortSum_down(stu_num);//删除成绩后成绩重新排序 
						printf("\n【=*=--------删除后所有学生按综合成绩降序排列如下----------=*=】\n\n");
						OutputScores(stu_num);//查看删除后的所有学生成绩 
						putchar(10); 
					}
					else if(ch=='N'||ch=='n')
						Delete(); 
					else 
					{
						printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
						Delete();
					}
				}
				else
				{
					printf("\n【=*=------学生不存在,请重新输入-------=*=】\n\n");
					Delete();
				}
			}
			if(choice==2)
			{
				printf("请输入学生姓名:");
				scanf("%s",&str);
				index=FindIndex_name(str);
				if(index!=-1)
				{
					printf("学生信息如下:\n");
					printf("%8s %8s %8s %8s %8s\n","学号","姓名","性别","宿舍号","电话号码");
					printf("%8s %8s %8s %8s %8s\n",stu[index].num,stu[index].name,stu[index].sex,stu[index].dor,stu[index].phone); 
					getchar();
					printf("输入Y或y删除学生信息,如果信息输入有误请输入N或n: ");
					ch=getchar();
					if(ch=='Y'||ch=='y')
					{
						for(i=index;i<stu_num;i++)
						{
							stu[i]=stu[i+1];
						}
						printf("\n学生信息删除成功!\n"); 
						stu_num-=1;
						SortSum_down(stu_num);//删除成绩后成绩重新排序 
						printf("\n【=*=--------删除后所有学生按综合成绩降序排列如下----------=*=】\n\n");
						OutputScores(stu_num);//查看删除后的所有学生成绩 
						putchar(10);
					}
					else if(ch=='N'||ch=='n')
						Delete(); 
					else 
					{
						printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
						Delete();
					}
				 } 
				else
				{
					printf("\n【=*=------学生不存在,请重新输入------=*=】\n\n");
					Delete();
				}
			}
			
		}
		else 
		{
			printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
			system("pause");
			Delete();
		}
	
	}
	 } 
void ScoreLevelCal(int stu_sum) //计算成绩分段 
{
	int i,j;
	 for(i=0;i<stu_sum;i++)
	 {
	 	if(stu[i].ave>=90.0&&stu[i].ave<=100.0)		stu[i].ranks='A';
	 	else if(stu[i].ave>=80.0&&stu[i].ave<90.0)		stu[i].ranks='B';
	 	else if(stu[i].ave>=70.0&&stu[i].ave<80.0)		stu[i].ranks='C';
	 	else if(stu[i].ave>=60.0&&stu[i].ave<70.0)		stu[i].ranks='D';
	 	else stu[i].ranks='E';
	 }
	 
}
void MarkLevelCal(int stu_sum) //计算学分分段 
{
	int i,j;
	 for(i=0;i<stu_sum;i++)
	 {
	 	if(stu[i].avemark>=90.0&&stu[i].avemark<=100.0)		stu[i].rankm='A';
	 	else if(stu[i].avemark>=80.0&&stu[i].avemark<90.0)		stu[i].rankm='B';
	 	else if(stu[i].avemark>=70.0&&stu[i].avemark<80.0)		stu[i].rankm='C';
	 	else if(stu[i].avemark>=60.0&&stu[i].avemark<70.0)		stu[i].rankm='D';
	 	else stu[i].rankm='E';
	 }
	 
}
void MarkLevel(int stu_sum)//学分分段
{
	MarkLevelCal(stu_num);
	int i,j;
	int flag=0;
	
	printf("%10s%15s%15s\n\n","学号","姓名","平均学分");
	printf("--------------*****A*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].rankm=='A')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****B*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].rankm=='B')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****C*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].rankm=='C')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****D*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].rankm=='D')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****E*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].rankm=='E')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].avemark);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	
	printf("\n【=*=----------学生成绩信息分段完毕----------=*=】\n");
	system("pause");
 } 
void ScoreLevel(int stu_sum)//分数分段
{ 
	ScoreLevelCal(stu_num);
	int i,j;
	int flag;
	char ch;
	printf("%10s%15s%15s\n\n","学号","姓名","平均综合分数");
	
	printf("--------------*****A*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].ranks=='A')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****B*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].ranks=='B')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****C*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].ranks=='C')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****D*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].ranks=='D')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");
	flag=0;
	
	printf("\n--------------*****E*****--------------\n") ;
	for(i=0;i<stu_num;i++)
	{
		if(stu[i].ranks=='E')
		{
			printf("%10s%15s%15.2f\n",stu[i].num,stu[i].name,stu[i].ave);
			flag=1;
		}
	}
	if(flag==0)
		printf("\t---该分段无学生---\n");

	printf("\n【=*=----------学生成绩信息分段完毕----------=*=】\n");
	system("pause");
 } 
void Level() //成绩分段 
{
	int choice;
	
	ScoreLevelCal(stu_num);
	MarkLevelCal(stu_num);
	 if(stu_num==0)
	{
		printf("【=*=---------请先录入学生基本信息---------=*=】\n");
		system("pause");
		return ; 
	}
	else
	{
		printf("请选择分段方式:输入1按学分分段,输入2按综合成绩分段:");
		scanf("%d",&choice);
		if(choice==1)	{MarkLevel(stu_num);} 
		else if(choice==2)	{ScoreLevel(stu_num);} 
		
		else
		{
			printf("\n【=*=----------您所输入的操作有误,请重新输入----------=*=】\n\n");
			Level();
		}
	}

 } 
void CalsumOne(int i)	//计算一个学生综合成绩 
{
	int j;
	//若本课程有实验
		for(j=0;j<stu[i].coursesum;j++)
		{
			if(stu[i].course[j].scores[1]==-1)
				stu[i].course[j].sum = stu[i].course[j].scores[0]*0.3+stu[i].course[j].scores[2]*0.7;
			else
				stu[i].course[j].sum = stu[i].course[j].scores[0]*0.15+stu[i].course[j].scores[1]*0.15+stu[i].course[j].scores[2]*0.7;
			stu[i].sum+=stu[i].course[j].sum;
			stu[i].ave=stu[i].sum/(float)stu[i].coursesum; //学生平均成绩 
		}
	system("pause");
} 
void CalmarkOne(int i)
{
	int j;
	for(j=0;j<stu[i].coursesum;j++)
		{
			if(stu[i].course[j].sum>=90&&stu[i].course[j].sum<100)
				stu[i].course[j].realmark=stu[i].course[j].mark;
			if(stu[i].course[j].sum>=80&&stu[i].course[j].sum<90)
				stu[i].course[j].realmark=stu[i].course[j].mark*0.8;
			if(stu[i].course[j].sum>=70&&stu[i].course[j].sum<80)
				stu[i].course[j].realmark=stu[i].course[j].mark*0.7;
			if(stu[i].course[j].sum>=60&&stu[i].course[j].sum<70)
				stu[i].course[j].realmark=stu[i].course[j].mark*0.6;
			if(stu[i].course[j].sum>=0&&stu[i].course[j].sum<60)
				stu[i].course[j].realmark=0.0;
			stu[i].realmarksum+=stu[i].course[j].realmark;//实得总学分值 
		}
		stu[i].avemark=stu[i].realmarksum/stu[i].coursesum;//实得平均学分
}

void Read() //文件输出 
{
	FILE *fp;
	int i,j;
	char filename[30];
	printf("请输入文件名称:");
	scanf("%s",&filename); 
	
	if((fp=fopen(filename,"rb"))==NULL)
	{ //fopen 指定读写方式为二进制写方式 
	//未指定文件路径,从源文件所在目录创建 
		printf("文件打开失败\n");
		exit(0);
	}
	fp=fopen(filename,"rb");
	
	for(i=0; fread(&stu[i], sizeof(struct Stu), 1, fp)!=0; i++)
	{
		stu_num++;
	}
	
	printf("\n【=*=-----------文件中信息如下----------=*=】\n\n");
	for(i=0;i<stu_num;i++)
	{
		fread( &stu[i] , sizeof(Stu) ,1, fp );
		printf("学号:%s 姓名:%s 性别:%s 宿舍号:%s 电话号码:%s\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].dor,stu[i].phone); 
		for(j=0;j<stu[i].coursesum;j++) 
		{
			printf("课程编号:%d\t课程名称:%s\n",stu[i].course[j].cnum,stu[i].course[j].cname);
			printf("平时成绩:%.2f\t实验成绩:%.2f\t卷面成绩:%.2f\t实得学分:%.2f\t课程综合成绩:%.2f\t\n",stu[i].course[j].scores[0],stu[i].course[j].scores[1],stu[i].course[j].scores[2],stu[i].course[j].realmark,stu[i].course[j].sum);
		}
		printf("学生共修课程数目为:%d,实得总学分值为:%.2f, 综合成绩为:%.2f\n\n",stu[i].coursesum,stu[i].realmarksum,stu[i].sum);
	}

	fclose(fp);
	system("pause");
}
void Storage()//文件储存 
{
	char filename[30];
	printf("请输入文件名称:");
	scanf("%s",&filename); 
	
	FILE *fp;
	int  i;
	if((fp=fopen(filename,"w"))==NULL)
	{
		printf("文件打开错误!\n");
		return;
	}
	for(i=0; i<stu_num; i++)
	{
		fwrite(&stu[i], sizeof(struct Stu), 1, fp);
	}
	fclose(fp);
	printf("\n【=*=----------文件储存成功----------=*=】\n") ;
	system("pause");
}
void Into()//文件导入 
{
	char filename[30];
	printf("请输入文件名称:");
	scanf("%s",&filename); 
	
	int i;
	FILE *fp;
	if((fp=fopen(filename,"r"))==NULL)
	{
		printf("文件不能打开!\n");
		return;
	}
	for(i=0; fread(&stu[i], sizeof(struct Stu), 1, fp)!=0; i++)
	{
		stu_num++;
	}
	fclose(fp);
	printf("\n【=*=----------文件导入成功----------=*=】\n") ;
	system("pause");
}
void Page()
{
		int choice;
	   time_t rawtime;
       struct tm * timeinfo;
       time ( &rawtime );
       timeinfo = localtime ( &rawtime );
       system("cls");           /*运行前清屏*/           
       printf("\n");
       printf("\t===============学生*=*=*=*=*=*=*信息*=*=*=*=*=*=*管理=*=*=*=*=*=*=*系统===============\n\n");
	   printf ( "\t\t\t      当前系统时间:%4d年%02d月%02d日 %02d:%02d:%02d\n",1900+timeinfo->tm_year, 
		   1+timeinfo->tm_mon,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
       printf("\t*==*==*==*==*==*------------------------------------------------------*==*==*==*==*==*\n");
       printf("\n\t |***| (1)学生信息录入\t\t|***| (2)学生成绩录入\t\t|***| (3)综合成绩计算\n\n");
	   printf("\t |===| (4)实得学分计算\t\t|===| (5)基本信息查询\t\t|===| (6)成绩信息查询\n\n");
	   printf("\t |=*=| (7)学生成绩排序\t\t|=*=| (8)学生成绩修改\t\t|=*=| (9)学生成绩追加\n\n");
	   printf("\t |===| (10)删除学生信息\t\t|===| (11)学生成绩分段   \t|===| (12)相关文件储存\n\n");
	   printf("\t |=*=| (13)相关文件输出\t\t|=*=| (14)相关文件导入   \t|=*=| (0)退出系统\n\n");
	   putchar(10);
	   printf("\t*==*==*==*==*==*------------------------------------------------------*==*==*==*==*==*\n");
       printf("\t请选择操作序号(0-14):"); 
       scanf("%d",&choice);
       
       switch(choice)
	{
		case 1:system("cls");InputInformation();Page(); 
		case 2:system("cls");InputScores();Page();
		case 3:system("cls");Calsum(stu_num);Page();
		case 4:system("cls");Calmark(stu_num);Page();
		case 5:system("cls");InformationSearch();Page();
		case 6:system("cls");ScoresSearch();Page();
		case 7:system("cls");Sort();Page();
		case 8:system("cls");Edit();Page();
		case 9:system("cls");Add(); Page();
		case 10:system("cls");Delete(); Page();
		case 11:system("cls");Level(); Page();
		case 12:system("cls");Storage();Page;
		case 13:system("cls");Read();Page();
		case 14:system("cls");Into();Page();
		case 0: printf("\n\t【=*=----------您已成功退出系统----------=*=】\n");exit(0);
		default: printf("\t--您所输入的操作有误,请重新输入--\n\n");system("pause"); Page();
	}
}
int main()
{
	Page();

	return 0;
 } 


  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值