- •Курсова робота
- •Дисципліна____________Організація баз даних і знань_________
- •Завдання видав: Савчук Тамара Олександрівна _ __________
- •Завдання прийняв до виконання: Козар в.І. _ __________
- •1 Аналіз предметної області та постановка задачі
- •2 Розробка універсального відношення
- •3 Розробка концептуальної схеми бази залізничного вокзалу за er-принципом
- •4 Обґрунтування вибору моделі даних
- •4.1 Ієрархічна модель даних
- •4.2 Мережева модель даних
- •4.3 Реляційна модель даних
- •4.4 Об’єктно-орієнтована модель даних
- •5 Проектування нормалізованих відношень
- •6 Оцінка спроектованих відношень
- •7 Розробка вихідних форм
- •8 Розробка програмного забезпечення
- •Розробка схеми алгоритму реалізації запитів предметної області
- •8.2 Обґрунтування вибору мови програмування для управління бд
- •8.3 Основні оператори мови програмування
- •8.4 Розробка схеми алгоритму реалізації програмного забезпечення для бази даних
- •Додатки
Сформувати запит на покупку білету за певним напрямом;
Алгоритм:
Добавити запис у відношення «Закази» відповідно за напрямом і дописати запис в відношення «Ціна білету» ;
Вивести результат у відповідні поля форми .
Вибрати список заказів, які купив заданий клієнт в заданий час.
Алгоритм:
Виконати селекцію з декартового добутку відношень «Закази» і «Ціна білету».
Вивести результат у відповідні поля форми.
Спочатку користувач вводить дані, що необхідні для запиту. Потім відбувається операція декартового добутку таблиць, що приймають участь в запиті. Далі на основі умови відбувається селекція даних. Отримана інформація виводиться користувачеві. Можливо в відсортованому або згрупованому за якимись ознаками виді.
З
агальний
алгоритм виконання запитів наведено
на рисунку 8.1
Рисунок 8.1 – Схема алгоритму реалізації запитів користувача
Для введення даних користувач використовує інтерфейс програми, далі програма формує SQL-запит і відправляє його в базу даних засобами ADO.NET. Тими ж засобами програма отримує відповідь і виводить її в потрібному вигляді користувачеві.
8.2 Обґрунтування вибору мови програмування для управління бд
Для програмування системи управління базою даних необхідно обрати мову, що дозволить в повній мірі працювати з базою даних, а також належним чином виводити інформацію. Було обрано мову програмування C#, технологію ADO.NET.
C# — об'єктно-орієнтована мова програмування з безпечною системою типізації для платформи .NET. Розроблена Андерсом Гейлсбергом, Скотом Вілтамутом та Пітером Гольде під егідою Microsoft Research (при фірмі Microsoft).
Синтаксис C# близький до С++ і Java. Мова має строгу статичну типізацію, підтримує поліморфізм, перевантаження операторів, вказівники на функції-члени класів, атрибути, події, властивості, винятки, коментарі у форматі XML. Перейнявши багато що від своїх попередників — мов С++, Delphi, Модула і Smalltalk — С#, спираючись на практику їхнього використання, виключає деякі моделі, що зарекомендували себе як проблематичні при розробці програмних систем: так, C# не підтримує множинне спадкування класів (на відміну від C++) або виведення типів (на відміну Haskell).
ADO.NET (ActiveX Data Objects .NET) — це набір бібліотек, що поставляється з Microsoft .NET Framework і призначений для взаємодії з різними сховищами даних з .NET-застосунків. Бібліотеки ADO.NET включають класи для приєднання до джерела даних, виконання запитів і обробки їхніх результатів. Крім того, ADO.NET можна використовувати в якості надійного, ієрархічно організованого, відокремленого кешу даних для автономної роботи з даними.
ADO.NET володіє багатьма перевагами порівняно з іншими технологіями доступу до даних. Основні з них це:
– Підтримка XML: ADO також підтримує XML ,але не буде так само ефективно обробляти XML-дані, як це робить ADO.NET, оскільки ADO.NET створювався з врахуванням XML,а ADO-ні.
– Простота модифікації: протягом терміну служби системи в неї можна вносити незначні зміни, однак спроби провести архітектурні зміни трапляються рідко, через виняткову складність завдання. На жаль, при природному розвитку подій такі зміни іноді виявляються необхідними.
– Простота програмування: компоненти даних ADO.NET в Visual Studio інкапсулюють функціональні можливості доступу до даних різними способами, що допомагає розробляти програмні продукти значно швидше і з меншою кількістю помилок.
– Продуктивність: для непідключених застосунків набори даних ADO.NET дають виграш в продуктивності в порівнянні з непідключеними наборами записів ADO. Передача непідключеного набору записів між рівнями за допомогою COM-упаковки може призвести до великої витрати обчислювальних ресурсів, тому що значення в наборі записів перетворюються до типів даних, відомих COM. У ADO.NET таке перетворення типів даних не потрібно.
Отже, для програмування системи управління базою даних цілком підходить мова програмування C# та технологія ADO.NET.
8.3 Основні оператори мови програмування
Розглянемо основні оператори мови C#:
Арифметичні. До арифметичних операторів належать: +, -, *, /, += (додати і присвоїти), *= (домножити), /= (поділити і присвоїти результат), -= (відняти і присвоїти), % (остача від ділення), %= (отримати остачу і присвоїти результат), ++ (інкремент), -- (декремент).
Оператори порівняння (відношення). До операторів відношення належать: < (менше), > (більше), <= (менше або дорівнює), >= (більше або дорівнює), == (дорівнює), != (не дорівнює).
Логічні оператори. До них належать оператори, що реалізують операції алгебри логіки: ! (інверсія), && (і), || (або), & (побітове і), | (побітове або), ~ (побітова інверсія), ^(побітове виключне або).
Оператори зсувів (побітові). Дані оператори дозволяють робити операції побітових зсувів, але вони не цікавлять нас в даній роботі.
Також мова має: оператор умови – if, оператори циклу – do…while, for, while, foreach, оператор розгалуження – switch.
C# об’єктна-орієнтована мова, тому в ній є безліч класів. В даній роботі нас цікавлять класи: String – клас для роботи з рядками, Convert – клас для перетворення типів, класи візуального оформлення.
Для роботи з базою даних будемо використовувати такі класи з бібліотек ADO.NET :
– SqlConnection – клас для підключення до бази даних SQL.
– SqlCommand – клас для виконання SQL запитів.
– SqlReader – клас для виведення результатів запиту
Вище наведені оператори мови програмування C#.NET і технології ADO.NET дозволять взаємодіяти з базою даних. За допомогою ADO.NET можна під’єднатись до бази даних і отримати потрібні дані за допомогою SQL запитів, а за допомогою мови C# виведемо дані в зручному для користувача форматі [4].
8.4 Розробка схеми алгоритму реалізації програмного забезпечення для бази даних
Для інтерактивного використання створеної бази даних реалізовано програмне забезпечення. Його використання надає можливість користування базою даних особам, що не мають розуміння про структуру бази даних чи фізичне розміщення даних.
Першим кроком роботи програми є підключення до бази даних. Якщо підключитись не вдається, то про це повідомляється користувач і програма закривається.
Для підключення до бази даних на мові C# класами ADO.NET спочатку слід ініціювати стрічку підключення. В даному випадку вона матиме вигляд:
static string ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Вокзал.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
Ця стрічка передається як атрибут в об’єкт класу SqlConnection:
static SqlConnection connect = new SqlConnection(ConnectionString);
Тепер можна виконувати безпосередньо підключення. В процесі його виконання може виникнути виключення, якщо підключитись неможливо, тому його одразу слід обробити блоком try-catch:
try
{
connect.Open();
}
catch
{
MessageBox.Show("Не вдалось підключитись до бази даних");
}
Якщо підключитись не вдалось, то програма повідомляє про це користувача і закриваєтсья. Якщо підключення пройшло вдало – й ініціалізує свій інтерфейс і переходить в цикл обробки запитів, в якому вона приймає дані від користувача, обробляє запит і повертає результрат, поки користувач не вирішить припинити роботу програми.
Для передачі запиту в базу даних використовується об’єкт класу SqlCommand, який при створенні приймає в аргументи текст запиту і об’єкт SqlConnection. Результати запитів повертаються об’єктом класу SqlDataReader. Наприклад:
string query = @"SELECT * FROM [Потяги];";
SqlCommand command = new SqlCommand(query, connect);
SqlDataReader resultSQL = command.ExecuteReader();
Всі запити формуються залежно від дій користувача.
Схему алгоритму роботи програми наведено на рисунку 8.2. Лістинг програми наведено в додатку А. В додатку Б є інструкція по використанню програми. Приклад виконання програми наведено в додатку В.
Рисунок 8.2 – Схема алгоритму роботи програми.
ВИСНОВКИ
У даній курсовій роботі було спроектовано базу залізничного вокзалу м.Вінниці. Розроблено програму для управління даними у базі даних. Проаналізуємо результати проектування бази даних: ступінь універсального відношення – 25, кількість сутностей предметної області – 6, форма нормалізації первинних ключів – 3, кількість запитів, що реалізовано – 10.
У першому розділі курсової роботи описано процес дослідження предметної області. Сформульовано мету дослідження, сформовано запити користувачів та виділено сутності.
У другому розділі описано процес отримання універсального відношення. Встановлено, що його ступінь рівний 24.
У наступному розділі розроблено концептуальну схему предметної області за ER-принципом. На схемі відображено зв’язки між сутностями.
У четвертому розділі проаналізовано різні моделі даних. Наведено деревовидну, мережеву, реляційну і об’єктно-орієнтовані моделі даних для бази тестових завдань з дисциплін фахової підготовки. Проаналізувавши моделі даних, виявилось, що найбільше для даної предметної області підходить реляційна модель даних.
У п’ятому розділі було описано процес нормалізації універсального відношення до третьої нормальної форми, а у шостому розділі проведено аналіз отриманих відношень і виявлено, що аномалії виключені і всі запити мають реалізовуватись правильно.
У сьомому розділі схематично описані вихідні форми програми, а у восьмому детально описано процес розробки СУБД. Програму реалізовано на мові C#, яка на даний час відповідає усім вимогам об’єктно-орієнтованості та гнучкості. Запити були написані мовою SQL. З’єднання з базою даних та передачу запитів реалізовано за допомогою технології ADO.NET. Програма працює правильно і дозволяє в повній мірі користувачам маніпулювати даними у спроектованій базі даних.
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
Романюк О.Н. Організація баз даних і знань : [навчальний посібник] / О.Н. Романюк, Т.О. Савчук. – Вінниця: УНІВЕРСУМ – Вінниця, 2003. – 217с.
Хаббард Дж. Автоматизированное проектирование баз даннях / Хаббард Дж. : [пер. с англ.]. – М.: Мир, 1984 г.
Р. Виейра Программирование баз данных Microsoft SQL Server 2005 : [базовый курс] / Р. Виейра; [пер. с англ.]. – М.: ООО “И.Д. Вильямс”, 2007. – 832 с.
Герберт Шилдт C# 4.0: полное руководство / Герберт Шилдт ; [пер. с англ.]. – М.: ООО “И.Д. Вильямс”, 2011. - 1056 с.: ил. – Парал. тит. англ.
Герберт Шилдт Полный справочник по C# / Герберт Шилдт ; [пер. с англ.]. - М.: Издательский дом “Вильямс”, 2004. - 752 с.
Додатки
ДОДАТОК А
Лістинг програми
Клас доступу до бази даних:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data.Common;
using System.Windows.Forms;
using System.Globalization;
using System.IO;
namespace KURSBD
{
class bd
{
//Стрічка з'єднання
string connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Вокзал.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
public ArrayList GetAllDebitors(string vk)
{
ArrayList GetAllDebitors = new ArrayList();
using (SqlConnection sqlcon = new SqlConnection(connectionString))
{
string QUERY = string.Format("SELECT [Вид] FROM [Вид потягу] WHERE ([Вид]= N'{0}') ",
vk);
SqlCommand Comm = new SqlCommand(QUERY, sqlcon);
try
{
sqlcon.Open();
SqlDataReader Read = Comm.ExecuteReader();
if (Read.HasRows)
foreach (DbDataRecord item in Read)
{
GetAllDebitors.Add(item);
}
}
catch
{
}
}
return GetAllDebitors;
}
public ArrayList zp1_Vsi_zupunky()
{
ArrayList zp1_Vsi_zupunky = new ArrayList();
using (SqlConnection sqlcon = new SqlConnection(connectionString))
{
string QUERY = string.Format("SELECT [№ потягу] AS [Номер потяга], [Початкова зупинка], [Кінцева зупинка] FROM [Потяги]");
SqlCommand Comm = new SqlCommand(QUERY, sqlcon);
try
{
sqlcon.Open();
SqlDataReader Read = Comm.ExecuteReader();
if (Read.HasRows)
foreach (DbDataRecord item in Read)
{
zp1_Vsi_zupunky.Add(item);
}
}
catch
{
}
}
return zp1_Vsi_zupunky;
}
/// <summary>
/// ////////zp 2
/// </summary>
/// <returns></returns>
public ArrayList zp2_Vsi_zupunky(string vk)
{
ArrayList zp2_Vsi_zupunky = new ArrayList();
using (SqlConnection sqlcon = new SqlConnection(connectionString))
{
string QUERY =
string.Format("SELECT [№ потягу] AS [Номер потягу], [Початкова зупинка], [Кінцева зупинка], [Вид потягу] FROM [Потяги] WHERE ([Вид потягу] = '{0}')",vk);
SqlCommand Comm = new SqlCommand(QUERY, sqlcon);
try
{
sqlcon.Open();
SqlDataReader Read = Comm.ExecuteReader();
if (Read.HasRows)
foreach (DbDataRecord item in Read)
{
zp2_Vsi_zupunky.Add(item);
}
}
catch
{
}
}
return zp2_Vsi_zupunky;
}
////// zaput nomer 3
public ArrayList zp3(string vk, string vk2)
{
ArrayList zp3 = new ArrayList();
using (SqlConnection sqlcon = new SqlConnection(connectionString))
{
string QUERY =
string.Format("SELECT [№ потягу] AS [Номер потягу], Ціна, [Кінцева зупинка], [Вид вагону] FROM [Ціна білету] WHERE (Ціна = '{0}') OR ([Кінцева зупинка] = '{1}') ", vk, vk2);
SqlCommand Comm = new SqlCommand(QUERY, sqlcon);
try
{
sqlcon.Open();
SqlDataReader Read = Comm.ExecuteReader();
if (Read.HasRows)
foreach (DbDataRecord item in Read)
{
zp3.Add(item);
}
}
catch
{
}
}
return zp3;
}
/////Запит № 4
public ArrayList zp4(string vk,int vk2)
{
ArrayList zp4 = new ArrayList();
using (SqlConnection sqlcon = new SqlConnection(connectionString))
{
string QUERY =
string.Format("SELECT [№ потягу] AS [Номер потягу], [Початкова зупинка], [Кінцева зупинка], [Вид вагону], Ціна FROM [Ціна білету] WHERE ([№ потягу] = '{0}') OR (Ціна < '{1}') ", vk, vk2);
SqlCommand Comm = new SqlCommand(QUERY, sqlcon);
try
{
sqlcon.Open();
SqlDataReader Read = Comm.ExecuteReader();
if (Read.HasRows)
foreach (DbDataRecord item in Read)
{
zp4.Add(item);
}
}
catch
{
}
}
return zp4;
}
/////Запит № 5
public ArrayList zp5(string vk, string vk2, string vk3)
{
ArrayList zp5 = new ArrayList();
using (SqlConnection sqlcon = new SqlConnection(connectionString))
{
string QUERY =
string.Format("SELECT Закази.[№ заказу] AS [Номер заказу], Потяги.[№ потягу] AS [Номер потягу], Потяги.[Початкова зупинка], Потяги.[Кінцева зупинка], Потяги.[Вид потягу] FROM Потяги CROSS JOIN Закази WHERE (Потяги.[Початкова зупинка] = '{0}') OR (Потяги.[Кінцева зупинка] = '{1}') OR(Потяги.[Вид потягу] = '{2}') ", vk, vk2,vk3);
SqlCommand Comm = new SqlCommand(QUERY, sqlcon);
try
{
sqlcon.Open();
SqlDataReader Read = Comm.ExecuteReader();
if (Read.HasRows)
foreach (DbDataRecord item in Read)
{
zp5.Add(item);
}
}
catch
{
}
}
return zp5;
}
/////Запит № 6 Вибрати усі закази за номером білету;
public ArrayList zp6(string vk)
{
ArrayList zp6 = new ArrayList();
using (SqlConnection sqlcon = new SqlConnection(connectionString))
{
string QUERY =
string.Format("SELECT Закази.[№ заказу] AS [Номер заказу], Закази.[Код білету], Закази.[ПІБ Клієнта], [Ціна білету].[Початкова зупинка], [Ціна білету].[Кінцева зупинка], Закази.[Дата відправлення], Закази.[Дата покупки], [Ціна білету].Ціна FROM Закази INNER JOIN [Ціна білету] ON Закази.[Код білету] = [Ціна білету].[Код білету] WHERE (Закази.[Код білету] ='{0}') ", vk);
SqlCommand Comm = new SqlCommand(QUERY, sqlcon);
try
{
sqlcon.Open();
SqlDataReader Read = Comm.ExecuteReader();
if (Read.HasRows)
foreach (DbDataRecord item in Read)
{
zp6.Add(item);
}
}
catch
{
}
}
return zp6;
}
/////Запит № 7 Вибрати усі закази за номером заказу ключем;
public ArrayList zp7(string vk)
{
ArrayList zp7 = new ArrayList();
using (SqlConnection sqlcon = new SqlConnection(connectionString))
{
string QUERY =
string.Format("SELECT [№ заказу] AS [Номер заказу], [Код білету], [ПІБ Клієнта], [Дата покупки], [Дата відправлення] FROM Закази WHERE (Закази.[№ заказу] = '{0}') ", vk);
SqlCommand Comm = new SqlCommand(QUERY, sqlcon);
try
{
sqlcon.Open();
SqlDataReader Read = Comm.ExecuteReader();
if (Read.HasRows)
foreach (DbDataRecord item in Read)
{
zp7.Add(item);
}
}
catch
{
}
}
return zp7;
}
/////Запит № 8 Вибрати потяг за його ключем;
public ArrayList zp8(string vk)
{
ArrayList zp8 = new ArrayList();
using (SqlConnection sqlcon = new SqlConnection(connectionString))
{
string QUERY =
string.Format("SELECT Закази.[№ заказу] AS [Номер заказу], Потяги.[№ потягу] AS [Номер потягу], Потяги.[Початкова зупинка], Потяги.[Кінцева зупинка],Потяги.[Вид потягу] FROM Потяги CROSS JOIN Закази WHERE (Потяги.[№ потягу] = '{0}') ", vk);
SqlCommand Comm = new SqlCommand(QUERY, sqlcon);
try
{
sqlcon.Open();
SqlDataReader Read = Comm.ExecuteReader();
if (Read.HasRows)
foreach (DbDataRecord item in Read)
{
zp8.Add(item);
}
}
catch
{
}
}
return zp8;
}
/////Запит № 10 Вибрати список заказів, які купив заданий клієнт;
public ArrayList zp10(string vk)
{
ArrayList zp10 = new ArrayList();
using (SqlConnection sqlcon = new SqlConnection(connectionString))
{
string QUERY =
string.Format("SELECT Закази.[№ заказу] AS [Номер заказу], Закази.[ПІБ Клієнта], [Ціна білету].[Початкова зупинка], [Ціна білету].[Кінцева зупинка], Закази.[Дата покупки], [Ціна білету].Ціна FROM Закази INNER JOIN [Ціна білету] ON Закази.[Код білету] = [Ціна білету].[Код білету]WHERE (Закази.[ПІБ Клієнта] = '{0}') ", vk);
SqlCommand Comm = new SqlCommand(QUERY, sqlcon);
try
{
sqlcon.Open();
SqlDataReader Read = Comm.ExecuteReader();
if (Read.HasRows)
foreach (DbDataRecord item in Read)
{
zp10.Add(item);
}
}
catch
{
}
}
return zp10;
}
}
}
Головна форма:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Collections;
namespace KURSBD
{
public partial class Form1 : Form
{ bd bd = new bd();
public Form1()
{
InitializeComponent();
//SettingDGBeditors();
}
private void Form1_Load(object sender, EventArgs e)
{
// TODO: данная строка кода позволяет загрузить данные в таблицу "вокзалDataSet.Ціна_білету". При необходимости она может быть перемещена или удалена.
this.ціна_білетуTableAdapter.Fill(this.вокзалDataSet.Ціна_білету);
// TODO: данная строка кода позволяет загрузить данные в таблицу "вокзалDataSet.Потяги". При необходимости она может быть перемещена или удалена.
this.потягиTableAdapter.Fill(this.вокзалDataSet.Потяги);
// TODO: данная строка кода позволяет загрузить данные в таблицу "вокзалDataSet.Вид_потягу". При необходимости она может быть перемещена или удалена.
this.вид_потягуTableAdapter.Fill(this.вокзалDataSet.Вид_потягу);
// TODO: данная строка кода позволяет загрузить данные в таблицу "вокзалDataSet.Вид_вагона". При необходимости она может быть перемещена или удалена.
this.вид_вагонаTableAdapter.Fill(this.вокзалDataSet.Вид_вагона);
// TODO: данная строка кода позволяет загрузить данные в таблицу "вокзалDataSet.Закази". При необходимости она может быть перемещена или удалена.
this.заказиTableAdapter.Fill(this.вокзалDataSet.Закази);
// TODO: данная строка кода позволяет загрузить данные в таблицу "вокзалDataSet1.Вид_потягу". При необходимости она может быть перемещена или удалена.
// string ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Вокзал.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
// SqlConnection connect = new SqlConnection(ConnectionString);
// try
// {
// connect.Open();
// }
// catch
// {
// MessageBox.Show("Не вдалось підключитись до бази даних");
// }
// string query = @"SELECT * FROM [Вид вагона];";
// connect.Open();
// SqlCommand command = new SqlCommand(query, connect);
// SqlDataReader resultSQL = command.ExecuteReader();
// while (resultSQL.Read())
// {
// label2.Text = resultSQL["Ціна білету"].ToString();
// }
//string String_SELECT = "SELECT Вид FROM Вид вагона where Вид = Плацкарт;";
// SqlCommand Command = new SqlCommand(String_SELECT, Connection);
}
/* void SettingDGBeditors()
{
try
{
dbv_Debitors.Columns["Вид"].Visible = true;
dbv_Debitors.Columns["Ціна білету"].Visible = false;
// dbv_Debitors.Columns["IN"].Visible = false;
dbv_Debitors.TopLeftHeaderCell.Value = "#";
dbv_Debitors.Columns["Вид"].HeaderText = "ПІБ клієнта";
}
catch
{
}
}
*/
private void button1_Click(object sender, EventArgs e)
{
tickets_ALL a = new tickets_ALL(); //всі квитки
a.Show();
}
private void button2_Click(object sender, EventArgs e)
{
LAST_tickets a = new LAST_tickets(); //всі квитки
a.Show();
}
private void button4_Click(object sender, EventArgs e)
{
textBox1.Visible = true;
label1.Visible = true;
button3.Visible = true;
textBox1.Focus();
}
private void button3_Click(object sender, EventArgs e)
{
if (textBox1.Text == "123")
{
ADMIN a = new ADMIN(); //форма пошуку
a.Show();
textBox1.Text = "";
textBox1.Visible = false;
label1.Visible = false;
button3.Visible = false;
}
else { textBox1.Text = ""; MessageBox.Show("Невірний пароль"); textBox1.Focus(); }
}
private void button5_Click(object sender, EventArgs e)
{
zakaz a = new zakaz(); //всі квитки
a.Show();
}
private void button6_Click(object sender, EventArgs e)
{
// ArrayList allDebitors = bd.GetAllDebitors(textBox1.Text);
ArrayList zp1_Vsi_zupunky= bd.zp1_Vsi_zupunky();
dbv_zp.DataSource = zp1_Vsi_zupunky;
// dbv_Debitors.TopLeftHeaderCell.Value = "#";
// dbv_Debitors.Columns["Вид"].HeaderText = "ПІБ клієнта";
label13.Text = "1) Вибрати всі зупинки потяга";
}
private void button7_Click(object sender, EventArgs e)
{
ArrayList zp2_Vsi_zupunky = bd.zp2_Vsi_zupunky(comboBox3.Text);
dbv_zp.DataSource = zp2_Vsi_zupunky;
label13.Text = "2) які відносяться до заданого виду потягу;";
}
private void button8_Click(object sender, EventArgs e)
{
if (zp3textBox3.Text == "Введіть ціну") {
MessageBox.Show("Введіть ціну в форматі наприклад 30");
}
ArrayList zp3 = bd.zp3(zp3textBox3.Text,zp3comboBox2.Text);
dbv_zp.DataSource = zp3;
label13.Text = " 3) Вибрати всі закази, з них:\n– які відносяться до заданої ціни білету;\n– які відносяться до заданої кінцевої зупинки.";
}
private void zp3textBox3_Click(object sender, EventArgs e)
{
zp3textBox3.Text = "";
}
private void zp4textBox4_Click(object sender, EventArgs e)
{
zp4textBox4.Text = "";
}
private void button9_Click(object sender, EventArgs e)
{
if (zp4textBox4.Text == "Введіть ціну")
{
MessageBox.Show("Введіть ціну в форматі наприклад 30");
}
int k = int.Parse( zp4textBox4.Text);
ArrayList zp4 = bd.zp4(zp4comboBox2.Text,k );
dbv_zp.DataSource = zp4;
label13.Text = "Вибрати всі ціни на білети, з них:\n- які відповідають номеру потягу;\n- які мають ціну не більшу за дану;";
}
private void button10_Click(object sender, EventArgs e)
{
ArrayList zp5 = bd.zp5(stBox2.Text, endBox4.Text,vudBox5.Text);
dbv_zp.DataSource = zp5;
label13.Text = " 5) Вибрати Потяги, з них:\n- які відносяться до певної початкової зупинки;\n- які відносяться до певної кінцевої зупинки;\n- які відносяться до певного виду потягу;\n";
}
private void button11_Click(object sender, EventArgs e)
{
if (namberZakazyBox3.Text == "")
{
MessageBox.Show("Введіть номер заказу");
}
ArrayList zp6 = bd.zp6(namberZakazyBox3.Text);
dbv_zp.DataSource = zp6;
label13.Text = " 6) Вибрати усі закази за номером білету";
}
private void button12_Click(object sender, EventArgs e)
{
if (textBox3.Text == "")
{
MessageBox.Show("Введіть номер заказу"); }
ArrayList zp7 = bd.zp7(textBox3.Text);
dbv_zp.DataSource = zp7;
label13.Text = " 7) Вибрати заказ за його ключем";
}
private void button13_Click(object sender, EventArgs e)
{
if (textBox4.Text == "") {
MessageBox.Show("Введіть номер потягу"); }
ArrayList zp8 = bd.zp8(textBox4.Text);
dbv_zp.DataSource = zp8;
label13.Text = " 8) Вибрати потяг за його ключем"; }
private void button14_Click(object sender, EventArgs e) {
if (comboBox1.Text == "") {
MessageBox.Show("Введіть номер потягу"; }
ArrayList zp10 = bd.zp10(comboBox1.Text);
dbv_zp.DataSource = zp10;
label13.Text = " Вибрати список заказів, які купив заданий клієнт"; }
}
}
Форма Заказу білету:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace KURSBD
{
public partial class zakaz : Form
{
bd bd = new bd();
public zakaz()
{
InitializeComponent();
}
private void zakaz_Load(object sender, EventArgs e)
{
dateTimePicker1.CustomFormat = "dd.MM.yyyy";
dateTimePicker2.CustomFormat = "dd.MM.yyyy";
// TODO: данная строка кода позволяет загрузить данные в таблицу "вокзалDataSet.Вид_потягу". При необходимости она может быть перемещена или удалена.
this.вид_потягуTableAdapter.Fill(this.вокзалDataSet.Вид_потягу);
// TODO: данная строка кода позволяет загрузить данные в таблицу "вокзалDataSet.Закази". При необходимости она может быть перемещена или удалена.
this.заказиTableAdapter.Fill(this.вокзалDataSet.Закази);
// TODO: данная строка кода позволяет загрузить данные в таблицу "вокзалDataSet.Ціна_білету". При необходимости она может быть перемещена или удалена.
this.ціна_білетуTableAdapter.Fill(this.вокзалDataSet.Ціна_білету);
// TODO: данная строка кода позволяет загрузить данные в таблицу "вокзалDataSet.Потяги". При необходимости она может быть перемещена или удалена.
this.потягиTableAdapter.Fill(this.вокзалDataSet.Потяги);
tabControl1.TabPages.Remove(tabPage2);
dataGridView7.Columns.Add("№", "№");
dataGridView7.Columns["№"].Width = 50;
dataGridView7.Columns.Add("Information", "Information");
dataGridView7.Columns["Information"].Width = 150;
}
string nomer1;
private void dataGridView7_CellClick_1(object sender, DataGridViewCellEventArgs e)
{
int columnIndex = dataGridView7.CurrentCell.ColumnIndex;
textBox1.Text = Convert.ToString(columnIndex);
if (dataGridView7.CurrentCell.ColumnIndex == 6)
{
// label24.Text = "*";
int r = dataGridView7.CurrentCell.RowIndex;
if ((dataGridView7.Rows[r].Cells[0].Value.ToString() != "") && (dataGridView7.Rows[r].Cells[1].Value.ToString() != "") && (dataGridView7.Rows[r].Cells[2].Value.ToString() != ""))
{
int number3 = dataGridView7.CurrentCell.RowIndex;
nomer1 = dataGridView7.Rows[number3].Cells[0].Value.ToString() + " " + dataGridView7.Rows[number3].Cells[1].Value.ToString() + " " + dataGridView7.Rows[number3].Cells[2].Value.ToString();
tabPage2.Text = nomer1;
// pictureBox2.ImageLocation = Application.StartupPath + "/Image/" + nomer1 + ".jpg";
Size s = new Size();
s.Width = 667;
s.Height = 660;
this.Size = s;
Size s1 = new Size();
s1.Width = 633;
s1.Height = 597;
tabControl1.Size = s1;
tabControl1.TabPages.Remove(tabPage1);
tabControl1.TabPages.Add(tabPage2);
}
else
{ MessageBox.Show("Введіть прізвище, імя, по-батькові"); }
}
}
private void button1_Click(object sender, EventArgs e)
{
// dataGridView1.Rows.Add("1","1","1","1","1","1","1");
}
// int i = 0;
private void button2_Click(object sender, EventArgs e)
{
//i++;
//dataGridView7.Rows.Add(i.ToString(), textBox5.Text);
//int a,b,c;
// ;
// b = int.Parse();
// dataGridView2.Rows[dataGridView2.RowCount - 1].Selected = true;
if (textBox5.Text == "" || comboBox1.Text == "" || textBox6.Text == "" || dateTimePicker1.Value == null || dateTimePicker2.Value == null || textBox7.Text == "" || textBox8.Text == "")
{
MessageBox.Show("Введіть всі дані для замовлення ");
}
else
{
DataTable dt = вокзалDataSet.Tables["Закази"];
DataRow newRow = вокзалDataSet.Tables["Закази"].NewRow();
newRow["№ заказу"] = textBox5.Text;
newRow["Код білету"] = comboBox1.Text;
newRow["ПІБ Клієнта"] = textBox6.Text;
newRow["Дата покупки"] = dateTimePicker1.Value.ToShortDateString();
newRow["Дата відправлення"] = dateTimePicker2.Value.ToShortDateString();
newRow["№ Вагону"] = textBox7.Text;
newRow["№ Місця"] = textBox8.Text;
// textBox6.Text = dateTimePicker1.Value.ToShortDateString() ;
// заказиTableAdapter.Update(newRow);
dt.Rows.Add(newRow);
///Validate();
//заказиBindingSource.EndEdit();
//заказиTableAdapter.Update(вокзалDataSet);
// Validate();
// заказиTableAdapter.Update(вокзалDataSet, "Закази");
//заказиTableAdapter.Update(вокзалDataSet.Закази);
}
Save();
//Validate();
// заказиBindingSource.EndEdit();
// заказиTableAdapter.Fill(вокзалDataSet);
// заказиTableAdapter.Update(вокзалDataSet);
// MessageBox.Show("Дані збережено");
// dataGridView7.Rows.Add("dc","sdc");
//dataGridView2.Rows.Add(12);
// dataGridView3.Rows.Add("ntcn");
// this.dataGridView2.Rows.Add(int.Parse(textBox5.Text), comboBox1.Text, textBox6.Text, textBox11.Text, textBox7.Text, textBox8.Text);
// заказиTableAdapter.Insert( int.Parse(textBox5.Text), comboBox1.Text, textBox6.Text, textBox10.Text, int.Parse(textBox11.Text), int.Parse(textBox7.Text), int.Parse(textBox8.Text));
//заказиTableAdapter.Update(вокзалDataSet);
}
public void Save()
{
DataSet ds = вокзалDataSet.GetChanges();
if (ds != null)
{
вокзалDataSet.AcceptChanges();
заказиTableAdapter.Update(вокзалDataSet);
}
else
{
MessageBox.Show("Not changes!!! Not save!!!");
}
}
private void button3_Click(object sender, EventArgs e)
{
Validate();
заказиBindingSource1.EndEdit();
// заказиTableAdapter.Fill(вокзалDataSet);
заказиTableAdapter.Update(вокзалDataSet);
MessageBox.Show("Дані збережено");
}
}
}
ДОДАТОК Б
Інструкція користувача
Після запуску програми відкриється вікно, зображене на рисунку Б1. Вікно розділене на багато частин, але можна виділити 2 основні:
Запити;
Адмін панель.
Рисунок Б1 – Стартовий вигляд вікна програми
Більша частина вікна призначена для виведення відведена піж запити користувача. Виведення запиту здійснюється натисканням відповідної кнопки «Запит №».
У відповідні поля запиту вводяться відповідні значення після чого відбувається виведення значень в таблицю яка розташована в правому верхньому куті програми .
Для того щоб переглянути розклад руху потрібно натиснути на «Переглянути розклад » і перед нами з’явиться форма яка зображена на рисунку Б2.
Рисунок Б2 – Перегляд розкладу
В даній формі можна виконати пошук по полях для зручності відображення інформації . Щоб залишити дану форму слід закрити дану форму після чого відбудеться повернення на форму яка зображена на рисунку Б1.
Для виконання відповідного запиту слід ввести дані або вибрати відповідні з випадаючого списку . Приклад виконання запиту під номером 10 зображено на рисунку Б3.
Рисунок Б3 – Приклад виконання запиту під номером 10
Для того щоб виконати запит під номером 10(заказ квитків) потрібно перейти по відповідній кнопці на головній формі «Заказ(запит№10)». Після цього перед вами відкриється вікно зображене на рисунку Б4 .
Рисунок Б4 – Форма заказу
Для здійснення даного запиту вам потрібно заповнити відповідні данні та натиснути на кнопку «Заказати квиток », після чого він буде доступний в таблиці нижче. Для повернення на головну форму потрібно закрити дане вікно.
Для переходу в режим адміністратора(доступне редагування всіх доступних таблиць бази даних) потрібно натиснути на відповідну кнопку «перейти в адмінку» ввести пароль(за замовчуванням «123») і натиснути клавішу «ОК» форма входу зображена на рисунку Б5.
Рисунок Б5 – Форма входу в адміністративну панель
Після цього перед вами з’явиться вікно адміністратора яке зображене на рисунку Б5 з зображенням усіх доступних таблиць бази даних.
Рисунок Б6 – Адміністративна панель
Для переходу в режим редагування потрібно натиснути на відповідну кнопку з назвою , наприклад «Вид вагону » і перед нами з’явиться наступне вікно яке зображене на рисунку Б7.
Рисунок Б7 – Приклад редагування таблиці «Вид вагону»
Для того щоб видалити відповідний елемент з списку потрібно натиснути на відповідний запис і на клавішу «Видалити із списку », після чого появиться вікно підтвердження яке зображене на рисунку Б8.
Рисунок Б7 – Підтвердження видалення запису з таблиці
Для того щоб додати новий запис потрібно просто ввести нові дані в таблиці і натиснути на кнопку «Зберегти» Після чого підтвердити збереження і повернутися в головне меню адміністративної панелі .
Для того щоб повернутися на головну форму потрібно закрити дане вікно .
Щоб подивитись інформацію про автора слід обрати пункт меню «Про Автора». Зображення вікна, що з’явиться наведено на рисунку Б8.
Рисунок Б8 – Про програму
ДОДАТОК В
Приклад роботи програми
Запустимо програму на виконання і виконаємо запит №1 (рисунок В1).
Рисунок В1 – Виведення всіх зупинок потяга
Виконаємо запит номер 4 за 2 критеріями ,і взнаємо як програма на це відреагує . Приклад виконання запиту №4 зображено на рисунку (рисунок В2).
Рисунок В2 – Виконання запиту №4
Здійснимо заказ і виконаємо запит під номером 9 . Введемо всі дані і перевіримо робочі можливості програми . Виконання запиту на добавлення нових даних зображено на рисунку В3.
Рисунок В3 – Виконання запиту №9
Всі дані добавились Результат коректний . Як бачимо, програма працює коректно всі дані для заказу зберігаються в базі даних .В процесі роботи програми не було виявлено ніяких недоліків значить даний програмний продукт виконує своє пряме призначення .
ДОДАТОК Г
Графічні матеріали
Схема реляційної моделі даних
ER-модель бази тестових завдань з дисциплін фахової підготовки
Алгоритм виконання програми
