
- •«Технология программирования»
- •Задание
- •Уточнение
- •Разработка программы на c#
- •Программа с точки зрения пользователя. Интерфейс и инструкция.
- •3.2 Программа с точки зрения программиста
- •3.2.1 Все объекты программы и их взаимосвязь
- •3.2.2 Классы
- •1) Класс Car.
- •3.2.3 Потоки и их синхронизация
- •3.2.4 События и их использование
- •3.2.5 Ресурсы
- •3.2.6 Базы данных
- •3.2.7 Удаленный объект и его интерфейс
- •3.2.8 Сервер
- •3.2.9 Клиент
- •3.3 Диаграмма классов
- •3.4 Поэтапная разработка программы
- •3.4.1 Первый этап
- •3.4.2 Второй этап
- •3.4.3 Третий этап
- •3.5 Проблемы, возникшие при разработке проекта
- •4. Разработка программы на языке Java
- •4.1 Отличие от языка c#
- •4.1.1 События
- •4.1.2 Потоки
- •4.1.3 Другие отличия
- •4.2 Проблемы возникшие при разработке
- •5. Используемая литература
- •Приложение 1. Текст программы на языке c#
- •Приложение 2. Текст программы на языке Java
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);
}
}
}
}