Сдача курсовой

Тема в разделе "C/C++/C#", создана пользователем Jeronymo, 16 май 2010.

Статус темы:
Закрыта.
  1. Jeronymo

    Jeronymo Гость

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

    Код (C++):
    #include <stdio.h>
    #include <tchar.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <string.h>

    //Основная структура списка
    typedef 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);
    if(!result)
    {
    printf("\nОшибка!\n");
    //Чистим буфер ввода
    fflush(stdin);
    }
    }while(!result);
    //Цикл ввода автобусов
    while(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);

    //ввод имени и фамилии водителя
    printf("Введите имя водителя:");
    scanf("%s",&buss[(num_buss-1)].nam);
    printf("Введите фамилию водителя:");
    scanf("%s",&buss[(num_buss-1)].fam);

    }
    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;
    }
     
  2. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Твоя попытка организовать линейные списки немного неудачна.
    Мой совет: для хранения информации об автобусе опиши структуру с нужными полями, и добавь поле признака нахождения автобуса, например, если ноль - в парке, если единица - выехал. Это и будет твой пункт "бэ". Потом при просмотре списка можно это поле проверять на значение. Пусть эта структура хранит только информацию об автобусе.
    Затем опиши ещё одну структуру - так называемый "элемент списка". Он будет включать себя структуру - информацию об автобусе, и указатель на следующий элемент.
    Затем останется реализовать добавление, удаление элементов, а также просмотр и поиск по списку.
    Для верности можно попробовать сохранять весь список в файл, и при следующем запуске программы считывать его, чтобы не заносить данные с нуля.

    <!--shcode--><pre><code class='c++'>typedef struct businfo
    {
    int Nomer;
    char FIO;
    int Viehal;
    ...............
    };

    typedef struct
    {
    businfo Bus;
    ListElement *next;
    } ListElement, *ListElement;

    ListElement *NachaloSpiska;
    ..........................[/CODE]
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей