Курсовая_работа_вариант_№36_Шишкин_М_И_ЭВМбз_21_1 (1). Пояснительная записка к курсовой работе по дисциплине Программирование 036. 00. 00 Пз
Скачать 1.03 Mb.
|
Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования ИРКУТСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Институт информационных технологий и анализа данных Допускаю к защите Руководитель А.Б. Столбов подпись, И.О. Фамилия Создание приложения для работы с файлом Наименование темы Пояснительная записка к курсовой работе по дисциплине «Программирование» 1.036.00.00 ПЗ
Курсовая работа защищена с оценкой ___________ ______________ Иркутск 2022г. Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования ИРКУТСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ По курсу «Программирование»
Исходные данные: (Обеспечение персональными компьютерами кафедры АС фиксируется в файле со следующими сведениями: название (номер) ПК, материнская плата, процессор, видеокарта, жесткий диск, память, оптические носители, дисковод, монитор, аудитория. Написать программу, позволяющую сформировать список ПК, находящихся в одной аудитории. Выдать список ПК, память которых меньше 128Мб. Подсчитать количество компьютеров в каждой аудитории. Определить самого распространенного производителя материнских плат.) Рекомендуемая литература: Павловская Т.А. C/C++. Программирование на языке высокого уровня / Т. А. Павловская. — СПб.: Питер, 2003. — 461 с: ил. Иванов В. Б. Прикладное программирование на C/C++: с нуля до мультимедийных и сетевых приложений. М.: «СОЛОН-Пресс». 2008. – 240 с. [Электронный ресурс]. – Режим доступа: http://e.lanbook.com/books/ element.php&pl1_id=13740 Хохлов Д.Г. Методы программирования на языке С: практикум Ч.1. «Бином. Лаборатория знаний». 2014. – 336 с. [Электронный ресурс]. – Режим доступа: http://e.lanbook.com/books/element.php ?pl1_id=50555 Хохлов Д.Г. Методы программирования на языке С: практикум Ч.2. «Бином. Лаборатория знаний». 2014. – 377 с. [Электронный ресурс]. – Режим доступа: http://e.lanbook.com/books/element.php ?pl1_id=50555 Иванов В. Б. Прикладное программирование на C/C++: с нуля до мультимедийных и сетевых приложений. М.: «СОЛОН-Пресс». 2008. – 240 с. [Электронный ресурс]. – Режим доступа: http://e.lanbook.com/books/ element.php&pl1_id=13740 Липман С., Лажойе Ж. Язык программирования С++. Полное руководство. СПб.: Невский диалект, М.: ДМК Пресс. 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 Введение и постановка задачиНеобходимо разработать программу, работающую с бинарными или текстовыми файлами, в файл записывается структура характеристик персональных компьютеров: название (номер) ПК, материнская плата, процессор, видеокарта, жёсткий диск, память, оптические носители, дисковод, монитор, аудитория. Программа должна: Создавать новые файлы и записывать в них введённые данные; Открывать ранее созданные файлы и записывать в них введённые данные; Позволять редактировать ранее введённые записи и добавлять новые; Осуществлять проверку сохранения сведений в файле при выходе из программы; Выводить все данные, содержащиеся в файле; Формировать список ПК, находящихся в одной аудитории; Формировать список из ПК, память которых меньше 128 Мб; Производить подсчёт ПК в каждой аудитории; Определять самого распространённого производителя материнских плат; Осуществлять проверку корректности введённых данных; Использовать главное и контекстное меню с указанием клавиш альтернативного доступа. Содержать разделы «О программе», «Задание», «Справка»; Для написания программы мною была использована следующая интегрированная среда разработки: Microsoft Visual Studio 2019. Программа написана на языке программирования высокого уровня С++. Таблица спецификаций глобальных переменных и переменных модуля main()Таблица 1 Таблица спецификации глобальных переменных и переменных модуля main()
Схема иерархии модулейРисунок 1 Иерархия модулей Спецификация функцийТаблица 2 Спецификация внешних модулей
Алгоритмы функцийГлавная функция mainПодключаем русскоязычную раскладку Вызов функции menu Функция menuВывод меню в консоль Запрашиваем у пользователя ввод (caseInput) Проверка корректности ввода Если (caseInput) не целочисленная переменная, вывод сообщения об ошибке, попытка повторного ввода Если (caseInput)=1: Вывод текста в консоль Возврат в меню при нажатии клавиши (system(“pause”)) Ecли (caseInput)=2: Вызов функции manageFile Если (caseInput)=3: Вызов функции outputFile Если (caseInput)=4: Вызов функции userManual Если (caseInput)=5: Вызов функции writeResult Пауза до нажатия клавиши Возврат в menu Если (caseInput)=6: Вывод текста сообщения в консоль Пауза до нажатия клавиши Возврат в menu Если (caseInput)=0: Выход из программы Сохранение данных Освобождение памяти Закрытие текущего файла Если (caseInput) – некорректное значение Вывод сообщения об ошибке 11.2 Возврат в menu Функция manageFileОчистка пространства консоли Вывод второстепенного меню Запрос ввода пользователя (input) Если (input)=1: Вызов функции createFile Если (input)=2: Вызов функции openFile Если (input)=3 Вызов функции menu() Если (input) некорректное значение: Вывод сообщения об ошибке Вызов функции menu() Функция createFileОчистка пространства консоли (system(“CLS”) Обозначение переменных для ввода данных в файл Запрос ввода пользователем имени файла (fileName) Создание файла с заданным именем (fileName) Если (fileName) уже существует: Вывод сообщения об ошибке Рекурсия функции createFile Открытие файла (fileName) Ввод структуры данных в файл пока переменная aChoise=true Иначе: сохранить введённые изменения Закрыть файл Вызов функции menu(fileName) Функция openFileПроверка на наличие открытого файла Если найден открытый файл, то: Закрыть файл Очистка пространства консоли Запрос на ввод пользователем имени файла (string filename) Открытие файла Если (string filename) не найден Вывод сообщения об ошибке Пауза до нажатия клавиши system(“pause”) Рекурсия функции Вывод сообщения о открытии файла Пауза до нажатия клавиши system (“pause”) Вызов функции menu() Функция outputFileОчистка пространства консоли Если найден открытый файл Вывод сообщения пользователю: «Открыт файл:» Пока файл не закончится (!g_editFile.eof()) 3.1 Запись данных файла в массив Открыть файл для записи результата «result.txt» Запрос на ввод пользователем пункта меню (input) Пока (input)!=0: Если (input)=1: Вызов функции editFile Вывод сообщения об открытии файла Если (input)=2: Сохранение данных и закрытие файла (g_inFile.close) Если (input)=3 6.3.1Запрос на ввод пользователем номера аудитории (tmpk) 6.3.2 Если (tmpk)=g_item.Aud[i] (массив хранящий номера аудиторий),то Вывод структуры данных в консоль, kk++ Если kk=0 Запись в файл и вывод на экран сообщения Если (tmpk)=4: Вывод на экран и запись в файл сообщения Если элемент массива g_item.Memory[i]<128 Вывод структуры данных в консоль, kk++ Если kk=0 Запись в файл и вывод на экран сообщения Если (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, то Инкремент kk Вывод j < Если (tmpk)=6: Инициализируем max=0, tmps=” ” Для i<=counter Присваиваем tmp=g_item.MB[i]. (от 0 до пробела) Для j=i+1; j<=counter Если tmp=g_item.MB[i] Инкремент m Если m>max max=m tmps=tmp Вывод tmps Если (tmpk)=0: Функция menu Иначе вывод msg (если не найден открытый файл) 7.1 Функция menu Функция writeResultsДля i=0; i<=entrySize Вывод 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.OptMedia[i] Вывод g_item.Drive[i] Вывод g_item.Monitor[i] Вывод g_item.Aud[i] Функция editFileЕсли ShellExecute(NULL, NULL, filename, NULL, NULL, SW_RESTORE) (Невозможно открыть файл или же файл не подходит по формату) Вывод сообщения об ошибке Функция userManualЧтение данных из файла filename Объявление строковой переменной line Пока (getline(userManual, line)) Вывод< Пауза до нажатия клавиши system(“pause”) Функция menu Таблица тестов
Результаты тестирования и работы программыРисунок 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 #include #include #include /* 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. Приобретены навыки работы с текстовыми и бинарными файлами через созданное приложение, а также закреплены знания по курсу «Программирование на языке высоко уровня С++». Сделан вывод о трудоёмкости выборки данных из файла и о простоте использования консольного приложения для работы с пользователем. Список литературыПавловская Т. А. C/C++. Программирование на языке высокого уровня для магистров и бакалавров : учебник для студентов высших учебных заведений / Т. А. Павловская, 2011. - 460. Трофимов, В. В. Алгоритмизация и программирование : учебник для академического бакалавриата / В. В. Трофимов, Т. А. Павловская ; под ред. В. В. Трофимова. — М. : Издательство Юрайт, 2019. — 137 с. — (Серия : Бакалавр. Академический курс. Модуль.). — ISBN 978-5-534-07834-3. (https://biblio-online.ru/book/algoritmizaciya-i-programmirovanie-423824) Электронный учебник по программированию https://ravesli.com/uroki-cpp/ Источник информации для заполнения данных структур https://procomputer.su/ |