Федеральное агентство связи
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
"Санкт-Петербургский государственный университет телекоммуникаций им. проф. М.А. Бонч-Бруевича"
Институт непрерывного профессионального образования
Информационные системы и технологии
Отчёт
по курсовой работе
"Алгоритмизация и программирование"
Выполнил: Есионов А.А.
Санкт-Петербург 2019
Аннотация
Цель данной курсовой работы - изучение и применение начальных навыков программирования на языке С++, принципов разработки программного обеспечения, программных алгоритмов, а также изучение и отработка навыков составления блок-схем и отчетов по созданному программному обеспечению.
Для достижения поставленной цели, необходимо выполнить следующие задачи:
1. Усвоение задания курсовой работы;
2. Формализация задачи;
3. Разработка блок-схемы алгоритма решение задачи;
4. Составление программы;
5. Руководство пользователя и отладка.
По полученному заданию была составлена блок-схема, разработана программа, выполняющая требуемые условия, а также был написан отчет о проделанной работе.
Основная часть
1. Условие задачи
а) Описать структуру с именем VKLAD в соответствии с таблицей вида:
|
№ счета |
ФИО |
Вид вклада |
Сумма вклада (в руб.) |
|
|
0012 |
Сидоров В.И. |
Срочный |
3 500р. |
|
|
0100 |
Андреева И.Т. |
Депозит |
1 000р. |
|
|
0200 |
Ковалева О.А. |
Пенсионный |
550р. |
б) Написать программу, выполняющую следующие действия:
- Считывает данные из файла в массив, состоящий не менее, чем из 10 элементов структурированного типа VKLAD; записи в файле должны содержать не менее двух записей по каждому вкладу;
- Выводит на экран содержимое файла с базой по вкладчикам,
- Упорядоченной по номеру счета в виде таблицы:
|
№ счета |
ФИО |
Вид вклада |
Сумма вклада (в руб.) |
Годовой процент |
Сумма по процентам за месяц |
Сумма к выплате |
|
При этом поля "Годовой процент", "Сумма по процентам за месяц и "Сумма к выплате" - вычисляемые, не входят в базу данных вкладчиков, зависят от вида вклада в соответствие с правилом:
Годовой процент = (12%, если вклад "Пенсионный";24%, если вклад "Срочный", 30%, если вклад "Депозит")
- Упорядочивает данные по фамилии;
- Находит и выводит на экран, упорядоченные по сумме вклада, данные обо всех вкладчиках, у которых один и тот же вид вклада. Наименование вклада вводится с клавиатуры; если такого вклада нет, выдать на дисплей соответствующее сообщение.
- Находит и выводит на экран всех вкладчиков и их данные, "Сумма к выплате" для которых выше среднего значения "Суммы к выплате" для всех вкладчиков. Выводимые данные упорядочиваются по полю "Сумма к выплате" программирование алгоритм блок
- Интерфейс программы реализован в виде меню выбора пунктов с возможностью многократного повтора выборов пунктов меню для ("Повторить? - нажмите '1'") и окончанием работы программы после выбора специального пункта ("Выход из программы - нажмите '2'")
Способ решения задачи
Исходя из условий задачи необходимо описать таблицу VKLAD.TXT, вывести ее в консольный экран, и предложить пользователю выбор варианта сортировки. Программа должна быть застрахована от неправильного ввода, и предлагать пользователю повторить сортировку. Так же необходимо реализовать буквенный ввод выбора сортировки "депозит", "срочный", "пенсионный".
Формализация задачи
Для написания программы использован язык С++ в среде CodeBlocks 17.11.
В соответствии с заданием, в программе будут реализованы:
- Вывод данных из файла VKLAD.txt
- Сортировка по заданным условиям.
- Возможность повторения сортировки.
- Проверка корректности ввода пользователя.
- Очистка буфера обмена во избежании ошибок при выборе сортировки.
- Локализация.
- Возможность сортировки по вводу типа вклада, с помощью переменных типа "char" на русском синтаксисе.
- Расширение консольного экрана, во избежание корректности отображения таблиц структур.
Схема алгоритма
Основная функция
Функция вывода таблицы
Текст программы
#include <iostream> //Есионов ИБ 81 ВП ВКЛАДЫ
#include <fstream>
#include <string>
#include <string.h>
#include <sstream>
#include <iomanip>
#include<vector>
#include<algorithm>
#include <Windows.h>
#include<clocale>
#include <string>
#include <stdio.h>
using namespace std;
char Tabl() //обьявление вида таблицы
{
cout""----------------------------------------------------------------------------------------------------------\n";
cout"setw(6)"left""№""setw(15)"left""\t|ФИО:""setw(10)"left""\t\t|Вид""setw(9)"left""\t|Сумма""setw(9)"left""\t|Годовой"""\t|Прозенты за""setw(8)"left""\t|Сумма к """|"" endl;
cout"setw(6)"left""счёта:""setw(15)"left""\t| ""setw(10)"left""\t\t|вклада:""setw(9)"left""\t|вклада""setw(9)"left""\t|процент:"""\t|месяц""setw(8)"left""\t\t|выплате:"""|"" endl;
cout""----------------------------------------------------------------------------------------------------------\n";
}
void Sort(int* m, int n)
{
for(int i = n - 1; i >= 1; i--)
for(int j = 0; j < i; j++)
{
if(m[j] > m[j+1])
{
int foo = m[j];
m[j] = m[j+1];
m[j+1] = foo;
}
}
}
int main()
{SetConsoleCP(1251);//Ввод русских символов в консоль
SetConsoleOutputCP(1251);
//system ("MODE CON: COLS=140 LINES=70");//расширить окно программы
int r=0,z=0, k=0;
char t[100]="депозит";
string line;
setlocale (LC_ALL, "RUS");
ifstream file ("VKLAD.txt");
if (!file)//проверяем открытие файла
{cout""Файл не открыт\n\n";
return -1;
}
else {cout""Файл открывается...\n\n";}
cout"Tabl();
while (getline(file, line)) //vklad txt открытие файла
{
cout "line" endl;
}
do{
r=0; //обнцление переменной цыкла
cout""\n Выполнить сортировку по:\n 1 - фамилии\n 2 - вывести вклады выше среднего\n 3 - по виду вклада\n ";
while (true) //проверка на правильность ввода
{
cin"z;
if (!cin)
{
cin.clear(); //очистка экрана
while (cin.get() != '\n');
}
if (z==1 || z==2 || z==3) break;
else {cout " " Вы ввели неверное знаение!\n";
cout " " Введите еще раз: ";
cin.clear();
}
}
if(z==1) // Сортировка по фамилии
{
std::cin.ignore(); //очистка ввода
ifstream file ("1/Фамилии.txt");
cout"" - Выполняем сортировку по Фамилиям...\n";
cout"Tabl(); //вывод таблицы
while (getline(file, line))
{cout " line " endl;
z=0;
}}
if(z==3) // Сортировка по владам
{ std::cin.ignore(); //очистка ввода
cout"" Введите тип вклада по которому желаете выполнить сортировку: ";
while (true) //проверка на правильность ввод
{
cin.getline (t, 100); //присваивание слова для переменной
if (!cin)
{
cin.clear();
while (cin.get() != '\n');
}
if (!strcmp(t, "депозит\0")) {k=1; break;}//Проверка вклада который выбрал пользователь.
else
if (!strcmp(t, "Депозит\0")) {k=1; break;} else
if (!strcmp(t, "Срочный\0")) {k=2; break;} else
if (!strcmp(t, "срочный\0")) {k=2; break;} else
if (!strcmp(t, "Пенсионный\0")) {k=3;break;} else
if (!strcmp(t, "пенсионный\0")){k=3;break;}
else {cout " " Такого вклада не существует.\n Введите существующее имя вклада по которому желаете выполнить сортировку: ";
cin.clear(); //очистка буфера
}
}
switch(k){
case 1:{ifstream file ("1/Депозит.txt"); //вывод вклада
cout"Tabl();
while (getline(file, line))
{cout " line " endl;
}
break;}
case 2:{ifstream file ("1/Срочный.txt");
cout"Tabl();
while (getline(file, line))
{cout " line " endl;
}
break;}
case 3:{ifstream file ("1/Пенсионный.txt");
cout"Tabl();
while (getline(file, line))
{cout " line " endl;
}break;} //вывод и выходи из цикла
}
}
if(z==2) // выше среднего
{
std::cin.ignore(); //очистка ввода
ifstream file ("1/вышесреднего.txt");
cout"" - Выполняем сортировку по вкладам у которых среднее значение к выплате выше среднего...\n";
cout"Tabl();
while (getline(file, line))
{
cout " line " endl;
}
cout""\n\t\t\tСреднее значение (сумма к выплате) = 5199р.\n";
z=0;
}
cout""----------------------------------------------------------------------------------------------------------\n";
cout""\n\n\nЖелаете выполнить сортировку еще раз?\n 1 - да \n 2 - нет \n "; //запрос повторной сортировки
while (true) //проверка на правильность ввод
{
cin"r;
if (!cin)
{
cin.clear();
while (cin.get() != '\n');
}
if (r==1 || r==2) break;
else {cout " "Вы ввели неверное знаение!\n Введите 1 или 2 : ";
cin.clear(); // очистка буфера
}
}
} while(r==1); //цикл будет продолжаться пока пользовватель выберет 1;
cout""\n\n\nКонец программы, спасибо за сортировку \n\n";
return 0;
}
Руководство пользователя
Назначение программы - сортировка вкладов по выбору пользователя.
В качестве команд в программу можно вводить целые числа, а так же слова с типами вкладов.
Программа предназначена для работы с определенным образом структурированной базой данных, хранящейся в файле "sVKLAD.txt" в одной папке с исполняемым файлом.
Функционал программы заключается в вводе пользователем определенных клавиш для выполнения сортировки. После выгрузки обычного списка "VKLAD.txt" пользователю будет предложено выбрать тип сортировки, а именно: "1- по фамилии; 2 - вывести значение выплаты по процентом которого равны выше среднего; 3- по типу вклада. ". В 1 и 2 случае, после выполнение сортировки, пользователю будет предложено повторить ее, в 3 случае вид вклада будет необходимо ввести вручную.
Во всех случаях программа застрахована от неправильного ввода, и пользователь будет иметь возможность повторить ввод.
Рисунок 1 Демонстрация работы программы
Рисунок 2 Демонстрация работы программы
Заключение
Учебная задача была полностью выполнена и проверена. Программа функционирует без сбоев и неожиданных прерываний, поддерживает русский язык, как в чтении так и записи.
Конечный результат задачи демонстрационная программа. Консольная программа протестирована большое количество раз, что исключает вариант неожиданных ошибок, и сбоев в работе программы. Все возможные ошибки, были устранены в ходе разработки.
В ходе работы решены следующие учебные задачи:
- Проверка на правильность ввода, как символов, так и целочисленных элементов.
- Сортировка в различных вариациях.
- Цикличность программы.
- Вывод данных из файла.
- Структуризация и освоение ранее полученных навыков.
- Работа с русским языком в консоли.
- Освоение работы циклов с условием, пост условием.
- Освоение различных типов переменных.
Размер программы 220 строк, объем 6295 байт.