实验二十

[实验任务一]:多次撤销

改进课堂上的“用户信息操作撤销”实例,使得系统可以实现多次撤销(可以使用HashMap、ArrayList等集合数据结构实现)。

实验要求:

1. 提交源代码;

2. 注意编程规范。

 

#include <iostream>

#include <string>

#include <vector>

using namespace std;

class AbstractCommand {

public:

    virtual int execute(int value) = 0;

    virtual int undo() = 0;

};

class Adder {

public:

    int num = 0;

    int add(int value) { num += value; return num; };

};

class ConcreteCommand :public AbstractCommand {

public:

    Adder* adder = new Adder();

    vector<int>* list;

    ConcreteCommand() { this->list = new vector<int>; };

    int execute(int value) {

        list->push_back(value);

        return adder->add(value);

    };

    int undo() {

        if (list->size() > 0) {

            int value = list->at(list->size() - 1);

            list->pop_back();

            return adder->add(-value);

        }

        else {

            return 0;

        }

    };

};

class CalculatorForm {

public:

    AbstractCommand* command;

    void setCommand(AbstractCommand* command) {

        this->command = command;

    };

    void compute(int value) {

        int i = command->execute(value);

        cout << "执行运算,运算结果为:" << i << endl;

    }

    void undo() {

        int i = command->undo();

        cout << "执行撤销,运算结果为:" << i << endl;

    }

};

int main() {

    CalculatorForm* form = new CalculatorForm();

    ConcreteCommand* command = new ConcreteCommand();

    form->setCommand(command);

    bool flag = true;

    while (flag) {

 

        cout << "请输入想要操作的选项,1为计算,-1为撤销,0为退出" << endl;

        int n;

        cin >> n;

        switch (n) {

        case 1:

            cout << "请输入想要添加的数值" << endl;

            int m;

            cin >> m;

            form->compute(m);

            break;

        case -1:

            form->undo();

            break;

        case 0:

            flag = false;

            break;

        default:

            cout << "输入错误请重新输入!!\n";

            break;

        }

    }

 

 

}

 

posted @ 2023-12-05 19:47  霍普金斯大学丁真  阅读(12)  评论(0)    收藏  举报