Анализ и разработка программного обеспечения — КиберПедия 

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Анализ и разработка программного обеспечения

2022-10-05 20
Анализ и разработка программного обеспечения 0.00 из 5.00 0 оценок
Заказать работу

АННОТАЦИЯ

 

Данная работа выполнена на тему «Разработка программы учета товаров на складе».

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

Во втором разделе произведен анализ и разработка программного обеспечения. Проведен анализ предметной области и формулирование функциональных требований. Выполнена разработка структуры программы и алгоритмов работы модулей программы. Продемонстрировано описание программного кода.

В третьем разделе показана демонстрация работы. Дано руководство пользователя.

Объем пояснительной записки составляет 22 листа и содержит 11 рисунков, 13 источников литературы, 3 приложения.

 

 


СОДЕРЖАНИЕ

 

 

Введение. 4

1 Структура программы C++. 5

2 Анализ и разработка программного обеспечения. 9

2.1 Анализ предметной области и формулирование функциональных требований 9

2.2 Разработка структуры программы и алгоритмов работы модулей программы 9

2.3 Описание программного кода. 12

3 Демонстрация работы.. 14

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

3.2. Тестирование программы.. 18

Заключение. 20

Список использованных источников. 21

Приложение АБлок-схемы алгоритмов. 22

Приложение БЛистинг программного кода. 25

Приложение ВПрезентация разработанного ПО.. 36

 

 

 


ВВЕДЕНИЕ

 

С++ - это компилируемый, высокоуровневый язык программирования. Может использоваться в большинстве сфер применения. Предназначен для разработки разнообразных приложений. На сегодня – это один из популярнейших и известнейших языков[1].

С выходом C++ в мире появилось ряд, ныне общераспространённых, понятий:

- инициация классов с объектами;

- принцип наследования в ООП;

- выгрузка и удаление функций из памяти;

- создание виртуальных функций;

- система исключений и многое другое.

С++ относится к компилируемым языкам, то есть компилятор изменяет код C++, преображая его в машинный с помощью предустановленных инструкций. Все платформы отличаются некоторыми особенностями, из-за чего нельзя взять и перенести программу с одной на другую платформу. Точнее, перенести можно, но она там не запустится. При этом исходный код приложения преимущественно переносится. Единственное исключение – использование специфических возможностей конкретной ОС[2].

У С++ есть компиляторы и инструменты для работы с кодом на большинстве известных платформ. Это позволяет скомпилировать исходники под любую платформу. С++ поддерживает написание программ в стиле ООП, чего не умеет Си. В этом случае приложение становится лишь набором классов, объектов, которые способны взаимодействовать с другими элементами кода. Это помогает в разработке крупных приложений.

Для написания программы на C++ обязателен компилятор, который преображает изначальный код в подходящий к исполнению в файле. Сегодня компиляторов неисчислимое количество. Они различаются по массе параметров, в том числе по способу реализации стандартов. На этапе выбора компилятора лучше выбирать те, что постоянно поддерживаются и обновляются. Для работы с C++ необходимо установить среду разработки. Среди самых популярных сред разработки можно отметить такие, как: Visual C++, Xcode, GCC, Intel C++ Compiler, Embarcadero (Borland) C++ Builder[3].

Целью данной курсовой работы является разработка программы учета товаров на складе. Программа предоставляет сведения о товарах, имеющихся на складе: наименование товара; количество единиц товара; цена единицы товара; дата поступления товара на склад. Вывести в алфавитном порядке список товаров, хранящихся более x месяцев, стоимость которых превышает y рублей (x, y вводятся с клавиатуры).Реализована авторизация для входа в систему, функционал администратора и функционал пользователя, поиск, сортировка.В программе используются функции, которые предназначены, в первую очередь, для сокращения объема исходного кода.


1 СТРУКТУРА ПРОГРАММЫ C++

 

Программа на языке С/С++ состоит из: директив процессора, описаний, функций. Главная функция носит имя main и должна быть обязательно. Общую структуру программы на языке С/С++ можно представить следующим образом:

директивы препроцессора //1

описание глобальных переменных //2

тип_результата main (параметры) //3

{

тело главной функции

}

тип_результата F1 (параметры 1) {

тело функции F1;

}

тип_результата F2 (параметры 2) {

тело функции F2;

}

тип_результата FN (параметры N) {

телофункции FN;

}

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

Функция состоит из заголовка и тела функции.

Заголовок состоит из:

1 Типа результата, возвращаемого функцией;

2 Имени функции;

3 Списка параметров, необходимых для выполнения функции.

Тело функции заключается в операторные скобки {}, и содержит описание локальных данных и операторы функции.

тип_результата имя_функции (параметры)

{

описание данных;

оператор1;

оператор2;

оператор3;

операторN;

}

где, тип_результата – это тип того значения, которое функция должна вычислить (если функция не должна возвращать значение, указывается тип void); имя_функции – имя, с которым можно обращаться к этой функции; параметры – список её аргументов (может отсутствовать). Точка с запятой (;) является разделителем между описаниями и операторами[4].

Директивы процессора

Понятие препроцессора является одним из ключевых в языке С++. Препроцессор – это программа, действующая как фильтр на этапе компиляции. Исходная программа => Препроцессор => Расширенная исходная программа => Компилятор. Перед тем, как попасть на вход компилятора, исходная программа проходит через препроцессор.Основному тексту программы предшествуют директивы препроцессора (preprocessor directive), которые начинаются с символа решётки #, не являются выражением языка С++ (и потому не заканчивается точкой с запятой).Команды (директивы) препроцессора представляют собой инструкции, записанные в исходном тексте программы, используемые для того, чтобы облегчить модификацию программ и сделать их независимыми от особенностей различных реализаций компилятора[5].

Например:

#include<имя_файла>

Директивы могут быть записаны в любом месте исходного файла, но их действие распространяется только от точки программы, в которой они записаны, до конца исходного файла. Файлы, которые появляются в директивах, обычно заканчиваются на.h, что означает файл заголовков (header file). Файлы заголовков содержат объявления констант, переменных и функций, необходимы для работы программы.

#include <stdio.h> /*функции стандартного ввода-вывода*/

#include <conio.h> /*функции консольного ввода-вывода*/

#include <math.h> /*стандартные математические функции*/

Директива #include

Директива препроцессора #include позволяет включать в текст программы, написанной программистом, тексты других программ.

Эта директив имеет две формы записи:

#include <имя_включаемого_файла>

#include “имя_включаемого_файла”

В случае, когда имя_включаемого_файла (файла включений) записывается в угловых кавычках, то поиск этого файла осуществляется в стандартных системных каталогах (каталоге подключаемых файлов (include directory), то есть в месте, где компьютерная система хранит все доступные для использования файлы заголовков)[5].

Например:

#include <stdio.h> //фрагмент на С

или

#include <iostream> //фрагмент на С++

Если же имя_включаемого_файла указано в кавычках, то сначала поиск осуществляется в текущем каталоге и лишь затем в системных.

#include “file2.h” //Файл, содержащий объявления переменных и типов,

//созданных программистом и используемых в программе

#include “file2.cpp” //Файл, содержащий, например, объявления или описания функций, //используемых в текущем модуле(файле)

Имя_включаемого_файла может также содержать полный путь для его поиска, что наблюдается редко, так как это предполагает жёсткую связь программы с конфигурацией файловой системы конкретной ЭВМ.

Пример:

#include <stdio.h> /* функции стандартного ввода-вывода */

#include <conio.h /* функции консольного ввода-вывода */

#include <math.h>/* стандартные математические функции */

#include<iostream> // потоковыйввод/вывод

Директивы #define, #undef

Директива препроцессора #define позволяет заменять все вхождения указанного идентификатора какой-то определенной последовательностью символов. Удобно использовать для объявления и определения констант, когда одно и то же значение (например, длина массива) используется в разных местах программы[6].

#define идентификатор последовательность символов

Например:

#define lin_arr 40

void main(void) {

int arr[lin_arr], i;

for (i=0; i<lin_arr; i++)

arr[i]=i+1;

}

В результате препроцессорной обработки получится сле­дующий текст программы:

void main(void)

{

int arr[40], i;

for (i=0; i<40; i++)

arr[i]=i+1;

}

Изменив значение lin_arr на любое другое только в директиве #define, автоматически изменятся и длина массива, и условие окончания цикла.

Также удобно использовать директиву #define для опре­деления и описания функций (func - функция, выбирающая ми­нимальное из двух чисел):

/* Фрагмент на С */            // Изменения на C++

#include <stdio.h>      //#include <iostream>

#define func(a,b) a<b? a: b

void main(void)

{

...

printf("%f",func(9,4.5)); //cout<<func(9,4.5);

}

На экран будет выведено: 4.5

Директива #undef отменяет действие идентификаторов, определенных директивой #define:

#undefидентификатор

Например:

#definesd

s = 10;

#undefs

s = 5;

После препроцессорной обработки фрагмент будет иметь вид:

d=10;

s = 5;

 


Описание программного кода

 

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

Программно представлены следующие структуры:

struct Item           // структура (список) товаров

{

string name;   // Наименование

int kolichestvo; // Количество товаров на складе

float cena;           // Цена

string date;               // Дата поступления

};

 

 

Рисунок 2.3 – Программная реализация структур

В программе реализованы следующие функции:

Функция авторизации логин "tanya" пароль "tanya"void authorization();

Функция меню администратора для работы с даннымиvoid menu_admin();

Функция меню пользователя для работы с даннымиvoid menu_user();

Функция считывания информации из файла в массив памятиvoid read_file_items(Item* items_arr, int& items_num);

Функция для отображения информации на экранеvoid show_items(Item* items_arr, int& items_num);

Функция для добавления записиvoid add_item(Item* items_arr, int& items_num);

Функция изменения записиvoid edit_item(Item* items_arr, int& items_num);

Функция для удаления записиvoid dell_item(Item* items_arr, int& items_num);

Функция для перезаписи файла void write_file_items(Item* items_arr, int& items_num);

Функция поиска записейvoid poisk_items(Item* items_arr, int& items_num);

Функция сортировки записей по наименованию void sort_name(Item* items_arr, int& items_num);

Функция сортировки записей по датеvoid sort_date(Item* items_arr, int& items_num);

Функция сортировки записей по ценеvoid sort_cena(Item* items_arr, int& items_num).

 

Листинг начала программного кода:

 

#include<iostream>

#include<fstream>

#include<iomanip>

 

usingnamespace std;

 

string file_items = "sklad.txt";

string info =

"\nПрограмма выполнена по варианту #1"

"\nРазработка программы учета товаров на складе"

"\n\nРазработчик - Авдейчик Татьяна Александровна"

"\nУО БГАС, гр СТ861, 2020г\n\n";

 

intconst max_items = 10;

Полный код программы показан в приложении Б.

ДЕМОНСТРАЦИЯ РАБОТЫ

 

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

 

Первым этапом работы программы является авторизация – предоставление прав доступа. В рамках данного этапа считываются данные из файла с учетными записями пользователей следующего вида: login; password; role. После ввода пользователем своих персональных данных и сверки со считанной из файла информацией необходимо предусмотреть возможность входа в качестве администратора или в качестве пользователя. Рисунок 3.1 – 3.2

                       

 

Рисунок 3.1 – Авторизация пользователя

 

 

Рисунок 3.2 – Авторизация администратора

Если файл с учетными записями пользователей не существует, то он создается программно и записываются учетные данные администратора.Если роли  пользователя будет - администратор, то программа выведет на экран все функции администратора, если роль будет другой, тогда выведутся функции для работы с пользователями.

Вторым этапом работы программы является собственно работа с данными, которая становится доступной только после прохождения авторизации. Данные хранятся в отдельном файле. После входа в систему появится стартовое меню администратора для работы. Для работы с данными предусмотрены два функциональных модуля: модуль администратора и модуль пользователя.

Модуль администратора включает следующие подмодули (с указанием функциональных возможностей):

1. Управление учетными записями пользователей:

- просмотр всех учетных записей;

- добавление новой учетной записи;

- редактирование учетной записи;

- удаление учетной записи.

2. Работа с файлом данных:

- создание файла;

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

- удаление файла.

3. Работа с данными:

а) режим редактирования:

- просмотр всех данных;

- добавление новой записи;

- удаление записи;

- редактирование записи;

б) режим обработки данных:

- выполнение задания;

- поиск данных;

- сортировка.

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

Работа с меню, добавление нового вида товара на склад показано на рисунке 3.3.

 

 

Рисунок 3.3 – Работа с меню, добавление нового вида товара на склад

 

Работа с данными, упорядочивание записей показано на рисунке 3.4 – 3.6

 

 

Рисунок 3.4 – Работа с данными, упорядочивание записей

 

Сортировка — одна из самых распространённых подзадач, часто встречающаяся в задачах всех уровней сложности. Существует множество алгоритмов, решающих её - алгоритмов сортировки. В стандартных библиотеках большинства современных языков программирования уже содержится эффективный алгоритм сортировки. Несмотря на это, принцип работы и сложность эффективных алгоритмов реализациимогут быть реализованы по-разному.Сортировка пузырьком — один из самых известных алгоритмов сортировки. Здесь нужно последовательно сравнивать значения соседних элементов и менять числа местами, если предыдущее оказывается больше последующего. Таким образом,  элементы с большими значениями оказываются в конце списка, а с меньшими остаются в начале. Считается, наэтом алгоритме на основаны многие другие методы [8].

Предусмотрена возможность упорядочивания (сортировки) записей по определенным критериям. Выполняется поиск товаров по наименованию, указанной дате и ценовым параметрам.

 

 

Рисунок 3.5 – Работа с данными,

упорядочивание записей по наименованию, дате, цене

 

Работа со списком товаров показана на рисунке 3.6.Оно содержит данные всех наименований, возможность добавления наименования, изменение, удаление, возможность его упорядочивания. Путем выбора пункта меню выполняется необходимый процесс обращения программе.

Программно, путем выбора нужного пункта меню,  реализована возможность удаления товара из списка.

 

 

Рисунок 3.6 – Работа со списком товаров. Удаление товара

 

 

Тестирование программы

 

Тестирование программного обеспечения — процесс определения работоспособности программного обеспечение согласно целям разработки.

Все существующие методы тестирования действуют в рамках формального процесса проверки исследуемого или разрабатываемого ПО. Такой процесс формальной проверки или верификации может доказать, что дефекты отсутствуют с точки зрения используемого метода. (То есть, нет никакой возможности точно установить или гарантировать отсутствие дефектов в программном продукте с учётом человеческого фактора, присутствующего на всех этапах жизненного цикла ПО)[9].

Существует множество подходов к решению задачи тестирования и верификации ПО.Следует отметить исключительные ситуации, обработанные в программе.

Качество (программных средств) можно определить как совокупную характеристику исследуемого ПО с учётом следующих составляющих:

- Надёжность

- Сопровождаемость

- Практичность

- Эффективность

- Мобильность

- Функциональность

Если программа существует в полном объеме, файлы найдены и подключены – можно авторизоваться. При не нахождении файлов – выход из программы. При введении неверного логина или пароля, программа укажет на ошибку ввода. Это  представлено на рисунке 3.7.

 

 

Рисунок 3.7 – Сообщение о неверном вводе логина или пароля.

Авторизация

 

Проверка работы с пользователем представлена на рисунке 3.8.Показанпример поиска в случае несоответствия вводимым критериям поиска.

 

 

Рисунок 3.8 – Проверка на вводимые значения поиска


ЗАКЛЮЧЕНИЕ

 

В ходе выполнения курсовой работы разработана программаучета товаров на складе. Программа предоставляет сведения о товарах, имеющихся на складе: наименование товара; количество единиц товара; цена единицы товара; дата поступления товара на склад.Выведен в алфавитном порядке список товаров, хранящихся более x месяцев, стоимость которых превышает y рублей (x, y вводятся с клавиатуры).Программа выполнена на языке С++. На уровне конструирования использованы технологии нисходящего проектирования и принципов методологии структурного программирования. Результат этапа конструирования представляется в форме графических блок-схем алгоритмов. На уровне программирования реализованы графические блок-схемы алгоритмов на языке С++ с соблюдением правил соглашения о коде. Результат этапа программирования может быть представлен в форме проекта в среде разработки приложений на языке С++ - Microsoft Visual Studio.

Код  работы уникален. Об уникальности курсовой работы свидетельствуют имена переменных, констант, функций; комментарии в коде; выполнена проработка исключительных ситуаций; реализация дополнительных функциональных возможностей.

Выполнено тестирование ПО, которое имитирует фактическое использование системы: позволяет своевременно выявить системные ошибки.


ПРИЛОЖЕНИЕ А

(обязательное)

 

Блок-схемы алгоритмов

 

 

Рисунок А.1 – Алгоритм функции для считывания информации из файла в массив памяти

 

 

 

Рисунок А.2 – Алгоритм функции для добавления записи

 

Рисунок А.3 –Алгоритм функциисортировки записей по наименованию

ПРИЛОЖЕНИЕ Б

(обязательное)

 

Листинг программного кода

 

 

/* 1 Разработка программы учета товаров на складе

Программа предоставляет сведения о товарах, имеющихся на складе:

Количество товара;

количество единиц товара;

цена единицы товара;

дата поступления товара на склад.

 

Вывести в алфавитном порядке список товаров, хранящихся более x месяцев, стоимость

которых превышает y рублей (x, y вводятся с клавиатуры).

 

Мыло            30 2 2020.02.10

Пластырь      30 2 2020.02.17

Маска             80 2 2020.03.15

Антисептик   40 5 2020.03.15

Перчатки      50 4.5 2020.03.17

Гречка           150 1 2020.03.17

Бумага           100 1.5 2020.03.20

Сахар             120 1.2 2020.03.20

Кофе        20 8.3 2020.03.22

 

*/

 

#include<iostream>

#include<fstream>

#include<iomanip>

 

usingnamespace std;

 

string file_items = "sklad.txt";

string info =

"\nПрограмма выполнена по варианту #1"

"\nРазработка программы учета товаров на складе"

"\n\nРазработчик - Авдейчик Татьяна Александровна"

"\nУО БГАС, гр СТ861, 2020г\n\n";

 

intconst max_items = 10;

 

struct Item    // структура (список) товаров

{

string name;   // Наименование

int kolichestvo; // Количество товаров на складе

float cena;    // Цена

string date;   // Дата поступления

};

 

// Функция авторизации логин "tanya" пароль "tanya"

void authorization();

// Функция меню администратора для работы с данными

void menu_admin();

// Функция меню пользователя для работы с данными

void menu_user();

// Функция считывания информации из файла в массив памяти

void read_file_items(Item* items_arr, int& items_num);

// Функция для отображения информации на экране

void show_items(Item* items_arr, int& items_num);

// Функция для добавления записи

void add_item(Item* items_arr, int& items_num);

// Функция изменения записи

void edit_item(Item* items_arr, int& items_num);

// Функция для удаления записи

void dell_item(Item* items_arr, int& items_num);

// Функция для перезаписи файла

void write_file_items(Item* items_arr, int& items_num);

 

// Функция поиска записей

void poisk_items(Item* items_arr, int& items_num);

// Функция сортировки записей по наименованию

void sort_name(Item* items_arr, int& items_num);

// Функция сортировки записей по дате

void sort_date(Item* items_arr, int& items_num);

// Функция сортировки записей по цене

void sort_cena(Item* items_arr, int& items_num);

 

int main()

{

system("chcp 1251");

setlocale(LC_ALL, "Russian");

cout << info << endl;

Item items_arr[max_items];

int items_num = 0;

//menu_admin();

authorization();

return0;

}

// Функция авторизации логин "tanya" пароль "tanya"

void authorization()

{

string login;

string pass;

cout <<">>> Авторизация пользователя"<< endl;

cout <<"Введите логин: ";

cin >> login;

cout <<"Введите пароль: ";

cin >> pass;

if (login == "tanya"&& pass == "tanya")

{

   cout <<"Добро пожаловать в систему. \nВы авторизованы как администратор!\n"<< endl;

   menu_admin();

}

elseif (login == "user"&& pass == "user")

{

   cout <<"Добро пожаловать в систему. \nВы авторизованы как пользователь!\n"<< endl;

   menu_user();

}

else

{

   cout <<"Неверное имя или пароль"<< endl;

   main();

}

}

 

// Функция меню администратора для работы с данными

void menu_admin()

{

Item items_arr[max_items];

int items_num = 0;

char myChoice;

cout <<">>> Меню для администратора <<<"<< endl;

cout <<"1: Показать список товаров"<< endl;

cout <<"2: Добавить запись"<< endl;

cout <<"3: Изменить запись"<< endl;

cout <<"4: Удалить запись"<< endl;

cout <<"5: Поиск по ИЗ"<< endl;

cout <<"6: Отсортировать по наименованию"<< endl;

cout <<"7: Отсортировать по дате поступления на склад"<< endl;

cout <<"8: Отсортировать по цене"<< endl;

cout <<"9: Назад к авторизации"<< endl;

cout <<"0: Выход из программы"<< endl;

tryAgain_adm:

cout <<"\nВыберите пункт меню: ";

cin >> myChoice;

switch (myChoice)

{

case'1':

   read_file_items(items_arr, items_num);

   show_items(items_arr, items_num);

break;

case'2':

   add_item(items_arr, items_num);

break;

case'3':

   edit_item(items_arr, items_num);

break;

case'4':

   dell_item(items_arr, items_num);

break;

case'5':

   poisk_items(items_arr, items_num);

break;

case'6':

   sort_name(items_arr, items_num);

   show_items(items_arr, items_num);

break;

case'7':

   sort_date(items_arr, items_num);

   show_items(items_arr, items_num);

break;

case'8':

   sort_cena(items_arr, items_num);

   show_items(items_arr, items_num);

break;

case'9':

   main();

break;

case'0':

   exit(0);

default:

   cout <<"Ошибка ввода!"<< endl;

break;

}

 

goto tryAgain_adm;

}

// Функция меню пользователя для работы с данными

void menu_user()

{

Item items_arr[max_items];

int items_num = 0;

char myChoice;

cout <<">>> Меню для пользователя <<<"<< endl;

cout <<"1: Показать список товаров"<< endl;

cout <<"2: Поиск по ИЗ"<< endl;

cout <<"3: Отсортировать по наименованию"<< endl;

cout <<"4: Отсортировать по дате поступления на склад"<< endl;

cout <<"5: Отсортировать по цене"<< endl;

cout <<"9: Назад к авторизации"<< endl;

cout <<"0: Выход из программы"<< endl;

tryAgain_user:

cout <<"\nВыберите пункт меню: ";

  cin >> myChoice;

switch (myChoice)

{

case'1':

   read_file_items(items_arr, items_num);

   show_items(items_arr, items_num);

break;

case'2':

   poisk_items(items_arr, items_num);

break;

case'3':

   sort_name(items_arr, items_num);

   show_items(items_arr, items_num);

break;

case'4':

   sort_date(items_arr, items_num);

   show_items(items_arr, items_num);

break;

case'5':

   sort_cena(items_arr, items_num);

   show_items(items_arr, items_num);

break;

case'9':

   main();

break;

case'0':

   exit(0);

default:

   cout <<"Ошибка ввода!"<< endl;

break;

}

 

goto tryAgain_user;

}

 

// Функция считывания информации из файла в массив памяти

void read_file_items(Item* items_arr, int& items_num)

{

ifstream in_file(file_items, ios::in); // Открыли файл для чтения

if (!in_file.is_open()) cout <<"Указанный файл не существует!\n"

<<"Дальнейшая работа с программой невозможна!"<< endl;

else

{

int i = 0;

while (!in_file.eof())

   {

       in_file >> items_arr[i].name

>> items_arr[i].kolichestvo

>> items_arr[i].cena

>> items_arr[i].date;

       i++;

   }

   items_num = i;

}

in_file.close(); //Закрыли файл

}

 

// Функция для отображения информации на экране

void show_items(Item* items_arr, int& items_num)

{

cout <<">>> Список товаров: "<< endl;

cout <<"---------------------------------"

<<"-------------------------"<< endl;

cout <<"| # | "

<< setw(13) << left <<"Наименование"<<"| "

<< setw(10) << left <<"Количество"<<"| "

<< setw(5) << left <<"Цена"<<"| "

<< setw(17) << left <<"Дата поступления"<<"|"<< endl;

cout <<"---------------------------------"

<<"-------------------------"<< endl;

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

{

   cout <<"| "

<< setw(2) << left << i + 1<<"| "

<< setw(12) << left << items_arr[i].name <<"| "

<< setw(7) << left << items_arr[i].kolichestvo <<"| "

<< setw(4) << left << items_arr[i].cena <<"| "

<< setw(15) << left << items_arr[i].date <<"|"<< endl;

}

cout <<"---------------------------------"

<<"-------------------------"<< endl;

}

 

// Функция для добавления записи

void add_item(Item* items_arr, int& items_num)

{

cout <<">>> Добавление нового вида товара на склад"<< endl;

read_file_items(items_arr, items_num);

items_num++;

int id = items_num - 1;

cout <<"Наименование: ";

cin >> items_arr[id].name;

cout <<"Количество: ";

cin >> items_arr[id].kolichestvo;

cout <<"Цена: ";

cin >> items_arr[id].cena;

cout <<"Дата(гггг.мм.дд): ";

cin >> items_arr[id].date;

cout <<"Товар "

<< items_arr[id].name

<<" добавлен на склад"<< endl;

write_file_items(items_arr, items_num);

}

 

// Функция изменения записи

void edit_item(Item* items_arr, int& items_num)

{

int id = 0;

cout <<">>> Редактирование записи"<< endl;

read_file_items(items_arr, items_num);

cout <<"Введите # товара для редактирования ";

cin >> id;

id--;

if (id <= 0 || id >= items_num)

   cout <<"Такого товара не существует.\n"

<<"Проверьте вводимые данные!"<< endl;

else

{

   cout <<"Наименование: ";

   cin >> items_arr[id].name;

   cout <<"Количество: ";

   cin >> items_arr[id].kolichestvo;

   cout <<"Цена: ";

   cin >> items_arr[id].cena;

   cout <<"Дата(гггг.мм.дд): ";

   cin >> items_arr[id].date;

   cout <<"Запись # "<< id + 1<<" изменена"<< endl;

   write_file_items(items_arr, items_num);

}

}

 

// Функция для удаления записи

void dell_item(Item* items_arr, int& items_num)

{

int id = 0;

cout <<">>> Удаление "<< endl;

read_file_items(items_arr, items_num);

cout <<"Введите # удаляемого товара: ";

cin >> id;

id--;

if (id >= 0&& id < items_num)

{

for (int i = id; i < items_num -1; i++)

   {

       items_arr[i] = items_arr[i + 1];

   }

   items_num--;

   cout <<"Товар # "

<< id + 1<<" удалена"<< endl;

   write_file_items(items_arr, items_num);

}

else cout <<"Введен некорректный # удаляемого товара!"<< endl;

 

}

 

// Функция для перезаписи файла

void write_file_items(Item* items_arr, int& items_num)

{

ofstream out_file(file_items, ios::out); // Открыли файл для записи

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

{

   out_file << items_arr[i].name <<"\t"

<< items_arr[i].kolichestvo <<"\t"

<< items_arr[i].cena <<"\t"

<< items_arr[i].date;

if (i < items_num - 1)

   {

       out_file << endl;

   }

}

out_file.close();

}

 

// Функция поиска записей

void poisk_items(Item* items_arr, int& items_num)

{

string date_isk;

string date_new;

float cena_isk;

int k = 0;

sort_name(items_arr, items_num);

cout <<">>> Поиск элементов"<< endl;

cout <<"Условие: Вывести в алфавитном порядке список товаров, хранящихся более x месяцев,\n"

<<" стоимость которых превышает y рублей(x, y вводятся с клавиатуры).\n"<< endl;

cout <<"Введите дату, с которой начать поиск элементов (гггг.мм.дд): ";

cin >> date_isk;

cout <<"Введите минимальную стоимость товара: ";

cin >> cena_isk;

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

{

if (items_arr[i].date >= date_isk && items_arr[i].cena >= cena_isk)

   {

       cout

<< setw(10) << left << items_arr[i].name <<" кол-во: "

<< setw(3) << left << items_arr[i].kolichestvo <<" цена: "

<< setw(4) << left << items_arr[i].cena <<" дата: "

<< setw(10) << left << items_arr[i].date << endl;

       k++;

   }

}

if (k == 0)

   cout <<"По заданным параметрам элементов не найдено"<< endl;

}

 

// Функция сортировки записей по наименованию

void sort_name(Item* items_arr, int& items_num)

{

Item temp; // временная переменная для обмена элементов местами

read_file_items(items_arr, items_num);

cout <<">>> Упорядочивание записей по наименованию:"<< endl;

// Сортировка массива пузырьком

for (int i = 0; i < items_num - 1; i++) {

for (int j = 0; j < items_num - i - 1; j++) {

if (items_arr[j].name > items_arr[j + 1].name) {

// меняем элементы местами

           temp = items_arr[j];

           items_arr[j] = items_arr[j + 1];

           items_arr[j + 1] = temp;

       }

   }

}

}

// Функция сортировки записей по дате поступления на склад

void sort_date(Item* items_arr, int& items_num)

{

Item temp; // временная переменная для обмена элементов местами

read_file_items(items_arr, items_num);

cout <<">>> Упорядочивание записей по дате:"<< endl;

// Сортировка массива пузырьком

for (int i = 0; i < items_num - 1; i++) {

for (int j = 0; j < items_num - i - 1; j++) {

if (items_arr[j].date > items_arr[j + 1].date) {

// меняем элементы местами

           temp = items_arr[j];

           items_arr[j] = items_arr[j + 1];

           items_arr[j + 1] = temp;

       }

   }

}

}

 

// Функция сортировки записей по цене

void sort_cena(Item* items_arr, int& items_num)

{

Item temp; // временная переменная для обмена элементов местами

read_file_items(items_arr, items_num);

cout <<">>> Упорядочивание записей по цене:"<< endl;

// Сортировка массива пузырьком

for (int i = 0; i < items_num - 1; i++) {

for (int j = 0; j < items_num - i - 1; j++) {

if (items_arr[j].cena > items_arr[j + 1].cena) {

// меняем элементы местами

           temp = items_arr[j];

           items_arr[j] = items_arr[j + 1];

           items_arr[j + 1] = temp;

       }

   }

}

}

 


 

ПРИЛОЖЕНИЕ В

 

АННОТАЦИЯ

 

Данная работа выполнена на тему «Разработка программы учета товаров на складе».

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

Во втором разделе произведен анализ и разработка программного обеспечения. Проведен анализ предметной области и формулирование функциональных требований. Выполнена разработка структуры программы и алгоритмов работы модулей программы. Продемонстрировано описание программного кода.

В третьем разделе показана демонстрация работы. Дано руководство пользователя.

Объем пояснительной записки составляет 22 листа и содержит 11 рисунков, 13 источников литературы, 3 приложения.

 

 


СОДЕРЖАНИЕ

 

 

Введение. 4

1 Структура программы C++. 5

2 Анализ и разработка программного обеспечения. 9

2.1 Анализ предметной области и формулирование функциональных требований 9

2.2 Разработка структуры программы и алгоритмов работы модулей программы 9

2.3 Описание программного кода. 12

3 Демонстрация работы.. 14

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

3.2. Тестирование программы.. 18

Заключение. 20

Список использованных источников. 21

Приложение АБлок-схемы алгоритмов. 22

Приложение БЛистинг программного кода. 25

Приложение ВПрезентация разработанного ПО.. 36

 

 

 


ВВЕДЕНИЕ

 

С++ - это компилируемый, высокоуровневый язык программирования. Может использоваться в большинстве сфер применения. Предназначен для разработки разнообразных приложений. На сегодня – это один из популярнейших и известнейших языков[1].

С выходом C++ в мире появилось ряд, ныне общераспространённых, понятий:

- инициация классов с объектами;

- принцип наследования в ООП;

- выгрузка и удаление функций из памяти;

- создание виртуальных функций;

- система исключений и многое другое.

С++ относится к компилируемым языкам, то есть компилятор изменяет код C++, преображая его в машинный с помощью предустановленных инструкций. Все платформы отличаются некоторыми особенностями, из-за чего нельзя взять и перенести программу с одной на другую платформу. Точнее, перенести можно, но она там не запустится. При этом исходный код приложения преимущественно переносится. Единственное исключение – использование специфических возможностей конкретной ОС[2].

У С++ есть компиляторы и инструменты для работы с кодом на большинстве известных платформ. Это позволяет скомпилировать исходники под любую платформу. С++ поддерживает написание программ в стиле ООП, чего не умеет Си. В этом случае приложение становится лишь набором классов, объектов, которые способны взаимодействовать с другими элементами кода. Это помогает в разработке крупных приложений.

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


Поделиться с друзьями:

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.67 с.