Информационно-справочная система "Экспорт"
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ИНСТИТУТ РАДИОЭЛЕКТРОНИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КУРСОВАЯ РАБОТА
«Информационно-справочная система "Экспорт"»
Выполнил: студент группы 08-TР1
Прошкин Р.Н.
Проверил: доцент кафедры ИРС
Сидоров С.Б.
Нижний Новгород 2009 г.
Содержание
1.Введение....................
2.Постановка задачи...........
3.Руководство пользователя..................
4.Руководство программиста....
4.1.Структура программы.......
4.2.Структуры данных..........
5.Заключение..................
6.Список литературы...........
7.Приложение..................
7.1.Основная программа ..............................
7.2.Модуль «interface»........
7.3.Модуль «tovar»............
1. Введение
В работе рассматривается решение задачи - разработка прикладной программы информационно-справочнной системы "Экспорт".
Для решения данной задачи использована технология разработки программ «сверху-вниз». Этот подход дает возможность решить исходную задачу путем последовательного решения более простых задач, что позволяет уменьшить затраты на отладку и повысить надёжность программы.
Использование технологии «сверху-вниз» дает возможность повторного использования уже существующих модулей, не нужно разрабатывать их с самого начала.
В начале основной части отчёта приводится постановка задачи с указанием полного набора операций, выполнение которых должна обеспечивать прикладная программа.
В руководстве пользователя раскрывается назначение программы, её возможности и выполняемые операции. Подробно объясняются правила пользования программой и приводятся конкретные примеры диалога с пользователем.
В руководстве программиста рассматривается структура программы, в том числе состав её модулей и их взаимодействие. Кроме этого описываются используемые структуры данных.
В заключении делаются выводы о полноте решения поставленной задачи, а также указывается, где можно было бы применить программу. В конце отчёта приведена техническая информация, включающая исходный код всех модулей программы.
2. Постановка задачи
Мною получено задание разработать пргорамму информационно-справочной системы «Экспорт». Информация в данной программе состоит из записей, каждая из которых содержит данные об определенном экспортируемом товаре. Запись должна иметь следующую структуру:
– название товара;
– страна- экспортер;
– количество экспортируемого товара (в штуках);
– дата поставки товара;
– ассортимент (автоматически заполняется программой).
Пользователь системы должен иметь возможность выполнять следующие запросы:
– получить список стран, в которые экспортируется данный товар и общий объем его экспорта;
– найти страну, которая экспортирует наибольшее количество видов товара (с самым большим ассортиментом);
– найти в базе данных экспортные операции, сроки поставки которых осуществлены ранее указанной даты.
Выбор пользователем желаемого действия должен быть реализован с помощью меню.
3. Руководство пользователя
Программа предназначена для формирования и хранения различной информации об экспортируемых товарах (название товара, страна-экспортер, количество товара, дата поставки и т.д.).
Запуск программы на выполнение осуществляется либо набором в командной строке имени программы export.exe с последующим нажатием на клавишу «Enter», либо другим способом, зависящим от конкретной операционной системы.
Программа управляется с помощью командной строки. Весь диалог с пользователем осуществляется в текстовом режиме через систему меню. Меню появляется автоматически после выдачи сообщения о программе и имеет следующую структуру:
1-Dobavit` zapis`
2-Udalit` zapis`
3-Izmenit` zapis`
4-Poluchit` spisok stran, v kotorhyi expotriruet`sa tovar
5-Nayti strany s bol`shim assortimentom
6-Nayti exportnhyi operacii, srok postavki kotoryh ranee ykazannoi dati
7-Vyhod
После отображения меню пользователю предлагается указать номер требуемого действия.
При вводе недопустимого номера меню с последующим запросом отображаются заново.
При выборе первого пункта меню выполняется операция добавления новой записи о товаре. При этом на экране монитора последовательно появляется запрос на ввод данных о товаре:
Vvedite nazvanie tovara
Vvedite strany exporter
Vvedite kolichestvo tovara
Vvedite daty postavki
Vvedite den` (naprimer 6)
Vvedite mesac`(naprimer 8)
Vvedite god (naprimer 2009)
После указания пользователем всех данных на экране монитора появляется надпись Tovar uspeshno dobavlen и заново отображается меню с запросом следующего действия.
При выборе второго пункта меню выполняется удаление уже существующих данных о товаре. Пользователю будет предложено ввести название товара и страну-экспортёра. При этом, если удаление пройдет успешно, на экране появится надпись:Udaleno uspeshno или Tovar ne nayden в случае, если товар не найден.
После этого заново отображается меню с запросом следующего действия.
При выборе третьего пункта меню выполняется операция изменения всех данных о товаре. При этом на экране монитора последовательно появляется запрос на ввод названия товара и страны-экспортера:
Vvedite nazvanie tovara
Vvedite strany exporter
После ввода пользователем названия товара и страны-экспортёра появится запрос на ввод новых данных о товаре:
Vvedite novoe nazvanie tovara
Vvedite novuy strany exporter
Vvedite novoe kolichestvo tovara
Vvedite novuy daty postavki
Vvedite den`(naprimer 6)
Vvedite mesac`(naprimer 8)
Vvedite god(naprimer 2009)
При выборе четвёртого пункта меню программа выведет на экран запрос на ввод названия товара:
Vvedite nazvanie tovara
После ввода пользователем названия товара программа выведет на экран список стран, в которые экспортируется данный товар и общий объём его экспорта.
При выборе пятого пункта меню программа выведет на экран страну, которая экспортирует наибольшее количество видов товара(с самым большим ассортиментом).
При выборе шестого пункта меня программа выведет на экран запрос на ввод даты срока поставки:
Vvedite den`(naprimer 6)
Vvedite mesac`(naprimer 8)
Vvedite god(naprimer 2009)
После ввода пользователем даты срока поставки программа выведет на экран экспортные операции, сроки поставки которых осуществлены ранее указанной даты.
При выборе седьмого пункта меню программа завершает свою работу.
Структура текстового файла, содержащего описание оболочки.
При работе с программой все вводимые пользователем данные сохраняются во внешнем текстовом файле. Для обеспечения возможности его обработки какими-либо внешними средствами, имеющимися в распоряжении пользователя, требуется знание структуры хранения информации в этом файле.
Все параметры контактов в файле располагаются последовательно в таком порядке:
Название товара (20 символов)
Страна экспортёр(20 символов)
Количество товара
Дата поставки
Количество видов экспортируемого товара
4. Руководство программиста
4.1. Структура программы
Прикладная программа разработана с использованием принципов модульного программирования. Она является совокупностью взаимодействующих модулей. Модули объединяются в единую программу путём компоновки соответствующих объектных файлов.
Программа состоит из 3 модулей, назначение каждого из которых приведено ниже:
1. main.cpp – головной модуль приложения;
2. interface.h, interface.cpp – модуль «Интерфейс пользователя» предназначен для запроса информации от пользователя и выводе на экран результатов обработки.
3.tovar.h,tovar.cpp – модуль «tovar», содержащий основные функции для работы с товаром.
4.2. Структуры данных
Для описания контакта используется структурный тип данных tovar
Тип данных tovar имеет следующее представление:
struct tovar{
char name[20];
char country[20];
int count;
int date[3];
int assortement;
struct tovar *next;};
5. Заключение
В данной работе задача разработки прикладной программы «Информационно-справочная система «Экспорт» была решена с использованием технологии «сверху-вниз». На основании проведённой отладки и испытаний с помощью контрольных примеров можно сделать вывод, что полученная прикладная программа решает поставленную задачу правильно и в полном объёме.
Информационно-справочная система «Экспорт» может быть использована в крупных фирмах, занимающихся вопросами экспорта-импорта товаров народного потребления, в крупных логистических центрах, а также на производствах, например, в компании «ЛУКОЙЛ Нижегороднефтеоргсинтез», которая закупает сырье, производит большой ассортимент продукции нефтехимической переработки и экспортирует его в разные страны.
Одним из направлений доработки прикладной программы является возможность сохранения в отдельный файл и/или отправки на печать отобранных контактов. При этом доработать придётся только модуль «tovar», добавив операцию «Экспорт в файл» и/или «Печать».
Возможные доработки имеют локальный характер и не требуют изменения общей структуры программы, поэтому можно сделать вывод о гибкости полученного программного обеспечения.
6. Список литературы
1. Керниган Брайан, У., Ритчи Деннис, М. Язык программирования С. / У. Керниган Брайан, М. Ритчи Деннис. - Пер. с англ. - 2-е изд. - М.: «Вильямс», 2006.
2. Орлов, С.А. Технологии разработки программного обеспечения: Учебное пособие / С.А. Орлов. - 2-е изд. – СПб: «Питер», 2003. – 480 с.: ил.
3. Культин, Н. Основы программирования в Delphi 7: Учебное пособие / Н. Культин. – СПб: «БХВ-Петербург», 2005.
4. Борисенко, В.В. Основы программирования / В.В. Борисенко. – Интернет-университет информационных технологий – ИНТУИТ.ру, 328 стр. – 2005 г.
7. Приложение
7.1. Основная программа
//main.cpp
#include "tovar.h"
#include "interface.h"
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
FILE *fl;
struct tovar *node; //новый узел
if ((fl= fopen("export.db", "r")) != NULL) //проверка файла на возможность чтения
{
fseek ( fl , 0 , SEEK_SET ); //перемещаемся в начало файла
extern struct tovar *head_list;
while(!feof(fl)) //пока не конец файла
{
node=(struct tovar *) malloc(sizeof(struct tovar)); //выделяем память для нового узла списка
fread(node, sizeof(struct goods), 1, fl); //считываем данные
/*добавление элемента в начало списка*/
node->next=head_list;
head_list=node;
}
fclose(fl); //закрываем файл
}
main_menu(); //вызов основного меню
save(); //сохранить список в файл
free_memory(); //освобождение памяти, занимаемой списком
return 0;
}
7.2. Модуль «interface»
//interface.h
void main_menu();
Реализация модуля « interface »
//interface.cpp
#include "interface.h"
#include "tovar.h"
#include <stdio.h>
void main_menu()
{
int key;
while(1)
{
puts("1-Dobavit` zapis`");
puts("2-Udalit` zapis`");
puts("3-Izmenit` zapis`");
puts("4-Poluchit` spisok stran, v kotorhyi expotriruet`sa tovar");
puts("5-Nayti strany s bol`shim assortimentom");
puts("6-Nayti exportnhyi operacii, srok postavki kotoryh ranee ykazannoi dati");
puts("7-Vyhod ");
scanf("%d",&key);
switch(key)
{
case 1: add(); // добавить запись
break;
case 2: del(); //удалить запись
break;
case 3: change(); //изменить запись
break;
case 4: search_goods(); //получить список стран, в которые экспортируется заданный товар
break;
case 5: search_assortment(); //найти страну с самым большим ассортиментом
break;
case 6: search_date(); //найти экспортные операции, срок поставки которых ранее указанной даты
break;
case 7: return; //выход
default:puts("Enter Error"); //введены неверные данные
break;
}
}
}
7.3. Модуль «tovar »
//tovar.h
#define size 10
struct tovar{
char name[size]; //название товара
char country[size]; //страна-экспортер
int count; //количество товара
int date[3]; //дата поставки
int assortment; //количество видов экспортируемого товара
struct tovar *next;};//указатель на следующий элемент списка
void add(); //добавить запись
void del(); //удалить запись
void search_goods(); //получить список стран, в которые экспортируется заданный товар
void search_assortment(); //найти страну с самым большим ассортиментом
void search_operation (); //найти экспортные операции, срок поставки которых ранее указанной даты
void change(); //изменить запись
void save(); //сохранить в файл
int assortment_up(char *, char *); //проверка увеличение ассортимента
void assortment_down(char *, char *); //проверка уменьшение ассортимента
int str(char *, char *); //функция для сравнения строк
void free_memory(); //освобождение памяти, занимаемой списком
void array_clear(char *); //обнуление массива
Реализация модуля «tovar»
#include "tovar.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct tovar *head_list=NULL; //начало списка
void add() //добавить запись
{
struct tovar *node; //новый узел
node=(struct tovar *) malloc(sizeof(struct tovar)); //выделение памяти под новый узел списка
/*получение информации об экспортируемом товаре*/
puts("Enter name of goods");
scanf("%s",node->name);
puts("Enter country of goods");
scanf("%s",node->country);
puts("Enter number of goods");
scanf("%d",&node->count);
puts("Enter date of delivery");
puts("Enter day(for example 3)");
scanf("%d",&node->date[0]);
puts("Enter month(for example 5)");
scanf("%d",&node->date[1]);
puts("Enter year(for example 2009)");
scanf("%d",&node->date[2]);
node->assortment=assortment_
/*добавление элемента в начало списка*/
node->next=head_list;
head_list=node;
puts("Tovar uspeshno dobavlen");
}
void del() //удалить запись
{
char n[size], c[size];
struct tovar *curr; //текущий узел
struct tovar *pre; //предыдущий узел
char found;
if(head_list==NULL) //проверка на пустоту списка
{
puts("list empty");
return;
}
array_clear(n); //обнуление массива
array_clear(c); //обнуление массива
curr=head_list; //делаем первый элемент списка текущим
pre=NULL;
found='n';
/*получение
информации об удаляемой
puts("Enter name of goods");
scanf("%s",n);
puts("Enter country of goods");
scanf("%s",c);
/*поиск записи*/
while((curr!=NULL)&&(found!='
{
if((str(curr->name,n)==1)&&(
found='y';
else
{
pre=curr; //заносим
адрес текущего узла в
curr=curr->next; //получаем адрес следующего узла списка
}
}
if(found=='y') //если нужная запись найдена
{
if(pre==NULL) //если предыдущий узел не существует
head_list=curr->next; //следующий узел становится началом списка
else pre->next=curr->next; //следующим узлом для предыдущего становится следующий узел для найденного
assortment_down(curr->name, curr->country); //проверка уменьшение ассортимента
free(curr); //удаление текущего элемента и освобождение памяти
puts("Delete Success");
}
else puts("Goods not found"); //если нужная запись не найдена
}
void search_goods() //получить список стран, в которые экспортируется заданный товар
{
char n[size];
struct tovar *curr; //текущий узел списка
int count=0; //количество товара
if(head_list==NULL) //проверка на пустоту списка
{
puts("list empty");
return;
}
array_clear(n); //обнуление массива
puts("Enter name of goods");
scanf("%s",n);
curr=head_list; //делаем первый элемент списка текущим
while(curr!=NULL) //пока не закончился список
{
if(str(curr->name,n)==1)
{
printf("%s'\t'%d'\n'",curr->
count+=curr->count; //считаем общее количество экспортируемого товара
curr=curr->next; //получаем адрес следующего узла списка
}
else curr=curr->next; //получаем адрес следующего узла списка
}
printf("gross amount of exported goods%d\n",count); //общее количество экспортируемого товара
}
void search_assortment() //найти страну с самым большим ассортиментом
{
struct tovar *curr; //текущий узел списка
int assortment=0; //максимальный ассортимент
char c[size]; //страна с самым большим ассортиментом
if(head_list==NULL) //проверка на пустоту списка
{
puts("list empty");
return;
}
array_clear(c); //обнуление массива
curr=head_list; //делаем первый элемент списка текущим
if(curr!=NULL) //если элемент существует
{
assortment=curr->assortment; //максимальный ассортимент
strcpy(c,curr->country); //название страны
curr=curr->next;
}
while(curr!=NULL) //пока не закончился список
{
if(assortment<curr->assortment
{
assortment=curr->assortment; //максимальный ассортимент
strcpy(c,curr->country); //название страны
curr=curr->next; //получаем адрес следующего узла списка
}
else curr=curr->next; //получаем адрес следующего узла списка
}
puts(c); //страна с самым большим ассортиментом
printf("assortment=%d'\n'",
}
void search_operation () //найти экспортные операции, срок поставки которых ранее указанной даты
{
struct tovar *curr; //текущий узел списка
int d[3];
if(head_list==NULL) //проверка на пустоту списка
{
puts("list empty");
return;
}
puts("Enter day(for example 3)");
scanf("%s",&d[0]);
puts("Enter month(for example 5)");
scanf("%s",&d[1]);
puts("Enter year(for example 2009)");
scanf("%s",&d[2]);
curr=head_list; //делаем первый элемент списка текущим
while(curr!=NULL) //пока не закончился список
{
if((curr->date[0]<d[0])&&(
printf("%s'\t'%s'\n'",curr->
if((curr->date[0]>d[0])&&(
printf("%s'\t'%s'\n'",curr->
if((curr->date[0]>d[0])&&(
printf("%s'\t'%s'\n'",curr->
curr=curr->next; //получаем адрес следующего узла списка
}
}
void change() //изменить запись
{
struct tovar *curr; //текущий узел
char n[size], c[size];
char found='n';
if(head_list==NULL) //проверка на пустоту списка
{
puts("list empty");
return;
}
puts("Enter name of goods");
scanf("%s",n);
puts("Enter country of goods");
scanf("%s",c);
curr=head_list; //делаем первый элемент списка текущим
while((curr!=NULL)&&(found!='
{
if((str(curr->name,n)==1)&&(
found='y';
else curr=curr->next; //получаем адрес следующего узла списка
}
if(found=='n') return;
puts(curr->name);
puts("Enter new name of goods");
scanf("%s",curr->name);
puts(curr->country);
puts("Enter new country of goods");
scanf("%s",curr->country);
printf("%d\n",curr->count);
puts("Enter new number of goods");
scanf("%d",&curr->count);
printf("%d.%d.%d\n",curr->
puts("Enter new date of delivery");
puts("Enter day(for example 3)");
scanf("%d",&curr->date[0]);
puts("Enter month(for example 5)");
scanf("%d",&curr->date[1]);
puts("Enter year(for example 2009)");
scanf("%d",&curr->date[2]);
curr->assortment=assortment_
}
int assortment_up(char n[], char c[]) //проверка увеличение ассортимента
{
struct tovar *curr; //текущий узел списка
int assortment=0; //количество видов товара
curr=head_list; //делаем первый элемент списка текущим
/*проверка на существования данного товара в списке*/
while(curr!=NULL) //пока не закончился список
{
if(str(curr->name,n)==1)
{
if(str(curr->country,c)==1) //если данный товар уже есть в ассортименте
{
assortment=curr->assortment;
return assortment;
}
else
{
assortment=curr->assortment;
curr=curr->next;
}
}
else curr=curr->next; //получаем адрес следующего узла списка
}
assortment++; //увеличиваем ассортимент данной страны на еденицу
/*обновляем информацию об ассортименте*/
curr=head_list; //делаем первый элемент списка текущим
while(curr!=NULL) //пока не закончился список
{
if(str(curr->country,c)==1)
{
curr->assortment=assortment;
curr=curr->next;
}
else curr=curr->next; //получаем адрес следующего узла списка
}
return assortment;
}
void assortment_down(char
n[], char c[]) //проверка уменьшение
{
struct tovar *curr; //текущий узел списка
int assortment=0; //количество видов товара
curr=head_list; //делаем первый элемент списка текущим
/*проверка на существования данного товара в списке*/
while(curr!=NULL) //пока не закончился список
{
if(str(curr->name,n)==1)
{
if(str(curr->country,c)==1) //если данный товар уже есть в ассортименте
{
assortment=curr->assortment;
return;
}
else
{
assortment=curr->assortment;
curr=curr->next;
}
}
else curr=curr->next; //получаем адрес следующего узла списка
}
assortment--; //уменьшаем ассортимент данной страны на единицу
/*обновляем информацию об ассортименте*/
curr=head_list; //делаем первый элемент списка текущим
while(curr!=NULL) //пока не закончился список
{
if(str(curr->country,c)==1)
{
curr->assortment=assortment;
curr=curr->next;
}
else curr=curr->next; //получаем адрес следующего узла списка
}
return;
}
int str(char a[], char b[]) //функция для сравнения строк
{
int i,al;
al=strlen(a); //получаем длину первой строки
/*сравнение строк*/
for(i=0;i<al;i++)
if(a[i]!=b[i]) //если символы неравны
return 0;
return 1;
}
void save() //сохранить в файл
{
FILE *fl; //указатель на файл
struct tovar *curr; //текущий узел
if ((fl= fopen("export.db", "w")) == NULL) //проверка на доступность файла для записи
{
puts("Cannot edit main file.\n");
return;
}
curr=head_list; //текущий узел становится первым
while(curr!=NULL) //пока не закончился список
{
fwrite(curr, sizeof(struct tovar), 1, fl); //записываем в файл данные списка
curr=curr->next; //получаем адрес следующего узла
}
fclose(fl); //закрываем файл
}
void free_memory() //освобождение памяти, занимаемой списком
{
struct tovar *curr; //текущий узел
struct tovar *next; //следующий узел
if(head_list==NULL) //проверка на пустоту списка
{
puts("list empty");
return;
}
curr=head_list; //делаем первый элемент текущим
while(curr!=NULL)
{
next=curr->next;
//получаем адрес следующего
free(curr); //освобождаем память
curr=next;
}
}
void array_clear(char a[]) //обнуление массива
{
int i;
for(i=0;i<size;i++)
a[i]='\0';
}

- Информационно-справочные документы
- Информационно-справочные документы в кадровой службе
- Информационно-справочные документы их виды. Современные требования к составлению и оформлению
- Информационно-справочные материалы по деятельности тоталитарных религиозных объединений в Республике Казахстан
- Информационно-справочные системы. «ВЭД-Инфо»
- Информационно-техническое обеспечение СУП в ЗАО «Комбинат строительных материалов №21»
- Информационно-технологическое обеспечение системы управления маркетингом
- Информационно-психологическое воздействие незаконных вооруженных формирований в Чечне на федеральные войска России
- Информационно-развлекательные жанры телевидения
- Информационно – рекламная деятельность современного отеля
- Информационно-справочная система ”Игроки европейских футбольных команд"
- Информационно-справочная система кинотеатров
- Информационно-справочная система. Поставка товара в крупные сети розничной торговли
- Информационно-справочная система средней общеобразовательной школы