Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- using std::exception;
- using std::string;
- using std::vector;
- using std::cout;
- using std::endl;
- using std::cin;
- // Ошибка: пользователь уже есть в бд
- class UserAlreadyExists : public exception {
- public:
- int id;
- // Инициализируем переменную user в классе
- UserAlreadyExists(int id) : id(id) {};
- };
- // Ошибка: пользователь нет в бд
- class UserNotFound : public exception {
- public:
- int id;
- string name;
- // Дав конструктора - храним либо имя, либо айди
- // Остальные поля - либо -1, либо пустое
- UserNotFound(string const &name) : name(name), id(-1) {};
- UserNotFound(int id) : id(id), name("") {};
- };
- /**
- * Класс пользователя
- * Хрнанит:
- * Имя пользователя
- * Id пользователя
- */
- class User {
- public:
- // Конструктор
- User(int id, string const &name) {
- this->id = id;
- this->name = name;
- }
- int getId() const {
- return id;
- }
- string getName() const {
- return name;
- }
- private:
- int id;
- string name;
- };
- /**
- * Класс базы пользователей
- * Операции:
- * Добавление нового пользователя
- * Удаление пользователя (По имени или по Id)
- * Поиск (По имени или по id)
- */
- class DataBase {
- public:
- // Если польхователь уже есть в бд - выбрасываем ошибку
- void add(User const &user) {
- // Проверяем на уникальность id
- for (auto it = user_list.begin(); it != user_list.end(); ++it) {
- if (it->getId() == user.getId()) {
- throw UserAlreadyExists(user.getId());
- }
- }
- user_list.push_back(user);
- }
- // Если пользователя нет в бд - выбрасываем ошибку UserNotFound
- void remove(int id) {
- // auto === vector<User>::iterator
- for (auto it = user_list.begin(); it != user_list.end(); ++it) {
- if (it->getId() == id) {
- user_list.erase(it);
- }
- }
- throw UserNotFound(id);
- }
- void remove(string const &name) {
- for (auto it = user_list.begin(); it != user_list.end(); ++it) {
- if (it->getName() == name) {
- user_list.erase(it);
- }
- }
- throw UserNotFound(name);
- }
- /**
- * Возвращаем результат:
- * true - Нашлось
- * false - Не нашлось
- * Второй параметр - результат.
- * Т.е. он будет содержать найденного пользователя
- */
- bool find(int id, User &result) const {
- for (auto it = user_list.begin(); it != user_list.end(); ++it) {
- if (it->getId() == id) {
- result = *it;
- return true;
- }
- }
- return false;
- }
- bool find(string const &name, User &result) const {
- for (auto it = user_list.begin(); it != user_list.end(); ++it) {
- if (it->getName() == name) {
- result = *it;
- return true;
- }
- }
- return false;
- }
- /**
- * Возвращаем всех пользователей
- */
- vector<User> getAll() const {
- return user_list;
- }
- private:
- vector<User> user_list;
- };
- int main() {
- setlocale(LC_ALL, "Russian");
- DataBase db;
- int action = 0;
- while (action != 7) {
- cout << "1 - добавить пользователя" << endl;
- cout << "2 - найти пользователя по id" << endl;
- cout << "3 - найти пользователя по имени" << endl;
- cout << "4 - удалить пользователя по id" << endl;
- cout << "5 - удалить пользователя по имени" << endl;
- cout << "6 - вывести всех пользователей" << endl;
- cout << "7 - выйти" << endl;
- cin >> action;
- system("cls"); // Отчищаем экран
- int id;
- string name;
- User user(0, "");
- if (action == 1 || action == 2 || action == 4) {
- cout << "Введите id пользователя" << endl;
- cin >> id;
- }
- if (action == 1 || action == 3 || action == 5) {
- cout << "Введите имя пользователя" << endl;
- cin >> name;
- }
- try {
- switch (action) {
- // Добавляем пользователя
- case 1:
- db.add(User(id, name));
- cout << "Пользователь добавлен" << endl;
- break;
- // Поиск пользователя по id
- case 2:
- if (db.find(id, user)) {
- cout << "Имя пользователя с id == " << id << ": " << user.getName() << endl;
- } else {
- cout << "Пользователь с таким id не найден" << endl;
- }
- break;
- // Поиск пользователя по имени
- case 3:
- if (db.find(name, user)) {
- cout << "Id пользователя с именем " << name << ": " << user.getId() << endl;
- } else {
- cout << "Пользователь с таким именем не найден" << endl;
- }
- break;
- // Удаление пользователя по id
- case 4:
- db.remove(id);
- cout << "Пользователь удален" << endl;
- break;
- // Удаление пользователя по имени
- case 5:
- db.remove(name);
- cout << "Пользователь удален" << endl;
- break;
- // Вывод всех пользователей
- case 6:
- {
- cout << "Все пользователи:" << endl;
- vector<User> users = db.getAll();
- for (auto &user : users) {
- cout << user.getId() << ":" << user.getName() << endl;
- }
- }
- }
- } catch (UserAlreadyExists const &error) {
- cout << "Ошибка: Пользователь с id " << error.id + " уже есть в бд" << endl;
- } catch (UserNotFound const &error) {
- cout << "Ошибка: Пользователь не найден в бд" << endl;
- } catch (...) {
- cout << "Ошибка: Уупс, что-то пошло не так" << endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement