求这四个课后题正确可行的答案

第一题:
请编写程序实现以下功能:从键盘输入若干字符串,统计长度最长的字符串,并输出最长字符串内容和长度
第二题:
有一个文本文件data.txt,它记录了几个学生信息,内容如下
姓名 学号 性别 年龄
张三 1001 男 22
李明 1002 男 21
李红 1003 女 22
李明 1004 女 20
编写一个程序,从文本文件data.txt中找出所有叫“李明”的学生,并输出他们的信息。

第三题:
设计一个Bank类,实现银行某账户的资金往来账目管理。程序要求:
1.创建账户:包括账号、创建日期、余额(创建账户时存入的钱数)
2.存钱:执行存钱操作,并记录存钱日期和存钱数目
3.取钱:执行取钱操作,并记录取钱日期和取钱数目
4.查询交易明细:查询近一个月的账目交易记录

第四题:
teacher的职责是教学,学生的职责是学习,而研究生兼具teacher和学生的职责,既要学习又要帮助teacher管理教育学生,编写一个程序,实现以下功能需求:
1设计一个类Teacher,描述teacher的信息(姓名、年龄)和职责(教学)
2.设计一个学生类Student,描述学生的信息(姓名、学号)和职责(学习)
3.设计一个研究生类Graduate,描述研究生信息(姓名、年龄、学号)和职责(教学、学习)

第一题

#include <iostream>
#include <cstring>
 
int main()
{
    std::string max_str, tmp_str;
    
    while(true) {
        std::cout << "please input a string" << std::endl;
        std::getline(std::cin, tmp_str);
        if(tmp_str.empty()){
            break;
        }
        if(tmp_str.size() > max_str.size()) {
            max_str = std::move(tmp_str);
        }
    }
    
    std::cout << "max_str=" << max_str << std::endl;
    return 0;
}


第二题

#include <iostream>
#include <fstream>
#include <cstring>
 
int main()
{
    std::ifstream ifs;
    // 打开文件   
    ifs.open("data.txt",std::ios::in);
    if (!ifs.is_open())
    {
        std::cout << "read fail." << std::endl;
        return -1;
    }
    std::string tmp_str;
    while(true) {
        std::getline(ifs, tmp_str);
        if(tmp_str.empty()){
            break;
        }
        // 以李明开头,且包含空格 防止前缀找错
        if(tmp_str.rfind("李明 ", 0) == 0) {
            // 找到了
            std::cout << "str=" << tmp_str << std::endl;
        }
    }
    
    return 0;
}


第三题

#include <iostream>
#include <cstring>
#include <vector>
#include <ctime>
#include <map>

struct Item {
    std::string op;
    std::string name;
    int money;
    time_t t;

    Item(const std::string& _op, const std::string& _name, int _money): op(_op),name(_name), money(_money), t(time(0)) {
    }
    Item(const Item& item) {
        op = item.op;
        name = item.name;
        t = item.t;
    }
    Item(Item&& item) {
        op = std::move(item.op);
        name = std::move(item.name);
        t = item.t;
    }
};

class Bank {
public:
    void create(const std::string& name, int money){
        _push("create", name, money);
    }
    void push(const std::string& name, int money){
        _push("push", name, money);
    }
    bool take(const std::string& name, int money){
        auto it = m_moneys.find(name);
        if(it == m_moneys.end()) {
            // 没有找到账号
            return false;
        }
        if(it->second < money) {
            // 钱不够
            return false;
        }
        it->second -= money;
        _push("take", name, money);
    }
    void list() {
        time_t t = time(0) - (30*24*60*60); // 一个月前
        std::cout << "时间\t姓名\t操作\t金额" << std::endl;
        for(auto it = m_items.rbegin(); it != m_items.rend() && it->t > t; ++it) {
            std::cout << it->t << "\t" << it->name << "\t" << it->op << "\t" << it->money << std::endl;
        }
    }
private:
    void _push(const std::string& op, const std::string& name, int money){
        m_items.push_back(Item(op, name, money));
        auto it = m_moneys.find(name);
        if(it != m_moneys.end()) {
            it->second += money;
        } else {
            m_moneys.insert(std::pair(name, money));
        }
    }
private:
    // 交易记录暂时存在内存中
    std::vector<Item> m_items;
    std::map<std::string, int> m_moneys;
};

第四题,应该是虚继承吧,很少用

class Peason {
public:
    const std::string& name();
private:
    std::string m_name;
};

class Teacher: virtual public Peason{
public:
    int year_old();
    void teach();
private:
    int m_year_old;
};

class Student : virtual public Peason {
public:
    void student_id();
private:
    int m_student_id;
};

class Graduate: virtual public Teacher, virtual public Student {
};