Информационно-справочная система "Экспорт"

Автор: Пользователь скрыл имя, 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

Работа содержит 1 файл

экспорт1.doc

— 116.00 Кб (Скачать)

 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_up(node->name, node->country); //проверка увеличение ассортимента

 /*добавление элемента в начало списка*/

 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!='y')) ////пока не закончился список и пока не найден нужный узел

 {

  if((str(curr->name,n)==1)&&(str(curr->country,c)==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->country,curr->count);

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'",assortment); //максимальный ассортимент

}

 

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])&&(curr->date[1]<=d[1])&&(curr->date[2]<=d[2])) //d< m<= y<=

   printf("%s'\t'%s'\n'",curr->country,curr->name);

  if((curr->date[0]>d[0])&&(curr->date[1]<d[1])&&(curr->date[2]<=d[2])) //d> m< y<=

   printf("%s'\t'%s'\n'",curr->country,curr->name);

  if((curr->date[0]>d[0])&&(curr->date[1]>d[1])&&(curr->date[2]<d[2])) //d> m> y<

   printf("%s'\t'%s'\n'",curr->country,curr->name);

  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!='y')) ////пока не закончился список и пока не найден нужный узел

 {

  if((str(curr->name,n)==1)&&(str(curr->country,c)==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->date[0],curr->date[1],curr->date[2]);

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_up(curr->name, curr->country); //проверка увеличение ассортимента

}

 

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';

}

 


Информация о работе Информационно-справочная система "Экспорт"