Примечание | от автора: Для создания проекта использовался компилятор Visual Studio 6, писалось на чистом win api. |
Загрузить архив: | |
Файл: ref-24072.zip (238kb [zip], Скачиваний: 56) скачать |
Российский Новый Университет
Пояснительная записка
к курсовой работе
по предмету «Программирование»
на тему:
«База данных пилотов Формулы 1».
Выполнил студент гр.424
Факультета ИСиКТ
Шнайдер Юрий Юрьевич
Руководитель: Маслянкин В.И.
Курсовая работа допущена к защите:
______________________
Москва
2006 г.
Содержание:
1.Введение. Цели и задачи курсовой работы.
2.Описание предметной области.
2.1. Постановка задачи
2.2. Объекты предметной области.
2.3. Необходимые ресурсы.
3.Разработка проекта.
3.1. Классы: свойства и методы.
3.2. Организация классов.
3.3. Интерфейс пользователя.
4.Реализация проекта.
5.Перспективы доработки программы.
1.Введение. Цели и задачи курсовой работы.
Эта программа написана для любителей гонок "формула 1". Используя её, пользователи могут найти различную информацию о пилоте, такую как количество титулов, побед, и т.п. База данных позволяет удалять пилотов и добавлять новых, а также найти пилота по определённому параметру.
2.Описание предметной области.
2.1. Постановка задачи.
Основные функции программы:
1. запоминать вводимые значения, показывать базу данных;
2. добавлять, редактировать данные;
3. осуществлять поиск в базе;
4. сортировать данные базы по запрашиваемому параметру;
5. удалять и сохранять изменения в базе;
6. сохранять всю информацию, а также иметь доступ к открытию информации.
2.2. Объекты предметной области.
Объекты принадлежащие, хранению и обработке:
struct Racer
{
string famely;
string name;
string frace;
int races;
int wons;
int pouls;
int tituls;
int blaps;
};
«famely»: фамилия гонщика. Текстовое значение.
«name»: Имя гонщика. Текстовое значение.
«frace»: Дебютная гонка в формуле 1. Текстовое значение.
«races»: Количество проведённых гонок. Цифровое значение.
«wons»: Количество побед. Цифровое значение.
«pouls»: Количество поул-позиций (первое место на старте). Цифровое значение.
«tituls»: Количество титулов чемпиона мира. Цифровое значение.
«blaps»: Количество Лучших кругов в гонке. Цифровое значение.
2.3. Необходимые ресурсы.
Для реализации проекта необходимо подключение следующих заголовочных файлов:
Так-же, необходимы следующие windows - библиотеки: “comctl32.lib” и “comdlg.lib”
3.Разработка проекта.
3.1. Классы: поля и методы.
Класс является абстрактным типом данных, определяемым пользователем, и представляет собой модель реального объекта в виде данных и функций для работы с ними.
Программа разбита на 2-а класса. 1-ый отвечает за базу данных, 2-ой за взаимодействия с ним.
Рассмотрим 1-ый класс:
class Reader
{
public:
Reader(); // Конструктор / деструкотор
~Reader();
bool open_db(const char * file); // Открытьбд
bool
save_db(const char * file,vector
void close_db(); // Закрыть бд
bool read(); // Читать БД
void new_paragraph(); // Новый параграф
string paragraph; // Имя параграфа
int loadAsInt(string name);// Загружаем параметр как целое число
string loadAsString(string name); // Загружаем параметр как строку
private:
fstream db; // Фаил бд
};
Рассмотрим 2-ойкласс:
class Application
{
public:
Application();
~Application();
bool db_load(const char *file); // Загружаембазуданных
voiddb_close(); // Закрываем базу данных
bool db_save(const char *file); // Сохраняембазуданных
voiddb_add_item(); // Добавляем новый элемент
void db_delete_item(int number); // Удаляемопределённыйэлемент
void bd_sortby(int value); // Сортировка
vector
private:
Reader reader; // Файловыйменеджер
};
3.2. Организация классов
Выбранный контейнер для хранения объектов стандартный“vector” из “vector.h”.
3.3. Интерфейс пользователя.
Интерфейс пользователя состоит из 2 основных элементов:
· - контекстного меню, посредством которого пользователь может открывать, закрывать, создавать новые базы данных, добавлять и удалять элементы БД, сортировать по всем параметрам записи и производить поиск записей по определённым параметрам.
· - основное окно, содержащее инструменты для редактирования элементов базы данных, просмотра элементов, просмотра результатов поиска и сортировки БД, а также задавать параметры поиска.
3.4. Хранение данных.
База данных содержит в начале каждой записи заголовок (параграф) "racer". После него через пробел содержатся элементы записи. Каждая запись начинается с новой строки.
4.Реализация проекта.
В качестве языка программирования используем С++. Компилятор VisualC++ версии 6.
Программа разбита на несколько файлов:
· main.cpp - реализация основных методов и классов приложения.
· main.h - описание идентификаторов меню.
· Rsrc.rc - фаил ресурсов.
"main.cpp"
#include "main.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(lib,"comctl32.lib")
using namespace std;
/* Описаниегонщика */
struct Racer
{
string famely;
string name;
string frace;
int races;
int wons;
int pouls;
int tituls;
int blaps;
};
//------------------------------------
// Файловаясистема
class Reader
{
public:
Reader(); // Конструктор / деструкотор
~Reader();
bool open_db(const char * file); // Открытьбд
bool
save_db(const char * file,vector
void close_db(); // Закрытьбд
bool read(); // ЧитатьБД
void new_paragraph(); // Новыйпараграф
string paragraph; // Имяпараграфа
int loadAsInt(string name); // Загружаемпараметры
string loadAsString(string name);
private:
fstream db; // Фаилбд
};
Reader::Reader() {}; // Конструктор / деструктор
Reader::~Reader() { db.close(); };
/* Открываембд*/
bool Reader::open_db(const char *file)
{
db.open(file);
if(!db) return false;
return true;
};
/* Сохраняем базу данных */
bool Reader::save_db(const char *
file,vector
{
ofstream save;
save.open(file,ios::trunc); // Открываемфаил
if(!save) return false;
for(int
i=0;i { save
<< "racer "; save
<< "SurName=" << racer[i].famely; save
<< " Name=" << racer[i].name; save
<< " Races=" << racer[i].races; save
<< " Wons=" << racer[i].wons; save
<< " Pouls=" << racer[i].pouls; save
<< " FirstRace=" << racer[i].frace; save
<< " Tituls=" << racer[i].tituls; save
<< " BestLaps=" << racer[i].blaps; if(i }; save.close();
// Закрываемфаил save.clear(); return
true; }; /* Закрываембд */ void Reader::close_db() { db.close(); db.clear(); }; /* Читаемпараграф */ bool Reader::read() { if(db.eof()
|| !db) return false; // Конецфайла else db
>> paragraph; return
true; }; /* Читаемчисло */ int Reader::loadAsInt(string name) // Loading As Int { string s; db
>> s; name+="="; return
atoi(s.substr(name.size(),s.size()).c_str()); }; /* Читаемстроку */ string Reader::loadAsString(string name) // Loading As
String { string s; db
>> s; name+="="; return
s.substr(name.size(),s.size()); }; /*
Переход на новый параграф */ void
Reader::new_paragraph() { db.ignore(1,'n'); }; //
---------------------------------------------------------------------------------------- //
Работа приложения class Application { public: Application(); ~Application(); bool
db_load(const char *file); // Загрузкабд void db_close(); //
Закрытьтекущую бд bool db_save(const
char *file); // Сохранитьбд void db_add_item(); //
Добавить элемент void
db_delete_item(int number); // Удалитьэлемент void bd_sortby(int
value); // Сортировать по элементу int bd_findby(int
value,string look); // Искатьвэлементе vector private: inline int
find_name(string value); // ----------------------------------------------- Reader
reader; // Файловаясистема }; Application::Application() {}; // Конструктор / деструктор Application::~Application() {}; bool Application::db_load(const char * file) { if(reader.open_db(file)) { racers.clear();
// Очищаемвектор while(reader.read()) { Racer
m_racer; m_racer.famely
= reader.loadAsString("SurName"); m_racer.name
=reader.loadAsString("Name"); m_racer.races
= reader.loadAsInt("Races"); m_racer.wons
= reader.loadAsInt("Wons"); m_racer.pouls
= reader.loadAsInt("Pouls"); m_racer.frace
= reader.loadAsString("FirstRace"); m_racer.tituls
= reader.loadAsInt("Tituls"); m_racer.blaps
= reader.loadAsInt("BestLaps"); reader.paragraph; racers.push_back(m_racer);
// Добавляемгонщикаваккумулятор }; reader.close_db();
// Закрываемфаил return
true; }; return
false; }; /* Закрываембд */ void Application::db_close() { racers.clear(); // Очищаем список
гонщиков }; /* Сохранениебд */ bool Application::db_save(const char * name) { if(!reader.save_db(name,racers))
return false; return
true; }; /* Добавитьэлемент */ void Application::db_add_item() { Racer
temp; temp.blaps
= 0; temp.famely
= "Mr.Unknown"; temp.frace
= "When?"; temp.name
= "Unknown"; temp.pouls
= 0; temp.races
= 0; temp.tituls
= 0; temp.wons
= 0; racers.push_back(temp); }; /* Удалитьэлемент */ void Application::db_delete_item(intnumber) { if(number
>= racers.size() || number<0) return; vector for(int
i=0;i racers.erase(it); }; // ----------------------------------------------- /* Сортировка */ bool sort_famely(Racer &one,Racer &two); bool sort_name(Racer &one,Racer &two); bool sort_frace(Racer &one,Racer &two); bool sort_blaps(Racer &one,Racer &two); bool sort_pouls(Racer &one,Racer &two); bool sort_races(Racer &one,Racer &two); bool sort_tituls(Racer &one,Racer &two); bool sort_wons(Racer &one,Racer &two); inline bool sort_famely(Racer &one,Racer &two) { if(one.famely
< two.famely) return true; return
false; }; inline bool sort_name(Racer &one,Racer &two) { if(one.name
< two.name) return true; return
false; }; inline bool sort_frace(Racer &one,Racer &two) { if(one.frace
< two.frace) return true; return
false; }; inline bool sort_blaps(Racer &one,Racer &two) { if(one.blaps
> two.blaps) return true; return
false; }; inline bool sort_pouls(Racer &one,Racer &two) { if(one.pouls
> two.pouls) return true; return
false; }; inline bool sort_races(Racer &one,Racer &two) { if(one.races
> two.races) return true; return
false; }; inline bool sort_tituls(Racer &one,Racer &two) { if(one.tituls
> two.tituls) return true; return
false; }; inline bool sort_wons(Racer &one,Racer &two) { if(one.wons
> two.wons) return true; return
false; }; void Application::bd_sortby(int value) { switch(value) { case 1: //
Фамилия sort(racers.begin(),racers.end(),sort_famely); return; case 2: //
Имя sort(racers.begin(),racers.end(),sort_name); return; case 3: //
Гонок sort(racers.begin(),racers.end(),sort_races); return; case 4: //
Побед sort(racers.begin(),racers.end(),sort_wons); return; case 5: //
Поулов sort(racers.begin(),racers.end(),sort_pouls); return; case 6: //
Перваягонка sort(racers.begin(),racers.end(),sort_frace); return; case 7: //
Титулов sort(racers.begin(),racers.end(),sort_tituls); return; case 8: //
Лучшихкругов sort(racers.begin(),racers.end(),sort_blaps); return; default: return; }; }; int Application::find_name(string value) { // for(int
i=0;i return 0; }; int Application::bd_findby(int value,string look) { switch(value) { case 1: //
Фамилия return
0; case 2: //
Имя return
find_name(look); case 3: //
Гонок return
0; case 4: //
Побед return
0; case 5: //
Поулов return
0; case 6: //
Перваягонка return
0; case 7: //
Титулов return
0; case 8: //
Лучшихкругов return
0; default: return
0; }; }; //
--------------------------------------------------------------------- // Программа Application app; int number; // Номертекущегоэлемента LRESULT CALLBACK WindowFunc(HWND,
UINT, WPARAM, LPARAM); char *szWinName = "MyClass"; HWND hwnd,hwndSort, hwndFind; // Окна - стандартное, сортировки, поиска HWND button_last,button_next; // Кнопки HWND edit_find,
edit_famely,edit_name,edit_races,edit_wons,edit_pouls,edit_tituls,edit_frace,edit_blaps;
// Едиты HWND text_1,text_2,text_3,text_4,text_5,text_6,text_7,text_8,text_9,text_10,text_11,text_number;
// Тексты MSG msg; WNDCLASS wcl; HMENU menu; Racer *find_racer,*find_result; void draw_sort(); void draw_sort() { char
val[5]; LVITEM lvi; ZeroMemory(&lvi, sizeof(lvi)); ListView_DeleteAllItems(hwndSort); lvi.mask = LVIF_TEXT; for(int i=0;i {
lvi.iItem = i;
lvi.iSubItem = 0;
_itoa(i+1,val,10);
lvi.pszText = val;
lvi.iItem = ListView_InsertItem(hwndSort, &lvi);
lvi.iSubItem++;
lvi.pszText = (char *) app.racers[i].famely.c_str();
ListView_SetItem(hwndSort, &lvi); };
char
text[50]; SetWindowText(edit_famely,
(char*)app.racers[number-1].famely.c_str()); SetWindowText(edit_name,
(char*)app.racers[number-1].name.c_str()); itoa(app.racers[number-1].tituls,text,10); SetWindowText(edit_tituls,
text); itoa(app.racers[number-1].wons,text,10); SetWindowText(edit_wons,
text); itoa(app.racers[number-1].pouls,text,10); SetWindowText(edit_pouls,
text); itoa(app.racers[number-1].blaps,text,10); SetWindowText(edit_blaps,
text); itoa(app.racers[number-1].races,text,10); SetWindowText(edit_races,
text); SetWindowText(edit_frace,app.racers[number-1].frace.c_str()); itoa(number,text,10); SetWindowText(text_number,text); }; void draw_find(int number, string famely); void draw_find(int number, string famely) { char
val[5]; LVITEM lvi; ZeroMemory(&lvi, sizeof(lvi)); ListView_DeleteAllItems(hwndFind); lvi.mask = LVIF_TEXT;
lvi.iItem = 0;
lvi.iSubItem = 0;
_itoa(number+1,val,10);
lvi.pszText = val;
lvi.iItem = ListView_InsertItem(hwndFind, &lvi);
lvi.iSubItem++;
lvi.pszText = (char *) famely.c_str();
ListView_SetItem(hwndFind, &lvi); }; int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE
hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { // заполнениеструктуры WNDCLASS
wcl.hInstance = hInstance;
wcl.lpszClassName = szWinName;
wcl.lpfnWndProc = WindowFunc;
wcl.style = 0;
wcl.hIcon = LoadIcon(NULL, IDI_ASTERISK);
wcl.hCursor = LoadCursor(NULL,IDC_ARROW);
wcl.lpszMenuName = NULL;
wcl.cbClsExtra = 0;
wcl.cbWndExtra = 0;
wcl.hbrBackground = (HBRUSH)COLOR_WINDOW; //регестрируем оконный
класс RegisterClass(&wcl); // Инициализация коммон контролов InitCommonControls(); //создаем главное окно и элементы
управления hwnd = CreateWindow(szWinName,
"Kursovik", WS_OVERLAPPEDWINDOW ^ WS_THICKFRAME ^ WS_MAXIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT,
500, 350, HWND_DESKTOP, NULL, hInstance, NULL); // Создаёмокносрезультатамисортировки hwndSort = CreateWindowEx(0L,
WC_LISTVIEW, "",WS_VISIBLE | WS_BORDER | WS_CHILD |LVS_REPORT,250,
30, 100, 170,hwnd, NULL, hInstance, NULL); hwndFind = CreateWindowEx(0L,
WC_LISTVIEW, "",WS_VISIBLE | WS_BORDER | WS_CHILD |LVS_REPORT,370,
30, 100, 170,hwnd, NULL, hInstance,
NULL); // Вставляем столбцы LV_COLUMNlvc; memset(&lvc,
0, sizeof(lvc)); lvc.iSubItem
= 0; lvc.mask =
LVCF_FMT | LVCF_WIDTH |LVCF_TEXT |
LVCF_SUBITEM; lvc.fmt =
LVCFMT_LEFT; lvc.iSubItem++; lvc.cx =
30; lvc.pszText
= "#"; ListView_InsertColumn(hwndSort,
lvc.iSubItem, &lvc); ListView_InsertColumn(hwndFind,
lvc.iSubItem, &lvc); lvc.iSubItem++; lvc.cx =
70; lvc.pszText
= "Famely"; ListView_InsertColumn(hwndSort,
lvc.iSubItem, &lvc); ListView_InsertColumn(hwndFind,
lvc.iSubItem, &lvc); /* Добавляемкнопки */ button_last
= CreateWindow("button", "<< Last", WS_CHILD |
WS_VISIBLE, 150, 270, 70, 25, hwnd, NULL, hInstance, NULL); button_next =
CreateWindow("button", "Next >>", WS_CHILD |
WS_VISIBLE, 250, 270, 70, 25, hwnd, NULL, hInstance, NULL); /* Едитбоксы */ edit_famely=CreateWindowEx(WS_EX_CLIENTEDGE,"edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,75,10,150,25,hwnd,NULL,hInstance,NULL); edit_name=CreateWindowEx(WS_EX_CLIENTEDGE,"edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,75,40,150,25,hwnd,NULL,hInstance,NULL); edit_tituls
=
CreateWindowEx(WS_EX_CLIENTEDGE,"edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,75,70,150,25,hwnd,NULL,hInstance,NULL); edit_wons
= CreateWindowEx(WS_EX_CLIENTEDGE,"edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,75,100,150,25,hwnd,NULL,hInstance,NULL); edit_pouls
=
CreateWindowEx(WS_EX_CLIENTEDGE,"edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,75,130,150,25,hwnd,NULL,hInstance,NULL); edit_blaps
= CreateWindowEx(WS_EX_CLIENTEDGE,"edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,75,160,150,25,hwnd,NULL,hInstance,NULL); edit_races
=
CreateWindowEx(WS_EX_CLIENTEDGE,"edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,75,190,150,25,hwnd,NULL,hInstance,NULL); edit_frace
= CreateWindowEx(WS_EX_CLIENTEDGE,"edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,75,220,150,25,hwnd,NULL,hInstance,NULL); edit_find
=
CreateWindowEx(WS_EX_CLIENTEDGE,"edit",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER,320,230,150,25,hwnd,NULL,hInstance,NULL); /* Вносимтекст */ text_1 =
CreateWindow("static","Famely",WS_CHILD|WS_VISIBLE,5,15,50,15,hwnd,NULL,hInstance,NULL); text_2 =
CreateWindow("static","Name",WS_CHILD|WS_VISIBLE,5,45,50,15,hwnd,NULL,hInstance,NULL); text_3 =
CreateWindow("static","Tituls",WS_CHILD|WS_VISIBLE,5,75,50,15,hwnd,NULL,hInstance,NULL); text_4 =
CreateWindow("static","Wons",WS_CHILD|WS_VISIBLE,5,105,50,15,hwnd,NULL,hInstance,NULL); text_5 =
CreateWindow("static","Pouls",WS_CHILD|WS_VISIBLE,5,135,50,15,hwnd,NULL,hInstance,NULL); text_6 =
CreateWindow("static","Best
laps",WS_CHILD|WS_VISIBLE,5,165,65,15,hwnd,NULL,hInstance,NULL); text_7 =
CreateWindow("static","Races",WS_CHILD|WS_VISIBLE,5,195,50,15,hwnd,NULL,hInstance,NULL); text_8 =
CreateWindow("static","First
race",WS_CHILD|WS_VISIBLE,5,225,65,15,hwnd,NULL,hInstance,NULL); text_9 =
CreateWindow("static","Sort
result:",WS_CHILD|WS_VISIBLE,250,5,75,15,hwnd,NULL,hInstance,NULL); text_10 =
CreateWindow("static","Find
result:",WS_CHILD|WS_VISIBLE,370,5,75,15,hwnd,NULL,hInstance,NULL); text_11 =
CreateWindow("static","Search:",WS_CHILD|WS_VISIBLE,260,235,60,15,hwnd,NULL,hInstance,NULL); text_number
=
CreateWindow("static","0",WS_CHILD|WS_VISIBLE,230,270,15,15,hwnd,NULL,hInstance,NULL); // отображаемиобновляемокно
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd); menu =
LoadMenu(hInstance, MAKEINTRESOURCE(ID_MENU)); SetMenu(hwnd, menu); //цикл обработки сообщений while(GetMessage(&msg,
NULL, 0, 0)) { TranslateMessage(&msg);
DispatchMessage(&msg); } return 0; }; int i=0; // оконнаяфункция LRESULT CALLBACK WindowFunc(HWND hwnd, UINT iMsg,
WPARAM wParam, LPARAM lParam) { switch(iMsg) { case
WM_DESTROY:
PostQuitMessage(0); break; case WM_COMMAND: { if(((HWND)lParam
== button_last) && (HIWORD(wParam) == BN_CLICKED))
{ if(number>1) { number--; //
Сохраняемэлемент char
text[50]; GetWindowText(edit_blaps,text,20); app.racers[number].blaps
= atoi((const char *)text); GetWindowText(edit_famely,text,20); app.racers[number].famely
= (string) text; GetWindowText(edit_frace,text,20); app.racers[number].frace
= (string) text; GetWindowText(edit_name,text,20); app.racers[number].name
= (string) text; GetWindowText(edit_pouls,text,20); app.racers[number].pouls
= atoi((const char *)text); GetWindowText(edit_races,text,20); app.racers[number].races
= atoi((const char *)text); GetWindowText(edit_tituls,text,20); app.racers[number].tituls
= atoi((const char *)text); GetWindowText(edit_wons,text,20); app.racers[number].wons
= atoi((const char *)text); //
Записываемновый SetWindowText(edit_famely,
(char*)app.racers[number-1].famely.c_str()); SetWindowText(edit_name,
(char*)app.racers[number-1].name.c_str()); itoa(app.racers[number-1].tituls,text,10); SetWindowText(edit_tituls,
text); itoa(app.racers[number-1].wons,text,10); SetWindowText(edit_wons,
text); itoa(app.racers[number-1].pouls,text,10); SetWindowText(edit_pouls,
text); itoa(app.racers[number-1].blaps,text,10); SetWindowText(edit_blaps,
text); itoa(app.racers[number-1].races,text,10); SetWindowText(edit_races,
text); SetWindowText(edit_frace,app.racers[number-1].frace.c_str()); itoa(number,text,10); SetWindowText(text_number,text); }; }; //
Кнопкадалее if(((HWND)lParam
== button_next) && (HIWORD(wParam) == BN_CLICKED))
{ if(number { number--; //
Сохраняемэлемент char
text[50]; GetWindowText(edit_blaps,text,20); app.racers[number].blaps
= atoi((const char *)text); GetWindowText(edit_famely,text,20); app.racers[number].famely
= (string) text; GetWindowText(edit_frace,text,20); app.racers[number].frace
= (string) text; GetWindowText(edit_name,text,20); app.racers[number].name
= (string) text; GetWindowText(edit_pouls,text,20); app.racers[number].pouls
= atoi((const char *)text); GetWindowText(edit_races,text,20); app.racers[number].races
= atoi((const char *)text); GetWindowText(edit_tituls,text,20); app.racers[number].tituls
= atoi((const char *)text); GetWindowText(edit_wons,text,20); app.racers[number].wons
= atoi((const char *)text); // Записываемновый number++; SetWindowText(edit_famely,
char*)app.racers[number].famely.c_str()); SetWindowText(edit_name,
(char*)app.racers[number].name.c_str()); itoa(app.racers[number].tituls,text,10); SetWindowText(edit_tituls,
text); itoa(app.racers[number].wons,text,10); SetWindowText(edit_wons,
text); itoa(app.racers[number].pouls,text,10); SetWindowText(edit_pouls,
text); itoa(app.racers[number].blaps,text,10); SetWindowText(edit_blaps,
text); itoa(app.racers[number].races,text,10); SetWindowText(edit_races,
text); SetWindowText(edit_frace,app.racers[number]. frace.c_str()); number++; itoa(number,text,10); SetWindowText(text_number,text); }; }; switch(wParam) { case
IDM_FILENEW: app.db_close(); app.db_add_item(); number=0; SetWindowText(edit_famely,
(char*)app.racers[number].famely.c_str()); SetWindowText(edit_name,
(char*)app.racers[number].name.c_str()); char text[50]; itoa(app.racers[number].tituls,text,10); SetWindowText(edit_tituls,
text); itoa(app.racers[number].wons,text,10); SetWindowText(edit_wons, text); itoa(app.racers[number].pouls,text,10); SetWindowText(edit_pouls,
text); itoa(app.racers[number].blaps,text,10); SetWindowText(edit_blaps,
text); itoa(app.racers[number].races,text,10); SetWindowText(edit_races,
text); SetWindowText(edit_frace,app.racers[number] .frace.c_str()); number++; itoa(number,text,10); SetWindowText(text_number,text); return
0; case
IDM_FILEOPEN: // Открываемфаилбазыданных number=1; app.db_close(); //
Хакрываем базу данных OPENFILENAME ofn; char
szFile[260]; //
Initialize OPENFILENAME ZeroMemory(&ofn,
sizeof(ofn)); ofn.lStructSize
= sizeof(ofn); ofn.hwndOwner
= hwnd; ofn.lpstrFile
= szFile; ofn.lpstrFile[0]
= '