Новичок
Профиль
Группа: Участник
Сообщений: 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
|