- •Пояснительная записка
- •Содержание
- •Введение
- •1 Постановка задачи
- •2 Выбор решения
- •2.1 Определение необходимых модулей программы
- •2.1 Определение структуры файла базы данных
- •3 Описание разработки программы
- •4 Отладка и тестирование
- •5 Описание программы
- •5.1 Разработка приложения Organizer.Exe
- •5.2 Разработка меню
- •6 Руководство пользователя
- •Заключение
- •Список используемых источников
- •Приложение а Листинг программы
Заключение
При выполнении данной курсовой работы были получены навыки разработки многомодульных программ. Были освоены приемы создания псевдографического интерфейса, изучены функции работы с консолью, способы обработки событий от клавиатуры и мыши. Усвоены механизмы реализации меню. Изучены функции работы с файлом. Получены базовые навыки программирования на языке С и Ассемблер. Изучены основные возможности среды программирования Visual Studio 2005. Получены навыки отладки и тестирования программ.
В рамках выполнения курсовой работы была написана программа необходимая для ведения базы данных контактов и событий. Программа предоставляет небольшой, но достаточный список возможностей. Не требует большого количества системных ресурсов и обеспечивает быструю обработку базы данных.
Не удалось реализовать панель инструментов, т.к. псевдографический интерфейс накладывает ограничения на интерфейс программы.
В дальнейшем программу можно улучшить, добавив в интерфейс горячие клавиши на каждый пункт меню. Улучшить навигацию по базе данных путем добавления постраничного перемещения и сортировки. Добавить вывод сообщений об ошибках и подсказок при неверных действиях пользователя. Оптимизировать код для более быстрого выполнения операций чтения и записи базы данных.
Список используемых источников
1. Керниган Б. Ритчи Д. Язык программирования С. 1985 г.
2. MSDN.
3. К. Джамса. Учимся программировать на языке С++. 1997 г.
4. В. Г. Давыдов. Программирование и основы алгоритмизации. 2003 г.
Приложение а Листинг программы
Приложение А.1 – Файл «Kurs.h»
#define _CRT_NONSTDC_NO_WARNINGS
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include "../Barfic/Barfic.h"
struct contacts
{
wchar_t* surname; // фамилия
wchar_t* name; // имя
wchar_t* grandname; // отчество
wchar_t* addr; // адрес проживания
wchar_t* email; // мыло
wchar_t* icq; // ась
contacts* prev;
contacts* next; // указатель на следующший элемент
struct Contdate
{
unsigned short day;
unsigned short month;
unsigned short year;
} birthdate; // дата рождения
};
struct events
{
wchar_t* event_type; // тип события
SYSTEMTIME event_date; // дата события
bool completed; // флаг выполненное (чтобы при запуске о выполненных не напоминалось)
wchar_t* event_text;
events* prev;
events* next;
};
void ClearConsole(void);
void MainMenu(void);
void Splash(void);
contacts* ContactsMenu(contacts* head);
contacts* ContactsMenuGraph(contacts* head,contacts* current);
contacts* AddContact (contacts* head);
contacts* EditContact(contacts* head,contacts* current);
void SaveDbContacts (contacts* head);
contacts* ReadDbContacts (void);
contacts* NewContact(wchar_t* Fam, wchar_t* Nam, wchar_t* Otch, wchar_t* Date, wchar_t* Addr, wchar_t* Mail, wchar_t* ICQ);
contacts* AddNewContact(contacts* head,contacts* newcontact);
contacts* FindContact(contacts*head);
contacts* SortDb (contacts* head);
events* EventsMenu(events* head);
events* EventsMenuGraph(events* head,events* current);
events* AddEvent (events* head);
events* EditEvent(events* head,events* current);
void SaveDbEvents (events* head);
events* ReadDbEvents (void);
events* NewEvent(wchar_t* Type, wchar_t* Date, wchar_t* Text, wchar_t* Comp);
events* AddNewEvent(events* head,events* newevent);
events* FindEvent(events* head);
events* SortDb (events* head);
void Reminder (contacts* head, events* evhead);
Приложение А.2 – Файл «Main.cpp»
#include "Kurs.h"
#include <locale>
void main(void)
{
setlocale (LC_CTYPE, ".866");
SetConsoleTitleW(L"Органайзер");
contacts* head=NULL;
events* evhead=NULL;
BOOL fResult;
// Инициализация работы с консолью
fResult = ConsoleInitialize();
if (fResult == FALSE)
{
return;
}
// Изменение размера экрана
fResult = ConsoleSetScreeSize(80, 25);
if (fResult == FALSE)
{
return;
}
// Скрытие курсора
fResult = SetCursorVisible(FALSE);
if (fResult == FALSE)
{
return;
}
Splash();
evhead=ReadDbEvents();
head=ReadDbContacts();
Reminder(head,evhead);
INPUT_RECORD vRecord;
MainMenu();
while (1)
{
if (InputRecordRead(vRecord))
{
// Дешифрация типа события
if (vRecord.Event.MouseEvent.dwButtonState & 0x01)
{
unsigned MouseXPos = vRecord.Event.MouseEvent.dwMousePosition.X;
unsigned MouseYPos = vRecord.Event.MouseEvent.dwMousePosition.Y;
if (
(MouseXPos >= 4)
&&
(MouseXPos < 24)
&&
(MouseYPos >= 2)
&&
(MouseYPos < 5)
)
{
head=ContactsMenu(head);
}
if (
(MouseXPos >= 31)
&&
(MouseXPos < 52)
&&
(MouseYPos >= 2)
&&
(MouseYPos < 5)
)
{
evhead=EventsMenu(evhead);
}
if (
(MouseXPos >= 57)
&&
(MouseXPos < 77)
&&
(MouseYPos >= 2)
&&
(MouseYPos < 5)
)
{
break;
}
Sleep(20);
}
}
}
ClearConsole ();
}
Приложение А.3 – Файл «Graphics.cpp»
#include "Kurs.h"
#define CNT_HDR1 L"\x2554\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2566\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2566\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2566\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2566\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2566\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2566\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2557"
#define CNT_HDR2 L"\x2551\
Фамилия \
\x2551\
Имя \
\x2551\
Отчество \
\x2551\
Дата рожд.\
\x2551\
Дом.адрес \
\x2551\
Е-mail \
\x2551\
ICQ-номер \
\x2551"
#define CNT_HDR3 L"\x2560\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x256c\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x256c\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x256c\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x256c\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x256c\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x256c\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2563"
#define CNT_HDR4 L"\x255a\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2569\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2569\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2569\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2569\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2569\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2569\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x255d"
#define CNT_SEP L"\x2551 \x2551 \x2551 \x2551 \x2551 \x2551 \x2551 \x2551"
#define EV_SEP L"\x2551 \x2551 \x2551 \x2551 \x2551 \x2551"
#define EV_HDR1 L"\x2554\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2566\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2566\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2566\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2566\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2557"
#define EV_HDR2 L"\x2551\
Тип заметки \
\x2551\
Время \
\x2551\
Дата \
\x2551\
Текст заметки \
\x2551\
Выполнено \
\x2551"
#define EV_HDR3 L"\x2560\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x256c\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x256c\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x256c\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x256c\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2563"
#define EV_HDR4 L"\x255a\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2569\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2569\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2569\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x2569\
\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\x2550\
\x255d"
void ClearConsole(void)
{
CHAR_INFO vPoint;
SetCharInfo(&vPoint, L' ', ColorBrightWhite, ColorBlue);
DrawRectangle(&vPoint, 0, 0, 80, 25);
}
void MainMenu(void)
{
CHAR_INFO vPoint;
SetCharInfo(&vPoint, L' ', ColorBrightWhite, ColorBlue);
DrawRectangle(&vPoint, 0, 0, 80, 25);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 4, 2, 20, 4, L"Контакты");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 31, 2, 20, 4, L"События");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 57, 2, 20, 4, L"Выход");
}
void Splash(void)
{
CHAR_INFO pcharInfoSplash;
EColor colorB = ColorBlack;
EColor colorF = ColorBrightWhite;
// рисуем заставку
int textcolor = 0;
int x=0,y=0,dx=80,dy=25;
bool iter = true;
while(1)
{
SetCharInfo(&pcharInfoSplash, L' ',colorB, colorF );
// ожидание клавиши
DrawSingleLineText(colorF,colorB, 12,12,55,1, L"<<<Органайзер>>>, Выполнил Бохан П.В., 10ВВ2, АЯиП", TopCenter ); //
if(kbhit())
{
getch();
break;
}
DrawRectangle(&pcharInfoSplash,x,y,1,dx);
DrawRectangle(&pcharInfoSplash,x,dy-1,dx,1);
DrawRectangle(&pcharInfoSplash,dx-1,y,1,dx);
DrawRectangle(&pcharInfoSplash,x,y,dx,1);
Sleep(30);
x++;
y++;
dx--;
dy--;
if(x==13)
{
x=0;
y=0;
dx=80;
dy=25;
if(iter)
{
colorB = ColorBrightWhite;
colorF = ColorBlack;
}
else
{
colorB = ColorBlack;
colorF = ColorBrightWhite;
}
iter = !iter;
}
}
ClearConsole();
}
contacts* ContactsMenu(contacts* head)
{
contacts* current=head;
ContactsMenuGraph(head,current);
INPUT_RECORD vRecord;
while (1)
{
if (InputRecordRead(vRecord))
{
// Дешифрация типа события
if (vRecord.Event.KeyEvent.bKeyDown == 0x01)
{
if(vRecord.Event.KeyEvent.wVirtualKeyCode == 0x028)
{
if((current)&&(current->next))
{
current=current->next;
ContactsMenuGraph(head,current);
}
}
if(vRecord.Event.KeyEvent.wVirtualKeyCode == 0x026)
{
if ((current)&&(current->prev))
{
current=current->prev;
ContactsMenuGraph(head,current);
}
}
}
if (vRecord.Event.MouseEvent.dwButtonState == 0x01)
{
unsigned MouseXPos = vRecord.Event.MouseEvent.dwMousePosition.X;
unsigned MouseYPos = vRecord.Event.MouseEvent.dwMousePosition.Y;
if (
(MouseXPos >= 1)
&&
(MouseXPos < 17)
&&
(MouseYPos >= 21)
&&
(MouseYPos < 25)
)
{
head=AddContact(head);
current=head;
head=SortDb(head);
}
if (
(MouseXPos >= 20)
&&
(MouseXPos < 42)
&&
(MouseYPos >= 21)
&&
(MouseYPos < 25)
)
{
if (current!=NULL)
{
head=EditContact(head,current);
head=SortDb(head);
}
else
{
}
current=head;
}
if (
(MouseXPos >= 45)
&&
(MouseXPos < 61)
&&
(MouseYPos >= 21)
&&
(MouseYPos < 25)
)
{
current=FindContact(head);
}
if (
(MouseXPos >= 64)
&&
(MouseXPos < 80)
&&
(MouseYPos >= 21)
&&
(MouseYPos < 25)
)
{
break;
}
Sleep(20);
}
}
}
EMessageBoxId eId =
DialogMessageBox(ColorBrightWhite, ColorGrey,21, 8, 38, 7, ColorYellow, ColorGrey, L"Соранить изменения?",TopLeft,MessageBoxYesNo);
if (eId==MessageBoxIdYes)
{
SaveDbContacts(head);
}
MainMenu();
return head;
}
contacts* ContactsMenuGraph(contacts* head,contacts* current)
{
wchar_t Date[15];
contacts* tmp=head;
int x,y,dx,dy;
//ClearConsole();
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,1,80,1,CNT_HDR1,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,2,80,1,CNT_HDR2,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,3,80,1,CNT_HDR3,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,4,80,1,CNT_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,5,80,1,CNT_HDR3,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,6,80,1,CNT_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,7,80,1,CNT_HDR3,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,8,80,1,CNT_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,9,80,1,CNT_HDR3,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,10,80,1,CNT_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,11,80,1,CNT_HDR3,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,12,80,1,CNT_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,13,80,1,CNT_HDR3,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,14,80,1,CNT_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,15,80,1,CNT_HDR3,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,16,80,1,CNT_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,17,80,1,CNT_HDR3,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,18,80,1,CNT_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,19,80,1,CNT_HDR4,TopCenter);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 1, 21, 16, 4, L"Добавить");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 20, 21, 22, 4, L"Подробнее/Изменить");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 45, 21, 16, 4, L"Найти");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 64, 21, 16, 4, L"Назад");
x=1;
y=4;
dx=12;
dy=2;
int k=0;
while (head!=current)
{
head=head->next;
k=k+1;
}
if (k>=8)
{
tmp=head;
}
k=0;
if (tmp)
{
while (tmp)
{
if (tmp==current)
{
DrawSingleLineText(ColorBrightWhite,ColorRed,x ,y,11,1,tmp->surname,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorRed,x+12,y,11,1,tmp->name,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorRed,x+24,y,10,1,tmp->grandname,TopLeft);
swprintf(Date,L"%02u\.%02u\.%u",tmp->birthdate.day, tmp->birthdate.month ,tmp->birthdate.year);
DrawSingleLineText(ColorBrightWhite,ColorRed,x+35,y,10,1,Date,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorRed,x+46,y,10,1,tmp->addr,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorRed,x+57,y,10,1,tmp->email,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorRed,x+68,y,10,1,tmp->icq,TopLeft);
}
else
{
DrawSingleLineText(ColorBrightWhite,ColorBlue,x ,y,11,1,tmp->surname,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,x+12,y,11,1,tmp->name,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,x+24,y,10,1,tmp->grandname,TopLeft);
swprintf(Date,L"%02u\.%02u\.%u",tmp->birthdate.day, tmp->birthdate.month ,tmp->birthdate.year);
DrawSingleLineText(ColorBrightWhite,ColorBlue,x+35,y,10,1,Date,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,x+46,y,10,1,tmp->addr,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,x+57,y,10,1,tmp->email,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,x+68,y,10,1,tmp->icq,TopLeft);
}
y=y+dy;
k=k+1;
if (k==8)
{
break;
}
tmp=tmp->next;
}
}
return current;
}
contacts* AddContact(contacts* head)
{
DrawWindow(ColorBrightWhite, ColorGreen, 12, 1, 54, 19);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 3, 20, 1, L"Имя:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 5, 20, 1, L"Фамилия:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 7, 20, 1, L"Отчество:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 9, 20, 1, L"Дата Рождения:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 11, 20, 1, L"Адрес Проживания:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 13, 20, 1, L"E-mail:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 15, 20, 1, L"ICQ:", TopRight);
DrawButton(ColorBrightWhite, ColorBlue, ColorGreen, 38, 17, 11, 2, L"Добавить");
DrawButton(ColorBrightWhite, ColorBlue, ColorGreen, 50, 17, 11, 2, L"Отмена");
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 3, 28, 1, L"Имя", TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 5, 28, 1, L"Фамилия", TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 7, 28, 1, L"Отчество", TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 9, 28, 1, L"дд.мм.гггг", TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 11, 28, 1, L"Адрес Проживания", TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 13, 28, 1, L"E-mail", TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 15, 28, 1, L"ICQ", TopLeft);
INPUT_RECORD vRecord;
contacts* new_el=NULL; // указатель на новый элемент списка
size_t len; // для данных элемента
wchar_t Nam[100] = L" ";
wchar_t Fam[100] = L" ";
wchar_t Otch[100]= L" ";
wchar_t Date[100]= L"1";
SYSTEMTIME date;
GetLocalTime(&date);
swprintf(Date,L"%02u\.%02u\.%u",date.wDay, date.wMonth,date.wYear);
wchar_t Addr[100]= L" ";
wchar_t Mail[100]= L" ";
wchar_t ICQ[100]= L" ";
while (1)
{
if (InputRecordRead(vRecord))
{
// Дешифрация типа события
if (vRecord.Event.MouseEvent.dwButtonState & 0x01)
{
unsigned MouseXPos = vRecord.Event.MouseEvent.dwMousePosition.X;
unsigned MouseYPos = vRecord.Event.MouseEvent.dwMousePosition.Y;
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63 )
&&
(MouseYPos >= 3)
&&
(MouseYPos < 4)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 3, 28, 1 ,Nam, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 5)
&&
(MouseYPos < 6)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 5, 28, 1 ,Fam, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 7)
&&
(MouseYPos < 8)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 7, 28, 1 ,Otch, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 9)
&&
(MouseYPos < 10)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 9, 28, 1 ,Date, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 11)
&&
(MouseYPos < 12)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 11, 28, 1 ,Addr, 102);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 13)
&&
(MouseYPos < 14)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 13, 28, 1 ,Mail, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 15)
&&
(MouseYPos < 16)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 15, 28, 1 ,ICQ, 100);
}
if (
(MouseXPos >= 38)
&&
(MouseXPos < 49)
&&
(MouseYPos >= 17)
&&
(MouseYPos < 19)
)
{
new_el=NewContact(Fam,Nam,Otch,Date,Addr,Mail,ICQ);
// Добавление записи в список
head=AddNewContact(head,new_el);
break;
}
if (
(MouseXPos >= 50)
&&
(MouseXPos < 61)
&&
(MouseYPos >= 17)
&&
(MouseYPos < 19)
)
{
break;
}
Sleep(20);
}
}
}
ContactsMenuGraph(head,head);
return head;
}
contacts* EditContact(contacts* head,contacts* current)
{
wchar_t Nam[100] = L" ";
wcscpy(Nam,current->name);
wchar_t Fam[100] = L" ";
wcscpy(Fam,current->surname);
wchar_t Otch[100]= L" ";
wcscpy(Otch,current->grandname);
wchar_t Date[100]= L" ";
swprintf(Date,L"%02u\.%02u\.%u",current->birthdate.day, current->birthdate.month ,current->birthdate.year);
wchar_t Addr[100]= L" ";
wcscpy(Addr,current->addr);
wchar_t Mail[100]= L" ";
wcscpy(Mail,current->email);
wchar_t ICQ[100]= L" ";
wcscpy(ICQ,current->icq);
DrawWindow(ColorBrightWhite, ColorGreen, 12, 1, 54, 19);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 3, 20, 1,L"Имя" , TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 5, 20, 1, L"Фамилия", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 7, 20, 1,L"Отчество" , TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 9, 20, 1, L"Дата Рождения:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 11, 20, 1,L"Адрес Проживания", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 13, 20, 1,L"E-mail" , TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 15, 20, 1,L"ICQ" , TopRight);
DrawButton(ColorBrightWhite, ColorBlue, ColorGreen, 14, 17, 11, 2, L"Удалить");
DrawButton(ColorBrightWhite, ColorBlue, ColorGreen, 38, 17, 12, 2, L"Сохранить");
DrawButton(ColorBrightWhite, ColorBlue, ColorGreen, 50, 17, 11, 2, L"Отмена");
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 3, 28, 1,Nam, TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 5, 28, 1,Fam, TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 7, 28, 1,Otch, TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 9, 28, 1,Date, TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 11, 28, 1,Addr, TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 13, 28, 1,Mail, TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 15, 28, 1,ICQ, TopLeft);
//графика/
INPUT_RECORD vRecord;
while (1)
{
if (InputRecordRead(vRecord))
{
// Дешифрация типа события
if (vRecord.Event.MouseEvent.dwButtonState & 0x01)
{
unsigned MouseXPos = vRecord.Event.MouseEvent.dwMousePosition.X;
unsigned MouseYPos = vRecord.Event.MouseEvent.dwMousePosition.Y;
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63 )
&&
(MouseYPos >= 3)
&&
(MouseYPos < 4)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 3, 28, 1 ,Nam, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 5)
&&
(MouseYPos < 6)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 5, 28, 1 ,Fam, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 7)
&&
(MouseYPos < 8)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 7, 28, 1 ,Otch, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 9)
&&
(MouseYPos < 10)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 9, 28, 1 ,Date, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 11)
&&
(MouseYPos < 12)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 11, 28, 1 ,Addr, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 13)
&&
(MouseYPos < 14)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 13, 28, 1 ,Mail, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 15)
&&
(MouseYPos < 16)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 15, 28, 1 ,ICQ, 100);
}
if (//Сохранение
(MouseXPos >= 38)
&&
(MouseXPos < 49)
&&
(MouseYPos >= 17)
&&
(MouseYPos < 29)
)
{
delete [] current->surname;
delete [] current->name;
delete [] current->grandname;
//
delete [] current->addr;
delete [] current->email;
delete [] current->icq;
wchar_t* new_inf=NULL;
int len=0;
len=wcslen(Nam);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Nam);
current->name=new_inf;
// Фамилия
len=wcslen(Fam);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Fam);
current->surname=new_inf;
// Отчество
len=wcslen(Otch);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Otch);
current->grandname=new_inf;
// дата
swscanf(wcstok(Date,L" ,."),L"%u", &(current->birthdate.day));
swscanf(wcstok(NULL,L" ,."),L"%u", &(current->birthdate.month));
swscanf(wcstok(NULL,L" ,."),L"%u", &(current->birthdate.year));
len=wcslen(Addr);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Addr);
current->addr=new_inf;
// Почта
len=wcslen(Mail);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Mail);
current->email=new_inf;
// ICQ
len=wcslen(ICQ);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,ICQ);
current->icq=new_inf;
break;
}
if (//отмена
(MouseXPos >= 50)
&&
(MouseXPos < 61)
&&
(MouseYPos >= 17)
&&
(MouseYPos < 19)
)
{
break;
}
if (
(MouseXPos >= 14)
&&
(MouseXPos < 25)
&&
(MouseYPos >= 17)
&&
(MouseYPos < 19)
)
{
delete [] current->surname;
delete [] current->name;
delete [] current->grandname;
//
delete [] current->addr;
delete [] current->email;
delete [] current->icq;
if (current==head)
{
if (current->next==NULL)
{
head=NULL;
}
else
{
current->next->prev=NULL;
head=current->next;
}
}
else if (current->next==NULL)
{
current->prev->next=NULL;
}
else
{
current->next->prev=current->prev;
current->prev->next=current->next;
}
delete [] current;
current=head;
break;
}
Sleep(20);
}
}
}
current=head;
ContactsMenuGraph(head,current);
return head;
}
//
events* EventsMenu(events* head)
{
events* current=head;
EventsMenuGraph(head,current);
INPUT_RECORD vRecord;
while (1)
{
if (InputRecordRead(vRecord))
{
// Дешифрация типа события
if (vRecord.Event.KeyEvent.bKeyDown == 0x01)
{
if(vRecord.Event.KeyEvent.wVirtualKeyCode == 0x028)
{
if((current)&&(current->next))
{
current=current->next;
EventsMenuGraph(head,current);
}
}
if(vRecord.Event.KeyEvent.wVirtualKeyCode == 0x026)
{
if ((current)&&(current->prev))
{
current=current->prev;
EventsMenuGraph(head,current);
}
}
}
if (vRecord.Event.MouseEvent.dwButtonState == 0x01)
{
unsigned MouseXPos = vRecord.Event.MouseEvent.dwMousePosition.X;
unsigned MouseYPos = vRecord.Event.MouseEvent.dwMousePosition.Y;
if (
(MouseXPos >= 1)
&&
(MouseXPos < 17)
&&
(MouseYPos >= 21)
&&
(MouseYPos < 25)
)
{
head=AddEvent(head);
current=head;
head=SortDb(head);
}
if (
(MouseXPos >= 20)
&&
(MouseXPos < 42)
&&
(MouseYPos >= 21)
&&
(MouseYPos < 25)
)
{
if (current!=NULL)
{
head=EditEvent(head,current);
head=SortDb(head);
}
else
{
}
current=head;
}
if (
(MouseXPos >= 45)
&&
(MouseXPos < 61)
&&
(MouseYPos >= 21)
&&
(MouseYPos < 25)
)
{
current=FindEvent(head);
}
if (
(MouseXPos >= 64)
&&
(MouseXPos < 80)
&&
(MouseYPos >= 21)
&&
(MouseYPos < 25)
)
{
break;
}
Sleep(20);
}
}
}
EMessageBoxId eId =
DialogMessageBox(ColorBrightWhite, ColorGrey,21, 8, 38, 7, ColorYellow, ColorGrey, L"Соранить изменения?",TopLeft,MessageBoxYesNo);
if (eId==MessageBoxIdYes)
{
SaveDbEvents(head);
}
MainMenu();
return head;
}
events* EventsMenuGraph(events* head,events* current)
{
wchar_t Date[10];
wchar_t Time[10];
events* tmp=head;
int x,y,dx,dy;
//ClearConsole();
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,1,80,1,EV_HDR1,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,2,80,1,EV_HDR2,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,3,80,1,EV_HDR3,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,4,80,1,EV_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,5,80,1,EV_HDR3,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,6,80,1,EV_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,7,80,1,EV_HDR3,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,8,80,1,EV_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,9,80,1,EV_HDR3,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,10,80,1,EV_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,11,80,1,EV_HDR3,TopLeft);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,12,80,1,EV_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,13,80,1,EV_HDR3,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,14,80,1,EV_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,15,80,1,EV_HDR3,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,16,80,1,EV_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,17,80,1,EV_HDR3,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,18,80,1,EV_SEP,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,0,19,80,1,EV_HDR4,TopCenter);
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 1, 21, 16, 4, L"Добавить");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 20, 21, 22, 4, L"Подробнее/Изменить");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 45, 21, 16, 4, L"Найти");
DrawButton(ColorBrightWhite, ColorGreen, ColorBlue, 64, 21, 16, 4, L"Назад");
x=1;
y=4;
dx=12;
dy=2;
int k=0;
while (head!=current)
{
head=head->next;
k=k+1;
}
if (k>=8)
{
tmp=head;
}
k=0;
if (tmp)
{
while (tmp)
{
if (tmp==current)
{
DrawSingleLineText(ColorBrightWhite,ColorRed,x ,y,12,1,tmp->event_type,TopLeft);
swprintf(Date,L"%02u\.%02u", tmp->event_date.wDay,tmp->event_date.wMonth);
swprintf(Time,L"%02u\:%02u", tmp->event_date.wHour ,tmp->event_date.wMinute);
DrawSingleLineText(ColorBrightWhite,ColorRed,x+13,y,10,1,Time,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorRed,x+24,y,10,1,Date,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorRed,x+35,y,30,1,tmp->event_text,TopLeft);
if (tmp->completed==false)
{
DrawSingleLineText(ColorBrightWhite,ColorRed,x+66,y,11,1,L"нет",TopCenter);
}
else
{
DrawSingleLineText(ColorBrightWhite,ColorRed,x+66,y,11,1,L"да",TopCenter);
}
}
else
{
DrawSingleLineText(ColorBrightWhite,ColorBlue,x ,y,12,1,tmp->event_type,TopLeft);
swprintf(Date,L"%02u\.%02u", tmp->event_date.wDay,tmp->event_date.wMonth);
swprintf(Time,L"%02u\:%02u", tmp->event_date.wHour ,tmp->event_date.wMinute);
DrawSingleLineText(ColorBrightWhite,ColorBlue,x+13,y,10,1,Time,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,x+24,y,10,1,Date,TopCenter);
DrawSingleLineText(ColorBrightWhite,ColorBlue,x+35,y,30,1,tmp->event_text,TopLeft);
if (tmp->completed==false)
{
DrawSingleLineText(ColorBrightWhite,ColorBlue,x+66,y,11,1,L"нет",TopCenter);
}
else
{
DrawSingleLineText(ColorBrightWhite,ColorBlue,x+66,y,11,1,L"да",TopCenter);
}
}
y=y+dy;
k=k+1;
if (k==8)
{
break;
}
tmp=tmp->next;
}
}
return current;
}
events* AddEvent(events* head)
{
DrawWindow(ColorBrightWhite, ColorGreen, 12, 1, 54, 19);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 3, 20, 1, L"Тип события:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 5, 20, 1, L"Время:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 7, 20, 1, L"Текст:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 15, 20, 1, L"Выполнено:", TopRight);
DrawButton(ColorBrightWhite, ColorBlue, ColorGreen, 38, 17, 11, 2, L"Добавить");
DrawButton(ColorBrightWhite, ColorBlue, ColorGreen, 50, 17, 11, 2, L"Отмена");
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 3, 28, 1, L"Тип", TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 5, 28, 1, L"дд.мм чч:мм", TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 7, 28, 8, L"Текст", TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 15, 28, 1, L"нет", TopLeft);
INPUT_RECORD vRecord;
events* new_el=NULL; // указатель на новый элемент списка
size_t len; // для данных элемента
wchar_t Type[100] = L" ";
wchar_t Date[100] = L" ";
SYSTEMTIME date;
GetLocalTime(&date);
swprintf(Date,L"%02u\.%02u %02u:%02u",date.wDay, date.wMonth,date.wHour,date.wMinute);
wchar_t Text[100]= L" ";
wchar_t Comp[100]= L"нет";
while (1)
{
if (InputRecordRead(vRecord))
{
// Дешифрация типа события
if (vRecord.Event.MouseEvent.dwButtonState & 0x01)
{
unsigned MouseXPos = vRecord.Event.MouseEvent.dwMousePosition.X;
unsigned MouseYPos = vRecord.Event.MouseEvent.dwMousePosition.Y;
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63 )
&&
(MouseYPos >= 3)
&&
(MouseYPos < 4)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 3, 28, 1 ,Type, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 5)
&&
(MouseYPos < 6)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 5, 28, 1 ,Date, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 7)
&&
(MouseYPos < 14)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 7, 28, 1 ,Text, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 15)
&&
(MouseYPos < 16)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 15, 28, 1 ,Comp, 100);
}
if (
(MouseXPos >= 38)
&&
(MouseXPos < 49)
&&
(MouseYPos >= 17)
&&
(MouseYPos < 19)
)
{
new_el=NewEvent(Type,Date,Text,Comp);
// Добавление записи в список
head=AddNewEvent(head,new_el);
break;
}
if (
(MouseXPos >= 50)
&&
(MouseXPos < 61)
&&
(MouseYPos >= 17)
&&
(MouseYPos < 19)
)
{
break;
}
Sleep(20);
}
}
}
EventsMenuGraph(head,head);
return head;
}
events* EditEvent(events* head,events* current)
{
wchar_t Type[100] = L" ";
wcscpy(Type,current ->event_type);
wchar_t Text[100] = L" ";
wcscpy(Text,current->event_text);
wchar_t Date[30] = L"1";
swprintf(Date,L"%02u\.%02u %02u:%02u",current->event_date.wDay,current->event_date.wMonth,current->event_date.wHour,current->event_date.wMinute);
wchar_t Comp[100]= L"нет";
if (current->completed==true)
{
swprintf(Comp,L"да");
}
DrawWindow(ColorBrightWhite, ColorGreen, 12, 1, 54, 19);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 3, 20, 1, L"Тип события:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 5, 20, 1, L"Время:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 7, 20, 1, L"Текст:", TopRight);
DrawSingleLineText(ColorBrightWhite, ColorGreen, 13, 15, 20, 1, L"Выполнено:", TopRight);
DrawButton(ColorBrightWhite, ColorBlue, ColorGreen, 14, 17, 11, 2, L"Удалить");
DrawButton(ColorBrightWhite, ColorBlue, ColorGreen, 38, 17, 12, 2, L"Сохранить");
DrawButton(ColorBrightWhite, ColorBlue, ColorGreen, 50, 17, 11, 2, L"Отмена");
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 3, 28, 1, Type, TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 5, 28, 1, Date, TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 7, 28, 8, Text, TopLeft);
DrawSingleLineText(ColorBrightWhite, ColorBlue, 34, 15, 28, 1, Comp, TopLeft);
//графика/
INPUT_RECORD vRecord;
while (1)
{
if (InputRecordRead(vRecord))
{
// Дешифрация типа события
if (vRecord.Event.MouseEvent.dwButtonState & 0x01)
{
unsigned MouseXPos = vRecord.Event.MouseEvent.dwMousePosition.X;
unsigned MouseYPos = vRecord.Event.MouseEvent.dwMousePosition.Y;
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63 )
&&
(MouseYPos >= 3)
&&
(MouseYPos < 4)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 3, 28, 1 ,Type, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 5)
&&
(MouseYPos < 6)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 5, 28, 1 ,Date, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 7)
&&
(MouseYPos < 14)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 7, 28, 1 ,Text, 100);
}
if (
(MouseXPos >= 34)
&&
(MouseXPos < 63)
&&
(MouseYPos >= 15)
&&
(MouseYPos < 16)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,34, 15, 28, 1 ,Comp, 100);
}
if (//Сохранение
(MouseXPos >= 38)
&&
(MouseXPos < 49)
&&
(MouseYPos >= 17)
&&
(MouseYPos < 29)
)
{
delete [] current->event_text;
delete [] current->event_type;
wchar_t* new_inf=NULL;
int len=0;
len=wcslen(Type);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Type);
current->event_type=new_inf;
// текст
len=wcslen(Text);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Text);
current->event_text=new_inf;
// дата
swscanf(wcstok(Date,L" .:"),L"%u", &(current->event_date.wDay));
swscanf(wcstok(NULL,L" .:"),L"%u", &(current->event_date.wMonth));
swscanf(wcstok(NULL,L" .:"),L"%u", &(current->event_date.wHour));
swscanf(wcstok(NULL,L" .:"),L"%u", &(current->event_date.wMinute));
//Выполнено
if (wcsstr(L"нет",Comp))
{
current->completed=0;
}
else
{
current->completed=1;
}
break;
}
if (//отмена
(MouseXPos >= 50)
&&
(MouseXPos < 61)
&&
(MouseYPos >= 17)
&&
(MouseYPos < 19)
)
{
break;
}
if (
(MouseXPos >= 14)
&&
(MouseXPos < 25)
&&
(MouseYPos >= 17)
&&
(MouseYPos < 19)
)
{
delete [] current->event_text;
delete [] current->event_type;
if (current==head)
{
if (current->next==NULL)
{
head=NULL;
}
else
{
current->next->prev=NULL;
head=current->next;
}
}
else if (current->next==NULL)
{
current->prev->next=NULL;
}
else
{
current->next->prev=current->prev;
current->prev->next=current->next;
}
delete [] current;
current=head;
break;
}
Sleep(20);
}
}
}
current=head;
EventsMenuGraph(head,current);
return head;}
Приложение А.4 – Файл «Database.cpp»
#include "Kurs.h"
void SaveDbContacts (contacts* head)
{
FILE *cnt = fopen ("Contacts.db", "w");
if (cnt==NULL)
{
DrawSingleLineText(ColorBrightWhite, ColorRed, 5, 14, 60, 3,L"Не удалось открыть файл!",MiddleCenter);
}
else
{
if (head)
{
while(head)
{
fwprintf(cnt, L"%ws|%ws|%ws|%ws|%ws|%ws|%u\.%u\.%u\n",head->surname,head->name,head->grandname,head->addr,head->email,head->icq,head->birthdate.day,head->birthdate.month,head->birthdate.year);
head=head->next;
}
}
else
{
fwprintf(cnt, L"");
}
fclose (cnt);
}
}
contacts* ReadDbContacts (void)
{
FILE* cnt = fopen ("Contacts.db", "r");
if (cnt==NULL)
{
return NULL;
}
wchar_t tmpstr[650];
fgetws(tmpstr,2,cnt);
if (cnt->_cnt=='\0')
{
return NULL;
}
fclose(cnt);
cnt = fopen ("Contacts.db", "r");
if (cnt==NULL)
{
return NULL;
}
contacts* head=NULL;
while (feof(cnt)==0)
{
fgetws(tmpstr,650,cnt);
wchar_t Nam[100] = L" ";
wchar_t Fam[100] = L" ";
wchar_t Otch[100]= L" ";
wchar_t Date[15]= L" ";
wchar_t Addr[100]= L" ";
wchar_t Mail[100]= L" ";
wchar_t ICQ[100]= L" ";
swscanf(wcstok(tmpstr,L"|"),L"%ws", &Fam);
swscanf(wcstok(NULL,L"|"),L"%ws", &Nam);
swscanf(wcstok(NULL,L"|"),L"%ws", &Otch);
swscanf(wcstok(NULL,L"|"),L"%ws", &Addr);
swscanf(wcstok(NULL,L"|"),L"%ws", &Mail);
swscanf(wcstok(NULL,L"|"),L"%ws", &ICQ);
swscanf(wcstok(NULL,L"|"),L"%ws", &Date);
contacts* newcontact=NewContact(Fam,Nam,Otch,Date,Addr,Mail,ICQ);
head=AddNewContact(head,newcontact);
if (cnt->_cnt=='\0')
{
break;
}
}
fclose(cnt);
return head;
}
contacts* NewContact(wchar_t* Fam, wchar_t* Nam, wchar_t* Otch, wchar_t* Date, wchar_t* Addr, wchar_t* Mail, wchar_t* ICQ)
{
size_t len; // длина данных элемента
wchar_t* new_inf=NULL; // указатель на данные элемента
contacts* newcontact = new contacts;
// Имя
len=wcslen(Nam);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Nam);
newcontact->name=new_inf;
// Фамилия
len=wcslen(Fam);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Fam);
newcontact->surname=new_inf;
// Отчество
len=wcslen(Otch);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Otch);
newcontact->grandname=new_inf;
//Дата рождения
swscanf(wcstok(Date,L" ,."),L"%u", &(newcontact->birthdate.day));
swscanf(wcstok(NULL,L" ,."),L"%u", &(newcontact->birthdate.month));
swscanf(wcstok(NULL,L" ,."),L"%u", &(newcontact->birthdate.year));
// Адрес
len=wcslen(Addr);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Addr);
newcontact->addr=new_inf;
// Почта
len=wcslen(Mail);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Mail);
newcontact->email=new_inf;
// ICQ
len=wcslen(ICQ);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,ICQ);
newcontact->icq=new_inf;
return newcontact;
}
contacts* AddNewContact(contacts* head,contacts* newcontact)
{
if (head)
{
contacts* tmp=head;
while (tmp->next)
{
tmp=tmp->next;
}
tmp->next = newcontact;
newcontact->prev=tmp;
newcontact->next=NULL;
}
else
{
head = newcontact;
head->prev=NULL;
head->next=NULL;
}
return head;
}
contacts* FindContact(contacts* head)
{
contacts* current=NULL;
contacts* tmp=NULL;
DrawWindow(ColorBrightWhite, ColorGrey, 21, 6, 38, 10);
DrawSingleLineText(ColorYellow, ColorGrey, 23, 7, 16 , 1,L"Поиск по фамилии",MiddleCenter);
DrawButton(ColorBrightWhite, ColorBlue, ColorGrey, 23, 13, 10, 2, L"Найти");
DrawButton(ColorBrightWhite, ColorBlue, ColorGrey, 35, 13, 10, 2, L"Отмена");
wchar_t Fam [100];
DialogTextBox(ColorBrightWhite,ColorBlue,24, 11, 31, 1 ,Fam, 100);
INPUT_RECORD vRecord;
while (1)
{
if (InputRecordRead(vRecord))
{
// Дешифрация типа события
if (vRecord.Event.MouseEvent.dwButtonState & 0x01)
{
unsigned MouseXPos = vRecord.Event.MouseEvent.dwMousePosition.X;
unsigned MouseYPos = vRecord.Event.MouseEvent.dwMousePosition.Y;
if (
(MouseXPos >= 23)
&&
(MouseXPos < 33 )
&&
(MouseYPos >= 13)
&&
(MouseYPos < 14)
)
{
tmp=head;
while (tmp)
{
if(wcsstr(tmp->surname,Fam))
{
current=tmp;
break;
}
if (tmp->next==NULL)
{
break;
}
tmp=tmp->next;
}
if (current==NULL)
{
DialogMessageBox(ColorBrightWhite, ColorGrey,21, 8, 38, 7, ColorYellow, ColorGrey, L"Не найдено",TopLeft,MessageBoxOk);
current=head;
break;
}
break;
}
if (
(MouseXPos >= 35)
&&
(MouseXPos < 45)
&&
(MouseYPos >= 13)
&&
(MouseYPos < 14)
)
{
current=head;
break;
}
if (
(MouseXPos >= 24)
&&
(MouseXPos < 55)
&&
(MouseYPos >= 11)
&&
(MouseYPos < 12)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,24, 11, 31, 1 ,Fam, 100);
}
Sleep(20);
}
}
}
ContactsMenuGraph(head,current);
return current;
}
contacts* SortDb (contacts* head)
{
wchar_t* str_i=NULL; //нужны для сравнения
wchar_t* str_j=NULL; //строк
contacts* tmpnext=NULL;
contacts* tmp=NULL;//для обмена ук-ми на след эл.
contacts* i=head; //типо счетчика
contacts* j=i->next; //тоже
while (i->next)
{
while (j)
{
str_i=i->surname;
str_j=j->surname;
if (wcscmp(str_i,str_j)==1)
{
if (i==head)
{
if (j->next==NULL)
{
/* обмен некстов предыдущих */
j->prev->next=i;
/* обмен превов текущих */
i->prev=j->prev;
j->prev=NULL;
/* обмен превов следующих */
i->next->prev=j;
/* обмен некстов текущих */
j->next=i->next;
i->next=NULL;
head=j;
}
else
{
/* обмен некстов предыдущих */
j->prev->next=i;
/* обмен превов текущих */
i->prev=j->prev;
j->prev=NULL;
/* обмен превов следующих */
i->next->prev=j;
j->next->prev=i;
/* обмен некстов текущих */
tmp=i->next;
i->next=j->next;
j->next=tmp;
head=j;
}
}
else if (j->next==NULL)
{
/* обмен некстов предыдущих */
i->prev->next=j;
j->prev->next=i;
/* обмен превов текущих */
tmp=i->prev;
i->prev=j->prev;
j->prev=tmp;
/* обмен превов следующих */
i->next->prev=j;
/* обмен некстов текущих */
j->next=i->next;
i->next=NULL;
}
else
{
/* обмен некстов предыдущих */
i->prev->next=j;
j->prev->next=i;
/* обмен превов текущих */
tmp=i->prev;
i->prev=j->prev;
j->prev=tmp;
/* обмен превов следующих */
tmp=i->next->prev;
i->next->prev=j->next->prev;
j->next->prev=tmp;
/* обмен некстов текущих */
tmp=i->next;
i->next=j->next;
j->next=tmp;
}
/* обмен текущих */
tmp=j;
j=i;
i=tmp;
}
j=j->next;
}
i=i->next;
j=i->next;
}
ContactsMenuGraph(head,head);
return head;
}
//
void SaveDbEvents (events* head)
{
FILE *ev = fopen ("Events.db", "w");
if (ev==NULL)
{
DrawSingleLineText(ColorBrightWhite, ColorRed, 5, 14, 60, 3,L"Не удалось открыть файл!",MiddleCenter);
}
else
{
if (head)
{
while(head)
{
fwprintf(ev, L"%ws|%ws|%d|%u\.%u\.%u:%u\n",head->event_type,head->event_text,head->completed,head->event_date.wDay,head->event_date.wMonth,head->event_date.wHour,head->event_date.wMinute);
head=head->next;
}
}
else
{
fwprintf(ev, L"");
}
fclose (ev);
}
}
events* ReadDbEvents (void)
{
FILE* ev = fopen ("Events.db", "r");
if (ev==NULL)
{
return NULL;
}
wchar_t tmpstr[650];
fgetws(tmpstr,2,ev);
if (ev->_cnt=='\0')
{
return NULL;
}
fclose(ev);
ev = fopen ("Events.db", "r");
if (ev==NULL)
{
return NULL;
}
events* head=NULL;
while (feof(ev)==0)
{
fgetws(tmpstr,650,ev);
wchar_t Type[100] = L" ";
wchar_t Text[100] = L" ";
wchar_t Comp[100]= L"нет";
wchar_t Date[30]= L" ";
int comp=0;
swscanf(wcstok(tmpstr,L"|"),L"%ws", &Type);
swscanf(wcstok(NULL,L"|"),L"%ws", &Text);
swscanf(wcstok(NULL,L"|"),L"%d", &comp);
if (comp==1)
{
swprintf (Comp,L"да");
}
swscanf(wcstok(NULL,L"+"),L"%ws", &Date);
events* newevent=NewEvent(Type,Date,Text,Comp);
head=AddNewEvent(head,newevent);
if (ev->_cnt=='\0')
{
break;
}
}
fclose(ev);
return head;
}
events* NewEvent(wchar_t* Type, wchar_t* Date, wchar_t* Text, wchar_t* Comp)
{
size_t len; // длина данных элемента
wchar_t* new_inf=NULL; // указатель на данные элемента
events* newevent = new events;
// Тип
len=wcslen(Type);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Type);
newevent->event_type=new_inf;
// Дата "%02u\.%02u %02u:%02u"
swscanf(wcstok(Date,L" .:"),L"%u", &(newevent->event_date.wDay));
swscanf(wcstok(NULL,L" .:"),L"%u", &(newevent->event_date.wMonth));
swscanf(wcstok(NULL,L" .:"),L"%u", &(newevent->event_date.wHour));
swscanf(wcstok(NULL,L" .:"),L"%u", &(newevent->event_date.wMinute));
// Текст
len=wcslen(Text);
new_inf=new wchar_t[len+1];
wcscpy(new_inf,Text);
newevent->event_text=new_inf;
//Выполнено
if (wcsstr(L"нет",Comp))
{
newevent->completed=0;
}
else
{
newevent->completed=1;
}
return newevent;
}
events* AddNewEvent(events* head,events* newevent)
{
if (head)
{
events* tmp=head;
while (tmp->next)
{
tmp=tmp->next;
}
tmp->next = newevent;
newevent->prev=tmp;
newevent->next=NULL;
}
else
{
head = newevent;
head->prev=NULL;
head->next=NULL;
}
return head;
}
events* FindEvent(events* head)
{
events* current=NULL;
events* tmp=NULL;
DrawWindow(ColorBrightWhite, ColorGrey, 21, 6, 38, 10);
DrawSingleLineText(ColorYellow, ColorGrey, 23, 7, 16 , 1,L"Поиск по тексту",MiddleCenter);
DrawButton(ColorBrightWhite, ColorBlue, ColorGrey, 23, 13, 10, 2, L"Найти");
DrawButton(ColorBrightWhite, ColorBlue, ColorGrey, 35, 13, 10, 2, L"Отмена");
wchar_t Fam [100];
DialogTextBox(ColorBrightWhite,ColorBlue,24, 11, 31, 1 ,Fam, 100);
INPUT_RECORD vRecord;
while (1)
{
if (InputRecordRead(vRecord))
{
// Дешифрация типа события
if (vRecord.Event.MouseEvent.dwButtonState & 0x01)
{
unsigned MouseXPos = vRecord.Event.MouseEvent.dwMousePosition.X;
unsigned MouseYPos = vRecord.Event.MouseEvent.dwMousePosition.Y;
if (
(MouseXPos >= 23)
&&
(MouseXPos < 33 )
&&
(MouseYPos >= 13)
&&
(MouseYPos < 14)
)
{
tmp=head;
while (tmp)
{
if(wcsstr(tmp->event_text,Fam))
{
current=tmp;
break;
}
if (tmp->next==NULL)
{
break;
}
tmp=tmp->next;
}
if (current==NULL)
{
DialogMessageBox(ColorBrightWhite, ColorGrey,21, 8, 38, 7, ColorYellow, ColorGrey, L"Не найдено",TopLeft,MessageBoxOk);
current=head;
break;
}
break;
}
if (
(MouseXPos >= 35)
&&
(MouseXPos < 45)
&&
(MouseYPos >= 13)
&&
(MouseYPos < 14)
)
{
current=head;
break;
}
if (
(MouseXPos >= 24)
&&
(MouseXPos < 55)
&&
(MouseYPos >= 11)
&&
(MouseYPos < 12)
)
{
DialogTextBox(ColorBrightWhite,ColorBlue,24, 11, 31, 1 ,Fam, 100);
}
Sleep(20);
}
}
}
EventsMenuGraph(head,current);
return current;
}
events* SortDb (events* head)
{
wchar_t* str_i=NULL; //нужны для сравнения
wchar_t* str_j=NULL; //строк
events* tmpnext=NULL;
events* tmp=NULL;//для обмена ук-ми на след эл.
events* i=head; //типо счетчика
events* j=i->next; //тоже
while (i->next)
{
while (j)
{
str_i=i->event_type;
str_j=j->event_type;
if (wcscmp(str_i,str_j)==1)
{
if (i==head)
{
if (j->next==NULL)
{
/* обмен некстов предыдущих */
j->prev->next=i;
/* обмен превов текущих */
i->prev=j->prev;
j->prev=NULL;
/* обмен превов следующих */
i->next->prev=j;
/* обмен некстов текущих */
j->next=i->next;
i->next=NULL;
head=j;
}
else
{
/* обмен некстов предыдущих */
j->prev->next=i;
/* обмен превов текущих */
i->prev=j->prev;
j->prev=NULL;
/* обмен превов следующих */
i->next->prev=j;
j->next->prev=i;
/* обмен некстов текущих */
tmp=i->next;
i->next=j->next;
j->next=tmp;
head=j;
}
}
else if (j->next==NULL)
{
/* обмен некстов предыдущих */
i->prev->next=j;
j->prev->next=i;
/* обмен превов текущих */
tmp=i->prev;
i->prev=j->prev;
j->prev=tmp;
/* обмен превов следующих */
i->next->prev=j;
/* обмен некстов текущих */
j->next=i->next;
i->next=NULL;
}
else
{
/* обмен некстов предыдущих */
i->prev->next=j;
j->prev->next=i;
/* обмен превов текущих */
tmp=i->prev;
i->prev=j->prev;
j->prev=tmp;
/* обмен превов следующих */
tmp=i->next->prev;
i->next->prev=j->next->prev;
j->next->prev=tmp;
/* обмен некстов текущих */
tmp=i->next;
i->next=j->next;
j->next=tmp;
}
/* обмен текущих */
tmp=j;
j=i;
i=tmp;
}
j=j->next;
}
i=i->next;
j=i->next;
}
EventsMenuGraph(head,head);
return head;
}
void Reminder (contacts* head, events* evhead)
{
wchar_t tx[100] = L" ";
SYSTEMTIME date;
GetLocalTime (&date);
while (head)
{
if (head->birthdate.day==date.wDay && head->birthdate.month==date.wMonth)
{
swprintf (tx,L"Сегодня %ws %ws отмечает свой день рождения!",head->surname, head->name);
DialogMessageBox(ColorBrightWhite, ColorGrey,10, 8, 60, 7, ColorYellow, ColorGrey,tx,TopLeft,MessageBoxOk);
}
if (head->next==NULL)
{
break;
}
head=head->next;
}
while (evhead)
{
if (evhead->completed==false && evhead->event_date.wDay==date.wDay && evhead->event_date.wMonth==date.wMonth && evhead->event_date.wHour>=date.wHour)
{
swprintf (tx,L"Сегодня в %u:%02u %ws!", evhead->event_date.wHour, evhead->event_date.wMinute, evhead->event_type);
DialogMessageBox(ColorBrightWhite, ColorGrey,10, 8, 60, 7, ColorYellow, ColorGrey,tx,TopLeft,MessageBoxOk);
}
if (evhead->next==NULL)
{
break;
}
evhead=evhead->next;
}
}
Приложение В Результаты работы программы
Приложение B.1 – Информационная заставка
Приложение B.2 – Окно напоминания
Приложение B.3 – Меню событий
Приложение B.4 – Меню Подробнее/Изменить
Приложение B.5 – Резкльтаты поиска