【CPP】C++程序设计大作业 学生成绩管理系统

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstring>
#include<fstream>
#include<cmath>
using namespace std;
void welcome()//菜单函数 
{
	cout<<"*******************************************************"<<endl;
	cout<<"*             欢迎使用学生成绩管理系统                 *"<<endl;
	cout<<"*                组长:张三                          *"<<endl;
	cout<<"*                组员:李四 王五                      *"<<endl;
   	cout<<"*              计算机2207班2022.12.1                  *"<<endl;
	cout<<"*           1、添加学生信息                           *"<<endl;
	cout<<"*           2、计算并录入每名学生的平均成绩           *"<<endl;
	cout<<"*           3、显示所有学生的所有信息                 *"<<endl;
	cout<<"*           4、按姓名查找学生成绩                     *"<<endl;
	cout<<"*           5、按学号查找学生成绩                     *"<<endl;
	cout<<"*           6、查找单科最高分和最高平均分             *"<<endl;
	cout<<"*           7、按平均分分数对学生排序                 *"<<endl;
	cout<<"*           8、显示一门课程的所有学生成绩             *"<<endl;
	cout<<"*           9、修改学生信息                           *"<<endl;
	cout<<"*          10、成绩水平分析                           *"<<endl;
	cout<<"*           0、退出                                   *"<<endl; 
	cout<<"*******************************************************"<<endl;
}
struct student//学生成绩结构体 
{
	string num;
	char name[50];
	float math;
	float English;
	float c;
	float physics;
	float average;
};
student input()//学生成绩输入函数 
{
	student stud;
	cin>>stud.num>>stud.name>>stud.math>>stud.English>>stud.c>>stud.physics;
	return stud;
}
void output(student stud)//学生成绩输出函数 
{
	cout<<setw(11)<<stud.num<<setw(20)<<stud.name<<setw(10)<<stud.math<<setw(10)<<stud.English<<setw(10)<<stud.c<<setw(10)<<stud.physics<<setw(10)<<stud.average<<endl;
}
int main()//主函数 
{
	int num1, num2, n, i, choise, determine, add_num=0, m, k=0, maxi, search_max_num, search_subject, search_analyzeint, math[4]={0}, English[4]={0}, c[4]={0}, physics[4]={0}, average[4]={0}, shuxue, yingyu, chengxu, wuli;
	char namex[20], name1[50];
	string numx, num3, string1;
	float max=0, a[50], t;
	student studs[50];
	ifstream  infile; 
    ofstream  outfile;
    infile.open("cj11.txt"); 
	infile>>n;
	for(i=0; i<n; i++)
	{  
    	infile>>studs[i].num; 
    	infile>>studs[i].name;   
		infile>>studs[i].math;
		infile>>studs[i].c;
		infile>>studs[i].English;
		infile>>studs[i].physics; 
	 }
	loop:system("cls");
	welcome();
	cout<<"请输入0-10选择功能:";
	cin>>choise;
	switch(choise)
	{
		case  0:cout<<"确定要退出吗?确定请扣1,继续查询请扣0"<<endl;//退出 
			    cin>>determine; 
			    if(determine==1) return 0;
			    else goto loop;
				break;
		case  1:cout<<"请输入要添加的学生人数:";//添加学生信息 
			    cin>>add_num;
			    cout<<"请依次输入每个学生的学号、姓名(拼音或英文形式、无空格)、数学成绩、英语成绩、程序设计成绩和物理成绩:"<<endl;
			    cout<<"(例:20221002222 Tom 100 100 100 100)"<<endl; 
			    for(i=0;i<add_num;i++) studs[n+i]=input();
			    cout<<"添加成功!";
				system("pause");
				goto loop;
				break; 
		case  2:for(i=n+add_num-1;i>=0;i--) studs[i].average=(studs[i].math+studs[i].English+studs[i].c+studs[i].physics)/4;//计算并录入每名学生的平均成绩 
				cout<<"已成功录入现有学生的平均成绩"<<endl;
				system("pause");
				goto loop;
				break;
		case  3:cout<<setw(11)<<"学号"<<setw(20)<<"姓名"<<setw(10)<<"数学"<<setw(10)<<"英语"<<setw(10)<<"程序"<<setw(10)<<"物理"<<setw(10)<<"平均"<<endl;//显示所有学生的信息 
		        for(i=n+add_num-1;i>=0;i--) studs[i].average=(studs[i].math+studs[i].English+studs[i].c+studs[i].physics)/4;
				for(i=0;i<n+add_num;i++) output(studs[i]);
		        system("pause");
		        goto loop;
		        break;
		case  4:cout<<"请输入要查询的学生姓名:";//按姓名查找学生成绩 
		        cin>>namex;
		        for(i=0;i<n+add_num;i++)
				{
			        m=strcmp(studs[i].name,namex);
		            if(m==0)
				    {
		       	        cout<<setw(11)<<"学号"<<setw(20)<<"姓名"<<setw(10)<<"数学"<<setw(10)<<"程序"<<setw(10)<<"英语"<<setw(10)<<"物理"<<setw(10)<<"平均"<<endl;
			            cout<<setw(11)<<studs[i].num<<setw(20)<<studs[i].name<<setw(10)<<studs[i].math<<setw(10)<<studs[i].English<<setw(10)<<studs[i].c<<setw(10)<<studs[i].physics<<setw(10)<<studs[i].average<<endl;
			            k++;
			        }
	            }
	            if(m!=0&&k==0) cout<<"查无此人!"<<endl;
	            k=0;
	            system("pause");
	            goto loop;
				break;
	    case  5:cout<<"请输入要查询的学生学号:";//按学号查找学生成绩 
	            cin>>numx;
	            k=0;
	            for(i=0;i<n+add_num;i++)
		            if(numx==studs[i].num){
		           	    cout<<setw(11)<<"学号"<<setw(20)<<"姓名"<<setw(10)<<"数学"<<setw(10)<<"程序"<<setw(10)<<"英语"<<setw(10)<<"物理"<<setw(10)<<"平均"<<endl;
			            cout<<setw(11)<<studs[i].num<<setw(20)<<studs[i].name<<setw(10)<<studs[i].math<<setw(10)<<studs[i].English<<setw(10)<<studs[i].c<<setw(10)<<studs[i].physics<<setw(10)<<studs[i].average<<endl;
				        k++;
					 }
			    if(k==0) cout<<"查无此人!"<<endl;
			    k=0;
			    system("pause");
			    goto loop;
				break;
		case  6:cout<<"查询数学最高分请扣1"<<endl<<"查询英语最高分请扣2"<<endl<<"程序设计最高分请扣3"<<endl<<"查询物理最高分请扣4"<<endl<<"平均成绩最高分请扣5"<<endl; //查找单科最高分和最高平均分
				cin>>search_max_num;
				switch(search_max_num)
				{
					case  1:for(i=0;i<n+add_num;i++)
					        {
			        			if(studs[i].math>max)
								{
				        			max=studs[i].math;
				        			maxi=i;
								}
						    }
			    			cout<<studs[maxi].name<<"的数学成绩最高:"<<max<<"分"<<endl; 
							max=0;
							break;
					case  2:for(i=0;i<n+add_num;i++)
					        {
			        			if(studs[i].English>max)
								{
				        			max=studs[i].English;
				        			maxi=i;
								}
						    }
			    			cout<<studs[maxi].name<<"的英语成绩最高:"<<max<<"分"<<endl; 
							max=0;
							break;
					case  3:for(i=0;i<n+add_num;i++)
			        		{
								if(studs[i].c>max)
								{
				        			max=studs[i].c;
				        			maxi=i;
							    }
							}
			    			cout<<studs[maxi].name<<"的程序设计成绩最高:"<<max<<"分"<<endl; 
							max=0;
							break;
					case  4:for(i=0;i<n+add_num;i++)
					        {
			        			if(studs[i].physics>max)
								{
				        			max=studs[i].physics;
				        			maxi=i;
								}
					    	}
			    			cout<<studs[maxi].name<<"的物理成绩最高:"<<max<<"分"<<endl; 
							max=0;
							break;
					case  5:for(i=n+add_num-1;i>=0;i--) studs[i].average=(studs[i].math+studs[i].English+studs[i].c+studs[i].physics)/4;
					        for(i=0;i<n+add_num;i++)
					        {
			        			if(studs[i].average>max)
								{
				        			max=studs[i].average;
				        			maxi=i;
								}
							}
			    			cout<<studs[maxi].name<<"的平均分最高:"<<max<<"分"<<endl;
				}
			    system("pause");
			    goto loop;
				break;
		case  7:for(i=n+add_num-1;i>=0;i--) studs[i].average=(studs[i].math+studs[i].English+studs[i].c+studs[i].physics)/4;//按平均分分数对学生进行排序 
		        for(i=0;i<n+add_num;i++)
				{
					a[i]=studs[i].average;
				}
				for(i=0;i<n+add_num-1;i++)
					for(int j=0;j<n+add_num-i-1;j++)
						if(a[j]<a[j+1])
						{
							t=a[j];
							a[j]=a[j+1];
							a[j+1]=t;
						}
				cout<<setw(11)<<"学号"<<setw(20)<<"姓名"<<setw(10)<<"数学"<<setw(10)<<"英语"<<setw(10)<<"程序"<<setw(10)<<"物理"<<setw(10)<<"平均"<<endl;
				for(i=0;i<n+add_num;i++)
				{
					for(int m=0;m<n+add_num;m++)
					{
						if(fabs(a[i]-studs[m].average)<1e-9){
							cout<<setw(11)<<studs[m].num<<setw(20)<<studs[m].name<<setw(10)<<studs[m].math<<setw(10)<<studs[m].English<<setw(10)<<studs[m].c<<setw(10)<<studs[m].physics<<setw(10)<<studs[m].average<<endl;
					    	}
					}
				}
				system("pause");
				goto loop;
				break;
		case  8:cout<<"查询数学成绩请扣1"<<endl<<"查询英语成绩请扣2"<<endl<<"查询程序设计成绩请扣3"<<endl<<"查询物理成绩请扣4"<<endl<<"查询平均成绩请扣5"<<endl; //显示一门课程的所有学生成绩
		        cin>>search_subject;
		        switch(search_subject)
				{
					case  1:cout<<setw(11)<<"学号"<<setw(20)<<"姓名"<<setw(10)<<"数学"<<setw(10)<<endl;
		                for(i=0;i<n+add_num;i++) cout<<setw(11)<<studs[i].num<<setw(20)<<studs[i].name<<setw(10)<<studs[i].math<<endl;
		                system("pause");
		                break;
					case  2:cout<<setw(11)<<"学号"<<setw(20)<<"姓名"<<setw(10)<<"英语"<<setw(10)<<endl;
		                for(i=0;i<n+add_num;i++) cout<<setw(11)<<studs[i].num<<setw(20)<<studs[i].name<<setw(10)<<studs[i].English<<endl;
		                system("pause");
		                break;
					case  3:cout<<setw(11)<<"学号"<<setw(20)<<"姓名"<<setw(10)<<"程序设计"<<setw(10)<<endl;
		                for(i=0;i<n+add_num;i++) cout<<setw(11)<<studs[i].num<<setw(20)<<studs[i].name<<setw(10)<<studs[i].c<<endl;
		                system("pause");
		                break;
					case  4:cout<<setw(11)<<"学号"<<setw(20)<<"姓名"<<setw(10)<<"物理"<<setw(10)<<endl;
		                for(i=0;i<n+add_num;i++) cout<<setw(11)<<studs[i].num<<setw(20)<<studs[i].name<<setw(10)<<studs[i].physics<<endl;
		                system("pause");
		                break;
					case  5:for(i=n+add_num-1;i>=0;i--) studs[i].average=(studs[i].math+studs[i].English+studs[i].c+studs[i].physics)/4;
				    	cout<<setw(11)<<"学号"<<setw(20)<<"姓名"<<setw(10)<<"平均成绩"<<setw(10)<<endl;
		                for(i=0;i<n+add_num;i++) cout<<setw(11)<<studs[i].num<<setw(20)<<studs[i].name<<setw(10)<<studs[i].average<<endl;
		                break;
				}
			    system("pause");
			    goto loop;
				break;
		case  9:cout<<"若想查询学号修改请扣1"<<endl<<"若想查询姓名修改请扣2"<<endl;//修改学生信息
		 		cin>>num1;
				switch(num1)
				{
					case  1:cout<<"请输入想修改信息的学生的学号:";
					        cin>>string1;
					        for(i=0;i<n+add_num;i++)
							{
								if(string1==studs[i].num)
								{
									cout<<"修改姓名扣1"<<endl<<"修改数学成绩扣2"<<endl<<"修改英语成绩扣3"<<endl<<"修改程序设计成绩扣4"<<endl<<"修改物理成绩扣5"<<endl;
									cin>>num2;
									switch(num2)
									{
										case 1:cout<<"请输入修改后的姓名:";
												cin>>name1;
												strcpy(studs[i].name,name1);
												cout<<"修改完毕";
												system("pause"); 
												goto loop;break;
										case 2:cout<<"请输入修改后的数学成绩:";
												cin>>shuxue;
												studs[i].math=shuxue;
												cout<<"修改完毕";
												system("pause");
												goto loop;break;
										case 3:cout<<"请输入修改后的英语成绩:";
												cin>>yingyu;
												studs[i].English=yingyu;
												cout<<"修改完毕";
												system("pause");
												goto loop;break;
										case 4:cout<<"请输入修改后的程序设计成绩:";
												cin>>chengxu;
												studs[i].c=chengxu;
												cout<<"修改完毕";
												system("pause");
												goto loop;break;
										case 5:cout<<"请输入修改后的物理成绩:";
												cin>>wuli;
												studs[i].physics=wuli;
												cout<<"修改完毕";
												system("pause");
												goto loop;break;
										default:cout<<"请输入正确的数字。"; 
									}
								}
								
							}
							cout<<"查无此人!!!";
							system("pause");
							goto loop;
							break;
					case  2:cout<<"请输入想修改信息的学生的姓名:";
					        cin>>string1;
					        for(i=0;i<n+add_num;i++)
							{
								if(string1==studs[i].name)
								{
									cout<<"修改学号扣1"<<endl<<"修改数学成绩扣2"<<endl<<"修改英语成绩扣3"<<endl<<"修改程序设计成绩扣4"<<endl<<"修改物理成绩扣5"<<endl;
									cin>>num2;
									switch(num2)
									{
										case 1:cout<<"请输入修改后的学号:";
												cin>>num3;
												studs[i].num=num3;
												cout<<"修改完毕";
												system("pause"); 
												goto loop;break;
										case 2:cout<<"请输入修改后的数学成绩:";
												cin>>shuxue;
												studs[i].math=shuxue;
												cout<<"修改完毕";
												system("pause");
												goto loop;break;
										case 3:cout<<"请输入修改后的英语成绩:";
												cin>>yingyu;
												studs[i].English=yingyu;
												cout<<"修改完毕";
												system("pause");
												goto loop;break;
										case 4:cout<<"请输入修改后的程序设计成绩:";
												cin>>chengxu;
												studs[i].c=chengxu;
												cout<<"修改完毕";
												system("pause");
												goto loop;break;
										case 5:cout<<"请输入修改后的物理成绩:";
												cin>>wuli;
												studs[i].physics=wuli;
												cout<<"修改完毕";
												system("pause");
												goto loop;break;
										default:cout<<"请输入正确的数字进行操作。"; 
									}
								}
								
							}
							cout<<"查无此人!!!";
							system("pause");
							goto loop;
							break;
					default:cout<<"请输入正确数字进行查找。";break;
				}
		        break; 
		case 10:for(i=n+add_num-1;i>=0;i--) studs[i].average=(studs[i].math+studs[i].English+studs[i].c+studs[i].physics)/4;//成绩水平分析 
		        for(i=n+add_num-1;i>=0;i--)
            	{
	            	if(studs[i].math>=90) math[0]++;
	            	else if(studs[i].math>=80) math[1]++;
	            	else if(studs[i].math>=60) math[2]++;
	            	else math[3]++;
	            	if(studs[i].English>=90) English[0]++;
	            	else if(studs[i].English>=80) English[1]++;
	            	else if(studs[i].English>=60) English[2]++;
            		else English[3]++;
	            	if(studs[i].c>=90) c[0]++;
	            	else if(studs[i].c>=80) c[1]++;
	            	else if(studs[i].c>=60) c[2]++;
	            	else c[3]++;
	            	if(studs[i].physics>=90) physics[0]++;
	            	else if(studs[i].physics>=80) physics[1]++;
	            	else if(studs[i].physics>=60) physics[2]++;
	            	else physics[3]++;
	            	if(studs[i].average>=90) average[0]++;
	            	else if(studs[i].average>=80) average[1]++;
	            	else if(studs[i].average>=60) average[2]++;
	            	else average[3]++;
            	}
            	cout<<"人数分布:"<<endl<<endl;
            	cout<<setw(20)<<"优秀人数"<<setw(12)<<"良好人数"<<setw(12)<<"及格人数"<<setw(13)<<"不及格人数"<<endl;
            	cout<<"数学"<<setw(14)<<math[0]<<setw(10)<<math[1]<<setw(12)<<math[2]<<setw(12)<<math[3]<<endl;
            	cout<<"英语"<<setw(14)<<English[0]<<setw(10)<<English[1]<<setw(12)<<English[2]<<setw(12)<<English[3]<<endl;
            	cout<<"程序设计"<<setw(10)<<c[0]<<setw(10)<<c[1]<<setw(12)<<c[2]<<setw(12)<<c[3]<<endl;
            	cout<<"物理"<<setw(14)<<physics[0]<<setw(10)<<physics[1]<<setw(12)<<physics[2]<<setw(12)<<physics[3]<<endl;
            	cout<<"平均成绩"<<setw(10)<<average[0]<<setw(10)<<average[1]<<setw(12)<<average[2]<<setw(12)<<average[3]<<endl<<endl;
            	cout<<"人数占比:"<<endl<<endl;
            	cout<<setw(20)<<"优秀人数占比"<<setw(16)<<"良好人数占比"<<setw(16)<<"及格人数占比"<<setw(17)<<"不及格人数占比"<<endl;
            	cout<<"数学"<<setw(10)<<(math[0]*100)/(n+add_num)<<"%"<<setw(15)<<(math[1]*100)/(n+add_num)<<"%"<<setw(16)<<(math[2]*100)/(n+add_num)<<"%"<<setw(14)<<(math[3]*100)/(n+add_num)<<"%"<<endl;
            	cout<<"英语"<<setw(10)<<(English[0]*100)/(n+add_num)<<"%"<<setw(15)<<(English[1]*100)/(n+add_num)<<"%"<<setw(16)<<(English[2]*100)/(n+add_num)<<"%"<<setw(14)<<(English[3]*100)/(n+add_num)<<"%"<<endl;
            	cout<<"程序设计"<<setw(6)<<(c[0]*100)/(n+add_num)<<"%"<<setw(15)<<(c[1]*100)/(n+add_num)<<"%"<<setw(16)<<(c[2]*100)/(n+add_num)<<"%"<<setw(14)<<(c[3]*100)/(n+add_num)<<"%"<<endl;
            	cout<<"物理"<<setw(10)<<(physics[0]*100)/(n+add_num)<<"%"<<setw(15)<<(physics[1]*100)/(n+add_num)<<"%"<<setw(16)<<(physics[2]*100)/(n+add_num)<<"%"<<setw(14)<<(physics[3]*100)/(n+add_num)<<"%"<<endl;
            	cout<<"平均成绩"<<setw(6)<<(average[0]*100)/(n+add_num)<<"%"<<setw(15)<<(average[1]*100)/(n+add_num)<<"%"<<setw(16)<<(average[2]*100)/(n+add_num)<<"%"<<setw(14)<<(average[3]*100)/(n+add_num)<<"%"<<endl;
			    for (i=0; i<4; i++)
			    {
			    	math[i]=0;
					English[i]=0;
					c[i]=0;
					physics[i]=0;
					average[i]=0;
				}
				system("pause");
			    goto loop;
				break;
		default:cout<<"请输入正确的数字。"<<endl;
				system("pause");
				goto loop;
				break;
	}
	infile.close();	
	return 0;
}

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值