Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PZ_kR.doc
Скачиваний:
4
Добавлен:
13.09.2019
Размер:
694.27 Кб
Скачать

Заключение

При выполнении данной курсовой работы были получены навыки разработки многомодульных программ. Были освоены приемы создания псевдографического интерфейса, изучены функции работы с консолью, способы обработки событий от клавиатуры и мыши. Усвоены механизмы реализации меню. Изучены функции работы с файлом. Получены базовые навыки программирования на языке С и Ассемблер. Изучены основные возможности среды программирования 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 – Резкльтаты поиска

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