Автор: Пользователь скрыл имя, 03 Декабря 2012 в 19:22, курсовая работа
В работе рассматривается решение задачи - разработка прикладной программы информационно-справочнной системДля решения данной задачи использована технология разработки программ «сверху-вниз». Этот подход дает возможность решить исходную задачу путем последовательного решения более простых задач, что позволяет уменьшить затраты на отладку и повысить надёжность программы.
Использование технологии «сверху-вниз» дает возможность повторного использования уже существующих модулей, не нужно разрабатывать их с самого начала.
Введение...............................................................................................................................................3
2.Постановка задачи...............................................................................................................................4
3.Руководство пользователя..................................................................................................................5
4.Руководство программиста.................................................................................................................9
4.1.Структура программы......................................................................................................................9
4.2.Структуры данных............................................................................................................................10
5.Заключение..........................................................................................................................................11
6.Список литературы............................................................................................................................12
7.Приложение........................................................................................................................................13
7.1.Основная программа ......................................................................................................................13
7.2.Модуль «interface»..........................................................................................................................15
7.3.Модуль «tovar»..............................................................................................................................17
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';
}
Информация о работе Информационно-справочная система "Экспорт"