1. Изучение предметной области
1.1 Заинтересованные лица и их требования
Заинтересованные лица:
Водитель
Бухгалтер
Депо
Диспетчер
Кондуктор
Основные требования:
Безошибочный ввод данных.
Программа работает без сбоев.
Хороший и удобный интерфейс.
Быстрое и качественное обслуживание
1.2 Документ «Видение»
Заинтересованные лица:
Водитель: хочет осторожно и точно по расписанию производить маршрут.
Бухгалтер: хочет безошибочно и вовремя производить оплату с рабочими, точно отсчитывать прибыль и деньги в амортизационный фонд, в фонд налогов, за электроэнергию. Вовремя фиксировать необходимые данные в соответствующих журналах.
Депо: хочет, в случае необходимости производить ремонт – амортизацию транспорта.
Кондуктор: хочет зафиксировать в начале каждого маршрута количество билетов, выданных диспетчером, а также подсчитать их количество в конце маршрута.
Диспетчер: хочет правильно создавать путевые листы (расписание маршрутов), вовремя отправлять (принимать) транспорт на линию (с линии) маршрута. Следить за соответствием расписания и движения транспортов и регистрировать все отправления и прибытия транспортов в журнале регистрации.
Место системы.
Систему можно использовать на такой государственной организации, как городской электротранспорт.
Пользователи системы.
В качестве непосредственных пользователей системы могут выступать: водитель, диспетчер, бухгалтер и кондуктор городского электротранспорта.
Задачи и свойства системы.
Обеспечивать удобный интерфейс пользователя.
Реагировать на ошибки ввода – вывода данных.
Искать данные в системе по запросу.
1.3 График выполнения курсовой работы
Период выполнения |
Выполняемый этап курсовой работы |
2 неделя | Изучение предметной области. |
3\4 неделя | Выполнение анализа системы. |
5\9 неделя | Окончание проектирования. |
10\13 неделя | Написания программного кода. |
13\14 неделя | Предоставление окончательной программы. |
14\15 неделя | Защита курсовой работы. |
1.4 Диаграмма прецедентов и описание прецедентов
Диаграмма прецедентов
Описание прецедентов
Прецедент П1: Подсчет прибыли.
Основной исполнитель: Бухгалтер.
Заинтересованные лица и их требования:
Кондуктор: Хочет в начале и в конце каждого рабочего дня знать количество билетов, выданных диспетчером, и соответственно оставшихся.
Бухгалтер: Хочет подсчитать полученную прибыль от продажи билетов и распределить ее на оплату налогов и зарплаты.
Предусловия: Бухгалтер должен быть идентифицирован и аутентифицирован.
Постусловия: Прибыль посчитана, и данные о подсчете занесены в систему.
Основной, успешный сценарий:
1).В начале рабочего дня бухгалтер фиксирует в «журнале учета»: дату, количество выдающихся билетов, в соответствии с маршрутом; выдает билеты диспетчеру, который передает кондуктору.
2).В конце рабочего дня кондуктор возвращает диспетчеру оставшееся количество билетов и сумму от проданных. Диспетчер передает их бухгалтеру, который заносит всю необходимую информацию (дата, №маршрута, количество оставшихся билетов, количество выданных билетов, сумма) в «журнал учета».
3).Бухгалтер учитывает образовавшуюся прибыль и высчитывает денежные финансы на оплату налогов и заработной платы. А также, фиксирует количество денежных финансов на налоги в «журнале налогов», а заработную плату в «журнале ЗП».
Альтернативный сценарий 1:
2.а). В конце рабочего дня кондуктор возвращает диспетчеру всё оставшееся количество билетов, но не всю сумму денег за проданные билеты.
1. Диспетчер передает все бухгалтеру. Бухгалтер заносит всю необходимую информацию в систему.
2. Система при подсчете обнаруживает ошибку недостачи, а также количество штрафа.
3. Бухгалтер вызывает кондуктора и информирует его о недостаче. Кондуктор платит необходимую сумму штрафа, по ранее определенной сумме. Бухгалтер заносит заплаченную сумму штрафа в «журнал штрафов».
4. Бухгалтер заносит в систему уже новые данные. Переход к п. 1).
Прецедент П2: Распределение транспорта по маршрутам.
Основной исполнитель: Диспетчер.
Заинтересованные лица и их требования:
Диспетчер: Хочет точно и правильно создать путевые листы для каждого маршрута. Хочет правильно распределить транспорт по маршрутам, в соответствии с количеством пассажиров на маршрутах, а также не допустить пересечение или столкновение транспортов. Провести регистрацию в соответственном журнале.
Водитель: Хочет иметь в наличии маршрут своего транспорта, путевой лист, расписание остановок, точное время передвижения и остановок.
Предусловия: Диспетчер должен быть идентифицирован и аутентифицирован.
Постусловия: Транспорт распределен по маршрутам.
Основной, успешный сценарий.
1).Диспетчер создает путевые листы в системе для всех необходимых маршрутов, в зависимости от количества мест, приходящихся на каждый транспорт, и количеством пассажиров на маршрутах. Все путевые листы хранятся в «журнале П_лист’.
2).В начале рабочего дня диспетчер выдает каждому водителю его путевой лист. Диспетчер отправляет транспорт по маршруту. Регистрирует начало каждого маршрута в «журнале регистрации отправки и прибытия транспортов».
3).Диспетчер принимает транспорт, проверяет его, и не найдя повреждений отпускает водителя, регистрирует в «регистрации отправки и прибытия транспортов», а также сообщает системе о завершении определенного маршрута.
Альтернативный сценарий 1:
3.а) В конце рабочего дня транспорт не возвращается в Депо
1. Диспетчер фиксирует в системе отсутствие транспорта. Информирует необходимых лиц. Производятся поиски транспорта.
2. При прибытии с маршрута транспорта переход к п. 3).
Альтернативный сценарий 2:
3.б) Принимая и осматривая транспорт в конце рабочего дня, диспетчер находит незначительные повреждения.
1. Диспетчер сообщает о повреждениях водителю, в Депо, в систему в «журнал повреждений».
2. Транспорт снимают с линии маршрута, заменяя его другим и фиксируя смену в системе.
3. Депо вызывает мастера по ремонтным работам, регистрируя в системе оплату работнику за ремонт.
4. После ремонта транспорт возвращают на линию маршрута. Переход к п. 3).
Прецедент П3: Расчет с работниками.
Основной исполнитель: Бухгалтер.
Заинтересованные лица и их требования:
Бухгалтер. Хочет точно и быстро выделить средства для оплаты услуг работников.
Руководство. Хочет аккуратно и точно записать и хранить информацию о выделенных средствах в систему.
Предусловия: Бухгалтер идентифицирован и аутентифицирован (имеет доступ к определенным ресурсам). Программа загружена.
Постусловия: Расчет с работниками. Занесение и сохранение соответствующей информации в журналах системы.
Основной, успешный сценарий
1).В систему бухгалтером заноситься количество выданных билетов и количество оставшихся, за весь месяц.
2).Система считает прибыль от всех проданных билетов. Бухгалтер отсчитывает некоторую часть прибыли на оплату налогов, заносит в «журнал налогов».
3).Система вычисляет заработную плату работникам в соответствии с установленным коэффициентом k, который (от всей суммы прибыли) составляет:
– для водителя = 0,3
– для кондуктора = 0,15
– для диспетчера = 0,15
– для бухгалтера =0,2
5).Система выводит конечные данные по оплате и сохраняет их. Бухгалтер расплачивается с работниками, фиксируя все расчеты в «журнале ЗП».
Альтернативный сценарий 1:
1.а). В систему бухгалтер заносит не всю информацию.
1. Бухгалтер заносит только количество выданных билетов.
2. Система выдает сообщение: «НЕДОСТАТОЧНО ДАННЫХ ДЛЯ РАСЧЕТА!!!»
3. Бухгалтер вводит уже всю информацию заново. Переход к п. 1.
Прецедент П4: Расчет с поставщиком электроэнергии.
Основной исполнитель: Бухгалтер.
Заинтересованные лица и их требования:
Бухгалтер. Хочет точно и быстро выделить средства для оплаты услуг энергопоставщика.
Руководство. Хочет аккуратно и точно записать в систему, и хранить информацию о выделенных энергопоставщику средствах.
Предусловия: Бухгалтер идентифицирован и аутентифицирован (имеет доступ к определенным ресурсам). Программа загружена.
Постусловия: Произведен расчет за электроэнергию. Занесение и сохранение соответствующей информации в базе данных системы.
Основной, успешный сценарий:
1).Бухгалтер заносит все необходимые данные (количество маршрутов, пройденные ими расстояния) в систему.
2).Система в конце каждого дня производит подсчет затраченной электроэнергии на каждый маршрут, соответственно учитывая расстояния маршрутов. Бухгалтер сохраняет в системе все данные в конце каждого дня.
3).В конце каждой недели бухгалтер суммирует окончательный результат за оплату электроэнергии. Бухгалтер сохраняет в системе все данные в конце каждой недели.
4).Бухгалтер представляет полученный отчет поставщику электроэнергии. Поставщик сверяет со своими расчетами, и при совпадении принимает оплату. Бухгалтер фиксирует в системе все проведенные расчеты и уплаты в «журнале оплаты за электричество».
Альтернативный сценарий 1:
4).Не совпадение расчетов бухгалтера и поставщика.
1. Бухгалтер заново вносит свои данные в систему. Система выдает новые данные об оплате.
2. Бухгалтер представляет новый полученный отчет поставщику электроэнергии. Переход к п4).
1.5 Составление концептуальных классов
Список категорий концептуальных классов
Категории концептуальных классов |
Пример |
Физические или материальные объекты | Трамвай, троллейбус |
Спецификации, элементы проектных решений или описание объектов | Описание регистрации |
Места | Остановки, Депо |
Транзакции | Регистрация |
Роль людей | Водитель, кондуктор, диспетчер, бухгалтер |
Контейнеры других объектов | Трамвай, троллейбус |
Содержимое контейнеров | Пассажиры, кондуктор |
Организации | Служба авторизации платежей, налоговая служба, амортизационная служба. |
События | Продажа билета, создание путевого листа. |
Правила и политика | Правило возврата путевого листа |
Записи различных деятелей | Различного вида журналы |
Описание концептуальных классов.
Бухгалтер – Accountant
Пассажир – Passenger
Водитель – Driver
Диспетчер – Dispatch
Кондуктор – Conductor
Депо – Depo
Служба авторизации платежей – Service payment
Амортизационный фонд – Repair fund
Билет – Ticket
Налог – Tax
Прибыль – Profit
Заработная плата – Salary
Трамвай – Tram
Троллейбус – Trolley-bus
Путевой лист – Plist
Продажа – Sale
Оплата – Payment
Маршрут – Itinerary
Расписание – Time_table
Налоговая служба – Tax_Service
Энергопоставщик – ElSupplier
Журнал регистрации транспорта – Journal transport register
Журнал путевых листов – Journal_Plist
Журнал учета – Journal_Ychet
Журнал ЗП (Заработной платы) – Journal_ZP
Журнал налогов – Journal_Tax
Журнал оплаты за электроэнергию – Journal_Elect
Журнал штрафов – Journal_sh
Журнал повреждений – Journal_break
Ассоциации классов
Категория |
Пример |
А является физической частью В | Троллейбус =вагон |
А физически содержится в В | Маршрут =остановка |
А логически содержится в В | Остановка =расписание остановок |
А получает В | Пассажир =билет |
А начисляет В | Бухгалтер =зарплата |
А использует В | Водитель = расписание |
А выдает В | Диспетчер =путевой лист |
А получает В | Водитель =путевой лист |
А принимает В | Кондуктор =оплату |
Диаграмма концептуальных классов
Атрибуты классов
Itinerary |
nameIt-ry: text Col. Stop: int nameStop: text time between Stop: double timeA: double timeB: double |
Salary |
Summa: double Col sale ticket: double Bonus: double Tax: double Procent: double Holiday: double |
PList |
NumberT-t: int Itinerary: text timeA: double timeB: double surnameDriver: text year: double month: double |
Accountant |
name: FIO addres: text tel: PhoneNumber |
Transport_Register |
Surname_Dispatch: text NumberIt-ry: double Number_Tr-t: double timeA: double TimeB: double |
Transport |
Tip: text Number: int Ser_number: int |
2. Проектирование системы
2.1 Описание операций и диаграмм взаимодействия
Прецедент: Распределение транспорта по маршрутам.
Описание операции ОП 1:
Операция | Transport_Itinerary |
Ссылки | Распределение транспорта по маршрутам и занесение данных в журнал регистрации |
Предусловия | Бухгалтер идентифицирован и аутентифицирован. |
Постусловия | Транспорт распределен. Данные занесены в журнал. |
Прецедент: Начисление заработной платы.
Описание операции ОП 2:
Операция | Receive_Profit |
Ссылки | Подсчет прибыли. |
Предусловия | Бухгалтер идентифицирован и аутентифицирован. |
Постусловия | Прибыль подсчитана, данные занесены в систему. |
Описание операции ОП 3:
Операция | Pay_Salary |
Ссылки | Выделение средств оплаты услуг работникам |
Предусловия | Бухгалтер идентифицирован и аутентифицирован. |
Постусловия | Средства выделены, данные записаны в журнале системы. |
Прецедент: Оплата за электроэнергию.
Описание операции ОП 4:
Операция | Pay_Supplier |
Ссылки | Выделение средств оплаты услуг поставщика энергии. |
Предусловия | Бухгалтер идентифицирован и аутентифицирован |
Постусловия | Средства выделены, данные записаны в журнале системы |
2.2 Программные классы
Journal_Plist |
FIO_driver: String FIO_cond: String №marsh: Byte data: Byte №Plist: Byte |
Plist (№marsh, data, №Plist, FIO_driver, FIO_cond) |
Journal_Ychet |
data: Byte colvo_t №1: Byte colvo_t №2: Byte №marsh: Byte sum: Byte |
Beginwork_day (data, colvo_t №1, №marsh) Endwork_day (data, colvo_t №1, colvo_t №2, sum, №marsh) |
Journal_ZP |
pribul: Byte sumZP: Byte zp: Byte zp_account: Byte zp_driv: Byte zp_disp: Byte zp_cond: Byte |
Podschet_ZP (pribul, sumZP) Pay_ZP (zp, zp_account, zp_driv, zp_disp, zp_cond) |
Journal_transport register |
data: Byte №marsh: Byte timeA: Byte timeB: Byte |
Begin_marsh (data, №marsh, timeA) End_marsh (data, №marsh, timeB) |
Journal_sh |
№marsh: Byte sum_sh: Byte data: Byte FIO: String |
Shtraff (sum_sh, data, FIO, №marsh) |
Journal_Tax |
pribul: Byte sumTax: Byte data: Byte |
Podschet_Tax (pribul, sumTax) Pay_ZP (sumTax, data) |
Journal_break |
№marsh: Byte data: Byte |
Polomka (data, №marsh) |
Journal_Elect |
data: Byte sum_el: Byte |
El_oplata (data, sum_el) |
System |
FIO_driver: String FIO_cond: String №marsh: Byte data: Byte №Plist: Byte colvo_t №1: Byte colvo_t №2: Byte sum: Byte pribul: Byte sumZP: Byte zp: Byte zp_account: Byte zp_driv: Byte zp_disp: Byte zp_cond: Byte data: Byte timeA: Byte timeB: Byte sum_sh: Byte FIO: String pribul: Byte sumTax: Byte sum_el: Byte time_now: Byte №marsh_old: Byte №marsh_new: Byte sum_pay: Byte all_prible: Byte |
Plist (№marsh, data, №Plist, FIO_driver, FIO_cond), Beginwork_day (data, colvo_t №1, №marsh), Endwork_day (data, colvo_t №1, colvo_t №2, sum, №marsh), Podschet_ZP (pribul, sumZP), Pay_ZP (zp, zp_account, zp_driv, zp_disp, zp_cond), Begin_marsh (data, №marsh, timeA), End_marsh (data, №marsh, timeB), Shtraff (sum_sh, data, FIO, №marsh), Podschet_Tax (pribul, sumTax), Pay_ZP (sumTax, data), Polomka (data, №marsh), El_oplata (data, sum_el), Otsyts_tr (FIO_driver, FIO_cond, data, time_now, №marsh), Zamena (№marsh_old, №marsh_new), Pay_break (sum_pay, data), Salary (all_prible, data) |
3. Описание интерфейса приложения
При входе в систему, она запрашивает пароль. Без него пользователь не сможет иметь доступ к системе.
Далее, пользователь может выбирать необходимое действие, нажав в открывшемся окне – File -> Action.
В результате, получив список, необходимых действий.
Для начала выбираем создание путевого листа (Path List). В необходимых колонках вводим соответствующие данные. После создания обязательно сохраняем в созданном и указанном журнале.
Сделаем проверку журнала, в котором должен был сохраниться наш 1-й путевой лист.
Далее выбираем учет билетов (Uchet). Здесь аналогично вводим необходимые данные. Также сохраняем в журнале.
Проверяем журнал.
Далее выбираем операции с заработной платой и налогом. Введя необходимые данные, сохраняем в журнале.
Проверяем выданное и оставшееся количество билетов.
Начисляем заработную плату.
Проверяем начисление зарплаты.
Выбрав пункт Поломка (Polomka), мы видим следующее окно, в котором вводим необходимые данные.
Проверяем в журнале.
Если необходимо произвести отчет, то нажав на главной панели кнопочку Browse, мы видим следующее окно.
В котором выбрав необходимый нам журнал или файл, видим его в окне на главной панели.
И дополнительная информация об авторе этого замечательного проекта может быть найдена по адресу – About -> Show.
Заключение
В результате выполнения данного курсового проекта было разработано приложение для автоматизации работы службы занятости. Данное приложение позволяет значительно упростить работу сотрудников службы занятости (инспектора и бухгалтера) и сэкономить время посетителей данной организации, которыми являются безработные и работодатели. Программа позволяет оформлять и хранить заявки посетителей, быстро находить вакантные места для безработных и рабочих для работодателей, содержит информацию о курсах переобучения безработных, позволяет начислять пособие безработным, заявки которых сохранены. Предусмотрены разные варианты обращения посетителей. Правила пользования программой описаны в разделе Описание интерфейса.
Список литературы
1. Майкл Дж. Янг Полное руководство по Visual C++ 6. Издательский дом «Ирина», BHV, Киев, 2000 г.-1048 с.
2. Дейтел Х.М., Дейтел П.Дж. Как программировать на С++ (Третье издание). Под издательством ЗАО «Бином», Москва, 2003 г.-1150 с.
3. Крэг Лерман. Применение UML и шаблонов проектирования. М. Издательский дом «Вильямс». 2002.-624 с.
4. Гради Буч. Объектно-ориентированный анализ и проектирование. Бином, СПБ, 2000. -560 с.
5. Орлов С.А. Технология разработки программного обеспечения. СПБ.: Питер, 2002. -464 с.
Приложение
Листинги программных модулей
Add class
#include «add1.h»
#include «path.h»
#include «uch.h»
#include «bre.h»
#include «elec.h»
void add: OnChoose()
{
UpdateData(TRUE);
if (m_radio==0) {
path dlg;
dlg. DoModal();
}
if (m_radio==1) {
uch dlg;
dlg. DoModal();
}
if (m_radio==2) {
add1 dlg;
dlg. DoModal();
}
if (m_radio==3) {
elec dlg;
dlg. DoModal();
}
if (m_radio==4) {
bre dlg;
dlg. DoModal();
}
}
Add1 class
// add1.cpp: implementation file
//
#include «stdafx.h»
#include «MasKurs.h»
#include «add1.h»
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// add1 dialog
add1:add1 (CWnd* pParent /*=NULL*/)
: CDialog (add1:IDD, pParent)
{
// {{AFX_DATA_INIT(add1)
m_date = _T(«»);
m_numberofout = _T(«»);
m_numberofleft = _T(«»);
m_number = _T(«»);
m_profit = 0;
m_zarplata = 0;
m_zarpl = _T(«»);
m_nalog1 = _T(«»);
m_profit1 = 0;
m_nalog = 0;
m_shtraf = _T(«»);
// }} AFX_DATA_INIT
}
void add1: DoDataExchange (CDataExchange* pDX)
{
CDialog: DoDataExchange(pDX);
// {{AFX_DATA_MAP(add1)
DDX_Control (pDX, IDC_COMBO1, m_combo1);
DDX_Text (pDX, IDC_EDIT1, m_date);
DDX_Text (pDX, IDC_EDIT2, m_numberofout);
DDX_Text (pDX, IDC_EDIT3, m_numberofleft);
DDX_Text (pDX, IDC_EDIT11, m_number);
DDX_Text (pDX, IDC_EDIT4, m_profit);
DDX_Text (pDX, IDC_EDIT5, m_zarplata);
DDX_Text (pDX, IDC_EDIT8, m_zarpl);
DDX_Text (pDX, IDC_EDIT9, m_nalog1);
DDX_Text (pDX, IDC_EDIT6, m_profit1);
DDX_Text (pDX, IDC_EDIT7, m_nalog);
DDX_Text (pDX, IDC_EDIT10, m_shtraf);
// }} AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP (add1, CDialog)
// {{AFX_MSG_MAP(add1)
ON_WM_SHOWWINDOW()
ON_BN_CLICKED (IDC_BUTTON5, OnSaveToUchetZarplataNalogi)
ON_BN_CLICKED (IDC_BUTTON1, OnCount1)
ON_BN_CLICKED (IDC_BUTTON2, OnSaveToZarp)
ON_BN_CLICKED (IDC_BUTTON3, OnCount2)
ON_BN_CLICKED (IDC_BUTTON4, OnSaveToNalog)
ON_BN_CLICKED (IDC_BUTTON6, OnSaveToshtraf)
// }} AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// add1 message handlers
CString str0;
void add1: OnShowWindow (BOOL bShow, UINT nStatus)
{
CDialog: OnShowWindow (bShow, nStatus);
UpdateData(TRUE);
// CStdioFile fOpen («d:\\MasKurs\\driver.txt», CFile:modeRead);
CStdioFile fOpen1 («d:\\MasKurs\\konductor.txt», CFile:modeRead);
CString str;
// CString str1;
// while (fOpen. ReadString(str)!=0) {
// m_combo. AddString(str);
// }
while (fOpen1. ReadString(str0)!=0) {
m_combo1. AddString(str0);
}
}
void add1: OnSaveToUchetZarplataNalogi()
{
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\uchetzarplatnalogi.txt», CFile:modeWrite);
CString str;
// int index=m_combo. GetCurSel();
int index1=m_combo1. GetCurSel();
// m_combo. GetLBText (index, str1);
m_combo1. GetLBText (index1, str0);
if (m_date==»» || m_number==»» || m_numberofout==»» || m_numberofleft==»» || str0==»») {
MessageBox («Please fill all fields», «Info», MB_OK);
return;
}
fOpen. SeekToEnd();
// fOpen. WriteString («FIO driver «+str1+»\n»);
fOpen. WriteString («FIO konductor «+str0+»\n»);
fOpen. WriteString («Date «+m_date+»\n»);
fOpen. WriteString («Number of vudanih «+m_numberofout+»\n»);
fOpen. WriteString («Number of ostavshihsa «+m_numberofleft+»\n»);
fOpen. WriteString («Number «+m_number+»\n»);
fOpen. WriteString («*****\n»);
MessageBox («Saved to uchetzarplatnalogi.txt», MB_OK);
}
void add1: OnCount1 ()
{
UpdateData(TRUE);
int result=m_profit*m_zarplata/100;
CString str;
str. Format («%d», result);
GetDlgItem (IDC_EDIT8)->SetWindowText(str);
// UpdateData(FALSE);
}
void add1: OnSaveToZarp()
{
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\zarplata.txt», CFile:modeWrite);
CString str;
// int index=m_combo. GetCurSel();
int index1=m_combo1. GetCurSel();
// m_combo. GetLBText (index, str1);
m_combo1. GetLBText (index1, str0);
if (m_profit==0 || m_zarplata==0 || str0==»») {
MessageBox («Please fill all fields», «Info», MB_OK);
return;
}
fOpen. SeekToEnd();
// fOpen. WriteString («FIO driver «+str1+»\n»);
fOpen. WriteString («FIO konductor «+str0+»\n»);
fOpen. WriteString («Zarplata «+m_zarpl+»\n»);
fOpen. WriteString («*****\n»);
MessageBox («Saved to zarplata.txt», MB_OK);
}
void add1: OnCount2 ()
{
UpdateData(TRUE);
int result=m_profit1*m_nalog/100;
CString str;
str. Format («%d», result);
// GetDlgItem (IDC_EDIT9)->SetWindowText(str);
m_nalog1=str;
UpdateData(FALSE);
}
void add1: OnSaveToNalog()
{
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\nalog.txt», CFile:modeWrite);
CString str;
// int index=m_combo. GetCurSel();
// int index1=m_combo1. GetCurSel();
// m_combo. GetLBText (index, str1);
// m_combo1. GetLBText (index1, str0);
if (m_profit1==0 || m_nalog==0) {
MessageBox («Please fill all fields», «Info», MB_OK);
return;
}
fOpen. SeekToEnd();
str. Format («%d», m_profit1);
// fOpen. WriteString («FIO driver «+str1+»\n»);
fOpen. WriteString («Profit «+str+»\n»);
fOpen. WriteString («Nalog «+m_nalog1+»\n»);
fOpen. WriteString («*****\n»);
MessageBox («Saved to nalog.txt», MB_OK);
}
void add1: OnSaveToshtraf()
{
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\shtraf.txt», CFile:modeWrite);
CString str;
// int index=m_combo. GetCurSel();
int index1=m_combo1. GetCurSel();
// m_combo. GetLBText (index, str1);
m_combo1. GetLBText (index1, str0);
if (m_shtraf==»» || str0==»») {
MessageBox («Please fill all fields», «Info», MB_OK);
return;
}
fOpen. SeekToEnd();
// fOpen. WriteString («FIO driver «+str1+»\n»);
fOpen. WriteString («FIO konductor «+str0+»\n»);
fOpen. WriteString («Shtraf «+m_shtraf+»\n»);
fOpen. WriteString («*****\n»);
MessageBox («Saved to shtraf.txt», MB_OK);
}
Bre class
void bre: OnSaveToBreak()
{
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\bre.txt», CFile:modeWrite);
CString str;
if (m_date==»» || m_number==»») {
MessageBox («Please fill all fields», «Info», MB_OK);
return;
}
fOpen. SeekToEnd();
fOpen. WriteString («Date «+m_date+»\n»);
fOpen. WriteString («Number «+m_number+»\n»);
fOpen. WriteString («*****\n»);
MessageBox («Saved to bre.txt», MB_OK);
}
void bre: OnSaveToZamena()
{
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\zamena.txt», CFile:modeWrite);
CString str;
if (m_date1==»» || m_number1==»» || m_number2==»») {
MessageBox («Please fill all fields», «Info», MB_OK);
return;
}
fOpen. SeekToEnd();
fOpen. WriteString («Number marsh old «+m_number1+»\n»);
fOpen. WriteString («Number marsh new «+m_number2+»\n»);
fOpen. WriteString («Date «+m_date1+»\n»);
fOpen. WriteString («*****\n»);
MessageBox («Saved to zamena.txt», MB_OK);
}
void bre: OnSaveToPay()
{
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\pay.txt», CFile:modeWrite);
CString str;
if (m_date2==»» || m_sum==»») {
MessageBox («Please fill all fields», «Info», MB_OK);
return;
}
fOpen. SeekToEnd();
fOpen. WriteString («Sum «+m_sum+»\n»);
fOpen. WriteString («Date «+m_date2+»\n»);
fOpen. WriteString («*****\n»);
MessageBox («Saved to pay.txt», MB_OK);
}
Elec class
void elec: OnSaveToElectro()
{
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\elec.txt», CFile:modeWrite);
CString str;
// m_combo. GetLBText (index, str1);
// m_combo1. GetLBText (index1, str0);
if (m_ammount==»» || m_sum==»») {
MessageBox («Please fill all fields», «Info», MB_OK);
return;
}
fOpen. SeekToEnd();
// fOpen. WriteString («FIO driver «+str1+»\n»);
fOpen. WriteString («Ammount «+m_ammount+»\n»);
fOpen. WriteString («Number «+m_sum+»\n»);
fOpen. WriteString («*****\n»);
MessageBox («Saved to elec.txt», MB_OK);
}
MasKursDlg class
// MasKursDlg.cpp: implementation file
//
#include «stdafx.h»
#include «MasKurs.h»
#include «MasKursDlg.h»
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg: public CDialog
{
public:
CAboutDlg();
// Dialog Data
// {{AFX_DATA(CAboutDlg)
enum {IDD = IDD_ABOUTBOX};
// }} AFX_DATA
// ClassWizard generated virtual function overrides
// {{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange (CDataExchange* pDX); // DDX/DDV support
// }} AFX_VIRTUAL
// Implementation
protected:
// {{AFX_MSG(CAboutDlg)
// }} AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg:CAboutDlg(): CDialog (CAboutDlg:IDD)
{
// {{AFX_DATA_INIT(CAboutDlg)
// }} AFX_DATA_INIT
}
void CAboutDlg: DoDataExchange (CDataExchange* pDX)
{
CDialog: DoDataExchange(pDX);
// {{AFX_DATA_MAP(CAboutDlg)
// }} AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP (CAboutDlg, CDialog)
// {{AFX_MSG_MAP(CAboutDlg)
// No message handlers
// }} AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMasKursDlg dialog
CMasKursDlg:CMasKursDlg (CWnd* pParent /*=NULL*/)
: CDialog (CMasKursDlg:IDD, pParent)
{
// {{AFX_DATA_INIT(CMasKursDlg)
// NOTE: the ClassWizard will add member initialization here
// }} AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon (IDR_MAINFRAME);
}
void CMasKursDlg: DoDataExchange (CDataExchange* pDX)
{
CDialog: DoDataExchange(pDX);
// {{AFX_DATA_MAP(CMasKursDlg)
DDX_Control (pDX, IDC_LIST1, m_list);
// }} AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP (CMasKursDlg, CDialog)
// {{AFX_MSG_MAP(CMasKursDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND (ID_FILE_ACTION, OnFileAction)
ON_BN_CLICKED (IDC_BUTTON3, OnBrowse)
ON_BN_CLICKED (IDC_BUTTON1, OnButton1)
ON_BN_CLICKED (IDC_BUTTON2, OnButton2)
ON_COMMAND (ID_FILE_EXIT, OnFileExit)
ON_COMMAND (ID_ABOUT_SHOW, OnAboutShow)
// }} AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMasKursDlg message handlers
#include «login.h»
BOOL CMasKursDlg: OnInitDialog()
{
CDialog: OnInitDialog();
// Add «About…» menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT (IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu!= NULL)
{
CString strAboutMenu;
strAboutMenu. LoadString (IDS_ABOUTBOX);
if (! strAboutMenu. IsEmpty())
{
pSysMenu->AppendMenu (MF_SEPARATOR);
pSysMenu->AppendMenu (MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
login dlg;
dlg.m_login= «buhgalter»;
if (dlg. DoModal()==IDOK) {
if (dlg.m_pass== «111» && dlg.m_login== «buhgalter») {
return TRUE;
}
else {
MessageBox («Incorrect!!!»);
EndDialog(0);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon (m_hIcon, TRUE); // Set big icon
SetIcon (m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CMasKursDlg: OnSysCommand (UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout. DoModal();
}
else
{
CDialog: OnSysCommand (nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMasKursDlg: OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage (WM_ICONERASEBKGND, (WPARAM) dc. GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics (SM_CXICON);
int cyIcon = GetSystemMetrics (SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect. Width() – cxIcon + 1) / 2;
int y = (rect. Height() – cyIcon + 1) / 2;
// Draw the icon
dc. DrawIcon (x, y, m_hIcon);
}
else
{
CDialog: OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMasKursDlg: OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
#include «add.h»
void CMasKursDlg: OnFileAction()
{
add dlg;
dlg. DoModal();
}
void CMasKursDlg: OnBrowse()
{
CString str;
CString str1;
CFileDialog OpenFileDialog (true, «txt», NULL, OFN_FILEMUSTEXIST|OFN_HIDEREADONLY, «Text files (*.txt)|*.txt||»);
if (OpenFileDialog. DoModal()==IDOK) {
str=OpenFileDialog. GetPathName();
GetDlgItem (IDC_EDIT1)->SetWindowText(str);
CStdioFile fOpen (str, CFile:modeRead);
while (fOpen. ReadString(str)!=0) {
m_list. AddString(str);
}
}
}
void CMasKursDlg: OnButton1 ()
{
add dlg;
dlg. DoModal();
}
void CMasKursDlg: OnButton2 ()
{
EndDialog(0);
}
void CMasKursDlg: OnFileExit()
{
EndDialog(0);
}
void CMasKursDlg: OnAboutShow()
{
CAboutDlg dlg;
dlg. DoModal();
}
Path class
void path: OnShowWindow (BOOL bShow, UINT nStatus)
{
CDialog: OnShowWindow (bShow, nStatus);
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\driver.txt», CFile:modeRead);
CStdioFile fOpen1 («d:\\MasKurs\\konductor.txt», CFile:modeRead);
CString str;
CString str1;
while (fOpen. ReadString(str)!=0) {
m_combo. AddString(str);
}
while (fOpen1. ReadString(str1)!=0) {
m_combo1. AddString(str1);
}
// fOpen. SeekToEnd();
// fOpen. WriteString (m_date+»\n»);
// fOpen. WriteString (m_number+»\n»);
// fOpen. WriteString (m_marsh+»\n»);
// fOpen. WriteString («*****"+»\n»);
}
CString str1;
CString str2;
void path: OnSaveToPath()
{
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\path.txt», CFile:modeWrite);
CString str;
int index=m_combo. GetCurSel();
int index1=m_combo1. GetCurSel();
if (m_date==»» || m_number==»») {
MessageBox («Please fill all fields», «Info», MB_OK);
return;
}
m_combo. GetLBText (index, str1);
m_combo1. GetLBText (index1, str2);
fOpen. SeekToEnd();
fOpen. WriteString («FIO driver «+str1+»\n»);
fOpen. WriteString («FIO konductor «+str2+»\n»);
fOpen. WriteString («Date «+m_date+»\n»);
fOpen. WriteString («Number «+m_number+»\n»);
fOpen. WriteString («*****\n»);
MessageBox («Saved to path.txt», MB_OK);
}
void path: OnBeginMarshrute()
{
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\marshrutebegin.txt», CFile:modeWrite);
CString str;
if (m_date1==»» || m_number1==»» || m_time==»») {
MessageBox («Please fill all fields», «Info», MB_OK);
return;
}
fOpen. SeekToEnd();
fOpen. WriteString («Date «+m_date1+»\n»);
fOpen. WriteString («Number «+m_number1+»\n»);
fOpen. WriteString («Time «+m_time+»\n»);
fOpen. WriteString («*****\n»);
MessageBox («Saved to marshrutebegin.txt», MB_OK);
}
void path: OnSaveToMarshruteOkonchanie()
{
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\marshruteokonchanie.txt», CFile:modeWrite);
CString str;
if (m_date2=»» || m_number2==»» || m_time1==»») {
MessageBox («Please fill all fields», «Info», MB_OK);
return;
}
fOpen. SeekToEnd();
fOpen. WriteString («Date «+m_date2+»\n»);
fOpen. WriteString («Number «+m_number2+»\n»);
fOpen. WriteString («Time «+m_time1+»\n»);
fOpen. WriteString («*****\n»);
MessageBox («Saved to marshruteokonchanie.txt», MB_OK);
}
Uch class
void uch: OnSaveToUchet()
{
UpdateData(TRUE);
CStdioFile fOpen («d:\\MasKurs\\uchet.txt», CFile:modeWrite);
CString str;
fOpen. SeekToEnd();
fOpen. WriteString («Date «+m_date+»\n»);
fOpen. WriteString («Number of tickets «+m_number+»\n»);
fOpen. WriteString («Nomer «+m_marsh+»\n»);
fOpen. WriteString («*****\n»);
MessageBox («Saved to uchet.txt», MB_OK);
}