能够基本实现学生成绩管理系统,其中包括对学生信息的插入,显示,删除,修改,对学生成绩进行排序功能,还能够将数据保存至文件中。
#include <iostream>
#include <cstdlib>
#include <string>
#include<fstream>
#include<cstdlib>
#include<cstring>
using namespace std;
class student//学生类
{
public:
~student();//析构函数
void display();
void input();//输入学生信息
void show();//输出学生信息
void Delete();//删除学生信息
void seek();//查找学生信息
void update();//改动学生信息
void sort();//对学生的语文成绩排序
friend ostream& operator<<(ostream &ostream,student &s);
private:
student *s; //学生类指针
int stu_num; //学生的人数
string name; //姓名
string num; //学号
int escore; //英语成绩
int mscore; //高数成绩
int cscore; //c++成绩
int sum; //总分
};
ostream& operator<<(ostream &ostream,student &s)
{
ostream<<s.name<<","<<s.num<<","<<s.escore<<","<<s.mscore<<","<<s.cscore<<","<<s.sum<<endl;
return ostream;
}
int main()
{
int Item;//操作命令
student s;//学生对象
s.display();
while(1)
{
cout<<"请选择操作命令:";
cin>>Item;
//system("cls");//清屏
switch(Item)
{
case 1://输入学生信息
{
s.input();
}
break;
case 2://输出学生信息
{
s.show();
}
break;
case 3://删除学生信息
{
s.Delete();
}
break;
case 4://查找学生信息
{
s.seek();
}
break;
case 5://改动学生信息
{
s.update();
}
break;
case 6://对学生排序
{
s.sort();
s.show();
}
break;
case 7:
break;
default:
break;
}
}
return 0;
}
//界面函数
void student :: display()
{
printf("*********************************\n");
printf(" 欢迎进入学生成绩管理系统 \n");
printf("*********************************\n");
printf("\n");
printf("\n");
printf("*********************************\n");
printf(" 主菜单 \n");
printf("\n");
printf(" 【1】输入学生基本信息 \n");
printf(" 【2】显示学生基本信息 \n");
printf(" 【3】删除学生基本信息 \n");
printf(" 【4】查询学生基本信息 \n");
printf(" 【5】修改学生基本信息 \n");
printf(" 【6】排序学生基本信息 \n");
printf(" 【7】关闭学生成绩管理系统 \n");
printf("\n");
printf("\n");
printf("*********************************\n");
printf("\n");
printf("\n");
printf("*************若有侵权************\n");
printf("************律师函警告***********\n");
}
//析构函数
student::~student()
{
delete(s);
}
//输入学生的信息
void student :: input ()
{
system("cls");
cout<<"*****************************"<<endl;
cout<<"***********输入信息**********"<<endl;
cout<<"*****************************"<<endl;
int len;//学生的人数
cout<<"请输入学生人数:";
cin>>len;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>len;
cin.get();
}
stu_num = len;
s = new student[stu_num];
for(int i=0; i<len; i++)
{
cout<<"请输入第"<<i+1<<"个学生的姓名:";
cin>>s[i].name;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].name;
cin.get();
}
cout<<"请输入第"<<i+1<<"个学生的学号:";
cin>>s[i].num;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].num;
cin.get();
}
for(int b=0; b<stu_num; b++)
{
if(b==i)
b++;
if(s[b].num==s[i].num)
{
cout<<"与已有学生的学号重复,请重新输入:";
cin>>s[i].num;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入: ";
cin>>s[i].num;
cin.get();
}
}
}
cout<<"请输入第"<<i+1<<"个学生的英语成绩:";
cin>>s[i].escore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].escore;
cin.get();
}
while(s[i].escore>100 || s[i].escore<0)
{
cout<<"输入有误!请重新输入:";
cin>>s[i].escore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].escore;
cin.get();
}
}
cout<<"请输入第"<<i+1<<"个学生的数学成绩:";
cin>>s[i].mscore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].mscore;
cin.get();
}
while(s[i].mscore>100 || s[i].mscore<0)
{
cout<<"输入有误!请重新输入:";
cin>>s[i].mscore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].mscore;
cin.get();
}
}
cout<<"请输入第"<<i+1<<"个学生的c++成绩:";
cin>>s[i].cscore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].cscore;
cin.get();
}
while(s[i].cscore>100 || s[i].cscore<0)
{
cout<<"输入有误!请重新输入:";
cin>>s[i].cscore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].cscore;
cin.get();
}
}
s[i].sum = s[i].escore + s[i].mscore + s[i].cscore;
ofstream fb("f1.txt",ios::out);
if(!fb)
{
cout<<"打开文件失败!"<<endl;
abort();
}
fb.seekp(0,ios::end);
for(int j=0; j<stu_num; j++)
{
fb<<s[j].name<<"\t"<<s[j].num<<"\t"<<s[j].escore<<"\t"<<s[j].mscore<<"\t"<<s[j].cscore<<"\t"<<s[j].sum;
cout<<endl;
}
fb.close();
system("cls");
}
}
//输出学生的信息
void student::show()
{
system("cls");
cout<<"*****************************"<<endl;
cout<<"***********显示结果**********"<<endl;
cout<<"*****************************"<<endl;
cout<<"姓名\t\t学号\t\t英语\t\t数学\t\tc++\t\t总分"<<endl;
fstream fa("f1.txt",ios :: binary | ios :: in);
if(!fa)
{
cout<<"该文件打不开!"<<endl;
abort(); //退出程序
}
fa.seekg(0,ios::beg);
for(int i=0; i<stu_num; i++)
{
cout<<s[i].name<<"\t\t"<<s[i].num<<"\t\t"<<s[i].escore<<"\t\t"<<s[i].mscore<<"\t\t"<<s[i].cscore<<"\t\t"
<<s[i].sum<<endl;
}
fa.close();
}
void student::Delete()//删除学生信息
{
system("cls");
cout<<"*****************************"<<endl;
cout<<"***********删除记录**********"<<endl;
cout<<"*****************************"<<endl;
cout<<endl;
char q;
cout<<"请选择根据学生姓名或者学号删除记录(n/x):";
cin>>q;
cin.get();
while(q!='n'&& q!='x')
{
cout<<"输入有误,请重新输入:";
cin>>q;
cin.get();
}
if(q=='n')
{
string sr;
cout<<"请输入你须要删除的学生的姓名:";
cin>>sr;
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>sr;
cin.get();
}
fstream fc("f1.txt",ios::in|ios::out|ios::binary);
if(!fc)
{
cout<<"打开文件失败!"<<endl;
abort();
}
fc.seekg(0,ios::beg);
int n;//标记姓名相等时的下标
int r=0;
//寻找姓名相等时的下标
for(int i=0; i<stu_num; i++)
{
//当姓名相等时
if(sr ==s[i].name)
{
r++;
cout<<"找到该同学!"<<endl;
n=i;
for(int j=n+1; j<stu_num; j++)
{
s[j-1] = s[j];
}
stu_num -= 1;
for(int k=0; k<stu_num; k++)
{
fc<<s[k].name<<"\t"<<s[k].num<<"\t"<<s[k].escore<<"\t"<<s[k].mscore<<"\t"<<s[k].cscore<<"\t"<<s[k].sum;
cout<<endl;
}
cout<<"删除成功!"<<endl;
fc.close();
}
}
if(r==0)
{
cout<<"查无此人!请重新输入:";
cin>>sr;
cin.get();
}
}
else if(q=='x')
{
string sa;
cout<<"请输入你须要删除的学生的学号:";
cin>>sa;
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>sa;
cin.get();
}
fstream fw("f1.txt",ios::in|ios::out|ios::binary);
if(!fw)
{
cout<<"打开文件失败!"<<endl;
abort();
}
fw.seekg(0,ios::beg);
int m;//标记姓名相等时的下标
int o=0;
//寻找姓名相等时的下标
for(int i=0; i<stu_num; i++)
{
//当姓名相等时
if(sa == s[i].num)
{
m = i;
o++;
cout<<"找到该同学!"<<endl;
for(int j=m+1; j<stu_num; j++)
{
s[j-1] = s[j];
}
stu_num -= 1;//学生人数降低一个
for(int a=0; a<stu_num; a++)
{
fw<<s[a].name<<"\t"<<s[a].num<<"\t"<<s[a].escore<<"\t"<<s[a].mscore<<"\t"<<s[a].cscore<<"\t"<<s[a].sum;
cout<<endl;
}
cout<<"删除成功!"<<endl;
fw.close();
}
}
if(o==0)
{
cout<<"查无此人!请重新输入:";
cin>>sa;
cin.get();
}
}
}
void student::seek()//查找学生信息
{
system("cls");
cout<<"*****************************"<<endl;
cout<<"***********查找记录**********"<<endl;
cout<<"*****************************"<<endl;
cout<<endl;
cout<<"请选择根据学号或者姓名查找2/1):(";
char se;
cin>>se;
while(se!='1'&&se!='2')
{
cout<<"输入有误!请重新输入:";
cin>>se;
cin.get();
}
if(se=='1')
{
string name;
cout<<"请输入你须要查找的学生的姓名:";
cin>>name;
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>name;
cin.get();
}
fstream fd("f1.txt",ios::in|ios::out|ios::binary);
if(!fd)
{
cout<<"文件打开失败!"<<endl;
abort();
}
fd.seekg(0,ios::beg);
cout<<"姓名\t\t学号\t\t英语\t\t数学\t\tc++\t\t总分"<<endl;
int i;
int h=0;
for(i=0; i<stu_num; i++)
{
if(name == s[i].name)
{
h++;
cout<<s[i].name<<"\t\t"<<s[i].num<<"\t\t"<<s[i].escore<<"\t\t"<<s[i].mscore<<"\t\t"<<s[i].cscore<<"\t\t"<<s[i].sum<<endl;
fd.close();
}
}
if(h==0)
{
cout<<"查无此人!请重新输入:";
cin>>name;
cin.get();
}
}
else if(se=='2')
{
string id;
cout<<"请输入你须要查找的学生的学号:";
cin>>id;
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>id;
cin.get();
}
fstream fe("f1.txt",ios::in|ios::out|ios::binary);
if(!fe)
{
cout<<"文件打开失败!"<<endl;
abort();
}
fe.seekg(0,ios::beg);
cout<<"姓名\t\t学号\t\t英语\t\t数学\t\tc++\t\t总分"<<endl;
int j;
int g=0;
for(j=0; j<stu_num; j++)
{
if(id == s[j].num)
{
g++;
cout<<s[j].name<<"\t\t"<<s[j].num<<"\t\t"<<s[j].escore<<"\t\t"<<s[j].mscore<<"\t\t"<<s[j].cscore<<"\t\t"<<s[j].sum<<endl;
fe.close();
}
}
if(g==0)
{
cout<<"查无此人!请重新输入:";
cin>>id;
cin.get();
}
}
}
void student::update()//改动学生信息
{
system("cls");
cout<<"*****************************"<<endl;
cout<<"***********查找记录**********"<<endl;
cout<<"*****************************"<<endl;
cout<<endl;
cout<<"请选择根据学号或者姓名查找(2/1):";
char sf;
cin>>sf;
while(sf!='1'&&sf!='2')
{
cout<<"输入有误!请重新输入:";
cin>>sf;
cin.get();
}
if(sf=='1')
{
string name1;
cout<<"请输入你须要更新的学生的姓名:";
cin>>name1;
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>name1;
cin.get();
}
fstream ff("f1.txt",ios::in|ios::out|ios::binary);
if(!ff)
{
cout<<"文件打开失败!"<<endl;
abort();
}
ff.seekg(0,ios::beg);
int i;
int u=0;
for(i=0; i<stu_num; i++)
{
if(name1 == s[i].name)
{
u++;
cout<<"改动前学生的信息:"<<endl;
cout<<s[i].name<<" "<<s[i].num<<" "<<s[i].escore<<" "<<s[i].mscore<<" "
<<s[i].cscore<<" "<<s[i].sum<<endl<<endl;
cout<<"请输入学生的学号:";
cin>>s[i].num;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].num;
cin.get();
}
for(int c=0; c<stu_num; c++)
{
if(c==i)
c++;
if(s[c].num==s[i].num)
{
cout<<"与已有学生的学号重复,请重新输入:";
cin>>s[i].num;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入: ";
cin>>s[i].num;
cin.get();
}
}
}
cout<<"请输入学生的英语成绩:";
cin>>s[i].escore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].escore;
cin.get();
}
while(s[i].escore>100 || s[i].escore<0)
{
cout<<"输入有误!请重新输入:";
cin>>s[i].escore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].escore;
cin.get();
}
}
cout<<"请输入学生的数学成绩:";
cin>>s[i].mscore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].mscore;
cin.get();
}
while(s[i].mscore>100 || s[i].mscore<0)
{
cout<<"输入有误!请重新输入:";
cin>>s[i].mscore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].mscore;
cin.get();
}
}
cout<<"请输入学生的c++成绩:";
cin>>s[i].cscore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].cscore;
cin.get();
}
while(s[i].cscore>100 || s[i].cscore<0)
{
cout<<"输入有误!请重新输入:";
cin>>s[i].cscore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].cscore;
cin.get();
}
}
s[i].sum = s[i].escore + s[i].mscore + s[i].cscore;
for(int x=0; x<stu_num; x++)
{
ff<<s[x].name<<"\t"<<s[x].num<<"\t"<<s[x].escore<<"\t"<<s[x].mscore<<"\t"<<s[x].cscore<<"\t"<<s[x].sum;
cout<<endl;
}
ff.close();
}
}
if(u==0)
{
cout<<"查无此人!请重新输入:";
cin>>name1;
cin.get();
}
}
if(sf=='2')
{
string id1;
cout<<"请输入你须要更新的学生的学号:";
cin>>id1;
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>id1;
cin.get();
}
fstream fg("f1.txt",ios::in|ios::out|ios::binary);
if(!fg)
{
cout<<"文件打开失败!"<<endl;
abort();
}
fg.seekg(0,ios::beg);
int i;
int v=0;
for(i=0; i<stu_num; i++)
{
if(id1 == s[i].num)
{
v++;
cout<<"改动前学生的信息:"<<endl;
cout<<s[i].name<<" "<<s[i].num<<" "<<s[i].escore<<" "<<s[i].mscore<<" "
<<s[i].cscore<<" "<<s[i].sum<<endl<<endl;
cout<<"请输入学生的姓名:";
cin>>s[i].name;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].name;
cin.get();
}
cout<<"请输入学生的英语成绩:";
cin>>s[i].escore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].escore;
cin.get();
}
while(s[i].escore>100 || s[i].escore<0)
{
cout<<"输入有误!请重新输入:";
cin>>s[i].escore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].escore;
cin.get();
}
}
cout<<"请输入学生的数学成绩:";
cin>>s[i].mscore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].mscore;
cin.get();
}
while(s[i].mscore>100 || s[i].mscore<0)
{
cout<<"输入有误!请重新输入:";
cin>>s[i].mscore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].mscore;
cin.get();
}
}
cout<<"请输入学生的c++成绩:";
cin>>s[i].cscore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].cscore;
cin.get();
}
while(s[i].cscore>100 || s[i].cscore<0)
{
cout<<"输入有误!请重新输入:";
cin>>s[i].cscore;
cin.get();
while(!cin.good())
{
cin.clear();
cin.sync();
cout<<"输入有误!请重新输入:";
cin>>s[i].cscore;
cin.get();
}
}
s[i].sum = s[i].escore + s[i].mscore + s[i].cscore;
for(int y=0; y<stu_num; y++)
{
fg<<s[y].name<<"\t"<<s[y].num<<"\t"<<s[y].escore<<"\t"<<s[y].mscore<<"\t"<<s[y].cscore<<"\t"<<s[y].sum;
cout<<endl;
}
fg.close();
}
}
if(v==0)
{
cout<<"查无此人!请重新输入:";
cin>>id1;
cin.get();
}
}
}
void student::sort()//对学生排序
{
//提供插入数组中的数据
cout<<"***************************"<<endl;
cout<<"***********1.英语**********"<<endl;
cout<<"***********2.数学**********"<<endl;
cout<<"***********3.c++***********"<<endl;
cout<<"***********4.总分**********"<<endl;
cout<<"***********5.学号**********"<<endl;
cout<<"***************************"<<endl;
char sel='a';
cout<<"请输入你的选择:";
cin>>sel;
if(sel == '1')
{
for(int i=1; i<stu_num; i++)
{
int j = i-1;
//插入数组中的数据
student temp = s[i];
while(temp.escore > s[j].escore && j>=0)
{
s[j+1] = s[j];
j--;
}
s[++j] = temp;
}
}
else if(sel == '2')
{
//提供插入数组中的数据
for(int i=1; i<stu_num; i++)
{
int j = i-1;
//插入数组中的数据
student temp = s[i];
while(temp.mscore > s[j].mscore && j>=0)
{
s[j+1] = s[j];
j--;
}
s[++j] = temp;
}
}
else if(sel == '3')
{
//提供插入数组中的数据
for(int i=1; i<stu_num; i++)
{
int j = i-1;
//插入数组中的数据
student temp = s[i];
while(temp.cscore > s[j].cscore && j>=0)
{
s[j+1] = s[j];
j--;
}
s[++j] = temp;
}
}
else if(sel == '4')//对学生的总分排序
{
//提供插入数组中的数据
for(int i=1; i<stu_num; i++)
{
int j = i-1;
//插入数组中的数据
student temp = s[i];
while(temp.sum > s[j].sum && j>=0)
{
s[j+1] = s[j];
j--;
}
s[++j] = temp;
}
}
else if(sel == '5')
{
for(int i=1; i<stu_num; i++)
{
int j = i-1;
//插入数组中的数据
student temp = s[i];
while(temp.num > s[j].num && j>=0)
{
s[j+1] = s[j];
j--;
}
s[++j] = temp;
}
}
}