Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
5
Добавлен:
27.11.2024
Размер:
1.3 Mб
Скачать

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

3

1 Анализ предметной области «Рекламное агентство»

4

    1. Описание предметной области

4

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

5

2.1 Описание функционала программы

5

2.2 Тестирование программного приложения

76

ЗАКЛЮЧЕНИЕ

87

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

88

ВВЕДЕНИЕ

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

Рекламное агентство является организацией, которая предоставляется различные виды услуг, от создания, распечатки визиток и выпуска брендированной сувенирной продукции, до разработки сайта и продвижений её на рынке использовав различные средства массовой информации, а также точечные продвижения, использовав составленный анализ рынка и SEO-продвижения в всемирной пау-тине «Интернет».

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

  • разработать интерфейс пользователя;

  • разработать программное обеспечение;

  • описать функционал программы;

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

Разработанный программный продукт позволит хранить информацию о заказах

  1. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ «РЕКЛАМНОЕ АГЕНТСТВО»

    1. Описание предметной области

Рекламное агентство – это объединение творческих людей, которые помогают в продвижении услуг или товаров клиентам по коммуникационным каналам путем привлечения к нему дополнительного трафика.

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

Многие рекламные агентства в связи с большой конкуренцией, объединяются в одну группу компаний, чтобы покрыть полный спектр услуг в своей отрасли и быть наравне с большими рекламными агентствами. По сути, эти рекламные агентства являются рекламными компаниями со своим производством рекламной продукции и со специалистами во всех областях своей деятельности. Данные рекламные агентства стараются охватывать все виды рекламы от обычной и традиционной рекламы, до интернет-рекламы. Они имеют названия рекламные агентства полного цикла.

В рекламное агентство обращаются физические и юридические лица для получения различного спектра услуг, к примеру:

  • изготовление выставочных стендов;

  • производство и размещение наружной рекламы;

  • разработка и создание печатной продукции;

  • создание POS-материалов;

  • разработка и продвижение сайтов.

  1. РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

    1. Описание функционала программы

Для хранения данных в оперативной памяти было принято решение использовать двунаправленный список, так как двунаправленный список позволяет ускорить поиск требуемых элементов и постраничный вывод данных на экран, а также упрощает алгоритмы взаимодействия со списком.

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

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

  • хеадер rekagent.h – содержит основные структуры организации списка записей, а также необходимые константы;

  • файл main.c – содержит основной сценарий выполнения программы, обработку главного меню;

  • хеадер Menu.h – содержит объявление функций меню хендлер Menu.c – содержит функции меню;

  • хеадер Input.h – содержит объявление функций ввода;

  • хендлер Input.c – содержит функции ввода;

  • хеадер Output.h – содержит объявление функций вывода;

  • хендлер Output.c – содержит функции вывода;

  • хеадер Fileworks.h – содержит объявление функций работы с файлами;

  • хендлер Fileworks.c – содержит функции ввода;

  • хеадер Queue.h – содержит объявление функций ядра;

  • ядро Queue.c – содержит функции работы со списком.

  • хеадер Change.h – содержит объявление функций корректировки;

  • хендлер Change.c – содержит функции корректировки;

  • хеадер Search.h – содержит объявление функций поиска;

  • хендлер Search.c – содержит функции поиска;

  • хеадер Sort.h – содержит объявление функций сортировки;

  • хендлер Sort.c – содержит функции сортировки;

  • хеадер Processing.h – содержит объявление функций обработки списка;

  • хендлер Processing.c – содержит функции обработки списка.

Данных о клиенте:

  • unsigned int id - ключевое поле;

  • unsigned int numzakaza – номер заказа;

  • char lico[mem25] – юридическое или физическое лицо;

  • char manager[mem25] – ответственный менеджер;

  • char gorod[mem25] - город;

  • char telephone[mem25] - телефон;

  • char date[mem25] - дата;

  • float p_servicenumber – количество услуг;

  • float p_money – сумма заработанных денег.

Константы для выделение памяти:

  • #define mem25 25;

  • #define print 13.

Коды специальных клавиш:

  • Enter = 13;

  • Esc = 27;

  • Up = 72;

  • Left = 75;

  • Right = 77;

  • Down = 80.

Объявления функций ядра программы Queue.h в себя включает следующие структуры:

//Библиотека для работы с очередью

#ifndef QUEUE_H

#define QUEUE_H

#pragma once

#include "rekagent.h"

// Добавление первого элемента в очередь

struct rekagent* add_first(const struct rekagent z);

// Добавление элемента в очередь

struct rekagent* add(struct rekagent* end, const struct rekagent z);

// Удаление первого элемента из очереди

struct rekagent* dellete_id_beg(struct rekagent* beg);

// Удаление последнего элемента из очереди

struct rekagent* dellete_id_end(struct rekagent* beg, struct rekagent* end);

// Удаление элемента из очереди по номеру

struct rekagent* dellete_id(struct rekagent* beg, struct rekagent* end, int num);

// Удаление всех элементов из очереди

Void dellete_all(struct rekagent* beg);

#endif

Функции ядра программы файла Queue.c в себя включает следующие функции:

  • Необходимые директивы;

  • функции создания элемента списка add_first и add;

  • функцию удаления первого элемента текущего списка;

  • функцию удаления последнего элемента текущего списка;

  • функцию безопасного удаления элемента из списка.

К файлу подключены следующие директивы:

  • #include "rekagent.h"

  • #include "Input.h"

  • #include "Output.h"

  • #include <stdio.h>

  • #include <stdlib.h>

Функция добавление первого элемента add_first представлена ниже:

struct rekagent* add_first(const struct rekagent z) // функция

{

struct rekagent* beg = (struct rekagent*)malloc(sizeof(struct rekagent));

*beg = z;

beg->id = 1;//ключевое поле равно единице на момент начало списка

beg->prev = NULL;

beg->next = 0;

return beg;}

Функция добавления элемента в уже существующий список представлена ниже:

struct rekagent* add(struct rekagent* end, const struct rekagent z){

struct rekagent* newZ = (struct rekagent*)malloc(sizeof(struct rekagent));

*newZ = z;

newZ->prev = end;

newZ->next = 0;

end->next = newZ;

end = newZ;

newZ->id = newZ->prev->id + 1;//увеличение ключевого поля на единицу для новой структуры

return end;}

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

Функция удаления первого элемента текущего списка при отсутствии элементов выводит сообщение об ошибке. При успешном удалении – возвращает новое начало списка. Функция предоставлена ниже:

struct rekagent* dellete_id_beg(struct rekagent* beg){

struct rekagent* temp;

if (!beg) { printf("%s\n", "Невозможно выполнить операцию ! Очередь пуста!"); return 0; }

else{

temp = beg;

printf("%s%lu\n", "Выполнено удаление элемента с ID = ", beg->id);

header();

print_on_the_screen(*beg);

printf("\n");

while (temp){

(temp->id)--;

temp = temp->next;}

temp = beg;

beg = beg->next;

free(temp);

return beg;}}

Функция удаления последнего элемента текущего списка при отсутствии элементов выводит сообщение об ошибке. При успешном удалении – возвращает новый конец списка. Функция описана ниже:

struct rekagent* dellete_id_end(struct rekagent* beg, struct rekagent* end){

if (!beg) { printf("%s\n", "Невозможно выполнить операцию ! Очередь пуста!"); return 0; }

struct rekagent* temp;

temp = end->prev;

struct rekagent* temp_1 = end;

temp->next = end->next;

end = temp;

printf("%s%lu\n", "Выполнено удаление элемента с ID = ", temp_1->id);

header();

print_on_the_screen(*temp_1);

printf("\n");

free(temp_1);

return end;}

Функция безопасного удаления элемента из списка описана ниже:

struct rekagent* dellete_id(struct rekagent* beg, struct rekagent* end, int num){

struct rekagent* temp;

temp = beg;

if (!beg) { printf("%s\n", "Невозможно выполнить операцию ! Очередь пуста!"); return 0; }

else{

while (temp){

if (temp->next->id == num){

struct rekagent* temp_1 = temp->next;

temp->next = temp_1->next;

temp_1->next->prev = temp;

printf("%s%d\n", "Выполнено удаление элемента с ID = ", num);

header();

print_on_the_screen(*temp_1);

printf("\n");

free(temp_1);

temp_1 = temp->next;

while (temp_1){

(temp_1->id)--;

temp_1 = temp_1->next;}

break;}

else temp = temp->next;}}}

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

void dellete_all(struct rekagent* beg){

struct rekagent* temp = beg;

while (temp){

struct rekagent* temp_1 = temp;

temp = temp->next;

free(temp_1);}}

В заголовочном файле Сhange.h объявлены следующие директивы представленные ниже:

//Это директивы препроцессора для предотвращения

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

#ifndef CHANGE_H

#define CHANGE_H

// Это директива препроцессора, которая предотвращает множественное включение заголовочного файла change.h

// в том же компиляционном юните. Она выполняет ту же функцию, что и директива #ifndef в большинстве компиляторов.

#pragma once

// Прототип функции change, которая принимает указатели на объекты структуры rekagent (beg и end) и

// целочисленный аргумент id_num. Функция используется для корректировки данных в структурах rekagent.

Соседние файлы в папке Выполненая работа