Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

RUS_-_Karejev_-_Razrabotka_Windows-prilozhenij

.pdf
Скачиваний:
36
Добавлен:
02.02.2015
Размер:
8 Мб
Скачать
☆

увеличить изображение

Рис. 11.15. Контекстное меню "Проводника"

Рис. 11.16. Добавление нового клиента

увеличить изображение

Рис. 11.17. Клиент, добавленный в окно "Проводника"

В проводнике можно также скопировать клиента в группе для последующего добавления его в другую группу (рис. 11.18, 11.19).

увеличить изображение

Рис. 11.18. Копирование клиента из группы

увеличить изображение

Рис. 11.19. Вставка клиента в другую группу При вставке клиента в другую группу появляется промежуточная форма перевода клиента (рис. 11.20).

Рис. 11.20. Промежуточная форма перевода клиента в другую группу В результате клиент перемещается в другую группу (рис. 11.21).

увеличить изображение

Рис. 11.21. Клиент переведен в другую группу

После произведения оплаты клиентом курса, сумма помещается в окно прихода (рис. 11.22).

увеличить изображение

Рис. 11.22. Вкладка "Оплаты"

При завершении работы с программой появляется диалоговое окно, предлагающее обновить базу данных, если были произведены изменения (рис. 11.23). Также стандартное окно предупреждения выхода из программы не позволяет случайно закрыть ее (рис. 11.24).

Рис. 11.23. При завершении работы с программой предлагается обновить базу данных

Рис. 11.24. Стандартное окно предупреждения препятствует потере данных при случайном выходе из программы

Описание базы данных

Прежде чем приступать к разработке программы, необходимо спроектировать базу данных, в которой будут находиться наши данные. БД, переведенная в формат MS Access, называется EducationCenter. В учебном центре обучаются клиенты (слушатели) на разных направлениях (администрирование, программирование, графика, офисные курсы и т. д.), и у каждого направления есть свои курсы. Офис-менеджер регистрирует клиентов в базе данных и добавляет их в группы. Группы могут иметь статус набираемых, обучаемых и закончивших обучение. Итоговые суммы доходов и расходов помещаются в отдельную таблицу. База данных также содержит информацию о сотрудниках.

База данных EducationCenter находится в каталоге (Code\Glava11\ EducationCenter).

В таблицах 11.1–11.14 приводится описание таблиц в БД и структура каждой таблицы.

 

 

Таблица 11.1. Описание таблиц

№

Таблица

Описание

1

Clients

Данные клиентов

2

Course

Описание курсов в учебном центре

3

Data

Таблица итоговых сумм (прихода и расхода) за день

4

Directions

Описание направлений курсов

5Employees Данные о сотрудниках учебного центра

6Expenses Денежные расходы

7Group_clients Промежуточная таблица для групп и клиентов

8Groups Данные о группах

9GroupStatus Состояния групп

10Income Денежные приходы

11Payment_type Виды оплат

12PlanRealization Разницы между суммой прихода и реализованной суммой

13RealizedTable Реализованные деньги клиентов

Структура таблиц

 

 

 

 

 

 

Таблица 11.2. Clients

Поле

 

 

Тип данных

 

Описание

ClientID

 

 

Счетчик

 

 

Номер клиента

Fname

 

 

Текстовый

 

 

Имя

Lname

 

 

Текстовый

 

 

Фамилия

FathName

 

 

Текстовый

 

 

Отчество

LinkData

 

 

Текстовый

 

 

Контактные данные

Recorddate

 

 

Дата/Время

 

 

Дата записи

Note

 

 

Текстовый

 

 

Заметки

PaymentType

Текстовый

 

 

Вид оплаты

IsRinged

 

 

Логический

 

 

Был ли оповещен клиент по телефону

 

Таблица 11.3. Course

Поле

 

Тип данных

 

Описание

 

 

 

 

 

 

 

 

 

 

 

 

 

CourseID

 

Счетчик

 

Номер курса

 

 

 

 

 

 

 

 

 

 

 

CourseName

Текстовый

 

Название курса

 

 

 

 

 

 

 

 

 

 

 

 

 

PriceText

 

Текстовый

 

Цена в виде текста

 

 

 

 

 

 

 

 

 

 

 

 

 

DirectionID

 

Числовой

 

Номер направления

 

 

 

 

 

 

 

 

 

 

 

PriceNumber

Числовой

 

Цена курса

 

 

 

 

 

 

 

 

 

 

 

 

 

Note

 

Текстовый

 

Заметки по курсу

 

 

 

 

 

 

 

 

Таблица 11.4. Data

Поле

 

 

 

 

Тип данных

Описание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DataID

 

 

 

 

Счетчик

 

 

 

Номер

 

 

 

 

 

 

 

 

 

 

 

 

CurrentDate

 

 

 

 

Дата/Время

Текущая дата

 

 

 

 

 

 

 

amountYesterday

Денежный

Всего вчера

 

 

 

 

 

 

 

 

 

AmountToday

 

Денежный

Всего сегодня

 

 

 

 

 

 

 

 

 

IncomeToday

 

Денежный

Приход на сегодня

 

 

 

 

 

 

 

 

 

expanseToday

 

Денежный

Расход на сегодня

 

 

 

 

 

 

 

 

 

 

 

 

Note

 

 

 

 

Текстовый

Заметки

 

 

 

 

 

 

Таблица 11.5. Directions

Поле

 

Тип данных

 

 

 

Описание

 

DirectionID

Счетчик

Номер направления

 

DirectName

Текстовый

Наименование направления

 

Note

 

Текстовый

Заметки

 

Таблица 11.6. Employees

 

 

 

 

 

 

 

 

Поле

 

Тип данных

 

 

 

 

Описание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EmployeeID

Счетчик

Номер сотрудника

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LastName

 

Текстовый

Фамилия

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FirstName

 

Текстовый

Имя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FatherName

Текстовый

Отчество

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LinkData

 

Текстовый

Контактные данные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BirthDay

 

Дата/Время

Дата рождения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DirectionID

 

Числовой

Номер направления

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Address

 

Текстовый

Адрес

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Notes

 

Текстовый

Заметки

 

 

 

 

 

 

 

 

 

Таблица 11.7. Expenses

 

 

 

 

 

 

 

 

Поле

 

 

 

 

Тип данных

 

 

Описание

 

 

 

ExpenseID

 

 

 

 

Счетчик

 

 

 

 

Номер расхода

 

 

 

DataID

 

 

 

 

Числовой

 

 

 

 

Номер даты

 

 

 

Note

 

 

 

 

Текстовый

Заметки

 

 

 

Summa

 

 

 

 

Денежный

Сумма прихода

 

 

 

ClientID

 

 

 

 

Числовой

 

 

 

 

Номер клиента

 

 

 

EmployeeID

 

 

 

 

Числовой

 

 

 

 

Номер сотрудника

 

 

 

payment_typeID

Числовой

 

 

 

 

Номер вида оплаты

 

 

 

Таблица 11.8. Group_clients

 

 

 

 

 

 

 

 

Поле

 

 

Тип данных

 

Описание

 

 

 

 

GroupClientID

Счетчик

 

 

Номер

 

 

 

 

 

 

 

 

GroupID

 

 

Числовой

 

 

Номер группы

 

 

 

 

ClientID

 

 

Числовой

 

 

Номер клиента

 

 

 

 

IsPaid

 

 

Логический

 

 

Оплатил

 

 

 

 

 

 

 

 

Notes

 

 

Текстовый

 

 

Заметки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 11.9. Groups

Поле

 

Тип данных

 

 

 

 

Описание

GroupID

 

Счетчик

 

Номер группы

BeginDate

 

Дата/время

 

Дата начала обучения

EndDate

 

Дата/время

 

Дата конца обучения

BeginTime

 

Дата/время

 

Время начала обучения

EndTime

 

Дата/время

 

Время конца обучения

ClientsCount

 

Числовой

 

Кол-во клиентов в группе

ClassNumber

Числовой

 

Номер класса

CourseID

 

Числовой

 

Номер курса

EmployeeID

 

Числовой

 

Номер преподователя в группе

Note

 

Текстовый

 

Заметки

 

 

 

 

 

 

 

 

StatusID

 

Числовой

 

Номер статуса группы

Таблица 11.10. GroupStatus

 

 

 

 

 

 

 

 

Поле

 

Тип данных

 

 

Описание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

StatusID

 

Счетчик

Номер статуса

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

StatusName

Текстовый

Наименование

 

 

 

 

 

 

Таблица 11.11. Income

 

 

 

 

 

 

 

 

Поле

 

 

 

 

Тип данных

 

 

Описание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IncomeID

 

 

 

 

Счетчик

 

 

 

 

Номер прихода

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IsRealized

 

 

 

 

Логический

Сумма реализована

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DataID

 

 

 

 

Числовой

 

 

 

 

Номер даты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Summa

 

 

 

 

Денежный

Сумма прихода

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

payment_typeID

Числовой

 

 

 

 

Номер вида оплаты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Note

 

 

 

 

Текстовый

Заметки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ClientID

 

 

 

 

Числовой

 

 

 

 

Номер клиента

 

 

 

Таблица 11.12. Payment_type

Поле

 

 

 

 

 

 

Тип данных

 

Описание

 

 

payment_typeID

 

 

Счетчик

 

 

Номер вида оплаты

 

 

payment_typeName

Текстовый

 

 

Вид оплаты

 

 

Note

 

 

 

 

 

 

Текстовый

 

 

Заметки

 

 

 

Таблица 11.13. PlanRealization

Поле

 

 

 

 

 

Тип данных

 

Описание

 

ID

 

 

 

 

 

Счетчик

 

Номер записи

 

IncomeID

 

 

 

 

 

Числовой

 

Номер прихода

 

SummaPlan

 

 

 

 

 

Денежный

 

Запланнированная сумма

 

SummaRealization

Денежный

 

Реализованная сумма

 

IsRealized

 

 

 

 

 

Логический

 

Реализовано

 

DateRealization

 

Дата/время

 

Дата реализации

 

Cause

 

 

 

 

 

Текстовый

 

Причина реализации

 

Таблица 11.14. RealizedTable

Поле

 

 

 

Тип данных

 

 

Описание

 

ID

Счетчик

Номер записи

RealizedSumm

Денежный

Сумма реализации

 

 

 

RealizingDate

Дата/время

Дата реализации

 

 

 

Note

Текстовый

Заметки

 

 

 

ClientID

Числовой

Номер клиента

Схема связи таблиц в БД

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

MS Access.

увеличить изображение

Рис. 11.25. Схема базы данных EducationCenter

Разработка приложения

Перейдем теперь непосредственно к приложению. В таблицах 11.15 и 11.16 приводится описание классов, используемых во всем приложении.

Таблица 11.15. Список классов, управляющих формами

Имя класса

Описание класса

frmManager

Управляет главной формой

frmAuthorization

Форма авторизации

frmDirection

Форма направления

frmCourse

Форма курса

frmGroup

Форма группы

frmClient

Форма клиента

frmSearchClient

Форма поиска клиента

frmEmployee

Форма сотрудников

frmPaymentType Форма оплат

Таблица 11.16. Список дополнительных классов

Имя класса

Описание класса

ManagerTreeNode Абстрактный класс узла дерева в проводнике

ClientTreeNode Класс клиента в проводнике

GroupTreeNode Класс группы в проводнике

CourseTreeNode Класс курса в проводнике

DirectionTreeNode Класс направления в проводнике

CustomListItem Класс, представляющий item в ListView проводника

Описание создания программы

Далее мы последовательно будет создавать приложение Education Center. В окончательном итоге был создан результирующий файл Manager.sln (Code\Glava11\Educationcenter\Manager), содержащий ссылки на все промежуточные проекты. В папке также имеются отдельные проекты — например, пользовательские элементы управления.

Для каждой формы я привожу рисунок, на котором имеются надписи свойства Name элементов. Для большинства элементов в тексте я также привожу значения свойств, определяемых в режиме дизайна. Впрочем, большинство незначительных свойств лучше попытаться восстановить по внешнему виду, приводимому на соответствующих рисунках. Возможно, вам даже удастся найти более оптимальные значения. Если же вы будете затрудняться в настройке этих элементов — смотрите исходные проекты. (Напомню, что свойства элементов, значения которых были изменены, выделяются жирным шрифтом)

Методы InitializeComponent, Dispose, а также объявление элементов управлений во всех классах были убраны. Эти места выделены жирным шрифтом. Все комментарии, а также документирование XML-тегами в кодах также выделены жирным шрифтом.

Форма frmManager (Manager.cs)

Свойству Text формы устанавливаем значение Education Center.

Помещаем на форму из окна ToolBox следующие элементы управления:

ToolBar. Называем его tbMain. В коллекцию Buttons элемента tbMain добавляем кнопки класса ToolBarButton:

tbnRefreshMainDB — кнопка обновления главной БД;

tbnEmployees — кнопка открытия формы сотрудников frmEmployees; tbnFind — кнопка открытия формы поиска клиентов frmSearchClient.

Создаем обработчик события ButtonClick для tbMain (см. код), который управляет функциональностью нажатия кнопок на tbMain.

TabControl. Называем его tcManager.

Свойству Dock элемента tcManager устанавливаем значение Fill. В коллекцию TabPages элемента tcManager добавляем вкладки класса TabPage:

tpWaitingRoom — свойству Text устанавливаем значение "Приемная";

tpBaseTables — свойству Text устанавливаем значение "Основные таблицы";

tpPayment — свойству Text устанавливаем значение "Оплаты";

tpExplorer — свойству Text устанавливаем значение "Проводник";

tpStatistic — свойству Text устанавливаем значение "Статистика".

Помещаем панель на страницу tpWaitingRoom, и свойству Dock панели устанавливаем Bottom. В нее добавляем кнопки btnCreateGroup (свойство Text у кнопки "Создать группу"), btnDeleteGroup (свойство Text у кнопки "Удалить группу"),

btnCreateClient (свойство Text у кнопки "Создать клиента"), btnDeleteClient (свойство Text у кнопки "Удалить клиента"). Для этих кнопок создаем обработчики события Click (btnCreateGroup_Click, btnDeleteGroup_Click, btnCreateClient_Click,

btnDeleteClient_Click соответственно, см. код программы)

На эту же страницу добавляем другую панель, и свойству Dock панели устанавливаем Top. Помещаем на эту панель 2 элемента ComboBox: cmbDirections и cmbGroupStatus и 2 Label-а со свойствами Text "Направления" и "Отображаемые группы". Для этих элементов ComboBox создаем обработчики события SelectionChangeCommitted (и реализацию этих

обработчиков в коде программы). Затем на эту же панель добавляем кнопку btnShowGroups, которая будет заполнять курсы данного выбранного направления и группы с данным выбранным статусом. Создаем для этой кнопки обработчик события Click (см. код программы).

На эту же страницу добавляем еще панель, и свойству Dock панели устанавливаем Fill. В эту панель добавляем DataGrid dgCourses (свойству Dock устанавливаем значение Left, а свойству CaptionText устанавливаем значение "Курсы"), Splitter (не изменяем свойства), панель (свойству Dock устанавливаем Fill). В последнюю добавленную панель добавляем DataGrid dgGroups (свойству Dock устанавливаем Top, а свойству CaptionText устанавливаем значение "Группы"), Splitter (свойству Dock устанавливаем значение Top), DataGrid dgClients (свойству Dock устанавливаем значение Fill, а свойству CaptionText устанавливаем значение "Клиенты") (рис. 11.25).

увеличить изображение

Рис. 11.26. Форма frmManager, страница "Приемная"

Переходим на страницу "Основные таблицы". Помещаем на страницу панель (свойству Dock устанавливаем значение Right), DataGrid dgMainTable (свойству Dock устанавливаем значение Left). На панель добавляем GroupBox и несколько элементов

RadioButton: rbClients, rbGroups, rbCourses, rbDirections, rbIncomeMain, rbOutMain, rbRealizedTableMain,

rbPaymentTypeMain, rbDataMain, rbGroupClientsMain, rbStatusMain со свойствами Text "Клиенты", "Группы", "Курсы",

"Направления", "Приходы", "Расходы", "Реализация", "Виды оплат", "Данные", "Группы-Клиенты", "Статусы группы" соответственно. Для радиокнопки rbClients создаем обработчик события CheckedChanged, и у остальных RadioButton-ов из окна событий выбираем на событие CheckedChanged обработчик rbClients_ CheckedChanged. В итоге у всех RadioButton-ов

будет один и тот же обработчик события —rbClients_ CheckedChanged (см. код программы). (рис. 11.27).

увеличить изображение

Рис. 11.27. Форма frmManager, страница "Основные таблицы"

Переходим на страницу "Оплаты". Помещаем на страницу панель (свойству Dock устанавливаем значение Bottom), на эту панель помещаем 5 элементов TextBox txtResultIncome, txtResultOut, txtBalance, txtYesterdaySumm, txtResultCount со

свойствами Text "Итого приход", "Итого расход", "Баланс", "Вчера" и "Всего" соответственно. Добавляем Button btnCalculate и создаем для него обработчик события Click (см. код программы). Также на эту панель помещаем 2 кнопки навигации по записям btnNextDate и btnPrevDate. Для каждой из кнопок создаем обработчиков события Click. Помещаем кнопку btnShowPaymentTypeForm, которая будет открывать форму frmPaymentType, и создаем для этой кнопки обработчик события Click. Помещаем на эту же страницу еще одну панель (свойству Dock устанавливаем значение Fill), на эту панель помещаем DataGrid dgIncome (свойству Dock устанавливаем значение Left, свойству CaptionText устанавливаем значение "Приход"), Splitter и DataGrid dgOut (свойству Dock устанавливаем значение Fill, свойству CaptionText устанавливаем значение "Расход") ( рис. 11.28).

увеличить изображение

Рис. 11.28. Форма frmManager, страница "Оплаты"

Переходим на страницу "Проводник". Помещаем на эту страницу панель (свойству Dock устанавливаем значение Bottom), на эту панель помещаем StatusBar sbMain, добавляем на страницу другую панель (свойству Dock устанавливаем значение Fill),

на эту панель помещаем TreeView tvManager (свойству Dock устанавливаем значение Left), Splitter, ListView lvManager

(свойству Dock устанавливаем значение Fill). Для tvManager создаем обработчики tvManager_AfterSelect, а для lvManager

— lvManager_MouseDown, lvManager_Click, lvManager_DoubleClick (см. код программы) (рис. 11.29).

увеличить изображение

Рис. 11.29. Форма frmManager, страница "Проводник"

Переходим на страницу "Статистика". Помещаем на эту страницу панель (свойству Dock устанавливаем значение Top), на эту панель помещаем элемент GroupBox. В GroupBox помещаем ComboBox cmbFilteringDirection и создаем для него обработчик cmbFilteringDirection_SelectionChangeCommitted (см. код программы), помещаем Label со свойством Text "Направления". Также в GroupBox помещаем два элемента TextBox: txtOweToEdCenter, txtEdCenterOwe и два элемента Label со свойствами

Text "Должны учебн. центру" и "Должен учеб. центр" соответственно. Добавляем также кнопку btnCalculateOwe со свойством Text "Расчет" и создаем для нее обработчик btnCalculateOwe_Click. Затем на страницу добавляем DataGrid dgStatistic

(свойство Dock устанавливаем Fill) (рис. 11.30).

увеличить изображение

Рис. 11.30. Форма frmManager, страница "Статистика"

Соединение с базой данных

После того как на форме были размещены элементы управления, на форму необходимо добавить элементы управления для подключения к базе данных.

Открываем окно Server Explorer (если оно не отображается, выберите в меню View —> Server Explorer). Устанавливаем соединение с базой данных EducationCenter.mdb. После этого переносим таблицы из базы на форму. Автоматически будут созданы адаптеры класса OleDbDataAdapter. Далее генерируем DataSet для всех таблиц на одном из адаптеров. Элемент DataSet называем

mainDataSet. В созданной схеме DataSet необходимо соединить таблицы между собой так же, как они соединены в базе данных

(рис. 11.25).

Добавляем в класс формы следующие объекты (глобальные поля, константы, свойства):

private string MainConnectionString = "DataSource=EducationCenter.mdb; Provider=Microsoft.Jet.OLEDB.4.0; persist security info=False; User ID=admin";

private int currentDataID;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]