};
save.close(); // Закрываем фаил
save.clear();
return true;
/* Закрываем бд */
void Reader::close_db()
{
db.close();
db.clear();
/* Читаем параграф */
bool Reader::read()
;
/* Читаем число */
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
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<Racer> racers; // Гонщики
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 false;
void Application::db_close()
racers.clear(); // Очищаем список гонщиков
/* Сохранение бд */
bool Application::db_save(const char * name)
if(!reader.save_db(name,racers)) return false;
/* Добавить элемент */
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(int number)
if(number >= racers.size() ;
/* Сортировка */
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;
inline bool sort_name(Racer &one,Racer &two)
if(one.name < two.name) return true;
inline bool sort_frace(Racer &one,Racer &two)
if(one.frace < two.frace) return true;
inline bool sort_blaps(Racer &one,Racer &two)
if(one.blaps > two.blaps) return true;
inline bool sort_pouls(Racer &one,Racer &two)
if(one.pouls > two.pouls) return true;
inline bool sort_races(Racer &one,Racer &two)
if(one.races > two.races) return true;
inline bool sort_tituls(Racer &one,Racer &two)
if(one.tituls > two.tituls) return true;
inline bool sort_wons(Racer &one,Racer &two)
if(one.wons > two.wons) return true;
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);
case 3: // Гонок
sort(racers.begin(),racers.end(),sort_races);
case 4: // Побед
sort(racers.begin(),racers.end(),sort_wons);
case 5: // Поулов
sort(racers.begin(),racers.end(),sort_pouls);
case 6: // Первая гонка
sort(racers.begin(),racers.end(),sort_frace);
case 7: // Титулов
sort(racers.begin(),racers.end(),sort_tituls);
case 8: // Лучших кругов
sort(racers.begin(),racers.end(),sort_blaps);
default:
int Application::find_name(string value)
// for(int i=0;i<racers.size();i++) vec[i] = racers[i].name;
return 0;
int Application::bd_findby(int value,string look)
return find_name(look);
// ---------------------------------------------------------------------
// Программа
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<app.racers.size();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());
Страницы: 1, 2, 3, 4, 5