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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь, немного дописать прогу 
V
    Опции темы
X_Hunter
Дата 8.6.2008, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В общем надо сделать информационно-аналитическую систему (ИАС), обрабатывающую расписание движения поездов.Большую часть уже написал,осталось всего пара функций...а как их реализовать - хз...

Задание - 
1) В выбранной пользователем в ветке из каждой группы подряд идущих станций с одинаковым временем стоянки оставить только первую;

Заголовочный:
Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <windows.h>

using namespace std;

struct st
{
    char name[20];
    int leave[2];
    int arrive[2];
    int dist;
    st *next,*back;
};

struct branch
{
    st *head,*tail;
    int kol;
};

struct Names
{
    char name[20];
};

void AddSt(int mv,branch *Array[])
{
    st *Temp;
    int s;
    cout<<endl<<"Введите номер ветки:"<<endl;
    cin>>s;
    if(s<1 || s>mv) {cout<<endl<<"Нет такой ветки!"<<endl;return;}
    if(Array[s]->kol==0)
    {
        Temp=Array[s]->head;
        Temp=new st;
        Temp->next=NULL;
        Temp->back=NULL;
        cout<<endl<<"Введите название станции:"<<endl;
        cin>>Temp->name;
        cout<<endl<<"Введите время прибытия:"<<endl;
        cin>>Temp->arrive[0];
        cin>>Temp->arrive[1];
        cout<<endl<<"Введите время отправления:"<<endl;
        cin>>Temp->leave[0];
        cin>>Temp->leave[1];
        cout<<endl<<"Введите время стоянки:"<<endl;
        cin>>Temp->timeStop;
        cout<<endl<<"Введите расстояние до следующей станции:"<<endl;
        cin>>Temp->dist;
        Array[s]->head=Temp;
        Array[s]->tail=Temp;
        Array[s]->kol++;
    }
    else
    {
        Temp=new st;
        Temp->back=Array[s]->tail;
        Temp->next=NULL;
        Array[s]->tail->next=Temp;
        Array[s]->tail=Temp;
        cout<<endl<<"Введите название станции:"<<endl;
        cin>>Temp->name;
        cout<<endl<<"Введите время прибытия:"<<endl;
        cin>>Temp->arrive[0];
        cin>>Temp->arrive[1];
        cout<<endl<<"Введите время отправления:"<<endl;
        cin>>Temp->leave[0];
        cin>>Temp->leave[1];
        cout<<endl<<"Введите время стоянки:"<<endl;
        cin>>Temp->timeStop;
        cout<<endl<<"Введите расстояние до следующей станции:"<<endl;
        cin>>Temp->dist;
        Array[s]->kol++;
    }
    cout<<endl<<"Станция успешно добавлена"<<endl<<endl;
}

void DelSt(int mv,branch *Array[])
{
    st *Temp;
    int a;
    char b[20];
    cout<<"Введите номер ветки ";
    cin>>a;
    if (a<1 || a>mv) {cout<<"Такой ветки нет!"<<endl;return;}
    Temp=Array[a]->head;
    if (Array[a]->kol==1)
    {
        Array[a]->kol=0;
        Array[a]->head=NULL;
        Array[a]->tail=NULL;
        return;
    }
    cout<<endl<<"Введите имя станции: ";
    cin>>b;
    while (Temp!=NULL)
    {
        if (strcmp(Temp->name,b)==0)
        {
            if (Temp==Array[a]->head)
            {
                Array[a]->head=Temp->next;
                Temp->next->back=NULL;
                Array[a]->kol=Array[a]->kol-1;
            }
            if (Temp==Array[a]->tail)
            {
                Temp->back->next=NULL;
                Array[a]->tail=Temp->back;
                Array[a]->kol=Array[a]->kol-1;
            }
            if (Temp->back!=NULL && Temp->next!=0)
            {
                Temp->back->next=Temp->next;
                Temp->next->back=Temp->back;
                Array[a]->kol=Array[a]->kol-1;
            }
        }
        Temp=Temp->next;
    
    }
}
void Edit(int mv,branch *Array[])
{
    st *Temp;
    int a;
    char o[20];
    cout<<"Введите номер ветки: ";
    cin>>a;
    if (a<1 || a>mv) {cout<<"Такой ветки нет"<<endl;return;}
    Temp=Array[a]->head;
    cout<<"Введите название станции: ";
    cin>>o;
    while (Temp!=NULL)
    {
        if (strcmp(Temp->name,o)==0)
        {
            cout<<"Введите новое имя:"<<endl;
            gets(o);
            cin>>Temp->name,o;
            cout<<endl<<"Введите новое время прибытия: ";
            cin>>Temp->arrive[0];
            cin>>Temp->arrive[1];
            cout<<endl<<"Введите новое время отправления: ";
            cin>>Temp->leave[0];
            cin>>Temp->leave[1];
            cout<<endl<<"Введите новое расстояние до следующей станции: ";
            cin>>Temp->dist;
            cout<<endl<<"Данные станции изменены!"<<endl;
        }
        Temp=Temp->next;
    }
}

void show(int mv,branch *Array[])
{
    int a;
    st *show;
    cout<<"Введите номер ветки: ";
    cin>>a;
    if(a<1 || a>mv) {cout<<"Такой ветки нет!"<<endl;return;}
    if(Array[a]->kol==0) {cout<<endl<<"В этой ветке нет станций"<<endl<<endl;return;}
    show=Array[a]->head;
    while (show!=NULL)
    {
        cout<<endl<<"Название станции: ";
        cout<<show->name;
        cout<<endl<<"Время прибытия: ";
        cout<<show->arrive[0];
        cout<<show->arrive[1];
        cout<<endl<<"Время отправления: ";
        cout<<show->leave[0];
        cout<<show->leave[1];
        cout<<endl<<"Расстояние до следующей станции: ";
        cout<<show->dist<<" км"<<endl;
        show=show->next;
        cout<<"\n";
    }
}

void save(int mv,branch *Array[])
{
    FILE *sohr;
    int i;
    st *Temp;
    sohr=fopen("sohr.txt","wt");
    fprintf(sohr,"%d ",mv);
    for (i=1;i<=mv;i++)
    {
        Temp=Array[i]->head;
        fprintf(sohr,"%d ",Array[i]->kol);
        if (Array[i]->kol!=0)
        {
        while(Temp!=NULL)
        {
            fprintf(sohr,"%s ",Temp->name);
            fprintf(sohr,"%d:%d ",Temp->arrive[0],Temp->arrive[1]);
            fprintf(sohr,"%d:%d ",Temp->leave[0],Temp->leave[1]);
            fprintf(sohr,"%d\n",Temp->dist);
            Temp=Temp->next;
        }
        }
    }
    fclose(sohr);
}

int read(branch *Array[])
{
    FILE *sohr;
    int a=0,i,j,b=0;
    st *Temp;
    if (fopen("sohr.txt","rt")==NULL) return 0;
    else 
    {
        sohr=fopen("sohr.txt","rt");
        fscanf(sohr,"%d ",&a);
        for (i=1;i<=a;i++)
        {
            Array[i]=new branch;
            fscanf(sohr,"%d ",&Array[i]->kol);
            b=0;
            for (j=0;j<Array[i]->kol;j++)
            {
                Temp=new st;
                fscanf(sohr,"%s ",&Temp->name);
                fscanf(sohr,"%d %d ",&Temp->arrive[0],&Temp->arrive[1]);
                fscanf(sohr,"%d %d ",&Temp->leave[0],&Temp->leave[1]);
                fscanf(sohr,"%d\n",&Temp->dist);
                if (b==0)
                {
                    Array[i]->head=Temp;
                    Array[i]->tail=Temp;
                    Array[i]->head->next=NULL;
                    Array[i]->head->back=NULL;
                }
                else
                {
                    Temp->next=NULL;
                    Temp->back=Array[i]->tail;
                    Array[i]->tail->next=Temp;
                    Array[i]->tail=Temp;
                }
                b=1;
            }
        }
    }
    fclose(sohr);
    return a;
}

int checker(int j,Names *mas[],st *Temp)
{
    int i;
    if (j==0) return 0;
    for (i=0;i<j;i++)
    {
        if (strcmp(Temp->name,mas[i]->name)==0) return 1;
    }
    return 0;
}



void spisok(int mv,branch *Array[])
{
    int br=1;
    st *Temp;
    if (mv==0) 
    {cout<<"Нет ни одной ветки!"<<endl;return;}
    cout<<"Введите номер ветки: ";
    cin>>br;
    if (br<1 || br>mv) {cout<<"Такой ветки нет!"<<endl;return;} 
    if(Array[br]->kol==0) {cout<<endl<<"В этой ветке нет станций!"<<endl<<endl;return;}

    while(br<=mv)
    {
        if (Array[br]->kol!=0)
        {
            Temp=Array[br]->head;
            while (Temp!=NULL)
        {
            if (Temp->dist=Temp->dist)
            {
                if(Temp->next!=NULL) {cout<<Temp->name<<"-"<<Temp->next->name<<endl;}  
            }
            Temp=Temp->next;
        }
        }
        br++;
    }
    return;
}

void copy(int mv, branch *Array[])
{
    int a;
    branch *Temp2;
    st *Temp;
    cout<<"Введите номер ветки, шаблон который вы хотите создать : ";
    cin>>a;
    if ((a < 0) || (a > mv)){cout << "Такой ветки нет! ";return;}
    else
    {
         Temp2=Array[a];
         Temp=Temp2->head;
         cout<<"Шаблон успешно создан.Cтанции на созданном шаблоне: \n";
         while (Temp!=NULL){cout<<"Cтанция \n",Temp->name;Temp=Temp->next;}
    }
}


Cpp-шный
Код

#include "Library.h"

void main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int a,b=0,c=0,mv=0;
    branch *Array[11];
    mv=read(Array);
    while(1)
    {
    cout<<"\t\t\tВыберите нужное действие:"<<endl<<endl;
    cout<<"1) Добавить ветку"<<endl;
    cout<<"2) Добавить станцию"<<endl;
    cout<<"3) Удалить ветку"<<endl;
    cout<<"4) Удалить станцию"<<endl;
    cout<<"5) Редактировать станцию"<<endl;
    cout<<"6) Вывести ветку на экран"<<endl;
    cout<<"7) Создать шаблон ветки"<<endl;
    cout<<"8) Количество станций с заданным временем стоянки"<<endl;
    cout<<"9) Вывести названия станций, время стоянки которых наименьшее"<<endl;
    cout<<"10) Из каждой группы подряд идущих станций с одинаковым временем стоянки оставить только первую"<<endl;
    cout<<"11) Перечень пар станций в порядке уменьшения расстояния между ними"<<endl;
    cout<<"12) Cписок пар станций, расстояние между которыми одинаковое"<<endl;
    cout<<"0) Сохранить и выйти"<<endl;
    cin>>a;

    switch (a)
    {
    case 1:
        {
            if (mv==10) {cout<<"Нельзя добавить больше 10 веток!\n\n";break;}
            mv++;
            Array[mv]=new branch;
            Array[mv]->kol=0;
            cout<<"Ветка "<<mv<<" добавлена"<<endl<<endl;
            break;
        }
    case 2:
        {
            AddSt(mv,Array);break;
        }
    case 3:
        {
            if (mv==0) {cout<<"Нет ни одной ветки!"<<endl<<endl;break;}
            cout<<"Введите номер удаляемой ветки:"<<endl<<endl;
            cin>>c;
            if (c<1 || c>mv) {cout<<"Нет такой ветки!"<<endl<<endl;break;}
            if (mv==1) {mv=0;break;}
            Array[c]=Array[mv];
            mv--;
            break;
        }
    case 4:
        {
            DelSt(mv,Array);break;
        }
    case 5:
        {
            Edit(mv,Array);break;
        }
    case 6:
        {
            show(mv,Array);break;
        }
    case 0:
        {
            save(mv,Array);return;
        }

    case 12:
        {
            spisok(mv,Array);break;
        }

    case 7:
        {
            copy(mv,Array);break;
        }


    }
}
}


Это сообщение отредактировал(а) X_Hunter - 8.6.2008, 21:50
PM MAIL   Вверх
bsa
Дата 9.6.2008, 12:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Во-первых, в заголовочном файле должны быть только объявления. А у тебя там в основном реализации. Это неправильно.
Во-вторых, у тебя есть список собственного изобретения, зачем? Почему не воспользовался std::list?
В-третьих, кто тебе мешает пройти весь список станций текущей ветки и запоминать времена стоянки, если время стоянки на текущей станции уже имеется в списке, то такую станцию удалить?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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