Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсова 2 зроблена.doc
Скачиваний:
4
Добавлен:
24.08.2019
Размер:
1.03 Mб
Скачать

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)

{

}

}

}