Разработка информационно-справочной системы расписания поездов

Реализация информационно-справочной системы расписания поездов в Microsoft Visual Studio 2008 на языке C#. Методика разработки и основное содержание данной программы, алгоритмы ее реализации. Требования к программе и оценка ее эффективности, листинг.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 19.08.2012
Размер файла 5,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

1. Постановка задачи

Реализация информационно-справочной системы расписания поездов в Microsoft Visual Studio 2008 на языке C#.

Программа предназначена для наиболее удобной и эффективной работы пользователя с расписаниями поездов, хранящихся в текстовых файлах. Пользователь может загрузить в программу любое интересующее его расписание и воспользоваться следующими функциями:

Изменить расписание:

1. Добавить поезд

2. Удалить поезд

3. Изменить отдельный параметр

Найти что-либо в расписании:

1. По пути отбытия поезда

2. По номеру

3. По времени

4. По маршруту

Также он может вывести изменённое расписание (или интересующую его часть расписания) в текстовый файл для дальнейшей печати.

программа справочный алгоритм листинг

2. Спецификация задачи

Ш В главном окне программы мы видим меню, предлагаемое пользователю.

1. Открыть расписание

2. Изменить расписание

3. Справка

4. Выход

5. Найти поезда

Но для того, чтобы потребить его в полной мере, ему необходимо открыть текстовый файл с расписанием поездов, которые хранятся внутри папки с программой (иначе функции «открыть расписание» и «найти поезда» остаются недоступными, об этом пользователь может догадаться по вылетающим сообщениям).

Ш До того как пользователь открыл расписание ему доступны кнопки «справка» и «выход».

1. Справка - появляется условие задачи, информация о разработчике и его научном руководителе.

2. Выход - появляется сообщение об уточнении выхода из программы

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

3. Функциональная декомпозиция задачи

4. Описания методов решения задачи

Выбор нужного расписания

Для того чтобы открыть расписание, пользователю нужно найти меню в главном окне программы и нажать кнопку с одноимённым названием. После этого на экране появляется DataGridView, туда и будет загружено наше расписание, и кнопка открыть. Нажав на кнопку «открыть», пользователь увидит окно и может выбрать нужный ему файл.

Замечание: в программе стоит фильтр, позволяющий открывать только текстовые файлы определённого формата. Данные файлы хранятся в папке «Курсовая работа».

Изменение расписания

Нажав на кнопку «Изменить расписание» пользователь может получить два варианта ответа:

Если расписание не открыто, на экране появится сообщение: «Чтобы изменить расписание, откройте его».

Чтобы воспользоваться функцией «изменить расписание», нужно совершить действия, описанные в пункте 1. После этого откроются следующие возможности.

Добавление поезда

При нажатии на кнопку «добавить поезд», на экране появляются 4 кнопки и 4 поля для ввода информации.

Для того чтобы добавить поезд, пользователь должен корректно заполнить все поля, а затем нажать кнопку «добавить»:

1. Поле «номер пути» нужно заполнять только целыми числами.

2. Поле «номер поезда» также заполняется только целыми числами.

3. Поле «время отправления» нужно заполнять так: часы и минуты вводятся через запятую. Если пользователь ввёл информацию неверно, то появляется сообщение о том, как правильно вводить время. Также имеются предупреждения о том, что в сутках 24 часа, а в одном часу 60 минут.

4. Поле «маршрут» только русскими буквами.

При наличии некорректного ввода, выдаётся сообщение об ошибке и подсказки о том, в каком формате следует вводить информацию, далее данное поле очищается. Также очищается и табло с расписанием, для того, чтобы вернуться к нему, следует нажать кнопку «вернуться к расписанию».

Если пользователь хочет добавить несколько поездов, то после каждого добавления ему надо нажимать кнопку «сохранить изменения».

Также существует возможность вывести изменённое расписание в текстовый файл.

Удаление поезда

При нажатии на кнопку «удалить поезд» в главном окне появятся кнопка «удалить» и поле для ввода информации. Также останутся кнопки «вернуться к расписанию», «сохранить изменения» и «печать».

Удаление поезда осуществляется по номеру. Пользователь заносит номер удаляемого поезда в поле для ввода информации, затем нажимает кнопку «удалить».

Если номер поезда введен некорректно, на экране появляется сообщение об ошибке и подсказка. Происходит очищение поля для ввода.

Если пользователь хочет вернуться к расписанию, надо нажать одноимённую кнопку.

Если пользователь хочет удалить несколько поездов, то после каждого удаления ему надо нажимать кнопку «сохранить изменения».

Также существует возможность вывести изменённое расписание в текстовый файл.

Изменить параметр

При нажатии на кнопку «изменить параметр» в главном окне появляются кнопки «изменить путь», «изменить номер», «изменить время», «изменить маршрут» и два поля для ввода информации. Также остаются кнопки «вернуться к расписанию», «сохранить изменения» и «печать».

Поиск поезда, в котором нужно изменить параметр, осуществляется по номеру. Номер поезда вводится в поле «номер изменяемого или удаляемого поезда» целым числом, имеется проверка на корректный ввод. Если поезда с таким номером не найдено, то вылетает оповещение об этом, после данное поле очищается.

Изменить путь

Для того чтобы изменить путь поезда, нужно ввести новый путь в поле «на что изменить» и нажать кнопку «изменить путь». Путь вводится целым числом, имеется проверка на корректный ввод.

Изменить номер

Для того чтобы изменить номер поезда, нужно ввести новый номер в поле «на что изменить» и нажать кнопку «изменить номер». Номер вводится целым числом, имеется проверка на корректный ввод.

Изменить время

Для того, чтобы изменить время отправления поезда, нужно ввести новое время в поле «на что изменить» и нажать кнопку «изменить время». Часы и минуты вводятся через запятую. Если формат ввода некорректный, то выдаётся сообщение об ошибке и подсказка. Также имеется проверка на то, что в сутках 24 часа, а в одном часу 60 минут.

Изменить маршрут

Для того чтобы изменить маршрут поезда, нужно ввести новый маршрут в поле «на что изменить» и нажать кнопку «изменить маршрут». Маршрут вводится русскими буквами, имеется проверка на корректный ввод.

Если пользователь хочет изменить несколько параметров, то после каждого изменения ему надо нажимать кнопку «сохранить изменения».

Если пользователь хочет вернуться к расписанию, надо нажать одноимённую кнопку.

Также существует возможность вывести изменённое расписание в текстовый файл.

Найти поезда

Нажав на кнопку «Найти поезда» пользователь может получить два варианта ответа:

Если расписание не открыто, на экране появится сообщение: «Чтобы найти что-то в расписание, откройте его». Чтобы воспользоваться функцией «найти поезда», нужно совершить действия, описанные в пункте 1.

После того, как расписание открыто, при нажатии на кнопку «найти поезда» на экране появляется 6 кнопок: «по пути», «по номеру», «по времени», «по маршруту», «вернуться к расписанию», «печать» и поле для ввода информации.

В зависимости от того, по какому из четырёх параметров вам нужно искать поезд, вы вводите в поле для ввода информацию.

Если вы ищите поезд по пути, то нужно заполнять поле только целыми числами.

Если вы ищите поезд по номеру, то нужно заполнять поле только целыми числами.

Если вы ищите поезд по времени, то поле для ввода информации нужно заполнять так: часы и минуты вводятся через запятую. Если пользователь ввёл информацию неверно, то появляется сообщение о том, как правильно вводить время. Также имеются предупреждения о том, что в сутках 24 часа, а в одном часу 60 минут.

Если вы ищите поезд по маршруту, то оно заполняется только русскими буквами. Разницы между введением заглавных и прописных букв нет.

Если пользователь хочет вернуться к расписанию, надо нажать одноимённую кнопку.

Справка

При нажатии на кнопку «справка» открывается Form2 с информацией о задаче и её разработчике. Если пользователю нужно вернуться в программу, следует закрыть Form2.

Выход

При нажатии на кнопку «выход» появляется сообщение о том, хотите ли вы выйти из программы. При нажатии на кнопку «да», программа закрывается, при нажатии на кнопку «нет» пользователь возвращается в программу.

5. Схемы алгоритмов

Схема алгоритма открыть расписание

Схема алгоритма изменить расписание

Добавить поезд

Удалить поезд

Изменить параметр

Для каждого параметра алгоритм одинаков.

Схема алгоритма найти поезд по одному из параметров

Для каждого параметра алгоритм одинаков.

Пример одного из параметров

Далее исследуется один из параметров

6. Диаграмма классов

7. Описание полей и методов

Класс Poezd

private int pyt-закрытое поле (номер пути)

private int nom - закрытое поле (номер поезда)

private double time - закрытое поле (время отбытия)

private string marshrut - закрытое поле (маршрут)

public Poezd - конструктор, дающий доступ к закрытым полям

public int Pyt1 - метод, присваивающий и возвращающий значение поля pyt

public int Nom1 - метод, присваивающий и возвращающий значение поля nom

public double Time1 - метод, присваивающий и возвращающий значение поля time

public string Marshrut1 - метод, присваивающий и возвращающий значение поля marshrut

Данный класс определяет формат объектов, с которыми нам предстоит работать.

Класс Сpravka

Наследник библиотечного класса Form

Данный класс не имеет никиках полей и методов. Он лишь выводит дополнительные сведения о программе, написанные разработчиком.

Класс Form1

Наследник библиотечного класса Form

public Form1 () - доступ к Form

List<Poezd> rasp - создание первого массива класса Poezd, куда будет засылаться основное расписание.

List<Poezd> raspnew - создание второго массива класса Poezd, куда мы будем заносить изменённое расписание.

Poezd poezd - объект класса Poezd, с помощью которого мы создаём новый объект из введённой пользователем информации.

string str - строка

string[] str1 - массив строк

char probel - переменная со значением пробел

Данные переменные и массив нужны для считывания информации из файла.

public int pyt1 (целочисленная переменная)

public int nom1 (целочисленная переменная)

public double time1 (нецелочисленная переменная)

public string marshryt1 (сторока)

Предназначены для считывания данных, введённых пользователем с клавиатуры для изменения, удаления или добавления данных.

public int nomizm (целочисленная переменная) - предназначена для считывания данных, введённых пользователем с клавиатуры в процессе изменения номера поезда.

public readonly Cpravka spravka - объект класса Cpravka, при обращении к этому объекту открывается класс Cpravka.

public int f - целочисленная переменная c изначельным значением 0. С помощью неё определяется наличие требуемого поезда в расписании.

private void посмотретьРасписаниеToolStripMenuItem_Click (object sender, EventArgs e) - объект класса ToolStripMenu, возвращение кнопки «открыть» и объекта класса DataGridView в видимый режим и удаление из видимого режима всего остального.

private void button1_Click (object sender, EventArgs e) - происходит считывание информации из файла.

Здесь такеже находятся:

FileStream fs - объект библиотечного класса FileStream, поддержание операций чтения и записи файла.

StreamReader sr - объект библиотечного класса StreamReader, чтение из файла.

private void изменитьРасписаниеToolStripMenuItem_Click (object sender, EventArgs e) - выполняется проверка на наличие расписания и изменение видимого режима объектов.

private void добавитьПоездToolStripMenuItem_Click (object sender, EventArgs e) - объект класса ToolStripMenu, происходит возвращение в видимый режим нужных объектов.

private void button2_Click (object sender, EventArgs e) - добавление нового объекта класса Poezd из информации, введённой пользователем с клавиатуры.

private void удалитьПоездToolStripMenuItem_Click (object sender, EventArgs e) - объект класса ToolStripMenu, происходит возвращение в видимый режим нужных объектов.

private void button3_Click (object sender, EventArgs e) - удаление поезда по заданному номеру, введённому пользователем с клавиатуры.

private void изменитьПараметрToolStripMenuItem_Click (object sender, EventArgs e) - объект класса ToolStripMenu, происходит возвращение в видимый режим нужных объектов.

private void button6_Click (object sender, EventArgs e), private void button5_Click (object sender, EventArgs e), private void button4_Click (object sender, EventArgs e), private void button7_Click (object sender, EventArgs e) - изменение параметра поезда, заданного по номеру, с помощью информации, введённой пользователем.

private void button8_Click (object sender, EventArgs e) - извлечение информации из программы в текстовый файл.

FileStream fs - объект библиотечного класса FileStream, поддержание операций чтения и записи файла.

StreamWriter sw - объект библиотечного класса StreamReader, запись в файл.

private void найтиПоездаToolStripMenuItem_Click (object sender, EventArgs e) - объект класса ToolStripMenu, проверка на наличие расписания, возвращение нужных и удаление ненужных объектов из видимого режима.

private void button11_Click (object sender, EventArgs e), private void button12_Click (object sender, EventArgs e), private void button13_Click (object sender, EventArgs e), private void button14_Click (object sender, EventArgs e) - осуществляется поиск поездов в расписании по заданному параметру, введённому пользователем с клавиатуры.

private void button9_Click (object sender, EventArgs e) - сохранение изменений в изначальном расписании с помощью замены исходной информации информацией из DataGridView.

private void выходToolStripMenuItem_Click (object sender, EventArgs e) - объект класса ToolStripMenu, осуществляется выход из программы с помощью DialogResult result и кнопок «Да», «Нет».

private void справкаToolStripMenuItem_Click (object sender, EventArgs e) - объект класса ToolStripMenu, открывает класс Cpravka.

private void button10_Click (object sender, EventArgs e) - возвращает на экран первоначальное расписание после его изменения или выполнения поиска.

8. Тестирование разработанной программы

Рисунок 1 Стартовая страница

При запуске программы, пользователь видит перед собой меню доступных ему функций.

Открыть расписание

Рисунок 2 Таблица расписания

При нажатии на кнопку открыть расписание, пользователь видит окно и текстовые документы, которые он может открыть, далее этот текстовый документ заносится в DataGridView, что и показано но рисунке 2

Далее пользователь может воспользоваться различными функциями программы.

Изменить расписание

Добавить поезд

Для того, чтобы добавить поезд, пользователь должен корректно заполнить все поля. Иначе будут вылетать сообщения об ошибке с подсказками.

Рисунок 3 Заполнение полей для добавления

После этого пользователь нажимает на кнопку «добавить», и поезд встаёт в расписание на место, зависящее от его времени отправления, что показано на рисунке 4.

Рисунок 4 Поезд добавлен!

Чтобы добавленый поезд сохранился, нужно нажать на кнопку «сохранить изменения». Предположим, что пользователь нажал на неё.

Удалить поезд

Теперь можно удалить любой поезд из расписания. Чтобы это осуществить, необходимо знать номер поезда и ввести его в поле для информации. Затем, нажать кнопку «удалить». Если указанного номера поезда не существует, вам об этом сообщат.

Рисунок 5 Проверка на существование удаляемого поезда

Попробуем ещё раз. Теперь введём поезд с существующим номером, например 71. Действительно, поезд под номером 71, следующий до Белгорода, удалился из расписания.

Рисунок 6 Поезд в Белгород удалён

Чтобы сохранить изменения, нажмём на кнопку «сохранить изменения».

Изменить параметр

Для того, чтобы изменить параметр, пользователь должен корректно ввести номер изменяемого поезда и новую информацию в поля для ввода, после этого нажать на кнопку в зависимости от того, какой параметр он должен изменить. Попробуем изменить параметр. Например, зададим поезду под номером 809, идущему до Тулы, маршрут до Севастополя. Всё получилось, это видно на рис. В данном случае, мы не будем сохранять изменения.

Рисунок 7 Изменение маршрута

Печать

После этого мы попробуем занести изменённое расписание в файл с именем «Новое расписание курского вокзала». Данный файл вы можете посмотреть в папке «Курсовая работа. Лабазова» и убедиться в том, что наш добавленный поезд остался, удалённый исчез, а изменения маршрута не сохранились.

Далее вам выведется сообщение о том, что файл успешно записан.

Рисунок 8 Запись изменённого расписания в файл

Найти поезда

Теперь попробуем открыть наше изменённое расписание и найти в нём интересующие нас поезда. Введём в окне «параметр для поиска» слово горький и нажмём кнопку «по маршруту». На экране появятся все поезда, следующие до Горького.

Рисунок 9 Поиск поездов до Горького

Далее вернёмся к исходному расписанию, нажав кнопку «вернуться к расписанию».

Рисунок 10 Исходное расписание

Справка

Теперь откроем справку и получим сведения о поставленной задаче, разработчике и его научном руководителе.

Рисунок 11 Дополнительные сведения

Выход

Мы выполнили всё, что нам хотелось, теперь выйдем из программы. При нажатии на кнопку выход у нас открывается диалоговое окно.

Рисунок 12 Пользователь может покинуть программу

При нажатии на «нет», пользователь возвращается в программу. Но мы нажмём да и выйдем из неё.

Наше тестиование успешно завершено!

9. Выводы по работе

В процессе выполнения курсовой работы было написано Windows-приложение на тему «разработка информационно-справочной системы расписания поездов». Данная программа позволяет реализовать следующие функции:

1. Открывать интересующий пользователя текстовый документ определённого формата

2. Изменять его, добавляя и удаляя объекты, а также изменяя некоторые параметры

3. Находить нужные объекты по различным параметрам.

Данное расписание может помочь пользователю при работе с текстовыми документами. Он может наиболее быстро и корректно искать нужную и изменять устаревшую информацию, а также выводить изменённую информацию в новый текстовый документ.

В настоящее время программа имеет недостаточно функций для использования её на вокзалах. Основной недостаток в том, что текстовые файлы должны иметь определённый формат, чтобы он загружался в программу. Но при дальнейшей доработке, такой как соединение программы с базой данных, это станет возможным.

Приложение

1) Полный справочник по C#, Шилдт Г.

a. Листинг программы:

using System;

using System. Collections. Generic;

using System. Text;

namespace Курсовая_работа

{

public class Poezd

{

private int pyt; // закрытое поле (номер пути)

private int nom; // закрытое поле (номер поезда)

private double time; // закрытое поле (время отбытия)

private string marshrut; // закрытое поле (маршрут)

public Poezd (int pyt, int nom, double time, string marshrut) // конструктор, дающий доступ к закрытым полям

{

this.pyt = pyt;

this.nom = nom;

this.time = time;

this.marshrut = marshrut;

}

public int Pyt1 // метод, присваивающий и возвращающий значение поля pyt

{

get {return pyt;}

set {pyt = value;}

}

public int Nom1 // метод, присваивающий и возвращающий значение поля nom

{

get {return nom;}

set {nom = value;}

}

public double Time1 // метод, присваивающий и возвращающий значение поля time

{

get {return time;}

set {time = value;}

}

public string Marshrut1 // метод, присваивающий и возвращающий значение поля marshrut

{

get {return marshrut;}

set {marshrut = value;}

}

}

}

using System;

using System. Collections. Generic;

using System. ComponentModel;

using System. Data;

using System. Text;

using System. Windows. Forms;

namespace Курсовая_работа

{

public partial class Cpravka: Form

{

public Cpravka()

{

InitializeComponent();

}

private void Cpravka_Load (object sender, EventArgs e)

{

}

}

}

using System;

using System. Collections. Generic;

using System. ComponentModel;

using System. Data;

using System. Text;

using System. Windows. Forms;

using System.IO;

namespace Курсовая_работа

{

public partial class Form1: Form

{

public Form1 ()

{

InitializeComponent();

}

List<Poezd> rasp = new List<Poezd>(); // первый массив класса Poezd

List<Poezd> raspnew = new List<Poezd>(); // второй массив класса Poezd

Poezd poezd; // объект класса Poezd

string str=»»; // строка

string[] str1; // массив строк

char probel = ' '; // переменная со значением пробел

public int pyt1 = 0; // целочисленная переменная

public int nom1 = 0; // целочисленная переменная

public double time1 = 0.00; // нецелочисленная переменная

public string marshryt1 = «»; // сторока

public int nomizm = 0; // целочисленная переменная

public readonly Cpravka spravka = new Cpravka(); // объект класса Cpravka

public int f = 0; // целочисленная переменная co значением 0

private void посмотретьРасписаниеToolStripMenuItem_Click (object sender, EventArgs e)

{ // возвращение и удаление объектов из видимого режима

spisok. Rows. Clear();

label1. Visible = false;

label2. Visible = false;

label3. Visible = false;

label4. Visible = false;

label5. Visible = false;

label6. Visible = false;

label7. Visible = false;

textBox1. Visible = false;

textBox2. Visible = false;

textBox3. Visible = false;

textBox4. Visible = false;

textBox5. Visible = false;

textBox6. Visible = false;

button1. Visible = true;

button2. Visible = false;

button3. Visible = false;

button4. Visible = false;

button5. Visible = false;

button6. Visible = false;

button7. Visible = false;

button8. Visible = false;

button9. Visible = false;

spisok. Visible = true;

button10. Visible = false;

button11. Visible = false;

button12. Visible = false;

button13. Visible = false;

button14. Visible = false;

textBox7. Visible = false;

}

 // считывание информации из файла

private void button1_Click (object sender, EventArgs e)

{

button8. Visible = true;

rasp. Clear();

FileStream fs; // объект библиотечного класса FileStream

StreamReader sr; // объект библиотечного класса StreamReader

try

{

openFileDialog1. ShowDialog(); // выбор считываемого текстового файла

fs = new FileStream (openFileDialog1. FileName, FileMode. Open);

sr = new StreamReader (fs, Encoding. Default);

while (true) // извлечение данных из текстового файла в массив

{

str = sr. ReadLine(); // построчное считывание

str1 = str. Split(probel); // разбиение элементов по пробелу

poezd = new Poezd (Convert. ToInt32 (str1 [0]), Convert. ToInt32 (str1 [1]), Convert. ToDouble (str1 [2]), str1 [3]); // присвоение значений

rasp. Add(poezd); // добавление в массив

}

sr. Close(); // конец считывания

fs. Close();

}

catch {}

spisok. Rows. Clear(); // очищение DataGridView

 // засылаем информацию в DataGridView

foreach (Poezd p in rasp)

{

spisok. Rows. Add (p. Pyt1, p. Nom1, p. Time1, p. Marshrut1);

}

}

private void изменитьРасписаниеToolStripMenuItem_Click (object sender, EventArgs e)

{ // проверка на наличие расписания

if (spisok. Rows. Count == 1)

{

MessageBox. Show («Чтобы изменить расписание, откройте его»);

return;

}

label7. Visible = false; // возвращение и удаление объектов из видимого режима

button10. Visible = true;

button11. Visible = false;

button12. Visible = false;

button13. Visible = false;

button14. Visible = false;

textBox7. Visible = false;

textBox1. Clear();

textBox2. Clear();

textBox3. Clear();

textBox4. Clear();

textBox5. Clear();

textBox6. Clear();

}

private void добавитьПоездToolStripMenuItem_Click (object sender, EventArgs e)

{ // возвращение и удаление объектов из видимого режима

button1. Visible = false;

button2. Visible = true;

button3. Visible = false;

button4. Visible = false;

button5. Visible = false;

button6. Visible = false;

button7. Visible = false;

button8. Visible = true;

button9. Visible = true;

spisok. Visible = true;

label1. Visible = true;

label2. Visible = true;

label3. Visible = true;

label4. Visible = true;

label5. Visible = false;

label6. Visible = false;

textBox1. Visible = true;

textBox2. Visible = true;

textBox3. Visible = true;

textBox4. Visible = true;

textBox5. Visible = false;

textBox6. Visible = false;

}

 // добавление нового объекта класса Poezd (значения вводятся с клавиатуры)

private void button2_Click (object sender, EventArgs e)

{

raspnew. Clear();

spisok. Rows. Clear();

try // проверка на корректный ввод

{

try

{

pyt1 = int. Parse (textBox1. Text); // считывание из textBox1 в переменную

}

catch

{

MessageBox. Show («Номер пути введён некорректно. Пожалуйста, введите целое число»);

textBox1. Clear();

return;

}

try

{

nom1 = int. Parse (textBox2. Text); // считывание из textBox2 в переменную

}

catch

{

MessageBox. Show («Номер поезда введён некорректно. Пожалуйста, введите целое число.»);

textBox2. Clear();

return;

}

try

{

time1 = double. Parse (textBox3. Text); // считывание из textBox3 в переменную

if (time1% 1 > 0.60)

{

MessageBox. Show («в одном часу 60 минут, ведите часы и минуты через запятую»);

textBox3. Clear();

return;

}

if (time1 > 24)

{

MessageBox. Show («в сутках 24 часа»);

textBox3. Clear();

return;

}

}

catch

{

MessageBox. Show («Время отправления введено некорректно. Введите часы и минуты через запятую (пример: 18,45)»);

textBox3. Clear();

return;

}

try

{

marshryt1 = textBox4. Text;

for (int i = 0; i < textBox4. Text. Length; i++)

if (Convert. ToInt32 (textBox4. Text[i]) < 192)

{

MessageBox. Show («Вы ввели маршрут некорректно, пожалуйста, используйте русские буквы», «Ошибка!», MessageBoxButtons.OK, MessageBoxIcon. Error);

textBox4. Clear();

return;

}

if (marshryt1. Length == 0)

{

MessageBox. Show («Введите маршрут»);

textBox4. Clear();

return;

}

}

catch

{

MessageBox. Show («Маршрут поезда введён некорректно»);

textBox4. Clear(); // считывание из textBox4 в переменную

return;

}

}

catch {};

poezd = new Poezd (pyt1, nom1, time1, marshryt1); // создание нового объекта класса Poezd

Poezd p4 = rasp[0]; // присвоение значения переменной класса Poezd

Poezd p5 = rasp [rasp. Count - 1]; // присвоение значения переменной класса Poezd

 // нахождение места в массиве для нового объекта (по возрастанию поля time)

 // чтобы не выйти за пределы массива рассматриваются 3 случая

if (p4. Time1 >= time1) // если time наименьшее

{

raspnew. Add(poezd);

for (int j = 0; j < rasp. Count; j++)

{

raspnew. Add (rasp[j]);

}

goto a;

}

if (p5. Time1 <= time1) // если time наибольшее

{

for (int k = 0; k < rasp. Count; k++)

{

raspnew. Add (rasp[k]);

}

raspnew. Add(poezd);

goto a;

}

for (int q = 0; q < rasp. Count - 1; q++) // если time в середине

{

Poezd p1 = rasp[q];

Poezd p2 = rasp [q + 1];

raspnew. Add (rasp[q]);

if (p1. Time1 <= time1 & p2. Time1 >= time1)

{

raspnew. Add(poezd);

}

}

raspnew. Add(p5);

goto a;

 // внесение изменённого массива в DataGridView

a: foreach (Poezd p7 in raspnew)

{

spisok. Rows. Add (p7. Pyt1, p7. Nom1, p7. Time1, p7. Marshrut1);

}

raspnew. Clear(); // очищение второго массива класса Poezd

textBox1. Clear(); // очищение полей для ввода

textBox2. Clear();

textBox3. Clear();

textBox4. Clear();

}

private void удалитьПоездToolStripMenuItem_Click (object sender, EventArgs e)

{ // возвращение и удаление объектов из видимого режима

label1. Visible = false;

label2. Visible = false;

label3. Visible = false;

label4. Visible = false;

label5. Visible = true;

label6. Visible = false;

textBox1. Visible = false;

textBox2. Visible = false;

textBox3. Visible = false;

textBox4. Visible = false;

textBox5. Visible = true;

textBox6. Visible = false;

button1. Visible = false;

button2. Visible = false;

button3. Visible = true;

button4. Visible = false;

button5. Visible = false;

button6. Visible = false;

button7. Visible = false;

button8. Visible = true;

button9. Visible = true;

}

 // удаление заданного поезда из массива

private void button3_Click (object sender, EventArgs e)

{

raspnew. Clear();

try // проверка на корректный ввод

{

nom1 = int. Parse (textBox5. Text);

}

catch

{

MessageBox. Show («Ошибка! Пожалуйста, введите целое число.»);

textBox5. Clear();

return;

}

 // нахождение нужного поезда по номеру и его удаление

for (int k = 0; k < rasp. Count; k++)

{

Poezd p = rasp[k];

if (nom1!= p. Nom1) raspnew. Add (rasp[k]);

else f = 1;

}

 // проверка на существование заданного поезда

if (f == 0)

{

MessageBox. Show («Поезд с таким номером не найден»);

textBox5. Clear();

return;

}

spisok. Rows. Clear();

 // засылаем информацию в DataGridView

foreach (Poezd p1 in raspnew)

{

spisok. Rows. Add (p1. Pyt1, p1. Nom1, p1. Time1, p1. Marshrut1);

}

f = 0;

}

private void изменитьПараметрToolStripMenuItem_Click (object sender, EventArgs e)

{

 // возвращение и удаление объектов из видимого режима

textBox5. Clear();

label1. Visible = false;

label2. Visible = false;

label3. Visible = false;

label4. Visible = false;

label5. Visible = true;

label6. Visible = true;

textBox1. Visible = false;

textBox2. Visible = false;

textBox3. Visible = false;

textBox4. Visible = false;

textBox5. Visible = true;

textBox6. Visible = true;

button1. Visible = false;

button2. Visible = false;

button3. Visible = false;

button4. Visible = true;

button5. Visible = true;

button6. Visible = true;

button7. Visible = true;

button8. Visible = true;

button9. Visible = true;

}

 // изменение пути поезда по заданному номеру

private void button6_Click (object sender, EventArgs e)

{

raspnew. Clear();

try // проверка на корректный ввод

{

nom1 = int. Parse (textBox5. Text);

}

catch

{

MessageBox. Show («Ошибка! Пожалуйста, введите целое число.»);

textBox5. Clear();

return;

}

try

{

pyt1 = int. Parse (textBox6. Text);

}

catch

{

MessageBox. Show («Ошибка! Пожалуйста, введите целое число.»);

textBox6. Clear();

return;

}

 // нахождение нужного поезда по номеру и измение его пути

for (int i = 0; i < rasp. Count; i++)

{

Poezd p = rasp[i];

if (nom1 == p. Nom1)

{

poezd = new Poezd (pyt1, p. Nom1, p. Time1, p. Marshrut1);

raspnew. Add(poezd);

f = 1;

}

else raspnew. Add (rasp[i]);

}

 // проверка на существование заданного поезда

if (f == 0)

{

MessageBox. Show («Поезд с таким номером не найден»);

textBox5. Clear();

}

spisok. Rows. Clear();

 // засылаем информацию в DataGridView

foreach (Poezd p1 in raspnew)

{

spisok. Rows. Add (p1. Pyt1, p1. Nom1, p1. Time1, p1. Marshrut1);

}

f = 0;

}

 // изменение номера поезда по заданному номеру

private void button5_Click (object sender, EventArgs e)

{

raspnew. Clear();

try // проверка на корректный ввод

{

nom1 = int. Parse (textBox5. Text);

}

catch

{

MessageBox. Show («Ошибка! Пожалуйста, введите целое число.»);

textBox5. Clear();

return;

}

try

{

nomizm = int. Parse (textBox6. Text);

}

catch

{

MessageBox. Show («Ошибка! Пожалуйста, введите целое число.»);

textBox6. Clear();

return;

}

 // нахождение нужного поезда по номеру и измение его номера

for (int i = 0; i < rasp. Count; i++)

{

Poezd p = rasp[i];

if (nom1 == p. Nom1)

{

poezd = new Poezd (p. Pyt1, nomizm, p. Time1, p. Marshrut1);

raspnew. Add(poezd);

f = 1;

}

else raspnew. Add (rasp[i]);

}

 // проверка на существование заданного поезда

if (f == 0)

{

MessageBox. Show («Поезд с таким номером не найден»);

textBox5. Clear();

}

spisok. Rows. Clear();

 // засылаем информацию в DataGridView

foreach (Poezd p1 in raspnew)

{

spisok. Rows. Add (p1. Pyt1, p1. Nom1, p1. Time1, p1. Marshrut1);

}

f = 0;

}

 // изменение времени поезда по заданному номеру

private void button4_Click (object sender, EventArgs e)

{

raspnew. Clear();

try // проверка на корректный ввод

{

nom1 = int. Parse (textBox5. Text);

}

catch

{

MessageBox. Show («Ошибка! Пожалуйста, введите целое число.»);

textBox5. Clear();

return;

}

try

{

time1 = double. Parse (textBox6. Text);

if (time1% 1 > 0.60)

{

MessageBox. Show («в одном часу 60 минут, ведите часы и минуты через запятую»);

textBox6. Clear();

return;

}

if (time1 > 24)

{

MessageBox. Show («в сутках 24 часа»);

textBox6. Clear();

return;

}

}

catch

{

MessageBox. Show («Ошибка! Пожалуйста, введите часы и минуты через запятую.»);

textBox6. Clear();

return;

}

 // нахождение нужного поезда по номеру и измение его времени

for (int i = 0; i < rasp. Count; i++)

{

Poezd p = rasp[i];

if (nom1 == p. Nom1)

{

poezd = new Poezd (p. Pyt1, p. Nom1, time1, p. Marshrut1);

raspnew. Add(poezd);

f = 1;

}

else raspnew. Add (rasp[i]);

}

 // проверка на существование заданного поезда

if (f == 0)

{

MessageBox. Show («Поезд с таким номером не найден»);

textBox5. Clear();

}

spisok. Rows. Clear();

 // засылаем информацию в DataGridView

foreach (Poezd p1 in raspnew)

{

spisok. Rows. Add (p1. Pyt1, p1. Nom1, p1. Time1, p1. Marshrut1);

}

f = 0;

}

 // изменение маршрута поезда по заданному номеру

private void button7_Click (object sender, EventArgs e)

{

raspnew. Clear();

try // проверка на корректный ввод

{

nom1 = int. Parse (textBox5. Text);

}

catch

{

MessageBox. Show («Ошибка! Пожалуйста, введите целое число.»);

textBox5. Clear();

return;

}

try

{

marshryt1 = textBox6. Text;

for (int i = 0; i < textBox6. Text. Length; i++)

if (Convert. ToInt32 (textBox6. Text[i]) < 192)

{

MessageBox. Show («Вы ввели маршрут некорректно, пожалуйста, используйте русские буквы», «Ошибка!», MessageBoxButtons.OK, MessageBoxIcon. Error);

textBox6. Clear();

return;

}

if (marshryt1. Length == 0)

{

MessageBox. Show («Введите маршрут»);

return;

}

}

catch

{

MessageBox. Show («Ошибка! Некорректный ввод»);

textBox6. Clear();

}

 // нахождение нужного поезда по номеру и измение его маршрута

for (int i = 0; i < rasp. Count; i++)

{

Poezd p = rasp[i];

if (nom1 == p. Nom1)

{

poezd = new Poezd (p. Pyt1, p. Nom1, p. Time1, marshryt1);

raspnew. Add(poezd);

f = 1;

}

else raspnew. Add (rasp[i]);

}

 // проверка на существование заданного поезда

if (f == 0)

{

MessageBox. Show («Поезд с таким номером не найден»);

textBox5. Clear();

}

spisok. Rows. Clear();

 // засылаем информацию в DataGridView

foreach (Poezd p1 in raspnew)

{

spisok. Rows. Add (p1. Pyt1, p1. Nom1, p1. Time1, p1. Marshrut1);

}

f = 0;

}

 // извлечение информации из массива в текстовый файл

private void button8_Click (object sender, EventArgs e)

{

FileStream fs;

StreamWriter sw;

try

{

saveFileDialog2. ShowDialog();

fs = new FileStream (saveFileDialog2. FileName, FileMode. OpenOrCreate, FileAccess. ReadWrite);

sw = new StreamWriter (fs, Encoding. Default);

foreach (Poezd p in rasp)

{

sw. WriteLine(«{0} {1} {2} {3}», p. Pyt1, p. Nom1, p. Time1, p. Marshrut1);

}

MessageBox. Show (» Файл записан!»);

}

catch

{

return;

}

sw. Close();

fs. Close();

}

private void найтиПоездаToolStripMenuItem_Click (object sender, EventArgs e)

{

 // проверка на наличие расписания

if (spisok. Rows. Count == 1)

{

MessageBox. Show («Чтобы найти что-то в расписание, откройте его»);

return;

}

 // возвращение и удаление объектов из видимого режима

button1. Visible = false;

button2. Visible = false;

button3. Visible = false;

button4. Visible = false;

button5. Visible = false;

button6. Visible = false;

button7. Visible = false;

button8. Visible = false;

button9. Visible = false;

button11. Visible = true;

button12. Visible = true;

button13. Visible = true;

button14. Visible = true;

textBox1. Visible = false;

textBox2. Visible = false;

textBox3. Visible = false;

textBox4. Visible = false;

textBox5. Visible = false;

textBox6. Visible = false;

textBox6. Visible = false;

textBox7. Visible = true;

label1. Visible = false;

label2. Visible = false;

label3. Visible = false;

label4. Visible = false;

label5. Visible = false;

label6. Visible = false;

label7. Visible = true;

button10. Visible = true;

textBox7. Clear();

}

 // нахождение поезда по заданному пути

private void button11_Click (object sender, EventArgs e)

{

raspnew. Clear();

 // проверка на корректный ввод

try

{

pyt1 = Convert. ToInt32 (textBox7. Text);

}

catch

{

MessageBox. Show («Пожалуйста, введите целое число»);

textBox7. Clear();

return;

}

 // нахождение нужного поезда по пути и добавление его в новый массив

for (int i = 0; i < rasp. Count; i++)

{

Poezd p = rasp[i];

if (pyt1 == p. Pyt1) raspnew. Add (rasp[i]);

}

 // проверка на существование поезда

if (raspnew. Count == 0)

{

MessageBox. Show («Поезд не найден»);

textBox7. Clear();

return;

}

spisok. Rows. Clear();

 // засылаем информацию в DataGridView

foreach (Poezd p1 in raspnew)

{

spisok. Rows. Add (p1. Pyt1, p1. Nom1, p1. Time1, p1. Marshrut1);

}

}

 // нахождение поезда по заданному номеру

private void button12_Click (object sender, EventArgs e)

{

raspnew. Clear();

 // проверка на корректный ввод

try

{

nom1 = Convert. ToInt32 (textBox7. Text);

}

catch

{

MessageBox. Show («Пожалуйста, введите целое число»);

textBox7. Clear();

return;

}

 // нахождение нужного поезда по номеру и добавление его в новый массив

for (int i = 0; i < rasp. Count; i++)

{

Poezd p = rasp[i];

if (nom1 == p. Nom1)

{

raspnew. Add (rasp[i]);

}

}

 // проверка на существование поезда

if (raspnew. Count == 0)

{

MessageBox. Show («Поезд не найден»);

textBox7. Clear();

return;

}

spisok. Rows. Clear();

 // засылаем информацию в DataGridView

foreach (Poezd p1 in raspnew)

{

spisok. Rows. Add (p1. Pyt1, p1. Nom1, p1. Time1, p1. Marshrut1);

}

}

 // нахождение поезда по заданному времени

private void button13_Click (object sender, EventArgs e)

{

raspnew. Clear();

 // проверка на корректный ввод

try

{

time1 = double. Parse (textBox7. Text);

if (time1% 1 > 0.60)

{

MessageBox. Show («в одном часу 60 минут, ведите часы и минуты через запятую»);

textBox7. Clear();

return;

}

if (time1 > 24)

{

MessageBox. Show («в сутках 24 часа»);

textBox7. Clear();

return;

}

}

catch

{

MessageBox. Show («Ошибка! Пожалуйста, введите часы и минуты через запятую.»);

textBox7. Clear();

return;

}

 // нахождение нужного поезда по времени и добавление его в новый массив

for (int i = 0; i < rasp. Count; i++)

{

Poezd p = rasp[i];

if (time1 == p. Time1) raspnew. Add (rasp[i]);

}

 // проверка на существование поезда

if (raspnew. Count == 0)

{

MessageBox. Show («Поезд не найден»);

textBox7. Clear();

return;

}

spisok. Rows. Clear();

 // засылаем информацию в DataGridView

foreach (Poezd p1 in raspnew)

{

spisok. Rows. Add (p1. Pyt1, p1. Nom1, p1. Time1, p1. Marshrut1);

}

}

 // нахождение поезда по заданному маршруту

private void button14_Click (object sender, EventArgs e)

{

raspnew. Clear();

 // проверка на корректный ввод

try

{

marshryt1 = String. Format (textBox7. Text).ToLower(); // нет разницы между большими и маленькими буквами

for (int i = 0; i < textBox7. Text. Length; i++)

if (Convert. ToInt32 (textBox7. Text[i]) < 192)

{

MessageBox. Show («Вы ввели маршрут некорректно, пожалуйста, используйте русские буквы», «Ошибка!», MessageBoxButtons.OK, MessageBoxIcon. Error);

textBox7. Clear();

return;

}

if (marshryt1. Length == 0)

{

MessageBox. Show («Введите маршрут»);

textBox7. Clear();

return;

}

}

catch

{

MessageBox. Show («Некорректный ввод»);

textBox7. Clear();

return;

}

 // нахождение нужного поезда по маршруту и добавление его в новый массив

for (int i = 0; i < rasp. Count; i++)

{

Poezd p = rasp[i];

if (marshryt1 == p. Marshrut1. ToLower()) raspnew. Add (rasp[i]);

}

 // проверка на существование поезда

if (raspnew. Count == 0)

{

MessageBox. Show («Поезд не найден»);

textBox7. Clear();

return;

}

spisok. Rows. Clear();

 // засылаем информацию в DataGridView

foreach (Poezd p1 in raspnew)

{

spisok. Rows. Add (p1. Pyt1, p1. Nom1, p1. Time1, p1. Marshrut1);

}

}

 // сохранение изменений в первоначальном расписании

private void button9_Click (object sender, EventArgs e)

{

rasp. Clear(); // очищение изначального массива

for (int j = 0; j < spisok. Rows. Count - 1; j++)

{

 // считывание информации из DataGridView

pyt1 = Convert. ToInt32 (spisok[0, j].Value. ToString());

nom1 = Convert. ToInt32 (spisok[1, j].Value. ToString());

time1 = Convert. ToDouble (spisok[2, j].Value. ToString());

marshryt1 = spisok [3, j].Value. ToString();

poezd = new Poezd (pyt1, nom1, time1, marshryt1);

rasp. Add(poezd); // сохранение изменений в первоначальном массиве

}

spisok. Rows. Clear();

 // засылаем новую информацию в DataGridView

foreach (Poezd p in rasp)

{

spisok. Rows. Add (p. Pyt1, p. Nom1, p. Time1, p. Marshrut1);

}

}

 // выход из программы

private void выходToolStripMenuItem_Click (object sender, EventArgs e)

{

DialogResult result = MessageBox. Show («Вы уверенны, что хотите покинуть программу?», «Выход», MessageBoxButtons. YesNo, MessageBoxIcon. Question);

if (result == DialogResult. Yes)

{Close();}

else

{return;}

}

 // открытие информации о программе в Form2

private void справкаToolStripMenuItem_Click (object sender, EventArgs e)

{

spravka. ShowDialog();

}

 // возвращение к первоначальному расписанию

private void button10_Click (object sender, EventArgs e)

{

spisok. Rows. Clear();

textBox7. Clear();

 // засылаем информацию в DataGridView

foreach (Poezd p1 in rasp)

{

spisok. Rows. Add (p1. Pyt1, p1. Nom1, p1. Time1, p1. Marshrut1);

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.