- •Министерство образования республики беларусь учреждение образования «гродненский государственный университет имени янки купалы» физико-технический факультет
- •Содержание
- •Введение
- •1 Анализ предметной области
- •1.1 Назначение проектируемой базы данных
- •2 Концептуальная модель предметной области
- •2.1 Структура базы данных
- •3 Логическая модель данных
- •4 Физическая модель базы данных
- •4.1 Описание выбранной субд
- •4.2 Создание структуры бд в субд ms access
- •5 Программирование приложения
- •6 Описание работы с системой
- •Заключение
- •Список использованных источников
4 Физическая модель базы данных
4.1 Описание выбранной субд
Microsoft Access - система управления базами данных, которую фирма Microsoft неизменно включает в состав профессиональной редакции Microsoft Office. СУБД Access занимает одно из ведущих мест среди систем для проектирования, создания и обработки баз данных.
Достоинства:
1. очень простой графический интерфейс, который позволяет не только создавать собственную базу данных, но и разрабатывать приложения, используя встроенные средства,
2. хранит все данные в одном файле, хотя и распределяет их по разным таблицам, как и положено реляционной СУБД. К этим данным относится не только информация в таблицах, но и другие объекты базы данных.
3. предлагает большое количество Мастеров, которые выполняют основную работу за пользователя при работе с данными и разработке приложений, помогают избежать рутинных действий и облегчают работу неискушенному в программировании пользователю.
4. распространенность, которая обусловлена тем, что Access является продуктом компании Microsoft,
5. постоянно обновляется производителем, поддерживает множество языков,
6. полностью совместим с операционной системой Windows,
7. ориентированность на пользователя с разной профессиональной подготовкой, что выражается в наличии большого количества Мастеров, развитую систему справки и понятный интерфейс.
8. широкие возможности по импорту/экспорту данных в различные форматы, от таблиц Excel и текстовых файлов, до практически любой серверной СУБД через механизм ODBC,
9. Наличие развитых встроенных средств разработки приложений. Большинство приложений, распространяемых среди пользователей, содержит тот или иной объем кода VBA (Visual Basic for Applications),
10.наличие встроенного языка макрокоманд.
Недостатки:
1. ограничены возможности по обеспечению многопользовательской среды,
2. В ранних версиях (до Access 2003) отсутствуют такие средства как триггеры и хранимые процедуры, что заставляет разработчиков возлагать поддержание бизнес логики БД на клиентскую программу или разрабатывать процедуры с помощью встроенного средства VBA.
3. обладает несложными способами защиты с использованием пароля БД (возможно применения дополнительных мер по защите от несанкционированного доступа с использованием процедур VBA),
4. В вопросах поддержки целостности данных отвечает только моделям БД небольшой и средней сложности.
5. Не распространяется бесплатно.
4.2 Создание структуры бд в субд ms access
На рисунках ниже представлены разработанные таблицы:
Рисунок 1 - Таблица «Предприятия»
Рисунок 1 - Таблица «Показатели»
Схема базы данных формируется после окончания работы над макетами таблиц с помощью меню Сервис/Схема данных.
При формировании связей между таблицами обязательно устанавливается поддержка целостности данных.
5 Программирование приложения
Последовательность действий
1.Спроектировалась главная форма приложения.
Рисунок 4 - Главная форма приложения
2.Был создан модуль содержащий некоторые константы, методы подключения базы данных и обновление содержимого Grid.
Imports System.Data.OleDb
Module Module1
Public conn As OleDbConnection
Public RUB1()
Public RUB2()
Public comparison As String
Public kCom As Integer
Public Sub FillGrid(Grid1 As DataGridView, cmd As String, TableName As String)
Dim c As New OleDbCommand
c.Connection = conn
c.CommandText = cmd
Dim ds As New DataSet
Dim da As New OleDbDataAdapter(c)
da.Fill(ds, TableName)
Grid1.DataSource = ds
Grid1.DataMember = TableName
End Sub
Public Sub FillGrid(Grid1 As DataGridView, cmd As String, TableName As String, s1 As String, s2 As Integer)
Dim c As New OleDbCommand
c.Connection = conn
c.CommandText = cmd
c.Parameters.AddWithValue("Отчетный_периуд", s1)
c.Parameters.AddWithValue("Код предприятия", s2)
Dim ds As New DataSet
Dim da As New OleDbDataAdapter(c)
da.Fill(ds, TableName)
Grid1.DataSource = ds
Grid1.DataMember = TableName
End Sub
End Module
3.Написанны методы кнопок добавления и удаления.
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim s1, s2, s3, s4 As String
Dim r As DialogResult
Form2.ShowDialog()
s1 = Form2.TextBox1.Text
s2 = Val(Form2.TextBox2.Text)
s3 = Val(Form2.TextBox3.Text)
s4 = Form2.TextBox4.Text
r = Form2.DialogResult
Form2.Close()
If r <> Windows.Forms.DialogResult.OK Then
Exit Sub
End If
Dim c As New OleDbCommand
c.Connection = conn
c.CommandText = "insert into Предприятия(Название,Реквизиты,Телефон,Контактное_лицо) values('" & s1 & "','" & s2 & "','" & s3 & "','" & s4 & "')"
c.ExecuteNonQuery()
RefreshGrid()
End Sub
Private Sub RefreshGrid()
FillGrid(Grid1, "select * from Предприятия", "Предприятия")
Grid1.Columns("Код_предприятия").Visible = False
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Dim s1, s2, s3, s4, s5, s6 As String
Dim r As DialogResult
Form3.ShowDialog()
s1 = Form3.TextBox1.Text
s2 = Form3.ComboBox1.Text
s3 = Form3.ComboBox2.Text
s4 = Form3.ComboBox3.Text
s6 = Val(Form3.TextBox2.Text)
s5 = Grid1.CurrentRow.Cells("Код_предприятия").Value
r = Form3.DialogResult
Form2.Close()
If r <> Windows.Forms.DialogResult.OK Then
Exit Sub
End If
Dim c As New OleDbCommand
c.Connection = conn
c.CommandText = "insert into Показатели(Код_предприятия,Название,Важность,Единица_измерения,Отчетный_периуд,Значение) values('" & s5 & "','" & s1 & "','" & s2 & "','" & s3 & "','" & s4 & "','" & s6 & "')"
c.ExecuteNonQuery()
RefreshGrid2()
End Sub
Private Sub RefreshGrid2()
Dim k As Integer
k = Grid1.CurrentRow.Cells("Код_предприятия").Value
FillGrid(Grid2, "select * from Показатели where Код_предприятия = " & k, "Показатели")
Grid2.Columns("Код_предприятия").Visible = False
Grid2.Columns("Код_показателя").Visible = False
End Sub
4.Написанны классы форм Добавления.
Public Class Form2
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.DialogResult = Windows.Forms.DialogResult.OK
Me.Close()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Me.DialogResult = Windows.Forms.DialogResult.Abort
Me.Close()
End Sub
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.AcceptButton = Button1
Me.CancelButton = Button2
End Sub
End Class
5.Подготовленна форма отслеживания динамики показателей.
Рисунок 5 - Форма отслеживания динамики показателей
6.Решена задача отслеживания динамики показателей.
Public Class Form4
Const USDtoRUB = 22000
Const EURtoRUB = 24000
Public Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Label10.Text = ""
Label4.Text = ""
Label6.Text = ""
Label8.Text = ""
Label10.Text = ""
Dim k As Integer
Dim Summ1 As Integer = 0
Dim Summ2 As Integer = 0
k = Form1.Grid1.CurrentRow.Cells("Код_предприятия").Value
FillGrid(Grid1, "select * from Показатели where Отчетный_периуд = ? AND Код_предприятия = ? ", "Показатели", "Первое полугодие", k)
Grid1.Columns("Код_предприятия").Visible = False
Grid1.Columns("Код_показателя").Visible = False
Grid1.Columns("Отчетный_периуд").Visible = False
FillGrid(Grid2, "select * from Показатели where Отчетный_периуд = ? AND Код_предприятия = ? ", "Показатели", "Второе полугодие", k)
Grid2.Columns("Код_предприятия").Visible = False
Grid2.Columns("Код_показателя").Visible = False
Grid2.Columns("Отчетный_периуд").Visible = False
ReDim RUB1(Grid1.Rows.Count - 1)
ReDim RUB2(Grid2.Rows.Count - 1)
mass(Grid1, RUB1)
mass(Grid2, RUB2)
For i As Integer = 0 To RUB1.Length - 1
Summ1 = Summ1 + RUB1(i)
Next
For i As Integer = 0 To RUB2.Length - 1
Summ2 = Summ2 + RUB2(i)
Next
Label8.Text = Summ2 - Summ1
End Sub
Private Sub Grid1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Grid1.CellContentClick
Label10.Text = "отсутствует одно из значений показателя"
Dim k As Integer
If e.RowIndex = -1 Then
mass(Grid1, RUB1)
End If
k = e.RowIndex
If k <> -1 Then
Label4.Text = RUB1(k)
comparison = Grid1.Item("Название", k).Value
For Row As Integer = 0 To Grid2.Rows.Count - 1
If Grid2.Item("Название", Row).Value = comparison Then
Label10.Text = RUB2(Row) - RUB1(k)
End If
Next
End If
End Sub
Private Sub Grid2_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles Grid2.CellContentClick
Label10.Text = "отсутствует одно из значений показателя"
Dim k As Integer
k = e.RowIndex
If e.RowIndex = -1 Then
mass(Grid2, RUB2)
End If
If k <> -1 Then
Label6.Text = RUB2(k)
comparison = Grid2.Item("Название", k).Value
For Row As Integer = 0 To Grid1.Rows.Count - 1
If Grid1.Item("Название", Row).Value = comparison Then
Label10.Text = RUB2(k) - RUB1(Row)
End If
Next
End If
End Sub
Private Sub mass(Grid As DataGridView, mass() As Object)
For Row As Integer = 0 To Grid.Rows.Count - 1
If Grid.Item("Единица_измерения", Row).Value = "USD" Then
mass(Row) = Grid.Item("Значение", Row).Value * USDtoRUB
End If
If Grid.Item("Единица_измерения", Row).Value = "RUB" Then
mass(Row) = Grid.Item("Значение", Row).Value
End If
If Grid.Item("Единица_измерения", Row).Value = "EUR" Then
mass(Row) = Grid.Item("Значение", Row).Value * EURtoRUB
End If
Next
End Sub
End Class
