Эти пункты более подробно объяснены в Приложении 1.
3. Входные и выходные данные.
Если посмотреть, как работает программа (пример ее реализации показан в Приложении 2), то можно убедиться что выходные данные полностью соответствуют входным, а это значит что программа работает корректно.
Заключение
В нашем случае мы использовали для написания программы двоичное дерево поиска. Закрепили теоретические знания и приобрели практические навыки по изучаемой дисциплине при разработке программного обеспечения для организации работы ж/д вокзала. А также выполнили задачи курсового проектирования:
– изучили особенности работы вокзала;
– анализировали возможные подходы и методы решения с обоснованием выбранного подхода;
– выбрали модель, необходимую для достижения цели;
– выбрали эффективные алгоритмы с учетом их точности, устойчивости, сходимости;
– разработали программное обеспечение;
– анализировали полученные результаты работы ПО.
Так как людям стало удобнее получать деньги и класть денежные средства на мобильные телефоны через банкоматы, то большая перспектива лежит в дальнейшем развитии «Расписание ж/д 2007». Это будет более удобный вариант для просмотра информации, не будет создаваться больших очередей возле касс, для того чтобы только спросить, оператору удобнее смотреть на экран и оповещать зал ожидания.
Литература
1. Герберт Шилдт Теория и практика на С++: пер. с англ. – СПб.: BNV – Санктл-Петербург, 1996.-416 с.
2. Павловская Т.А. С/С++. Программирование на языке высокого уровня – СПб: Питер, 2004. – 461 с.: ил.
3. Хусаинов Б.С. Структуры и алгоритмы обработки данных. Примеры на языке Си: Учеб. пособие. – Финансы и статика, 2004. – 464 с.: ил. Березин Б.И.
4. Березин С.Б. Начальный курс С и С++ – М.: ДИАЛОГ – МИФИ, 1996 – 288 с.
5. Кузин А.В. Базы данных: Учеб. пособие для студ. высш. учеб. заведений / А.В. Кузин, С.В. Левонисова. – М.: Издательский центр «Академия», 2005. – 320 с. ISBN 5–7695–1796–4
Приложение 1
Программа:
#include<stdio.h>
#include<conio.h>
#include<alloc.h>
#include<string.h>
#include<io.h>
#define k 5
#define TREE struct der
struct SISTEMA
{char st[20]; // станцияназначения
int nom_p; // nom_p‑номерпоезда
float vr; //vr‑время отправления
};
TREE
{SISTEMA w;
int c; // счетчик повторяющихся элементов
TREE *l; // ссылка влево
TREE *r; // ссылка вправо
};
TREE *q,*pr,*nom,*kr=0; // ссылки на корень дерева
SISTEMA *T;
char *menu[k] [60];
int i, pp, m; char key[20]; char name[20];
int Main_Menu(void); // функцияменю
int Poisk_nom_p (TREE *d, int v); // поиск по номеру поезда
TREE *der (TREE *kr, SISTEMA word); // формированиедерева
void Crt_Der(); // Запись в дерево информации и вывод дерева на экран
void print_der (TREE *kr); // Печатьдерева
int Poisk_st (TREE *d, char s[20]); // поиск по станции назначения
int main()
{pp=1; T=0;
*menu[0]= «1. Создание дерева»;
*menu[1]= «2. Чтение дерева»;
*menu[2]= «3. Поиск по номеру в дереве»;
*menu[3]= «4. Поиск по названию станции в дереве»;
*menu[4]= «5. Конец работы»;
*menu[5]= «Введите номер строки:»;
clrscr();
printf (« «Расписание ж/д 2007»\n»);
while(pp)
{Main_Menu();
clrscr();
}
printf («Конец работы с деревьями\n»);
return 0;
}
/*Функцияменю*/
Main_Menu(void)
{int ns, s;
flushall();
do
{for (i=0; i<k; i++)
printf («\n % s»,*menu[i]);
printf («\n»);
if (s=((scanf («%d»,&ns)<1)))
{flushall(); clrscr();
printf («\n Ошибкавномере!! Будтевнимательны»);
}
}
while(s);
switch(ns)
{case 1: Crt_Der(); break;
case 2: print_der(kr);
getche();
break;
case 3:
/*Поиск по времени*/
printf («\n Введите номер поезда:»);
int v;
scanf («%d»,&v);
Poisk_nom_p (kr, v); break;
case 4:
/*Поиск по станции назначения*/
int sr/*, fl*/;
char s[20];
printf («\n Введите станцию назначения:»);
scanf («%s», s);
Poisk_st (kr, s); break;
case 5: pp=0;
} return 0;
}
/*Формирование дерева*/
TREE *der (TREE *kr, SISTEMA word)
{if (kr==NULL) // дерево пустое, записываем информацию в вершину
{kr=new TREE; // выделяется память под новый элемент
printf («\n Номерпоезда % d», word.nom_p);
printf («\n Станция назначения % s», word.st);
printf («\n Время отправления%.2f», word.vr);
kr->w=word; // присваиваем информацию
kr->c=1;
kr->l=kr->r=NULL;
}
else if (word.nom_p==kr->w.nom_p) // сравниваем поступившую информацию с информацией в узле
kr->c++; // элементы одинаковы, включается счетчик
elseif (word.nom_p<kr->w.nom_p) kr->l=der (kr->l, word); // пока не встретится 0
else kr->r=der (kr->r, word); // иначевправо
return kr;
}
/*Запись в дерево информации и вывод дерева на экран*/
void Crt_Der()
{
SISTEMA a;
a.nom_p=0;
while (a.nom_p!=-1)
{
printf («\n Введите номер поезда: (-1 – выход)»);
scanf («%d», &a.nom_p);
if (a.nom_p==-1)
break;
flushall();
{printf («\n Введите название станции:»);
scanf («%s», a.st);
printf («\n Введите время отправления:»);
scanf («%f», &a.vr);
if (a.nom_p!=-1)
kr=der (kr, a);
}
}
}
/*Печать дерева*/
void print_der (TREE *kr)
{if(kr)
{print_der (kr->l); // обходлевыхветвей
printf («\n Номерпоезда % d», kr->w.nom_p);
printf («\n Станция назначения % s», kr->w.st);
printf («\n Время отправления%.2f», kr->w.vr);
printf («\n»);
print_der (kr->r); // обход правых ветвей
}
}
/*Поиск по номеру поезда*/
int Poisk_nom_p (TREE *d, int v)
{
if (d==NULL)
{
printf («\n \t Элемент с заданным ключом не найден\n»);
return 0;
}
else // Поиск элемента с заданным ключом
{if (v==d->w.nom_p)
{
printf («\n Станция назначения % s», d->w.st);
printf («\n Время отправления%.2f», d->w.vr);
// print_der(kr);
getch();
}
/*Рекурсивный обход*/
if (v<d->w.nom_p) Poisk_nom_p (d->l, v);
if (v>d->w.nom_p) Poisk_nom_p (d->r, v);
}
}
/*Поискпоназваниюстанции*/
int Poisk_st (TREE *d, char s[20])
{int sr, fl;
if (d==NULL)
printf («\n \t Элемент с заданным ключом не найден\n»);
else // Поиск элемента с заданным ключом
{sr=strcmp (s, d->w.st);
if (sr<0)
{q=d; // сохраняем предидущую вершину
fl=1; // двигаемся влево
Poisk_st (d->l, s); // спускаемся влево
}
else
if (sr>0)
{q=d; // сохраняем предидущую вершину
fl=0; // двигаемся вправо
Poisk_st (d->r, s); // спускаемся вправо
}
else // нужный ключ (станция назначения) найден
{if (sr==0)
printf («\n Номер поезда % d», kr->w.nom_p);
printf («\n Время отправления%.2f», kr->w.vr);
getch();
}
/*Рекурсивныйобход*/
if (s<d->w.st) Poisk_st (d->l, s);
if (s>d->w.st) Poisk_st (d->r, s);
}
}