06.05.2013, 22:39 | #1 (permalink) |
Member
Регистрация: 10.12.2012
Сообщений: 26
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Структуры
1)название начального пункта маршрута; 2)название конечного пункта маршрута; 3)номер маршрута. Написать программу, выполняющую следующие действия: 1)добавление n записей в массив структур 2)записи должны упорядочиваться по номерам маршрутов; 3)вывод на экран информации о маршруте, номер которого введен с клавиатуры; 4)если таких маршрутов нет, выдать на дисплей соответствующее сообщение. 5) удаление элементов массива, введенных с клавиатуры все сделал,только как удалить элементы из массива, введенные с клавиатуры Код:
#include <iostream> #include <limits.h> //для INT_MAX #include <iomanip> //для setw() #include <fstream> //для файлового ввода/вывода using namespace std; //Структура Маршрута struct MARSH { char NameStart [16]; //Начальный пункт маршрута char NameEnd [16]; //Конечный пункт маршрута int Number; // Номер маршрута }; int Count = 0; //Введеное кол-во маршрутов const int MaxEl = 8; //Размерность массива MARSH El[MaxEl]; // Массив элементов //Функция вывода меню char ShowMenu (void) { cout<< "-----------------------"<<endl<< " MENU "<<endl<< "-----------------------"<<endl<< "<1> - Input Marshrut"<<endl<< "<2> - Print All Marshrut"<<endl<< "<3> - Print Marshrut of Number"<<endl<< "<4> - Quit"<<endl<<endl<< "<5> - Save To File"<<endl<< "<6> - Load From File"<<endl; cout<<": "; return getchar(); //Ожидаем ввода }; //Функция Добавление элемента bool Add() { MARSH Temp; //Временная переменная структуры cin.sync(); //Синхронизируем входной поток (В нем скорее всего необработаная эскейп-последовательность //или код ентера cout<<endl<< //Рисуем шапка "----------------------------------------"<<endl<< " Input new Marshrut"<<endl<< "----------------------------------------"<<endl; cout<<"Enter Start Marshrut: "; //Вводим начало маршрута cin.getline(Temp.NameStart,16); cout<<"Enter End Marshrut: "; //Водим конец маршрута cin.getline(Temp.NameEnd,16); cout<<"Enter Number (#) Marshrut: "; //Вводи номер маршрута cin>>Temp.Number; cout<<endl; if (Count < MaxEl) //Проверяем что бы массив был не переполнен (Условие задачи [8]) { El[Count] = Temp; //Помещяем элемент в массив Count ++; //Интерементируем кол-во элементов } else { //Если переполнение cout<<endl<<"False :Massive is FULL"<<endl; cin.sync(); return false; } cin.sync(); return true; } //Функция сортивовки Массива элементов void Sort (void) { for (int i = 0; i< Count; i++) { int Min = INT_MAX; //Максимальное значение Int int minPos = -1; //Позиция с минимальным элементом for (int j=i; j<Count;j++) //Перебираем { if (El[j].Number<Min)//Ищим наименьший элемент { Min = El[j].Number; minPos = j; } MARSH Temp; //Меняем местами по-возрастанию Ном. маршрута элементы Temp = El[i]; El[i] = El[minPos]; El[minPos] = Temp; } } } //Функция вывода Элементов Массива (Всех void Print(void) { //Рисуем шапку setw(int) длина поля для вывода cout<<setw(3)<<" "<<setw(6)<<"# "<<setw(17)<<"Start Marshrut "<<setw(17)<<"End Marshrut "<<endl<< "------------------------------------------"<<endl; cout.setf(ios::left); //Обходим массив элементов и печатаем все for (int i=0; i < Count; i++) { cout<<setw(3)<<i+1<<setw(6)<<El[i].Number<<setw(17)<<El[i].NameStart<<setw(17)<<El[i].NameEnd<<endl; } cout.unsetf(ios::left); cout<<"------------------------------------------"<<endl<<endl; cin.sync(); //синхронизация потока и задержка cin.get(); } //Функции проверки маршрута по его номеру и вывод его на экран void PrintOfNumMars(void) { int NumMarsh; // Номер маршрута cin.sync(); cout<<endl<<"Input No Marshruta : "; cin>>NumMarsh; //Получаем номер маршрута cout<<endl; //Обходим весь цикл элементов for (int i=0; i < Count; i++) { //Пытаемся найти требуемый номер маршрута //если нашли отрисовываем шапку выводим элемент и выходи return ом из функции if (El[i].Number == NumMarsh) { cout<<setw(3)<<" "<<setw(6)<<"# "<<setw(17)<<"Start Marshrut "<<setw(17)<<"End Marshrut "<<endl<< "------------------------------------------"<<endl; cout<<setw(3)<<i+1<<setw(6)<<El[i].Number<<setw(17)<<El[i].NameStart<<setw(17)<<El[i].NameEnd<<endl; cin.sync(); //синхронизация потока и задержка cin.get(); return; } } //Если не нашли элемента с треб. номером пишим что ничего не вышло :-) cout<<"Marshrut "<<NumMarsh<<" NOT FOUND"<<endl; cin.sync(); //синхронизация потока и задержка cin.get(); } //Функция сохранения массива элементов в файл void SaveToFile(void) { char filename[256]; //Имя файла cout<<endl<<"Input Filename to Save Date : "; cin.sync(); cin.get(filename,256); //Вводим имя файла ofstream OutFile(filename,ios::binary); //Определяем выходной поток и делаем его бинарным for (int i=0; i < Count; i++) { OutFile.write(reinterpret_cast<char*>(&El[i]),sizeof(El[i])); //Пишим элементы в файл } OutFile.close(); //Закрываем файл } //Функция загрузки массива из файла void LoadFromFile(void) { char filename[256]; //Имя файла cout<<endl<<"Input Filename to Load Date : "; cin.sync(); cin.get(filename,256); //Получение имени файла ifstream InFile(filename,ios::binary); //Определение входного потока как бинарного Count = 0; InFile.read(reinterpret_cast<char*>(&El[Count]),sizeof(El[Count])); //Читаем первый элемент из файла while (!InFile.eof()) // Пока не конец файла читаем остальные элементы { InFile.read(reinterpret_cast<char*>(&El[Count]),sizeof(El[Count])); Count++; } InFile.close(); //Закрываем файл } //Входная функция программы int main (void) { char ch=0; while (ch !='4') //Пока не введено '4' - ВЫХОД, то повторять меню { cin.sync(); ch = ShowMenu(); switch (ch) { case '1': Add();Sort();break; case '2': Print();break; case '3': PrintOfNumMars();break; /* case '5': SaveToFile();break; case '6': LoadFromFile();break;*/ } } return 0; } |
06.05.2013, 22:39 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Если решение проблемы затянулось, можете пролистать аналогичные темы Структуры Программирование циклической структуры в Pascal ABC Программирование алгоритмов разветвляющейся структуры Структуры Структуры |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|