Разработка БД для АСУ «Строительство новостроек»
Заказать уникальную курсовую работу- 39 39 страниц
- 13 + 13 источников
- Добавлена 31.05.2018
- Содержание
- Часть работы
- Список литературы
- Вопросы/Ответы
ВВЕДЕНИЕ 3
ГЛАВА 1. СИСТЕМНЫЙ АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ 5
1.1. Анализ объекта автоматизации 5
1.2. Обзор информационных технологий 6
1.3. Обзор продуктов-аналогов 8
1.4. Требования к разрабатываемой базе данных 9
Выводы 10
ГЛАВА 2. ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ 11
2.1. Разработка инфологической модели 11
2.2. Даталогическое проектирование 14
2.2. Обоснование выбора модели данных 14
2.4. Нормализация, схема БД 17
Выводы 19
ГЛАВА 3. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ 20
3.1. Анализ и выбор СУБД 20
3.2. Физическое проектирование базы данных в СУБД 24
3.3. Разработка представлений 26
3.4. Разработка форм 27
3.5 Разработка отчетов 30
3.6. Реализация ограничений, автоматизация обработки данных в БД 32
3.7 Безопасность и контроль 32
Выводы 35
Приложение 39
Update(ds, "objects"); } private void toolStripButton2_Click_1(object sender, EventArgs e) {// обработчик удаления объектаdataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index); objAdapter.Update(ds, "objects"); } private void toolStripButton3_Click(object sender, EventArgs e) { dataGridView2_CellEndEdit(sender, null); } private void toolStripButton4_Click(object sender, EventArgs e) {// удаление квартиры if (dataGridView2.CurrentRow != null) dataGridView2.Rows.RemoveAt(dataGridView2.CurrentRow.Index); Point idx = dataGridView2.CurrentCellAddress; dataGridView2_CellEndEdit(sender, null); if(dataGridView2.CurrentRow != null) dataGridView2.CurrentRow.Selected = false; if(idx.X != -1 || idx.Y != -1) dataGridView2.CurrentCell = dataGridView2[idx.X, idx.Y]; } private void toolStripTextBox1_TextChanged(object sender, EventArgs e) {// фильтруем список объектов string text = toolStripTextBox1.Text; bool f = true; string filter = ""; if (text != "")// пробегаем по всем столбцам грида объектов, и если столбцы со строковыми значениями фильтруем их for (int i = 0; i < dataGridView1.ColumnCount; i++) { if (dataGridView1.Columns[i].ValueType == typeof(String)) if (f) { filter += string.Format(" {0} like '%{1}%' ", dataGridView1.Columns[i].DataPropertyName, text); f = false; } else filter += string.Format(" OR {0} like '%{1}%' ", dataGridView1.Columns[i].DataPropertyName, text); } masterBindingSource.Filter = filter; } private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { try {// при окончании ввода в ячейке грида объектов сохраняем объект в базе mysql Validate(); masterBindingSource.EndEdit(); objAdapter.Update(ds, "objects"); } catch (System.Exception ex) { MessageBox.Show(String.Format("Error {0}", ex)); } } private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e) { try {// при окончании ввода в ячейке грида квартир сохраняем квартиру в базе mysql// получаем данные ячейки объекта Point idx1 = dataGridView1.CurrentCellAddress;// сохраняем квартиру Validate(); detailsBindingSource.EndEdit(); aptAdapter.Update(ds, "apartments");// очищаем и загружаем снова квартиры ds.Tables["apartments"].Clear(); aptAdapter.Fill(ds, "apartments");// получаем данные о квартирах в гриде объктов ds.EnforceConstraints = false; objAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; ds.Tables["objects"].Clear(); objAdapter.Fill(ds, "objects"); ds.EnforceConstraints = true;// устанавливаем курсор на нужный нам объект if(idx1.Y != 0 && idx1.Y < dataGridView1.Rows.Count) { if (dataGridView1.CurrentRow != null) dataGridView1.CurrentRow.Selected = false; dataGridView1.CurrentCell = dataGridView1[idx1.X, idx1.Y];} } catch (System.Exception ex) { MessageBox.Show(String.Format("Error {0}", ex));} } }}using System;using System.Data;using System.Windows.Forms;using System.Configuration;using MySql.Data.MySqlClient;using iTextSharp.text.pdf;using iTextSharp.text;using System.IO;using System.Drawing;namespace buildings{ public partial class ClientsForm : Form { MySqlConnection conn = new MySqlConnection(); MySqlDataAdapter cliAdapter, payAdapter; MySqlCommandBuilder cliCommandBuilder, payCommandBuilder; DataSet ds = new DataSet(); DataRelation relation; private BindingSource masterBindingSource = new BindingSource(); private BindingSource detailsBindingSource = new BindingSource(); public ClientsForm() {// собираем строку подключения к базе данных string myConnectionString = "server=" + ConfigurationManager.AppSettings["mysql_server"] + ";SslMode=none;uid=" + ConfigurationManager.AppSettings["mysql_user"] + ";pwd=" + ConfigurationManager.AppSettings["mysql_password"] + ";database=" + ConfigurationManager.AppSettings["mysql_database"] + ";CharSet=utf8;"; conn.ConnectionString = myConnectionString; InitializeComponent(); } private void ob_Load(object sender, EventArgs e) { dataGridView1.DataSource = masterBindingSource; dataGridView2.DataSource = detailsBindingSource; try { conn.Open();// получаем данные клиентов MySqlCommand sqlCom = new MySqlCommand("SELECT * FROM clients", conn); sqlCom.ExecuteNonQuery(); cliAdapter = new MySqlDataAdapter(sqlCom); cliAdapter.Fill(ds, "clients"); // получаем данные платежей sqlCom = new MySqlCommand("SELECT * FROM payments", conn); sqlCom.ExecuteNonQuery(); payAdapter = new MySqlDataAdapter(sqlCom); payAdapter.Fill(ds, "payments");// создаем связь клиет-платежи DataRelation relation = new DataRelation("ClientsAndPayments", ds.Tables["clients"].Columns["id"], ds.Tables["payments"].Columns["id_client"]); ds.Relations.Add(relation); // к первому гриду клиентов подключаем таблицу клиентов masterBindingSource.DataSource = ds; masterBindingSource.DataMember = "clients"; // к гриду платежей соответственно платежи detailsBindingSource.DataSource = masterBindingSource; detailsBindingSource.DataMember = "ClientsAndPayments"; // создаём команды удаления, обновления и вставки cliCommandBuilder = new MySqlCommandBuilder(cliAdapter); payCommandBuilder = new MySqlCommandBuilder(payAdapter);// настраиваем грид клиентов dataGridView1.Columns["id"].Visible = false; dataGridView1.Columns["id_apartment"].Visible = false; dataGridView1.Columns["fio"].HeaderText = "ФИОклиента"; dataGridView1.Columns["fio"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; dataGridView1.Columns["phone"].HeaderText = "Телефон"; dataGridView1.Columns["date"].HeaderText = "Датапокупки"; dataGridView1.Columns["date"].Width = 80; dataGridView1.Columns["summ"].HeaderText = "Стоимостьжилья"; dataGridView1.Columns["remain"].HeaderText = "Задолженность";// настраиваем грид платежей клиента dataGridView2.Columns["id"].Visible = false; dataGridView2.Columns["id_client"].Visible = false; dataGridView2.Columns["date"].HeaderText = "Датавзноса"; dataGridView2.Columns["date"].Width = 80; dataGridView2.Columns["summ"].HeaderText = "Взнос"; dataGridView2.Columns["summ"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;// центруем заголовки грида клиентов foreach (DataGridViewColumn col in dataGridView1.Columns) col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;// центруем заголовки грида платежей foreach (DataGridViewColumn col in dataGridView2.Columns) col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; } catch (MySql.Data.MySqlClient.MySqlException ex) { MessageBox.Show("Текстошибки: " + ex.Message); } } private void toolStripButton3_Click(object sender, EventArgs e) { dataGridView2_CellEndEdit(sender, null); } private void toolStripButton1_Click_1(object sender, EventArgs e) {// сохраняем данные клиентов cliAdapter.Update(ds, "clients"); } private void toolStripButton2_Click_1(object sender, EventArgs e) {// обработчик удаления клиента dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index); cliAdapter.Update(ds, "clients"); } private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { try {// сохранение клиента по окончанию ввода в ячейке Validate(); masterBindingSource.EndEdit(); cliAdapter.Update(ds, "clients"); } catch (System.Exception ex) { MessageBox.Show(String.Format("Error {0}", ex)); } } private void dataGridView2_CellEndEdit(object sender, DataGridViewCellEventArgs e) { try { Point idx1 = dataGridView1.CurrentCellAddress;// сохранение платежа Validate(); detailsBindingSource.EndEdit(); payAdapter.Update(ds, "payments");// очищаем и загружаем снова данные платежей ds.Tables["payments"].Clear(); payAdapter.Fill(ds, "payments");// очищаем и загружаем снова данные клиентов ds.EnforceConstraints = false; cliAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; ds.Tables["clients"].Clear(); cliAdapter.Fill(ds, "clients"); ds.EnforceConstraints = true; if (idx1.Y != 0 && idx1.Y < dataGridView1.Rows.Count) {// восстанавливаем положение в гриде клиентовif (dataGridView1.CurrentRow != null) dataGridView1.CurrentRow.Selected = false; dataGridView1.CurrentCell = dataGridView1[idx1.X, idx1.Y]; } } catch (System.Exception ex) { MessageBox.Show(String.Format("Error {0}", ex)); } } private void toolStripButton4_Click(object sender, EventArgs e) {// удаление записи в таблице платежей if (dataGridView2.CurrentRow != null) dataGridView2.Rows.RemoveAt(dataGridView2.CurrentRow.Index); Point idx = dataGridView2.CurrentCellAddress; dataGridView2_CellEndEdit(sender, null); if (dataGridView2.CurrentRow != null) dataGridView2.CurrentRow.Selected = false; if (idx.X != -1 || idx.Y != -1) dataGridView2.CurrentCell = dataGridView2[idx.X, idx.Y]; } private void groupBox2_Enter(object sender, EventArgs e) { } private void toolStripTextBox1_TextChanged(object sender, EventArgs e) {// фильтрация записей в таблице клиенты string text = toolStripTextBox1.Text; bool f = true; string filter = ""; if (text != "") for (int i = 0; i < dataGridView1.ColumnCount; i++) { if (dataGridView1.Columns[i].ValueType == typeof(String)) if (f) { filter += string.Format(" {0} like '%{1}%' ", dataGridView1.Columns[i].DataPropertyName, text); f = false; } else filter += string.Format(" OR {0} like '%{1}%' ", dataGridView1.Columns[i].DataPropertyName, text); } masterBindingSource.Filter = filter; } private void toolStripButton5_Click(object sender, EventArgs e) { report_paymentsofclients(); } public void report_paymentsofclients() {// создание отчёта в pdf с платежами клиентов var doc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); BaseFont baseFont = BaseFont.CreateFont(@"C:\windows\fonts\arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL); PdfWriter.GetInstance(doc, new FileStream(".\\" + @"\Document.pdf", FileMode.Create)); doc.Open(); MySqlCommand sqlCom = new MySqlCommand("select * from paymentsofclients", conn); if (conn.State == ConnectionState.Closed) conn.Open(); sqlCom.ExecuteNonQuery(); MySqlDataReader dr = sqlCom.ExecuteReader(); DataTable dt = new DataTable(); dt.Load(dr); PdfPTable pdfTable = new PdfPTable(dt.Columns.Count); pdfTable.DefaultCell.Padding = 3; pdfTable.WidthPercentage = 100; pdfTable.HorizontalAlignment = Element.ALIGN_CENTER; pdfTable.DefaultCell.BorderWidth = 1; foreach (DataColumn column in dt.Columns) { string columnName = column.ColumnName; if (columnName.Equals("Суммаплатежа")) { columnName = "Суммаплатежа, руб."; } PdfPCell cell = new PdfPCell(new Phrase(columnName, font)); pdfTable.AddCell(cell); } foreach (DataRow row in dt.Rows) { foreach (DataColumn column in dt.Columns) { if (row[column.ColumnName] != null) pdfTable.AddCell(new Phrase(row[column.ColumnName].ToString(), font)); } } doc.Add(new Paragraph("Реестрвзносовклиентов\n", font)); doc.Add(new Paragraph(" ", font)); doc.Add(new Paragraph(" ", font)); doc.Add(pdfTable); doc.Add(new Paragraph(" ", font)); doc.Add(new Paragraph(" ", font)); Paragraph par = new Paragraph("Директор _________________", font); par.Alignment = Element.ALIGN_RIGHT; doc.Add(par); doc.Close(); System.Diagnostics.Process.Start(".\\" + @"\Document.pdf"); } public void report_debtors() {// создание отчета задолжников в pdf var doc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); BaseFont baseFont = BaseFont.CreateFont(@"C:\windows\fonts\arial.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, iTextSharp.text.Font.DEFAULTSIZE, iTextSharp.text.Font.NORMAL); PdfWriter.GetInstance(doc, new FileStream(".\\" + @"\Document.pdf", FileMode.Create)); doc.Open();// получаем данные о задолжниках MySqlCommand sqlCom = new MySqlCommand("select * from debtors", conn); if (conn.State == ConnectionState.Closed)conn.Open(); sqlCom.ExecuteNonQuery(); MySqlDataReader dr = sqlCom.ExecuteReader(); DataTable dt = new DataTable(); dt.Load(dr); PdfPTable pdfTable = new PdfPTable(dt.Columns.Count); pdfTable.DefaultCell.Padding = 3; pdfTable.WidthPercentage = 100; pdfTable.HorizontalAlignment = Element.ALIGN_CENTER; pdfTable.DefaultCell.BorderWidth = 1; foreach (DataColumn column in dt.Columns) { string columnName = column.ColumnName; if (columnName.Equals("Суммадолга")) { columnName = "Суммадолга, руб."; } PdfPCell cell = new PdfPCell(new Phrase(columnName, font)); pdfTable.AddCell(cell); } foreach (DataRow row in dt.Rows) { foreach (DataColumn column in dt.Columns) { if (row[column.ColumnName] != null) pdfTable.AddCell(new Phrase(row[column.ColumnName].ToString(), font)); } } doc.Add(new Paragraph("Реестрдолжников\n", font)); doc.Add(new Paragraph(" ", font)); doc.Add(new Paragraph(" ", font)); doc.Add(pdfTable); doc.Add(new Paragraph(" ", font)); doc.Add(new Paragraph(" ", font)); Paragraph par = new Paragraph("Директор _________________", font); par.Alignment = Element.ALIGN_RIGHT; doc.Add(par); doc.Close(); System.Diagnostics.Process.Start(".\\" + @"\Document.pdf");} }}
1. Баженова И. Ю. Основы проектирования приложений баз данных — М: Интернет-Университет Информационных Технологий; Б И Н О М . Лаборатория знаний, 2013. — 325 с.: ил., табл. — (Серия «Основы информационных технологий»).
2. Иванов, Ю.П. BPwinиERwin. CASE-средства проектирования информационных систем: учебное пособие / Ю.П. Иванов, Е.В. Федоренко. – М. : Находка, 2012. – 80 с.
3. Кириллов В.В., Громов Г.Ю. Введение в реляционные базы данных СПб.: БХВ-Петербург, 2012. — 450 c.
4. Пирогов, В.Ю. Информационные системы и базы данных: организация и проектирование: учебное пособие / В.Ю. Пирогов. – СПб. : БХВ-Петербург, 2014.–528 с.
5. Преснякова, Г.В. Проектирование интегрированных реляционных баз данных: учебник / Г.В.Преснякова. – М.: КДУ, 2016.– 45 с.
6. Федоренко, Е.В.Базы данных: учебное пособие / Е.В. Федоренко, А.С. Самардак. – М. : Находка, 2016. – 116 с.
7. Ульман Д., Уидом Д. "Основы реляционных баз данных", 2006
Электронные ресурсы
8. Базы данных - Урок 1. Понятие базы данных. [Электронный ресурс]. URL:
9. Базы данных - Урок 2. Структура базы данных. [Электронный ресурс]. URL: http://www.site-do.ru/db/db2.php (Дата обращения: 20.04.2018)
10. Классификация баз данных. [Электронный ресурс]. URL:
11. C# 5.0 и платформа .NET 4.5. [Электронный ресурс]. URL: https://professorweb.ru/my/csharp/charp_theory/level1/infocsharp.php (Дата обращения: 20.04.2018)
12. MySQL Manual. [Электронный ресурс]. URL: http://www.mysql.ru/docs/man/ (Дата обращения: 20.04.2018)
13. Wiki-учебник по веб-технологиям: MySQL. [Электронный ресурс]. URL: http://www.webmasterwiki.ru/mysql (Дата обращения: 20.04.2018)
Вопрос-ответ:
Что такое АСУ Строительство новостроек?
АСУ Строительство новостроек - это автоматизированная система, предназначенная для управления и контроля процесса строительства новых зданий и сооружений.
Какие информационные технологии используются в АСУ Строительство новостроек?
В АСУ Строительство новостроек используются различные информационные технологии, включая базы данных, сетевые технологии, пользовательские интерфейсы и т.д.
Какие продукты-аналоги уже существуют для АСУ Строительство новостроек?
На данный момент существуют несколько продуктов-аналогов для АСУ Строительство новостроек, например, "Строительный мастер", "Строительный контроль", "СтройГИС" и другие.
Какие требования предъявляются к разрабатываемой базе данных для АСУ Строительство новостроек?
К разрабатываемой базе данных для АСУ Строительство новостроек предъявляются требования по надежности, масштабируемости, производительности, безопасности хранения данных и удобству использования для конечных пользователей.
Какие этапы включает проектирование базы данных для АСУ Строительство новостроек?
Проектирование базы данных для АСУ Строительство новостроек включает разработку инфологической модели, даталогическое проектирование, обоснование выбора модели данных и нормализацию схемы БД.
Какие задачи предполагается решить с помощью разработки БД для АСУ Строительство новостроек?
Разработка БД для АСУ Строительство новостроек позволит автоматизировать управление строительством новых зданий и сооружений, включая планирование работ, контроль исполнения, учет и анализ данных.
Какие информационные технологии рассмотрены в главе 1 "Системный анализ предметной области"?
В главе 1 рассмотрены информационные технологии, используемые в АСУ Строительство новостроек, включая базы данных, сетевые технологии, средства разработки программного обеспечения и др.
Какие продукты-аналоги были проанализированы в главе 1 "Системный анализ предметной области"?
В главе 1 были проанализированы различные продукты-аналоги систем управления строительством, включая СУБД для хранения и обработки данных, системы планирования и учета рабочего времени, интегрированные среды разработки и т. д.
Какие требования предъявляются к разрабатываемой базе данных?
К разрабатываемой базе данных предъявляются требования по надежности, производительности, масштабируемости, безопасности и др. Она должна эффективно хранить и обрабатывать большие объемы данных, обеспечивать целостность и доступность информации, а также интегрироваться с другими информационными системами.
Какие модели данных были использованы в процессе проектирования БД для АСУ Строительство новостроек?
В процессе проектирования БД были использованы инфологическая модель, даталогическая модель и нормализованная схема БД. Каждая из этих моделей позволяет описать структуру и связи между данными, представленными в БД.