1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Здравствуйте. В очередной раз взываю к помощи професионалов. У нас есть предмет ООП, там мы как бы разбиваемся на группы и выполняем задание, в общем такое задание один из участников реализовал, но выяснились недостатки и очевидные несоответствия с условием и все - переделать и доработать уже не можем, а сроки жмут. Далее представляю всю программу в исходнике. Задание следующее
Цитата
Реализовать программу, выполняющую ограниченный набор команд. Команды и аргументы к ним записываются в текстовом файле. Имя файла передается в аргументах командной строки. Каждая команда имеет свой набор аргументов. Если процессор не знает какую либо команду, то он выводит сообщение об ошибке и продолжает работать со следующей командой.
Необходимо реализовать следующие команды:
Название Аргументы Описание Примеры print <строка> Распечатать на экране строку, заданную в аргументе print Hello World eval <expression> Вычислить простую арифметическую операцию (+ , - , * , /). Результат вывести на экран. В случае некорректных аргументов вызывать исключение std::invalid_argument eval 8 / 2 createfile <file> Создать файл c именем <file>. Если файл уже существует, то пересоздать. Запросить ввод данных от пользователя (одна строка), записать введенные данные в файл. createfile test.txt exec <command> Запустить командную строку, что записана в <command>. Используйте функцию system() из библиотеки "linesystem.h". exec notepad.exe test.txt copy test.txt test2.txt increment <file> <file value> Прочитать содержимое файла <file> и проинтерпретировать его как int. Если в int не конвертируется вызывать исключение std::invalid_argument. Иначе увеличить полученное число на заданное значение и перезаписать в файл. Если число не задано, увеличить на 1. increment test.txt increment test.txt 1 viewfile <file> Вывести содержимое файла c именем <file> на экран. Если файл не существует, вызывать исключение std::invalid_argument viewfile test.txt
Пример исходного файла для командного процессора:
print Hello print I know 2+2= eval 2+2 print Please input your age: createfile age.txt increment age.txt print It is your age in next year: viewfile age.txt print You could check it exec notepad.exe age.txt
Каждая команда представляется в виде класса, отнаследованного от абстрактного класса Command:
class Command { private: string args; public: Command(const string& s = "") : args(s){};
void setArgs(const string& s) { args = s; }; const string& getArgs() const { return args; }; friend istream& operator>>(istream& in, Command& c) { return in >> c.args; }; friend ostream& operator<<(ostream& out, const Command& c) { return out << c.getName() << " " << c.args << endl; };
Для инициализации и выполнения списка команд необходимо реализовать класс CommandList, который должен содержать следующие методы и операторы:
friend ostream& operator<<(ostream& out, const CommandList& c) { // Вывести на экран все команды // Обход списка с помощью класса std:iterator return out; }; friend istream& operator>>(istream& in, CommandList& c) { // Считать из потока. // В случае консольного ввода // выполнение прекращается если строка равна ^D return in; }; void init(const string& file) { // Считать из файла, используя оператор >> } void execute() const throw (std::invalid_argument) { // Выполнить все команды. // Обход списка с помощью класса std:iterator }
Особенности реализации класса CommandList: 1. Файл считывается построчно с помощью класса для работы с потоками std::ifstream. 2. Команды хранятся в защищенном поле класса типа std::list 3. Обход элементов списка осуществляется с помощью итератора std::iterator
Пример использования класса CommandList:
CommandList cl = CommandList();
// Чтение из файла: cl.init("commands.txt"); cl.execute();
Вот, в чем суть. Преподаватель сказал, что в задании четко указанны классы и их формат - нужно сделать соответствие, верно реализовать абстрактный класс - тут он неполный, и вообще не совсем соответствует указанному в задание - прошу помочь... другое было - просто посмотреть и разглядеть недочеты....вот тут вообще не ясно, т.е. очень просим помочь (видимо с точки зрения правильного или желательного написания программ или с точки зрения профессионального программиста - общие советы по написанию подобных программ). Главное все таки на тему абстрактного класса и дореализации тех методов что там указаны - очень надо, всю суть командного процессора уже сделали (основные методы сделаны, пограмма верно работает) - остались мелочи, но на них стопор, а сроки жмут...