第一次做学年设计 学生成绩管理系统

学年设计 专栏收录该内容
2 篇文章 0 订阅

2020-06-24 完成代码部分
2020-06-26 完成报告部分
2020-06-30 终于等到了答辩的时间,完成答辩很开兴~~~。
该系统具有的功能
总:对于小学生 中学生 大学生 进行操作
以下以小学生为例
1 查询学生信息
2 添加学生信息
3 删除学生信息
4 显示学生信息
5 编辑学生信息
6 统计学生信息
7 学生成绩排序
8 退出管理系统

直接上代码 已经在DEV C++通过 没毛病
首先时main.cpp

#include <cstring>
#include <string>
#include <iostream>
#include <fstream>
#include <algorithm>
#include "StuL.h"
#include "StuM.h"
#include "StuB.h"
using namespace std;

int main() {
	int choose; 
	cout<<"请输入对那类学生进行成绩统计 1--小学生 2--中学生 3--大学生"<<endl;
	StuL ll;
	StuM mm;
	StuB bb; 
	cin>>choose;
	switch(choose){
		case 1: ll.menu(); break;
		case 2: mm.menu(); break;
		case 3: bb.menu(); break;
	}
 	
 	return 0;
}

小学生的处理板块:
StuL.h文件

#ifndef STUL_H
#define STUL_H
#include <string>
using namespace std;

class StuL{
	public:		
		StuL();//学生数据初始化和保存学生数据
		void input();//输入学生信息 
		void insert();//添加学生信息		
		void display();//显示学生信息 
		void sort1();//对学生成绩进行排序 
		void write();//把信息写入文件
		void read();//读取文件信息
		void readOrClear();//清空学生信息1 
		void modify();//修改学生信息
		void stat();//统计学生信息
		void del();//删除学生信息 
		void find();//查找学生信息
		void menu();//菜单 
	private:
		char name[20];//姓名
		char sex[5];//性别
		int number;//学号
		int className;//班级
		int total;//总分 
		int average;//平均分 		
		double score[3];
};

#endif

StuL.cpp

#include "StuL.h"
#include <cstring>
#include <string>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iomanip>
using namespace std;

StuL stu[100];
int n=0;

StuL::StuL(){
	strcpy(name," ");
	strcpy(sex," ");
	number=0;
	className=0;
	total=0;
	average=0;
	for(int i=0;i<3;i++)score[i]=0;
}

void StuL::input(){
	cout<<"输入学生人数:"<<endl;
	cin>>n;
	cout<<"输入学生信息 学号 姓名 语文成绩 数学成绩 英语成绩:"<<endl;
	for(int i=0;i<n;i++){
		cin>>stu[i].number;
		cin>>stu[i].name;
		for(int j=0;j<3;j++){
			cin>>stu[i].score[j];
			stu[i].total+=stu[i].score[j];
		}
	} 
	cout<<"完成学生信息的输入!"<<endl;	
}

void StuL::insert(){
	int num,score1[3];
	char name1[20];
	cout<<"输入所要添加学生的学号:"<<endl;
	cin>>num;
	bool f=1;
	for(int i=0;i<n;i++)
	{
		if(num==stu[i].number){
			cout<<"无法添加该学生 该学生信息已经存在!"<<endl;
			f=0;
			break;
		}
	}
	if(f){
		cout<<"输入姓名 语文成绩 数学成绩 英语成绩:"<<endl;
		cin>>name>>score1[0]>>score1[1]>>score1[2];
		stu[n].number=num;
		for(int p=0;p<3;p++){
			stu[n].score[p]=score1[p];
			stu[n].total+=score1[p];
		}
		strcpy(stu[n].name,name);
		cout<<"添加成功"<<endl;
		n++;
		write();//添加后要保存到文件中
	}	
} 

void StuL::display(){
	cout<<"输出学生信息:学号  姓名   语文成绩  数学成绩  英语成绩 总成绩:"<<endl;
	for(int i=0;i<n;i++){
		cout<<setw(16)<<stu[i].number<<setw(8)<<stu[i].name<<" ";
		for(int j=0;j<3;j++){
			cout<<setw(8)<<stu[i].score[j]<<" ";
		}
		cout<<setw(7)<<stu[i].total; 
		cout<<endl;
	}
}

void StuL::sort1(){
	cout<<"选择排序方式:1--按照总成绩排序 2--按照语文成绩排序 3--按照数学成绩排序 4--按照英语成绩排序 5--返回菜单"<<endl;
	int m;
	cin>>m;
	while(1){
		if(m==1){
			for(int i=0;i<n;i++){
				for(int j=0;j<n-i-1;j++){
					if(stu[j].total<stu[j+1].total){
						swap(stu[j],stu[j+1]);
					}
				}
			}	
			display();	
		} 
		else if(m==2){
			for(int i=0;i<n;i++){
				for(int j=0;j<n-i-1;j++){
					if(stu[j].score[0]<stu[j+1].score[0]){
						swap(stu[j],stu[j+1]);
					}
				}
			}
			display();	
		}
		else if(m==3){
			for(int i=0;i<n;i++){
				for(int j=0;j<n-i-1;j++){
					if(stu[j].score[1]<stu[j+1].score[1]){
						swap(stu[j],stu[j+1]);
					}
				}
			}
			display();	
		}
		else if(m==4){
			for(int i=0;i<n;i++){
				for(int j=0;j<n-i-1;j++){
					if(stu[j].score[2]<stu[j+1].score[2]){
						swap(stu[j],stu[j+1]);
					}
				}
			}
			display();	
		}	
		else if(m==5){
			break;
		}	
		else{
			cout<<"输入号码选项序号错误!"<<endl;
		}
		cout<<"选择排序方式:1--按照总成绩排序 2--按照语文成绩排序 3--按照数学成绩排序 4--按照英语成绩排序 5--返回菜单"<<endl;					
		cin>>m;
	} 
}

void StuL::write(){
	for(int i=0;i<n;i++){//先按总成绩排序 再存入 
			for(int j=0;j<n-i-1;j++){
				if(stu[j].total<stu[j+1].total){
					swap(stu[j],stu[j+1]);
				}
			}
	}
	ofstream outfile("data.dat",ios::binary);
	if(!outfile)
	{
		cerr<<"保存学生信息时打开文件失败!"<<endl;
		exit(1);
	}
	cout<<"将学生信息读入文件当中....."<<endl;
	for(int i=0;i<n;i++)
	{
		outfile.write((char*)&stu[i],sizeof(StuL));
	}
	outfile.close();	
}

void StuL::read(){
	ifstream infile("data.dat",ios::binary);
	if(!infile)
	{
		cerr<<"读取学生信息时打开文件失败!"<<endl;
		exit(1);
	}
	cout<<"从文件中读取学生信息....."<<endl;
	int j=0;
	cout<<"输出学生信息:学号  姓名   语文成绩  数学成绩  英语成绩 总成绩:"<<endl;
	while(infile.read((char*)&stu[j],sizeof(StuL)))
	{
		cout<<setw(16)<<stu[j].number<<setw(8)<<stu[j].name<<" ";
		for(int z=0;z<3;z++){
			cout<<setw(8)<<stu[j].score[z]<<" ";
		}
		cout<<setw(7)<<stu[j].total<<endl; 
		j++;
	}
	n=j; //保存学生人数
	cout<<"学生人数为:"<<n<<endl;
	infile.close();	
}

void StuL::readOrClear(){
	cout<<"是否清空文件中的学生信息?(清空/第一次录入信息 需要输入学生信息,保存到文件中  yes--清空 no--不清空 )"<<endl;
	string s;
	cin>>s;
	if(s=="yes")
	{
		n=0;
		input();//清空后调用 输入学生信息函数
		write();//并将信息保存到文件中
		read();
	}
	if(s=="no")
	{
		read();
		cout<<"读取信息完毕!"<<endl;
	}	
}

void StuL::modify(){
	int pd=0;//判断有没有 
	int t;//记录位置 
	int num;
	cout<<"请输入你的学号: ";
	cin>>num;
	for(int i=0;i<n;i++){
		if(stu[i].number==num){
			pd=1;
			t=i;
		}
	}
	if(pd==0){
		cout<<"对不起,没有你要修改的学生信息"<<endl;
	}
	else{
		cout<< "请输入新的学号: "; 
		cin>>stu[t].number; 
		cout<< " 姓名: "; 
		cin>>stu[t].name; 
		cout<< " 语文成绩: "; 
		cin>>stu[t].score[0];		
		cout<< " 数学成绩: "; 
		cin>>stu[t].score[1];	
		cout<< " 英语成绩: "; 
		cin>>stu[t].score[2]; 
		stu[t].total=stu[t].score[0]+stu[t].score[1]+stu[t].score[2];
		write(); 
		cout<<" 修改成功 !"<<endl;					
	} 
}

void StuL::del(){
	int num;
	bool f=0;
	cout<<"输入你要删除的学生学号:"<<endl;
	cin>>num;
	for(int i=0;i<n;i++){
		if(stu[i].number==num)
		{
			cout<<"找到该学生!进行删除操作..."<<endl;
			for(int j=i;j<n-1;j++)
			{
				stu[j].number=stu[j+1].number;
				strcpy(stu[j].name,stu[j+1].name);
				for(int p=0;p<3;p++){
					stu[j].score[p]=stu[j+1].score[p];
				}
			}
			cout<<"删除成功!"<<endl;
			n--;//学生人数-1
			f=1;
			break;
		}
	}
	if(f)
		write();
	else 
		cout<<"不存在该学生!无法删除!"<<endl;
		
}

void StuL::find(){
	cout<<"选择查询方式:0--学号 1--姓名:"<<endl;
	int s;
	cin>>s;
	while(1){
		if(s==0){
			cout<<"输入你要查询的学号:"<<endl;
			int num;
			cin>>num;
			for(int i=0;i<n;i++){
				if(num==stu[i].number){
					cout<<"查询成功!"<<num<<"号学生信息 姓名:"<<stu[i].name<<" ";
					cout<<"语文成绩 数学成绩 英语成绩:"<<stu[i].score[0]<<" "<<stu[i].score[1]<<" "<<stu[i].score[2]<<endl;
				}
			}		
			break;
		}
		else if(s==1){
			cout<<"输入你要查询的学生姓名:"<<endl;
			char name[20];
			cin>>name;
			for(int i=0;i<n;i++){
				if(strcmp(stu[i].name,name)==0){
					cout<<"查询成功!"<<name<<"学生信息 学号 成绩:"<<stu[i].number<<" ";
					cout<<"语文成绩 数学成绩 英语成绩:"<<stu[i].score[0]<<" "<<stu[i].score[1]<<" "<<stu[i].score[2]<<endl;
				}
			}	
			break;
		}
		else{
			cout<<"输入的选项序号有误,请重新输入:"<<endl;
			cin>>s;
		}
	}	
}

void StuL::stat(){
	cout<<"请选择统计方式 0--人数统计 1--总平均分统计 2--语文平均分统计 3--数学平均分统计 4--英语平均分统计 5--退出统计,返回菜单"<<endl; 
	
	double t=0,t1=0,t2=0,t3=0;
	for(int i=0;i<n;i++){
		t+=stu[i].total;
		t1+=stu[i].score[0]; 
		t2+=stu[i].score[1]; 
		t3+=stu[i].score[2]; 		
	}
	
	int m;
	cin>>m;
	int y=0;
	while(1){
		switch(m){
			case 0: cout<<"人数为:"<<n<<endl; break;
			case 1: cout<<"总平均分为:"<<t*1.0/n<<endl; break;
			case 2: cout<<"语文平均分为:"<<t1*1.0/n<<endl; break;
			case 3: cout<<"数学平均分为:"<<t2*1.0/n<<endl; break;
			case 4: cout<<"英语平均分为:"<<t3*1.0/n<<endl; break;
			case 5: cout<<"退出统计"; y=1; break;
			default:cout<<"输入序号错误!请重新输入"<<endl;
		}
		if(y==1){
			cout<<endl;
			break;
		}
		cin>>m;
	}	
}

void StuL::menu(){
	readOrClear();
	while(1){
		cout<<endl;
		cout<<"|-------------小 学 生 成 绩 管 理 系 统----------------|"<<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<<"|-------------------------------------------------------|"<<endl;
		int m;
		cout<<"输入你的选择:"<<endl;
		cin>>m;
		switch(m){
		case 1:find();break;
		case 2:insert();break;
		case 3:del();break;
		case 4:read();break;
		case 5:modify();break;
		case 6:stat();break;
		case 7:sort1();break;
		case 8:exit(1);
		default:cout<<"输入选项序号错误!"<<endl;
		}
	}	
}

中学生板块:
StuM.h

#ifndef STUM_H
#define STUM_H
#include <string>
using namespace std;

class StuM{
	public:		
		StuM();//学生数据初始化和保存学生数据
		void input();//输入学生信息 
		void insert();//添加学生信息		
		void display();//显示学生信息 
		void sort1();//对学生成绩进行排序 
		void write();//把信息写入文件
		void read();//读取文件信息
		void readOrClear();//清空学生信息1 
		void modify();//修改学生信息
		void stat();//统计学生信息
		void del();//删除学生信息 
		void find();//查找学生信息
		void menu();//菜单 
	private:
		char name[20];//姓名
		char sex[5];//性别
		int number;//学号
		int className;//班级
		int total;//总分 
		int average;//平均分 		
		double score[5];
};

#endif
var foo = 'bar';

StuM.cpp

#include "StuM.h"
#include <cstring>
#include <string>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iomanip>
using namespace std;

StuM stu1[100];
int n1=0;

StuM::StuM(){
	strcpy(name," ");
	strcpy(sex," ");
	number=0;
	className=0;
	total=0;
	average=0;
	for(int i=0;i<5;i++)score[i]=0;
}

void StuM::input(){
	cout<<"输入学生人数:"<<endl;
	cin>>n1;
	cout<<"输入学生信息 学号 姓名 语文成绩 数学成绩 英语成绩 地理成绩 历史成绩:"<<endl;
	for(int i=0;i<n1;i++){
		cin>>stu1[i].number;
		cin>>stu1[i].name;
		for(int j=0;j<5;j++){
			cin>>stu1[i].score[j];
			stu1[i].total+=stu1[i].score[j];
		}
	} 
	cout<<"完成学生信息的输入!"<<endl;	
}

void StuM::insert(){
	int num,score1[5];
	char name1[20];
	cout<<"输入所要添加学生的学号:"<<endl;
	cin>>num;
	bool f=1;
	for(int i=0;i<n1;i++)
	{
		if(num==stu1[i].number){
			cout<<"无法添加该学生 该学生信息已经存在!"<<endl;
			f=0;
			break;
		}
	}
	if(f){
		cout<<"输入姓名 语文成绩 数学成绩 英语成绩 地理成绩 历史成绩:"<<endl;
		cin>>name>>score1[0]>>score1[1]>>score1[2]>>score1[3]>>score[4];
		stu1[n1].number=num;
		for(int p=0;p<5;p++){
			stu1[n1].score[p]=score1[p];
			stu1[n1].total+=score1[p];
		}
		strcpy(stu1[n1].name,name);
		cout<<"添加成功"<<endl;
		n1++;
		write();//添加后要保存到文件中
	}	
} 

void StuM::display(){
	cout<<"输出学生信息:学号  姓名    语文成绩    数学成绩    英语成绩    地理成绩    历史成绩   总成绩:"<<endl;
	for(int i=0;i<n1;i++){
		cout<<setw(16)<<stu1[i].number<<setw(8)<<stu1[i].name<<" ";
		for(int j=0;j<5;j++){
			cout<<setw(10)<<stu1[i].score[j]<<" ";
		}
		cout<<setw(11)<<stu1[i].total; 
		cout<<endl;
	}
}

void StuM::sort1(){
	cout<<"选择排序方式:1--按总成绩排序 2--按语文成绩排序 3--按数学成绩排序 4--按英语成绩排序 5--按地理成绩排序 6--按历史成绩排序 7--返回菜单"<<endl;		
	int m;
	cin>>m;
	while(1){
		if(m==1){
			for(int i=0;i<n1;i++){
				for(int j=0;j<n1-i-1;j++){
					if(stu1[j].total<stu1[j+1].total){
						swap(stu1[j],stu1[j+1]);
					}
				}
			}	
			display();	
		} 
		else if(m==2){
			for(int i=0;i<n1;i++){
				for(int j=0;j<n1-i-1;j++){
					if(stu1[j].score[0]<stu1[j+1].score[0]){
						swap(stu1[j],stu1[j+1]);
					}
				}
			}
			display();	
		}
		else if(m==3){
			for(int i=0;i<n1;i++){
				for(int j=0;j<n1-i-1;j++){
					if(stu1[j].score[1]<stu1[j+1].score[1]){
						swap(stu1[j],stu1[j+1]);
					}
				}
			}	
			display();
		}
		else if(m==4){
			for(int i=0;i<n1;i++){
				for(int j=0;j<n1-i-1;j++){
					if(stu1[j].score[2]<stu1[j+1].score[2]){
						swap(stu1[j],stu1[j+1]);
					}
				}
			}
			display();	
		}	
		else if(m==5){
			for(int i=0;i<n1;i++){
				for(int j=0;j<n1-i-1;j++){
					if(stu1[j].score[3]<stu1[j+1].score[3]){
						swap(stu1[j],stu1[j+1]);
					}
				}
			}
			display();			
		}
		else if(m==6){
			for(int i=0;i<n1;i++){
				for(int j=0;j<n1-i-1;j++){
					if(stu1[j].score[4]<stu1[j+1].score[4]){
						swap(stu1[j],stu1[j+1]);
					}
				}
			}
			display();			
		}
		else if(m==7){
			break;
		}	
		else{
			cout<<"输入号码选项序号错误!"<<endl;
		}
		cout<<"选择排序方式:1--按总成绩排序 2--按语文成绩排序 3--按数学成绩排序 4--按英语成绩排序 5--按地理成绩排序 6--按历史成绩排序 7--返回菜单"<<endl;					
		cin>>m;
	} 
}

void StuM::write(){
	for(int i=0;i<n1;i++){//先按总成绩排序 再存入 
			for(int j=0;j<n1-i-1;j++){
				if(stu1[j].total<stu1[j+1].total){
					swap(stu1[j],stu1[j+1]);
				}
			}
	}
	ofstream outfile("dataM.dat",ios::binary);
	if(!outfile)
	{
		cerr<<"保存学生信息时打开文件失败!"<<endl;
		exit(1);
	}
	cout<<"将学生信息读入文件当中....."<<endl;
	for(int i=0;i<n1;i++)
	{
		outfile.write((char*)&stu1[i],sizeof(StuM));
	}
	outfile.close();	
}

void StuM::read(){
	ifstream infile("dataM.dat",ios::binary);
	if(!infile)
	{
		cerr<<"读取学生信息时打开文件失败!"<<endl;
		exit(1);
	}
	cout<<"从文件中读取学生信息....."<<endl;
	int j=0;
	cout<<"学号 姓名      语文成绩    数学成绩   英语成绩   地理成绩   历史成绩:"<<endl;
	while(infile.read((char*)&stu1[j],sizeof(StuM)))
	{
		cout<<" "<<stu1[j].number<<"   "<<stu1[j].name<<" "; 
		for(int p=0;p<5;p++){
			cout<<setw(11)<<stu1[j].score[p];
		}
		cout<<endl;
		j++;
	}
	n1=j; //保存学生人数
	cout<<"学生人数为:"<<n1<<endl;
	infile.close();	
}

void StuM::readOrClear(){
	cout<<"是否清空文件中的学生信息?(清空/第一次录入信息 需要输入学生信息,保存到文件中  yes--清空 no--不清空 )"<<endl;
	string s;
	cin>>s;
	if(s=="yes")
	{
		n1=0;
		input();//清空后调用 输入学生信息函数
		write();//并将信息保存到文件中
		read();
	}
	if(s=="no")
	{
		read();
		cout<<"读取信息完毕!"<<endl;
	}	
}

void StuM::modify(){
	int pd=0;//判断有没有 
	int t;//记录位置 
	int num;
	cout<<"请输入你的学号: ";
	cin>>num;
	for(int i=0;i<n1;i++){
		if(stu1[i].number==num){
			pd=1;
			t=i;
		}
	}
	if(pd==0){
		cout<<"对不起,没有你要修改的学生信息"<<endl;
	}
	else{
		cout<<"请输入新的学号: "; 
		cin>>stu1[t].number; 
		cout<<" 姓名: "; 
		cin>>stu1[t].name; 
		cout<<"语文成绩 数学成绩 英语成绩 地理成绩 历史成绩:"; 
		for(int h=0;h<5;h++){
			cin>>stu1[t].score[h];
			stu1[t].total+=stu1[t].score[h];
		}
		write();
		cout<<" 修改成功 !"<<endl;					
	} 
}

void StuM::del(){
	int num;
	bool f=0;
	cout<<"输入你要删除的学生学号:"<<endl;
	cin>>num;
	for(int i=0;i<n1;i++){
		if(stu1[i].number==num)
		{
			cout<<"找到该学生!进行删除操作..."<<endl;
			for(int j=i;j<n1-1;j++)
			{
				stu1[j].number=stu1[j+1].number;
				strcpy(stu1[j].name,stu1[j+1].name);
				for(int p=0;p<5;p++){
					stu1[j].score[p]=stu1[j+1].score[p];
				}
			}
			cout<<"删除成功!"<<endl;
			n1--;//学生人数-1
			f=1;
			break;
		}
	}
	if(f)
		write();
	else 
		cout<<"不存在该学生!无法删除!"<<endl;
		
}

void StuM::find(){
	cout<<"选择查询方式:0--学号 1--姓名:"<<endl;
	int s;
	cin>>s;
	while(1){
		if(s==0){
			cout<<"输入你要查询的学号:"<<endl;
			int num;
			cin>>num;
			for(int i=0;i<n1;i++){
				if(num==stu1[i].number){
					cout<<"查询成功!"<<num<<"号学生信息 姓名:"<<stu1[i].name<<" ";
					cout<<"语文成绩 数学成绩 英语成绩 地理成绩 历史成绩 总成绩:"; 
					for(int h=0;h<5;h++){
						cout<<stu1[i].score[h]<<" ";
					}		
					cout<<stu1[i].total; 
					cout<<endl;		
				}
			}		
			break;
		}
		else if(s==1){
			cout<<"输入你要查询的学生姓名:"<<endl;
			char name[20];
			cin>>name;
			for(int i=0;i<n1;i++){
				if(strcmp(stu1[i].name,name)==0){
					cout<<"查询成功!"<<name<<"学生信息 学号 成绩:"<<stu1[i].number<<" ";
					cout<<"语文成绩 数学成绩 英语成绩 地理成绩 历史成绩 总成绩:"; 
					for(int h=0;h<5;h++){
						cout<<stu1[i].score[h]<<" "; 
					}		
					cout<<stu1[i].total;
					cout<<endl;							
				}
			}	
			break;
		}
		else{
			cout<<"输入的选项序号有误,请重新输入:"<<endl;
			cin>>s;
		}
	}	
}

void StuM::stat(){
	cout<<"请选择统计方式 0--人数 1--总平均分 2--语文平均分 3--数学平均分 4--英语平均分 5--地理平均分 6--历史平均分 7--退出统计,返回菜单"<<endl; 
	double t=0,t1=0,t2=0,t3=0,t4=0,t5=0;
	for(int i=0;i<n1;i++){
		t+=stu1[i].total;
		t1+=stu1[i].score[0]; 
		t2+=stu1[i].score[1]; 
		t3+=stu1[i].score[2];
		t4+=stu1[i].score[3];
		t5+=stu1[i].score[4]; 		
	}
	
	int m;
	cin>>m;
	int y=0;
	while(1){
		switch(m){
			case 0: cout<<"人数为:"<<n1<<endl; break;
			case 1: cout<<"总平均分为:"<<t*1.0/n1<<endl; break;
			case 2: cout<<"语文平均分为:"<<t1*1.0/n1<<endl; break;
			case 3: cout<<"数学平均分为:"<<t2*1.0/n1<<endl; break;
			case 4: cout<<"英语平均分为:"<<t3*1.0/n1<<endl; break;
			case 5: cout<<"地理平均分为:"<<t4*1.0/n1<<endl; break; 
			case 6: cout<<"历史平均分为:"<<t5*1.0/n1<<endl; break; 			
			case 7: cout<<"退出统计"; y=1; break;
			default:cout<<"输入序号错误!请重新输入"<<endl;
		}
		if(y==1){
			cout<<endl;
			break;
		}		
		cout<<"请选择统计方式 0--人数 1--总平均分 2--语文平均分 3--数学平均分 4--英语平均分 5--地理平均分 6--历史平均分 7--退出统计,返回菜单"<<endl;
		cin>>m;
	}	
}

void StuM::menu(){
	readOrClear();
	while(1){
		cout<<endl;
		cout<<"|-------------中 学 生 成 绩 管 理 系 统----------------|"<<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<<"|-------------------------------------------------------|"<<endl;
		int m;
		cout<<"输入你的选择:"<<endl;
		cin>>m;
		switch(m){
		case 1:find();break;
		case 2:insert();break;
		case 3:del();break;
		case 4:read();break;
		case 5:modify();break;
		case 6:stat();break;
		case 7:sort1();break;
		case 8:exit(1);
		default:cout<<"输入选项序号错误!"<<endl;
		}
	}	
}

大学生板块:
StuB.h

#ifndef STUB_H
#define STUB_H
#include <string>
using namespace std;

class StuB{
	public:		
		StuB();//学生数据初始化和保存学生数据
		void input();//输入学生信息 
		void insert();//添加学生信息		
		void display();//显示学生信息 
		void sort1();//对学生成绩进行排序 
		void write();//把信息写入文件
		void read();//读取文件信息
		void readOrClear();//清空学生信息1 
		void modify();//修改学生信息
		void stat();//统计学生信息
		void del();//删除学生信息 
		void find();//查找学生信息
		void menu();//菜单 
	private:
		char name[20];//姓名
		char sex[5];//性别
		int number;//学号
		int className;//班级
		int total;//总分 
		int average;//平均分 		
		double score[5];
};

#endif

StuB.cpp

#include "StuB.h"
#include <cstring>
#include <string>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iomanip>
using namespace std;

StuB stu12[100];
int n12=0;

StuB::StuB(){
	strcpy(name," ");
	strcpy(sex," ");
	number=0;
	className=0;
	total=0;
	average=0;
	for(int i=0;i<5;i++)score[i]=0;
}

void StuB::input(){
	cout<<"输入学生人数:"<<endl;
	cin>>n12;
	cout<<"输入学生信息 学号 姓名 大学语文 高等数学 大学英语 程序设计 大学思修:"<<endl;
	for(int i=0;i<n12;i++){
		cin>>stu12[i].number;
		cin>>stu12[i].name;
		for(int j=0;j<5;j++){
			cin>>stu12[i].score[j];
			stu12[i].total+=stu12[i].score[j];
		}
	} 
	cout<<"完成学生信息的输入!"<<endl;	
}

void StuB::insert(){
	int num,score1[5];
	char name1[20];
	cout<<"输入所要添加学生的学号:"<<endl;
	cin>>num;
	bool f=1;
	for(int i=0;i<n12;i++)
	{
		if(num==stu12[i].number){
			cout<<"无法添加该学生 该学生信息已经存在!"<<endl;
			f=0;
			break;
		}
	}
	if(f){
		cout<<"输入姓名 大学语文 高等数学 大学英语 程序设计 大学思修:"<<endl;
		cin>>name>>score1[0]>>score1[1]>>score1[2]>>score1[3]>>score[4];
		stu12[n12].number=num;
		for(int p=0;p<5;p++){
			stu12[n12].score[p]=score1[p];
			stu12[n12].total+=score1[p];
		}
		strcpy(stu12[n12].name,name);
		cout<<"添加成功"<<endl;
		n12++;
		write();//添加后要保存到文件中
	}	
} 

void StuB::display(){
	cout<<"输出学生信息:学号  姓名    大学语文    高等数学    大学英语    程序设计    大学思修   总成绩:"<<endl;
	for(int i=0;i<n12;i++){
		cout<<setw(16)<<stu12[i].number<<setw(8)<<stu12[i].name<<" ";
		for(int j=0;j<5;j++){
			cout<<setw(10)<<stu12[i].score[j]<<" ";
		}
		cout<<setw(11)<<stu12[i].total; 
		cout<<endl;
	}
}

void StuB::sort1(){
	cout<<"选择排序方式:1--按总成绩排序 2--按大学语文排序 3--按高等数学排序 4--按大学英语排序 5--按程序设计排序 6--按大学思修排序 7--返回菜单"<<endl;		
	int m;
	cin>>m;
	while(1){
		if(m==1){
			for(int i=0;i<n12;i++){
				for(int j=0;j<n12-i-1;j++){
					if(stu12[j].total<stu12[j+1].total){
						swap(stu12[j],stu12[j+1]);
					}
				}
			}	
			display();	
		} 
		else if(m==2){
			for(int i=0;i<n12;i++){
				for(int j=0;j<n12-i-1;j++){
					if(stu12[j].score[0]<stu12[j+1].score[0]){
						swap(stu12[j],stu12[j+1]);
					}
				}
			}
			display();	
		}
		else if(m==3){
			for(int i=0;i<n12;i++){
				for(int j=0;j<n12-i-1;j++){
					if(stu12[j].score[1]<stu12[j+1].score[1]){
						swap(stu12[j],stu12[j+1]);
					}
				}
			}	
			display();
		}
		else if(m==4){
			for(int i=0;i<n12;i++){
				for(int j=0;j<n12-i-1;j++){
					if(stu12[j].score[2]<stu12[j+1].score[2]){
						swap(stu12[j],stu12[j+1]);
					}
				}
			}
			display();	
		}	
		else if(m==5){
			for(int i=0;i<n12;i++){
				for(int j=0;j<n12-i-1;j++){
					if(stu12[j].score[3]<stu12[j+1].score[3]){
						swap(stu12[j],stu12[j+1]);
					}
				}
			}
			display();			
		}
		else if(m==6){
			for(int i=0;i<n12;i++){
				for(int j=0;j<n12-i-1;j++){
					if(stu12[j].score[4]<stu12[j+1].score[4]){
						swap(stu12[j],stu12[j+1]);
					}
				}
			}
			display();			
		}
		else if(m==7){
			break;
		}	
		else{
			cout<<"输入号码选项序号错误!"<<endl;
		}
		cout<<"选择排序方式:1--按总成绩排序 2--按大学语文排序 3--按高等数学排序 4--按大学英语排序 5--按程序设计排序 6--按大学思修排序 7--返回菜单"<<endl;					
		cin>>m;
	} 
}

void StuB::write(){
	for(int i=0;i<n12;i++){//先按总成绩排序 再存入 
			for(int j=0;j<n12-i-1;j++){
				if(stu12[j].total<stu12[j+1].total){
					swap(stu12[j],stu12[j+1]);
				}
			}
	}
	ofstream outfile("dataB.dat",ios::binary);
	if(!outfile)
	{
		cerr<<"保存学生信息时打开文件失败!"<<endl;
		exit(1);
	}
	cout<<"将学生信息读入文件当中....."<<endl;
	for(int i=0;i<n12;i++)
	{
		outfile.write((char*)&stu12[i],sizeof(StuB));
	}
	outfile.close();	
}

void StuB::read(){
	ifstream infile("dataB.dat",ios::binary);
	if(!infile)
	{
		cerr<<"读取学生信息时打开文件失败!"<<endl;
		exit(1);
	}
	cout<<"从文件中读取学生信息....."<<endl;
	int j=0;
	cout<<"学号 姓名      大学语文    高等数学   大学英语   程序设计   大学思修:"<<endl;
	while(infile.read((char*)&stu12[j],sizeof(StuB)))
	{
		cout<<" "<<stu12[j].number<<"   "<<stu12[j].name<<" "; 
		for(int p=0;p<5;p++){
			cout<<setw(11)<<stu12[j].score[p];
		}
		cout<<endl;
		j++;
	}
	n12=j; //保存学生人数
	cout<<"学生人数为:"<<n12<<endl;
	infile.close();	
}

void StuB::readOrClear(){
	cout<<"是否清空文件中的学生信息?(清空/第一次录入信息 需要输入学生信息,保存到文件中  yes--清空 no--不清空 )"<<endl;
	string s;
	cin>>s;
	if(s=="yes")
	{
		n12=0;
		input();//清空后调用 输入学生信息函数
		write();//并将信息保存到文件中
		read();
	}
	if(s=="no")
	{
		read();
		cout<<"读取信息完毕!"<<endl;
	}	
}

void StuB::modify(){
	int pd=0;//判断有没有 
	int t;//记录位置 
	int num;
	cout<<"请输入你的学号: ";
	cin>>num;
	for(int i=0;i<n12;i++){
		if(stu12[i].number==num){
			pd=1;
			t=i;
		}
	}
	if(pd==0){
		cout<<"对不起,没有你要修改的学生信息"<<endl;
	}
	else{
		cout<<"请输入新的学号: "; 
		cin>>stu12[t].number; 
		cout<<" 姓名: "; 
		cin>>stu12[t].name; 
		cout<<"大学语文 高等数学 大学英语 程序设计 大学思修:"; 
		for(int h=0;h<5;h++){
			cin>>stu12[t].score[h];
			stu12[t].total+=stu12[t].score[h];
		}
		write();
		cout<<" 修改成功 !"<<endl;					
	} 
}

void StuB::del(){
	int num;
	bool f=0;
	cout<<"输入你要删除的学生学号:"<<endl;
	cin>>num;
	for(int i=0;i<n12;i++){
		if(stu12[i].number==num)
		{
			cout<<"找到该学生!进行删除操作..."<<endl;
			for(int j=i;j<n12-1;j++)
			{
				stu12[j].number=stu12[j+1].number;
				strcpy(stu12[j].name,stu12[j+1].name);
				for(int p=0;p<5;p++){
					stu12[j].score[p]=stu12[j+1].score[p];
				}
			}
			cout<<"删除成功!"<<endl;
			n12--;//学生人数-1
			f=1;
			break;
		}
	}
	if(f)
		write();
	else 
		cout<<"不存在该学生!无法删除!"<<endl;
		
}

void StuB::find(){
	cout<<"选择查询方式:0--学号 1--姓名:"<<endl;
	int s;
	cin>>s;
	while(1){
		if(s==0){
			cout<<"输入你要查询的学号:"<<endl;
			int num;
			cin>>num;
			for(int i=0;i<n12;i++){
				if(num==stu12[i].number){
					cout<<"查询成功!"<<num<<"号学生信息 姓名:"<<stu12[i].name<<" ";
					cout<<"大学语文 高等数学 大学英语 程序设计 大学思修 总成绩:"; 
					for(int h=0;h<5;h++){
						cout<<stu12[i].score[h]<<" ";
					}	
					cout<<stu12[i].total; 
					cout<<endl;		
				}
			}		
			break;
		}
		else if(s==1){
			cout<<"输入你要查询的学生姓名:"<<endl;
			char name[20];
			cin>>name;
			for(int i=0;i<n12;i++){
				if(strcmp(stu12[i].name,name)==0){
					cout<<"查询成功!"<<name<<"学生信息 学号 成绩:"<<stu12[i].number<<" ";
					cout<<"大学语文 高等数学 大学英语 程序设计 大学思修 总成绩:"; 
					for(int h=0;h<5;h++){
						cout<<stu12[i].score[h]<<" ";
					}		
					cout<<stu12[i].total; 	
					cout<<endl;							
				}
			}	
			break;
		}
		else{
			cout<<"输入的选项序号有误,请重新输入:"<<endl;
			cin>>s;
		}
	}	
}

void StuB::stat(){
	cout<<"请选择统计方式 0--人数 1--总平均分 2--语文平均分 3--数学平均分 4--英语平均分 5--程设平均分 6--思修平均分 7--退出统计,返回菜单"<<endl; 
	double t=0,t1=0,t2=0,t3=0,t4=0,t5=0;
	for(int i=0;i<n12;i++){
		t+=stu12[i].total;
		t1+=stu12[i].score[0]; 
		t2+=stu12[i].score[1]; 
		t3+=stu12[i].score[2];
		t4+=stu12[i].score[3];
		t5+=stu12[i].score[4]; 		
	}
	
	int m;
	cin>>m;
	int y=0;
	while(1){
		switch(m){
			case 0: cout<<"人数为:"<<n12<<endl; break;
			case 1: cout<<"总平均分为:"<<t*1.0/n12<<endl; break;
			case 2: cout<<"语文平均分为:"<<t1*1.0/n12<<endl; break;
			case 3: cout<<"数学平均分为:"<<t2*1.0/n12<<endl; break;
			case 4: cout<<"英语平均分为:"<<t3*1.0/n12<<endl; break;
			case 5: cout<<"程设平均分为:"<<t4*1.0/n12<<endl; break; 
			case 6: cout<<"思修平均分为:"<<t5*1.0/n12<<endl; break; 			
			case 7: cout<<"退出统计"; y=1; break;
			default:cout<<"输入序号错误!请重新输入"<<endl;
		}
		if(y==1){
			cout<<endl;
			break;
		}			
		cout<<"请选择统计方式 0--人数 1--总平均分 2--语文平均分 3--数学平均分 4--英语平均分 5--程设平均分 6--思修平均分 7--退出统计,返回菜单"<<endl;
		cin>>m;
	}	
}

void StuB::menu(){
	readOrClear();
	while(1){
		cout<<endl;
		cout<<"|-------------大 学 生 成 绩 管 理 系 统----------------|"<<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<<"|-------------------------------------------------------|"<<endl;
		int m;
		cout<<"输入你的选择:"<<endl;
		cin>>m;
		switch(m){
		case 1:find();break;
		case 2:insert();break;
		case 3:del();break;
		case 4:read();break;
		case 5:modify();break;
		case 6:stat();break;
		case 7:sort1();break;
		case 8:exit(1);
		default:cout<<"输入选项序号错误!"<<endl;
		}
	}	
}

你可能已经看出来了,没错小,中,大学生其实是一样的,本人水平较低~~~。
OK,就这样,希望对你有用。

  • 4
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

学生成绩管理系统设计” A.问题描述 学生信息包括:学号、姓名、性别、年龄、班级等信息。 小学生除了包括学生所有信息外,还包括英语、数学和语文成绩。 中学生除了包括小学生所有信息外,还包括地理、历史成绩。 大学生除了包括学生所有信息外,还包括专业、英语、程序设计和高等数学等课程。 设计一程序能够对学生成绩进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。 B.功能要求 (1)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。 (2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。 (3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。 (4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。 (5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。 (6)统计功能:能根据多种参数进行统计。能统计学生人数、总分、单科的平均分等。 (7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。 (8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。 (9)排序功能:可按总分和单科成绩排名次。
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值