【C语言】学生成绩管理系统

一、学生成绩管理系统是什么?

系统结构图

当我们将目光聚焦于教育领域的信息化建设时,一个基于 C 语言打造的学生成绩管理系统犹如一颗璀璨的明星,闪耀着独特的光芒。它是数据与逻辑的精妙交织,以代码为画笔,在内存与算法的画布上勾勒出清晰的学生学业轮廓。从学生信息的精准录入,到成绩数据的有序存储,再到复杂的统计分析与便捷的查询检索,每一个环节都蕴含着 C 语言的强大魅力与编程者的智慧匠心。此刻,就让我们踏入这个由 C 语言构建的学生成绩管理系统的奇妙世界,去探寻其中的奥秘与精彩。

     能够方便地查询和变更学生的基本数据(例如增删改查),节省大量工作时间,有效地提高学生信息管理的效率。

主程序流程图 

结构体的设计
typedef struct{
  char clas[10];//班级 
  char student_number[20];  //学号 
  char name[20];  //姓名 
  char course_number[20]; //课程号         
  char course_name[10]; //课程名 
  float score;   //分数               
  }MESSAGE;
函数及全局变量的设计 
  void Welcome();   
  void Password(); 
  int showsel();
  void choice();
  void WriteData(); 
  void ReadData();
  void scorelist();
  void scorein();
  void del(); 
  void Chinese();
  void coursenumber();
  void Edit();
  void edit();
  void English();
  void Math();
  void Searchfor();
  void Searchname();
  void Searchnumber();
  void sum();
  void tongji();
详细设计及实现
  欢迎界面
void Welcome()
{
	system("title 程序设计课程设计");  
	system("color F4");  
	system("cls");	//清屏 
	printf("\n\n\t\t|----------------------------------------|\n");
	printf("\t\t|----------------------------------------|\n");
    printf("\t\t|----------------------------------------|\n");
	printf("\t\t|          学生成绩管理系统1.0版         |\n");
	printf("\t\t|----------------------------------------|\n");
	printf("\t\t|----------------------------------------|\n");

	printf("\n\t\t");system("date/t");//系统日期 
	printf("\n\t\t");system("time/t");//系统时间 
}
  密码登录
void Password() 
{   static int a=0;
 	char pw[8];//密码长度为7 
 	printf("\n请输入登录密码():");
 	gets(pw);
	if(strcmp(pw,"123")==0) 
		choice();
	else
	{	a++;
	if(a==3)	
	{printf("错误三次,稍后再试");
	  return 0;} 
		printf("\n密码错误,请重新输入密码\n");
		Password();//三次错误结束程序 
	}
	
} 

  菜单界面 
int showsel()
{ 	int sel;
	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n") ;
	printf("\t\t┃          学生成绩管理系统        ┃\n");    
	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
	printf("\t\t┃  0. 退出系统                     ┃\n");  
	printf("\t\t┃  1. 浏览学生成绩信息             ┃\n"); 
	printf("\t\t┃  2. 录入学生成绩信息             ┃\n");
	printf("\t\t┃  3. 查询学生成绩信息             ┃\n");
	printf("\t\t┃  4. 编辑学生成绩信息             ┃\n");
	printf("\t\t┃  5. 学生成绩统计                 ┃\n");   
	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
	printf("\t\t请输入要选择的功能编号:");
	scanf("%d",&sel);  
	return sel;
}
  成绩信息录入 
void scorein(){
	char name_[10],stu_num[10]; 
    char course_name[10],course_number[10],clas[10];//这里的数组长度和结构体不一致,要改 
    float score;    
	int flag=0,i;
	char choice[3];
	do
	{ 	scorelist();//首先展示已有的成绩 
		printf(" \t\t【输入000返回主界面】\n\n");
		printf(" \t\t【温馨提醒:请不要输错课程号】\n");
		printf(" \t\t【001语文】【002数学】【003英语】\n\n");//这里的编号和已有的数据不一致,要改 
		printf(" \t\t请输入学号:");
		scanf("%s",stu_num);
		if(strcmp(stu_num,"000")==0)break;//这里的break可以结束整个循环 
	  	for(i=0;i<scornum;i++){
	  		if(strcmp(stu_num,scor[i].student_number)==0){
	  			flag=1; break; }//如果该生已存在,则将标志位置1 
		}
		if(flag==1 )
		{ 	printf(" \n\t\t该学生已存在,是否需要录入该学生其他课程成绩?\n \t\t【按1继续输入;输入0退出输入】:");
	   		scanf(" \t\t%s",choice);
	   		if(strcmp(choice,"0")==0)break;//break可以结束整个循环 
	   		if(strcmp(choice,"1")==0)
	   			{flag=0;} 
		}
		if(flag==0){
			scornum++;
			printf("\n");
			strcpy(scor[scornum-1].student_number,stu_num);
			printf(" \t\t请输入班级:");fflush(stdin);gets(scor[scornum-1].clas);
			printf(" \t\t请输入姓名:");fflush(stdin);gets(scor[scornum-1].name);
			printf(" \t\t请输入课程号:");fflush(stdin);gets(scor[scornum-1].course_number);
			printf(" \t\t请输入课程名:");fflush(stdin);gets(scor[scornum-1].course_name);
			for(i=0;i<scornum;i++)//循环对比
			{if(strcmp(scor[i].course_name,scor[scornum-1].course_name)==0 )   //确认课程
		     {
			 if(strcmp(scor[i].course_number,scor[scornum-1].course_number)){printf(" \t\t课程号与课程名冲突\n");   //判断输入的课程号是否与已录入的该课程的课程号相同
			  printf(" \t\t请重新输入课程号:");fflush(stdin);gets(scor[scornum-1].course_number);
			  printf(" \t\t请重新输入课程名:");fflush(stdin);gets(scor[scornum-1].course_name);
			  }}}	
			printf(" \t\t请输入分数:");scanf("%f",&scor[scornum-1].score);
			printf(" \t\t录入信息成功~"); 
			system("cls"); 
			scorein();//调用自身,进行下个学生的输入 
			break;}
	}while(1);
	WriteData();//修改后写入文档
}
  成绩信息查询 
void scorelist()
{	int i;
	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
	printf("\t\t┃                       学生成绩信息                           ┃\n");    
	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
	printf("\t\t┃ %-10s%-10s%-10s%-10s%-15s%-6s┃\n","班级","学号","姓名","课程号","课程名","分数");    
	for(i=0;i<scornum;i++){
	printf("\t\t┃ %-10s%-10s%-10s%-10s%-15s%-6.1f┃\n",
		scor[i].clas,scor[i].student_number,scor[i].name,scor[i].course_number,scor[i].course_name,scor[i].score);}
	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
}
  成绩信息编辑 
/*删除信息*/
void del()
{	char stu_name[10];
	char stu_course[10];//根据姓名和课程号删除 
	int i,j;
	while(1){
		system("cls");
		scorelist();//首先展示已有的成绩 
		printf(" \t\t【输入000返回主界面】\n");
		printf(" \t\t请输入需要删除信息的学生姓名:");
		scanf("%s",stu_name);
		if(strcmp(stu_name,"000")==0)break;
		printf(" \t\t请输入需要删除信息的课程名:");
		scanf("%s",stu_course);
		if(strcmp(stu_course,"000")==0)break;
		for(i=0;i<scornum;i++)
			if(strcmp(stu_name,scor[i].name)==0 &&strcmp(stu_course,scor[i].course_name)==0){
				for(j=i;j<scornum-1;j++)
				{	strcpy(scor[j].clas,scor[j+1].clas);
					strcpy(scor[j].student_number,scor[j+1].student_number);
					strcpy(scor[j].name,scor[j+1].name);
					strcpy(scor[j].course_number,scor[j+1].course_number);
					strcpy(scor[j].course_name,scor[j+1].course_name);
					scor[j].score=scor[j+1].score;
				}
				printf(" \t\t删除成功!"); 
				getch();
				scornum--;
				system("cls");
				WriteData(); //修改后一定要写入文档 
			}
	}
} 

/*修改信息*/
void edit()
{	char stu_name[10];
	char stu_course[10];//根据姓名和课程号删除 
	int i,j,t;
	while(1){
		system("cls");
		scorelist();//首先展示已有的成绩 
		printf(" \t\t【输入000返回主界面】\n");
		printf(" \t\t请输入需要编辑信息的学生姓名:");
		scanf("%s",stu_name);
		if(strcmp(stu_name,"000")==0)break;
		printf(" \t\t请输入需要编辑信息的课程名:");
		scanf("%s",stu_course);
		if(strcmp(stu_course,"000")==0)break;
		for(i=0;i<scornum;i++)	
			if(strcmp(stu_name,scor[i].name)==0 &&strcmp(stu_course,scor[i].course_name)==0)
			{printf("\t\t请输入学生该课程的新成绩:"); 
			 scanf("%d",&t);    //覆盖原来成绩 
			 scor[i].score=t;
			}
				printf(" \t\t修改成功!"); 
				getch();
				WriteData();
		edit();		 }
} 
  成绩信息统计 
void sum()
{   int i,y,j[100]={0},b=0,d=0;
	char name[10]={0},stu_num[10]={0},clas[10]={0}; 
    float a[100],c=0,w,e;
    char back[100]; 
	 system("cls");
	 printf("\t\t\t考试成绩总分分析\n");
	 printf("\t\t%-10s%-10s%-10s%-10s%-10s%-10s\n","序号","班级","学号","姓名","总分","录入科目数");
	for(y=0;y<scornum;y++)
	 {if(scor[y].score==-1)
	     continue;
	 a[y]=scor[y].score;
	  j[y]=1;
	 for(i=y+1;i<scornum;i++)  
   	 {if(strcmp(scor[y].student_number,scor[i].student_number)==0)
     {    a[y]+=scor[i].score;
          j[y]++;
		  scor[i].score=-1; 
          }}}
	for(y=0;y<scornum;y++)
	 {if(scor[y].score==-1)  continue;}
  for(i=y+1;i<scornum;i++) 
	 {
	 if(a[y]>a[i])
	 { 
	 strcpy(scor[100].clas,scor[i].clas);
	 strcpy(scor[i].clas,scor[y].clas);
	 strcpy(scor[y].clas,scor[100].clas);
	 strcpy(scor[100].student_number,scor[i].student_number);
	 strcpy(scor[i].student_number,scor[y].student_number);
	 strcpy(scor[y].student_number,scor[100].student_number);	
	 strcpy(scor[100].name,scor[i].name);
	 strcpy(scor[i].name,scor[y].name);
	 strcpy(scor[y].name,scor[100].name);
	 c=a[y];a[y]=a[i];a[i]=c;
	 d=j[y];j[y]=j[i];j[i]=d;
	 }}
	 for(y=0;y<scornum;y++)
	 {if(scor[y].score==-1)  continue;
	 printf("\t\t%-10d%-10s%-10s%-10s%-10.1f%-10d\n",++b,scor[y].clas,scor[y].student_number,scor[y].name,a[y],j[y]);}
     printf(" \t\t【输入000返回上一级界面】\n");
    scanf("%s",back);
	if(strcmp(back,"000")==0) 
	 tongji(); 
}

总代码

   

#include<stdio.h>
#include<string.h> 
#include<stdlib.h>
#include<conio.h>
#define Max 100//能够支持的最大成绩记录个数 

/************************结构体定义区******************************/
typedef struct{
  char clas[10];//班级 
  char student_number[20];  //学号 
  char name[20];  //姓名 
  char course_number[20]; //课程号         
  char course_name[10]; //课程名 
  float score;   //分数               
  }MESSAGE;

  /************************函数申明区******************************/
  void Welcome();   
  void Password(); 
  int showsel();
  void choice();
  void WriteData(); 
  void ReadData();
  void scorelist();
  void scorein();
  void del(); 
  void Chinese();
  void coursenumber();
  void Edit();
  void edit();
  void English();
  void Math();
  void Searchfor();
  void Searchname();
  void Searchnumber();
  void sum();
  void tongji();
  /************************全局变量定义区******************************/
  int scornum=3;//当前已有的成绩记录个数 
  MESSAGE scor[Max]={{"物联","wl123","叶凡","C1002","数学",73},
  					{"大数据","dsj123","林木","C1001","语文",95},
					  {"智能","zn123","景天","C1003","英语",91}}; 

//写入数据 
void WriteData(){
	FILE *fp;//操作文件
	if((fp=fopen("wengencong wangshuai.txt","w"))==NULL){
		printf("Can not open the file!\n");
		return;//如果打开失败,直接结束该函数 
	}
	fwrite(&scornum,sizeof(int),1,fp);//存储学生成绩的文档
	fwrite(scor,sizeof(MESSAGE),scornum,fp);
	fclose(fp); 
}

//读取数据 
void ReadData(){
	FILE *fp;
	if((fp=fopen("wengencong wangshuai.txt","r"))==NULL){
		printf("Can not open the file!\n");
		return;}
	fread(&scornum,sizeof(int),1,fp);//存储学生成绩的文档
	fread(scor,sizeof(MESSAGE),scornum,fp);
	fclose(fp);
}

/****欢迎界面*****/
void Welcome()
{
	system("title 程序设计课程设计");  
	system("color F4");  
	system("cls");	//清屏 
	printf("\n\n\t\t|----------------------------------------|\n");
	printf("\t\t|----------------------------------------|\n");
    printf("\t\t|----------------------------------------|\n");
	printf("\t\t|          学生成绩管理系统1.0版         |\n");
	printf("\t\t|----------------------------------------|\n");
	printf("\t\t|----------------------------------------|\n");

	printf("\n\t\t");system("date/t");//系统日期 
	printf("\n\t\t");system("time/t");//系统时间 
}

/****密码登入***/
void Password() 
{   static int a=0;
 	char pw[8];//密码长度为7 
 	printf("\n请输入登录密码():");
 	gets(pw);
	if(strcmp(pw,"123")==0) 
		choice();
	else
	{	a++;
	if(a==3)	
	{printf("错误三次,稍后再试");
	  return 0;} 
		printf("\n密码错误,请重新输入密码\n");
		Password();//三次错误结束程序 
	}
	
} 

/* 主菜单功能选择的代码 */
int showsel()
{ 	int sel;
	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n") ;
	printf("\t\t┃          学生成绩管理系统        ┃\n");    
	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
	printf("\t\t┃  0. 退出系统                     ┃\n");  
	printf("\t\t┃  1. 浏览学生成绩信息             ┃\n"); 
	printf("\t\t┃  2. 录入学生成绩信息             ┃\n");
	printf("\t\t┃  3. 查询学生成绩信息             ┃\n");
	printf("\t\t┃  4. 编辑学生成绩信息             ┃\n");
	printf("\t\t┃  5. 学生成绩统计                 ┃\n");   
	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
	printf("\t\t请输入要选择的功能编号:");
	scanf("%d",&sel);  
	return sel;
}

/* 菜单选择 */
void choice(){
	int sel;
    do{  
	    ReadData(); //读取数据                 
        system("cls");  
		sel=showsel();   //调用上面的菜单显示并获取用户输入的功能编号 
        switch(sel) {       
          	case 0: break;
           	case 1: system("cls");  scorelist();getch();break;
           	case 2: system("cls");scorein(); break;
           	case 3: system("cls");Searchfor();break;
           	case 4: system("cls");Edit();break;
           	case 5: system("cls");tongji();break;
             }
    }while(sel);
}

/*  成绩信息浏览代码  */ 
void scorelist()
{	int i;
	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
	printf("\t\t┃                       学生成绩信息                           ┃\n");    
	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
	printf("\t\t┃ %-10s%-10s%-10s%-10s%-15s%-6s┃\n","班级","学号","姓名","课程号","课程名","分数");    
	for(i=0;i<scornum;i++){
	printf("\t\t┃ %-10s%-10s%-10s%-10s%-15s%-6.1f┃\n",
		scor[i].clas,scor[i].student_number,scor[i].name,scor[i].course_number,scor[i].course_name,scor[i].score);}
	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
}

/* 成绩信息录入的代码 */
void scorein(){
	char name_[10],stu_num[10]; 
    char course_name[10],course_number[10],clas[10];//这里的数组长度和结构体不一致,要改 
    float score;    
	int flag=0,i;
	char choice[3];
	do
	{ 	scorelist();//首先展示已有的成绩 
		printf(" \t\t【输入000返回主界面】\n\n");
		printf(" \t\t【温馨提醒:请不要输错课程号】\n");
		printf(" \t\t【001语文】【002数学】【003英语】\n\n");//这里的编号和已有的数据不一致,要改 
		printf(" \t\t请输入学号:");
		scanf("%s",stu_num);
		if(strcmp(stu_num,"000")==0)break;//这里的break可以结束整个循环 
	  	for(i=0;i<scornum;i++){
	  		if(strcmp(stu_num,scor[i].student_number)==0){
	  			flag=1; break; }//如果该生已存在,则将标志位置1 
		}
		if(flag==1 )
		{ 	printf(" \n\t\t该学生已存在,是否需要录入该学生其他课程成绩?\n \t\t【按1继续输入;输入0退出输入】:");
	   		scanf(" \t\t%s",choice);
	   		if(strcmp(choice,"0")==0)break;//break可以结束整个循环 
	   		if(strcmp(choice,"1")==0)
	   			{flag=0;} 
		}
		if(flag==0){
			scornum++;
			printf("\n");
			strcpy(scor[scornum-1].student_number,stu_num);
			printf(" \t\t请输入班级:");fflush(stdin);gets(scor[scornum-1].clas);
			printf(" \t\t请输入姓名:");fflush(stdin);gets(scor[scornum-1].name);
			printf(" \t\t请输入课程号:");fflush(stdin);gets(scor[scornum-1].course_number);
			printf(" \t\t请输入课程名:");fflush(stdin);gets(scor[scornum-1].course_name);
			for(i=0;i<scornum;i++)//循环对比
			{if(strcmp(scor[i].course_name,scor[scornum-1].course_name)==0 )   //确认课程
		     {
			 if(strcmp(scor[i].course_number,scor[scornum-1].course_number)){printf(" \t\t课程号与课程名冲突\n");   //判断输入的课程号是否与已录入的该课程的课程号相同
			  printf(" \t\t请重新输入课程号:");fflush(stdin);gets(scor[scornum-1].course_number);
			  printf(" \t\t请重新输入课程名:");fflush(stdin);gets(scor[scornum-1].course_name);
			  }}}	
			printf(" \t\t请输入分数:");scanf("%f",&scor[scornum-1].score);
			printf(" \t\t录入信息成功~"); 
			system("cls"); 
			scorein();//调用自身,进行下个学生的输入 
			break;}
	}while(1);
	WriteData();//修改后写入文档
}

/*二级查询界面菜单*/
void Searchfor()
    { 
	system("cls");
	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n") ;
	printf("\t\t┃        学生成绩查询功能          ┃\n");    
	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
	printf("\t\t┃  0. 退出系统                     ┃\n");  
	printf("\t\t┃  1. 通过学生学号查询             ┃\n"); 
	printf("\t\t┃  2. 通过学生姓名查询             ┃\n");
	printf("\t\t┃  3. 通过课程号查询               ┃\n");
	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
	printf("\t\t请输入要选择的功能编号:");
	int optfind = 0;
	scanf("%d", &optfind);
	switch (optfind)
	{
	case 1:
		Searchnumber();
		break;
	case 2:
		Searchname();
		break;
	case 3:
		coursenumber();
		break;
	default:
		break;
}}


//通过学生学号查询                      
void Searchnumber()
{  char t[100];
   int j,p,f;
   do {
     system("cls");   //清屏
   	 printf("请输入要查询的学生学号:\n");
   	 scanf("%s",t);
   	 p=0;
   	 for(j=0;j<scornum;j++)
   	 {if(strcmp(scor[j].student_number,t)==0)  //对比和查询输出同学号学生
     {p=1;
     printf("\t\t%-10s%-10s%-10s%-10s%-15s%-6s\n","班级","学号","姓名","课程号","课程名","分数");    
     printf("\t\t%-10s%-10s%-10s%-10s%-15s%-6.1f\n",
		scor[j].clas,scor[j].student_number,scor[j].name,scor[j].course_number,scor[j].course_name,scor[j].score);
     break;}
   	 }
	if(p==0)
	printf("查无此人\n");
	printf("结束查询返回上一级界面输入0\n");
	scanf("%d",&f);
  }while(f);
  Searchfor();    //返回上一级菜单
 }

 /*根据姓名查询*/
void Searchname()
{  char t[100];
   int j,p,f;
   do {
     system("cls");
   	 printf("请输入要查询的学生姓名:\n"); //对比和查询输出与输入一样的学生
   	 scanf("%s",t);
   	 p=0;
   	 for(j=0;j<scornum;j++)
   	 {if(strcmp(scor[j].name,t)==0)
     {p=1;
     printf("\t\t%-10s%-10s%-10s%-10s%-15s%-6s\n","班级","学号","姓名","课程号","课程名","分数");    
     printf("\t\t%-10s%-10s%-10s%-10s%-15s%-6.1f\n",
		scor[j].clas,scor[j].student_number,scor[j].name,scor[j].course_number,scor[j].course_name,scor[j].score);
     break;}
   	 }
	if(p==0)
	printf("查无此人\n");
	printf("结束查询返回上一级界面输入0\n");
	scanf("%d",&f);
  }while(f);
  Searchfor(); 
 }
 
  /*根据课程号查询*/
 void coursenumber()
{  char t[100];
   int j,p,f,i=0;
   do {
     system("cls");
   	 printf("请输入要查询的课程号:\n");//对比和查询输出与输入一样的课程号 
   	 scanf("%s",t);
   	 p=0;
   	 for(j=0;j<scornum;j++)
   	 {if(strcmp(scor[j].course_number,t)==0)
     {p=1;i++;
     if(i==1)
     printf("\t\t%-10s%-10s%-10s%-10s%-15s%-6s\n","班级","学号","姓名","课程号","课程名","分数");    
     printf("\t\t%-10s%-10s%-10s%-10s%-15s%-6.1f\n",
		scor[j].clas,scor[j].student_number,scor[j].name,scor[j].course_number,scor[j].course_name,scor[j].score);
     }
   	 }
	if(p==0)
	printf("查无此课程\n");
	printf("结束查询返回上一级界面输入0\n");
	scanf("%d",&f);
  }while(f);
  Searchfor(); 
 }
 
  /*二级编辑菜单*/
 void Edit()
    { system("cls");
	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n") ;
	printf("\t\t┃        学生成绩编辑界面          ┃\n");    
	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
	printf("\t\t┃  0. 退出界面                     ┃\n");  
	printf("\t\t┃  1. 删除学生成绩                 ┃\n"); 
	printf("\t\t┃  2. 修改学生成绩                 ┃\n");
	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
	printf("\t\t请输入要选择的功能编号:");
	int optfind = 0;
	scanf("%d", &optfind);
	switch (optfind)
	{
	case 1:
	    del();
		break;
	case 2:
	    edit();
		break;
	default:
		break;
}}

/*删除信息*/
void del()
{	char stu_name[10];
	char stu_course[10];//根据姓名和课程号删除 
	int i,j;
	while(1){
		system("cls");
		scorelist();//首先展示已有的成绩 
		printf(" \t\t【输入000返回主界面】\n");
		printf(" \t\t请输入需要删除信息的学生姓名:");
		scanf("%s",stu_name);
		if(strcmp(stu_name,"000")==0)break;
		printf(" \t\t请输入需要删除信息的课程名:");
		scanf("%s",stu_course);
		if(strcmp(stu_course,"000")==0)break;
		for(i=0;i<scornum;i++)
			if(strcmp(stu_name,scor[i].name)==0 &&strcmp(stu_course,scor[i].course_name)==0){
				for(j=i;j<scornum-1;j++)
				{	strcpy(scor[j].clas,scor[j+1].clas);
					strcpy(scor[j].student_number,scor[j+1].student_number);
					strcpy(scor[j].name,scor[j+1].name);
					strcpy(scor[j].course_number,scor[j+1].course_number);
					strcpy(scor[j].course_name,scor[j+1].course_name);
					scor[j].score=scor[j+1].score;
				}
				printf(" \t\t删除成功!"); 
				getch();
				scornum--;
				system("cls");
				WriteData(); //修改后一定要写入文档 
			}
	}
} 

/*修改信息*/
void edit()
{	char stu_name[10];
	char stu_course[10];//根据姓名和课程号删除 
	int i,j,t;
	while(1){
		system("cls");
		scorelist();//首先展示已有的成绩 
		printf(" \t\t【输入000返回主界面】\n");
		printf(" \t\t请输入需要编辑信息的学生姓名:");
		scanf("%s",stu_name);
		if(strcmp(stu_name,"000")==0)break;
		printf(" \t\t请输入需要编辑信息的课程名:");
		scanf("%s",stu_course);
		if(strcmp(stu_course,"000")==0)break;
		for(i=0;i<scornum;i++)	
			if(strcmp(stu_name,scor[i].name)==0 &&strcmp(stu_course,scor[i].course_name)==0)
			{printf("\t\t请输入学生该课程的新成绩:"); 
			 scanf("%d",&t);    //覆盖原来成绩 
			 scor[i].score=t;
			}
				printf(" \t\t修改成功!"); 
				getch();
				WriteData();
		edit();		 }
} 

/*二级统计菜单*/
void tongji()
    { system("cls");
	printf("\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n") ;
	printf("\t\t┃        学生成绩统计界面          ┃\n");    
	printf("\t\t┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n");
	printf("\t\t┃  0. 退出界面                     ┃\n");  
	printf("\t\t┃  1. 数学统计结果                 ┃\n"); 
	printf("\t\t┃  2. 语文统计结果                 ┃\n");
	printf("\t\t┃  3. 英语统计结果                 ┃\n");
	printf("\t\t┃  4. 总分统计结果                 ┃\n");
	printf("\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
	printf("\t\t请输入要选择的功能编号:");
	int optfind = 0;
	scanf("%d", &optfind);
	switch (optfind)
	{
	case 1:
	    Math();
		break;
	case 2:
	    Chinese();
		break;
	case 3:
	    English();
		break;
	case 4:
	    sum();
		break;
	default:
		break;
}}

/*数学统计结果*/
void Math(){
	float avg=0,sum=0,max=0,min=100,tongguo;
	int i,j=0,Pass=0,y,unPass=0;
	char back[100];
	 system("cls");
    for(i=0;i<scornum;i++)
    {if(strcmp(scor[i].course_number,"C1002")==0)
	{     j++;
	   if(scor[i].score>=60){Pass++;}
	   else  {unPass++;}
	   if(max<=scor[i].score)
	   {max=scor[i].score;}
	   if(min>=scor[i].score)
	    {min=scor[i].score;}
	   sum=sum+scor[i].score;
	}}avg=sum/j;
	tongguo=Pass*1.0/j*100; 
	printf("数学考试成绩分析\t\t\n");
	printf("通过数学考试人数:\t%d\n",Pass);
	printf("没有通过数学考试人数:\t%d\n",unPass);
	printf("数学考试合格率:\t%.2f%%\n",tongguo);
	printf("数学平均分:\t%0.2f\n",avg);
    printf("数学最高分:\t%0.2f\n", max);
	printf("数学最低分:\t%0.2f\n\n", min);
   printf("\t\t%-10s%-10s%-10s%-10s%-15s%-6s\n","班级","学号","姓名","课程号","课程名","分数"); 
    for(y=0;y<scornum;y++)
   	 {	if(strcmp(scor[y].course_number,"C1002")==0)
     {   printf("\t\t%-10s%-10s%-10s%-10s%-15s%-6.1f\n",
		scor[y].clas,scor[y].student_number,scor[y].name,scor[y].course_number,scor[y].course_name,scor[y].score);
     }
   	 }
    printf(" \t\t【输入000返回上一级界面】\n");
    scanf("%s",back);
	if(strcmp(back,"000")==0) 
	 tongji(); 
}

/*语文统计结果*/
void Chinese(){
	float avg=0,sum=0,max=0,min=100,tongguo;
	int i,j=0,Pass=0,y,unPass=0;
	char back[100];
	 system("cls");
    for(i=0;i<scornum;i++)
    {if(strcmp(scor[i].course_number,"C1001")==0)
	{     j++;
	   if(scor[i].score>=60){Pass++;}
	   else  {unPass++;}
	   if(max<=scor[i].score)
	   {max=scor[i].score;}
	   if(min>=scor[i].score)
	    {min=scor[i].score;}
	   sum=sum+scor[i].score;
	}}avg=sum/j;
	tongguo=Pass*1.0/j*100; 
	printf("语文考试成绩分析\n");
	printf("通过语文考试人数:\t%d\n",Pass);
	printf("没有通过语文考试人数:\t%d\n",unPass);
	printf("语文考试合格率:\t%.2f%%\n",tongguo);
	printf("语文平均分:\t%0.2f\n",avg);
    printf("语文最高分:\t%0.2f\n", max);
	printf("语文最低分:\t%0.2f\n\n", min);
	printf("\t\t%-10s%-10s%-10s%-10s%-15s%-6s\n","班级","学号","姓名","课程号","课程名","分数"); 
	 for(y=0;y<scornum;y++)
   	 {	if(strcmp(scor[y].course_number,"C1001")==0)
     {   printf("\t\t%-10s%-10s%-10s%-10s%-15s%-6.1f\n",
		scor[y].clas,scor[y].student_number,scor[y].name,scor[y].course_number,scor[y].course_name,scor[y].score);
     }
   	 }
    printf(" \t\t【输入000返回上一级界面】\n");
    scanf("%s",back);
	if(strcmp(back,"000")==0) 
	 tongji(); 
}

/*英语统计结果*/
void English(){
	float avg=0,sum=0,max=0,min=100,tongguo;
	int i,j=0,Pass=0,y,unPass=0;
	char back[100];
	 system("cls");
    for(i=0;i<scornum;i++)
    {if(strcmp(scor[i].course_number,"C1003")==0)
	{     j++;
	   if(scor[i].score>=60){Pass++;}
	   else  {unPass++;}
	   if(max<=scor[i].score)
	   {max=scor[i].score;}
	   if(min>=scor[i].score)
	    {min=scor[i].score;}
	   sum=sum+scor[i].score;
	}}avg=sum/j;
	tongguo=Pass*1.0/j*100; 
	printf("英语考试成绩分析\n");
	printf("通过英语考试人数:\t%d\n",Pass);
	printf("没有通过英语考试人数:\t%d\n",unPass);
	printf("英语考试合格率:\t%.2f%%\n",tongguo);
	printf("英语平均分:\t%0.2f\n",avg);
    printf("英语最高分:\t%0.2f\n", max);
	printf("英语最低分:\t%0.2f\n\n", min);
	printf("\t\t%-10s%-10s%-10s%-10s%-15s%-6s\n","班级","学号","姓名","课程号","课程名","分数"); 
 for(y=0;y<scornum;y++)
   	 {	if(strcmp(scor[y].course_number,"C1003")==0)
     {   printf("\t\t%-10s%-10s%-10s%-10s%-15s%-6.1f\n",
		scor[y].clas,scor[y].student_number,scor[y].name,scor[y].course_number,scor[y].course_name,scor[y].score);
     }
   	 }
    printf(" \t\t【输入000返回上一级界面】\n");
    scanf("%s",back);
	if(strcmp(back,"000")==0) 
	 tongji(); 
}

/*总分统计结果*/
void sum()
{   int i,y,j[100]={0},b=0,d=0;
	char name[10]={0},stu_num[10]={0},clas[10]={0}; 
    float a[100],c=0,w,e;
    char back[100]; 
	 system("cls");
	 printf("\t\t\t考试成绩总分分析\n");
	 printf("\t\t%-10s%-10s%-10s%-10s%-10s%-10s\n","序号","班级","学号","姓名","总分","录入科目数");
	for(y=0;y<scornum;y++)
	 {if(scor[y].score==-1)
	     continue;
	 a[y]=scor[y].score;
	  j[y]=1;
	 for(i=y+1;i<scornum;i++)  
   	 {if(strcmp(scor[y].student_number,scor[i].student_number)==0)
     {    a[y]+=scor[i].score;
          j[y]++;
		  scor[i].score=-1; 
          }}}
	for(y=0;y<scornum;y++)
	 {if(scor[y].score==-1)  continue;}
  for(i=y+1;i<scornum;i++) 
	 {
	 if(a[y]>a[i])
	 { 
	 strcpy(scor[100].clas,scor[i].clas);
	 strcpy(scor[i].clas,scor[y].clas);
	 strcpy(scor[y].clas,scor[100].clas);
	 strcpy(scor[100].student_number,scor[i].student_number);
	 strcpy(scor[i].student_number,scor[y].student_number);
	 strcpy(scor[y].student_number,scor[100].student_number);	
	 strcpy(scor[100].name,scor[i].name);
	 strcpy(scor[i].name,scor[y].name);
	 strcpy(scor[y].name,scor[100].name);
	 c=a[y];a[y]=a[i];a[i]=c;
	 d=j[y];j[y]=j[i];j[i]=d;
	 }}
	 for(y=0;y<scornum;y++)
	 {if(scor[y].score==-1)  continue;
	 printf("\t\t%-10d%-10s%-10s%-10s%-10.1f%-10d\n",++b,scor[y].clas,scor[y].student_number,scor[y].name,a[y],j[y]);}
     printf(" \t\t【输入000返回上一级界面】\n");
    scanf("%s",back);
	if(strcmp(back,"000")==0) 
	 tongji(); 
}

int main()
{
	Welcome();
	Password();
	WriteData();// 该指令用于自动生成文档,执行一次后,就可以注释掉,如果不注释,则每次运行后都会覆盖掉修改的数据 
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值