Главная страница
Навигация по странице:

  • ИРКУТСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

  • Пояснительная запискак курсовой работе

  • Разработал студент группы ЭВМбз-21-1

  • Нормоконтроль

  • Курсовая работа защищена с оценкой ___________ ______________ Иркутск 2022г.

  • Тема работы: Создание приложения для работы с файлом Исходные данные

  • Рекомендуемая литература

  • Курсовая_работа_вариант_№36_Шишкин_М_И_ЭВМбз_21_1 (1). Пояснительная записка к курсовой работе по дисциплине Программирование 036. 00. 00 Пз


    Скачать 1.03 Mb.
    НазваниеПояснительная записка к курсовой работе по дисциплине Программирование 036. 00. 00 Пз
    Дата15.12.2022
    Размер1.03 Mb.
    Формат файлаdocx
    Имя файлаКурсовая_работа_вариант_№36_Шишкин_М_И_ЭВМбз_21_1 (1).docx
    ТипПояснительная записка
    #846577

    Министерство науки и высшего образования Российской Федерации

    Федеральное государственное бюджетное образовательное
    учреждение высшего образования

    ИРКУТСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ

    ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

    Институт информационных технологий и анализа данных


    Допускаю к защите
    Руководитель А.Б. Столбов

    подпись, И.О. Фамилия


    Создание приложения для работы с файлом

    Наименование темы

    Пояснительная записка
    к курсовой работе


    по дисциплине «Программирование»
    1.036.00.00 ПЗ



    Разработал студент группы ЭВМбз-21-1







    М.И.Шишкин

    подпись




    И. О. Фамилия































    Нормоконтроль







    А.Б. Столбов

    подпись




    И. О. Фамилия



    Курсовая работа защищена с оценкой ___________ ______________


    Иркутск 2022г.
    Министерство науки и высшего образования Российской Федерации

    Федеральное государственное бюджетное образовательное
    учреждение высшего образования

    ИРКУТСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ

    ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
    ЗАДАНИЕ

    НА КУРСОВУЮ РАБОТУ

    По курсу «Программирование»


    Студенту

    Группы ЭВМбз-21-1 Михаилу Игоревичу Шишкину



    Тема работы:

    Создание приложения для работы с файлом

    Исходные данные:
    (Обеспечение персональными компьютерами кафедры АС фиксируется в файле со следующими сведениями: название (номер) ПК, материнская плата, процессор, видеокарта, жесткий диск, память, оптические носители, дисковод, монитор, аудитория. Написать программу, позволяющую сформировать список ПК, находящихся в одной аудитории. Выдать список ПК, память которых меньше 128Мб. Подсчитать количество компьютеров в каждой аудитории. Определить самого распространенного производителя материнских плат.)
    Рекомендуемая литература:

    1. Павловская Т.А. C/C++. Программирование на языке высокого уровня / Т. А. Павловская. — СПб.: Питер, 2003. — 461 с: ил.

    2. Иванов В. Б. Прикладное программирование на C/C++: с нуля до мультимедийных и сетевых приложений. М.: «СОЛОН-Пресс». 2008. – 240 с. [Электронный ресурс]. – Режим доступа: http://e.lanbook.com/books/ element.php&pl1_id=13740

    3. Хохлов Д.Г. Методы программирования на языке С: практикум Ч.1. «Бином. Лаборатория знаний». 2014. – 336 с. [Электронный ресурс]. – Режим доступа: http://e.lanbook.com/books/element.php ?pl1_id=50555

    4. Хохлов Д.Г. Методы программирования на языке С: практикум Ч.2. «Бином. Лаборатория знаний». 2014. – 377 с. [Электронный ресурс]. – Режим доступа: http://e.lanbook.com/books/element.php ?pl1_id=50555

    5. Иванов В. Б. Прикладное программирование на C/C++: с нуля до мультимедийных и сетевых приложений. М.: «СОЛОН-Пресс». 2008. – 240 с. [Электронный ресурс]. – Режим доступа: http://e.lanbook.com/books/ element.php&pl1_id=13740

    6. Липман С., Лажойе Ж. Язык программирования С++. Полное руководство. СПб.: Невский диалект, М.: ДМК Пресс. 2006. – 1104с. [Электронный ресурс]. – Режим доступа: http://e.lanbook.com/view/book/ 1216/


    Графическая часть на 10 листах.

    Дата выдачи задания «02» марта 2022 г.

    Задание получил _____________________________/М.И. Шишкин/

    Дата представления работы руководителю “20” мая 2022 г.
    Руководитель курсовой работы _________________________ /А.Б. Столбов/

    Оглавление


    Введение и постановка задачи 5

    Таблица спецификаций глобальных переменных и переменных модуля main() 5

    Схема иерархии модулей 6

    Спецификация функций 6

    Алгоритмы функций 7

    Главная функция main 7

    Функция menu 7

    Функция manageFile 7

    Функция createFile 8

    Функция openFile 8

    Функция outputFile 8

    Функция writeResults 9

    Функция editFile 9

    Функция userManual 9

    Таблица тестов 10

    Результаты тестирования и работы программы 10

    Листинг файла проекта 19

    Руководство пользователя 35

    Заключение 35

    Список литературы 35


    Введение и постановка задачи


    Необходимо разработать программу, работающую с бинарными или текстовыми файлами, в файл записывается структура характеристик персональных компьютеров: название (номер) ПК, материнская плата, процессор, видеокарта, жёсткий диск, память, оптические носители, дисковод, монитор, аудитория. Программа должна:

    1. Создавать новые файлы и записывать в них введённые данные;

    2. Открывать ранее созданные файлы и записывать в них введённые данные;

    3. Позволять редактировать ранее введённые записи и добавлять новые;

    4. Осуществлять проверку сохранения сведений в файле при выходе из программы;

    5. Выводить все данные, содержащиеся в файле;

    6. Формировать список ПК, находящихся в одной аудитории;

    7. Формировать список из ПК, память которых меньше 128 Мб;

    8. Производить подсчёт ПК в каждой аудитории;

    9. Определять самого распространённого производителя материнских плат;

    10. Осуществлять проверку корректности введённых данных;

    11. Использовать главное и контекстное меню с указанием клавиш альтернативного доступа.

    12. Содержать разделы «О программе», «Задание», «Справка»;

    Для написания программы мною была использована следующая интегрированная среда разработки: Microsoft Visual Studio 2019. Программа написана на языке программирования высокого уровня С++.

    Таблица спецификаций глобальных переменных и переменных модуля main()


    Таблица 1 Таблица спецификации глобальных переменных и переменных модуля main()



    Имя

    Назначение

    Тип

    ОДЗ

    1

    entrySize

    Максимальное кол-во добавленных элементов структуры (Entry{ };) в файл

    #define

    [ 0; 10 ]

    2

    Filename

    Имя файла созданного программой

    string

    -

    3

    currentFile

    Имя текущего файла, с которым программа осуществляет работу

    string




    4

    id

    Идентификатор каждого ПК. Генерируется случайно

    int

    [0; 1000 ]

    5

    numPK

    Название ПК

    string

    -

    6

    MB

    Производитель и модель материнской платы

    string

    -

    7

    CPU

    Модель процессора

    string

    -

    8

    VG

    Модель видеокарты

    string

    -

    9

    HDD

    Модель жёсткого диска

    string

    -

    10

    Memory

    Объём памяти

    int

    [0; 32768 ]

    11

    OptMedia

    Имеющиеся оптические носители

    string

    -

    12

    Drive

    Наличие/отсутствие дисковода

    string

    -

    13

    Monitor

    Модель монитора

    string

    -

    14

    Aud

    Номер аудитории

    Int

    [0;10]


    Схема иерархии модулей




    Рисунок 1 Иерархия модулей

    Спецификация функций


    Таблица 2 Спецификация внешних модулей



    Название

    Назначение модуля

    Тип

    Входные параметры

    Выходные параметры

    1

    openFile

    Открыть существующий файл

    void

    string runningFile- имя файла с которым будет осуществляться работа

    -

    2

    createFile

    Создание нового файла и запись данных

    void

    -

    -

    3

    manageFile

    Второстепенное меню для работы с файлами

    void

    string runningFail- текущий файл

    -

    4

    outputFile

    Вывод данных файла, осуществление операций над файлом

    void

    string fileName- файл с которым будет осуществляться работа

    -

    5

    writeResult

    Вывод данных текущего файла на экран

    void

    -

    -

    6

    editFile

    Проверка соответствия формата файла

    void

    LPCSTR filename

    -

    7

    menu

    Главное меню

    void

    string currentFile- текущий файл

    -

    8

    userManual

    Открытие содержимого файла

    void

    string filename- выбор файла

    -


    Алгоритмы функций

    Главная функция main


    1. Подключаем русскоязычную раскладку

    2. Вызов функции menu

    Функция menu


    1. Вывод меню в консоль

    2. Запрашиваем у пользователя ввод (caseInput)

    3. Проверка корректности ввода

      1. Если (caseInput) не целочисленная переменная, вывод сообщения об ошибке, попытка повторного ввода

    4. Если (caseInput)=1:

      1. Вывод текста в консоль

      2. Возврат в меню при нажатии клавиши (system(“pause”))

    5. Ecли (caseInput)=2:

      1. Вызов функции manageFile

    6. Если (caseInput)=3:

      1. Вызов функции outputFile

    7. Если (caseInput)=4:

      1. Вызов функции userManual

    8. Если (caseInput)=5:

      1. Вызов функции writeResult

      2. Пауза до нажатия клавиши

      3. Возврат в menu

    9. Если (caseInput)=6:

      1. Вывод текста сообщения в консоль

      2. Пауза до нажатия клавиши

      3. Возврат в menu

    10. Если (caseInput)=0:

      1. Выход из программы

      2. Сохранение данных

      3. Освобождение памяти

      4. Закрытие текущего файла

    11. Если (caseInput) – некорректное значение

      1. Вывод сообщения об ошибке

      2. 11.2 Возврат в menu


    Функция manageFile


    1. Очистка пространства консоли

    2. Вывод второстепенного меню

    3. Запрос ввода пользователя (input)

    4. Если (input)=1:

      1. Вызов функции createFile

    5. Если (input)=2:

      1. Вызов функции openFile

    6. Если (input)=3

      1. Вызов функции menu()

    7. Если (input) некорректное значение:

      1. Вывод сообщения об ошибке

      2. Вызов функции menu()

    Функция createFile


    1. Очистка пространства консоли (system(“CLS”)

    2. Обозначение переменных для ввода данных в файл

    3. Запрос ввода пользователем имени файла (fileName)

    4. Создание файла с заданным именем (fileName)

    5. Если (fileName) уже существует:

      1. Вывод сообщения об ошибке

      2. Рекурсия функции createFile

    6. Открытие файла (fileName)

    7. Ввод структуры данных в файл пока переменная aChoise=true

      1. Иначе: сохранить введённые изменения

      2. Закрыть файл

    8. Вызов функции menu(fileName)

    Функция openFile


    1. Проверка на наличие открытого файла

    2. Если найден открытый файл, то:

      1. Закрыть файл

    3. Очистка пространства консоли

    4. Запрос на ввод пользователем имени файла (string filename)

    5. Открытие файла

    6. Если (string filename) не найден

      1. Вывод сообщения об ошибке

      2. Пауза до нажатия клавиши system(“pause”)

      3. Рекурсия функции

    7. Вывод сообщения о открытии файла

    8. Пауза до нажатия клавиши system (“pause”)

    9. Вызов функции menu()

    Функция outputFile


    1. Очистка пространства консоли

    2. Если найден открытый файл

      1. Вывод сообщения пользователю: «Открыт файл:»

    3. Пока файл не закончится (!g_editFile.eof())

    3.1 Запись данных файла в массив

    1. Открыть файл для записи результата «result.txt»

    2. Запрос на ввод пользователем пункта меню (input)

    3. Пока (input)!=0:

      1. Если (input)=1:

        1. Вызов функции editFile

        2. Вывод сообщения об открытии файла

      2. Если (input)=2:

        1. Сохранение данных и закрытие файла (g_inFile.close)

      3. Если (input)=3

    6.3.1Запрос на ввод пользователем номера аудитории (tmpk)

    6.3.2 Если (tmpk)=g_item.Aud[i] (массив хранящий номера аудиторий),то

          1. Вывод структуры данных в консоль, kk++

        1. Если kk=0

          1. Запись в файл и вывод на экран сообщения

      1. Если (tmpk)=4:

        1. Вывод на экран и запись в файл сообщения

        2. Если элемент массива g_item.Memory[i]<128

          1. Вывод структуры данных в консоль, kk++

        3. Если kk=0

        4. Запись в файл и вывод на экран сообщения

      2. Если (tmpk)=5:

    6.5.1Вывод сообщения пользователю

    6.5.1.2 Для j от одного до 10, kk=0

    6.5.2.1 Для i <=сounter (i=0)

    6.5.2.1.1Если элемент массива g_item.Aud=j, то

            1. Инкремент kk

        1. Вывод j <

      1. Если (tmpk)=6:

        1. Инициализируем max=0, tmps=” ”

        2. Для i<=counter

          1. Присваиваем tmp=g_item.MB[i]. (от 0 до пробела)

          2. Для j=i+1; j<=counter

            1. Если tmp=g_item.MB[i]

              1. Инкремент m

            2. Если m>max

              1. max=m

              2. tmps=tmp

        3. Вывод tmps

      2. Если (tmpk)=0:

        1. Функция menu

    1. Иначе вывод msg (если не найден открытый файл)

    7.1 Функция menu

    Функция writeResults


    1. Для i=0; i<=entrySize

      1. Вывод g_item.id[i]

      2. Вывод g_item.numPK[i]

      3. Вывод g_item.MB[i]

      4. Вывод g_item.CPU[i]

      5. Вывод g_item.VG[i]

      6. Вывод g_item.HDD[i]

      7. Вывод g_item.OptMedia[i]

      8. Вывод g_item.Drive[i]

      9. Вывод g_item.Monitor[i]

      10. Вывод g_item.Aud[i]

    Функция editFile


    1. Если ShellExecute(NULL, NULL, filename, NULL, NULL, SW_RESTORE) (Невозможно открыть файл или же файл не подходит по формату)

    2. Вывод сообщения об ошибке


    Функция userManual


    1. Чтение данных из файла filename

    2. Объявление строковой переменной line

    3. Пока (getline(userManual, line))

      1. Вывод<

    4. Пауза до нажатия клавиши system(“pause”)

    5. Функция menu

    Таблица тестов


    № теста

    Назначение

    1

    Вывод главного меню

    2

    Создание нового файла

    3

    Запись данных в файл

    4

    Открытие контекстного меню «Редактировать файл»

    5

    Открытие файла для редактирования (удалить/добавить элемент)

    6

    Открытие уже существующего файла

    7

    Вывод руководства пользователя

    8

    Показ содержимого текущего файла

    9

    Вывод сведений о программе

    10

    Список ПК, находящихся в одной аудитории

    11

    Список ПК, с памятью меньше 128 Мб

    12

    Подсчёт кол-ва ПК в каждой аудитории

    13

    Определить самого распространённого производителя мат. плат

    14

    Выход из программы

    15

    Проверка корректности ввода (как пример- ввод № аудитории)

    16

    Вывод текста задания

    Результаты тестирования и работы программы




    Рисунок 2 Тест№1 Вывод главного меню



    Рисунок 3Тест №2 Создание нового файла



    Рисунок 4 Тест №2 Создание нового файла



    Рисунок 5Тест №3 Запись данных в файл



    Рисунок 6 Тест №4 Открытие контекстного меню



    Рисунок 7 Тест №5 Открытие файла для редактирования



    Рисунок 8 Тест №6 Открытие уже созданного файла



    Рисунок 9 Тест №7 Вывод руководства пользователя



    Рисунок 10 Тест №8 Показ содержимого текущего файла



    Рисунок 11 Тест №9 вывод сведений о программе



    Рисунок 12 Тест №10 Список ПК находящихся в одной аудитории



    Рисунок 13 Тест №11 ПК с памятью менее 128 Мб



    Рисунок 14 Тест №12 кол-во ПК в каждой аудитории



    Рисунок 15 Тест №13 Самый распространённый производитель мат. плат



    Рисунок 16 Тест №14 Выход из программы



    Рисунок 17 Тест №15 Проверка корректности ввода



    Рисунок 18 Тест №16 Вывод текста задания

    Листинг файла проекта


    /*

    Программа "ОБЕСПЕЧЕНИЕ ПЕРСОНАЛЬНЫМИ КОМПЬЮТЕРАМИ КАФЕДРЫ АС"

    Версия 5.15.1

    Разработчик: Михаил Шишкин, студент ИРНИТУ, уч. группа ЭВМбз-21-1

    */

    #include // Управление потоком ввода/вывода

    #include // Работа с файлами

    #include

    #include // Работа со строками

    #include // istringstream class

    #include // Создание "интерфейса", для работы с ОС Windows

    #include // Работа с файлами

    #include // Открытие файлов в ОС Windows

    /* CMD палитра*/

    #define WHITE 15

    #define LIGHTBLUE 9

    #define RED 12

    #define BLUE 3

    #define GREEN 10

    #define YELLOW 6

    #define PURPLE 5

    /* CMD палитра*/

    #define entrySize 10 //Максимальное кол-во добавляемых элементов

    using namespace std;

    ifstream g_inFile; // Открыть файл.

    ofstream g_outFile; //Закрыть файл

    ofstream g_outResultsFile; //Создать новый файл

    fstream g_editFile; //Редактировать файл

    HANDLE g_hConsole = GetStdHandle(STD_OUTPUT_HANDLE); // CMD палитра

    struct Entry { //структура данных

    int id[50];

    string numPK[50];

    string MB[50];

    string CPU[50];

    string VG[50];

    string HDD[50];

    int Memory[50];

    string OptMedia[50];

    string Drive[50];

    string Monitor[50];

    int Aud[30];

    }; Entry g_item;

    void openFile(string runningFile);//объявление функций

    void createFile();

    void manageFile(string runningFile);

    void outputFile(string fileName);

    void writeResults();

    void editFile(LPCSTR fileName);

    void menu(string currentFile);

    void userManual(string fileName);

    int main() { //Главная функция

    SetConsoleOutputCP(1251);//Возможность русскоязычного ввода/вывода

    SetConsoleCP(1251);

    setlocale(LC_ALL, "Rus");

    menu("N/A");

    }

    void menu(string currentFile) { //Функция вызова главного меню для работы с файлами

    system("CLS");

    short int caseInput = 0;

    SetConsoleTextAttribute(g_hConsole, PURPLE);

    cout << "\nОБЕСПЕЧЕНИЕ ПЕРСОНАЛЬНЫМИ КОМПЬЮТЕРАМИ КАФЕДРЫ АС (1.0)" << endl;

    SetConsoleTextAttribute(g_hConsole, YELLOW);

    cout << "\nТекущий файл: " << currentFile << endl;

    SetConsoleTextAttribute(g_hConsole, GREEN);

    cout << "\n1. Задание"

    "\n2. Открыть или создать файл"

    "\n3. Редактировать файл"

    "\n4. Руководство пользователя (Справка)"

    "\n5. Вывод данных файла"

    "\n6. О программе"

    "\n0. Выход";

    SetConsoleTextAttribute(g_hConsole, 6);

    cout << "\nЧто Вы хотите сделать? ";

    while (!(cin >> caseInput) || (cin.peek() != '\n')) { //проверка корректности вводимых данных

    cin.clear();

    while (cin.get() != '\n');

    system("CLS"); //Очистка пространства консоли

    system("clear");

    cout << "Некорректный ввод!\n";

    menu("N/A");

    }

    switch (caseInput) { //оператор ветвления для выбора пункта меню

    case 1:

    SetConsoleTextAttribute(g_hConsole, 9);

    cout << "\n36. Обеспечение персональными компьютерами кафедры АС фиксируется в файле со следующими сведениями:"

    "\nназвание (номер) ПК, материнская плата, процессор,видеокарта, жёсткий диск, память, оптические носители, "

    "\nдисковод, монитор, аудитория. Написать программу позволяющую: ";

    SetConsoleTextAttribute(g_hConsole, 3);

    cout << "\n-Cформировать список ПК, находящихся в одной аудитории."

    "\n-Выдать список ПК, память которых меньше 128 Мб."

    "\n-Подсчитать количество компьютеров в каждой аудитории."

    "\n-Определить самого распространённого производителя материнских плат." << endl;

    system("pause");

    menu("N/A");

    break;

    case 2: manageFile(currentFile);

    break;

    case 3: outputFile(currentFile);

    break;

    case 4: userManual(currentFile);

    break;

    case 5: writeResults();

    system("pause");

    menu("N/A");

    break;

    case 6:SetConsoleTextAttribute(g_hConsole, 12);

    cout << "О ПРОГРАММЕ"

    "\nПрограмма: Обеспечение персональными компьютерами кафедры АС"

    "\nВерсия: 5.15.1"

    "\nПоследнее изменение: 20.05.2021"

    "\nРазработчик: Гринчик Aндрей Aлександрович"

    "\nВопросы и предложения: grin.200@gmail.com"

    << endl;le

    system("pause");

    menu("N/A");

    case 0:

    exit(3); //завершение работы программы

    //сохранение данных и освобождение памяти

    g_editFile.close();

    g_inFile.close();А

    g_outFile.close();

    break;

    default: //проверка корректности вводимых данных

    cout << "Некорректный ввод. Повторите попытку.";

    system("CLS"); //в ос Windows

    system("clear");

    menu("N/A");

    }

    }

    void manageFile(string runningFile) { //вызов контекстного меню

    system("CLS");

    short int input = 0;

    SetConsoleTextAttribute(g_hConsole, GREEN);

    cout << "\n1. Создать новый файл"

    "\n2. Oткрыть существующий файл"

    "\n3. Назад в главное меню" << endl;

    SetConsoleTextAttribute(g_hConsole, 6);

    cout << "\nЧто Вы хотите сделать? ";

    cin >> input;

    switch (input) { //оператор ветвления для выбора дальнейших действий по работе с файлами

    case 1: createFile();

    break;

    case 2: openFile(runningFile);

    break;

    case 3: menu("N/A");

    break;

    default:

    cout << "Некорректный выбор." << endl;

    menu("N/A");

    }

    }

    void createFile() {//Функция создания файла и записи в него новых данных

    system("CLS");

    string fileName, temp, aMB, aCPU, aVG, aHDD, aOptMedia, aMonitor, anumPK;

    int aMemory, aAud;

    bool aDrive, aChoice = true;

    SetConsoleTextAttribute(g_hConsole, 5);

    cout << "Введите имя файла: "; cin >> fileName;

    ifstream f(fileName.c_str());

    bool fileExist = f.good();

    if (fileExist) { //проверка уникальности нового файла

    SetConsoleTextAttribute(g_hConsole, RED);

    cout << "\nФайл с таким именем уже существует!"

    "\nПопробуйте снова!" << endl;

    system("Pause");

    createFile();

    }

    g_outFile.open(fileName);

    do {

    SetConsoleTextAttribute(g_hConsole, GREEN); //Ввод данных из консоли в файл

    cout << "\nВведите данные о ПК: \n" << endl;

    srand(time(NULL));

    DWORD id = rand() % 1000;

    g_outFile << id << endl;

    cin.ignore();

    cout << "Название (номер) ПК: "; getline(cin, anumPK);

    g_outFile << anumPK << endl;

    cout << "Материнская плата: "; getline(cin, aMB);

    g_outFile << aMB << endl;

    cout << "Процессор ПК: "; getline(cin, aCPU);

    g_outFile << aCPU << endl;

    cout << "Видеокарта: "; getline(cin, aVG);

    g_outFile << aVG << endl;

    cout << "Жёсткий диск : "; getline(cin, aHDD);

    g_outFile << aHDD << endl;

    cout << "Память(Mб): "; cin >> aMemory;

    g_outFile << aMemory << endl;

    cin.ignore();

    cout << "Оптические носители:"; getline(cin, aOptMedia);

    g_outFile << aOptMedia << endl;

    cout << "Наличие дисковода(Есть/Отсутствует): "; cin >> temp;

    aDrive = (temp == "есть" || temp == "Есть") ? 1 : 0;

    g_outFile << aDrive << endl;

    cin.ignore();

    cout << "Монитор ПК: "; getline(cin, aMonitor);

    g_outFile << aMonitor << endl;

    do {

    cout << "Аудитория (1-10): ";

    cin >> aAud;

    } while (aAud < 1 || aAud>10);

    g_outFile << aAud;

    cout << "Добавить данные о других ПК?(True/False): "; cin >> temp;

    if (temp == "true" || temp == "True") {

    aChoice = true;

    g_outFile << endl;

    }

    else aChoice = false;

    } while (aChoice);

    g_inFile.close(); // закрыть и сохранить файл

    menu(fileName); // Отображение имени текущего файла в главном меню

    }

    void openFile(string runningFile) {

    if (runningFile != "") {

    //Закрывает ранее открытые файлы, если таковые имеются

    g_editFile.close();

    g_inFile.close();

    g_outFile.close();

    }

    system("CLS");

    string fileName;

    SetConsoleTextAttribute(g_hConsole, WHITE);

    cout << "\nВведите имя файла" "\nОн должен находиться в том же каталоге, что и программа";

    SetConsoleTextAttribute(g_hConsole, 6);

    cout << "\nFilename(example.txt): ";

    cin >> fileName;

    g_inFile.open(fileName);//ввод имени файла пользователем, для открытия и дальнейшей работы

    if (!g_inFile) {

    SetConsoleTextAttribute(g_hConsole, RED);

    cout << "Невозможно открыть файл... " "Попытайтесь снова..." << endl;

    system("pause");

    openFile("");

    }

    SetConsoleTextAttribute(g_hConsole, WHITE);

    cout << fileName << " успешно открыт!" << endl;

    system("pause");

    menu(fileName);

    }

    void outputFile(string fileName) {//Функция вывода данных из файла и вывод данных согласно заданию

    system("CLS");

    int previousMax = 0, input = 0, counter = -1;

    string line;

    LPCSTR fileNameLPCSTR;

    if (fileName != "N/A") {

    cout << "\nОткрыт файл: " << fileName << endl << endl;

    g_editFile.open(fileName);

    while (!g_editFile.eof()) { //чтение данных из файла

    counter++;

    g_editFile >> g_item.id[counter];

    g_editFile.ignore();

    getline(g_editFile, line);

    g_item.numPK[counter] = line;

    getline(g_editFile, line);

    g_item.MB[counter] = line;

    getline(g_editFile, line);

    g_item.CPU[counter] = line;

    getline(g_editFile, line);

    g_item.VG[counter] = line;

    getline(g_editFile, line);

    g_item.HDD[counter] = line;

    g_editFile >> g_item.Memory[counter];

    g_editFile.ignore();

    getline(g_editFile, line);

    g_item.OptMedia[counter] = line;

    g_editFile >> g_item.Drive[counter];

    g_editFile.ignore();

    getline(g_editFile, line);

    g_item.Monitor[counter] = line;

    g_editFile >> g_item.Aud[counter];

    }

    g_outResultsFile.open("result.txt"); //Запись данных в файл согласно заданию

    do {

    system("CLS");

    cout << endl;

    for (int i = 0; i <= counter; i++)

    {

    cout << "ID: " << g_item.id[i] << ", Номер ПК: " << g_item.numPK[i] << ", Материнская плата: " << g_item.MB[i] << ", Процессор: "

    << g_item.CPU[i] << ", Видеокарта: " << g_item.VG[i] << ", ЖД: " << g_item.HDD[i] << ", Память: " << g_item.Memory[i]

    << ", Оптические носители: " << g_item.OptMedia[i] << ", Дисковод: " << g_item.Drive[i] << ", Монитор: " << g_item.Monitor[i]

    << ", Аудитория: " << g_item.Aud[i] << endl;

    }

    SetConsoleTextAttribute(g_hConsole, 6);

    cout << "\nЧто Вы хотите сделать теперь?: ";

    SetConsoleTextAttribute(g_hConsole, GREEN);

    cout << "\n1. Редактировать документ"

    "\n2. Сохранить"

    "\n3. Cформировать список ПК, находящихся в одной аудитории"

    "\n4. Выдать список ПК, память которых меньше 128 Мб"

    "\n5. Подсчитать количество компьютеров в каждой аудитории"

    "\n6. Определить самого распространённого производителя материнских плат"

    "\n0. Назад в главное меню" << endl;

    SetConsoleTextAttribute(g_hConsole, 6);

    cout << "Что Вы хотите сделать?: ";

    cin >> input;

    int kk = 0, max, m;

    string tmp, tmps;

    int tmpk;

    switch (input) {

    case 1:

    // Оператор ветвления для дальнейшей работы с файлом

    fileNameLPCSTR = fileName.c_str();

    editFile(fileNameLPCSTR);

    cout << "Файл открыт для редактирования! " "Не забудьте сохранить изменения в текстовом редакторе." << endl;

    break;

    case 2: g_inFile.close();

    break;

    case 3:

    cout << "Какая аудитория интересует: ";

    cin >> tmpk;

    g_outResultsFile << "\nПоиск компьютеров из аудитории №" << tmpk << endl;

    for (int i = 0; i <= counter; i++)

    if (tmpk == g_item.Aud[i]) {

    kk++;

    cout << "ID: " << g_item.id[i] << ", Номер ПК: " << g_item.numPK[i] << ", Мат. плата: " << g_item.MB[i] << ", Процессор: "

    << g_item.CPU[i] << ", Видеокарта: " << g_item.VG[i] << ", ЖД: " << g_item.HDD[i] << ", Память: " << g_item.Memory[i]

    << ", Опт. носители: " << g_item.OptMedia[i] << ", Дисковод: " << g_item.Drive[i] << ", Монитор: " << g_item.Monitor[i]

    << ", Аудитория: " << g_item.Aud[i] << endl;

    g_outResultsFile << "ID: " << g_item.id[i] << ", Номер ПК: " << g_item.numPK[i] << ", Мат. плата: " << g_item.MB[i] << ", Процессор: "

    << g_item.CPU[i] << ", Видеокарта: " << g_item.VG[i] << ", ЖД: " << g_item.HDD[i] << ", Память: " << g_item.Memory[i]

    << ", Опт. носители: " << g_item.OptMedia[i] << ", Дисковод: " << g_item.Drive[i] << ", Монитор: " << g_item.Monitor[i]

    << ", Аудитория: " << g_item.Aud[i] << endl;

    }

    if (kk == 0) {

    g_outResultsFile << "Такой аудитории на кафедре нет" << endl;

    cout << "Такой аудитории на кафедре нет" << endl;

    }

    break;

    case 4:

    g_outResultsFile << "\nПоиск ПК с обьемом памяти не более 128Мб" << endl;

    for (int i = 0; i <= counter; i++)

    if (g_item.Memory[i] <= 128) {

    kk++;

    cout << "ID: " << g_item.id[i] << ", Номер ПК: " << g_item.numPK[i] << ", Мат. плата: " << g_item.MB[i] << ", Процессор: "

    << g_item.CPU[i] << ", Видеокарта: " << g_item.VG[i] << ", ЖД: " << g_item.HDD[i] << ", Память: " << g_item.Memory[i]

    << ", Опт. носители: " << g_item.OptMedia[i] << ", Дисковод: " << g_item.Drive[i] << ", Монитор: " << g_item.Monitor[i]

    << ", Аудитория: " << g_item.Aud[i] << endl;

    g_outResultsFile << "ID: " << g_item.id[i] << ", Номер ПК: " << g_item.numPK[i] << ", Мат. плата: " << g_item.MB[i] << ", Процессор: "

    << g_item.CPU[i] << ", Видеокарта: " << g_item.VG[i] << ", ЖД: " << g_item.HDD[i] << ", Память: " << g_item.Memory[i]

    << ", Опт. носители: " << g_item.OptMedia[i] << ", Дисковод: " << g_item.Drive[i] << ", Монитор: " << g_item.Monitor[i]

    << ", Аудитория: " << g_item.Aud[i] << endl;

    }

    if (kk == 0) {

    g_outResultsFile << "Не найдено жёстких дисков с объёмом памяти менее 128Мб" << endl;

    cout << "Не найдено жёстких дисков с объёмом памяти менее 128Мб" << endl;

    }

    break;

    case 5:

    g_outResultsFile << "\nПодсчёт количества ПК в аудиториях" << endl;

    for (int j = 1; j <= 10; j++) {

    kk = 0;

    for (int i = 0; i <= counter; i++)

    if (g_item.Aud[i] == j) {

    kk++;

    }

    g_outResultsFile << "Аудитория №" << j << " = " << kk << endl;

    cout << "Аудитория №" << j << " = " << kk << endl;

    }

    break;

    case 6:

    max = 0;

    tmps = "";

    for (int i = 0; i <= counter; i++)

    {

    m = 0;

    tmp = g_item.MB[i].substr(0, g_item.MB[i].find(' '));

    for (int j = i + 1; j <= counter; j++)

    if (tmp == g_item.MB[j].substr(0, g_item.MB[j].find(' '))) m++;

    if (m > max) {

    max = m;

    tmps = tmp;

    }

    }

    g_outResultsFile << "\nСамый распространённый производитель материнских плат: " << tmps << endl;

    cout << "\nСамый распространённый производитель материнских плат: Asus\n";

    break;

    case 0: menu(fileName);

    break;

    default:

    SetConsoleTextAttribute(g_hConsole, RED);

    cout << "Некорректный ввод!" << endl;

    menu(fileName);

    }

    system("pause");

    } while (input != 0);

    menu(fileName);

    }

    else {

    SetConsoleTextAttribute(g_hConsole, RED);

    cout << "\n!!!Отсутствует текущий файл!!! \n!!!Создайте файл или вернитесь в главное меню!!!!" << endl << endl;

    system("pause");

    menu("N/A");

    }

    }

    void writeResults() { //Функция вывода данных текущего файла

    for (int i = 0; i <= entrySize; i++) {

    cout << "\nID: " << g_item.id[i] << endl;

    cout << "Номер ПК:" << g_item.numPK[i] << endl;

    cout << "Мат. плата:" << g_item.MB[i] << endl;

    cout << "Процессор:" << g_item.CPU[i] << endl;

    cout << "Видеокарта:" << g_item.VG[i] << endl;

    cout << "Жёсткий диск:" << g_item.HDD[i] << endl;

    cout << "Оптические носители:" << g_item.OptMedia[i] << endl;

    cout << "Дисковод:" << g_item.Drive[i] << endl;

    cout << "Монитор:" << g_item.Monitor[i] << endl;

    cout << "Аудитория:" << g_item.Aud[i] << endl;

    }

    }

    void editFile(LPCSTR fileName) { //Функция для открытия файла в одном из приложений ос Windows

    // LPCSTR: pointer to null terminated const string of char

    if (ShellExecuteA(NULL, NULL, fileName, NULL, NULL, SW_RESTORE) <= (HINSTANCE)32) {

    puts("Ошибка при попытке открыть файл.");

    }

    }

    void userManual(string fileName) {//Функция чтения файла "Руководство пользователя" и вывода содержимого в консоль

    cout << "\n";

    setlocale(LC_ALL, "Russian");

    SetConsoleTextAttribute(g_hConsole, RED);

    ifstream userManual("manual.txt");

    string line;

    SetConsoleTextAttribute(g_hConsole, RED);

    while (getline(userManual, line)) {

    cout << line << endl;

    }

    system("pause");

    userManual.close();

    menu(fileName);

    }

    Руководство пользователя


    РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

    1.Данная программа позволяет работать с файлами:

    создавать, открывать, редактировать.

    2. Для перехода к пунктам меню, выбирайте номера

    соответствующих пунктов (конец ввода- "Enter").

    3.Для вывода списков ПК, находящихся в одной

    аудитории, ПК с памятью менее 128 Мб, количества

    ПК в каждой аудитории и чтобы узнать самого

    распространённого производителя мат. плат-

    выберите пункт (3).

    Заключение


    Как итог, получен опыт работы с файлами в среде программирования на языке С++. Для выполнения задания были использованы знания по следующим разделам программирования: модульное программирование, рекурсивные функции, работа со структурами данных.

    Работа выполнена в соответствии с заданием. Открыты для себя новые возможности работы с Microsoft Visual Studio 2019. Приобретены навыки работы с текстовыми и бинарными файлами через созданное приложение, а также закреплены знания по курсу «Программирование на языке высоко уровня С++».

    Сделан вывод о трудоёмкости выборки данных из файла и о простоте использования консольного приложения для работы с пользователем.

    Список литературы


    1. Павловская Т. А. C/C++. Программирование на языке высокого уровня для магистров и бакалавров : учебник для студентов высших учебных заведений / Т. А. Павловская, 2011. - 460.

    2. Трофимов, В. В. Алгоритмизация и программирование : учебник для академического бакалавриата / В. В. Трофимов, Т. А. Павловская ; под ред. В. В. Трофимова. — М. : Издательство Юрайт, 2019. — 137 с. — (Серия : Бакалавр. Академический курс. Модуль.). — ISBN 978-5-534-07834-3. (https://biblio-online.ru/book/algoritmizaciya-i-programmirovanie-423824)

    3. Электронный учебник по программированию https://ravesli.com/uroki-cpp/

    4. Источник информации для заполнения данных структур https://procomputer.su/


    написать администратору сайта