Інтерфейс для роботи з базою даних MySQL

Функції інформаційної системи. Аналіз функцій системи управління базами даних: управління транзакціями і паралельним доступом, підтримка цілісності даних. Аналіз системи MySQL. Елементи персонального комп’ютера: монітор, клавіатура, материнська плата.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 15.05.2012
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

ЕОМ, периферійні пристрої ЕОМ та устаткування для обслуговування, ремонту та налагодження ЕОМ підключаються до електромережі тільки за допомогою справних штепсельних з'єднань і електророзеток заводського виготовлення.

Штепсельне з'єднання та електророзетки крім контактів фазового та нульового робочого провідників, мають спеціальні контакти для підключення нульового захисного провідника. Конструкція їх така: приєднання нульового захисного провідника здійснюється раніше ніж: приєднання фазового та нульового робочого провідника. Порядок роз'єднання при відключенні зворотній. Унеможливили з'єднання контактів фазових провідників з контактами нульового захисного провідника.

Індивідуальні та групові штепсельні з'єднання та електророзетки монтувалися на негорючі пластини з урахуванням вимог ПВЕ та правил пожежної безпеки України.

Електромережі штепсельних розеток для живлення ЕОМ, периферійних пристроїв ЕОМ та устаткування для обслуговування, ремонту та налагодження ЕОМ, при розташуванні їх у здовж стін приміщення, проклали на стіні приміщення.

Для підключення переносної електроаппараттури застосовують гнучкі проводи в надійній ізоляції. Тимчасова електропроводка від переносних приладів до джерела живлення виконується найкоротшим шляхом без заплутування проводів у конструкціях машин, приладів та меблях.

4.5 Пожежна безпека

Пожежа - це неконтрольоване горіння поза спеціальним вогнищем, що розповсюджується в часі і просторі та створює загрозу життю і здоров'ю людей, навколишньому середовищу, призводить до матеріальних збитків.

Всі апаратні частини ЕОМ містять легко запалювальні речовини та матеріали. У середовищі ЕОМ багато проводів і коротке замикання може привести до пожежі. Також в конструкцію ЕОМ включені різноманітні синтетичні легко запалювальні матеріали у великій кількості, запалювання яких супроводжуються виділенням високотоксичних продуктів загоряння.

Для всіх приміщень та споруд, в яких експлотується ЕОМ , повинна бути визначена категорія з вибухопожежної та пожежної небезпеки відповідно до ОНТП 24-86, та клас зони згідно з правилами влаштування електроустановок.

Приміщення, в якому буде розроблятися дипломний проект по категорії пожежонебезпезпеки відноситься до категорії В, тому що в ньому знаходяться тверді горючі матеріали: столи, стільці, папір, матеріали естетичного оздоблення. Ступінь вогнестійкості будови ІІ.

При виборі засобів гасіння пожежі для забезпечення безпеки людини від можливості ураження електричним струмом в приміщенні передбачено використовувати два вуглекислотні вогнегасники ВВ-2 ємністю 2 літри. Вогнегасники розташовуються на видному та легко доступному місці. При виникненні пожежі передбачена можливість повідомлення в пожежну охорону по телефону.

Організаційними заходами пожежної профілактики є навчання виробничого персоналу протипожежним правилами та видання необхідних інструкцій. В приміщенні розташовано план евакуації.

План евакуації людей при пожежі приведена на малюнку 4.2.

Рисунок 4.2 - План евакуації людей при пожежі.

5. Бізнес-план

5.1 Резюме

В даній дипломній роботі була розроблена програма, яка дозволяє працювати з СУБД MySQL. Програма буде використовуватися на підприємствах різної форми власності, та у домашніх умовах.

Швидкість виконання програми залежить від об'єму інформації та від технічних характеристик комп'ютера, на якому буде використовуватися програма.

Даний програмний продукт не є збитковим, так як він має достатньо високі характеристики, зручний інтерфейс та функціональність, порівняно з конкурентами, при нижчій ціні програмного продукту. Тому програма яка представлена у дипломному проекті є конкурентоспроможною.

Даний програмний продукт буде розповсюджуватися завдяки рекламі. Для стимулювання збуту при покупці більш ста одиниць програмного продукту будуть діяти знижки.

Враховуючи маркетингові дослідження прогнозуємий об'єм продажу по рокам представлено нижче:

1 рік - 100 екземплярів;

2 рік - 100 екземплярів;

Взагалі, кількість програмних продуктів, реалізованих за два роки буде складати 200 шт.

Доходи від реалізації даного програмного продукту складатимуть:

за перший рік - 40000 грн., за другий рік - 40000 грн.

Усього за два роки реалізації доход буде складати - 80000 грн.

Для створення цього програмного продукту необхідне інвестування у вигляді кредиту на суму 10000 грн., який можна буде повернути вже після другого року, враховуючи 18% річних.

5.2 Оцінка ринку збуту

Цей продукт дешевше ніж аналоги конкурентів. Програмні продукти конкурентів менш конкурентоспроможні, бо мають меншу функціональність, або перевантажені та складні у використанні для звичайного користувача.

Прогноз обсягів продажу даного програмного продукту наведений у Таблиці 5.1.

Таблиця 5.1 - Прогноз обсягів продажу програмного продукту

Періоди

Споживачі

Кількість

Перший рік реалізації програмного продукту

Січень

Лютий

Березень

Квітень

Травень

Червень

Липень

Серпень

Вересень

Жовтень

Листопад

Грудень

Періоди

Споживачі

Кількість

Всього за рік

100

Другий рік реалізації програмного продукту

1 квартал

2 квартал

3 квартал

4 квартал

Всього за рік

100

Всього за 2 роки

200

5.3 Конкуренція

У результаті дослідження товарного ринку було виявлено чотири конкурента та був зроблений аналіз показників їх діяльності. За результатами проведено ранжирування фірм-конкурентів.

Вивчаючи фірми-конкуренти здійснено ранжирування нашого програмного продукту та програмних продуктів-конкурентів. Результати ранжирування наведені в таблиці 5.2.

Таблиця 5.2 - Аналіз фірм-конкурентів слабкість сила

Ключові фактори успіху

Результати ранжирування фірм-конкурентів

за силою-слабкістю позицій на ринку

1

2

3

4

5

Інтерфейс

Х1

Х3

Х2

Х4

0

Функціонал

Х2

Х1

0

Х3

Х4

Швидкодія

Х4

Х2

Х3

Х1

0

Компактність

Х3

Х1

Х2

Х4

0

Ціна

Х2

Х1

Х3

0

Х4

Собівартість

Х2

Х3

Х1

0

Х4

Що ближче до 24 балів, тим конкурентоздатніша фірма.

Тут Х1, Х2, Х3, Х4 - Фірми конкуренти;

0 - розробник цього програмного продукту.

Х1 = 1+2+4+2+2+3=14 б.;

Х2 = 1+3+2+3+1+1= 11 б.;

Х3 = 2+4+3+1+3+2= 15 б.;

Х4 = 4+5+1+4+5+5= 24 б.;

0 = 5+3+5+5+4+4= 26 б.

Найбільш конкурентною для розробника цього програмного продукту є фірма-конкурент Х4, яка набрала 24 балів.

Наступним кроком оцінці програмного продукту конкуренту є аналіз технічних та економічних показників - ключових факторів успіху конкуруючих програмних продуктів. Перелік цих показників внесено у таблицю 5.3.

Таблиця 5.3 - Матриця рангів технічних та економічних параметрів

Параметри

Одиниці виміру

Значення параметру

Вага параметру

aj, bj

Одиничний параметричний показник qj

Одиничний параметричний індекс Іт, Іе

новий виріб

P

аналог. виріб

P

1

2

3

4

5

6

7

Технічні параметри

Інтерфейс

бал.

5

4

0.2

1.25

0.25

Функціонал

бал.

3

5

0.4

0.6

0.24

Швидкодія

ЦП

5

1

0.2

5

1

Компактність

бал.

5

4

0.2

1.25

0.25

Всього

1

9.1

3.05

Економічні параметри

Ціна

грн.

400

380

0.5

0.97

0.485

Собівартість

грн.

30658

30600

0.5

0.99

0.495

Всього

1

1.96

0.98

Таблиця розраховується таким чином:

Відбір технічних та економічних показників, які належить оцінювати називають ключовими факторами успіху. Перелік показників заносимо у стовпчик 1 таблиці.

Далі заповнюються одиниці виміру та значення параметрів на базі експертних оцінок.

Дані (стовпчик 5) - вага j- го параметру, визначаються експертним шляхом,

; - для технічних параметрів,

; - для економічних параметрів.

Одиничні параметричні показники gj по кожному j-му параметру (як технічних, так економічних) (стовпчик 6) розраховують за такою формулою:

, якщо

, якщо

де PHJ, Pja - величина j-го параметру нового виробу та виробу конкуруючого (аналога) відповідно

Розрахунок одиничних параметричних індексів іtj ;іej (стовпчик 6) здійснюється наступним чином:

; - для технічних параметрів

; - для економічних параметрів

Зведений параметричний індекс обчислюється за формулою:

- для технічних параметрів,

- для економічних параметрів.

Розрахунок інтегрального показника відносної конкурентоспроможності (К) нового виробу по відношенню до виробу - конкурента (аналога) обчислюється за формулою:

3.12

якщо К>1 - новий вибір перевищує вибір - конкурента;

К<1 - поступається;

К=1 - знаходиться на одному рівні.

К (>; <; =) 1, отже пропонує новий програмний продукт (переважає; поступається; знаходиться на одному рівні).

За розрахунками конкурентоспроможності, виявлено, що даний програмний продукт (конкурентоздатний, не конкурентоздатний).

Існує ще один варіант розрахунку конкурентоспроможності програмного продукту - це аналіз технічних показників нового програмного продукту та аналогічного, який існує на ринку, тобто програмний продукт конкурента. Студент самостійно обирає варіант розрахунку конкурентоспроможності програмного продукту.

5.4 Стратегія маркетингу

Для успішного супроводження програмного продукту на ринку та досягнення запланованого об'єму продаж необхідно ретельно спланувати рекламну компанію, котра дала б можливість усім потенційним користувачам дізнатись про існування та переваги розробленого програмного продукту. Рекламна компанія буде проводиться засобами електронної комерції, на IRC; та сайтах з новинами.

Але для початку рекламна компанія обмежиться розсилкою електронних листів потенційним покупцям. В листах буде знаходитись детальна інформація проданий програмний продукт, що досить зручно та вигідно. Також у листі вказується адреса домашнього сайту розробника, де можна буде внести свої пропозиції. Витрати на розробку наведені у таблиці 5.4

Таблиця 5.4 Розрахунок трудових витрат

Найменування операції

Кількість годин

Розробка плану

10

Алгоритмізація

50

Розробка дизайну

40

Написання коду

110

Тестування

10

Оптимізація

20

Оформлення документації

10

Всього

250

Трудові витрати, які потребують для розробки програмного продукту складають 250 годин.

Розрахуємо час роботи на машині - 40+110+10+20+10 = 180 годин.

Розрахуємо немашинний час - 10+50 = 60 годин.

1) Розрахуємо вартість машинного часу (електроенергія)

Велектр.ен. = машинний час* потужність машини* тариф

Велектр.ен.= 180 годин * 0.45 КВтчас* 0.95грн. = 76.95 грн.

2) Розрахуємо заробітну плату розробника програмного продукту. Витрачений час на розробку програмного продукту - 250 годин, тариф за годину роботи - 50 грн., звідси 50грн. * 250 год. = 12500грн.

3) Додаткова заробітна плата (20-50% від основної ЗП)

12500 грн.*(0,2 - 0,5) = 3750 грн.

4) Відрахування на соціальні потреби (38% від ФОП)

(12500 грн. +3750грн.)* 0,38= 6175грн.

5) Накладні витрати (40-100% від ФОП):

12500 грн.*(0,4 - 1) = 6250 грн.

6) Розрахуємо вартість матеріалів (Таблиця 5.5 Витрати на матеріали)

Таблиця 5.5 - Витрати на матеріали

Матеріали

Кількість,

шт.

Ціна за одиницю, грн.

Вартість, грн.

CD-RW

1

3.50

3.50

Олівець

3

0.50

1.50

Стиральна гумка

1

0.50

0.50

Ручка

2

1.50

3.00

Бумага

500

1

50.00

Всього

507

7.00

13.50

Суму витрат на розробку програмного продукту занесемо в таблицю 5.6. витрати на розробку програмного продукту.

Таблиця 5.6 - Витрати на розробку програмного продукту

Статті витрат

Вартість, грн.

Матеріали

13.50

Вартість електроенергії

77.00

Основна заробітна плата

13500

Додаткова заробітна плата (20-50% від ФОП)

3750

Соціальні відрахування (38% від ФОП)

6175

Накладні витрати (40-100% від ФОП)

6250

Виробнича собівартість

29765.00

Невиробничі витрати (3-10% від виробничої с/в)

893.00

Всього

39658.00

7) Розрахуємо витрати на адаптацію (накладні витрати програмного продукту, 3-10% від виробничої собівартості ПП)

29765.5 грн.*(0,03 - 0,1) = 892.95 грн.

8) Визначимо повну собівартість розробленого програмного продукту.

29765 грн. + 83295 грн. = 30657.95 грн.

Розрахуємо прибуток ( 23% від повної собівартості)

30658 грн.*0,29 = 7051,34 грн.

Розрахуємо вартість на 1 екземпляр тиражу (Таблиця 5.7 Витрати на матеріали на 1 шт.)

Таблиця 5.7 Витрати на матеріали на 1 шт

Матеріали

Кількість,

шт.

Вартість за одиницю, грн.

Вартість, грн.

1. CD-RW

1

3.50

3.50

2. Коробка для диску

1

5.00

5.00

3. Обгортка

1

3.00

3.00

4. Конверт

1

0.40

0.40

Всього:

11.90

1 Матеріальні витрати11.90 грн.

2 Витрати на електроенергію: 0.1 н/г * 0.3 КВт* 0.95 грн. = 0.03 грн.

3 Основна зарплата: 0.1 н/г* 50.00 грн = 5.00 грн.

4 Додаткова зарплата: 5.00 грн.*0,2= 1.00 грн.

5 Соціальні відрахування: (5 грн. + 1 грн.) * 0,38 = 2.28 грн.

6 Накладні витрати: 6 грн.*0,5 = 3 грн.

7Загальна сума: 80.3 грн.

Невиробничі витрати: 80.3 грн.*0,07 = 5.62 грн.

Повна собівартість: 80.21 грн. + 5.62 грн. = 85.83 грн.

Мінімальна ціна програмного продукту:

Цmin = 85.83 грн.

Максимальна ціна програмного продукту розраховується за формулою:

Цmax = (собівартість + кредит + 1,2 Прибуток) = 53014.00 грн.

Виходячи з ринкових цін на аналогічні продукти, приймаємо остаточну ціну нового програмного продукту 400.00 грн.

5.5 Фінансовий план

Цей розділ узагальнює і систематизує всі матеріали попередніх розділів та представляє їх у вартісному вираженні.

З урахуванням раніш визначених витрат на розробку програмного продукту заповнюємо таблицю 5.8 - Таблиця доходів та витрат

Таблиця 5.8 -Доходів та витрат

Показники

Витрати до поч. реалізації

1 рік

2 рік

Всього

Обсяг продаж (шт.)

-

100

100

200

Доходи від реалізації (грн)

-

40000

40000

80000

1 Постійні витрати

-

-

-

-

- Матеріали

13.50

-

-

13.50

- Електроенергія

77.00

-

-

77.00

- Основна зарплата

13500

-

-

13500

- Додаткова зарплата

3750

-

-

3750

- Соціальні відрахування

6175

-

-

6175

- Накладні витрати

6250

-

-

6250

- Кредит

10000

-

-

10000

- Відсоток за кредит

-

-

3750

3750

Всього постійних витрат:

39756

-

3750

43506

2 Змінні витрати

- Тиражування

-

8583

8583

17166

Показники

Витрати до поч. реалізації

1 рік

2 рік

Всього

- Реалізація

-

5000

5000

10000

Всього змінних витрат:

-

13583

13583

27166

Всього витрат:

39756

13583

17333

70672

Прибуток:

-39756

26417

22667

9328

Податок на прибуток

-

6076

5214

11281

Чистий прибуток:

-39756

22341

17453

68

Будуємо графік беззбитковості та розраховуємо точку беззбитковості програмного продукту.

Рис.

= 165 шт.

Висновок

За час виконання дипломного проекту мною був пройдений весь шлях розробки програми, починаючи з постанови задачі, алгоритму розробки і закінчуючи аналізом результатів задачі і формуванням вихідних документів.

За цей час я більш досконало ознайомився з методами відладки програми, мовою програмування «С++ з використанням функцій WinApi», а також ознайомився з вимогами до оформлення програмного продукту згідно державних стандартів.

Придбав навички по роботі з технічною літературою. Ознайомився з вимогами по написанню інструкції для роботи з програмою.

Перелік посилань

1.Румянцев В.П. Азбука программирования в Win32 API. «Горячая Линия - Телеком» 2001 - 310 c.

2.Финогенов К.Г. Win32. Основы программирования. «Диалог-МИФИ» 2006 - 416 с.

3.Скляров В. А. Язык С++ и объектно-ориентированное программирование. «Вышэйшая школа» 1997 - 478 с.

4.Ганеев Р. М. Проектирование интерфейса пользователя средствами Win32 API. «Горячая Линия - Телеком» 2001 - 336 с.

5.Лизогуб А.Н., Симоненко В.И. Экономическая теорія - Москва: «Бизнес книга» 2007- 128 с.

6.Шевчук Д.А Экономика предприятия(организации) - Москва: «Бизнес книга»: 2007- 320 с.

7.Фадеева Ю. Л. Охрана труда. Правовое регулирование. Практика. Основные документы - Київ: «Либідь» 2005- 245 с.

8.Гейц И. В. Охрана труда - Київ: «Каравела» 2006- 126 с.

9.Синилов В. Г. Системы охранной, пожарной и охранно-пожарной сигнализации- Санкт-Петербург: "Нева", 2006-384 с.

10.Роик В. Д. Управление условиями и охраной труда. Учебное пособие - Москва: «Московский Лицей». 2004- 311с.

11.Касьяновой Г. Ю. Охрана труда. Универсальный справочник - Киев: «Левада», 2006- 198 с.

12.Ефремова О. С. Аттестация рабочих мест по условиям труда в организациях - Москва: «Герда», 2006- 232 с.

Додаток A

Лістинг програми

Файл «main.cpp»

#include <windows.h>

#include <winsock.h>

#define _WIN32_IE 0x0500

#include <CommCtrl.h>

#include <commdlg.h>

#include <stdlib.h>

#include <string>

#include <fstream>

#include <list>

#include <vector>

#include <iostream>

#include "resource.h"

#include "include/MY_ROW.h"

#include "include/TreeSet.h"

#include "include/mysql.h"

#include "include/Config.h"

using namespace std;

HINSTANCE hInst;

MYSQL *_con;

MYSQL_RES *_res;

Config *_cfg;

int iSelect = -1;

BOOL end = false;

BOOL edit = false;

BOOL visibleFlag = false;

char table_name[255] = {0};

char column_name[255] = {0};

TreeSet *table = new TreeSet();

TreeSet *new_table = new TreeSet();

// function

void Free();

void Connection(BOOL);

void dump_store(char*);

void SendQuery(string);

void updateMainListView(HWND);

BOOL isResultQuery(char*);

BOOL InitApplication(HINSTANCE);

BOOL initListViewControl(HWND*,int);

vector<MY_ROW> ROW_TEMP;

BOOL isNameExists(char* _name) {

for(unsigned int i = 0; i < ROW_TEMP.size(); i++)

if(!strcmp(stoch(ROW_TEMP.at(i).getName()), _name))

return TRUE;

return FALSE;

}

BOOL isDigit(char *str) {

int count = 0;

for(int i = 0; i < strlen(str); i++)

if(!isdigit(str[i]))

if(str[i] != '.' || count > 1)

return FALSE;

else

count++;

for(int i = 0; i < strlen(str); i++)

return TRUE;

}

vector<string> base_list;

// Procedure function

BOOL CALLBACK AboutProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch(uMsg)

{

case WM_INITDIALOG:

return TRUE;

case WM_LBUTTONDOWN:

case WM_CLOSE:

EndDialog(hwndDlg, 0);

return TRUE;

}

return FALSE;

}

BOOL CALLBACK DialogAddField(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch(uMsg)

{

case WM_INITDIALOG:

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"tinyint");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"smallint");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"mediumint");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"int");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"integer");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"bigint");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"bit");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"real");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"double");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"float");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"decimal");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"numeric");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"char");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"varchar");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"date");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"time");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"year");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"timestamp");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"datetime");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"tinyblob");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"blob");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"mediumblob");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"longblob");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"tinyblob");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"mediumtext");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"longtext");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"enum");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"set");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"text");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"binary");

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, 0, (LPARAM)"varbinary");

return TRUE;

case WM_CLOSE:

EndDialog(hwndDlg, 0);

return TRUE;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case IDC_BUTTON2:

EndDialog(hwndDlg, 0);

return TRUE;

case IDC_BUTTON1:

{

char temp[6][255];

BOOL temp2[3];

try

{

GetDlgItemText(hwndDlg, IDC_EDIT1, temp[0], GetWindowTextLength(GetDlgItem(hwndDlg, IDC_EDIT1)) + 1);

GetDlgItemText(hwndDlg, IDC_EDIT2, temp[1], GetWindowTextLength(GetDlgItem(hwndDlg, IDC_EDIT2)) + 1);

GetDlgItemText(hwndDlg, IDC_COMBO1, temp[2],GetWindowTextLength(GetDlgItem(hwndDlg, IDC_COMBO1)) + 1);

GetDlgItemText(hwndDlg, IDC_EDIT3, temp[3], GetWindowTextLength(GetDlgItem(hwndDlg, IDC_EDIT3)) + 1);

temp2[0] = IsDlgButtonChecked(hwndDlg, IDC_CHECKBOX1);

temp2[1] = IsDlgButtonChecked(hwndDlg, IDC_CHECKBOX2);

temp2[2] = IsDlgButtonChecked(hwndDlg, IDC_CHECKBOX3);

for(unsigned int i = 0; i < strlen(temp[1]) ; i++)

if(!isdigit(temp[1][i]))

{

EndDialog(hwndDlg, 0);

return FALSE;

}

if(isNameExists(temp[0]) || !strlen(temp[0]) || !strlen(temp[2]))

{

EndDialog(hwndDlg, 0);

return FALSE;

}

MY_ROW temp_row(temp[0], temp[2], temp[1], temp[3], temp2[2], temp2[1], temp2[0]);

ROW_TEMP.push_back(temp_row);

SendDlgItemMessage(GetParent(hwndDlg), IDC_LIST1, LB_ADDSTRING, NULL, (LPARAM)temp[0]);

delete []temp;

delete []temp2;

EndDialog(hwndDlg, 0);

}

catch(int t)

{

}

return TRUE;

}

}

}

return FALSE;

}

BOOL CALLBACK DialogCreateT(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch(uMsg)

{

case WM_INITDIALOG:

{

SendDlgItemMessage(hwndDlg, IDC_COMBO1, CB_ADDSTRING, NULL, (LPARAM)"UTF8");

SendDlgItemMessage(hwndDlg, IDC_COMBO1, CB_ADDSTRING, NULL, (LPARAM)"CP1251");

for(unsigned int i = 0; i < ROW_TEMP.size(); i++)

SendDlgItemMessage(hwndDlg, IDC_LIST1, LB_ADDSTRING, NULL, (LPARAM)stoch(ROW_TEMP.at(i).getName()));

return TRUE;

}

case WM_CLOSE:

EndDialog(hwndDlg, 0);

return TRUE;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case IDC_BUTTON3:

DialogBox(hInst, "ADD_FIELD", hwndDlg, (DLGPROC)DialogAddField);

return TRUE;

case IDC_BUTTON2:

{

EndDialog(hwndDlg, 0);

return TRUE;

}

case IDC_BUTTON1:

{

char temp[255] = {0};

GetDlgItemText(hwndDlg, IDC_EDIT1, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_EDIT1)) + 1);

string query("CREATE TABLE `");

query.append(temp).append("` ( ");

for(unsigned int i = 0; i < ROW_TEMP.size(); i++)

query.append(ROW_TEMP.at(i).getFormatedLine() + (i == (ROW_TEMP.size() - 1) ? "" : " ,"));

int key = 0;

for(unsigned int i = 0; i < ROW_TEMP.size(); i++)

{

if((ROW_TEMP.at(i)._isAI() || ROW_TEMP.at(i)._isKey()) && !key)

{

query.append(", PRIMARY KEY(`").append(ROW_TEMP.at(i).getName()).append("`)");

key++;

}

}

GetDlgItemText(hwndDlg, IDC_COMBO1, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_COMBO1)) + 1);

query += " )";

if(strlen(temp) > 0)

query.append(" CHARSET=").append(temp);

GetDlgItemText(hwndDlg, IDC_EDIT2, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_EDIT2)) + 1);

if(strlen(temp) > 0)

query.append(" COMMENT='").append(temp);

query.append("';");

MessageBox(NULL, stoch(query), "", 0);

try

{

Connection(true);

SendQuery(query);

Free();

}

catch(int err)

{

MessageBox(NULL, "Ошибк аотправки запроса!", "Ошибка", 0);

}

updateMainListView(GetParent(hwndDlg));

EndDialog(hwndDlg, 0);

return TRUE;

}

case IDC_BUTTON4:

{

try

{

int select = SendMessage(GetDlgItem(hwndDlg, IDC_LIST1), LB_GETSEL, 0, 0) - 1;

int size = SendMessage(GetDlgItem(hwndDlg, IDC_LIST1), LB_GETTEXTLEN, 0, select);

char temp[255] = {0};

SendMessage(GetDlgItem(hwndDlg, IDC_LIST1), LB_GETTEXT, select, (LPARAM)temp);

SendMessage(GetDlgItem(hwndDlg, IDC_LIST1), LB_DELETESTRING, select, 0);

for(unsigned int i = 0; i < ROW_TEMP.size(); i++)

if(ROW_TEMP.at(i).getName() == (string)temp)

ROW_TEMP.erase(ROW_TEMP.begin() + i);

delete []temp;

return TRUE;

}

catch(int i)

{

return FALSE;

}

}

}

}

return FALSE;

}

BOOL CALLBACK DlgRefer(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch(uMsg)

{

case WM_INITDIALOG:

SetDlgItemText(hwndDlg, IDC_HOST, stoch(_cfg->getHost()));

SetDlgItemText(hwndDlg, IDC_PORT, stoch(atoi(_cfg->getPort())));

SetDlgItemText(hwndDlg, IDC_USER, stoch(_cfg->getUser()));

SetDlgItemText(hwndDlg, IDC_PASS, stoch(_cfg->getPass()));

return TRUE;

case WM_CLOSE:

EndDialog(hwndDlg, 0);

return TRUE;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case IDC_SAVE_CONF:

{

char temp[255] = {0};

GetDlgItemText(hwndDlg, IDC_HOST, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_HOST)) + 1);

_cfg->setHost(temp);

GetDlgItemText(hwndDlg, IDC_PORT, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_PORT)) + 1);

_cfg->setPort(temp);

GetDlgItemText(hwndDlg, IDC_USER, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_USER)) + 1);

_cfg->setUser(temp);

GetDlgItemText(hwndDlg, IDC_PASS, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_PASS)) + 1);

_cfg->setPass(temp);

_cfg->Write();

MessageBox(hwndDlg, "Настройки успешно сохранены!", "Successful", 0);

}

case IDC_CANSEL_CONF:

EndDialog(hwndDlg, 0);

return TRUE;

}

}

return FALSE;

}

BOOL CALLBACK DlgRefer2(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch(uMsg)

{

case WM_INITDIALOG:

base_list.clear();

Connection(false);

if(_con)

_res = mysql_list_dbs(_con, "");

SetDlgItemText(hwndDlg, IDC_EDIT2, stoch(_cfg->getName()));

if(_res)

{

MYSQL_FIELD *_fiel = mysql_fetch_fields(_res);

while (MYSQL_ROW _row = mysql_fetch_row(_res))

{

base_list.push_back(_row[0]);

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, NULL, (LPARAM)_row[0]);

}

}

Free();

return TRUE;

case WM_CLOSE:

EndDialog(hwndDlg, 0);

return TRUE;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case IDC_BUTTON1:

{

char temp[255] = {0};

GetDlgItemText(hwndDlg, IDC_EDIT1, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_EDIT1)) + 1);

Connection(false);

if(!strlen(temp))

{

MessageBox(0, "Название базы не может быть пустым!", "Ошибка!", 0);

return FALSE;

}

for(unsigned int i = 0; i < base_list.size(); i++)

if(!strcmp(stoch(base_list.at(i)), temp))

{

MessageBox(0, "База с таким именем уже существует!", "Ошибка!", 0);

return FALSE;

}

try

{

string query = "CREATE DATABASE ";

query += temp;

SendQuery(query);

base_list.push_back(temp);

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_ADDSTRING, NULL, (LPARAM)temp);

MessageBox(0, "База данных успешна создана!", "Поздровляем!", 0);

}

catch(int i)

{

MessageBox(0, "Ошибка создания базы данных!", "Ошибка!", 0);

}

Free();

return TRUE;

}

case IDC_BUTTON2:

{

char temp[100] = {0};

GetDlgItemText(hwndDlg, IDC_COMBO1, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_COMBO1)) + 1);

Connection(false);

if(!strlen(temp))

{

MessageBox(0, "Выберите базу данных для удаления!", "Ошибка!", 0);

return FALSE;

}

int flag = 0;

for(unsigned int i = 0; i < base_list.size(); i++)

if(!strcmp(stoch(base_list.at(i)), temp))

{

flag = 1;

break;

}

if(!flag)

{

MessageBox(0, "Базы с таким именем не существует!", "Ошибка!", 0);

return FALSE;

}

try

{

string query = "DROP DATABASE ";

query += temp;

SendQuery(query);

for(unsigned int i = 0; i < base_list.size(); i++)

if(!strcmp(stoch(base_list.at(i)), temp))

base_list.erase(base_list.begin() + i);

SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_DELETESTRING, SendMessage(GetDlgItem(hwndDlg, IDC_COMBO1), CB_GETCURSEL, (WPARAM)temp, NULL), NULL);

MessageBox(0, "База данных успешно удалена!", "Поздровляем!", 0);

}

catch(int i)

{

MessageBox(0, "Ошибка удаления базы данных!", "Ошибка!", 0);

}

Free();

delete []temp;

return TRUE;

}

case IDOK:

{

char temp[255] = {0};

char temp2[255] = {0};

GetDlgItemText(hwndDlg, IDC_EDIT2, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_EDIT2)) + 1);

GetDlgItemText(hwndDlg, IDC_COMBO1, temp2, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_COMBO1)) + 1);

if(strcmp(temp, temp2))

_cfg->setName(strlen(temp2) ? temp2 : temp);

_cfg->Write();

updateMainListView(GetParent(hwndDlg));

delete []temp;

delete []temp2;

}

case IDCANCEL:

EndDialog(hwndDlg, 0);

return TRUE;

}

}

return FALSE;

}

BOOL CALLBACK DlgInsert(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch(uMsg)

{

case WM_INITDIALOG:

if(edit)

SetDlgItemText(hwndDlg, IDC_EDIT1, stoch(table->GetValue(column_name)));

SetDlgItemText(hwndDlg, IDC_EDIT2, column_name);

return TRUE;

case WM_CLOSE:

EndDialog(hwndDlg, 0);

end = true;

return TRUE;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case IDCANCEL:

EndDialog(hwndDlg, 0);

end = true;

return TRUE;

case IDOK:

{

char temp[255] = {0};

char temp1[255] = {0};

GetDlgItemText(hwndDlg, IDC_EDIT2, temp, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_EDIT2)) + 1);

GetDlgItemText(hwndDlg, IDC_EDIT1, temp1, GetWindowTextLength(GetDlgItem(hwndDlg, IDC_EDIT1)) + 1);

if(!strlen(temp1))

return MessageBox(0, "Введите значение!", "Ошибка!", 0);

if(edit)

new_table->Set(temp, temp1);

else

table->Set(temp, temp1);

delete []temp;

delete []temp1;

EndDialog(hwndDlg, 0);

return TRUE;

}

}

}

return FALSE;

}

BOOL CALLBACK SendProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch(uMsg)

{

case WM_INITDIALOG:

ListView_SetExtendedListViewStyleEx(GetDlgItem(hwndDlg, IDC_RESULT_Q), LVS_EX_GRIDLINES, LVS_EX_GRIDLINES);

ListView_SetExtendedListViewStyleEx(GetDlgItem(hwndDlg, IDC_RESULT_Q), LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);

if(!initListViewControl(&hwndDlg, IDC_RESULT_Q))

{

MessageBox(hwndDlg, "Выберите строку!", "Ошибка", 0);

EndDialog(hwndDlg, 0);

}

if(visibleFlag)

{

ShowWindow(GetDlgItem(hwndDlg, IDC_EXIT), SW_HIDE);

ShowWindow(GetDlgItem(hwndDlg, IDC_BUTTON3), SW_HIDE);

ShowWindow(GetDlgItem(hwndDlg, IDC_BUTTON2), SW_HIDE);

ShowWindow(GetDlgItem(hwndDlg, IDC_BUTTON1), SW_HIDE);

}

return TRUE;

case WM_CLOSE:

EndDialog(hwndDlg, 0);

visibleFlag = false;

return TRUE;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case IDC_EXIT:

EndDialog(hwndDlg, 0);

visibleFlag = false;

return TRUE;

case IDC_BUTTON3:

{

HWND hList = GetDlgItem(hwndDlg, IDC_RESULT_Q);

char temp_head[255] = {0};

char temp_item[255] = {0};

int selected = -1;

selected = ListView_GetSelectionMark(hList);

if(selected != -1)

{

LV_COLUMN lvc;

ZeroMemory(&lvc,sizeof(lvc));

lvc.mask = LVCF_FMT | LVCF_TEXT ;

lvc.pszText = temp_head;

lvc.cchTextMax = 255;

string query("DELETE FROM `");

query.append(table_name).append("` WHERE ");

int count = Header_GetItemCount(ListView_GetHeader(hList));

for(int i = 0; i < count; i++)

{

ListView_GetColumn(hList, i, &lvc);

ListView_GetItemText(hList, selected, i, temp_item, 255);

if(!strlen(temp_item))

continue;

query.append("`").append(lvc.pszText).append("`='").append(temp_item).append( (i == count - 1) ? "'" : "' AND ");

}

query.append(";");

Connection(true);

SendQuery(query);

Free();

string select("SELECT * FROM ");

select.append(table_name);

Connection(true);

SendQuery(select);

initListViewControl(&hwndDlg, IDC_RESULT_Q);

Free();

}

else

MessageBox(hwndDlg, "Выделите строку!", "Ошибка", 0);

return TRUE;

}

case IDC_BUTTON1:

{

HWND hList = GetDlgItem(hwndDlg, IDC_RESULT_Q);

int count = Header_GetItemCount(ListView_GetHeader(hList));

LV_COLUMN lvc;

ZeroMemory(&lvc,sizeof(lvc));

lvc.mask = LVCF_FMT | LVCF_TEXT ;

lvc.pszText = column_name;

lvc.cchTextMax = 255;

for(int i = 0; i < count; i++)

{

if(end)

break;

ListView_GetColumn(hList, i, &lvc);

DialogBox(hInst, MAKEINTRESOURCE(EDIT_ADD), NULL, (DLGPROC)DlgInsert);

}

if(!end)

{

string query("INSERT INTO `");

query.append(table_name).append("`( ");

for(int i = 0; i < table->size(); i++)

query.append("").append(table->GetKey(i)).append((i == table->size() -1) ? ") VALUES(" :", ");

for(int i = 0; i < table->size(); i++)

query.append("").append(isDigit(stoch(table->GetValue(i))) ? "" : "'").append(table->GetValue(i)).append(isDigit(stoch(table->GetValue(i))) ? "" : "'").append((i == table->size() -1) ? ");" :", ");

MessageBox(0, stoch(query), 0,0);

Connection(true);

SendQuery(query);

Free();

string select("SELECT * FROM ");

select.append(table_name);

Connection(true);

SendQuery(select);

initListViewControl(&hwndDlg, IDC_RESULT_Q);

Free();

}

table->clear();

end = false;

return TRUE;

}

case IDC_BUTTON2:

{

edit = true;

HWND hList = GetDlgItem(hwndDlg, IDC_RESULT_Q);

char temp_item[255] = {0};

int selected = -1;

selected = ListView_GetSelectionMark(hList);

if(selected != -1)

{

LV_COLUMN lvc;

ZeroMemory(&lvc,sizeof(lvc));

lvc.mask = LVCF_FMT | LVCF_TEXT ;

lvc.pszText = column_name;

lvc.cchTextMax = 255;

int count = Header_GetItemCount(ListView_GetHeader(hList));

for(int i = 0; i < count; i++)

{

ListView_GetColumn(hList, i, &lvc);

ListView_GetItemText(hList, selected, i, temp_item, 255);

table->Set(lvc.pszText, temp_item);

if(end)

break;

DialogBox(hInst, MAKEINTRESOURCE(EDIT_ADD), NULL, (DLGPROC)DlgInsert);

}

if(!end)

{

string query("UPDATE ");

query.append(table_name).append(" SET ");

for(int i = 0; i < new_table->size(); i++)

query.append(new_table->GetKey(i)).append("=").append(isDigit(stoch(new_table->GetValue(i))) ? "" : "'").append(new_table->GetValue(i)).append(isDigit(stoch(new_table->GetValue(i))) ? "" : "'").append((i == new_table->size() - 1) ? " " : ", ");

query.append(" WHERE ");

for(int i = 0; i < table->size(); i++)

query.append(table->GetKey(i)).append("=").append(isDigit(stoch(table->GetValue(i))) ? "" : "'").append(table->GetValue(i)).append(isDigit(stoch(table->GetValue(i))) ? "" : "'").append((i == table->size() - 1) ? ";" : " AND ");

MessageBox(0, stoch(query), 0,0);

Connection(true);

SendQuery(query);

Free();

string select("SELECT * FROM ");

select.append(table_name);

Connection(true);

SendQuery(select);

initListViewControl(&hwndDlg, IDC_RESULT_Q);

Free();

}

Connection(true);

//SendQuery(query);

Free();

string select("SELECT * FROM ");

select.append(table_name);

Connection(true);

SendQuery(select);

initListViewControl(&hwndDlg, IDC_RESULT_Q);

Free();

}

end = false;

table->clear();

new_table->clear();

return TRUE;

}

}

}

return FALSE;

}

BOOL CALLBACK DlgSendProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch(uMsg)

{

case WM_INITDIALOG:

return TRUE;

case WM_CLOSE:

EndDialog(hwndDlg, 0);

return TRUE;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case IDC_S_END:

EndDialog(hwndDlg, 0);

return TRUE;

case IDC_SEND_Q:

{

char query[65535] = {0};

GetDlgItemText(hwndDlg, IDC_QUERY_EDIT, query, 65535);

Connection(true);

SendQuery(query);

visibleFlag = true;

if(_res && isResultQuery(query))

DialogBox(hInst, MAKEINTRESOURCE(IDD_RESULT), hwndDlg, (DLGPROC)SendProc);

Free();

EndDialog(hwndDlg, 0);

return TRUE;

}

}

}

return FALSE;

}

BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {

switch(uMsg)

{

case WM_INITDIALOG:

_cfg->Read();

ListView_SetExtendedListViewStyleEx(GetDlgItem(hwndDlg, IDC_LIST1), LVS_EX_GRIDLINES, LVS_EX_GRIDLINES);

updateMainListView(hwndDlg);

DialogBox(hInst, MAKEINTRESOURCE(ABOUT), hwndDlg, (DLGPROC)AboutProc);

return TRUE;

case WM_CLOSE:

EndDialog(hwndDlg, 0);

return TRUE;

case WM_COMMAND:

switch(LOWORD(wParam))

{

case IDM_CONFIG:

DialogBox(hInst, MAKEINTRESOURCE(IDD_REFERENCES), hwndDlg, (DLGPROC)DlgRefer);

return TRUE;

case IDM_CONFIG2:

DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hwndDlg, (DLGPROC)DlgRefer2);

return TRUE;

case IDM_SENT_QUERY:

DialogBox(hInst, MAKEINTRESOURCE(IDD_SEND_Q), hwndDlg, (DLGPROC)DlgSendProc);

return TRUE;

case IDM_CREATE_TABLE:

DialogBox(hInst, "CREATE_TABLE", hwndDlg, (DLGPROC)DialogCreateT);

return TRUE;

case IDM_EXIT:

EndDialog(hwndDlg, 0);

return TRUE;

case IDC_BUTTON1:

{

char query[65535] = "SELECT * FROM ";

HWND hwnd = GetDlgItem(hwndDlg, IDC_LIST1);

Connection(true);

int column = ListView_GetSelectedColumn(hwnd);

int item = ListView_GetSelectionMark(hwnd);

ListView_GetItemText(hwnd, item, column, table_name, 256);

strcat(query, table_name);

SendQuery(query);

DialogBox(hInst, MAKEINTRESOURCE(IDD_RESULT), hwndDlg, (DLGPROC)SendProc);

Free();

delete []query;

delete []table_name;

return TRUE;

}

case IDC_BUTTON2:

{

char query[65535] = "DROP TABLE ", table_name[255] = {0};

HWND hwnd = GetDlgItem(hwndDlg, IDC_LIST1);

Connection(true);

int column = ListView_GetSelectedColumn(hwnd);

int item = ListView_GetSelectionMark(hwnd);

ListView_GetItemText(hwnd, item, column, table_name, 256);

strcat(query, table_name);

SendQuery(query);

Free();

delete []query;

delete []table_name;

updateMainListView(hwndDlg);

return TRUE;

}

case IDC_BUTTON5:

{

DialogBox(hInst, MAKEINTRESOURCE(ABOUT), hwndDlg, (DLGPROC)AboutProc);

return TRUE;

}

}

}

return FALSE;

}

// Main funcrion

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {

hInst = hInstance;

InitApplication(hInstance);

// The user interface is a modal dialog box

return DialogBox(hInstance, MAKEINTRESOURCE(DLG_MAIN), NULL, (DLGPROC)DialogProc);

}

BOOL InitApplication(HINSTANCE hinstance) {

WNDCLASSEX wcx;

wcx.cbSize = sizeof(WNDCLASSEX);

wcx.style = CS_HREDRAW | CS_VREDRAW;

wcx.hInstance = hinstance;

wcx.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1));

wcx.hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1));

return RegisterClassEx(&wcx);

}

// check query of result

BOOL isResultQuery(char * _query) {

BOOL state = false;

char * Type = strtok(_query, " ");

for(unsigned int i = 0; i < strlen(Type); i++)

Type[i] = tolower (Type[i]);

if(!strcmp(Type, "select") || !strcmp(Type, "show"))

state = TRUE;

free(Type);

return state;

}

// connect to database

void Connection(BOOL isBase) {

_con = mysql_init(NULL);

if (_con == NULL)

return;

_con = mysql_real_connect(_con, stoch(_cfg->getHost()), stoch(_cfg->getUser()), stoch(_cfg->getPass()), isBase ? stoch(_cfg->getName()) : NULL, _cfg->getPort(), NULL, 0);

if (_con == NULL)

{

MessageBox(NULL, "Ошибка подключения к серверу базы данных.", "Ошибка!", 0);

return;

}

}

// send query to database

void SendQuery(string _qu) {

mysql_query(_con, stoch(_qu));

_res = mysql_store_result(_con);

}

void updateMainListView(HWND hwnd) {

HWND hwndL = GetDlgItem(hwnd, IDC_LIST1);

ListView_DeleteAllItems(hwndL);

try

{

Connection(true);

string query("SHOW TABLES ");

query.append(_cfg->getName());

SendQuery(query);

LV_ITEM lvi;

memset( &lvi, 0, sizeof( LV_ITEM ) );

lvi.mask = LVIF_TEXT;

if(_con)

_res = mysql_list_tables(_con, "");

if(_res)

{

int i =0;

mysql_fetch_fields(_res);

while (MYSQL_ROW _row = mysql_fetch_row(_res))

{

lvi.iItem = i;

ListView_InsertItem(hwndL, &lvi);

ListView_SetItemText(hwndL, i, 0, _row[0] );

i++;

}

}

}

catch(int i){}

Free();

}

//

void Free() {

mysql_free_result(_res);

mysql_close(_con);

}

// initialization ListViewControl of data

BOOL initListViewControl(HWND *_hDlg, int _ListId) {

if (_res == NULL)

return FALSE;

// Загружена ли библиотека контролов

InitCommonControls();

HWND hList = GetDlgItem(*_hDlg, _ListId);

ListView_DeleteAllItems(hList);

MYSQL_ROW _row;

LV_ITEM lvi;

LV_COLUMN lvColumn;

memset(&lvColumn,0,sizeof(LV_COLUMN));

memset( &lvi, 0, sizeof( LV_ITEM ) );

lvi.mask = LVIF_TEXT;

lvColumn.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT;

lvColumn.fmt=LVCFMT_LEFT;

int i, j, count = mysql_num_fields(_res);

int width = (int)(490/count);

MYSQL_FIELD *_fiel = mysql_fetch_fields(_res);

for (i = 0 ; i < count; i++)

{

ListView_DeleteColumn(hList, i);

lvColumn.cx = count >= 7 ? (strlen(_fiel[i].name) * 10) : width;

lvColumn.pszText = _fiel[i].name;

ListView_InsertColumn(hList,i, &lvColumn);

}

i = 0;

while(_row = mysql_fetch_row(_res))

{

lvi.iItem = i;

ListView_InsertItem( hList, &lvi );

for(j = 0; j < count; j++)

ListView_SetItemText( hList, i, j, _row[j]);

i++;

}

return TRUE;

}

Файл «TreeSet.h»

#include <vector>

#include <string>

using namespace std;

class TreeSet

{

private: int count;

private: vector<int> index;

private: string *key;

private: string *value;

public: TreeSet()

{

count = 0;

key = new string[65535];

value = new string[65535];

index.clear();

}

public: ~TreeSet()

{

delete []key;

delete []value;

free(&index);

}

public: void Set(string _key, string _val)

{

int i = count;

int free = GetFirstIndex();

if(free != -1)

{

i = free;

index.erase(index.begin());

}

key[i] = _key;

value[i] = _val;

count++;

}

public: string GetValue(string _key)

{

for(int i = 0; i < count; i++)

if(_key == key[i])

return value[i];

return NULL;

}

public: string GetValue(int i)

{

return value[i];

}

public: string GetKey(int i)

{

return key[i];

}

public: int size()

{

return count;

}

public: void clear()

{

count = 0;

key = new string[65535];

value = new string[65535];

index.clear();

}

public: int GetFirstIndex()

{

if(index.size() > 0)

return index.at(0);

return -1;

}

};

Файл «Config.h»

#ifndef CONFIG_H

#define CONFIG_H

#include <string>

using namespace std;

class Config

{

public: Config();

public: ~Config();

public: void Read();

public: void Write();

public: void setHost(char*);

public: void setName(char*);

public: void setUser(char*);

public: void setPass(char*);

public: void setPort(char*);

public: string getHost();

public: string getName();

public: string getUser();

public: string getPass();

public: int getPort();

};

string atoi(int);

char* stoch(string _st);

string* split(string, char);

#endif // CONFIG_H

Файл «Config.cpp»

#include <windows.h>

#include <fstream>

#include <string>

#include <vector>

#include <algorithm>

#include "include/Config.h"

using namespace std;

string host;

string name;

string user;

string pass;

int port;

Config::Config() {

host = "127.0.0.1";

name = "null";

user = "root";

pass.clear();

port = 3306;

}

Config::~Config() {

}

void Config::Read() {

string temp;

ifstream in("option.ini");

in>>temp;

host = split(temp, '=')[1];

in>>temp;

name = split(temp, '=')[1];

in>>temp;

user = split(temp, '=')[1];

in>>temp;

pass = split(temp, '=')[1];

in>>temp;

port = atoi(stoch(split(temp, '=')[1]));

in.close();

}

void Config::Write() {

ofstream out("option.ini");

out<<"host="<<host<<endl;

out<<"name="<<name<<endl;

out<<"user="<<user<<endl;

out<<"pass="<<pass<<endl;

out<<"port="<<port;

out.close();

}

void Config::setHost(char* _host){

host = _host;

}

void Config::setName(char* _name){

name = _name;

}

void Config::setUser(char* _user){

user = _user;

}

void Config::setPass(char* _pass){

pass = _pass;

}

void Config::setPort(char* _port){

port = atoi(_port);

}

string Config::getHost() {

return host;

}

string Config::getName() {

return name;

}

string Config::getUser() {

return user;

}

string Config::getPass() {

return pass;

}

int Config::getPort() {

return port;

}

// Other methods

char* stoch(string _st) {

char* _char = new char[_st.length() +1];

strcpy(_char, _st.c_str());

return _char;

}

string atoi(int _val) {

TCHAR _res[4] = {0};

itoa(_val, _res, 10);

string str(_res);

return str;

}

string* split(string _content, char _seporator) {

_content += _seporator;

string * result = new string[std::count(_content.begin(), _content.end(), _seporator)];

for(int i = 0, j = 0; i < _content.size(); i++)

if(_content[i] == _seporator)

j++;

else

result[j] += _content[i];

return result;}

Додаток Б

Форми вхідних документів

Рисунок 3.4 - Вікно налаштування серверу бази даних.

Рисунок 3.4 - Вікно налаштування бази даних.

Рисунок 3.5 - Вікно відправлення запиту до бази даних.

Додаток В

Форми вихідних документів

Рисунок 3.2 - Головне вікно програми.

Рисунок 3.3 - Вікно перегляду даних таблиці.

Рисунок 3.1 - Вікно привітання.

Размещено на Allbest.ru


Подобные документы

  • Поняття бази даних та основне призначення системи управління. Access як справжня реляційна модель баз даних. Можливості DDE і OLE. Модулі: Visual Basic for Applications програмування баз даних. Система управління базами даних Microsoft SQL Server 2000.

    реферат [41,2 K], добавлен 17.04.2010

  • Робота користувача з базою даних, перегляд, редагування інформації в базі даних та здійснення пошуку у зручній формі. Інтерфейс системи сільській бібліотеці для обслуговування читачів і фіксування даних книжкового фонду. Структура реляційної бази.

    контрольная работа [182,3 K], добавлен 08.03.2015

  • Електронна база даних як послідовність даних заданої структури, записана на магнітний диск комп'ютера, її типи, основні та невід'ємні властивості. Призначення та оцінка можливостей системи управління. Моделі даних та головні принципи їх функціонування.

    презентация [352,2 K], добавлен 04.12.2014

  • Аналіз об'єктів дослідження, проектування баз даних. Розробка програмного забезпечення для роботи зі спроектованою базою даних. Реалізація індексів, опис метаданих в середовищі MySQL. Специфікація DDL для MySQL, протокол тестування DDL-сценарії.

    контрольная работа [389,9 K], добавлен 05.01.2014

  • Різновиди архітектур баз даних. Архітектура "файл-сервер" і локальні бази даних. Обґрунтування вибору архітектури стосовно проектованої системи. Основні концепції мови SQL. Структура запитів до окремих таблиць. Інтерфейс користувача проектованої системи.

    дипломная работа [972,5 K], добавлен 26.10.2012

  • Розробка бази даних для автоматизації облікової інформації в системі управління базами даних Access з метою полегшення роботи з великими масивами даних, які існують на складах. Обґрунтування вибору системи управління. Алгоритм та лістинг програми.

    курсовая работа [550,9 K], добавлен 04.12.2009

  • Огляд програмного комплексу SPSS у ПАТ "Платинум Банк". Аналіз обробки результатів анкетування та ідентифікації інтересів опитаних. Система Access як інструмент управління базами даних. Метод інтеграції даних усіх типів досліджень на замовлення клієнта.

    реферат [2,5 M], добавлен 05.11.2012

  • Розробка системи управління базою даних відділу кадрів, що базується на створенні та нормалізації таблиць даних про людей та їх персональні відомості, в середовищі FoxPro. Програмна оболонка роботи пошукового процесу та слідкування за станом кадрів.

    курсовая работа [2,3 M], добавлен 04.12.2009

  • Створення бази даних аптеки готових лікарських форм для підвищення ефективності її роботи та автоматизації обробки результатів її діяльності. Обмеження при роботі з базою даних. Аналіз системних вимог. Вибір засобів розробки інформаційної системи.

    курсовая работа [477,7 K], добавлен 09.12.2013

  • Інтернет як система об'єднаних комп'ютерних мереж для зберігання і передачі інформації. Літературні джерела щодо сутності баз даних та їх функціонування. Порівняльний аналіз MySQL, Oracle та Microsoft Access. Створення бази даних за допомогою MySQL.

    курсовая работа [1,5 M], добавлен 05.02.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.