c++学习:list链表模板类实战(学生管理系统)

要求:

  • 编写一个学生结构体
  • 要求面向对象
  • 要求用到链表连接每个学生

代码

#include <iostream>
#include <list>
using namespace std;

class Student
{
    friend istream& operator>>(istream&in,Student &ra);
    friend bool cmp(Student &a, Student &b);
public:
    Student(){}
    Student(string n,int a,float s):name(n),age(a),score(s){}

    void show()
    {
        cout<<name<<"\t"<<age<<"\t"<<score<<endl;
    }
    string getName()
    {
        return name;
    }
private:
    string name;
    int age;
    float score;
};

istream& operator>>(istream&in,Student &ra)
{
    in>>ra.name>>ra.age>>ra.score;
    return in;
}

bool cmp(Student &a, Student &b)
{
    if(a.age<b.age)
        return true;
    else
        return false;
}

//应用程序管理类
class Application
{
    enum App_MODE
    {
        Mode_Add = 1,
        Mode_Show,
        Mode_Sort,
        Mode_Delete,
    };
public:
    int exec()
    {
        while(1)
        {
            int mode;
            cout<<"[1]add [2]show [3]sort [4]delete:";
            cin>>mode;

            switch (mode) {
                case Mode_Add:
                        {
                            Student s;
                            cout<<"name age score:";
                            cin>>s; //operator>>(cin,s);
                            list.push_back(s);
                        }
                        break;
                case Mode_Show:
                        {
                            for(std::list<Student>::iterator it=list.begin(); it!=list.end(); it++)
                            {
                                it->show();
                            }
                        }
                    break;
                case Mode_Sort:
                    list.sort(cmp);

                    break;
                case Mode_Delete:
                    {
                        cout<<"please input del name:";
                        string delName;
                        cin>>delName;
                        std::list<Student>::iterator it;
                        for(it=list.begin(); it!=list.end(); it++)
                        {
                            if(it->getName() == delName)
                            {
                                //删除
                                cout<<"it->getName():"<<it->getName()<<endl;
                                list.erase(it);
                                break;
                            }
                        }
                    }

                    break;
            }
        }
    }

private:
    list<Student> list;
};

int main()
{
    Application app;

    return app.exec();
}

 注意

  • list.sort(cmp);是调用bool cmp(Student &a, Student &b)这个函数,cmp是一个函数对象,等于回调这个函数,函数必须要bool cmp(const Type1 &a, const Type2 &b)这种格式

  • 在排序函数中if(a.age<b.age),是表示升序,>的话是降序

  •  list.erase(it);擦除迭代器后就不能++了,所以要break,所以只能删除一个

相关推荐

  1. c++学习list模板实战学生管理系统

    2024-01-09 17:32:05       40 阅读
  2. 实现学生管理系统

    2024-01-09 17:32:05       17 阅读
  3. 实现学生管理系统

    2024-01-09 17:32:05       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-09 17:32:05       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-09 17:32:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-09 17:32:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-09 17:32:05       20 阅读

热门阅读

  1. 5《Linux》

    2024-01-09 17:32:05       27 阅读
  2. 2401d,d导入C的问题

    2024-01-09 17:32:05       40 阅读
  3. Nacos与Eureka的区别详解

    2024-01-09 17:32:05       29 阅读
  4. 机器学习:自然语言处理介绍

    2024-01-09 17:32:05       30 阅读
  5. vue2打包后,接口地址可在打包文件中配置

    2024-01-09 17:32:05       43 阅读
  6. 【Artificial Intelligence】

    2024-01-09 17:32:05       33 阅读
  7. 不同波特率传输时间计算

    2024-01-09 17:32:05       39 阅读