学生成绩管理系统,每个学生是一个记录,包括学号,姓名,性别,3门课程成绩。系统
可以实现以下功能:
1、信息录入:录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等);
2、信息查询:输入学号,查询学生各门课程的成绩,并显示。
3、排序:按各门课程的成绩平均分进行排序,并显示。
4、信息删除与修改——输入学号,删除该学生的成绩信息。
#include<iostream>
#include<string>
#include <iomanip> //setw()
#include <fstream> //文件管理
using namespace std;
const int smax=20; //设置学生最大个数
class StudentData //定义基类StudentData
{
int number; //学号
string name; //名字
char sex; //性别
double chinese,math,english; //各科成绩
double average; //平均分
public:
StudentData(int num=0,string name=" ",char sex='f',double chin=0,double math=0,double eng=0,double ave=0); //构造函数
void set(int num,string name,char sex,double chin,double math,double eng,double ave); //设置数据成员的值
void input(); //输入数据成员的值
void output(); //输出数据成员的值
int getnumber() {return number;} //获取编号
string getname(){return name; } //获取姓名
char getsex(){return sex;} //获取性别
double getchinese(){return chinese;} //获取成绩
double getmath(){return math;}
double getenglish(){return english;}
double getaverage(){return average;} //获取平均分
};
//类外定义成员函数
StudentData::StudentData(int num,string name,char sex,double chin,double math,double eng,double ave)
{ number=num;
name=name;
sex=sex;
chinese=chin;
math=math;
english=eng;
average=ave;
}
void StudentData::set(int num,string name,char sex,double chin,double math,double eng,double ave)
{ number=num;
name=name;
sex=sex;
chinese=chin;
math=math;
english=eng;
average=ave;
}
void StudentData::input()
{ cout<<"学号(int):";
cin>>number;
cout<<"姓名(string):";
cin>>name;
cout<<"性别(男1/女2):";
cin>>sex;
cout<<"语文、数学、英语各科成绩(double):";
cin>>chinese>>math>>english;
average=(chinese+math+english)/3;
}
void StudentData::output()
{ cout<<"学号:"<<setw(6)<<number<<endl;
cout<<"姓名:"<<setw(6)<<name<<endl;
if(sex=='1')
cout<<"性别:"<<setw(6)<<"男 "<<endl;
else
cout<<"性别:"<<setw(6)<<"女 "<<endl;
cout<<"语文:"<<setw(6)<<chinese<<endl<<"数学:"<<setw(6)<<math<<endl<<"英语:"<<setw(6)<<english<<endl;
cout<<"平均分:"<<setw(6)<<average<<endl;
} //StudentData类结束
class Management //定义Management类,用来对学生进行管理
{
StudentData s[smax]; //用数组s保存所有学生信息
int top=0; //top表示数组中学生数目
public:
Management(){top=0;} //构造函数
以下是管理功能成员函数
void add(); //添加人员
void show(); //显示人员
void total(); //统计人数
void change(); //修改学生信息
void change_number(); //按编号修改
void change_name(); //按姓名修改
void Delete(); //删除学生信息
void Delete_number(); //按编号删除
void Delete_name(); //按姓名删除
void file(); //存取菜单
void save(); //储存
void read(); //读取
void search(); //查找学生信息
};
//Management类外定义成员函数/
void Management::add() //新添加学生
{ if(top>=smax)
{cout<<"空间已满,不能添加!"<<endl;
return;
}
StudentData stu;
cout<<"正在添加学生......"<<endl;;
stu.input();
s[top]=stu;
for(int i=0;i<top;i++)
{if(stu.getnumber()==s[i].getnumber())
{ cout<<"该编号已存在,添加失败!"<<endl;
return ;
}
}
cout<<"添加成功!"<<endl;
cout<<endl;
top++; // 调整学生个数
}
void Management::show() //显示学生信息
{
if(top==0){cout<<"没有信息!"<<endl;return;}
for(int i=0;i<top;i++)
s[i].output();
cout<<endl;
}
void Management::search() { //查找学生信息
if (top == 0) {
cout << "无数据" << endl;
return;
}
cout << "请输入所需查询学生的学号";
int a; cin >> a;
for (int i = 0; i < top; i++) {
if (a == s[i].getnumber())
{
s[i].output(); cout << endl; return;
}
if (a !=s[i].getnumber())
{
cout << "无数据请继续" << endl;
}
cout << endl;
}
}
void Management::total() //统计学生信息
{int n1=0;
int n2=0;
int n3=0;
int t;
for(int i=0;i<top;i++)
if(s[i].getaverage()>=85) n1++;
for(int i=0;i<top;i++)
if(s[i].getaverage()>=60) n2++;
for(int i=0;i<top;i++)
if(s[i].getaverage()<60) n3++;
cout<<"学生总人数为:"<<top<<" 人"<<endl;
/*
for(int i=0;i<top;i++)
{
for(int j=0;j<=top-i-1;j++)
{
if(s[j].getaverage()>s[j+1].getaverage())
{
t=s[j].getaverage();
s[j].getaverage() ==s[j+1].getaverage();
s[j+1].getaverage() == t;
}
}
cout<<" "<<s[i].getnumber()<<" "<<s[i].getname()<<" "<<s[i].getsex()<<" "
<<s[i].getchinese()<<" "<<s[i].getmath()<<" "<<s[i].getenglish()<<" "<<s[i].getaverage()<<endl;
}*/
cout<<"平均分超过85的学生人数为:"<<n1<<" 人"<<endl;
cout<<"平均分超过60的学生人数为:"<<n2<<" 人"<<endl;
cout<<"平均分低于60的学生人数为:"<<n3<<" 人"<<endl;
}
//修改功能
void Management::change() //修改子菜单
{
if (top==0) {cout<<"没有学生信息"<<endl;return;}
char choice='1';
do{
cout<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
cout<<"* *"<<endl;
cout<<"* 1 : 按学号 2 : 按姓名 0 :返回 *"<<endl;
cout<<"* *"<<endl;
cout<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
cout<<"请输入您的选择:";
cin>>choice;
switch(choice)
{
case '1':change_number();
break;
case '2':change_name();
break;
case '0':cout<<"您已安全返回!"<<endl;
break;
default:cout<<"没有此选项,请重选。"<<endl;
break;
}
}while(choice!='0');
}
void Management::change_number() //按编号修改
{
int x1;
cout<<"请输入要修改的学生的编号:";
cin>>x1;
for(int i=0;i<top;i++)
{
if(s[i].getnumber()==x1)
{
s[i].output();
cout<<endl;
s[i].input();
while(s[i].getnumber()!=x1)
{
cout<<"编号不能修改!"<<endl;
s[i].input();
}
cout<<"修改成功!"<<endl;
s[i].output();
return;
}
}
cout<<"该学员不存在!"<<endl;
}
void Management::change_name() //按姓名修改
{ char c;
bool flag=false;
string h1;
cout<<"请输入要修改的学生的姓名:";
cin>>h1;
for(int i=0;i<top;i++)
{
if(s[i].getname()==h1)
{ flag=true;
s[i].output();
cout<<endl;
cout<<"要修改这条记录吗?(是y/否n)"<<endl;
cin>>c;
if(c=='y')
{int n=s[i].getnumber();
s[i].output();
cout<<endl;
s[i].input();
while(s[i].getnumber()!=n)
{
cout<<"编号不能修改!"<<endl;
s[i].input();
}
cout<<"修改成功!"<<endl;
s[i].output();
}
if(c=='n')
{
cout<<"取消成功"<<endl;
return;
}
}
}
if(flag)
cout<<endl<<"按姓名修改执行完毕!"<<endl;
else
cout<<"该学生不存在!"<<endl;
}
//删除功能
void Management:: Delete() //删除子菜单
{
if (top==0) {cout<<"****没有学生信息!不能进行删除操作!****"<<endl;return;}
int choice;
do{
cout<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
cout<<"* *"<<endl;
cout<<"* 1 : 按编号 2 : 按姓名 0 :返回 *"<<endl;
cout<<"* *"<<endl;
cout<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
cout<<"请输入您的选择:";
cin>>choice;
switch(choice)
{
case 1:Delete_number();
break;
case 2:Delete_name();
break;
case 0:cout<<"您已安全返回."<<endl;
break;
default:cout<<"没有此选项!请重选!"<<endl;
break;
}
}while(choice!=0);
}
void Management:: Delete_number() /按编号进行删除
{
char c1;
int bh,i;
cout<<"请输入要删除的学生编号:";
cin>>bh;
for(i=0;i<top;i++) //查找该编号
{ if(s[i].getnumber()==bh)
{
s[i].output();
break;
}
}
if(i>=top)
{
cout<<"无此编号学生!";
return ;
}
cout<<endl<<"是否删除此项(y/n):";
cin>>c1;
if(c1=='y')
{
for(int k=i;k<top-1;k++)
{
s[k]=s[k+1]; //从i开始,后往前覆盖
}
cout<<"删除成功!"<<endl;
top--; //人数减一
return ;
}
if(c1=='n')
{
cout<<"取消成功"<<endl;
return ;
}
}
void Management:: Delete_name() /按姓名进行删除
{ bool flag=false;
char c1;
string xm;
cout<<"请输入要删除的学生姓名:"; //查找该姓名
cin>>xm;
for(int i=0;i<top;i++)
{
if(s[i].getname()==xm)
{ flag=true;
s[i].output();
cout<<endl<<"要删除这条记录吗?(y/n):"<<endl;
cin>>c1;
if(c1=='y')
{for(int k=i;k<top-1;k++) //删除
{s[k]=s[k+1];}
cout<<"删除成功!"<<endl;
top--; //人数减一
break;
}
if(c1=='n')
{
cout<<"取消成功"<<endl;
return;
}
}
}
if(flag)
cout<<"按姓名删除执行完毕!"<<endl;
else
cout<<"该学生不存在!"<<endl;
}
/ 文件管理 /
void Management::file() //存取子菜单
{
int choice=1;
do{
cout<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * "<<endl;
cout<<"* *"<<endl;
cout<<"* 1 : 保存 2 : 读入 0 :返回 *"<<endl;
cout<<"* *"<<endl;
cout<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
cout<<"请输入您的选择:";
cin>>choice;
switch(choice)
{
case 1:save();
break;
case 2:read();
break;
case 0:cout<<"您已安全返回!"<<endl;
break;
default:cout<<"没有此选项!请重选!"<<endl;
break;
}
}while(choice!=0);
}
void Management::save() //保存信息至文件
{
ofstream out("D:\\学生成绩.txt",ios::out); //假设文件保存为D盘根目录下,文件名:学生成绩.txt
if (!out)
{
cerr<<" 打开失败!"<<endl;
return;
}
for (int i=0;i<top;i++)
{
out<<s[i].getnumber()<<"\t"; //写进磁盘保存,以下同理
out<<s[i].getname()<<"\t";
out<<s[i].getsex()<<"\t";
out<<s[i].getchinese()<<"\t";
out<<s[i].getmath()<<"\t";
out<<s[i].getenglish()<<"\t";
out<<s[i].getaverage()<<"\t";
}
cout<<"保存成功!"<<endl;
cout<<endl;
out.close();
}
void Management::read() //从文件读取信息
{
ifstream in("D:\\学生成绩.txt",ios::in);
int number;
char sex;
string name;
double chinese,math,english,average;
if (!in)
{
cerr<<"打开失败!"<<endl;
return ;
}
int i=0;
while(in>>number>>name>>sex>>chinese>>math>>english>>average) //这种方法可以忽略文件最后的空行,避免while(!in.eof())产生的错误
{ s[i].set(number,name,sex,chinese,math,english,average);
i++;
}
top=i;
cout<<"读取成功!"<<endl;
in.close();
}
int main()
{ Management ma; //定义人员管理类型对象ma
int choice=1;
while(choice!=0)
{
cout<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
cout<<"* 欢迎进入学生成绩管理系统 *"<<endl;
cout<<"* *"<<endl;
cout<<"* 1.添加 2.查找 3.修改 4.统计 *"<<endl;
cout<<"* *"<<endl;
cout<<"* 5.删除 6.显示 7.存取 0.退出 *"<<endl;
cout<<"* *"<<endl;
cout<<"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"<<endl;
cout<<"输入您操作的选项:";
cin>>choice;
switch(choice)
{
case 1:
cout<<"****您选择了:添加功能!****"<<endl;
ma.add();
break;
case 2:
cout<<"****您选择了:查找功能!****"<<endl;
ma.search();
break;
case 3:
cout<<"****您选择了:修改功能!****"<<endl;
ma.change();
break;
case 4:ma.total();
cout<<"****您选择了:统计功能!****"<<endl;
break;
case 5:
cout<<"****您选择了:删除功能!****"<<endl;
ma.Delete();
break;
case 6:
cout<<"****您选择了:显示功能!****"<<endl;
ma.show();
break;
case 7:
cout<<"****您选择了:存取功能!****"<<endl;
ma.file();
break;
case 0:
cout<<"****退出成功!****"<<endl;
break;
default:cout<<"****无此选项,请重试!****"<<endl;
break;
}
}
cout<<" *****谢谢您使用本系统!再见!*****"<<endl;
return 0;
}