学生管理

#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;
        }
    }
}

 

posted @ 2019-06-10 13:43  tianqibucuo  阅读(222)  评论(0)    收藏  举报