m0_74035815 2023-12-06 21:26 采纳率: 85.7%
浏览 3
已结题

在此代码的基础上,增加一个插入功能,和统计学生生源的功能,顺便检查一下错误,电话号码会不会太长而出现负号等


#include <iostream>
#include <string>
using namespace std;
class Teacher
{
private:
    string number;//学号
    string name;//名字 
    string sex;//性别
    string telephone;//手机号码
    string nation;//籍贯
public:
    Teacher* next;//next指向下一位学生,构成链表
    Teacher() { next = NULL; }
    Teacher(string n, string num, string s, string tp, string na)
    {
        name = n;
        number = num;
        sex = s;
        telephone = tp;
        nation = na;
        next = NULL;
    };//构造函数
    string getname() { return name; }//名字
    string getnum() { return number; }//学号 
    string gets() { return sex; }//性别
    string gettp() { return telephone; }//手机号码 
    string getna() { return nation; }//籍贯 
    void setname(string n) { name = n; }//修改名字
    void sets(string s) { sex = s; }//修改性别
    void settp(string tp) { telephone = tp; }//修改手机号码 
    void setna(string na) {nation = na;}//修改籍贯
    void setnum(string num) { number = num; }//修改工号
};
 
class Operation
{
private:
    Teacher* head;
public:
    Operation()
    {
        head = new Teacher;
            int end1;
    }
    void Menu();//菜单 
    void Insert();//插入
    void Search();//查找
    void Remove();//修改
    void Delete();//删除
    void Print();//输出
};
    int end1;
 
void Operation::Menu()
{
    cout << "*******************************************************************************************" << endl;
    cout << "-------------------------       学生信息管理系统        -------------------------" << endl;
    cout << "-------------------------        ***********************          -------------------------" << endl;
    cout << "-------------------------           1.增加学生信息                -------------------------" << endl;
    cout << "-------------------------           2.显示学生信息                -------------------------" << endl;
    cout << "-------------------------           3.查找学生信息                -------------------------" << endl;
    cout << "-------------------------           4.删除学生信息                -------------------------" << endl;
    cout << "-------------------------           5.修改学生信息                -------------------------" << endl;
    cout << "-------------------------           6.安全退出系统                -------------------------" << endl;
     
}
 
void Operation::Insert()     //插入
{
    string name;//名字
    string number;//工号
    string sex;//性别
    string telephone;//手机号
    string nation;
    Teacher* p = NULL;
    cout << "请输入要添加学生的信息:" << endl;
    cout << "请输入姓名:";
    cin >> name;
    cout << endl;
    cout << "请输入学号:";
    cin >> number;
    cout << endl;
    cout << "请输入性别:";
    cin >> sex;
    cout << endl;
    cout << "手机号码:";
    cin >> telephone;
    cout << endl;
    cout << "籍贯:";
    cin >> nation;
    cout << endl;
    Teacher* s = new Teacher(name,number, sex, telephone, nation);
        p = head;
    while (p->next != NULL && p->getnum()  < s->getnum())
    {
        p = p->next;
    }
    s->next = p->next;
    p->next = s;
}
 
 
void Operation::Delete()//删除
{
    string name;
    Teacher* p = head->next, * q = head;
    cout << "请输入要删除学生信息的姓名:" << endl;
    cin >> name;
    while (p != NULL)
    {
        if (p->getname() == name)
        {
            q->next = p->next;
            delete p;
            break;
        }
        p = p->next;
        q = q->next;
 
    }
    if (p != NULL)
    {
        cout << "删除成功!" << endl;
    }
    if (p == NULL)
    {
        cout << "\t\t没有找到!" << endl;
    }
 
}
 
void Operation::Search()//查询 
{
    Teacher* p = NULL;
    cout << "\n** 查询学生信息 **\n" << endl;
    cout << "请输入查询方式:" << endl;
    cout << "1.按学号查询" << endl;
    cout << "2.按姓名查询" << endl;
    cout << "3.返回" << endl;
    char c;
    cin >> c;
    switch (c)
    {
    case '1':
    {string n;
    cout << "请输入你要查询的学生的学号" << endl;
    cin >> n;
    for (p = head; p != NULL; p = p->next)
    {
        if (p->getnum() == n)
        {
            cout
                << "姓名:" << p->getname() << endl
                << "学号:" << p->getnum() << endl
                << "性别:" << p->gets() << endl
                << "电话号码:" << p->gettp() << endl
                << "籍贯:" << p->getna() << endl;
        }
 
    }
    break;
    }
    case '2':
    {
        string name;
        cout << "请输入你要查询的学生姓名" << endl;
        cin >> name;
        for (p = head; p != NULL; p = p->next)
        {
            if (name == p->getname())
            {
                cout
                    << "姓名:" << p->getname() << endl
                    << "学号:" << p->getnum() << endl
                    << "性别:" << p->gets() << endl
                    << "手机号码:" << p->gettp() << end1
                    << "籍贯:" << p->getna() << endl;
                    
            }
 
        }
        break;
    }
    case '3':
        return;
    }
}
void Operation::Print()   //输出
{
    Teacher* p;
    cout
        << "姓名"

        << "\t学号"
        << "\t性别"
        << "\t手机号码"
        << "\t籍贯" << endl;
    for (p = head->next; p != NULL; p = p->next)
        cout
        << p->getname()
        << "\t" << p->getnum()
        << "\t" << p->gets()
        << "\t" << p->gettp()
        << "\t\t" << p->getna()
        << endl;
 
 
 
}
 
void Operation::Remove()   //修改
{
    string n;//修改项
    string number;//学号
    string name;//名字
    string sex;//性别
    string telephone;//手机号码
    string nation;

    cout << "请输入你要修改的学生姓名" << endl;
    cin >> n;
    Teacher* p;
    for (p = head->next; p != NULL; p = p->next)
        if (p->getname() == n)
        {
            cout << "请选择您要修改的信息项:" << endl;
            cout << "1、学号,2、姓名,3、性别,4、手机号码,5、籍贯。" << endl;
            int in;
            cin >> in;
            switch (in)
            {
            case 1:
                cout << p->getnum() << "修改为:" << endl;
                cin >> number; p->setnum(number);
                break;
            case 2:
                cout << p->getname() << "修改为:" << endl;
                cin >> name; p->setname(name);
                break;
            case 3:
                cout << p->gets() << "修改为:" << endl;
                cin >> sex; p->sets(sex);
                break;
            case 4:
                cout << p->gettp() << "修改为:" << endl;
                cin >> telephone; p->settp(telephone);
                break;
            case 5:
                cout << p->getna() << "修改为:" << endl;
                cin >> nation; p->setna(nation);
                break;    
            default:
                cout << "输入错误!" << endl;
                break;
            }
        }
 
}
 
int main()
{
    Operation O;
    O.Menu();
    while (1)
    {
        int flag = 1;
        int n;
        cout << "\n\t\t\n\t\t请选择:";
        cin >> n;
        switch (n)
        {
        case 1://增加
            O.Insert();
            break;
        case 2://显示
            O.Print();
            break;
        case 3://查找
            O.Search();
            break;
        case 4://删除
            O.Delete();
            break;
        case 5://修改
            O.Remove();
            break;
        case 6://修改
            flag = 0;
            break;
 
        }
        if (flag == 0) break;

    }
 
    return 0;
}
  • 写回答

4条回答 默认 最新

  • micthis 2023-12-06 22:43
    关注

    代码:

    #include <iostream>
    #include <string>
    #include <map>
    
    using namespace std;
    
    class Student
    {
    private:
        string number;//学号
        string name;//名字 
        string sex;//性别
        string telephone;//手机号码
        string nation;//籍贯
    public:
        Student* next;//next指向下一位学生,构成链表
        Student() { next = NULL; }
        Student(string n, string num, string s, string tp, string na)
        {
            name = n;
            number = num;
            sex = s;
            telephone = tp;
            nation = na;
            next = NULL;
        }//构造函数
        string getname() { return name; }//名字
        string getnum() { return number; }//学号 
        string gets() { return sex; }//性别
        string gettp() { return telephone; }//手机号码 
        string getna() { return nation; }//籍贯 
        void setname(string n) { name = n; }//修改名字
        void sets(string s) { sex = s; }//修改性别
        void settp(string tp) { telephone = tp; }//修改手机号码 
        void setna(string na) {nation = na;}//修改籍贯
        void setnum(string num) { number = num; }//修改工号
    };
    class Operation
    {
    private:
        Student* head;
    public:
        Operation()
        {
            head = new Student;
        }
        void Menu();//菜单 
        void Insert();//插入
        void Search();//查找
        void Modify();//修改
        void Delete();//删除
        void Statistics(); //生源统计
        void Print();//输出
    };
    void Operation::Menu()
    {
        cout << "*******************************************************************************************" << endl;
        cout << "-------------------------       学生信息管理系统        -------------------------" << endl;
        cout << "-------------------------        ***********************          -------------------------" << endl;
        cout << "-------------------------           1.增加学生信息                -------------------------" << endl;
        cout << "-------------------------           2.显示学生信息                -------------------------" << endl;
        cout << "-------------------------           3.查找学生信息                -------------------------" << endl;
        cout << "-------------------------           4.删除学生信息                -------------------------" << endl;
        cout << "-------------------------           5.修改学生信息                -------------------------" << endl;
        cout << "-------------------------           6.学生生源统计                -------------------------" << endl;
        cout << "-------------------------           7.安全退出系统                -------------------------" << endl;
    }
    void Operation::Insert()     //插入
    {
        string name;//名字
        string number;//工号
        string sex;//性别
        string telephone;//手机号
        string nation;
        Student* p = NULL;
        cout << "请输入要添加学生的信息:" << endl;
        cout << "请输入姓名:";
        cin >> name;
        cout << endl;
        cout << "请输入学号:";
        cin >> number;
        cout << endl;
        cout << "请输入性别:";
        cin >> sex;
        cout << endl;
        cout << "手机号码:";
        cin >> telephone;
        cout << endl;
        cout << "籍贯:";
        cin >> nation;
        cout << endl;
        Student* s = new Student(name,number, sex, telephone, nation);
        Student* q=head;
        p = head->next;
        while (p != NULL && p->getnum()  < s->getnum())
        {
            q=p;
            p = p->next;
        }
        q->next = s;
        s->next = p;
    }
     
    void Operation::Delete()//删除
    {
        string name;
        Student* p = head->next, * q = head;
        cout << "请输入要删除学生信息的姓名:" << endl;
        cin >> name;
        while (p != NULL)
        {
            if (p->getname() == name)
            {
                q->next = p->next;
                delete p;
                break;
            }
            p = p->next;
            q = q->next;
        }
        if (p != NULL)
        {
            cout << "删除成功!" << endl;
        }
        else
        {
            cout << "\t\t没有找到!" << endl;
        }
    }
    
    void Operation::Statistics()//统计生源
    {
        map<string,int> m;
        string s;
        
        for(Student* p=head->next;p!=NULL;p=p->next)
            m[p->getna()]++;
        if(m.size()>0)
        {
            cout<<"籍贯\t"<<"学生人数"<<endl;
            for(/*auto*/map<string,int>::iterator it=m.begin();it!=m.end();it++)
                cout<<it->first<<"\t"<<it->second<<endl;
        }
        else
            cout<<"没有学生无法统计生源"<<endl;
    }
    
    void Operation::Search()//查询 
    {
        Student* p = NULL;
        cout << "\n** 查询学生信息 **\n" << endl;
        cout << "请输入查询方式:" << endl;
        cout << "1.按学号查询" << endl;
        cout << "2.按姓名查询" << endl;
        cout << "3.返回" << endl;
        char c;
        cin >> c;
        switch (c)
        {
            case '1':
            {
                string n;
                cout << "请输入你要查询的学生的学号" << endl;
                cin >> n;
                for (p = head->next; p != NULL; p = p->next)
                {
                    if (p->getnum() == n)
                    {
                        cout<< "姓名:" << p->getname() << endl
                            << "学号:" << p->getnum() << endl
                            << "性别:" << p->gets() << endl
                            << "电话号码:" << p->gettp() << endl
                            << "籍贯:" << p->getna() << endl;
                        break;
                    }
                }
                if(p==NULL)
                    cout<<"没有找到"<<endl;
            }
            break;
            case '2':
            {
                string name;
                cout << "请输入你要查询的学生姓名" << endl;
                cin >> name;
                for (p = head->next; p != NULL; p = p->next)
                {
                    if (name == p->getname())
                    {
                        cout
                            << "姓名:" << p->getname() << endl
                            << "学号:" << p->getnum() << endl
                            << "性别:" << p->gets() << endl
                            << "手机号码:" << p->gettp() << endl
                            << "籍贯:" << p->getna() << endl;
                        break;
                    }
                }
                if(p==NULL)
                    cout<<"没有找到"<<endl;
            }
            break;
            case '3':
                return;
        }
    }
    void Operation::Print()   //输出
    {
        Student* p;
        cout
            << "姓名"
            << "\t学号"
            << "\t性别"
            << "\t手机号码"
            << "\t籍贯" << endl;
        for (p = head->next; p != NULL; p = p->next)
            cout
                << p->getname()
                << "\t" << p->getnum()
                << "\t" << p->gets()
                << "\t" << p->gettp()
                << "\t\t" << p->getna()
                << endl;
    }
    void Operation::Modify()   //修改
    {
        string n;//修改项
        string number;//学号
        string name;//名字
        string sex;//性别
        string telephone;//手机号码
        string nation;
        cout << "请输入你要修改的学生姓名" << endl;
        cin >> n;
        Student* p;
        for (p = head->next; p != NULL; p = p->next)
            if (p->getname() == n)
            {
                cout << "请选择您要修改的信息项:" << endl;
                cout << "1、学号,2、姓名,3、性别,4、手机号码,5、籍贯。" << endl;
                int in;
                cin >> in;
                switch (in)
                {
                    case 1:
                        cout << p->getnum() << "修改为:" << endl;
                        cin >> number; p->setnum(number);
                        break;
                    case 2:
                        cout << p->getname() << "修改为:" << endl;
                        cin >> name; p->setname(name);
                        break;
                    case 3:
                        cout << p->gets() << "修改为:" << endl;
                        cin >> sex; p->sets(sex);
                        break;
                    case 4:
                        cout << p->gettp() << "修改为:" << endl;
                        cin >> telephone; p->settp(telephone);
                        break;
                    case 5:
                        cout << p->getna() << "修改为:" << endl;
                        cin >> nation; p->setna(nation);
                        break;    
                    default:
                        cout << "输入错误!" << endl;
                        break;
                }
                break;
            }
        if(p == NULL)
            cout<<"没有找到"<<endl;
    }
    int main()
    {
        Operation O;
       
        while (1)
        {
            int flag = 1;
            int n;
            O.Menu();
            cout << "\n\t\t\n\t\t请选择:";
            cin >> n;
            switch (n)
            {
            case 1://增加
                O.Insert();
                break;
            case 2://显示
                O.Print();
                break;
            case 3://查找
                O.Search();
                break;
            case 4://删除
                O.Delete();
                break;
            case 5://修改
                O.Modify();
                break;
            case 6://生源统计
                O.Statistics();
                break;
            case 7://
                flag=0;
                break;
            }
            if (flag == 0) break;
        }
        return 0;
    }
    

    运行截图

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 创建了问题 12月6日