База данных пилотов Формулы 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;<