Реферат: Создание базы данных о поездах дальнего следования

Федеральное агентствоРоссийской Федерации по атомной энергии

Снежинскаягосударственная физико-техническая академия

КУРСОВОЙ ПРОЕКТ

На тему:

«Создание базыданных о поездах дальнего следования»

Снежинск 2006


Реферат

 

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


1. Описаниепрограммы и её модулей

Для удобствапользования в программе реализовано меню. В нем идет описание работы посозданию, чтению дерева, поиску по номеру в дереве, поиску по названию станции.

int main()

{pp=1; T=0;

*menu[0]= «1. Создание дерева»;

*menu[1]= «2. Чтение дерева»;

*menu[2]= «3. Поиск по номеру в дереве»;

*menu[3]= «4. Поиск по названию станции в дереве»;

*menu[4]= «5. Конец работы»;

*menu[5]= «Введите номер строки:»;

clrscr();

}

/*Функция меню*/

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;

}

Просмотрим функциидля реализации программы:

1) Функция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++;

else if (word.nom_p<kr->w.nom_p)kr->l=der (kr->l, word);

else kr->r=der (kr->r, word;

return kr;

)

Функция предназначена для формирования дерева. Если дерево пустое,записываем информацию в вершину. Выделяется память под новый элемент,сравнивается поступившая информация с информацией в узле. Если элементыодинаковы, включается счётчик.

 

2) Функция voidCrt_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);

}

}

}

Функция предназначена для записи в дерево информации и выводдерева на экран.

 

3) Функция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);

}

}

Функция предназначена для печати дерева. В print_der (kr->l) используется обход левых ветвей, иначев print_der (kr->r) обход правых ветвей.

 

4) ФункцияintPoisk_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);

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

}

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

5) Функцияint Poisk_st (TREE *d, chars[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);

}

}

Функция предназначена для поиска по названию станции.Осуществляется поиск элемента с заданным ключом. (q=d – сохраняемпредыдущую вершину, fl=1 – двигаемся влево,

Poisk_st (d->l, s) – спускаемсявлево, fl=0 – двигаемся вправо, Poisk_st (d->l, s) – спускаемсявправо). Используется рекурсивный обход.

2. Программнаядокументация

Техническоезадание, определяющее требования, предъявляемые к ПО, необходимые стадии и срокиразработки, виды испытаний

1.        Введение.

Программа «Расписаниеж/д 2007» применяется в работе на ж/д вокзалах оператором и обычнымипользователями, т.е. людьми.

2.        Основаниедля разработки.

Разработкаэтого изделия ведется на основании помощи в работе по легкости создания ивведения изменений в расписание поездов дальнего следования.

3.        Назначениеразработки.

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

4.        Требованияк программе:

            Требованияк функциональным характеристикам.

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

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

            Условияэксплуатации.

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

            Требованияк информационной и программной совместимости.

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

5.        Требованияк программной документации.

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

6.        Технико-экономическиепоказатели.

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

7.        Этапыразработки.

Разрабатываетсяпрограмма по этапам. Вначале создается база данных о поездах дальнегоследования (вводится номер поезда, название станции назначения, времяотправления), после обеспечивается ее вывод на экран, далее можно осуществлять поискпо номеру и названию станции.

8.        Порядокконтроля и приемки.

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

Программаи методика испытаний

1.        Объектиспытаний.

Наименованиепрограммного продукта – «Расписание ж/д 2007». Применяется этот продукт можетна ж/д вокзалах как оператором, так и простыми людьми. «Расписание ж/д 2007»проходит эксплуатацию в целях упрощения работы обслуживающего персонала.

Техническоезадание:

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

1)    Номер поезда

2)        Названиестанции

3)        Времяотправления

Поискосуществлять по номеру поезда и по названию станции.

2.        Цельпроведения испытаний.

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

3.        Требованияк программе.

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

4.        Требованияк программной документации.

Состав программнойдокументации состоит из объекта испытаний, который и включает в себятехническое задание, цели проведения испытаний, определенных требований кпрограмме и список порядка проведения испытаний.

5.        Порядокпроведения испытаний.

1)        Созданиебазы данных о поездах дальнего следования.

2)        Просмотрполученной информации.

3)        Осуществитьпоиск в базе данных по номеру поезда.

4)        Осуществитьпоиск в базе данных по названию станции назначения.

Текстпрограммы

Текстпрограммы с подробными комментариями мы можем просмотреть в Приложении 1.Посмотрим назначение главных функций:

1.        ФункцияTREE *der (TREE *kr, SISTEMA word) – предназначена дляформирования дерева. Если дерево пустое, записываем информацию в вершину.Выделяется память под новый элемент, сравнивается поступившая информация синформацией в узле. Если элементы одинаковы, включается счётчик.

2.        Функцияvoid Crt_Der() – предназначена для записив дерево информации и вывод дерева на экран.

3.        Функцияvoid print_der (TREE *kr) – предназначена для печатидерева.

4.        Функцияint Poisk_nom_p (TREE *d, int v) – предназначена для поискапо номеру поезда.

5.        Функцияint Poisk_st (TREE *d, char s[20]) – предназначена для поискапо названию станции.

Описаниепрограммы, в которой содержатся сведения о логической структуре ифункционировании ПО

1.        Общиесведения.

Программаназывается «Расписание ж/д 2007». Язык программирования, на котором написанапрограмма – С++.

2.        Функциональноеназначение.

Классырешаемых задач:

1)     Созданиебазы данных о поездах дальнего следования.

2)     Чтениебазы данных.

3)     Поискпо номеру поезда.

4)     Поискпо названию станции назначения.

3.        Описаниелогической структуры.

            Функцияvoid Crt_Der() – предназначена для записив дерево информации и вывод дерева на экран.

3.2.   Функцияvoid print_der (TREE *kr) – предназначена для печатидерева.

            Функцияint Poisk_nom_p (TREE *d, int v) – предназначена для поискапо номеру поезда.

3.4.   Функцияint Poisk_st (TREE *d, char s[20]) – предназначена для поискапо названию станции.

4.        Входныеданные.

Должны бытьвведены такие данные как: номер поезда, станция назначения, время отправления:

Введите номерпоезда: (-1 – выход) 2

Введитеназвание станции: Moskva

Введите времяотправления: 13.05

5.        Выходныеданные.

Должнысоответствовать входным данным:

Номер поезда2

Станцияназначения Moskva

Времяотправления 13.05

Обычнопрограммы разрабатываются в расчете на то, чтобы ими могли пользоваться люди,не участвующие в их разработке (их называют пользователями). Для освоенияпрограммы пользователем помимо ее текста требуется определенная дополнительнаядокументация. Программа или логически связанная совокупность программ наносителях данных, снабженная программной документацией, называется программнымсредством (ПС). Программа позволяет осуществлять некоторую автоматическуюобработку данных на компьютере. Программная документация позволяет понять,какие функции выполняет та или иная программа ПС, как подготовить исходныеданные и запустить требуемую программу в процесс ее выполнения, а также: чтоозначают получаемые результаты (или каков эффект выполнения этой программы).Кроме того, программная документация помогает разобраться в самой программе,что необходимо, например, при ее модификации.

1.        Назначениеи область применения.

Применяетсяэтот продукт может на ж/д вокзалах как оператором, так и простымипользователями. Его название «Расписание ж/д 2007» говорит о назначении, т.е. оновой, улучшенной и простой работе для персонала.

2.        Техническиехарактеристики.

Постановказадачи.

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

Описаниеалгоритма и программы.

Программаначинает работать со специального меню, в котором описаны следующие пункты:

5)        Созданиебазы данных о поездах дальнего следования.

6)        Просмотрполученной информации.

7)        Осуществитьпоиск в базе данных по номеру поезда.

Осуществитьпоиск в базе данных по названию станции назначения.

При помощиэтого меню пользователь может выбрать нужный ему пункт, а также посмотретьинтересующую его информацию.

Первый пунктпредназначен для создания базы и заполнения или программистом, или специальнообученным сотрудником ж/д вокзала;

Второй пунктпредназначен для просмотра общей информации;

Третий пунктпредназначен для пользователей. В строке «Введите номер поезда» вводитсяискомый номер поезда и после нажатия Enter программа осуществляет поиск по номеру поезда. Врезультате выдаются сведения о станции назначения и времени отправления.

Четвертыйпункт также предназначен для пользователя. В строке «Введите станциюназначения» вводится искомая станция назначения и после нажатия Enter программа осуществляетпоиск по названию станции. В результате выдаются сведения о номере поезда ивремени отправления. Если до станции назначения идут поезда и в разное время,то на экран выводятся все данные о поездах идущих до этой станции.

Пятый пунктпредназначен для возврата к самой программе.

Выборалгоритма произведен на основании метода «Двоичное дерево».

3.        Ожидаемыетехнико-экономические показатели.

Преимуществовыбранного варианта технического решения: удобная и облегченная работа дляперсонала.

4.        Источники,используемые при разработке.

Хусаинов Б.С.«Структуры и алгоритмы обработки данных. Примеры на языке Си: Учеб. пособие. –Финансы и статика, 2004. – 464 с.: ил.».

3. Эксплуатационная документация

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

При эксплуатации программа ведёт себя таким образом:

1.        Созданиедерева.

Вводим номерпоезда, название станции и время отправления поезда. После того как ввели вседанные в строке «Введите номер поезда: (-1 – выход)» вводим -1 для того чтобывыйти в основное меню.

Протестированныйответ:

Введите номерпоезда: (-1 – выход) 2

Введитеназвание станции: Moskva

Введите времяотправления: 13.05

Номер поезда2

Станцияназначения Moskva

Времяотправления 13.05

Введите номерпоезда: (-1 – выход) 1

Введитеназвание станции: Kasli

Введите времяотправления: 12.10

Номер поезда1

Станцияназначения Kasli

Времяотправления 12.10

Введите номерпоезда: (-1 – выход) 3

Введитеназвание станции: Kasli

Введите времяотправления: 15.35

Номер поезда3

Станцияназначения Kasli

Времяотправления 15.35

Введите номерпоезда: (-1 – выход) 5

Введитеназвание станции: Kirov

Введите времяотправления: 11.55

Номер поезда5

Станцияназначения Kirov

Времяотправления 11.55

Введите номерпоезда: (-1 – выход) 4

Введитеназвание станции: Volgograd

Введите времяотправления: 17.55

Номер поезда4

Станцияназначения Volgograd

Времяотправления 17.55

Введите номерпоезда: (-1 – выход) – 1

2.        Чтениедерева.

При вызовеэтого пункта меню просматривается вся введенная информация в пункте 1. Длявыхода в основное меню нужно нажать Enter.

Протестированныйответ:

Номер поезда1

Станцияназначения Kasli

Времяотправления 12.10

Номер поезда2

Станцияназначения Moskva

Времяотправления 13.05

Номер поезда3

Станцияназначения Kasli

Времяотправления 15.35

Номер поезда4

Станцияназначения Volgograd

Времяотправления 17.55

Номер поезда5

Станцияназначения Kirov

Времяотправления 11.55

3.        Поискпо номеру поезда.

Для поиска потакой информации нужно ввести предварительные данные такие как: номер поезда.Если такой поезд на данный момент совершает рейс, то поисковая база выведет натабло все данные об этом поезде. Если же такого поезда нет, то на табловысветится фраза «Элемент с заданным ключом не найден».

Протестированныйзапрос:

Введите номерпоезда: 4

Протестированныеответы:

Станцияназначения Volgograd

Времяотправления 17.55

Протестированныйзапрос:

Введите номерпоезда: 7

Протестированныйответ:

Элемент сзаданным ключом не найден

4.        Поиск по названию станции в дереве.

Для поиска потакой информации нужно ввести предварительные данные такие как: станцияназначения. Если такой поезд на данный момент совершает рейс, также он можетбыть не один, то поисковая база выведет на табло все данные об этих поездах.Если же такого поезда нет, то на табло высветится фраза «Элемент с заданнымключом не найден».

Протестированныйзапрос:

Введитестанцию назначения: Kasli

Протестированныеответы:

Номер поезда1

Времяотправления 12.10

Номер поезда3

Времяотправления 15.35

Протестированныйзапрос:

Введитестанцию назначения: Krasnodar

Протестированныйответ:

Элемент с заданным ключом не найден

Формуляр, который определяет основные характеристики ПО,комплектность и сведения об эксплуатации

1.      Общиеуказания.

Перед эксплуатацией необходимо ознакомиться с соответствующимэксплуатационным документом (смотри Приложение 1).

1.        Общие сведения.

Наименование программного изделия – «Расписание ж/д 2007». Этопробная программа для улучшения деятельности оператора ж/д вокзала. Программныйпродукт поможет с легкостью создавать базу данных и осуществлять поиск данныхпо ней. В работе не применяется сложных операций, поэтому с этой программой легкоработать.

2.        Основные характеристики.

Вся программа основывается на функциях:

1)        Функцияvoid Crt_Der() – предназначена для записив дерево информации и вывод дерева на экран.

2)      Функцияvoid print_der (TREE *kr) – предназначена для печатидерева.

3)      Функцияint Poisk_nom_p (TREE *d, int v) – предназначена для поискапо номеру поезда.

4)      Функция int Poisk_st (TREE *d, char s[20]) – предназначенадля поиска по названию станции.

Эти функции и выполняют главные задачи, предназначенные выполнениюпрограмме.

3.        Комплектность.

Других программных изделий в это программное изделие не входит.Ведомость эксплуатационных документов можно посмотреть в Приложении 2.

4.        Периодический контроль.

Контроль производится после каждого выполнения отдельной функции,покажем это на примере.

Вводимыеданные:

Введите номерпоезда: (-1 – выход) 1

Введитеназвание станции: Kasli

Введите времяотправления: 12.10

Контроль заданными:

Номер поезда1

Станцияназначения Kasli

Время отправления 12.10

Описание применения, в котором содержаться сведения о назначении,области применения ПО, методах и классе решаемых задач

1.        Назначение программы.

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

2.        Описание задачи.

Задачареализована с помощью меню в котором описаны начальные данные о:

1)      Созданиебазы данных о поездах дальнего следования.

2)      Просмотрполученной информации.

1)        Осуществитьпоиск в базе данных по номеру поезда.

Осуществитьпоиск в базе данных по названию станции назначения.

Эти пунктыболее подробно объяснены в Приложении 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]; charname[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 % s%.2f»,word.nom_p, word.st, word.vr);

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++; // элементы одинаковы, включается счетчик

else if (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);

}

}

еще рефераты
Еще работы по информатике, программированию