«Розробка бази даних для магазину побутової техніки»

Вид материалаДокументы

Содержание


With ( oids=false )
With ( oids=false)
With ( oids=false)
On update no action on delete no action
On update no action on delete no action)
Подобный материал:

Міністерство освіти і науки України

Одеський національний політехнічний університет

Кафедра інформаційних систем в менеджменті


Курсова робота

з дисципліни «Основи проектування баз даних»

на тему

«Розробка бази даних для магазину побутової техніки»


Виконала:

ст.гр. ОЕ-061(НТФ)

Попович Н.В.

Перевірили:

к.т.н., доц. Малахов Є.В.

ас. Мікулінська М.Г.


Одеса

2010

Зміст

Вступ
  1. Постановка задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
  2. Проектування БД . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
  3. Створення бази даних
    1. Створення сутностей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
    2. Заповнення сутностей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
    3. Запити до БД . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10
  4. Програмне забезпечення . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
  5. Програмна реалізація . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
  6. Тестовий приклад . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
  7. Інструкція для користувача . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24

Висновок

Список використаних джерел


Вступ

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

Нині уже важко собі уявити підприємство, в офісі якого немає кавоварки чи електрочайника, холодильника, НВЧ-печі, пилососа чи інших предметів побуту, які допомагають працівникам переносити «труднощі та незгоди» офісного життя.

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

Саме тому в даній курсовій роботі представлена база магазину побутової техніки. Проект реалізований з допомогою СУБД postgreSQL та C#.
  1. Постановка задач

Мета – створити базу даних для магазину побутової техніки з інтерфейсом, дружнім до користувача.

Задачі:
    • моделювання предметної області;
    • створення бази даних за допомогою СУБД postgreSQL (створення та заповнення сутностей, запити);
    • вибір програмного забезпечення ПО для реалізації;
    • опис програмної реалізації;


2. Проектування БД

Базами даних (БД) – називають електронні сховища інформації, доступ до яких здійснюється з одного або декількох комп'ютерів. Зазвичай БД створюється для зберігання і доступу до даних, що містять відомості про деякої наочної області, тобто деякій області людської діяльності або області реального світу.

Системи управління базами даних (СУБД) – це програмні засоби, призначені для створення, наповнення, оновлення і видалення даних БД.

Сутність – це множина об’єктів, що володіють однаковим набором атрибутів.

Екземпляр сутності – конкретний елемент цього набору.

Інформаційна модель – представляється у вигляді прямокутників що містять і назву сутності, і атрибути, і призначена для графічного представлення зв’язків між конкретними сутностями.

Інформаційна модель та типи зв’язків представлені на рис.1



Рис.1

Інформація, яка зберігається в сутностях, представлена в табл.1.

Табл.1

Назва сутності

Характеристика

Pokupci (покупці)

Люди, які здійснили покупку в магазині

Postachalnyky (постачальники)

Організації з доставки товару в магазин

Vyrobnyky (виробники)

Фірми виготовлення товару

Tovar (товар)

Відомості про продукцію

Prodazh (продаж)

Відомості з продажу товару



Атрибути кожної сутності представлені на рис 2-6.



Рис 2. Атрибути сутності «pokupci»



Рис 3. Атрибути сутності «postachalnyky»



Рис 4. Атрибути сутності «prodazh»



Рис 5. Атрибути сутності «tovar»



Рис 6. Атрибути сутності «vyrobnyky»

3. Створення бази даних

3.1. Створення сутностей

Покупці

CREATE TABLE pokupci

( id_buyer integer NOT NULL,

buyer_name character(50),

pasport character(15),

phone integer,

num_credit_account integer,

CONSTRAINT pokupci_pkey PRIMARY KEY (id_buyer) )

WITH ( OIDS=FALSE );

ALTER TABLE pokupci OWNER TO postgres;


Постачальники

CREATE TABLE postachalnyky

( id_provider integer NOT NULL,

provider_name character(50),

country character(50),

adress character(50),

phone integer,

CONSTRAINT postachalnyky_pkey PRIMARY KEY (id_provider) )

WITH ( OIDS=FALSE);

ALTER TABLE postachalnyky OWNER TO postgres;


Виробники

CREATE TABLE vyrobnyky

( id_manufacter integer NOT NULL,

manufacter_name character(50),

country character(50),

adress character(50),

phone integer,

CONSTRAINT vyrobnyky_pkey PRIMARY KEY (id_manufacter))

WITH ( OIDS=FALSE);

ALTER TABLE vyrobnyky OWNER TO postgres;


Товар

CREATE TABLE tovar

( id_product integer NOT NULL,

id_manufacter integer,

id_provider integer,

product_name character(50),

model character(20),

production_date date,

price_for_sale integer,

price_for_buy integer,

guarantee_years integer,

CONSTRAINT tovar_pkey PRIMARY KEY (id_product),

CONSTRAINT tovar_id_manufacter_fkey FOREIGN KEY (id_manufacter)

REFERENCES vyrobnyky (id_manufacter) MATCH SIMPLE

ON UPDATE NO ACTION ON DELETE NO ACTION,

CONSTRAINT tovar_id_provider_fkey FOREIGN KEY (id_provider)

REFERENCES postachalnyky (id_provider) MATCH SIMPLE

ON UPDATE NO ACTION ON DELETE NO ACTION)

WITH ( OIDS=FALSE);

ALTER TABLE tovar OWNER TO postgres;


Продаж

CREATE TABLE prodazh

( id_sale integer NOT NULL,

id_product integer,

id_buyer integer,

abatement_percents integer,

date_of_sale date,

count_of_saled integer,

CONSTRAINT prodazh_pkey PRIMARY KEY (id_sale),

CONSTRAINT prodazh_id_product_fkey FOREIGN KEY (id_product)

REFERENCES tovar (id_product) MATCH SIMPLE

ON UPDATE NO ACTION ON DELETE NO ACTION)

WITH ( OIDS=FALSE);

ALTER TABLE prodazh OWNER TO postgres;


3.2. Заповнення сутностей

Виробники

insert into vyrobnyky

values

(1, 'samsung', 'Koreya', 'kkkkkkkkk', 123456),

(2, 'nord', 'Ukraina', 'uuuuuuuuuuu', 321456),

(3, 'skarlet', 'Russia', 'rrrrrrrrrrrrrrr', 258974),

(4, 'ardo', 'Italia', 'iiiiiiiiiiiiiii', 23697),

(5, 'gorenje', 'China', 'ccccccccc', 124598),

(6, 'atlantic', 'Russia', 'rrrrrrruuuuuuu', 1216568),

(7, 'bosch', 'Germany', 'ggggggggggg', 4541355);


Постачальники

insert into postachalnyky

values

(101, 'Петренко', 'Ukraina', 'uuuuuuuu', 125478),

(102, 'Іванов', 'Ukraina', 'dddddddd', 125478),

(103, 'Чумак', 'Ukraina', 'vvvvvvvv', 45978),

(104, 'Козак', 'Ukraina', 'bbbbbbbb', 123646),

(105, 'Шевчук', 'Ukraina', 'aaaaaaaaa', 1246972),

(106, 'Попов', 'Ukraina', 'qqqqqqqq', 215487),

(107, 'Карпов', 'Ukraina', 'rrrrrrrrrrr', 236447);

Покупці

insert into pokupci

values

(1001, 'Мирний П.П.', 'ПА256784', 333333, 123456789 ),

(1002, 'Хвильовий М.М.','ПА245789',222222, 132456789 ),

(1003, 'Рильський М.М.','ПА123789',444444, 124356789),

(1004, 'Галушка Д.Д.','ПА124575', 555555, 123465789),

(1005, 'Павличко Д.Д.','ПА123457',666666, 123456879),

(1006, 'Франко І.Я.','ПА124578', 777777, 123456798),

(1007, 'Шевченко Т.Г.','ПА134679', 888888, 213456789),

(1008, 'Драгоманова Л.П.','ПА121518', 999999, 312456789),

(1009, 'Косач Л.П.','ПА767374',101010, 412356789),

(1010, 'Попова Н.В.','ПА464345', 111111, 512346789),

(1011, 'Попович К.К.','ПА968532', 121212, 612345789),

(1012, 'Білоус Д.Д.','ПА335599', 131313, 712345689),

(1013, 'Малишко А.М.','ПА575951',141414, 812345679),

(1014, 'Сосюра В.В.','ПА648935', 151515, 912345678),

(1015, 'Костенко Л.Н.','ПА369874',161616, 231456789),

(1016, 'Коцюбинський М.М.','ПА649278',171717, 241356789),

(1017, 'Куліш П.К.','ПА252623',181818, 251346789),

(1018, 'Тичина П.В.','ПА989796',191919, 261345789),

(1019, 'Тютюнник Г.Т.','ПА333232',202020, 27134589),

(1020, 'Чубинський П.І.','ПА456789',212121, 281345679);


Товар

insert into tovar

values

(10001, 1,103,'телевізор','samsung T250', '11.12.2009',5000,2500, 5),

(10002,2,106, 'холодильник', 'Р240', '14.10.2008',7800,5500 ,5) ,

(10003,3,101, 'праска', 'Д457', '5.07.2009', 450,150, 1),

(10004,4,105, 'витяг', 'В330', '13.03.2008', 1789,590, 1),

(10005,5,104, 'газова плита', 'Г123', '6.02.2007', 4500,2900, 3),

(10006,5,104, 'електроплита', 'ЕЛ245', '25.09.2009', 4860,2600, 3),

(10007,5,104, 'комбінована плита', 'КК56', '30.04.2008', 5600,4500, 4),

(10008,6,107, 'водонагрівач', 'ВГ487', '13.05.2008', 1800,600, 2),

(10009,7,102, 'пральна машина', 'ПР12', '29.10.2007', 3500,1500, 5),

(10010,7,102, 'машина для сушіння', 'СШ23', '21.04.2009', 3300,1900, 4),

(10011,7,102, 'машина для миття посуду', 'ПП4578', '23.12.2008', 5125,3100, 3),

(10012,2,106, 'морозильна камера', 'МР45', '24.08.2009', 1860,780, 1),

(10013,7,102, 'шафа для вина', 'ШВ33', '29.09.2009', 6000,2500, 5);


Продаж

insert into prodazh

values

(221, 10001, 1014, 0, '13.02.2010', 1),

(222, 10002, 1009, 0, '25.04.2010',1),

(223, 10003, 1019, 3, '14.03.2010', 3),

(224, 10004, 1016, 0, '23.02.2010', 2),

(225, 10005, 1001, 0,'13.02.2010', 5),

(226, 10006, 1012, 7, '14.03.2010', 2),

(227, 10007, 1003, 0, '23.02.2010', 1),

(228, 10008, 1005, 0, '25.04.2010',3),

(229, 10009, 1018, 0, '14.02.2010', 4),

(2210, 10010, 1007, 0, '15.02.2010',1),

(2211, 10011, 1017, 0, '15.02.2010', 2),

(2212, 10012, 1002, 2.5, '17.02.2010', 7),

(2213, 10013, 1006, 0, '18.02.2010', 2),

(2214, 10009, 1004, 0, '19.02.2010', 1),

(2215, 10013, 1015, 0, '20.02.2010', 2),

(2216, 10003, 1008, 0, '21.02.2010', 3),

(2217, 10008, 1010, 0, '22.02.2010', 5),

(2218, 10001, 1011, 0, '23.02.2010', 5),

(2219, 10012, 1013, 0, '24.03.2010', 2),

(2220, 10011, 1020, 0, '12.03.2010', 1);


3.3. Запити до БД

Показати постачальників

select*from postachalnyky;

Показати покупців

select*from pokupci;

Показати виробників

select*from vyrobnyky;

Показати товар

select*from tovar;

Показати сутність продаж

select*from prodazh;

Показати проданий товар і покупця на дату

SELECT p.buyer_name, t.product_name, t.model FROM pokupci p, tovar t, prodazh pr WHERE p.id_buyer = pr.id_buyer AND t.id_product = pr.id_product and

pr.date_of_sale = “23-02-2010”;

Показати кількість продаж за період

SELECT sum (pr.count_of_saled) as Sales_count, select (sum ((t.price_for_sale - tovar.price_for_buy)*prodazh.count_of_saled) as Summary_profit) FROM prodazh pr, tovar t) WHERE pr.id_product = t.id_product and pr.date_of_sale between “23-02-2010” and “27-02-2010”;


4. Програмне забезпечення


Для реалізації даного проекту потрібен ПК зі середньостатистичними характеристиками, на якому додатково встановлено PostgreSQL.

Інтерфейс створено за допомогою C#. Проте для користування базою наявність цього компілятора не потрібна.

C# (виголошується сі-шарп) — об'єктно-орієнтована мова програмування. C# відноситься до сім'ї мов з c-подібнім синтаксисом, з них його синтаксис найбільш близький до C++ і Java. Мова має статичну типізацію, підтримує поліморфізм, перевантаження операторів (у тому числі операторів явного і неявного приведення типа), делегати, атрибути, події, властивості, узагальнені типи і методи, ітератори, анонімні функції з підтримкою замикань, LINQ, виключення, коментарі у форматі XML.

5. Програмна реалізація

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;

using Npgsql; //компонент для работы с субд Postgresql

namespace torg_project

{

public partial class Form1 : Form

{

//обьявим глобальные переменные

//инициализируем соединение к серверу postgresql и нашей базе данных

NpgsqlConnection connection = new NpgsqlConnection(

"Server=127.0.0.1;Port=5432;User Id=postgres; Password=masterkey;Database=shop;");

NpgsqlCommand command; //обьект прямой sql команды

NpgsqlDataAdapter adapter; //обьект адаптера данных

NpgsqlCommandBuilder builder; //обьект конструктора sql команд для обновления ланных

DataSet ds; //обьект локальной бд

//Определение строковых переменных, которые будут добавлены в список sql запросов

const string query1 = "Показать поставщиков";

const string query2 = "Показать покупателей";

const string query3 = "Показать изготовителей";

const string query4 = "Показать товар";

const string query5 = "Показать таблицу продаж";

const string query6 = "Показать проданный товар и покупателя по дате";

const string query7 = "Показать имеющийся товар по изготовителю";

const string query8 = "Показать количество продаж и прибыль за промежуток времени";

const string query9 = "Показать наиболее продаваемый товар";

//переменная sql запроса

string sqlquery;

public Form1()

{

InitializeComponent();

panel8.Enabled = false;

}


private void Form1_Load(object sender, EventArgs e) //событие - загрузка формы

{

//добавление в список строк, описывающих запросы

listBox1.Items.Add(query1);

listBox1.Items.Add(query2);

listBox1.Items.Add(query3);

listBox1.Items.Add(query4);

listBox1.Items.Add(query5);

listBox1.Items.Add(query6);

listBox1.Items.Add(query7);

listBox1.Items.Add(query8);

listBox1.Items.Add(query9);

}


private void listBox1_SelectedIndexChanged(object sender, EventArgs e)//событие - выбор значения из списка

{

switch (listBox1.Text) //если выбранное значение списка ...

{

case query1: //... соответствует значению переменной query1 ("Показать поставщиков")

{

label5.Visible = false; //выполняем установки невидимости ненужных элементов

manufacturer.Visible = false;

monthCalendar1.Visible = false;

//определяем запрос

sqlquery =

" SELECT distinct postachalnyky.provider_name, postachalnyky.country, " +

" postachalnyky.adress, postachalnyky.phone FROM public.postachalnyky ";

//если флажок top10 выбран, то к запросу добавляем limit 10 (будут выводиться перве 10 записей)

if (top.Checked == true)

sqlquery = sqlquery + " limit 10";


buildTable(sqlquery); //вызов метода наполнения таблиц

break; //выход

}

case query2:

{

label5.Visible = false;

manufacturer.Visible = false;

monthCalendar1.Visible = false;

sqlquery =

" SELECT distinct pokupci.buyer_name, pokupci.pasport, pokupci.phone, " +

" pokupci.num_credit_account FROM public.pokupci ";

if (top.Checked == true)

sqlquery = sqlquery + " limit 10";

buildTable(sqlquery);

break;

}

case query3:

{

label5.Visible = false;

manufacturer.Visible = false;

monthCalendar1.Visible = false;

sqlquery =

"SELECT distinct vyrobnyky.manufacter_name, vyrobnyky.country, vyrobnyky.adress, " +

" vyrobnyky.phone FROM public.vyrobnyky ";

if (top.Checked == true)

sqlquery = sqlquery + " limit 10";

buildTable(sqlquery);

break;

}

case query4:

{

label5.Visible = false;

manufacturer.Visible = false;

monthCalendar1.Visible = false;

sqlquery =

"SELECT distinct tovar.product_name, tovar.model, tovar.production_date, " +

" tovar.price_for_sale, tovar.price_for_buy, tovar.guarantee_years FROM public.tovar ";

if (top.Checked == true)

sqlquery = sqlquery + " limit 10";

buildTable(sqlquery);

break;

}

case query5:

{

label5.Visible = false;

manufacturer.Visible = false;

monthCalendar1.Visible = false;

sqlquery =

" SELECT pokupci.buyer_name, tovar.product_name, tovar.model, prodazh.abatement_percents, " +

" prodazh.date_of_sale, prodazh.count_of_saled FROM public.prodazh, public.tovar, " +

" public.pokupci WHERE prodazh.id_product = tovar.id_product AND pokupci.id_buyer = prodazh.id_buyer " ;

if (top.Checked == true)

sqlquery = sqlquery + " limit 10";

buildTable(sqlquery);

break;

}

case query6:

{

label5.Visible = false;

manufacturer.Visible = false;

monthCalendar1.Visible = true;

sqlquery =

" SELECT pokupci.buyer_name, tovar.product_name, tovar.model " +

" FROM public.pokupci, public.tovar, public.prodazh WHERE " +

" pokupci.id_buyer = prodazh.id_buyer AND tovar.id_product = prodazh.id_product and" +

" prodazh.date_of_sale = '" + monthCalendar1.SelectionStart.ToShortDateString() + "'";

if (top.Checked == true)

sqlquery = sqlquery + " limit 10";

buildTable(sqlquery);


break;

}

case query7:

{

label5.Visible = true;

manufacturer.Visible = true;

monthCalendar1.Visible = false;


//для наполнения combobox (с именем manufacturer) данными о производителях

//откроем соединение

connection.Open();

//определим прямую sql команду

command = new NpgsqlCommand(

"SELECT distinct vyrobnyky.manufacter_name from public.vyrobnyky", connection);

//определим обьект NpgsqlDataReader - для бысторого считывания данных из бд

NpgsqlDataReader reader;

//выполним команду

reader = command.ExecuteReader();

//пока есть данные будем поочередно добавлять их в combobox manufacturer

while (reader.Read())

{

manufacturer.Items.Add(reader[0].ToString().Trim());

}

//закроем соединения и удалим привязку dataGridView если она была

reader.Close();

connection.Close();

dataGridView1.DataSource = null;

break;

}

case query8:

{

label5.Visible = false;

manufacturer.Visible = false;

monthCalendar1.Visible = true; //сделаем видимым календарь

break;

}

case query9:

{

label5.Visible = false;

manufacturer.Visible = false;

monthCalendar1.Visible = false;

sqlquery =

" SELECT prodazh.count_of_saled, tovar.product_name, " +

" tovar.model FROM public.tovar, public.prodazh " +

"WHERE prodazh.id_product = tovar.id_product " +

" order by prodazh.count_of_saled desc " ;

if (top.Checked == true)

sqlquery = sqlquery + " limit 10";

buildTable(sqlquery);


break;

}

case "Таблица Покупатели": //случай возможен в режиме редактирования

{

sqlquery =

" SELECT * From public.pokupci "; //заполним таблицу всеми данными

buildTable(sqlquery);

dataGridView1.ReadOnly = false; //допустим возможность редактирования

break;

}

case "Таблица Поставщики":

{

sqlquery =

" SELECT * From public.postachalnyky ";

buildTable(sqlquery);

dataGridView1.ReadOnly = false;

break;

}

case "Таблица Товар":

{

sqlquery =

" SELECT * From public.tovar ";

buildTable(sqlquery);

dataGridView1.ReadOnly = false;

break;

}

case "Таблица Изготовители":

{

sqlquery =

" SELECT * From public.vyrobnyky ";

buildTable(sqlquery);

dataGridView1.ReadOnly = false;

break;

}


case "Таблица Продажи":

{

sqlquery =

" SELECT * From public.prodazh ";

buildTable(sqlquery);

dataGridView1.ReadOnly = false;

break;

}

}

}


private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) //событие -изменение даты в календаре

{

if (listBox1.Text == query6) //событие возможно когда календарь видимый, т.е. либо при выборе query6...

{

sqlquery =

" SELECT pokupci.buyer_name, tovar.product_name, tovar.model " +

" FROM public.pokupci, public.tovar, public.prodazh WHERE " +

" pokupci.id_buyer = prodazh.id_buyer AND tovar.id_product = prodazh.id_product and" +

" prodazh.date_of_sale = '" +e.Start.ToShortDateString() + "'";

if (top.Checked == true)

sqlquery = sqlquery + " limit 10";

buildTable(sqlquery);

}

if (listBox1.Text == query8) //...либо query8

{

sqlquery =

"SELECT sum (prodazh.count_of_saled) as Sales_count, " +

" sum ((tovar.price_for_sale - tovar.price_for_buy)*prodazh.count_of_saled) as Summary_profit " +

" FROM public.prodazh, public.tovar WHERE prodazh.id_product = tovar.id_product and" +

" prodazh.date_of_sale between '" + e.Start.ToShortDateString() + "' and '" + e.End.ToShortDateString() + "'";

if (top.Checked == true)

sqlquery = sqlquery + " limit 10";

buildTable(sqlquery);

//e.Start.ToShortDateString() - первая дата из выбранного промежутка в календаре

}

}


private void manufacturer_SelectedIndexChanged(object sender, EventArgs e) //событие - изменение значения в combobox manufacturer

{

sqlquery =

"SELECT tovar.product_name, tovar.model, tovar.production_date " +

" FROM public.vyrobnyky, public.tovar WHERE tovar.id_manufacter = vyrobnyky.id_manufacter" +

" and vyrobnyky.manufacter_name = '" + manufacturer.Text + "'";

if (top.Checked == true)

sqlquery = sqlquery + " limit 10";

buildTable(sqlquery);

//manufacturer.Text - выбранное значение combobox manufacturer

}


private void top_CheckedChanged(object sender, EventArgs e) //событие - изменение состояние флажка Top10

{


listBox1_SelectedIndexChanged(sender, e); //для обновления выводимых данных вызовем обрабчик события для выбора из списка запроса


}


private void query_CheckedChanged(object sender, EventArgs e) //выбор переключателя запрос

{

if (query.Checked == true) //если он выбран, то переходим в режим запроса

{

panel8.Enabled = false;

dataGridView1.DataSource = null;

listBox1.Items.Clear();

Form1_Load(sender, e);

top.Enabled = true;

}

}


private void editing_CheckedChanged(object sender, EventArgs e) //выбор переключателя редактирование

{

if (editing.Checked == true) //если он выбран, то переходим в режим редактирование

{

dataGridView1.DataSource = null;

listBox1.Items.Clear();

listBox1.Items.Add("Таблица Покупатели");

listBox1.Items.Add("Таблица Поставщики");

listBox1.Items.Add("Таблица Товар");

listBox1.Items.Add("Таблица Изготовители");

listBox1.Items.Add("Таблица Продажи");

panel8.Enabled = true;

top.Enabled = false;

}

}


private void show_Click(object sender, EventArgs e)

{

}

private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)

{


}

void buildTable(string query) //метод наполняющий таблицыу dataGridView данными

{

connection.Open(); //открываем соединение

ds = new DataSet(); //определяем обьект DataSet

adapter = new NpgsqlDataAdapter(query, connection); //определяем

adapter.Fill(ds, "table"); //наполняем в соответствии с запросом обьект DataSet и обьект таблицы DataTable

dataGridView1.ReadOnly = true; //элемент dataGridView только для чтения

dataGridView1.DataSource = ds; //привяжем элемент dataGridView к обьекту DataSet

dataGridView1.DataMember = "table"; //и талице "table"

connection.Close(); //закрываем соединение

set_true_column_names();

}


private void buttonexit_Click(object sender, EventArgs e) // нажатие кнопки выход

{

this.Close();

Application.Exit();

}

void set_true_column_names() //метод, устанавливающий правильные заголовки стоблцов, вместо по-умолчанию

{

foreach (DataGridViewColumn c in dataGridView1.Columns)

{

switch (c.HeaderText)

{

case "model":

c.HeaderText = "Модель";

break;

case "id_provider":

c.HeaderText = "Ид_поставщика";

break;

case "provider_name":

c.HeaderText = "Название поставщика";

break;

case "country ":

c.HeaderText = "Страна";

break;

case "adress":

c.HeaderText = "Адрес";

break;

case "phone":

c.HeaderText = "Телефон";

break;

case "id_buyer":

c.HeaderText = "Ид_покупателя";

break;

case "buyer_name":

c.HeaderText = "Имя покупателя";

break;

case "pasport":

c.HeaderText = "Паспорт";

break;

case "num_credit_account":

c.HeaderText = "Номер счета";

break;

case "id_sale":

c.HeaderText = "Ид_продажи";

break;

case "id_product":

c.HeaderText = "Ид_товара";

break;

case "abatement_percents":

c.HeaderText = "Скидка";

break;

case "date_of_sale":

c.HeaderText = "Дата продажи";

break;

case "count_of_saled":

c.HeaderText = "К-во продаж";

break;

case "id_manufacter":

c.HeaderText = "Ид_производителя";

break;

case "product_name":

c.HeaderText = "Название товара";

break;

case "production_date":

c.HeaderText = "Дата изготовления";

break;


case "price_for_sale":

c.HeaderText = "Цена продажи";

break;

case "price_for_buy":

c.HeaderText = "Цена закупки";

break;

case "guarantee_years":

c.HeaderText = "гарантия (лет)";

break;

case "manufacter_name":

c.HeaderText = "Название изготовителя";

break;

}

}

}


private void button2_Click(object sender, EventArgs e) //удалить выбранную строку

{

connection.Open();

command = new NpgsqlCommand();

command.Connection = connection;

string value;

switch (listBox1.Text) //для каждого случая составим свою команду

{

case "Таблица Покупатели":

value = dataGridView1.SelectedCells[0].OwningRow.Cells["id_buyer"].Value.ToString().Trim();

command.CommandText = "delete from pokupci where id_buyer = '" + value+ "'";

break;

case "Таблица Поставщики":

value = dataGridView1.SelectedCells[0].OwningRow.Cells["id_provider"].Value.ToString().Trim();

command.CommandText = "delete from postachalnyky where id_provider = '" + value+ "'";

break;

case "Таблица Товар":

value = dataGridView1.SelectedCells[0].OwningRow.Cells["id_product"].Value.ToString().Trim();

command.CommandText = "delete from tovar where id_product = '" + value + "'";

break;

case "Таблица Изготовители":

value = dataGridView1.SelectedCells[0].OwningRow.Cells["id_manufacter"].Value.ToString().Trim();

command.CommandText = "delete from vyrobnyky where id_manufacter = '" + value + "'";

break;

case "Таблица Продажи":

value = dataGridView1.SelectedCells[0].OwningRow.Cells["id_sale"].Value.ToString().Trim();

command.CommandText = "delete from prodazh where id_sale = '" + value + "'";

break;

}

try

{

command.ExecuteNonQuery(); //выполним эту команду

}

catch (Npgsql.NpgsqlException ex) //если н евыйдет

{

MessageBox.Show(ex.ToString()); //выведем сообщения

}


connection.Close();

listBox1_SelectedIndexChanged(sender, e);

}


private void panel8_Paint(object sender, PaintEventArgs e)

{


}


private void button1_Click(object sender, EventArgs e) //принять изменения

{

connection.Open();

NpgsqlCommandBuilder builder = new NpgsqlCommandBuilder(adapter);

try

{

adapter.Update(ds, "table"); //медод обновляющий источник

}

catch (Npgsql.NpgsqlException ex)

{

MessageBox.Show(ex.Message);

}


connection.Close();

}


private void button3_Click(object sender, EventArgs e) //очистить таблицу

{

connection.Open();

command = new NpgsqlCommand();

command.Connection = connection;


switch (listBox1.Text)

{

case "Таблица Покупатели":

command.CommandText = "delete from pokupci";

break;

case "Таблица Поставщики":

command.CommandText = "delete from postachalnyky";

break;

case "Таблица Товар":

command.CommandText = "delete from tovar";

break;

case "Таблица Изготовители":

command.CommandText = "delete from vyrobnyky";

break;

case "Таблица Продажи":

command.CommandText = "delete from prodazh";

break;

}

try

{

command.ExecuteNonQuery();

}

catch (Npgsql.NpgsqlException ex)

{

MessageBox.Show(ex.ToString());

}

connection.Close();

listBox1_SelectedIndexChanged(sender, e);


}


private void button4_Click(object sender, EventArgs e) //кнопка установления соединения не по-умолчанию

{

connection = new NpgsqlConnection(

"Server=127.0.0.1;Port=5432;User Id=postgres; Password=" + password.Text.Trim() + ";Database=" + d_name.Text.Trim() + ";");

try

{

connection.Open();

MessageBox.Show("Соединение установлено");

connection.Close();

}

catch

{

MessageBox.Show("Ошибка при соединении");

}


}


private void password_TextChanged(object sender, EventArgs e)

{


}

}

}

6. Тестовий приклад


Кількість продаж і прибуток за період часу здійснюється таким програмним кодом (результат представлено на рис.7):

sqlquery =

"SELECT sum (prodazh.count_of_saled) as Sales_count, " +

" sum ((tovar.price_for_sale - tovar.price_for_buy)*prodazh.count_of_saled) as Summary_profit " +

" FROM public.prodazh, public.tovar WHERE prodazh.id_product = tovar.id_product and" +

" prodazh.date_of_sale between '" + e.Start.ToShortDateString() + "' and '" + e.End.ToShortDateString() + "'";




Рис 7. Режим виконання запиту

Редагування таблиць відбувається в режимі «редактирование» (результат представлено на рис.8):

private void editing_CheckedChanged(object sender, EventArgs e) //выбор переключателя редактирование

{

if (editing.Checked == true) //если он выбран, то переходим в режим редактирование

{

dataGridView1.DataSource = null;

listBox1.Items.Clear();

listBox1.Items.Add("Таблица Покупатели");

listBox1.Items.Add("Таблица Поставщики");

listBox1.Items.Add("Таблица Товар");

listBox1.Items.Add("Таблица Изготовители");

listBox1.Items.Add("Таблица Продажи");

panel8.Enabled = true;

top.Enabled = false;

}

}


private void show_Click(object sender, EventArgs e)

{

}


private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)




Рис 8. Режим редагування.

7. Інструкція для користувача

Інтерфейс програми складається з наступних функціональних частин:
  • режим запитів;
  • режим редагування.

В режимі запитів (активна радіо кнопка «запросы») для виконання необхідного запиту слід вибрати останнього в меню, розміщеному зверху (рис 9) та (якщо потрібно) в меню зліва (рис 10)



Рис 9. Режим запитів



Рис 10. Режим запитів

В режимі редагування (активна радіо кнопка «редактирование») для виконання команд слід оперувати кнопками зліва (рис 11) та вибирати таблиці в меню зверху (рис 12). Для відміни дії не натискати кнопку «принять изменения».



Рис 11. Режим редагування



Рис 12. Режим редагування

Для з’єднання інтерфейсу я базою слід ввести пароль сервера та ім’я бази в поля “password” та “database name” відповідно.

Висновки

Під час виконання даної курсової роботи створено базу даних для магазину побутової техніки з допомогою СУБД postgreSQL та написано інтерфейс з допомогою C#.

Для цього змодельовано предметну область, вибрано ПО для реалізації. Також представлено опис програмної реалізації на postgreSQL та C#, тестовий приклад та інструкцію для користувача.

Слід зазначити, що на сьогодні є postgreSQL являється менш актуальною СУБД, оскільки спосіб підключення до інтерфейсу дещо складніший ніж у my SQL чи SQL server. А найбільш поширеною є СУБД Оracl.

Використані джерела

  1. Основи проектування баз даних: Навч. посіб. для студ. Вищих навч. закладів / Є.В. Малахов. – О: Наука і техніка, 2006. – 156 с.
  2. Учебник по C# - ссылка скрыта
  3. Программирование на C Sharp (C#) с нуля - ссылка скрыта
  4. ссылка скрыта