Курсовая работа (Задание):
Разработка базы данных цветочного магазина на языке C#.
Цели:
- сделать нормализацию данных;
- осуществить этапы проектирования базы данных;
- построить и описать диаграммы проекта;
- разработать формы и представить текст программы;
- привести результаты тестирования программного продукта.
Задачи:
- Свободный доступ к информации;
- Удобный и понятный для пользователя интерфейс приложения;
- Сортировка данных по выбранному критерию;
- Возможность поиска цветка по выбранному критерию;
- Защита паролей шифром одно алфавитной замены;
- Добавление, редактирование, удаление данных.
Содержание отчета к программе
В отчете находятся все необходимые диаграммы к нашей программе, такие как:
- Концептуальная модель базы данных цветочного магазина
- Логическая модель базы данных цветочного магазина
- Физическая модель базы данных цветочного магазина
- Диаграмма Usecase
- Диаграмма Statechart
- Диаграмма ООП классов
Также, присутствуют все скриншоты с описанием каждого действия пользователя в программе (показаны в видео).

Как мы можем увидеть из сриншота, в пояснительной записке содержится 34 страницы.
Логическая модель базы данных цветочного магазина

Фрагмент программного кода
namespace FlowerShop.Forms
{
public partial class FDialogMakeSaleFlower : Form
{
private DataAccessLayer DataAccessLayer
{
get
{
if (this.m_dataAccessLayer == null)
this.m_dataAccessLayer = new DataAccessLayer();
return this.m_dataAccessLayer;
}
}
private DataTable m_dt_Buyers;
private DataAccessLayer m_dataAccessLayer;
int id_personnel,
id_sale_product,
id_m_fl,
count_M_FL = 0,
cost_M_FL = 0;
bool CheckResultFrom_DAL = false;
public FDialogMakeSaleFlower(int _id_personnel, int _id_m_fl ,int _count_M_FL, int _cost_M_FL)
{
InitializeComponent();
/* нужно для заполнения таблицы SaleFlower в БД */
id_personnel = _id_personnel;
id_m_fl = _id_m_fl;
count_M_FL = _count_M_FL;
cost_M_FL = _cost_M_FL;
MS_txtCount_M_FL_Sale.Text = count_M_FL.ToString();
MS_txtSum_M_FL_Sale.Text = (cost_M_FL * count_M_FL).ToString();
Init_Buyers();
}
private void Init_Buyers()
{
this.m_dt_Buyers = new DataAccessLayer().dt_AllBuyers;
if (this.m_dt_Buyers == null)
{
MessageBox.Show("Не удалось получить данные!");
return;
}
MS_dgvBuyers.AutoGenerateColumns = false;
MS_dgvBuyers.DataSource = this.m_dt_Buyers;
MS_dgvBuyers.Columns[0].DataPropertyName = "ID_BUYER";
MS_dgvBuyers.Columns[1].DataPropertyName = "FIO_BUYER";
MS_dgvBuyers.Columns[2].DataPropertyName = "ADDRESS_BUYER";
MS_dgvBuyers.Columns[3].DataPropertyName = "PHONE_BUYER";
((DataTable)MS_dgvBuyers.DataSource).Rows.Add(); // добавялем строку для данных о покупателе
}
private void MS_btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void MS_txtCount_M_FL_Sale_TextChanged(object sender, EventArgs e)
{
if (MS_txtCount_M_FL_Sale.Text == "")
MS_txtSum_M_FL_Sale.Text = "0";
else
MS_txtSum_M_FL_Sale.Text = (cost_M_FL * Convert.ToInt32(MS_txtCount_M_FL_Sale.Text)).ToString();
}
private void MS_btnOk_Click(object sender, EventArgs e)
{
MS_dgvBuyers.EndEdit(); // заканчиваем редактирование ячейки, чтобы не было ошибки "заполните все поля", которая проверяется ниже
// остаток от количества цветов, если ноль или меньше то ошибка
int AmountOf_residue = count_M_FL - Convert.ToInt32(MS_txtCount_M_FL_Sale.Text);
if (AmountOf_residue < 0 || Convert.ToInt32(MS_txtCount_M_FL_Sale.Text) == 0)
{
MessageBox.Show("Ошибка, столько товара нет!");
return;
}
/*--------------- проверка на пустые поля ------------------------------- */
if (MS_txtCount_M_FL_Sale.Text == "")
{
MessageBox.Show("Ошибка! Заполните все поля");
return;
}
for (int column = 0; column < MS_dgvBuyers.ColumnCount; ++column)
if (MS_dgvBuyers[column, MS_dgvBuyers.RowCount - 1].Value == null
||
MS_dgvBuyers[column, MS_dgvBuyers.RowCount - 1].Value.ToString() == "")
{
MessageBox.Show("Ошибка! Заполните все поля");
return;
}
/*--------------- Занесение информации о покупателе в БД ------------------------------- */
CheckResultFrom_DAL = this.DataAccessLayer.INSERTBuyerToDB(
new Buyers(Convert.ToInt32(MS_dgvBuyers.CurrentRow.Cells[0].Value),
MS_dgvBuyers.CurrentRow.Cells[1].Value.ToString(),
MS_dgvBuyers.CurrentRow.Cells[2].Value.ToString(),
MS_dgvBuyers.CurrentRow.Cells[3].Value.ToString())
);
if (!CheckResultFrom_DAL)
{
MessageBox.Show("Ошибка продажи товара!");
return;
}
/*--------------- Занесение информации о продаже в БД ------------------------------- */
// получаем количество idSaleFlower и прибавляем единицу для правильной вставки
id_sale_product = this.DataAccessLayer.Func_GetCountIDSaleFlower() + 1;
CheckResultFrom_DAL = this.DataAccessLayer.INSERTSaleFlowerToDB(
new SaleProduct(id_personnel, id_sale_product, Convert.ToInt32(MS_txtCount_M_FL_Sale.Text), Convert.ToDateTime(DateTime.Now),
Convert.ToInt32(MS_dgvBuyers.CurrentRow.Cells[0].Value), Convert.ToInt32(MS_txtSum_M_FL_Sale.Text), id_m_fl));
if (!CheckResultFrom_DAL)
{
MessageBox.Show("Ошибка продажи товара!");
return;
}
/*--------------- Обновление Остатка количества цветка -------------------------------*/
CheckResultFrom_DAL
= this.DataAccessLayer.UPDATE_CountMFlower_afterSaleFlower_in_DB(id_m_fl, AmountOf_residue);
if (CheckResultFrom_DAL)
{
this.Text = "Продажа цветка - УСПЕХ";
System.Threading.Thread.Sleep(3000);
this.Close();
}
else
{
MessageBox.Show("Ошибка продажи товара!");
return;
}
}
}
}
Скриншот архива с проектом

Содержание архива
- Исходный код проекта FlowerShop
- Презентация + пояснительная записка на 34 страницы
- Файл FlowerShop.erwin - модель данных для БД
- Файл flowershop.sql - sql скрипт для создания БД в любоей среде разработки
- Файл с минимальными требованиями к программе
Телеграм
-