⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 学生成绩管理.cpp

📁 学生成绩管理 学生成绩管理软件 实现学生分班输入成绩
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//
void show2()                       //资料操作的显示
{   
	printf("下面为%s的全部资料.\n\n",name);
	printf("   学号      姓名 性别  英语   高数   线数   毛论   物理   体育   法律   电路  总分    平均\n");
	fp=fopen(name,"rb");
	for(i=0;i<N;i++)
		if(fread(&stu[i],sizeof(struct student),1,fp)==1)
		{   
			printf("\n%s%7s  %2s",stu[i].num,stu[i].name,stu[i].sex);
			for(j=0;j<M;j++)
				printf("   %3.1f",stu[i].score[j]);
			printf("  %3.1f",stu[i].total);
			printf("   %3.1f",stu[i].average);
		}
		else 
			break;
	printf("\n");
}//

/////////////////////////////////////////////////////////////////////
//
void arrange()               //资料按平均分排序
{   
	int n;
	char m[1],t[1];

	while(1)
	{
		system("cls");                   //清屏后选择操作   
		printf("\n\t\t请你选择操作: \n\t\t\t\t1.将学生资料按平均分排序\n \n\t\t\t\t0.退出:\t");   
		scanf("%s",t);
		if(strlen(t)>1)                    //判断输入是否合法
		{
			printf("\n\t\t输入不合法,请重新选择!");
			continue;
		}
		switch(t[0])                       //对输入的选择操作菜单进行判断
		{  
		case '1' :printf("\n\t\t请输入要排序的班级:");    
		          while(1)
				  {   
					  scanf("%s",name);          //输入文件名并判断是否存在
					  if((fp=fopen(name,"rb"))==NULL)
					  {
						  printf("不存在你所输入的班级,请重新输入:");
						  continue;
					  }
					  else 
						  break;
				  }
				  for(i=0;i<N;i++)                    //先逐个读资料
				  {
					  if(fread(&stu[i],sizeof(struct student),1,fp)==1)
						  ++n;                           //计数器
					  else
						  break;
				  }
				  n=i;                                     //总数记录  
				  for(i=0;i<n;i++)                          //对资料进行排序
					  for(j=i+1;j<n;j++)
						  if(stu[i].average<stu[j].average)         //定义一个临时结构变量
						  {
							  temp=stu[i];
							  stu[i]=stu[j];
							  stu[j]=temp;
						  }
				  system("cls");                        //清屏后显示排序结果
				  printf("按平均分进行排序后的%s的全部成绩为:\n\n",name);
				  printf("   学号      姓名 性别  英语   高数   线数   毛论   物理   体育   法律   电路  总分    平均  名次\n");
				  fp=fopen(name,"wb");        
				  for(i=0;i<n;i++)
				  {   
					  fwrite(&stu[i],sizeof(struct student),1,fp);
					  printf("\n%s%7s  %2s",stu[i].num,stu[i].name,stu[i].sex);
					  for(j=0;j<M;j++)
						  printf("   %3.1f",stu[i].score[j]);
					  printf("  %3.1f",stu[i].total);
					  printf("   %3.1f",stu[i].average);
					  printf("    %d\n",i+1);
				  }
				  printf("\n\n");
				  printf("                    ***************************************************   \n\n");
				  printf("                                已经成功将排序后的结果存储!               \n\n");
				  printf("                    ***************************************************   \n\n");
				  fclose(fp);                            //关闭指针
				  printf("是否要进行其它班的排序?(y/n)\t");           //是否继续其它班的排序
				  while(1)
				  {
					  scanf("%s",m);                          //判断输入是否合法
					  if(strlen(m)>1)
					  {
						  printf("输入不合法,请重新输入(y/n):\t");
						  continue;
					  }
					  if(m[0]=='y')                            //判断要求继续进行其它班的排序
						  break;
					  else if(m[0]=='n')                          //判断要求中断,显示是否继续函数
						  go_on();
					  else                                       //输入不合法,重新输入
					  {
						  printf("输入不合法,请重新输入(y/n):\t");
						  continue;
					  }
				  }
				  break;
		case '0' :go_on();                      //操作要求中断,显示是否继续函数
		          break;
		default  :printf("\n\t\t输入不合法,请重新选择!");                //输入不合法,重新输入            
		}
	}
}//

/////////////////////////////////////////////////////////////////////////
//
void add()                     //单个资料增加
{   
	int h=0,k;
	char l[1],m[1],t[1];

	printf("\n\t\t请输入要增加的学生所在班级:");
	while(1)
	{	
		scanf("%s",name);                        //输入文件名后判断是否存在
		if((fp=fopen(name,"rb"))==NULL)
		{   
			printf("\n\t不存在你所输入的班级,请确认后重新输入:");
		    continue;
		}
		else
		{
			for(i=0;i<N;i++)                       //先逐个读取资料
				if(fread(&stu[i],sizeof(struct student),1,fp)==1)h++;
			fp=fopen(name,"ab");                      //重新打开文件,以追加的方式
			break;
		}
	}
	while(1)
	{
		system("cls");                           //清屏后显示操作菜单
		printf("\n\t\t请你选择操作: \n\t\t\t\t1.增加学生资料\n \n\t\t\t\t0.退出:\t");   
		scanf("%s",t);
		if(strlen(t)>1)                          //判断输入的合法性
		{
			printf("\n\t\t输入不合法,请重新选择!");
			continue;
		}
		switch(t[0])                             //对输入合法的操作
		{  
		case '1' :printf("\n\t请输入要增加的学生的资料:\n");     //录入要增加的学生资料
			      while(1)
				  {   
					  printf("学号(10位)");
					  scanf("%s",temp.num);
					  k=0;
					  if(strlen(temp.num)!=10)
					  {
						  printf("输入不合法,请重新输入!\n");
						  continue;
					  }
					  for(i=0;i<h;i++)
						  if(strcmp(stu[i].num,temp.num)==0)
						  {
							  printf("学号重复,请重新输入!\n");
							  k=1;
							  break;
						  }
						  if(k==1)
							  continue;
						  if(k==0)
							  break;
				  }
				  printf("姓名(中文):");
				  scanf("%s",temp.name);
				  while(1)
				  {  
					  printf("性别(1.男 2.女):");
					  scanf("%s",l);
					  if(strlen(l)>1)
					  {
						  printf("输入不合法,请重新输入!\n");
						  continue;
					  }
					  if(l[0]!='1'&&l[0]!='2')
					  {
						  printf("输入不合法,请重新输入!\n");
						  continue;
					  }
					  else if(l[0]=='1')
					  {
						  strcpy(temp.sex,"男");
						  break;
					  }
					  else if(l[0]=='2')
					  {
						  strcpy(temp.sex,"女");
						  break;
					  }
				  }
				  temp.total=0;
				  for(j=0;j<M;j++)
				  {
					  while(1)
					  {	
						  printf("分数%d(0-100):",j+1);
						  scanf("%f",&temp.score[j]);
						  if(temp.score[j]>100||temp.score[j]<0)
						  {
							  printf("输入不合法,请重新输入!\n");
							  continue;
						  }
						  else 
							  break;
					  }
					  temp.total+=temp.score[j];
				  }
				  temp.average=float(temp.total/M);
				  fwrite(&temp,sizeof(struct student),1,fp);          //写入打开的文件
				  fclose(fp);
				  printf("                        ***************************************************   \n\n");
				  printf("                                      你已成功增加了一名学生资料!             \n\n");
				  printf("                        ***************************************************   \n\n");
				  printf("\n\t是否继续增加学生资料?(y/n)\t");       //显示是否继续增加操作
				  while(1)
				  {
					  scanf("%s",m);                  //判断输入操作的合法性
					  if(strlen(m)>1)
					  {
						  printf("输入不合法,请重新输入(y/n):\t");
						  continue;
					  }
					  if(m[0]=='y')
					  {
						  fp=fopen(name,"ab");
						  break;
					  }
					  else if(m[0]=='n')
						  go_on();
					  else
					  {
						  printf("输入不合法,请重新输入(y/n):\t");
						  continue;
					  }
				  }
				  break;
		case '0' :go_on();                        //显示是否继续函数
			      break;
		default  :printf("\n\t\t输入不合法,请重新选择!");
		}
	}
}//

/////////////////////////////////////////////////////////////////////////////
//
void find()                    //单个资料查询
{   
	char n[11],t[1],na[11],m[1];
	int h=0,flag=0;

	printf("\n\t\t请输入要查询的学生所在班级:");                 //输入文件名然后判断正确性
	while(1)
	{   
		scanf("%s",name);
		if((fp=fopen(name,"rb"))==NULL)
		{
			printf("\n\t\t不存在你所输入的班级,请重新输入:");
			continue;
		}
		else
		{   
			fp=fopen(name,"rb");                  //打开文件逐个读取
			for(i=0;i<N;i++)
				if(fread(&stu[i],sizeof(struct student),1,fp)==1)++h;
			while(1)                              //选择所需操作
			{
				printf("\n\t\t请你选择查询方式: \n\t\t\t\t1.学生的学号\n \n\t\t\t\t2.学生的姓名\n \n\t\t\t\t0.退出:\t");   
				scanf("%s",t);
				if(strlen(t)>1)                      //判断操作的正确性
				{
					printf("\n\t\t输入不合法,请重新选择!");
					continue;
				}
				switch(t[0])                            //对输入的操作进行选择
				{  
				case '1' :printf("\n\t请输入你要查询的学生的学号:");
					      while(1)
						  {   
							  scanf("%s",n);              //学号查询方式
							  if(strlen(n)!=10)
								  printf("\n\t\t输入不合法,请重新输入:");
							  else 
								  break;
						  }
						  for(i=0;i<h;i++)                //循环寻找匹配学号后显示
						  {   
							  if(strcmp(n,stu[i].num)==0)
							  {   
								  printf("\n你所要查询的学生资料如下:\n\n");
								  printf("   学号     姓名  性别  英语   高数   线数   毛论   物理   体育   法律   电路  总分    平均  名次\n");
								  printf("\n%s%7s  %2s",stu[i].num,stu[i].name,stu[i].sex);
								  for(j=0;j<M;j++)
									  printf("   %3.1f",stu[i].score[j]);
								  printf("  %3.1f",stu[i].total);
								  printf("   %3.1f",stu[i].average);
								  printf("   %d\n\n",i+1);
								  flag=1;
							  }
						  }
						  if(flag==0)                            //判断是否存在输入的学生学号
						  {
							  printf("\n\t\t\t  不存在该学生的资料!\n");
							  continue;
						  }
						  break;
				case '2' :printf("\n\t请输入你要查询的学生的姓名:");
					      scanf("%s",na);                       //用学生的姓名进行查找
						  for(i=0;i<h;i++)
						  {   
							  if(strcmp(na,stu[i].name)==0)             //循环查找匹配的学生然后显示学生资料
							  {   
								  printf("\n你所要查询的学生资料如下:\n\n");
								  printf("   学号     姓名  性别  英语   高数   线数   毛论   物理   体育   法律   电路  总分    平均  名次\n");
								  printf("\n%s%7s  %2s",stu[i].num,stu[i].name,stu[i].sex);
								  for(j=0;j<M;j++)
									  printf("   %3.1f",stu[i].score[j]);
								  printf("  %3.1f",stu[i].total);
								  printf("   %3.1f",stu[i].average);
								  printf("   %d\n\n",i+1);
								  flag=1;
							  }
						  }
						  if(flag==0)                          //判断是否存在输入的学生姓名
						  {
							  printf("\n\t\t\t  不存在该学生的资料!\n");
							  continue;
						  }
						  break;
				case '0' :go_on();                        //显示是否继续函数
					      break;
				default  :printf("\n\t\t输入不合法,请重新选择!");                //输入不合法,重新输入
				}
				printf("\n\t\t是否继续查询?(y/n)");              //是否继续查询操作
				while(1)
				{
					scanf("%s",m);                           //判断输入的正确性
					if(strlen(m)>1)
					{
						printf("输入不合法,请重新输入(y/n):\t");
						continue;
					}
					if(m[0]=='y')
						break;
					else if(m[0]=='n')
						go_on();
					else
					{
						printf("输入不合法,请重新输入(y/n):\t");
						continue;
					}
				}
			}
		}
	}
	fclose(fp);                            //关闭指针
	printf("\n");
	go_on();                                //显示是否继续函数
}//

//////////////////////////////////////////////////////////////////////////
//
void modify()                    //单个资料修改
{   
	char n[11],l[1],m[1];                //定义字符串变量
	int k,s,h=0,flag=0;                     //定义整数型变量
 
	printf("\n\t\t请输入要修改的学生所在班级:");
	while(1)
	{           
		scanf("%s",name);                        //输入文件名并进行判断
		if((fp=fopen(name,"rb"))==NULL)
		{
			printf("\n\t\t不存在你所输入的班级,请重新输入:");
			continue;
		}
		else
			break;
	}
	while(1)
	{
		system("cls");              //清屏后显示所有资料
		show2();
		h=i;
		printf("\n\t请你在上面选择你所要修改的学生学号:");
		while(1)
		{   
			scanf("%s",n);                  //选择学号
			if(strlen(n)!=10)
				printf("\n\t\t输入不合法,请重新输入:");
			else 
				break;
		}
		for(i=0;i<h;i++)                  //找到匹配资料显示
			if(strcmp(n,stu[i].num)==0)
			{   
				k=i;
				system("cls");
				printf("\n你所要修改的学生原先资料如下:\n\n");
				printf("   学号     姓名  性别  英语   高数   线数   毛论   物理   体育   法律   电路  总分    平均  名次\n");
				printf("\n%s%7s  %2s",stu[i].num,stu[i].name,stu[i].sex);
				for(j=0;j<M;j++)
					printf("   %3.1f",stu[i].score[j]);
				printf("  %3.1f",stu[i].total);
				printf("   %3.1f",stu[i].average);
				printf("    %d\n",i+1);
				flag=1;
				*stu[i].num='\0';                 //将其学号清除,以便可以继续输入该学号
				break;
			}
		if(flag==0)                                 //不存在学生的资料
		{   
			printf("\n\t\t资料不存在你要找的学生!");
			printf("\n");
			go_on();
		}
		printf("\n请重新输入要修改的学生的资料:\n");
		while(1)                                    //重新录入新的资料
		{   
			printf("学号(10位):");
			scanf("%s",temp.num);
			s=0;
			if(strlen(temp.num)!=10)
			{   
				printf("输入不合法,请重新输入!\n");
				continue;
			}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -