Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по дисциплине «Технология прог....doc
Скачиваний:
8
Добавлен:
27.10.2018
Размер:
1.05 Mб
Скачать

3.4.2 Второй этап

На данном этапе было реализовано работа с БД.

Изменения в программе описаны ниже

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Threading;

using System.Data;

using System.Data.OleDb;

using Car;

namespace Bogoslovskaya

{

public partial class Doroga : Form

{

Container container;

Mutex resurs_rova;

Mutex resurs_zapravki;

Rectangle pryamougolnil_azs;

List<Point> tochki_bolchogo_kruga;

List<Point> tochki_malogo_kruga;

Thread potok_peperisovki_okna;

bool live;

public Doroga()

{

InitializeComponent();

container = new Container();

resurs_rova = new Mutex();

resurs_zapravki = new Mutex();

pryamougolnil_azs = new Rectangle(50, 241, 30, 40);

//подписка на событие нажатия на окно

this.MouseClick += new MouseEventHandler(Doroga_MouseClick);

tochki_bolchogo_kruga = new List<Point>();

tochki_malogo_kruga = new List<Point>();

// создание точек, по которым будут двигаться машины

tochki_bolchogo_kruga.Add(new Point(105, 206));

tochki_bolchogo_kruga.Add(new Point(124, 160));

tochki_bolchogo_kruga.Add(new Point(177, 102));

tochki_bolchogo_kruga.Add(new Point(286, 69));

tochki_bolchogo_kruga.Add(new Point(433, 114));

tochki_bolchogo_kruga.Add(new Point(490, 231));

tochki_bolchogo_kruga.Add(new Point(457, 381));

tochki_bolchogo_kruga.Add(new Point(400, 432));

tochki_bolchogo_kruga.Add(new Point(254, 449));

tochki_bolchogo_kruga.Add(new Point(173, 418));

tochki_bolchogo_kruga.Add(new Point(101, 341));

tochki_bolchogo_kruga.Add(new Point(89, 278));

tochki_malogo_kruga.Add(new Point(168, 251));

tochki_malogo_kruga.Add(new Point(186, 198));

tochki_malogo_kruga.Add(new Point(265, 144));

tochki_malogo_kruga.Add(new Point(323, 137));

tochki_malogo_kruga.Add(new Point(403, 185));

tochki_malogo_kruga.Add(new Point(416, 296));

tochki_malogo_kruga.Add(new Point(367, 372));

tochki_malogo_kruga.Add(new Point(269, 386));

tochki_malogo_kruga.Add(new Point(213, 357));

tochki_malogo_kruga.Add(new Point(175, 299));

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

potok_peperisovki_okna = new Thread(new ThreadStart(peperisovat));

live = true;

potok_peperisovki_okna.Start();

this.FormClosed += new FormClosedEventHandler(Doroga_FormClosed);

}

void Doroga_FormClosed(object sender, FormClosedEventArgs e)

{

live = false;

foreach (Component component in container.Components)

{

Mashinka mashinka = (Mashinka)component;

mashinka.stop();

container.Remove(mashinka);

}

}

// функция потока перерисовки окна

void peperisovat()

{

while (live)

{

this.Invalidate(); // перерисовать окно

potok_peperisovki_okna.Join(20); // каждые 20 милисекунд

}

}

//обработчик клика мышкой по окну

void Doroga_MouseClick(object sender, MouseEventArgs e)

{

sozdatMashinku();

}

private void sozdatMashinku()

Mashinka mashinka = new Mashinka(container.Components.Count, resurs_rova, resurs_zapravki, pryamougolnil_azs

, tochki_bolchogo_kruga, tochki_malogo_kruga);

mashinka.vyehalEvent += new vyehalDeleagate(mashinka_vyehalEvent);

container.Add(mashinka);

}

//обработчик события выезда машинки из рова

void mashinka_vyehalEvent(int name)

{

try

{

//строка соединения с бд

string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;data source=rov.mdb";

string command = "select datavyesda, n from rov";

OleDbDataAdapter datadapter;

DataSet dataset;

DataTable datatable;

//создаём datadapter

datadapter = new OleDbDataAdapter(command, connectionString);

dataset = new DataSet();

//считываем таблицу из файла в память

datadapter.Fill(dataset, "rov");

//получаем первую таблицу

datatable = dataset.Tables[0];

//добавляем новую строчку, дату и номер машинки

datatable.Rows.Add(new object[] { DateTime.Now, name });

//OleDbCommandBuilder - генерирует запросы на обновление бд

OleDbCommandBuilder cb = new OleDbCommandBuilder(datadapter);

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

datadapter.InsertCommand = cb.GetInsertCommand();

//обновляем файл бд

datadapter.Update(dataset, "rov");

}

catch (Exception exception)

{

MessageBox.Show(exception.ToString(), "Ошибка подключения к БД");

}

}

protected override void OnPaint(PaintEventArgs e)

{

foreach(Point point in tochki_bolchogo_kruga)

{

e.Graphics.DrawString(tochki_bolchogo_kruga.IndexOf(point).ToString(), new Font("Arial", 8), Brushes.Blue, point);

}

foreach (Point point in tochki_malogo_kruga)

{

e.Graphics.DrawString(tochki_malogo_kruga.IndexOf(point).ToString(), new Font("Arial", 8), Brushes.Red, point);

}

foreach(IComponent comp in container.Components)

{

Mashinka mashinka = (Mashinka)comp;

e.Graphics.FillRectangle(mashinka.Brush, new Rectangle(mashinka.Location, new Size(10, 15)));

e.Graphics.DrawString(mashinka.Fuel.ToString(), new Font("Arial", 8), Brushes.Red, mashinka.Location);

}

e.Graphics.DrawRectangle(Pens.Gray, pryamougolnil_azs);

}

}

}

}