Файл: Курсовой проект по дисциплине ПМ. 05 Проектирование и разработка информационных систем.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 06.12.2023
Просмотров: 239
Скачиваний: 13
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Будет проведен выбор методологии проектирования информационной системы.
Проектная часть
Проектирование модели IDEF0. Построение модели потоков данных
В начале нужно создать логическую модель базы данных, называемая Er-модель. Для этого нам понадобится программа Erwin. Заходим в программу:
Создаём новую модель. Выбираем тип модели - логическая/физическая, база данных – Access, Версия - 97.
Рисунок 1. Создание модели
После этого задаём некоторые настройки для удобства построения модели:
В верхней панели выбираем пункт Format>Stored Displays>
Рисунок 2, 3, 4. Настраиваем уровни и шрифт для работы с моделью
Создаём сущности при помощи кнопки:
Рисунок 5. Сущности
В базе данных «Автовокзал» будут находится сущности: Маршрут, Перевозка, Диспетчер, Автобус, Водитель, Билет.
Затем задаём каждой сущности свои атрибуты, в которых будут находится определённые данные:
Рисунок 6. Атрибуты таблиц
Атрибуты в сущностях: Перевозка(Код перевозка, Номер), Автобус(Код автобуса, Номер, Модель, Номерной знак, Количество мест), Диспетчер(Код диспетчера, ФИО, Дата рождения, Адрес), Билет(Код билета, Место, Стоимость, Время, ФИО, Паспорт, Льготы), Водитель(Код водителя, ФИО, Дата рождения, Паспорт), Маршрут(Код маршрута, Номер маршрута, Пункт назначения, Район, Область, Расстояние, Вес, Время отправки, Время прибытия).
Теперь связываем между собой таблицы:
Рисунок 7. Связи между таблицами
У всех таблиц связь один к одному. На этом пункте Логическая модель данных завершена, переходим на физический уровень.
На физическом уровне нам необходимо перенести нашу модель в базу данных Access для дальнейшей работы с ней, для этого необходимо: Удалить все связи с таблицами, дать определённый тип данных каждой таблице определённым столбцам, добавить код связки между таблицами(имеется ввиду тот код, который появляется после связки двух таблиц, чтобы в дальней связать в Access).
Рисунок 8. Физическая модель
После этого можем смело перекидывать нашу модель в Access: Tools>Forward Engineer>Generate
Рисунок 9. Подключение к Access
Находим пустую базу данных Access, выбираем её и нажимаем Connect. Наша Ер-модель успешна перенесена.
Разработка схемы базы данных. Генерация базы данных
После того, как мы перенесли нашу Er-модель в Access, она примет вид:
Рисунок 10. База данных Access
Дальше мы должны разработать схему базы данных, установить связи между таблицами, которые были ещё в нашей Er-модели:
Рисунок 11. Связи между таблицами в Access
И теперь мы можем заполнить наши таблицы данными, чтобы потом с ними работать в нашем приложении:
Рисунок 12. Заполнение таблицы Билет
Рисунок 13. Заполнение таблицы Маршрут
Рисунок 14. Заполнение таблицы Автобус
Рисунок 15. Заполнение таблицы Водитель
Рисунок 16. Заполнение таблицы Диспетчер
Рисунок 17. Заполнение таблицы Перевозка
На этом этапе наша база данных в Access готова, теперь мы можем переходить к разработке нашего приложения, через которое наши данные в таблицах можно будет выводить, добавлять и удалять.
Генерация схемы базы данных в VC# происходит следующим образом:
Рисунок 18. Форма приложения
Создаём форму, располагаем на ней объекты: 2 dataGridView для того, чтобы выводить данные из наших столбцов; menuStrip это будет меню, по которому можно ориентироваться между выводом определённой таблицы и добавление, удаление; 4 groupBox это будут рамки для кнопок, расположенные по их функциональности; 2 comboBox в них происходит выборка: В первом мы выбираем столбец, по которому будет искать определённую строку, а во втором вывести определённую таблицу; textBox это будем маской, по которому мы определяем какую строку нам вывести, то есть проще говоря, поиск по фамилии или номеру; Button, чтобы выполнять определённую команду, которая прописана в коде(в следующем пункте будет расписан код для каждой формы);
Рисунок 19. Вторая форма приложения
На второй форме происходит добавление в таблицу перевозка, на ней мы выбираем определённые строки в таблицах(Маршрут, Билет, Водитель, Автобус, Диспетчер), также здесь присутствует поиск по определённой строке.
Рисунок 20. Форма удаления
Здесь всё просто, выделяем определённую строку в таблице и нажимаем кнопку «Удалить», высвечивается форма с соответствующей функцией.
Рисунок 21. Добавление в табл. Билет
Рисунок 22. Добавление в табл. Маршрут
Рисунок 23. Добавление в табл. Автобус
Рисунок 24. Добавление в табл. Водитель
Рисунок 25. Добавление в табл. Диспетчер
На этих 5 формах происходит добавление в таблицы(Билеты, Маршруты, Автобусы, Водители, Диспетчеры).
Разработка приложения
Теперь мы начинаем разрабатывать код для нашего приложения, чтобы выполнять определённые команды по нажатию на кнопку:
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Автовокзал
{
public partial class Form1 : Form
{
Здесь мы подключаем нашу базу данных к проекту и задаём переменную для дальнейшей работы с таблицами.
public string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\Users\\пк\\Documents\\Visual Studio 2010\\Projects\\Автовокзал\\Автовокзал\\02_02_00_009_Baza_ru.mdb";
private int act_table = 1;
public Form1()
{
InitializeComponent();
}
Здесь при загрузке формы мы инициируем клик по первой кнопки, чтобы вывести базу данных таблицу «перевозка» и таблицу «билет». И присваиваем comboBox1,2 индекс, чтобы она сразу выбрала первый пункт из раскрывающегося списка.
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.SelectedIndex = 0;
comboBox2.SelectedIndex = 0;
button1_Click(sender, e);
Get_Bilets();
}
private void button1_Click(object sender, EventArgs e)
{
string CommandText = "SELECT " +
"[Перевозка].[Номер], " +
"[Маршрут].[Номер маршрута], " +
"[Маршрут].[Пункт назначения], " +
"[Маршрут].[Время отправки], " +
"[Маршрут].[Время прибытия], " +
"[Билет].[Место], " +
"[Билет].[Ф_И_О], " +
"[Билет].[Стоимость], " +
"[Водитель].[Ф_И_О] " +
"FROM " +
"[Перевозка], " +
"[Маршрут], " +
"[Билет], " +
"[Водитель] " +
"WHERE " +
"([Перевозка].[ID_Marshrut]=[Маршрут].[ID_Marshrut]) AND " +
"([Перевозка].[ID_Bilet] = [Билет].[ID_Bilet]) AND " +
"([Перевозка].[ID_Voditel] = [Водитель].[ID_Voditel]) ";
if (textBox1.Text != "") // если набран текст в поле фильтра
{
if (comboBox1.SelectedIndex == 0) // № перевозки
CommandText = CommandText + " AND ([Перевозка].[Номер] = '" + textBox1.Text + "')";
if (comboBox1.SelectedIndex == 1) // № маршрута
CommandText = CommandText + " AND (Маршрут.[Номер маршрута] = '" + textBox1.Text + "') ";
if (comboBox1.SelectedIndex == 2) // Пункт назначения
CommandText = CommandText + " AND (Маршрут.[Пункт назначения] LIKE '" + textBox1.Text + "%') ";
if (comboBox1.SelectedIndex == 3) // Пассажир
CommandText = CommandText + " AND (Билет.[Ф_И_О] LIKE '" + textBox1.Text + "%') ";
if (comboBox1.SelectedIndex == 4) // Водитель
CommandText = CommandText + " AND ([Водитель].[Ф_И_О] LIKE '" + textBox1.Text + "%') ";
}
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(CommandText, ConnectionString);
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "[Перевозка]");
dataGridView1.DataSource = ds.Tables["[Перевозка]"].DefaultView;
}
Здесь при клике на кнопку «Добавление» открывается вторая форма для добавления записи в таблицу «перевозка».
private void button2_Click(object sender, EventArgs e)
{
string CommandText;
string num_per, ID_M, ID_B, ID_D, ID_A, ID_V;
int row;
Form2 f = new Form2(); // создали новую форму
if (f.ShowDialog() == DialogResult.OK)
{
// добавляем данные
// Номер перевозки
if (f.textBox1.Text == "") num_per = "0";
else num_per = f.textBox1.Text;
// добавляем ID_Marshrut
row = f.dataGridView1.CurrentCell.RowIndex; // взяли строку с dataGridView1
ID_M = Convert.ToString(f.dataGridView1[0, row].Value);
// добавляем ID_Bilet
row = f.dataGridView2.CurrentCell.RowIndex; // взяли строку с dataGridView2
ID_B = Convert.ToString(f.dataGridView2[0, row].Value);
// добавляем ID_Dispetcher
row = f.dataGridView3.CurrentCell.RowIndex; // взяли строку с dataGridView3
ID_D = Convert.ToString(f.dataGridView3[0, row].Value);
// добавляем ID_Avtobus
row = f.dataGridView4.CurrentCell.RowIndex; // взяли строку с dataGridView4
ID_A = Convert.ToString(f.dataGridView4[0, row].Value);
// добавляем ID_Voditel
row = f.dataGridView5.CurrentCell.RowIndex; // взяли строку с dataGridView5
ID_V = Convert.ToString(f.dataGridView5[0, row].Value);
// формируем CommandText
CommandText = "INSERT INTO [Перевозка] (Номер, ID_Marshrut, ID_Bilet, ID_Dispetcher, ID_Avtobus, ID_Voditel) " +
"VALUES (" + num_per + ", " + ID_M + ", " + ID_B + ", " +
ID_D + ", " + ID_A + ", " + ID_V + ")";
// выполняем SQL-команду
My_Execute_Non_Query(CommandText);
// перерисовываем dataGridView1
button1_Click(sender, e);
}
}
public void My_Execute_Non_Query(string CommandText)
{
OleDbConnection conn = new OleDbConnection(ConnectionString);
conn.Open();
OleDbCommand myCommand = conn.CreateCommand();
myCommand.CommandText = CommandText;
myCommand.ExecuteNonQuery();
conn.Close();
}
Здесь инициируется удаление записи в таблице «перевозка».
private void button3_Click(object sender, EventArgs e)
{
Form3 f = new Form3();
if (f.ShowDialog() == DialogResult.OK)
{
int index, index_old;
string ID;
string CommandText = "DELETE FROM ";
index = dataGridView1.CurrentRow.Index; // № по порядку в таблице представления
index_old = index;
ID = Convert.ToString(dataGridView1[0, index].Value); // ID подаем в запрос как строку
// Формируем строку CommandText
CommandText = "DELETE FROM [Перевозка] WHERE [Перевозка].[Номер] = '" + ID + "'";
// выполняем SQL-запрос
My_Execute_Non_Query(CommandText);
// перерисовывание dbGridView1
button1_Click(sender, e);
if (index_old >= 0)
{
dataGridView1.ClearSelection();
dataGridView1[0, index_old].Selected = true;
}
}
}
Здесь при нажатии на кнопку мы выводим определённую таблицу по выборке.
private void button4_Click(object sender, EventArgs e)
{
if (comboBox2.SelectedIndex == 0)
{
Get_Bilets();
act_table = 1;
}
if (comboBox2.SelectedIndex == 1)
{
Get_Marshruts();
act_table = 2;
}
if (comboBox2.SelectedIndex == 2)
{
Get_Avtobus();
act_table = 3;
}
if (comboBox2.SelectedIndex == 3)
{
Get_Voditel();
act_table = 4;
}
if (comboBox2.SelectedIndex == 4)
{
Get_Dispetcher();