База данных пилотов Формулы 1

Реферат - Компьютеры, программирование

Другие рефераты по предмету Компьютеры, программирование

.

 

 

 

 

 

 

4.Реализация проекта.

 

В качестве языка программирования используем С++. Компилятор Visual C++ версии 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 racer); // Сохранить бд

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 racer)

{

ofstream save;

save.open(file,ios::trunc); // Открываем фаил

if(!save) return false;

 

for(int i=0;i<racer.size();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<racer.size()-1) save << endl;

};

 

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 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 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(int number)

{

=racers.size()||number= racers.size() || number<0) return;

 

::iteratorit=racers.begin();">vector::iterator it = racers.begin();

for(int i=0;i<number;i++) ++it;

 

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;<