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

  • Основные задачи Создание структуры данных, работа с текстовыми файлами и данными, выделение памяти. Описание разработки

  • 3 Динамическое выделение памяти

  • 4. Работа с функциями 4.1. Функция заполнения массива

  • 4.2. Функция вывода строк.

  • 4.3. Функция добавления строк.

  • 4.4. Функция изменения строк.

  • 4.5. Функция поиска строки по имени

  • 4.6. Функция удаления строки по индексу

  • 5. Вызов функции по кнопке

  • Курсовая работа Информационные технологии. Учет товаров на складе


    Скачать 148.89 Kb.
    НазваниеУчет товаров на складе
    АнкорКурсовая работа Информационные технологии
    Дата12.02.2021
    Размер148.89 Kb.
    Формат файлаdocx
    Имя файла9404_byrkin_Yuriy_kursovaya_Rabota.docx
    ТипКурсовая
    #176020

    МИНОБРНАУКИ РОССИИ

    Санкт-Петербургский государственный

    электротехнический университет

    «ЛЭТИ» им. В.И. Ульянова (Ленина)

    Кафедра РАПС


    Курсовая РАБОТА

    по дисциплине «Информационные технологии»

    Тема: Учет товаров на складе

    Студент гр. 9404




    Быркин Ю.С

    Преподаватель




    Чмиленко Ф.В.



    Санкт-Петербург

    2020

    содержание





    Введение

    Цель работы

    3

    3

    1.

    Создание структуры

    4

    2.

    Считывание с файла

    4

    3.

    Динамическое выделение памяти

    5

    4.

    4.1

    Функции

    Функция заполнения массива

    5

    5

    4.2

    Функция вывода строк

    5

    4.3

    Функция добавления строк

    5

    4.4

    Функция изменения строк

    5

    4.5

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

    6

    4.6

    5.

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

    Вызов функций по кнопке

    Вывод

    Список используемых источников

    Программный код

    Приложения

    6

    6
    7

    8

    9

    13


    введение

    Вступление

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

    Цель работы

    Используя полученные теоретические и практические знания о языке С/С++, написать программу, обрабатывающую и выводящую данные в консоль, а также редактировать, добавлять и удалять элементы.

    Основные задачи

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

    Описание разработки
    1.Создание структуры.

    Была создана структура Sklad, состоящая из 6 элементов. Элемент code отвечает за код товара для его упрощенного поиска в базе, для него подходит тип данных short, потому что он позволяет вместить нужное количество информации. Элемент name является символьным, поэтому для него был выбран тип данных char, вмещающий 20 элементов, которых будет достаточно для записи названия товаров. Элемент check содержит информацию о наличие товара на складе, поэтому для него оптимальным будет использование типа bool, потому что он возвращает 0, если товар отсутствует, и 1, если товар есть в наличие. Для срока годности товара на складе был выбран тип short, т.к эти данные не превышают его диапазона и содержат три числа, отвечающие за число, месяц и год. Amount содержит информацию о количестве товара, оптимальный тип данных – int, т.к не превышает диапазон. Для цены price был использован тип float, потому что они записываются в формате с плавающей точкой.
    2 .Считывание с файла

    Считывание файла происходит в теле функции main. Для считывания данных с файла была использована функция fopen() в режиме считывания, инициализирован указатель на файл:

    FILE *file = fopen("Sklad.txt", "w");

    Цикл while выполняет проверку на то, чтобы количество считанных элементов «строки» было равно 11. Переменной result присваивается значение считанных элементов «строки». И если result равен 11, запись «строки».

    Функция fclose() закрывает файл.

    3 Динамическое выделение памяти

    Для выделения памяти был использован оператор new:

    Sklad *spiski = new Sklad[1000];

    Указатель *spiski – указатель на отведенную память.
    4. Работа с функциями

    4.1. Функция заполнения массива

    Функция save_array (Sklad *spiski, int size) с помощью оператора for заполняет массив данными из файла.

    В декларации функции находится указатель на выделенную под массив память и переменная size – кол-во элементов в массиве структур.

    4.2. Функция вывода строк.

    Функция print_array (Sklad *spiski, int size) с помощью оператора for проходится по всем элементам массива структур и выводит их в консоль. Так же выводится дополнительный «столбец» которая выводит произведение количества товара на его цену.

    4.3. Функция добавления строк.

    Функция add_line (Sklad *spiski, int *size) считывает нововведённую строку, оператор цикла for проходится по имеющимся элементам структуры, и если функция сравнения строк cmp в теле оператора if возвращает 0(т.е имя нового товара совпадает с именем товара, имеющегося на складе), то идет сравнение дат производства, дат истечения срока годности и цены, и если все совпадает, то количество строк не увеличивается, а к количеству имеющегося товара прибавляется количество нового товара. Также меняется элемент check. Если совпадений нет, увеличение строк.

    4.4. Функция изменения строк.

    Функция change(Sklad *spiski, int size) считывает индекс строки, которую мы хотим изменить, и если это число не меньше 0 и не больше количества строк, то мы вводим новую строку и заменяем ею «старую».

    4.5. Функция поиска строки по имени

    Функция find_array(Sklad *spiski, int size) с помощью функции сравнения строк cmp сравнивает строки по элементу name, при совпадении возвращает 0, и выводит строки, в которых есть искомый элемент.

    4.6. Функция удаления строки по индексу

    Функция delete_element(Sklad *spiski, int *size) «удаляет» элемент по индексу, который вводится с клавиатуры. Если число индекса меньше нуля или больше или равно количеству элементов, функция завершает свою работу. На самом деле удаления как такового не происходит, введенному элементу присваивается следующая «строка», т.е происходит перезаписывание следующим после него элементом, и так для всех последующих элементов.

    5. Вызов функции по кнопке

    По кнопке «а» происходит вызов функции добавления строк.

    По кнопке «с» происходит вызов функции изменения строк.

    По кнопке «d» происходит вызов функции «удаления» строк.

    По кнопке «p» происходит вызов функции вывода строк.

    По кнопке «s» происходит вызов функции сохранения строк в массив.

    По кнопке «f» происходит вызов функции поиска строки по имени.

    Заключение

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

    Вывод

    В ходе выполнения курсовой работы, была успешно разработана программа-обработчик по структурному хранению данных и их редактированию. Была проделана работа с файлами, использовалось динамическое выделение памяти и большое количество функций для значительного упрощения работы с ней. Функция fflush обычно используется только для выходного потока. Её цель — очистить выходной буфер и переместить буферизованные данные на консоль. Если в коде создать глобальную переменную и с таким же именем локальную, то приоритет все равно будет за локальной.

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

    1. Чмиленко Ф.В. Курс лекций: учеб. пособие. СПб, 2020.

    2.Шевченко А. В. Программирование и основы алгоритмизации: учеб. пособие. СПб.: Изд-во СПбГЭТУ «ЛЭТИ», 2011.

    3. Павловская Т.А. Программирование на языке высокого уровня : Учебник для вузов. СПб.: Изд-во Питер, 2003.

    Программный код

    #include

    #include

    #include

    #include

    #include

    #include

    using namespace std;

    struct Sklad {

    char name[20];

    short date[3];

    short Provider[3];

    short code;

    int amount;

    float price;

    bool check;

    };
    void save_array(Sklad *spiski, int size)

    {

    FILE *file = fopen("Sklad.txt", "w");
    for(int i = 0; i < size; i++)

    { fprintf(file, "%d %s %d %d %hu:%hu:%hu %hu:%hu:%hu %f\n",

    spiski[i].code,

    spiski[i].name,

    spiski[i].check,

    spiski[i].amount,

    spiski[i].date[0],

    spiski[i].date[1],

    spiski[i].date[2],

    spiski[i].Provider[0],

    spiski[i].Provider[1],

    spiski[i].Provider[2],

    spiski[i].price);

    }

    fclose(file);

    }
    void print_array(Sklad *spiski, int size)

    { printf("%3s|%-4s|%-20s|%-7s|%-9s|%-8s|%-8s|%-8s|%-8s\n", "N", "Code", "Name", "Check", "Amount", "Date", "Date", "Price", "All");

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

    {

    printf("%3d|%4d|%-20s| %-5d|%9d|%2hu:%2hu:%2hu|%2hu:%2hu:%2hu|%8.2f|%8.2f\n",

    i + 1,

    spiski[i].code,

    spiski[i].name,

    spiski[i].check,

    spiski[i].amount,

    spiski[i].date[0], spiski[i].date[1], spiski[i].date[2],

    spiski[i].Provider[0], spiski[i].Provider[1], spiski[i].Provider[2],

    spiski[i].price,

    spiski[i].amount * spiski[i].price);

    }
    }

    void add_line(Sklad *spiski, int *size)

    { printf("Add new line: \n");

    scanf("%hu %s %d %d %hu:%hu:%hu %hu:%hu:%hu %f",

    &spiski[*size].code,

    spiski[*size].name,

    &spiski[*size].check,

    &spiski[*size].amount,

    &spiski[*size].date[0],

    &spiski[*size].date[1],

    &spiski[*size].date[2],

    &spiski[*size].Provider[0],

    &spiski[*size].Provider[1],

    &spiski[*size].Provider[2],

    &spiski[*size].price);
    for(int i = 0; i < *size; i++)

    { if(strcmp(spiski[i].name, spiski[*size].name) == 0

    && spiski[i].date[0] == spiski[*size].date[0]

    && spiski[i].date[1] == spiski[*size].date[1]

    && spiski[i].date[2] == spiski[*size].date[2]

    && spiski[i].Provider[0] == spiski[*size].Provider[0]

    && spiski[i].Provider[1] == spiski[*size].Provider[1]

    && spiski[i].Provider[2] == spiski[*size].Provider[2]

    && spiski[i].price == spiski[*size].price)
    { spiski[i].amount += spiski[*size].amount;

    spiski[i].check = spiski[i].check || spiski[*size].check;

    return;

    }

    } (*size)++;

    return;

    }
    void change(Sklad *spiski, int size)

    { int number = 0;

    printf("Enter line's number: ");

    scanf("%d", &number);

    number--;

    if (number < 0 || number >= size)

    { printf("Wrong nuber\n");

    return;

    }
    printf("Enter a new line: \n");

    scanf("%hu %s %d %d %hu:%hu:%hu %hu:%hu:%hu %f",

    &spiski[number].code,

    &spiski[number].name,

    &spiski[number].check,

    &spiski[number].amount,

    &spiski[number].date[0],

    &spiski[number].date[1],

    &spiski[number].date[2],

    &spiski[number].Provider[0],

    &spiski[number].Provider[1],

    &spiski[number].Provider[2],

    &spiski[number].price);

    }
    void find_array(Sklad *spiski, int size)

    {
    char str[20];

    scanf("%19s", str);
    for(int i = 0; i < size; i++)

    {

    if (strcmp(str, spiski[i].name) == 0)

    printf("%-3d%-5d%-25s%-6d%-9d%-2hu:%-2hu:%-2hu %-2hu:%-2hu:%-2hu %-9.2f %.2f\n",

    i + 1,

    spiski[i].code,

    spiski[i].name,

    spiski[i].check,

    spiski[i].amount,

    spiski[i].date[0], spiski[i].date[1], spiski[i].date[2],

    spiski[i].Provider[0], spiski[i].Provider[1], spiski[i].Provider[2],

    spiski[i].price,

    spiski[i].amount * spiski[i].price);

    }
    }
    void delete_element(Sklad *spiski, int *size)

    {

    int number = 0;

    printf("Enter line's number: ");

    scanf("%d", &number);

    number--;
    if (number < 0 || number >= *size)

    {

    printf("Wrong nuber\n");

    return;

    }
    *size = *size - 1;
    for(int i = number ; i < *size; i++)

    {

    spiski[i] = spiski[i + 1];

    }

    }
    int main()
    { system("chcp 1251");

    cout << "По кнопке а происходит вызов функции добавления строк\n"

    << "По кнопке с происходит вызов функции изменения строк\n"

    << "По кнопке d происходит вызов функции удаления строк\n"

    << "По кнопке p происходит вызов функции вывода строк\n"

    << "По кнопке s происходит вызов функции сохранения строк в массив\n"

    << "По кнопке f происходит вызов функции поиска строки по имени\n"

    << "По кнопке e происходит выход из программы\n" << endl;
    FILE *f = fopen("Sklad.txt", "r");
    int size = 0;

    char operation = 0;

    int result = 0;

    Sklad *spiski = new Sklad[200];

    while( (result = fscanf(f, "%hu %s %d %d %hu:%hu:%hu %hu:%hu:%hu %f",

    &spiski[size].code,

    spiski[size].name,

    &spiski[size].check,

    &spiski[size].amount,

    &spiski[size].date[0],

    &spiski[size].date[1],

    &spiski[size].date[2],

    &spiski[size].Provider[0],

    &spiski[size].Provider[1],

    &spiski[size].Provider[2],

    &spiski[size].price)) > 0 )

    { if (result == 11) size++;

    }
    fclose(f);
    while (true)

    {

    scanf("%c", &operation);

    switch (operation)

    { case 'a': add_line(spiski, &size); break;

    case 'c': change(spiski, size); break;

    case 'd': delete_element(spiski, &size); break;

    case 'p': print_array(spiski, size); break;

    case 's': save_array(spiski, size); break;

    case 'f': find_array(spiski, size); break;

    case 'e': return 0;

    }

    }

    return 0;

    }
    Приложения



    Рис. 1- вызов меню в консоли


    Рис. 2-вызов функции вывода строки и её сохранения



    Рис. 3- вызов функции удаления сстроки



    Рис. 4-итоговые значения в текстовом документе после работы программы


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