|
Курсач. Курсовая работа по дисциплине Объектноориентированное программирование
Федеральное государственное автономное образовательное учреждение
высшего профессионального образования
Национальный Исследовательский Технологический
Университет “МИСиС”
_________________________________________________________________________________
Курсовая работа
по дисциплине:
«Объектно-ориентированное программирование»
Выполнил: Егоров Иван
Проверил:
19 вариант
Москва 2019 г.
Задание работы: Разработать класс, реализующий указанную в задании структуру данных. Разработать интерфейс программы, позволяющий вводить данные и получать результаты в удобной для пользователя форме. Программа должна проверить правильность вводимых данных. В случае возникновения ошибок должны выдаваться сообщения. Должна быть предусмотрена возможность получения данных из файла и запись результатов файл. Вид данных: Линейный список.
Операции: Составить программу, которая содержит информацию о наличие автобусов в автобусном парке. Сведения об автобусе содержат:
номер автобуса;
фамилию и инициалы водителя;
номер маршрута;
Программа должны обеспечить:
формирование данных обо всех автобусах в виде списка;
формирование списка автобусов выехавших из парка;
формирование списка автобусов оставшихся в парке;
вывод сведений об автобусах находящихся на маршруте и об автобусах оставшихся в парке.
Листинг порограммы:
using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace BusPark
{
public partial class Form1 : Form
{
BusPark.LinkedList list = new BusPark.LinkedList();
bus bus = new bus();
public Form1()
{
InitializeComponent();
openFileDialog1.Filter = "Text files(*.txt)|*.txt|All files(*.*)|*.*";
saveFileDialog1.Filter = "Text files(*.txt)|*.txt|All files(*.*)|*.*";
textBox2.Text = "Добро пожаловать в редактор Автобусного парка";
/////////////////////////////////////////////////////////////////////////////////////////////
dataGridView1.Columns.Add("0", "ID");
dataGridView1.Columns[0].Width = 25;
dataGridView1.Columns.Add("1", "Номер автобуса");
dataGridView1.Columns.Add("2", "ФИО");
dataGridView1.Columns.Add("3", "Номер маршрута");
dataGridView1.Columns.Add("4", "Статус");
for (int i = 0; i < dataGridView1.Rows.Count; i++)
dataGridView1.Rows[i].HeaderCell.Value = i + 1;
}
//////////////////////////////////////////////////////////////// TODO: проверять зн-ия
private void button5_Click(object sender, EventArgs e)
{
try
{
String[] words = Convert.ToString(textBox1).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string status = null;
if (radioButton1.Checked) { status = "В пути"; } else if (radioButton2.Checked) { status = "В парке"; }
list.AddBack(bus = new bus(int.Parse(words[2]), words[3], int.Parse(words[4]), status));
}
catch
{
MessageBox.Show("данные были введены неверно, вписывайте их также, в каком порядке они указаны в таблице");
}
dataGridView1.DataSource = null;
dataGridView1.Rows.Clear();
int k = 1;
foreach (bus item in list) // вывод инфы
dataGridView1.Rows.Add( k++, item.getnum(), item.getname(), item.getnumway(), item.getstatus());
}
private void button7_Click(object sender, EventArgs e)
{
try
{
String[] words = Convert.ToString(textBox5).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string status = null;
if (radioButton3.Checked) { status = "В пути"; } else if (radioButton4.Checked) { status = "В парке"; }
bus bus1 = new bus(int.Parse(words[2]), words[3], int.Parse(words[4]), status);
String[] wordiks = Convert.ToString(textBox4).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
int pos = int.Parse(Convert.ToString(wordiks[2])) - 1;
list.Insert(pos, bus1);
}
catch
{
MessageBox.Show("данные были введены неверно, вписывайте их также, в каком порядке они указаны в таблице");
}
dataGridView1.DataSource = null;
dataGridView1.Rows.Clear();
int k = 1;
foreach (bus item in list) // вывод инфы
dataGridView1.Rows.Add(k++, item.getnum(), item.getname(), item.getnumway(), item.getstatus());
}
private void button6_Click(object sender, EventArgs e)
{
try {
String[] wordiks = Convert.ToString(textBox3).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
int pos = int.Parse(Convert.ToString(wordiks[2]));
list.Delete(pos);
}
catch
{
MessageBox.Show("данные были введены неверно, вписывайте их также, в каком порядке они указаны в таблице");
}
dataGridView1.DataSource = null;
dataGridView1.Rows.Clear();
int k = 1;
foreach (bus item in list) // вывод инфы
dataGridView1.Rows.Add(k++, item.getnum(), item.getname(), item.getnumway(), item.getstatus());
}
////////////////////////////////////////////////////////////////////////////////////
private void button1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
dataGridView1.Rows.Clear();
int k = 1;
foreach (bus item in list) // вывод инфы
dataGridView1.Rows.Add(k++, item.getnum(), item.getname(), item.getnumway());
}
private void button2_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
dataGridView1.Rows.Clear();
int k = 1;
foreach (bus item in list)
{// вывод инфы
if (item.getstatus() == "В пути")
{
dataGridView1.Rows.Add(k++, item.getnum(), item.getname(), item.getnumway(), item.getstatus());
}
}
}
private void button3_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
dataGridView1.Rows.Clear();
int k = 1;
foreach (bus item in list)
{// вывод инфы
if (item.getstatus() == "В парке")
{
dataGridView1.Rows.Add(k++, item.getnum(), item.getname(), item.getnumway(), item.getstatus());
}
}
}
private void button4_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
dataGridView1.Rows.Clear();
int k = 1;
foreach (bus item in list) // вывод инфы
dataGridView1.Rows.Add(k++, item.getnum(), item.getname(), item.getnumway(), item.getstatus());
}
/////////////////////////////////////////////////////////////////////////// TODO: проверять
private void button8_Click(object sender, EventArgs e)
{
try
{
if (openFileDialog1.ShowDialog() == DialogResult.Cancel)
return;
// получаем выбранный файл
string filename = openFileDialog1.FileName;
// читаем файл в строку
string fileText = System.IO.File.ReadAllText(filename);
String[] abzac = Convert.ToString(fileText).Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < abzac.Length; i++)
{
String[] words = Convert.ToString(abzac[i]).Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
list.AddBack(bus = new bus(int.Parse(words[1]), words[2], int.Parse(words[3]), words[4] + " " + words[5]));
}
}catch
{
MessageBox.Show("неверный формат данных");
}
dataGridView1.DataSource = null;
dataGridView1.Rows.Clear();
int k = 1;
foreach (bus item in list) // вывод инфы
dataGridView1.Rows.Add(k++, item.getnum(), item.getname(), item.getnumway(), item.getstatus());
MessageBox.Show("Файл открыт");
}
private void button9_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog() == DialogResult.Cancel)
return;
// получаем выбранный файл
string filename = saveFileDialog1.FileName;
int k = 1;
string all = "";
foreach (bus item in list)
{// вывод инфы
all += k++ + " " + item.getnum() + " " + item.getname() + " " + item.getnumway() + " " + item.getstatus() + "\r\n";
}
textBox2.Text = all;
// сохраняем текст в файл
System.IO.File.WriteAllText(filename, all);
MessageBox.Show("Файл сохранен");
}
}
class LinkedList
{
private class Node
{
public T data;
public Node next;
public Node(T data, Node next)
{
this.data = data;
this.next = next;
}
}
private int count = 0;
private Node head = null;
private Node tail = null;
public void AddBack(T data)
{
if (head == null)
{
head = new Node(data, null);
tail = head;
}
else
{
tail.next = new Node(data, null);
tail = tail.next;
}
++count;
}
public void AddFront(T data)
{
if (head == null)
{
head = new Node(data, null);
tail = head;
}
else
{
Node new_node = new Node(data, head);
head = new_node;
}
++count;
}
public void Insert(int index, T data)
{
if (index < 0 || index >= count)
throw new ArgumentOutOfRangeException();
if (index == 0)
{
AddFront(data);
}
else
{
Node r = head;
for (int i = 1; i < index; ++i)
r = r.next;
Node new_node = new Node(data, r.next);
r.next = new_node;
++count;
}
}
public void Delete(int pos)
{
if (head != null)
{
Node temp = head;
Node prev = head;
// Console.WriteLine(temp + " " + prev);
int i = 1;
while (pos != i)
{
prev = temp;
temp = temp.next;
i++;
}
if (head == temp)
head = head.next;
else
prev.next = temp.next;
count--;
}
else
MessageBox.Show("Список и так пустой! Удалять нечего.");
}
public int Count
{
get
{
return count;
}
}
public IEnumerator GetEnumerator()
{
for (Node r = head; r != null; r = r.next)
yield return r.data;
}
}
class bus
{
private int BusNumber;
private string NameOfDriver;
private int NumberOfWay;
private string status;
public bus()
{
BusNumber = 0;
NameOfDriver = null;
NumberOfWay = 0;
this.status = null;
}
public bus(int bnum, string name, int numbw, string status)
{
BusNumber = bnum;
NameOfDriver = name;
NumberOfWay = numbw;
this.status = status;
}
public int getnum()
{
return BusNumber;
}
public string getname()
{
return NameOfDriver;
}
public int getnumway()
{
return NumberOfWay;
}
public string getstatus()
{
return status;
}
}
}
Абстрактная Блок Схема:
Скриншоты работы программы:
Вывод: Научился работать с линейным списком, Win forms, и абстрактными классами. |
|
|