C++day7(封装一个学生的类,定义一个学生这样类的vector容器, 里面存放学生对象【保存+读取】、实现与list相关的函数 )

1.封装一个学生的类,定义一个学生这样类的vector容器, 里面存放学生对象

再把该容器中的对象,保存到文件中。(至少3个)

再把这些学生从文件中读取出来,放入另一个容器中并且遍历输出该容器里的学生。

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

class Student {
private:
    string name;
    int age;
public:
    //无参构造函数
    Student(){}
    //有参构造函数
    Student(const string &name, int age):name(name), age(age) {}

    string getName() const
    {
        return name;
    }

    int getAge() const
    {
        return age;
    }
};

int main()
{
    vector<Student> students;
    students.push_back(Student("cqq", 23));
    students.push_back(Student("xjx", 22));
    students.push_back(Student("xjj", 20));

    // 保存学生对象到文件
    ofstream ofs;
    ofs.open("C:/QT/stu.txt",ios::out);
    if (ofs.is_open()) {
        for (const auto& student : students) {
            ofs << student.getName() << " " << student.getAge() << endl;
        }
        ofs.close();
    } else {
        cout << "无法打开文件进行写入" << endl;
        return 1;
    }


    vector<Student> loadedStudents;
    ifstream inFile("C:/QT/stu.txt");
    if (inFile.is_open()) {
        string name;
        int age;
        while (inFile >> name >> age) {
            loadedStudents.push_back(Student(name, age));
        }
        inFile.close();
    } else {
        cout << "无法打开文件进行读取" << endl;
        return 1;
    }

    // 遍历输出读取到的学生对象
    for (const auto& student : loadedStudents) {
        cout << "姓名: " << student.getName() << "  年龄: " << student.getAge() << endl;
    }

    return 0;
}

2.实现与list相关的函数 

#include <iostream>
#include <list>

using namespace std;

template <typename T>
class MyList : public list<T>
{
public:
    MyList() : list<T>() {}
    MyList(typename list<T>::iterator beg, typename list<T>::iterator end) : list<T>(beg, end) {}
    MyList(int n, const T& elem) : list<T>(n, elem) {}
    MyList(const MyList<T>& l) : list<T>(l) {}

    MyList<T>& operator=(const MyList<T>& lst)
    {
        list<T>::operator=(lst);
        return *this;
    }

    void assign(typename list<T>::iterator beg, typename list<T>::iterator end)
    {
        list<T>::assign(beg, end);
    }

    void assign(int n, const T& elem)
    {
        list<T>::assign(n, elem);
    }

    void swap(MyList<T>& lst)
    {
        list<T>::swap(lst);
    }

    int size() const
    {
        return list<T>::size();
    }

    bool empty() const
    {
        return list<T>::empty();
    }

    void resize(int num)
    {
        list<T>::resize(num);
    }

    void resize(int num, const T& elem)
    {
        list<T>::resize(num, elem);
    }

    void push_front(const T& elem)
    {
        list<T>::push_front(elem);
    }

    void pop_front()
    {
        list<T>::pop_front();
    }

    typename list<T>::iterator insert(typename list<T>::const_iterator pos, const T& elem)
    {
        return list<T>::insert(pos, elem);
    }

    void insert(typename list<T>::const_iterator pos, int count, const T& elem)
    {
        list<T>::insert(pos, count, elem);
    }

    void insert(typename list<T>::const_iterator pos, typename list<T>::iterator beg, typename list<T>::iterator end)
    {
        list<T>::insert(pos, beg, end);
    }

    typename list<T>::iterator erase(typename list<T>::const_iterator pos)
    {
        return list<T>::erase(pos);
    }

    typename list<T>::iterator erase(typename list<T>::const_iterator start, typename list<T>::const_iterator end)
    {
        return list<T>::erase(start, end);
    }

    void clear()
    {
        list<T>::clear();
    }

    void remove(const T& elem)
    {
        list<T>::remove(elem);
    }

    T& front()
    {
        return list<T>::front();
    }

    const T& front() const
    {
        return list<T>::front();
    }

    T& back()
    {
        return list<T>::back();
    }

    const T& back() const
    {
        return list<T>::back();
    }
};

//定义全局函数当做策略函数
bool comfunc(int a, int b) {
    return a < b;
}

//定义仿函数当做函数策略
class compare {
public:
    compare() {}

    //重载小括号运算符
    bool operator()(int a, int b) {
        return a > b;
    }
};

int main() {
    MyList<int> l;          //创建一个链表
    cout << "size of l = " << l.size() << endl;    //0

    //调用头插函数
    l.push_front(1);
    l.push_front(2);
    l.push_front(3);

    //调用尾插函数
    l.push_back(4);
    l.push_back(5);
    l.push_back(6);

    for (int val : l) {
        cout << val << " ";
    }
    cout << endl;

    //调用判空函数
    if (l.empty()) {
        cout << "yes" << endl;
    } else {
        cout << "no" << endl;
    }

    //更改第一个元素
    l.front() = 987;
    l.back() = 654;
    for (int val : l) {
        cout << val << " ";
    }
    cout << endl;

    //调用排序函数
    //l.sort(comfunc);      //使用了全局函数当做策略的排序函数
    //l.sort(compare());          //使用仿函数当做函数策略
    //使用lambda表达式当做函数策略
    l.sort([](int a, int b) -> bool { return a > b; });
    for (int val : l) {
        cout << val << " ";
    }
    cout << endl;

    //调用翻转函数
    //    l.reverse();
    //    for(int val:l)
    //    {
    //        cout<<val<<" ";
    //    }
    //    cout<<endl;

    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码定义了一些函数和变量,包括: - static vector<Student> students:一个静态向量容器,存储所有学生对象 - static vector<Course> courses:一个静态向量容器,存储所有课程对象 - static vector<Grades> grades:一个静态向量容器,存储所有成绩对象 - void addStudentToFile(Student s):将学生对象写入文件 - vector<Student> loadStudentsFromFile():从文件中读取学生对象 - void saveStudentsToFile(vector<Student> students):将所有学生对象存入文件 - void addStudent(vector<Student>& students):向学生容器中添加学生对象 - void deleteStudent(vector<Student>& students):从学生容器中删除学生对象 - void modifyStudent(vector<Student>& students):修改学生容器中的学生对象 - void queryStudent(vector<Student>& students):查询学生容器中的学生对象 - void showAllStudents(vector<Student>& students):显示所有学生对象 - void addCourseToFile(Course c):将课程对象写入文件 - vector<Course> loadCoursesFromFile():从文件中读取课程对象 - void saveCoursesToFile(vector<Course> courses):将所有课程对象存入文件 - void addCourse(vector<Course>& courses):向课程容器中添加课程对象 - void deleteCourse(vector<Course>& courses):从课程容器中删除课程对象 - void modifyCourse(vector<Course>& courses):修改课程容器中的课程对象 - void queryCourse(vector<Course>& courses):查询课程容器中的课程对象 - void showAllCourses(vector<Course>& courses):显示所有课程对象 - void addGradesToFile(Grades g):将成绩对象写入文件 - vector<Grades> loadGradesFromFile():从文件中读取成绩对象 - void saveGradesToFile(vector<Grades> grades):将所有成绩对象存入文件 - void addGrades(vector<Grades> &grades):向成绩容器中添加成绩对象 - void deleteGrades(vector<Grades> &grades):从成绩容器中删除成绩对象 - void modifyGrades(vector<Grades> &grades):修改成绩容器中的成绩对象 - void queryGrades(vector<Grades> &grades):查询成绩容器中的成绩对象 - void showAllGrades(vector<Grades> &grades):显示所有成绩对象 - void controller():控制程序运行流程 - void ShowMenu():显示菜单 - void studentmenu():学生菜单 - void coursemenu():课程菜单 - void gradesmenu():成绩菜单 - void exit1():退出程序 这段代码可能是一个学生成绩管理系统的主程序或者函数库。它包含了对学生、课程和成绩的各种操作函数,同时也包含了一些读写文件的函数。主程序通过调用这些函数实现学生成绩的管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值