#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;
void infoSave(); //信息保存函数
void infoSaveAgain(); //再次保存
void display(); //显示
char press;//全局变量,用于表示键盘输入的字母
int choose; //全局变量,用于switch语句
int n;//全局变量,用于记录学生个数
class Student
{
public:
int num;
string name;
string classnum;
float math;
float english;
float chinese;
float sum;
float average;
};
Student stud[100];// //创建stud对象数组,用于存储每一个学生对象。
void infoWrite() //资料写入模块
{
cout<<"请根据你的需要输入学生的个数:";
cin>>n;
for(int a=0;a<n;a++)
{
cout<<"请输入第"<<a+1<<"个学生资料:"<<endl;
cout<<"姓名:"<<' ';
cin>>stud[a].name;
cout<<"学号:"<<' ';
cin>>stud[a].num;
cout<<"班级:"<<' ';
cin>>stud[a].classnum;
cout<<"数学成绩:"<<' ';
cin>>stud[a].math;
cout<<"英语成绩:"<<' ';
cin>>stud[a].english;
cout<<"语文成绩:"<<' ';
cin>>stud[a].chinese;
stud[a].sum=stud[a].math+stud[a].english+stud[a].chinese;
stud[a].average=(stud[a].math+stud[a].english+stud[a].chinese)/3;
}
cout<<"输入成功,学生资料是否保存?(y/n)"<<endl;
cin>>press;
switch(press)
{
case 'y' :
system("cls");
infoSave(); //调用信息保存函数
break;
default:
cout<<"不保存!";
break;
}
}
void infoRead() //信息读取模块
{
char filename[20];
cout<<"从文件中读取信息!"<<endl;
cout<<"请输入文件名:"<<endl;
cin>>filename;
ifstream infile(filename); //定义输入文件流对象
if(!infile)
{
cout<<"open error!"<<endl;
exit(1);
}//文件不存在
do
{ int i=0;
infile>>stud[i].name>>stud[i].num>>stud[i].classnum; //从磁盘读取学生的信息,放入对象数组中
infile>>stud[i].math>>stud[i].english>>stud[i].chinese;
cout<<"学生的学号:"<<stud[i].num<<"" //向显示器输出学生的信息
<<"姓名:"<<stud[i].name<<""
<<"班级:"<<stud[i].classnum<<""
<<"数学成绩:"<<stud[i].math<<""
<<"英语成绩:"<<stud[i].english<<""
<<"语文成绩:"<<stud[i].chinese<<endl;
i++;
n++;
}while(!infile.eof()); //判断是否到了文件的尾部,避免读取超过范围
infile.close();
for(int i=;i<n;i++)
{
cout<<"学生的学号:"<<stud[i].num<<"" //向显示器输出学生的信息
<<"姓名:"<<stud[i].name<<""
<<"班级:"<<stud[i].classnum<<""
<<"数学成绩:"<<stud[i].math<<""
<<"英语成绩:"<<stud[i].english<<""
<<"语文成绩:"<<stud[i].chinese<<endl;
}
cout<<"读取成功!"<<endl;
system("pause");
system("cls");
}
//信息保存模块
void infoSaveAgain()
{
int i;
char filename[20];
for(i=0;i<n;i++)
{
cout<<"学生的学号:"<<stud[i].num<<""
<<"姓名:"<<stud[i].name<<""
<<"班级:"<<stud[i].classnum<<""
<<"数学成绩:"<<stud[i].math<<""
<<"英语成绩:"<<stud[i].english<<""
<<"语文成绩:"<<stud[i].chinese<<endl;
}
cout<<"将记录保存在文件夹!"<<endl;
cout<<endl;
cout<<"请输入原文件名:"<<endl;
cin>>filename;
ofstream outfile(filename);//打开所需文件
if(!outfile)
{cout<<"open error!"<<endl;}
for(i=0;i<n;i++)
{
outfile<<" "<<stud[i].num<<""<<stud[i].name<<""<<stud[i].classnum<<" "; //从对象数组写入
outfile<<stud[i].math<<""<<stud[i].english<<" "<<stud[i].chinese;
}
outfile.close();
cout<<"保存成功!"<<endl;
system("pause");
system("cls");
}
void infoSave()
{
int i;
char filename[20];
for(i=0;i<n;i++)
{
cout<<"学生的学号:"<<stud[i].num<<""
<<"姓名:"<<stud[i].name<<""
<<"班级:"<<stud[i].classnum<<""
<<"数学成绩:"<<stud[i].math<<""
<<"英语成绩:"<<stud[i].english<<""
<<"语文成绩:"<<stud[i].chinese<<endl;
}
cout<<"将记录保存在文件夹!"<<endl;
cout<<endl;
cout<<"请输入文件名:"<<endl;
cin>>filename;
ofstream outfile(filename);
if(!outfile)
{cout<<"open error!"<<endl;}
for(i=0;i<n;i++)
{
outfile<<""<<stud[i].num<<" "<<stud[i].name<<""<<stud[i].classnum<<" "; //从对象数组写入
outfile<<stud[i].math<<""<<stud[i].english<<" "<<stud[i].chinese;
}
outfile.close();
cout<<"保存成功!"<<endl;
system("pause");
system("cls");
}
//信息操作模块
void del() //删除资料
{
cout<<"所有学生的名字:"<<endl;
for(int i=0;i<n;i++)
{cout<<stud[i].name<<endl;}
string delname;
int i=0;
do
{ cout<<"请输入你要删除的学生名字:"<<endl;
cin>>delname;
while(stud[i].name!=delname&&i<n) //防止删除超过范围
i++;
if(stud[i].name==delname) //将信息逐个对比
{
stud[i].num=stud[i+1].num;
stud[i].name=stud[i+1].name;
stud[i].classnum=stud[i+1].classnum;
stud[i].math=stud[i+1].math;
stud[i].english=stud[i+1].english;
stud[i].chinese=stud[i+1].chinese;
cout<<"删除成功!"<<endl;n=n-1;
}
else if(i==n)
{ cout<<"该信息不存在,无法删除!"<<endl;}
cout<<"(是否继续删除?(y/n))"<<endl;
cin>>press;
}while(press=='y'||press=='Y');
infoSaveAgain();//将信息再保存一次
}
void infoAdd() //添加资料
{do
{
cout<<"请添加新的学生信息"<<endl;
cout<<"新的学生学号:"<<endl;
cin>>stud[n].num;
cout<<"新学生姓名:"<<endl;
cin>>stud[n].name;
cout<<"新学生班级:"<<endl;
cin>>stud[n].classnum;
cout<<"新学生的数学成绩:"<<endl;
cin>>stud[n].math;
cout<<"新学生的英语成绩:"<<endl;
cin>>stud[n].english;
cout<<"新学生的语文成绩:"<<endl;
cin>>stud[n].chinese;
stud[n].sum=stud[n].math+stud[n].english+stud[n].chinese;
stud[n].average=(stud[n].math+stud[n].english+stud[n].chinese)/3;
n++;
cout<<"(是否继续操作?(y/n))"<<endl;
cin>>press;
}while(press=='y'||press=='Y');
cout<<"添加成功,学生资料是否保存?(y/n)"<<endl;
cin>>press;
switch(press)
{ case 'y' :
infoSave();
break;
default:
cout<<"不保存!";
break;
}
}
void infoRevise() //修改资料
{ a:string find_name;
int i;
cout<<"请输入你要修改的学生名字:"<<endl;
cin>>find_name;
for(i=0;i<n;i++)
if(stud[i].name==find_name)
{
cout<<stud[i].name<<""<<"的信息已找到:"<<endl;
cout<<"学生的学号:"<<stud[i].num<<''
<<"姓名:"<<stud[i].name<<''
<< "班级:"<<stud[i].classnum<<''
<<"数学成绩:"<<stud[i].math<<''
<<"英语成绩:"<<stud[i].english<<''
<<"语文成绩:"<<stud[i].chinese<<endl;
break;
}
if(stud[i].name!=find_name)
{
cout<<"找不到该学生姓名"<<endl;
cout<<"请重新查找!"<<endl;
goto a; //回到a,重新实现查找到要修改的学生资料
}
for(int j=0;j<n;j++)
{
cout<<"请输入新的信息:"<<endl;
cout<<"学号:"<<' ';
cin>>stud[j].num;
cout<<"姓名:"<<' ';
cin>>stud[j].name;
cout<<"班级:"<<' ';
cin>>stud[j].classnum;
cout<<"数学成绩:"<<' ';
cin>>stud[j].math;
cout<<"英语成绩:"<<' ';
cin>>stud[j].english;
cout<<"语文成绩:"<<' ';
cin>>stud[j].chinese;
stud[i].num=stud[j].num;stud[i].name=stud[j].name;
stud[i].classnum=stud[j].classnum;stud[i].math=stud[j].math;
stud[i].english=stud[j].english;stud[i].chinese=stud[j].chinese;break;}
cout<<"修改成功,是否保存?(y/n)"<<endl;
cin>>press;
switch(press)
{case 'y' :
infoSave();
break;
default:
cout<<"不保存!";
break;
}
}
//统计模块
void orderTotalScore() //按总分排名
{
int numtemp;
string nametemp;
string classnumtemp;
float mathtemp;
float engtemp;
float chitemp;
float sumtemp;
float avetemp;
int i=0;
for(i=0;i<n-1;i++) //冒泡法排序
for(int j=0;j<n-1-i;j++)
if(stud[j].sum>stud[j+1].sum)
{
sumtemp=stud[i].sum;stud[i].sum=stud[i+1].sum;stud[i+1].sum=sumtemp;
numtemp=stud[i].num;stud[i].num=stud[i+1].num;stud[i+1].num=numtemp;
nametemp=stud[i].name;stud[i].name=stud[i+1].name;stud[i+1].name=nametemp;
classnumtemp=stud[i].classnum;stud[i].classnum=stud[i+1].classnum;stud[i+1].classnum=classnumtemp;
mathtemp=stud[i].math;stud[i].math=stud[i+1].math;stud[i+1].math=mathtemp;
engtemp=stud[i].english;stud[i].english=stud[i+1].english;stud[i+1].english=engtemp;
chitemp=stud[i].chinese;stud[i].chinese=stud[i+1].chinese;stud[i+1].chinese=chitemp;
avetemp=stud[i].average;stud[i].average=stud[i+1].average;stud[i+1].average=avetemp;
}
cout<<"学生按总分排名:"<<endl;
cout<<"学号"
<<" "<<"姓名"
<<" "<<"班级"
<<" "<<"总分"<<endl;
for(int i=0;i<n;i++)
{
cout<<setw(4)<<stud[i].num<<" "
<<setw(4)<<stud[i].name<<" "
<<setw(4)<<stud[i].classnum<<" "
<<setw(4)<<stud[i].sum<<endl;
cout<<endl;
}
}
void orderAverage() //按平均分排名
{
int numtemp;
string nametemp;
string classnumtemp;
float mathtemp;
float engtemp;
float ctemp;
float sumtemp;
float avetemp;
for(int i=0;i<n-1;i++) //选择法排序
for(int j=0;j<n-1-i;j++) //以下的按各单科成绩和平均分也是运用选择法排序
if(stud[j].average>stud[j+1].average)
{
avetemp=stud[i].average;stud[i].average=stud[i+1].average;stud[i+1].average=avetemp;
sumtemp=stud[i].sum; stud[i].sum=stud[i+1].sum;stud[i+1].sum=sumtemp;
numtemp=stud[i].num;stud[i].num=stud[i+1].num;stud[i+1].num=numtemp;
nametemp=stud[i].name;stud[i].name=stud[i+1].name;stud[i+1].name=nametemp;
classnumtemp=stud[i].classnum;stud[i].classnum=stud[i+1].classnum;
stud[i+1].classnum=classnumtemp;
mathtemp=stud[i].math;stud[i].math=stud[i+1].math;stud[i+1].math=mathtemp;
engtemp=stud[i].english;stud[i].english=stud[i+1].english;stud[i+1].english=engtemp;
ctemp=stud[i].chinese;stud[i].chinese=stud[i+1].chinese;stud[i+1].chinese=ctemp;
}
cout<<"学生按平均分排名:"<<endl;
cout<<"学号"
<<" "<<"姓名"
<<" "<<"班级"
<<" "<<"平均分"<<endl;
for(int i=0;i<n;i++)
{
cout<<setw(4)<<stud[i].num<<" "
<<setw(4)<<stud[i].name<<" "
<<setw(4)<<stud[i].classnum<<" "
<<setw(4)<<stud[i].average<<endl;
cout<<endl;
}
}
void maxScore() //计算最高总分
{
float max;
max=stud[0].sum;
for(int j=0;j<n;j++)
{
if(stud[j].sum>max)
max=stud[j].sum;
}
cout<<"最高总分为:"<<max<<endl;}
void minScore() //计算最低总分
{
float min;
min=stud[0].sum;
for(int j=0;j<n;j++)
{
if(stud[j].sum<min)
min=stud[j].sum;
}
cout<<"最低总分为:"<<min<<endl;
}
//查找模块
void accordingNum() //按学生学号查找资料
{ do
{
int findnum,i=0;
cout<<"请输入你要查询的学号:"<<' ';
cin>>findnum;
for(i=0;i<n;i++)
if(stud[i].num==findnum)
{
cout<<"学号为"<<stud[i].num<<"的学生的资料已找到:"<<endl;
cout<<"学号:"<<stud[i].num<<''
<<"姓名:"<<stud[i].name<<''
<<"班级:"<<stud[i].classnum<<''
<<"数学成绩:"<<stud[i].math<<''
<<"英语成绩:"<<stud[i].english<<''
<<"语文成绩:"<<stud[i].chinese<<endl;
break;
}
if(stud[i].num!=findnum)
cout<<"找不到该学号"<<endl;
cout<<"(是否继续操作?(y/n))"<<endl;
cin>>press;
}while(press=='y'||press=='Y') ;}
void accordingName() //按学生姓名查找资料
{ do
{
string findname;
cout<<"请输入你要查询的姓名:"<<' ';
cin>>findname;
int i;
for(i=0;i<n;i++)
if(stud[i].name==findname)
{
cout<<"姓名为"<<stud[i].name<<"的学生的资料已找到"<<endl;
cout<<"学号:"<<stud[i].num<<''
<<"姓名:"<<stud[i].name<<''
<<"班级:"<<stud[i].classnum<<''
<<"数学成绩:"<<stud[i].math<<''
<<"英语成绩:"<<stud[i].english<<''
<<"语文成绩:"<<stud[i].chinese<<endl;
break;
}
if(stud[i].name!=findname)
cout<<"找不到该姓名"<<endl;
cout<<"(是否继续操作?(y/n))"<<endl;
cin>>press;
}while(press=='y'||press=='Y');
}
void accordingClassNum() //按学生所在班级查找资料
{ do
{
string findclassnum;
cout<<"请输入你要查询的班级:"<<' ';
cin>>findclassnum;
int i,count=0;
for(i=0;i<n;i++)
{
if(stud[i].classnum==findclassnum)
{
cout<<"所在班级为"<<stud[i].classnum<<"的学生资料已找到:"<<endl;
cout<<"学生的学号:"<<stud[i].num<<''
<<"姓名:"<<stud[i].name<<''
<<"班级:"<<stud[i].classnum<<''
<<"数学成绩:"<<stud[i].math<<''
<<"英语成绩:"<<stud[i].english<<''
<<"语文成绩:"<<stud[i].chinese<<endl;
cout<<endl;
}
if(stud[i].classnum!=findclassnum)
count++;
}
if(count==n)
cout<<"找不到该班级"<<endl;
cout<<"(是否继续操作?(y/n))"<<endl;
cin>>press;
}while(press=='y'||press=='Y') ;
}
//用户界面
void dataManagement() //资料管理界面
{ system("cls");
while(choose!=0)
{
cout<<"\t\t\t*************************************"<<endl;
cout<<"\t\t\t* *"<<endl;
cout<<"\t\t\t* 学生资料管理 *"<<endl;
cout<<"\t\t\t* *"<<endl;
cout<<"\t\t\t* 1.录入学生资料 *"<<endl;
cout<<"\t\t\t* 2.删除学生资料 *"<<endl;
cout<<"\t\t\t* 3.添加学生资料 *"<<endl;
cout<<"\t\t\t* 4.修改学生资料 *"<<endl;
cout<<"\t\t\t* 5.读取学生资料 *"<<endl;
cout<<"\t\t\t* 0.返回 *"<<endl;
cout<<"\t\t\t* *"<<endl;
cout<<"\t\t\t* *"<<endl;
cout<<"\t\t\t*************************************"<<endl;
cout<<"\t\t 请输入0-5之间的任意一数字:"<<' ';
cin>>choose;
switch(choose) //运用switch多分支选择语句
{ case 1:
infoWrite();
break;
case 2:
del();
break;
case 3:
infoAdd();
break;
case 4:
infoRevise();
break;
case 5:
infoRead();
break;
case 0:
system("cls");
break;
default:
cout<<"\t\t\t 输入错误,返回"<<endl;
system("pause");
system("cls");
break;
}
}
}
void statistics() //统计工具界面
{ while(choose!=0)
{
cout<<"\t\t\t "<<endl;
cout<<"\t\t\t*************************************"<<endl;
cout<<"\t\t\t* 学生成绩统计管理 *"<<endl;
cout<<"\t\t\t* *"<<endl;
cout<<"\t\t\t* 1.按总分排名 *"<<endl;
cout<<"\t\t\t* 2.最高总分 *"<<endl;
cout<<"\t\t\t* 3.最低总分 *"<<endl;
cout<<"\t\t\t* 4.按平均分排名 *"<<endl;
cout<<"\t\t\t* 0.返回 *"<<endl;
cout<<"\t\t\t* *"<<endl;
cout<<"\t\t\t* 按Enter继续 *"<<endl;
cout<<"\t\t\t "<<endl;
cout<<"\t\t\t*************************************"<<endl;
cout<<"\t\t 请输入0-4之间的任意一数字:"<<' ';
cin>>choose;
switch(choose)
{case 1:
orderTotalScore();
break;
case 2:
maxScore();
break;
case 3:
minScore();
break;
case 4:
orderAverage();
break;
case 0:
system("cls");
break;
default:
cout<<"\t\t\t输入错误,返回"<<endl;
system("pause");
system("cls");
break;
}
}
}
void inquiry() //查询工具界面
{while(choose!=0){
cout<<"\t\t\t "<<endl;
cout<<"\t\t\t*************************************"<<endl;
cout<<"\t\t\t* 学生查询管理 *"<<endl;
cout<<"\t\t\t* *"<<endl;
cout<<"\t\t\t* 1.按学号查询 *"<<endl;
cout<<"\t\t\t* 2.按姓名查询 *"<<endl;
cout<<"\t\t\t* 3.按所在班级查询 *"<<endl;
cout<<"\t\t\t* 0.返回 *"<<endl;
cout<<"\t\t\t* *"<<endl;
cout<<"\t\t\t* 按Enter继续 *"<<endl;
cout<<"\t\t\t "<<endl;
cout<<"\t\t\t*************************************"<<endl;
cout<<"\t\t 请输入0-3之间的任意一数字:"<<'';cin>>choose;
switch(choose)
{ case 1:
accordingNum();
break;
case 2:
accordingName();
break;
case 3:
accordingClassNum();
break;
default:
system("cls");
break;
}
}
}
int main() //系统主界面
{while(choose!='0')
{ cout<<"\t\t***************************************************"<<endl;
cout<<"\t\t* *"<<endl;
cout<<"\t\t* 学生成绩管理系统 *"<<endl;
cout<<"\t\t* *"<<endl;
cout<<"\t\t* *"<<endl;
cout<<"\t\t* 1.学生资料管理 *"<<endl;
cout<<"\t\t* 2.学生成绩统计工具 *"<<endl;
cout<<"\t\t* 3.学生资料查询工具 *"<<endl;
cout<<"\t\t* 0.退出系统 *"<<endl;
cout<<"\t\t* *"<<endl;
cout<<"\t\t* *"<<endl;
cout<<"\t\t***************************************************"<<endl;
cout<<"\t\t 请输入0-3之间的任意一数字:"<<' ';
cin>>choose;
switch(choose)
{ case 1:
dataManagement();
break;
case 2:
statistics();
break;
case 3:
inquiry();
break;
case 4:
display();
case 0:
exit(0);
break;
default:
cout<<"\t\t\t输入错误,返回"<<endl;
system("pause");
system("cls");
break;
}
}
return 0;
}
void display()
{ int i=0;
for(i=0;i<n;i++)
{ cout<<"学生学号:"<<stud[i].num<<""
<<"姓名:"<<stud[i].name<<""
<<"班级:"<<stud[i].classnum<<""
<<"数学成绩:"<<stud[i].math<<""
<<"英语成绩:"<<stud[i].english<<""
<<"语文成绩:"<<stud[i].chinese<<endl;
}
system("pause");
}