База даних станції технічного обслуговування автомобілів «Garage Inc.»

Автор работы: Пользователь скрыл имя, 02 Июня 2013 в 11:29, курсовая работа

Описание

Існує деяка фірма, що займається доопрацюванням автомобілів (далі – СТО). Фірма пропонує своїм клієнтам послуги з встановлення або заміни запчастин, виконання робіт, пов‘язаних з ремонтом або налаштуванням авто, тощо. Крім того, кожен автомобіль має вичерпну інформацію про характеристики. Фірма має своїх клієнтів, інформацію про яких зберігає протягом певного часу.

Содержание

1 Завдання 3
2 Вступ 4
3 Керівництво користувачеві 6
3.1 Встановлення програми 6
3.2 Інтерфейс користувача 7
4 Керівництво розробнику 16
4.1 Опис бази даних 16
4.2 Опис програми 19
5 Заключення 22
6 Додаток 23
6.1 Додаток 1 23
6.2 Додаток 2 23
6.3 Додаток 3 26
7 Література 29

Работа состоит из  1 файл

записка_к_курсовой.DOC

— 503.50 Кб (Скачать документ)

 

Також в базі даних  містяться представлення:

  1. ShortOrderInfo – представляє скорочену інформацію про замовлення.
  2. FullOrderInfo – представляє повну інформацію про замовлення.

 

Для формування вибірок  даних і для зміни даних були створені процедури (stored procedures):

  1. spAddDataForCategory – додає нову цінову категорію;
  2. spAddDataForCountry – додає нову країну;
  3. spAddDataForSimpleForm – додає запис для марки авто, моделі, типу привода, типу кузова, типу двигуна або розміщення двигуна;
  4. spDeleteAddress – видаляє адреси для вказаного клієнта;
  5. spDeleteCar – видаляє автомобіль для вказаного клієнта;
  6. spDeleteCustomer – видаляє вказаного клієнта;
  7. spDeleteCustomerOrders – видаляє замовлення для вказаного клієнта;
  8. spDeleteDataForCategory – видаляє цінову категорію;
  9. spDeleteDataForCountry – видаляє країну;
  10. spDeleteDataForSimpleForm - видаляє запис для марки авто, моделі, типу привода, типу кузова, типу двигуна або розміщення двигуна;
  11. spGetAddressById – вибирає адреси клієнта по вказаному ідентифікатору;
  12. spGetAddressesForCustomer – вибирає адреси для вказаного клієнта;
  13. spGetAllServicesAndDetails – вибирає всі послуги і прив‘язані до них деталі;
  14. spGetBodyTypeList – вибирає типи кузова автомобілів;
  15. spGetCarById – вибирає автомобіль за вказаним ідентифікатором;
  16. spGetCarList – вибирає список автомобілів;
  17. spGetCarMarkList, spGetCarMarks – вибирає список марок авто;
  18. spGetCategoryList – вибирає список цінових категорій авто;
  19. spGetCountryList – вибирає список країн;
  20. spGetCustomerAddresses – вибирає адреси для вказаного клієнта;
  21. spGetCustomerById – вибирає клієнта за вказаним ідентифікатором;
  22. spGetCustomerCars – вибирає автомобілі для вказаного клієнта;
  23. spGetCustomerList – вибирає список клієнтів;
  24. spGetCustomerOrders – вибирає замовлення для вказаного клієнта;
  25. spGetDataForCategories – вибирає цінові категорії;
  26. spGetDataForSimpleForm – вибирає дані для марки авто, моделі, типу привода, типу кузова, типу двигуна або розміщення двигуна;
  27. spGetDriveTypeList – вибирає список типів приводу автомобілів;
  28. spGetEnginePlaceList – вибирає список розміщень двигуна;
  29. spGetEngineTypeList – вибирає список типів двигунів;
  30. spGetFullOrderInfo – вибирає детальну інформацію про замовлення;
  31. spGetModelList, spGetCarModels – вибирає список моделей авто;
  32. spGetPaymentTypeList – вибирає список оплати;
  33. spGetShortOrderInfo – вибирає коротку інформацію про замовлення.
  34. spGetPaymentTypeList – вибирає список способів оплати;
  35. spSaveOrder – зберігає інформацію про замовлення;
  36. spUpdateDataForCategory – оновлює вказану цінову категорію;
  37. spUpdateDataForCountry – оновлює вказану країну;
  38. spUpdateDataForSimpleForm – оновлює вказаний запис для марки авто, моделі, типу привода, типу кузова, типу двигуна або розміщення двигуна.

В базі даних також  було створено тригери для коректного видалення та редагування даних.

В додатку 1 подано діаграму даних і зв‘язків в базі.

    1. Опис програми

Як вже зазначалося, програма написана за архітектурою «клієнт-сервер». Для роботи з базою даних були написані наступні класи:

  1. Address –адреса клієнта;
  2. BodyType – тип кузова авто;
  3. BulkSearch – клас, що має методи для створення списків клієнтів та їх автомобілів, марок, моделей авто, країн, типів приводу, типів кузову, типів двигунів, положень двигунів, цінових категорій, способів оплати та список адрес клієнтів. Також має метод для здійснення пошуку клієнта.
  4. Car – автомобіль клієнта, містить інформацію про марку, модель авто, країну-виробник, тип приводу, тип кузову, тип двигуна, положення і об‘єм, двигуна, цінову категорію.
  5. CarMark – марка автомобіля;
  6. Category – цінова категорія авто.
  7. Country – країна, яка використовується як країна-виробник авто і країна в адресі клієнта;
  8. Customer – клієнт (замовник), містить П.І.Б клієнта, його контактний телефон і спосіб оплати;
  9. Detail – запчастина;
  10. DriveType – тип приводу;
  11. EnginePlace – розміщення двигуна;
  12. EngineType – тип двигуна;
  13. Model – модель авто;
  14. Order – замовлення;
  15. OrdersLoader
  16. Payment – спосіб оплати;
  17. Service – послуга.

Всі вищенаведені класи  забезпечують зв‘язок з базою  даних, інформація з бази зберігається у відповідних об‘єктах.

Для зв‘язку з базою даних використовуються два підходи: із використанням класів SqlConnection, SqlCommand і SqlDataReader; та із використанням технології ADO.NET. Приклади коду програми із використанням обох підходів наведено в додатку 2.

Для реалізації інтерфейсу користувача було створено наступні візуальні класи:

  1. Form1.cs – клас головної форми. В ньому використані:
    1. Об‘екти класу Panel – для створення окремих «форм» для редагування клієнтів, замовлень та для стартової форми.
    2. Об‘єкти gridControlLinks – для створення контейнерів з декількома панелями всередині (напр., рис. 3.7).
    3. Стандартні класи для створення кнопок, випадаючих та стаціонарних списків, написів та написів-посилань, малюнків на кнопках та ін.
  2. FormCalendar.cs – клас для випадаючого календаря. Для створення календаря було використано стандартний компонент MonthCalendar.
  3. gridControl.cs – клас-контейнер, в який можна програмним чином додавати дочірні елементи управління.
  4. serviceControl.cs – елемент управління, який відображає одну послугу в контейнері gridControl на формі редагування замовлень.
  5. CarControl.cs – елемент управління, який відображає одну машину в контейнері gridControl на формі редагування клієнта.
  6. SimpleForm.cs – універсальна форма, яка використовується для редагування інформації про марки авто, моделі, тип привода, тип кузова, тип двигуна або розміщення двигуна. В ній використовується  стандартний клас ListView для відображення даних у вигляді таблиці.
  7. CountryForm.cs, AddressForm.cs, CategoryForm.cs та AddDetailToService.cs – класи, подібні до SimpleForm, але мають можливість редагування додаткових даних, таких як список країн в AddressForm, ціновий коефіцієнт в CategoryForm тощо.

 

  1. Заключення

Програма «Garage Inc.», написана в ході курсової роботи, є досить зручним і, водночас, простим засобом ведення обліку замовлень та клієнтів СТО.

Дана програма може слугувати, також, і в якості навчальної програми для вивчення засобів і прийомів програмування на платформі Micrisoft .NET 2003®, використання технології ADO.NET, робот  из сервером баз даних MS SQL Server 2000®.

Програма може бути розширена  і доповнена, тобто може бути використана  як база для написання проектів, що покривають більш широке коло: ведення  бухгалтерського обліку на підприємстві; база даних автосалону, з можливістю врахування вартості поставок автомобілів від різних постачальників; база даних дизайнерського ательє з реставрації автомобілів; електронний склад запчастин, тощо.

 

  1. Додаток

    1. Додаток 1

Рис.  6.1 Діаграма зв‘язків між таблицями в базі даних

    1. Додаток 2

Приклад використання в  програмі класів SqlConnection, SqlCommand і SqlDataReader для роботи з базою даних. Метод LoadCars в класі Customer.

 

public void LoadCars()

{

/// ініціалізація об‘єктів

/// рядок з‘єднання зчитується  з конфігураційного файлу

this.ConnectionString = ConfigurationSettings.AppSettings["sqlconnectionstring"];

this._cars = new ArrayList();

this._addresses = new ArrayList();

 

/// створення об‘єктів з‘єднання, SQL-команди і 

/// потоку зчитування даних

SqlConnection connection = new SqlConnection(this.ConnectionString);

SqlCommand command = new SqlCommand();

SqlDataReader dataReader = null;

 

try

{

/// відкриття з‘єднання, виклик  процедури spGetCustomerCars

connection.Open();

command.Connection = connection;

command.CommandText = "spGetCustomerCars";

command.CommandType = CommandType.StoredProcedure;

command.Parameters.Add("@id", this.Id);

dataReader = command.ExecuteReader();

 

if (dataReader != null)

{

/// зчитування даних в об‘єкт  car

this._cars = new ArrayList();

while (dataReader.Read())

{

/// заповнюєм об‘ект car

Car car = new Car();

car.BodyTypeId = Convert.ToInt32(dataReader["bodyTypeId"]);

car.CarMarkId = Convert.ToInt32(dataReader["CarMarkId"]);

car.CategoryId = Convert.ToInt32(dataReader["CategoryId"]);

car.CountryId = Convert.ToInt32(dataReader["CountryId"]);

car.CustomerId = Convert.ToInt32(dataReader["CustomerId"]);

car.DriveTypeId = Convert.ToInt32(dataReader["DriveTypeId"]);

car.EnginePlaceId = Convert.ToInt32(dataReader["EnginePlaceId"]);

car.EngineTypeId = Convert.ToInt32(dataReader["EngineTypeId"]);

car.Id = Convert.ToInt32(dataReader["Id"]);

car.ModelId = Convert.ToInt32(dataReader["ModelId"]);

car.Velium = dataReader["Velium"].ToString();

 

/// додаємо car до масиву _cars

this._cars.Add(car);

}

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

connection.Close();

}

}


Приклад використання в  програмі технології ADO.NET.

 

public void SaveOrAddCustomer(int action)

{

SqlConnection connection = new SqlConnection(this.ConnectionString);

SqlCommand command = new SqlCommand();

SqlDataAdapter DA = new SqlDataAdapter();

DataSet DS = new DataSet("customer");

 

/// тут використовується DataSet, що заповнюється

/// даними про клієнта. Це необхідно, щоб створилися об‘єкти

/// Table, Row і Column в об‘єкті DataSet

connection.Open();

command.Connection = connection;

command.CommandText = "spGetCustomerById";

command.CommandType = CommandType.StoredProcedure;

command.Parameters.Add("@id", this.Id);

 

DA.SelectCommand = command;

SqlCommandBuilder CB = new SqlCommandBuilder(DA);

 

try

{

DA.Fill(DS);

 

if (DS.Tables[0] != null)

{

/// в залежності від параметра  action

/// виконуємо або заповнення DataSet даними,

/// або додаємо новий рядок  Row, який заповнюємо даними

switch (action)

{

case 1:

DS.Tables[0].Rows[0][DS.Tables[0].Columns["name"]] = this.Name;

DS.Tables[0].Rows[0][DS.Tables[0].Columns["patronymic"]] = this.Patronymic;

DS.Tables[0].Rows[0][DS.Tables[0].Columns["surname"]] = this.Surname;

DS.Tables[0].Rows[0][DS.Tables[0].Columns["phone"]] = this.Phone;

DS.Tables[0].Rows[0][DS.Tables[0].Columns["paymentTypeId"]] = this.PaymentTypeId;

break;

case 2:

DataRow row = DS.Tables[0].NewRow();

row["name"] = this.Name;

row["patronymic"] = this.Patronymic;

row["surname"] = this.Surname;

row["phone"] = this.Phone;

row["paymentTypeId"] = this.PaymentTypeId;

DS.Tables[0].Rows.Add(row);

break;

}

/// оновлюємо DataSet

/// технологія ADO.NET дозволяє оновити  набір даних

/// на основі запиту типу SELECT. При цьому клас DataSet

/// автоматично генерує відповідний  запит типу UPDATE

/// або INSERT.

DA.Update(DS);

 

if (action == 2)

{

this.GetCustomerById(this.Id);

}

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

connection.Close();

}

}


 

    1. Додаток 3

Приклад методу FindCustomer классу BulkSearch, що виконує пошук клієнта.

 

public void FindCustomer(string _name, string _address, string _car, string logic)

{

string name = _name;

string address = _address;

string car = _car;

string query = "";

/// масив символів, що ігноруються при вводі і розділяють рядок на

/// окремі терми

char [] separators = {',', ' ', '.', ';', ';', ',', '.'};

bool first = true;

bool added = false;

 

/// масив для пошуку по  П.І.Б. клієнта

string[] nameArr = name.Split(separators);

 

/// початок формування запиту для пошуку в таблиці клієнтів

if (_name.Trim().Length > 0)

query = "SELECT c.[id], c.[name], c.[patronymic], c.[surname] FROM tblCustomer c WHERE ";

foreach (string item in nameArr)

{

/// конкатенація запиту, використовується

/// оператор LIKE для часткового співпадання слів

if (item.Trim().Length > 0)

{

if (first != true)

{

query += " " + logic + " ";

}

else

first = false;

query += " (c.[name] LIKE'%" + item.Trim() + "%' " + logic + " c.[patronymic] LIKE'%" + item.Trim() + "%' " + logic + " c.[surname] LIKE'%" + item.Trim() + "%') ";

added = true;

}

}

 

/// формування другого запиту  – для пошуку в таблиці адрес

if (_address.Trim().Length > 0)

{

if (added == true)

{

/// об‘єднання запитів в один

query += " UNION ALL ";

}

added = false;

query += "SELECT DISTINCT c.[id], c.[name], c.[patronymic], c.[surname] FROM tblCustomer c INNER JOIN tblAddress a ON a.customerId = c.[id] WHERE ";

string[] addrArr = _address.Split(separators);

first = true;

foreach (string item in addrArr)

{

if (item.Trim().Length > 0)

{

if (first != true)

{

query += " " + logic + " ";

}

else

first = false;

query += " (a.[address] LIKE'%" + item.Trim() + "%') ";

added = true;

}

}

}

            

/// формування третього запиту  – для пошуку в таблиці автомобілів

if (_car.Trim().Length > 0)

{

if (added == true)

{

/// об‘єднання запитів

query += " UNION ALL ";

}

query += "SELECT DISTINCT c.[id], c.[name], c.[patronymic], c.[surname] FROM tblCustomer c INNER JOIN tblCar a ON a.customerId = c.[id] WHERE ";

string[] carArr = _car.Split(separators);

first = true;

foreach (string item in carArr)

{

if (item.Trim().Length > 0)

{

if (first != true)

{

query += " " + logic + " ";

}

else

first = false;

query += " (a.carMarkId IN (SELECT [id] FROM tblCarMark WHERE [name] LIKE'%" + item.Trim() + "%') " + logic + " a.modelId IN (SELECT [id] FROM tblModel WHERE [name] LIKE'%" + item.Trim() + "%')) ";

added = true;

}

}

}

 

if (query.Trim().Length > 0)

{

/// додаємо умову сортування

query += " ORDER BY c.[surname], c.[name], c.[patronymic];";

 

/// виконуємо запит

SqlConnection connection = new SqlConnection(this.ConnectionString);

SqlCommand command = new SqlCommand();

SqlDataReader dataReader = null;

 

try

{

connection.Open();

command.Connection = connection;

command.CommandText = query;

command.CommandType = CommandType.Text;

 

dataReader = command.ExecuteReader();

 

/// зчитуємо результат запиту

if (dataReader != null)

{

this._customerList = new ArrayList();

while (dataReader.Read())

{

Customer cust = new Customer();

cust.Id = Convert.ToInt32(dataReader["id"]);

cust.Name = dataReader["name"].ToString();

cust.Patronymic = dataReader["patronymic"].ToString();

cust.Surname = dataReader["surname"].ToString();

this._customerList.Add(cust).ToString();

}

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

finally

{

connection.Close();

}

}

}


 

  1. Література

  1. Полный справочник по С#, Шилдг Г., 462 стр.; 2004 г.;
  2. С# и платформа .NET, Ендрю Троелсен, 328 стр.; 2003 г.;
  3. «Основы ADO.NET.», Боб Бошемин, 448 стр.; 2003 г.;
  4. «Практическое использование ADO.NET. Доступ к данным в Internet», Шон Вилдермьюс, 288 стр.; 2003 г.;
  5. «Разработка баз данных Microsoft SQL Server 2000 на примерах.», Роб Хоторн, 464 стр.; 2001 г.;



Информация о работе База даних станції технічного обслуговування автомобілів «Garage Inc.»