Загрузка данных
Option Compare Database
Option Explicit
' ===== Задание 4 =====
Private Sub btnTask4_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset, rsNew As DAO.Recordset
Dim tdf As DAO.TableDef
Dim summa As Currency, vsego As Currency, srednee As Currency
Dim kolVsego As Long, kolDorogih As Long
Set db = CurrentDb
' 1. Считаем общую сумму лечения и среднюю
Set rs = db.OpenRecordset("Стационар")
Do Until rs.EOF
vsego = vsego + rs("ДнейЛечения") * rs("СтоимостьДня")
kolVsego = kolVsego + 1
rs.MoveNext
Loop
srednee = vsego / kolVsego
' 2. Удаляем старую таблицу, если уже запускали
On Error Resume Next
DoCmd.Close acTable, "ДорогиеНал"
db.TableDefs.Delete "ДорогиеНал"
On Error GoTo 0
' 3. Создаём новую таблицу и её поля
Set tdf = db.CreateTableDef("ДорогиеНал")
tdf.Fields.Append tdf.CreateField("КодПациента", dbLong)
tdf.Fields.Append tdf.CreateField("ФИОПациента", dbText, 100)
tdf.Fields.Append tdf.CreateField("ФИОВрача", dbText, 100)
tdf.Fields.Append tdf.CreateField("Диагноз", dbText, 100)
tdf.Fields.Append tdf.CreateField("Сумма", dbCurrency)
tdf.Fields.Append tdf.CreateField("Процент", dbDouble)
db.TableDefs.Append tdf
' 4. Переносим тех, кто платит наличными и дороже среднего
Set rsNew = db.OpenRecordset("ДорогиеНал")
rs.MoveFirst
Do Until rs.EOF
summa = rs("ДнейЛечения") * rs("СтоимостьДня")
If rs("КатегорияОплаты") = "нал" And summa > srednee Then
rsNew.AddNew
rsNew("КодПациента") = rs("КодПациента")
rsNew("ФИОПациента") = rs("ФИОПациента")
rsNew("ФИОВрача") = rs("ФИОВрача")
rsNew("Диагноз") = rs("Диагноз")
rsNew("Сумма") = summa
rsNew("Процент") = Round(summa / vsego * 100, 2)
rsNew.Update
kolDorogih = kolDorogih + 1
End If
rs.MoveNext
Loop
rs.Close
rsNew.Close
Application.RefreshDatabaseWindow
MsgBox "Средняя стоимость лечения: " & srednee & " руб." & vbCrLf & _
"Дорогих пациентов с наличной оплатой: " & kolDorogih & " из " & kolVsego & _
" (" & Format(kolDorogih / kolVsego * 100, "0.0") & "%)"
DoCmd.OpenTable "ДорогиеНал"
End Sub
' ===== Задание 5 =====
Private Sub btnTask5_Click()
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim rs As DAO.Recordset
Dim estPole As Boolean
Dim summa As Currency, vsego As Currency
Dim kol As Long, kolSkidka As Long
Dim procent As Double, sredProcent As Double
Set db = CurrentDb
Set tdf = db.TableDefs("Стационар")
' 1. Добавляем поле «Скидка», если его ещё нет
For Each fld In tdf.Fields
If fld.Name = "Скидка" Then estPole = True
Next
If Not estPole Then
tdf.Fields.Append tdf.CreateField("Скидка", dbCurrency)
End If
' 2. Общая сумма и средний процент (100% / число больных)
Set rs = db.OpenRecordset("Стационар")
Do Until rs.EOF
vsego = vsego + rs("ДнейЛечения") * rs("СтоимостьДня")
kol = kol + 1
rs.MoveNext
Loop
sredProcent = 100 / kol
' 3. Скидка 10% тем, у кого процент выше среднего
rs.MoveFirst
Do Until rs.EOF
summa = rs("ДнейЛечения") * rs("СтоимостьДня")
procent = summa / vsego * 100
rs.Edit
If procent > sredProcent Then
rs("Скидка") = summa * 0.1
rs("СтоимостьДня") = rs("СтоимостьДня") * 0.9
kolSkidka = kolSkidka + 1
Else
rs("Скидка") = 0
End If
rs.Update
rs.MoveNext
Loop
rs.Close
MsgBox "Средний процент: " & Format(sredProcent, "0.00") & "%" & vbCrLf & _
"Скидку 10% получили: " & kolSkidka & " чел."
DoCmd.OpenTable "Стационар"
End Sub
' ===== Задание 6 =====
Private Sub btnTask6_Click()
Dim rs As DAO.Recordset
Dim kol(1 To 100) As Long
Dim summa(1 To 100) As Currency
Dim fio(1 To 100) As String
Dim kod As Long, i As Long
Dim otvet As String
Set rs = CurrentDb.OpenRecordset("Стационар")
' 1. Безнал +40%, нал +25%
Do Until rs.EOF
rs.Edit
If rs("КатегорияОплаты") = "безнал" Then
rs("СтоимостьДня") = rs("СтоимостьДня") * 1.4
Else
rs("СтоимостьДня") = rs("СтоимостьДня") * 1.25
End If
rs.Update
rs.MoveNext
Loop
' 2. Считаем больных и сумму у каждого врача
rs.MoveFirst
Do Until rs.EOF
kod = rs("КодВрача")
kol(kod) = kol(kod) + 1
summa(kod) = summa(kod) + rs("ДнейЛечения") * rs("СтоимостьДня")
fio(kod) = rs("ФИОВрача")
rs.MoveNext
Loop
rs.Close
' 3. Выводим итоги
For i = 1 To 100
If kol(i) > 0 Then
otvet = otvet & fio(i) & ": больных " & kol(i) & _
", сумма " & Format(summa(i), "#,##0.00") & " руб." & vbCrLf
End If
Next
MsgBox otvet, , "Итоги по врачам"
End Sub