РоссийскийНовый Университет
Пояснительнаязаписка
к курсовой работе
по предмету «Программирование»
на тему:
«База данных пилотов Формулы 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
{
stringfamely;
stringname;
stringfrace;
intraces;
intwons;
intpouls;
inttituls;
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-ый класс:
classReader
{
public:
Reader(); // Конструктор / деструкотор
~Reader();
boolopen_db(const char * file); // Открыть бд
boolsave_db(const char * file,vectorracer); // Сохранитьбд
voidclose_db(); // Закрытьбд
boolread(); // ЧитатьБД
voidnew_paragraph(); // Новыйпараграф
stringparagraph; // Имяпараграфа
intloadAsInt(string name); // Загружаемпараметркакцелоечисло
stringloadAsString(string name); // Загружаемпараметркакстроку
private:
fstream db;// Фаилбд
};
Рассмотрим 2-ой класс:
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); // Сортировка
vectorRacer>racers; // База данныых на основе вектора
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
{
stringfamely;
string name;
string frace;
int races;
int wons;
int pouls;
int tituls;
int blaps;
};
//------------------------------------
// Файловая система
class Reader
{
public:
Reader();// Конструктор / деструкотор
~Reader();
boolopen_db(const char * file); // Открыть бд
boolsave_db(const char * file,vectorracer); // Сохранить бд
voidclose_db(); // Закрыть бд
boolread(); // Читать БД
voidnew_paragraph(); // Новый параграф
stringparagraph; // Имя параграфа
intloadAsInt(string name); // Загружаем параметры
stringloadAsString(string name);
private:
fstreamdb; // Фаил бд
};
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,vectorracer)
{
ofstreamsave;
save.open(file,ios::trunc);// Открываем фаил
if(!save)return false;
for(inti=0;iЗаписываем данные
{
save
save
save
save
save
save
save
save
save
if(i
};
save.close();// Закрываем фаил
save.clear();
returntrue;
};
/* Закрываем бд */
void Reader::close_db()
{
db.close();
db.clear();
};
/* Читаем параграф */
bool Reader::read()
{
if(db.eof()|| !db) return false; // Конец файла
else db>> paragraph;
returntrue;
};
/* Читаем число */
int Reader::loadAsInt(string name) // Loading As Int
{
string s;
db>> s;
name+="=";
returnatoi(s.substr(name.size(),s.size()).c_str());
};
/* Читаем строку */
string Reader::loadAsString(string name) // Loading AsString
{
string s;
db>> s;
name+="=";
returns.substr(name.size(),s.size());
};
/*Переход на новый параграф */
voidReader::new_paragraph()
{
db.ignore(1,'n');
};
//----------------------------------------------------------------------------------------
//Работа приложения
class Application
{
public:
Application();
~Application();
booldb_load(const char *file); // Загрузка бд
void db_close(); //Закрыть текущую бд
bool db_save(constchar *file); // Сохранить бд
void db_add_item(); //Добавить элемент
voiddb_delete_item(int number); // Удалить элемент
void bd_sortby(intvalue); // Сортировать по элементу
int bd_findby(intvalue,string look); // Искать в элементе
vectorracers; // Гонщики
private:
inline intfind_name(string value);
// -----------------------------------------------
Readerreader; // Файловая система
};
Application::Application() {}; // Конструктор / деструктор
Application::~Application() {};
bool Application::db_load(const char * file)
{
if(reader.open_db(file))
{
racers.clear();// Очищаем вектор
while(reader.read())
{
Racerm_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();// Закрываем фаил
returntrue;
};
returnfalse;
};
/* Закрываем бд */
void Application::db_close()
{
racers.clear(); // Очищаем списокгонщиков
};
/* Сохранение бд */
bool Application::db_save(const char * name)
{
if(!reader.save_db(name,racers))return false;
returntrue;
};
/* Добавить элемент */
void Application::db_add_item()
{
Racertemp;
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() || number
vector::iteratorit = racers.begin();
for(inti=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)
{