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

📄 学生成绩管理.cpp

📁 学生成绩管理 学生成绩管理软件 实现学生分班输入成绩
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			for(i=0;i<h;i++)
			{
				if(strcmp(stu[i].num,temp.num)==0)
				{
					printf("学号已存在,请重新输入!\n");
					s=1;
					break;
				}
			}
			if(s==1)continue;
			if(s==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");
				else 
					break;
			}
			temp.total+=temp.score[j];
		}
		temp.average=float(temp.total/M);
		stu[k]=temp;
		fwrite(&stu[k],sizeof(struct student),1,fp);         //将修改的资料写入文件
		fclose(fp);
		fp=fopen(name,"wb");                                //打开可写文件将资料重新写一遍
		for(i=0;i<h;i++)
			fwrite(&stu[i],sizeof(struct student),1,fp);
		fclose(fp);
		printf("                        ***************************************************   \n\n");
		printf("                                      已成功修改了一名学生资料!               \n\n");
		printf("                        ***************************************************   \n\n");
		printf("\t是否要继续修改另一个学生?(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;
			}
		}
    }
}//

/////////////////////////////////////////////////////////////////////////
//
void del()                    //单个资料删除
{   
	int m,n,flag=0,flg=0;
	char nu[11],b[1],l[1];
	
	printf("\n\t\t请输入所要删除的学生所在班级:");
	while(1)                           //输入文件名并判断是否存在
	{   
		scanf("%s",name);
		if((fp=fopen(name,"rb"))==NULL)
		{
			printf("不存在你所输入的班级,请重新输入:");
			continue;
		}
		else 
			break;
	}
	while(1)
	{
		system("cls");                //清屏后显示所有资料
		show2();
		n=i;
		printf("\n请在上面资料里面选择你要删除的学生的学号:");
		while(1)
		{	
			scanf("%s",nu);                        //选择输入的学生学号并进行判断
			if(strlen(nu)!=10)
			{
				printf("输入不合法,请重新输入:");
				continue;
			}
			else 
				break;
		}
		for(i=0;i<n;i++)                              //循环查找匹配资料并显示
		{   
			if(strcmp(nu,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);
				flg=1;
			}
		}
		if(flg==0)
		{
			printf("\n\t\t\t  不存在该学生的资料!\n");
			go_on();
		}
		printf("\t\t是否删除?(y/n)");                  //确认是否删除
		while(1)
		{   
			scanf("%s",l);                      //判断输入的合法性
			if(strlen(l)>1)
			{
				printf("\n\t输入不合法,请重新输入!(y/n)");
				continue;
			}
			if(l[0]=='y')                       //删除资料
			{
				for(flag=1,i=0;flag&&i<n;i++)
				{
					if(strcmp(nu,stu[i].num)==0)
					{
						for(m=i;m<n-1;m++)
						{   
							strcpy(stu[m].num,stu[m+1].num);
							strcpy(stu[m].name,stu[m+1].name);
							strcpy(stu[m].sex,stu[m+1].sex);
							for(j=0;j<M;j++)
								stu[m].score[j]=stu[m+1].score[j];
							stu[m].total=stu[m+1].total;
							stu[m].average=stu[m+1].average;
						}
						flag=0;
					}
				}
				if(!flag)                 
					n=n-1;
				else                             //不存在资料
				{
					printf("\n\t\t\t  不存在该学生的资料!\n");
					go_on();
				}
				system("cls");                       //删除后显示新的资料
				printf("                        ***************************************************   \n\n");
				printf("                                      已成功删除一名学生资料!                 \n\n");
				printf("                        ***************************************************   \n\n");
				printf("下面是新的%s的资料:\n\n",name);
				fp=fopen(name,"wb");
				for(i=0;i<n;i++)
					fwrite(&stu[i],sizeof(struct student),1,fp);
				fclose(fp);
				fp=fopen(name,"rb");
				printf("   学号     姓名  性别  英语   高数   线数   毛论   物理   体育   法律   电路  总分    平均  名次\n");
				for(i=0;fread(&stu[i],sizeof(struct student),1,fp)!=0;i++)
				{   
					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);
				}
				fclose(fp);                    //关闭指针退出
				break;
			}
			else if(l[0]=='n')                    //不删除退出
			{
				printf("\n\t\t该学生资料仍被保留!");
				break;
			}
			else                                      //输入不合法重新输入
				printf("\n\t输入不合法,请重新输入!(y/n)");
		}
		printf("\n\n\t是否要继续进行删除本班的学生资料?(y/n):\t");
		while(1)                                  //显示是否继续删除并判断输入合法性
		{
			scanf("%s",b);
			if(strlen(b)>1)
			{
				printf("输入不合法,请重新输入(y/n):\t");
				continue;
			}
			if(b[0]=='y')
				break;
			else if(b[0]=='n')
				go_on();
			else
			{
				printf("输入不合法,请重新输入(y/n):\t");
				continue;
			}
		}
	}
}//

///////////////////////////////////////////////////////////////////////////
//
void del2()                           //整个资料删除
{
	char mingzi[12];

	printf("\n\t请输入要删除的班级(如:04计算机1班):");
	scanf("%s",name);                 //输入文件名并判断是否存在
	if((fp=fopen(name,"rb"))==NULL)
	{
		printf("\n\t不存在你所输入的班级的资料!");
		go_on();
	}
	else
	{                                  //删除整个资料
		strcpy(mingzi,name);
		fclose(fp);
		remove(name);
		printf("                        ***************************************************   \n\n");
		printf("                                 已成功删除的%s全部学生资料!               \n\n",mingzi);
		printf("                        ***************************************************   \n\n");
		go_on();
	}
}//

/////////////////////////////////////////////////////////////////////////////
//
void statist()                            //资料统计
{   
	int h=0,c[8];
	float high[8],low[8],ave[8],sum[8];

	for(j=0;j<M;j++)                //对每个分数不及格的人数先初始化
		c[j]=0;	
	printf("\n\t\t请输入要统计的班级:");
	while(1)                        //输入文件并进行判断是否存在	
	{   
		scanf("%s",name);
		if((fp=fopen(name,"rb"))==NULL)
		{
			printf("\n\t不存在你所输入的班级,请重新输入:");
			continue;
		}
		else 
			break;
	}
	for(i=0;i<N;i++)                    //先逐个读取资料
		if(fread(&stu[i],sizeof(struct student),1,fp)==1)
			++h;                    //计数器
	for(j=0;j<M;j++)                      //求各科的平均分
	{   
		sum[j]=0;
		for(i=0;i<h;i++)
			sum[j]+=stu[i].score[j];
		ave[j]=sum[j]/h;
	}
	for(j=0;j<M;j++)                           //求各科的最高分
	{   
		high[j]=0;
		for(i=0;i<h;i++)
			if(stu[i].score[j]>high[j])
				high[j]=stu[i].score[j];
	}
	for(j=0;j<M;j++)                               //求各科的最低分
	{   
		low[j]=100;
		for(i=0;i<h;i++)
			if(stu[i].score[j]<low[j])
				low[j]=stu[i].score[j];
	}
	for(j=0;j<M;j++)                                //求不及格人数
		for(i=0;i<h;i++)
			if(stu[i].score[j]<60)
				++c[j];
	printf("\n\t\t目前%s有资料%d人!\n\n",name,h);               //显示结果
	printf("\t 课程名称\t\t平均分\t\t最高分\t\t最低分\t\t不及格人数\n");
	printf("\t1大学英语(2)\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[0],high[0],low[0],c[0]);
	printf("\t2高等数学(下)\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[1],high[1],low[1],c[1]);
	printf("\t3线性代数\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[2],high[2],low[2],c[2]);
	printf("\t4毛泽东思想概论\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[3],high[3],low[3],c[3]);
	printf("\t5大学物理-a\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[4],high[4],low[4],c[4]);
	printf("\t6大学体育(2)\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[5],high[5],low[5],c[5]);
	printf("\t7法律基础\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[6],high[6],low[6],c[6]);
	printf("\t8电路与电子技术\t\t %3.1f\t\t %2.1f\t\t %2.1f\t\t %5d\n",ave[7],high[7],low[7],c[7]);
	fclose(fp);                              //关闭指针
	go_on();                                    //显示是否继续函数
}//

///////////////////////////////////////////////////////////////////////////////////
//
void imformation()                             //作者信息
{
	system("cls");                       //清屏后显示
	printf("\n\n\n\n\n\n\t\t\t\t应用程序名:学生成绩管理成绩\n");
	printf("\n\t\t\t\t作者姓名: 范创海\n");
	printf("\n\t\t\t\t所在学校: 广州大学\n");
	printf("\n\t\t\t\t所在院系: 信息与机电工程学院计算机系\n");
	printf("\n\t\t\t\t所在班级: 04计算机6班\n");
	printf("\n\t\t\t\tQQ 号码 : 67943505\n");
	printf("\n\t\t\t\t生成日期: 2005年12月1日\n");
	printf("\n\t\t\t\t----------------------------------\n");
	printf("\n\t\t\t\t\t版权所有  不得盗版\n");
	printf("\n\t\t\t\t----------------------------------\n");
	printf("\n\n");
	go_on();                                  //调用是否继续函数
}

///////////////////////////////////////////////////////////////////////////////////
//
void menu()                          //主界面菜单
{
	char t[1];

	void operate();
	
	printf("                  ********************                   *********************\n");
	printf("                                           欢迎进入                           \n\n");
    printf("                                       学生成绩管理系统                       \n");
	printf("                  ********************                   *********************\n\n");
	printf("广州大学信息与机电工程学院04计算机系\n");
    printf("       第一学年第二学期成绩\n\n");
	printf("本学期所修科目如下:\n\n");
    printf("      1大学英语(2) 2高等数学(下) 3线性代数 4毛泽东思想概论\n");
	printf("      5大学物理-a  6大学体育(2)  7法律基础 8电路与电子技术\n\n");
	printf("                             *              1.资料显示            \n"); 
	printf("                            * *                                   \n");
    printf("                           *   *            2.资料输入            \n");
	printf("                          *     *                                 \n");
	printf("                         *       *          3.资料操作            \n");
    printf("                          *     *                                 \n"); 
	printf("                           *   *            4.资料备份      6.关于作者\n");                   
    printf("                            * *                                   \n"); 
	printf("                             *              5.资料删除      0.退出\n\n");
	printf("------------------请在上面选择你所需要的操作:");
	while(1)
	{   
		scanf("%s",t);                              //输入操作并进行判断
		if(strlen(t)>1)
		{
			printf("------------------输入不合法,请重新输入:");
			continue;
		}
		switch(t[0])                                //对输入的操作进行判断找匹配的函数
		{  
		case '1' :show();break;
		case '2' :getin();break;
		case '3' :operate();break;
		case '4' :copy();break;
		case '5' :del2();break;
		case '6' :imformation();break;
		case '0' :exit1();break;
		default:printf("------------------输入不合法,请重新输入(0-4):");
		}
	}
}//

//////////////////////////////////////////////////////////////////////////////
//
void operate()                           //操作菜单
{   
	char t[1];

	system("cls");                                 //清屏后显示操作菜单
	printf("                     ***************************************************   \n\n");
	printf("                                  1.资料增加    2.资料删除                 \n\n");
	printf("                                  3.资料查询    4.资料修改                 \n\n");
	printf("                                  5.资料存储    6.资料统计                 \n\n");
	printf("                                  7.资料排序    8.返回主界面               \n\n");
	printf("                                  0.退出                                   \n\n");
	printf("                     ***************************************************   \n\n");
	printf("请在上面选择你所需要的资料操作命令:");
	while(1)                                 //输入操作并进行判断
	{   
		scanf("%s",t);
		if(strlen(t)>1)
		{
			printf("-------------输入不合法,请重新输入:");
			continue;
		}
		switch(t[0])                             //对输入的操作进行判断找匹配的函数    
		{  
		case '1' :add();break;
		case '2' :del();break;
		case '3' :find();break;
		case '4' :modify();break;
		case '5' :save2();break;
		case '6' :statist();break;
		case '7' :arrange();break;
		case '8' :system("cls");menu();break;
		case '0' :exit1();break;
		default:printf("------输入不合法,请重新输入!(0-8):");
		}
	}
}//

/////////////////////////////////////////////////////////////////////
//
int main(int argc, char* argv[])                      //主函数,调用主菜单
{
	menu();
	return 0;
}

⌨️ 快捷键说明

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