#include<iostream>
#include<string>
#include <fstream>
using namespace std;
int num; //总学生人数
class student
{
friend class studentMessage;
public:
string ID;
string name;
string sex;
string major;
double score;
student* next;
student* pre;
student();
string getName()
{
return name;
}
string getID()
{
return ID;
}
string getSex()
{
return sex;
}
string getMajor()
{
return major;
}
double getScore()
{
return score;
}
student* getNext()
{
return next;
}
void display(); //打印成绩
void swap(); //交换对象和对象->next的信息
};
student::student()
{
cout<<"请输入学生学号 : ";
cin>>ID;
cout<<"请输入学生姓名 : ";
cin>>name;
cout<<"请输入学生性别 : ";
cin>>sex;
cout<<"请输入学生专业 : ";
cin>>major;
cout<<"请输入学生成绩 : ";
cin>>score;
next=NULL;
}
void student::display()
{
cout<<" "<<ID<<"\t"<<name<<"\t"<<sex<<"\t"<<major<<"\t"<<score<<"\t"<<endl;
}
void student::swap()
{
string na,id,s,maj;
double sco;
na=name;
name=next->name;
next->name=na;
id=ID;
ID=next->ID;
next->ID=id;
s=sex;
sex=next->sex;
next->sex=s;
maj=major;
major=next->major;
next->major=maj;
sco=score;
score=next->score;
next->score=sco;
}
class studentMessage
{
private:
student* first;
student* last;
public:
studentMessage();
student* getFirst()
{
return first;
}
student* getLast()
{
return last;
}
int getNum()
{
return num;
}
void add(); //向表中增加学生成绩记录
void search(); //在表中查找学生成绩记录
void del(); //在表中删除学生成绩记录
void showAll(); //输出所有同学所有科目的成绩
void clear(); //清空所有信息并退出系统
void save();
void sort();
void change();
};
studentMessage::studentMessage()
{
first=NULL;
last=NULL;
num=0;
}
void studentMessage::add()
{
student* t =new student;
student* p = first;
while(p)
{
if(p->ID==t->ID)
{
cout<<"\n学号输入错误或该学生成绩已经存在!"<<endl;
return;
}
p=p->next;
}
num++;
if(first==NULL)
{
first=last=t;
}
else
{
last->next=t;
last=last->next;
}
}
void studentMessage::search()
{
string a;
cout<<"\n请输入要查找的学生的学号:";
cin>>a;
student *t = first;
while(t)
{
if(t->ID==a)
break;
t=t->next;
}
if(!t)
{
cout<<"\n未找到要查找学生!"<<endl;
return;
}
cout<<"\n查找成功!"<<endl;
cout << " 学号\t 姓名\t 性别\t 专业\t 成绩\t" << endl;
t->display();
}
void studentMessage::del()
{
string a;
cout<<"\n请输入要删除的学生的学号: ";
cin>>a;
student *t = first;
student *p=NULL;
while(t)
{
if(t->ID==a)
break;
p=t;
t=t->next;
}
if(!t)
{
cout<<"\n未找到要删除学生!"<<endl;
return;
}
if(!p)
{
first=first->next;
cout<<"\n成功删除学生"<<a<<endl;
delete t;
}
else
{
p->next=t->next;
cout<<"成功删除学生"<<a<<endl;
delete t;
}
num--;
}
void studentMessage::save()
{
ofstream g("stulist.txt");
if(!g)
{
cout<<"不能打开目的文件:"<<"stulist.txt"<<'\n';
exit(1);
}
g<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"专业"<<'\t'<<"成绩"<<'\n';
student *t = first;
while(t)
{
g<<t->ID<<'\t'<<t->name<<'\t'<<t->sex<<'\t'<<t->major<<'\t'<<t->score<<'\n';
t=t->next;
}
}
void studentMessage::showAll()
{
cout << "----------------学生信息-----------------"<< endl;
cout << " 学号\t姓名\t性别\t专业\t成绩" << endl;
student *t = first;
while(t)
{
t->display();
t=t->next;
}
}
void studentMessage::sort()
{
int n=0; //n--排名
student *t=first;
student *p=t;
while(p->next)
{
t=first;
while(t->next)
{
if(t->next->score>=t->score)
{
t->swap();
}
t=t->next;
}
p=p->next;
}
t = first;
cout<<"\n\t 成绩表如下: "<<endl;
cout<<"学号 姓名 成绩 排名"<<endl;
while(t)
{
n++;
cout<<" "<<t->getID()<<" \t"<<t->getName()<<" \t";
cout<<t->getScore()<<" \t"<<n<<endl;
t=t->next;
}
}
void studentMessage::change()
{
string id;
cout<<"输入被修改学生的学号:";
cin>>id;
student *t = first;
while(t)
{
if(t->ID==id)
{
cout<<"将成绩改为:"<<endl;
int sc;
cin>>sc;
t->score=sc;
break;
}
else
{
t=t->next;
}
}
}
void studentMessage::clear()
{
student *t = first;
student *p;
while(t)
{
p=t;
t=t->next;
delete p;
}
cout<<"\n清空成功!\n";
cout<<"退出成功!\n";
}
void showMenu()
{
cout << " \n";
cout << "===============================\n";
cout << " 学生成绩管理系统\n\n";
cout << " 1.显示所有学生成绩\n";
cout << " 2.添加信息\n";
cout << " 3.查询信息\n";
cout << " 4.成绩排序\n";
cout << " 5.删除信息\n";
cout << " 6.修改学生成绩\n";
cout << " 7.清空所有信息并退出系统\n";
cout << " 0.退出系统\n";
cout << "===============================\n";
cout << " \n";
}
int main()
{
int h;
studentMessage stuM=studentMessage();
while(1)
{
showMenu();
cout << "请输入操作对应的序号 : ";
cin >>h;
cout<<endl;
switch(h)
{
case 1:
stuM.showAll();
break;
case 2:
stuM.add();
break;
case 3:
stuM.search();
break;
case 4:
stuM.sort();
break;
case 5:
stuM.del();
break;
case 6:
stuM.change();
break;
case 7:
stuM.clear();
return 0;
case 0:
stuM.save();
cout<<"\n退出成功!";
return 0;
default:
cout<<"\n输入序号有误!请输入正确的序号。"<<endl;
}
}
}