Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сдача курсовой 
:(
    Опции темы
Jeronymo
Дата 9.5.2010, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 9.5.2010

Репутация: нет
Всего: нет



Динамическая обработка информация о наличии автобусов в парке.
Справочные сведения: [1, 4]
Указание:Сведения о каждом автобусе содержат:
1. № автобуса;
2. фамилию и инициалы водителя;
3. номер маршрута.
Программа должна обеспечивать:
а) формирование данных о всех автобусах в виде списка;
б) при выезде каждого автобуса из парка вводится номер автобуса, и про-грамма удаляет данные об этом автобусе из списка автобусов в парке;
в) при въезде каждого автобуса в парк вводится номер автобуса, и программа добавляет данные об этом автобусе в список автобусов в парке;
г) по запросу выдавать сведения об автобусах, находящихся в парке.
Код

#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>

//Стуктура времени

//Основная структура списка
struct bus
{
unsigned int id;//Идентификатор элемента
unsigned int next;//Идентификатор следующего элемента
unsigned int number;//Номер автобуса
unsigned int Notrack[20];//Станция назначения
char nam[15]; // Имя водителя
char fam[20]; // Фамилия водителя
};

bus * buss;//Список
unsigned int num_buss;//Кол-во элементов списка

//Процедура ввода данных
void InputData()
{
int result;
unsigned int num;

//Запрашиваем кол-во автобусов
//Далее используем подобные циклы для возращения к вводу при некорректных данных
do
{
printf("\nВведите количество автобусов:");
result=scanf("%u",&num);


}

//Цикл ввода автобусов

{

//динамически меняем размер списка при добавлении нового элемента
buss=(bus*)realloc(buss,(num_buss+1)*sizeof(bus)+1);
if(buss!=NULL)
{
//присваеваем идентификатор элементу
buss[num_buss].id=num_buss;
//связываем список
if(num_buss)buss[(num_buss-1)].next=buss[num_buss].id;

//увеличиваем количество записей
num_buss++;

//ввод номера автобуса
//зацикливаем если некорректный ввод
do
{
printf("\nВведите номер автобуса:");
result=scanf("%u",&buss[(num_buss-1)].number);
if(!result){printf("\nНеверный номер!\n");fflush(stdin);}
}while(!result);

//ввод номере маршрута
printf("Введите номер маршрута:");
scanf("%u",&buss[(num_buss-1)].Notrack);


}
num--;
}
}

//Процедура вывода всех элементов списка
void ListAll()
{
//если кол-во элементов - 0 - выводим сообщение
if(!num_buss){printf("\nСписок пуст!\n");}
else
{
unsigned int num=0;
//иначе - вывод списка в цикле
while(num<num_buss)
{
printf("\nАвтобус %u Номер маршрута %u. Имя водителя %s: Фамилия водителя %s:%u\n",buss[num].number,buss[num].Notrack,buss[num].nam,buss[num].fam);
num++;
}
}
}

//Процедура вывода информации о Автобусе
void busInfo()
{
unsigned int num_tr,num;
int result;
do
{
printf("\nВведите номер автобуса:");
result=scanf("%u",&num_tr);
if(!result){printf("\nНеверный номер!\n");fflush(stdin);}
}while(!result);

num=0;

//пробегаем в цикле по всем элементам списка
while(num<num_buss)
{
//если номер автобуса соответтвует введенному - выводим запись
if(buss[num].number==num_tr)
{
printf("\nНомер маршрута:%u. Номер автобуса:%u:%u\n",buss[num].Notrack,buss[num].number);
break;
}
num++;
}
}


//Точка входа
int _tmain(int argc, _TCHAR* argv[])
{
//пишем по-русски
setlocale(LC_ALL, "Russian");

//инициализация списка
//получаем указатель на пустой список
num_buss=0;
buss=(bus*)malloc(1);
if(buss!=NULL)
{

unsigned int mItem=0;

//Меню действий
while(1)
{

fflush(stdin);
printf("\nИнформационная система автовокзала\n\n");
printf("1.Ввод данных\n");
printf("2.Вывод всего списка\n");
printf("3.Вывод информации об Автобусе\n");
printf("4.Выход\n");
printf(">");
scanf("%u",&mItem);

if(mItem && mItem<5)
{
if(mItem==4)break;//4-выход
switch(mItem)
{
case 1:InputData();break;
case 2:ListAll();break;
case 3:busInfo();break;
}
}
printf("\n------------------------------------\n");
}
//Освобождаем память списка
if(buss!=NULL)free(buss);
}
return 0;
}


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

Это сообщение отредактировал(а) JackYF - 9.5.2010, 21:48
PM MAIL   Вверх
bsa
Дата 10.5.2010, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Если тебе нужно решать задачу через список, то ты должен написать следующие функции для работы с ним:
1. добавление в список
2. удаление из списка
3. поиск
4. удаление всего списка.

структура элемента двусвязного списка выглядит так:
Код
struct MyListItem
{
   struct MyListItem *prev;
   struct MyListItem *next;
   /* ... данные */
};


prev первого элемента списка и next последнего равны NULL. Остальные указывают на предыдущий/последующий элементы списка.

Удаление элемента из списка это 3 операции:
Код
if (item->prev != NULL)
   item->prev->next = item->next;
if (item->next != NULL)
   item->next->prev = item->prev;
free(item);


Вставка - это обратная операция:
Код
item->prev = pitem;
item->next = pitem->next;
pitem->next = item;
item->next->prev = item;
Не работает при добавлении в конец списка.
Для добавления в конец достаточно:
Код
last->next = item;
item->prev = last;
item->next = NULL;

Тут item это указатель на текущий элемент, last - указатель на последний элемент, pitem - указатель на непоследний элемент.


M
bsa
Почитай про оформление кода

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0655 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.