Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Stationery.h*
- #include <string>
- #include <vector>
- #include <iostream>
- #include <fstream>
- using namespace std;
- class Stationery {
- private:
- int number;
- string type;
- string firm;
- double price;
- public:
- void setNumber(int number);
- void setType(string type);
- void setFirm(string firm);
- void setPrice(double price);
- int getNumber();
- string getType();
- string getFirm();
- double getPrice();
- // Метод, выводящий данные на экран
- void outputData(vector<Stationery*> vec);
- // Метод, реализующий ввод данных с клавиатуры
- void addData(vector<Stationery*> &vec);
- // Метод, реализующий удаление элемента из массива данных
- void deleteElement(unsigned int num, vector<Stationery*> &vec);
- // Метод, реализующий сортировку данных в массиве
- void sorting(vector<Stationery*> &vec);
- // Метод, реализующий поиск и редактирование записей
- void searchAndRedaction(vector<Stationery*> vec);
- // Метод, реализующий редактирование записей (используется в методе searchAndRedaction)
- void redaction(vector<Stationery*> &vec, int i);
- // Метод, записывающий данные в бинарный файл
- void saveInBinaryFile(vector<Stationery*> vec);
- // Метод, записывающий данные из бинарного файла в массив
- void loadFromBinaryFileInVector(vector<string> &vec);
- // Метод, реализующий меню
- void menu();
- };
- Stationery.cpp
- #include "stdafx.h"
- #include "Stationery.h"
- #include <algorithm>
- vector<Stationery*> arrStationery;
- vector<string> arrData;
- void Stationery::setNumber(int number) {
- this->number = number;
- }
- void Stationery::setType(string type) {
- this->type = type;
- }
- void Stationery::setFirm(string firm) {
- this->firm = firm;
- }
- void Stationery::setPrice(double price) {
- this->price = price;
- }
- int Stationery::getNumber() {
- return number;
- }
- string Stationery::getType() {
- return type;
- }
- string Stationery::getFirm() {
- return firm;
- }
- double Stationery::getPrice() {
- return price;
- }
- // Метод, выводящий данные на экран
- void Stationery::outputData(vector<Stationery*> vec) {
- if (!vec.empty()) {
- for (vector<Stationery*>::iterator it = vec.begin(); it != vec.end(); ++it) {
- cout << (*it)->getNumber() << ")" << (*it)->getType() << " - " << (*it)->getFirm()
- << " - " << (*it)->getPrice() << endl;
- }
- } else {
- cout << "Данные не были занесены в оперативную память компьютера!" << endl;
- }
- }
- // Метод, реализующий ввод данных с клавиатуры
- void Stationery::addData(vector<Stationery*> &vec) {
- int choice;
- do {
- cout << "Если данные были записаны ранее, то новые записи будут добавлены в конец массива!" << endl;
- cout << "Введите запись о канцелярских товарах!";
- Stationery stat;
- cin.get();
- stat.setNumber(vec.size() + 1);
- cout << endl << "Введите тип канцелярского товара для " << vec.size() + 1 << " товара: " << endl;
- getline(cin, stat.type);
- cout << endl << "Введите название фирмы производителя для " << vec.size() + 1 << " канцелярского товара:" << endl;
- getline(cin, stat.firm);
- cout << endl << "Введите цену " << vec.size() + 1 << " канцелярского товара:" << endl;
- cin >> stat.price;
- vec.push_back(new Stationery(stat));
- cout << endl << "Хотите ввести еще одну запись? 1 - да, любое другое число - нет." << endl;
- cin >> choice;
- cout << endl;
- } while (choice == 1);
- }
- // Метод, реализующий удаление элемента из массива данных
- void Stationery::deleteElement(unsigned int num, vector<Stationery*> &vec) {
- num--;
- if (num > vec.size()) {
- cout << "Такой записи не существует!" << endl;
- } else {
- vec.erase(vec.begin() + num);
- cout << "Запись удалена." << endl;
- }
- }
- struct PriceCmp {
- bool operator()(Stationery *a, Stationery *b) const {
- return a->getPrice() < b->getPrice();
- }
- };
- struct NumCmp {
- bool operator()(Stationery *a, Stationery *b) const {
- return a->getNumber() < b->getNumber();
- }
- };
- struct TypeCmp {
- bool operator()(Stationery *a, Stationery *b) const {
- return a->getType() < b->getType();
- }
- };
- struct FirmCmp {
- bool operator()(Stationery *a, Stationery *b) const {
- return a->getFirm() < b->getFirm();
- }
- };
- // Метод, реализующий сортировку данных в массиве
- void Stationery::sorting(vector<Stationery*> &vec) {
- cout << endl << "Выберите действие: " << endl << "1 - сортировка по цене" << endl << "2 - по номеру (в порядке записи)"
- << endl << "3 - по типу" << endl << "4 - по названию фирмы" << endl;
- int srt; cin >> srt;
- switch (srt) {
- case 1:
- cout << "Сортировка по цене" << endl;
- sort(vec.begin(), vec.end(), PriceCmp());
- break;
- case 2:
- cout << "Сортировка по номеру (по порядку записи)" << endl;
- sort(vec.begin(), vec.end(), NumCmp());
- break;
- case 3:
- cout << "Сортировка по типу" << endl;
- sort(vec.begin(), vec.end(), TypeCmp());
- break;
- case 4:
- cout << "Сортировка по названию фирмы" << endl;
- sort(vec.begin(), vec.end(), FirmCmp());
- break;
- }
- }
- // Метод, реализующий поиск и редактирование записей
- void Stationery::searchAndRedaction(vector<Stationery*> vec) {
- cout << endl << "Сейчас Вы можете найти запись и её oтредактировать." << endl;
- cout << "По какому полю структуры Вы будете искать запись:" << endl << "1 - номер записи" << endl << "2 - тип товара" << endl <<
- "3 - название фирмы" << endl << "4 - цена" << endl << endl;
- bool result = false;
- int choice; cin >> choice;
- switch (choice) {
- case 1:
- cout << endl << "Введите номер записи:" << endl;
- int key; cin >> key;
- for (int i = 0; i < vec.size(); i++) {
- if (vec[i]->number == key) {
- result = true;
- cout << "Найденная Вами запись: " << endl;
- cout << vec[i]->number << ") " << vec[i]->type << " - " << vec[i]->firm << " - " << vec[i]->price << endl;
- cout << "Вы хотите редактировать эту запись (номер записи редактироваться не будет)"
- << endl << "1 - да " << endl << "любое другое (целое) число - нет" << endl;
- int red; cin >> red;
- if (red == 1) {
- redaction(arrStationery, i);
- }
- break;
- }
- }
- if (result == false) {
- cout << "Запись не найдена!" << endl;
- }
- break;
- case 2: {
- cout << endl << "Введите тип товара:" << endl;
- string typeKey; cin >> typeKey;
- for (int i = 0; i < vec.size(); i++) {
- if (vec[i]->type.compare(typeKey) == 0) {
- result = true;
- cout << "Найденная Вами запись: " << endl;
- cout << vec[i]->number << ") " << vec[i]->type << " - " << vec[i]->firm << " - " << vec[i]->price << endl;
- cout << "Вы хотите редактировать эту запись (номер записи редактироваться не будет)"
- << endl << "1 - да " << endl << "любое другое (целое) число - нет" << endl;
- int red; cin >> red;
- if (red == 1) {
- redaction(arrStationery, i);
- }
- break;
- }
- }
- if (result == false) {
- cout << "Запись не найдена!" << endl;
- }
- break;
- }
- case 3: {
- cout << endl << "Введите название фирмы:" << endl;
- string firmKey; cin >> firmKey;
- for (int i = 0; i < vec.size(); i++) {
- if (vec[i]->firm.compare(firmKey) == 0) {
- result = true;
- cout << "Найденная Вами запись: " << endl;
- cout << vec[i]->number << ") " << vec[i]->type << " - " << vec[i]->firm << " - " << vec[i]->price << endl;
- cout << "Вы хотите редактировать эту запись (номер записи редактироваться не будет)"
- << endl << "1 - да " << endl << "любое другое (целое) число - нет" << endl;
- int red; cin >> red;
- if (red == 1) {
- redaction(arrStationery, i);
- }
- break;
- }
- }
- if (result == false) {
- cout << "Запись не найдена!" << endl;
- }
- break;
- }
- case 4:
- cout << endl << "Введите цену:" << endl;
- double priceKey; cin >> priceKey;
- for (int i = 0; i < vec.size(); i++) {
- if (vec[i]->price == priceKey) {
- result = true;
- cout << "Найденная Вами запись: " << endl;
- cout << vec[i]->number << ") " << vec[i]->type << " - " << vec[i]->firm << " - " << vec[i]->price << endl;
- cout << "Вы хотите редактировать эту запись (номер записи редактироваться не будет)"
- << endl << "1 - да " << endl << "любое другое (целое) число - нет" << endl;
- int red; cin >> red;
- if (red == 1) {
- redaction(arrStationery, i);
- }
- break;
- }
- }
- if (result == false) {
- cout << "Запись не найдена!" << endl;
- }
- break;
- }
- }
- // Метод, реализующий редактирование записей (используется в методе searchAndRedaction)
- void Stationery::redaction(vector<Stationery*> &vec, int i) {
- cin.get();
- cout << endl << "Введите тип канцелярского товара: " << endl;
- getline(cin, vec[i]->type);
- cout << endl << "Введите название фирмы производителя канцелярского товара:" << endl;
- getline(cin, vec[i]->firm);
- cout << endl << "Введите цену канцелярского товара:" << endl;
- cin >> vec[i]->price;
- cout << "Ваша запись после редактирования:" << endl;
- cout << vec[i]->number << ") " << vec[i]->type << " - " << vec[i]->firm << " - " << vec[i]->price << endl;
- }
- // Метод, записывающий данные в бинарный файл
- void Stationery::saveInBinaryFile(vector<Stationery*> vec) {
- cout << endl;
- fstream fout;
- fout.open("StationeryBinary.txt", ios::out | ios::binary);
- if (fout.is_open()) {
- for (int i = 0; i < vec.size(); i++) {
- fout << vec[i]->number << " | ";
- fout << vec[i]->type << " | ";
- fout << vec[i]->firm << " | ";
- fout << vec[i]->price << endl;
- }
- fout.close();
- // Проверяем, была ли произведена запись в файл
- fout.open("StationeryBinary.txt", ios::in | ios::ate);
- if (fout.is_open()) {
- if (fout.tellg() > 0) {
- cout << "Запись в файл была успешно проведена!" << endl;
- } else {
- cout << "Запись в файл не была проведена из-за непредвиденной ошибки!!!" << endl;
- }
- } else {
- cout << "Непредвиденная ошибка (файл не открывается для проверки)! Рекомендуется проверить, были ли записаны данные в файл вручную!" << endl;
- }
- } else {
- cout << "Ошибка! Файл не может быть открыт!!" << endl;
- }
- }
- // Метод, записывающий данные из бинарного файла в массив
- void Stationery::loadFromBinaryFileInVector(vector<string> &vec) {
- cout << endl;
- fstream out("StationeryBinary.txt");
- string s;
- while (getline(out, s))
- vec.push_back(s);
- cout << "Данные, записанные из бинарного файла в массив" << endl;
- if (!vec.empty()) {
- for (vector<string>::iterator it = vec.begin(); it != vec.end(); ++it) {
- cout << (*it) << endl;
- }
- } else {
- cout << "Данные не были занесены в оперативную память компьютера!" << endl;
- }
- }
- // Метод, реализующий меню
- void Stationery::menu() {
- int action;
- while (true) {
- cout << endl << "Меню программы! Нажмите:" << endl << "0 - для завершения работы с программой;" <<
- endl << "1 - для записи данных;" << endl << "2 - для вывода данных (хранящихся в оперативной памяти) на экран;" <<
- endl << "3 - удаление записи из массива данных;" <<
- endl << "4 - сортировка данных;" <<
- endl << "5 - поиск и редактирование записей;" <<
- endl << "6 - запись данных в бинарный файл" <<
- endl << "7 - запись данных из бинарного файла в массив и вывод его на экран" << endl;
- cout << "Введите номер действия: ";
- cin >> action;
- switch (action) {
- case 0:
- exit(1);
- case 1:
- cout << endl;
- addData(arrStationery);
- break;
- case 2:
- cout << endl << "Введенная Вами структура данных о канцелярских товарах будет выведена в формате: " << endl;
- cout << "Тип " << " - " << " Фирма производителя " << " - " << " Цена" << endl;
- outputData(arrStationery);
- break;
- case 3:
- cout << "Введите номер записи, которую Вы хотите удалить: ";
- int num; cin >> num;
- deleteElement(num, arrStationery);
- break;
- case 4:
- sorting(arrStationery);
- cout << "Отсортированные данные:" << endl;
- outputData(arrStationery);
- break;
- case 5:
- searchAndRedaction(arrStationery);
- break;
- case 6:
- saveInBinaryFile(arrStationery);
- break;
- case 7:
- loadFromBinaryFileInVector(arrData);
- }
- }
- }
- Lb_5.cpp
- /* Лабораторная работа №5
- Использование ООП в разработке приложений
- Работу выполнили студенты II-АИТ-3
- Батейщиков Д.А. и Симонов А.А.*/
- #include "stdafx.h"
- #include <string>
- #include <Windows.h>
- #include "Stationery.h"
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- // Русификация
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- cout << "Copyright by BSC (Bateyshikov & Simonov Corporation)." << endl;
- cout << "Здравствуйте!" << endl << "Запущена программа для создание структуры данных канцелярских товаров." << endl;
- Stationery stat;
- stat.menu();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement