Скачайте в формате документа WORD

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

Российский Новый ниверситет





Пояснительная записка

к курсовой работе

по предмету Программирование

на тему:

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

{

int blaps;

};


л

л

л

лraces: Количество проведённых гонок. Цифровое значение.

л

л

л

л

2.3.         Необходимые ресурсы.


Для реализации проекта необходимо подключение следующих заголовочных файлов:

<stdlib.h> , <algorithm>, <fstream>, <string>, <iostream>, <vector>, <commctrl.h>, <commdlg.h>.

Так-же, необходимы следующие

3. Разработка проекта.


3.1.         Классы: поля и методы.

Класс является абстрактным типом данных, определяемым пользователем, и представляет собой модель реального объекта в виде данных и функций для работы с ними.

Программа разбита на 2-а класса. 1-ый отвечает за базу данных, 2-ой за взаимодействия с ним.


Рассмотрим 1-ый класс:


class Reader

{

public:

Reader(); // Конструктор / деструкотор

<~Reader();





private:

};






Рассмотрим 2-ой класс:

class Application

{

public:

Application();

~Application();





private:

Reader reader; // Файловый менеджер

};


3.2.         Организация классов


Выбранный контейнер для хранения объектов стандартныйа УvectorФ из Уvector.hФ.


3.3.         Интерфейс пользователя.


Интерфейс пользователя состоит из 2 основных элементов:

        <- контекстного меню, посредством которого пользователь может открывать, закрывать, создавать новые базы данных, добавлять и далять элементы БД, сортировать по всем параметрам записи и производить поиск записей по определённым параметрам.

        <- основное окно, содержащее инструменты для редактирования элементов базы данных, просмотра элементов, просмотра результатов поиска и сортировки БД, также задавать параметры поиска.


3.4.         Хранение данных.


База данных содержит в начале каждой записи заголовок (параграф) "racer". После него через пробел содержатся элементы записи. Каждая запись начинается с новой строки.




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


В качестве языка программирования используем С++. Компилятор Visual C++ версии 6.


Программа разбита на несколько файлов:

        

        

         Rsrc.rc - фаил ресурсов.


"

#include "main.h"

#include <windows.h>


#include <stdlib.h>

#include <algorithm>

#include <fstream>

#include <string>

#include <iostream>

#include <vector>

#include <commctrl.h>

#include <commdlg.h>

#pragma comment(lib,"comctl32.lib")


using namespace std;






/* Описание гонщика */

struct Racer

{

};



//------------------------------------

// Файловая система


class Reader

{

public:

Reader(); // Конструктор / деструкотор

<~Reader();





private:

};


Reader::Reader() {}; // Конструктор / деструктор

Reader::~Reader() { db.close(); };


/* Открываем бда */

bool Reader::open_db(const char *file)

{

аdb.open(file);

return true;

};


/* Сохраняем базу данных */

bool Reader::save_db(const char * file,vector<Racer> racer)

{


<{

<};


return true;

};


/* Закрываем бд */

void Reader::close_db()

{

db.close();

db.clear();

};


/* Читаем параграф */

bool Reader::read()

{


return true;

};


/* Читаем число */

int Reader::loadAsInt(string name) // Loading As Int

{

db >> s;


return atoi(s.substr(name.size(),s.size()).c_str());

};


/* Читаем строку */

string Reader::loadAsString(string name) // Loading As String

{

db >> s;


return s.substr(name.size(),s.size());

};


/* Переход на новый параграф */

void Reader::new_paragraph()

{

db.ignore(1,'\n');

};


// ----------------------------------------------------------------------------------------

// Работа приложения


class Application

{

public:

Application();

<~Application();





private:


// ----------------------------------------------Reader reader; // Файловая система

};


Application::Application() {}; // Конструктор / деструктор

Application::~Application() {};


bool Application::db_load(const char * file)

{

<{

racers.clear(); // Очищаем вектор

<{

Racer m_racer;

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)

{


return true;

};


/* Добавить элемент */

void Application::db_add_item()

{

Racer temp;

racers.push_back(temp);

};


/* далить элемент */

void Application::db_delete_item(intа

{


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)

{

return false;

};


inline bool sort_name(Racer &one,Racer &two)

{

return false;

};


inline bool sort_frace(Racer &one,Racer &two)

{

return false;

};


inline bool sort_blaps(Racer &one,Racer &two)

{

return false;

};


inline bool sort_pouls(Racer &one,Racer &two)

{

return false;

};


inline bool sort_races(Racer &one,Racer &two)

{

return false;

};


inline bool sort_tituls(Racer &one,Racer &two)

{

return false;

};


inline bool sort_wons(Racer &one,Racer &two)

{

return false;

};


void Application::bd_sortby(int value)

{

<{

return;

return;

return;

return;

return;

return;

return;

return;

default:

return;

<};

};


int Application::find_name(string value)

{


//

return 0;


};


int Application::bd_findby(int value,string look)

{

<{

return 0;

return find_name(look);



return 0;


return 0;


return 0;


return 0;


return 0;


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

{

LVITEM lvi;

ZeroMemory(&lvi, sizeof(lvi));

ListView_DeleteAllItems(hwndSort);



<{

<_itoa(i+1,val,10);


ListView_SetItem(hwndSort, &lvi);

<};

SetWindowText(edit_famely, (char*)app.racers[number-1].famely.c_str());

SetWindowText(edit_name, (char*)app.racers[number-1].name.c_str());

SetWindowText(edit_tituls, text);

SetWindowText(edit_wons, text);

SetWindowText(edit_pouls, text);

SetWindowText(edit_blaps, text);

SetWindowText(edit_races, text);

SetWindowText(edit_frace,app.racers[number-1].frace.c_str());

SetWindowText(text_number,text);

};


void draw_find(int number, string famely);

void draw_find(int number, string famely)

{

LVITEM lvi;

ZeroMemory(&lvi, sizeof(lvi));

ListView_DeleteAllItems(hwndFind);



<_itoa(number+1,val,10);


ListView_SetItem(hwndFind, &lvi);

};


int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

{


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



ListView_InsertColumn(hwndSort, lvc.iSubItem, &lvc);

ListView_InsertColumn(hwndFind, lvc.iSubItem, &lvc);

а

ListView_InsertColumn(hwndSort, lvc.iSubItem, &lvc);

ListView_InsertColumn(hwndFind, lvc.iSubItem, &lvc);


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




ShowWindow(hwnd, nCmdShow);

UpdateWindow(hwnd);


SetMenu(hwnd, menu);


<{

TranslateMessage(&msg);

DispatchMessage(&msg);

<}


return 0;

};


int i=0;

// оконная функция

LRESULT CALLBACK WindowFunc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

{

switch(iMsg)

<{


<{

if(((HWND)lParam == button_last) && (HIWORD(wParam) == BN_CLICKED))

<{

<{

GetWindowText(edit_blaps,text,20);

app.racers[number].blaps = atoi((const char *)text);

GetWindowText(edit_famely,text,20);

GetWindowText(edit_frace,text,20);

GetWindowText(edit_name,text,20);

GetWindowText(edit_pouls,text,20);

GetWindowText(edit_races,text,20);

GetWindowText(edit_tituls,text,20);

GetWindowText(edit_wons,text,20);


SetWindowText(edit_famely, (char*)app.racers[number-1].famely.c_str());

SetWindowText(edit_name, (char*)app.racers[number-1].name.c_str());

SetWindowText(edit_tituls, text);

SetWindowText(edit_wons, text);

SetWindowText(edit_pouls, text);

SetWindowText(edit_blaps, text);

SetWindowText(edit_races, text);

SetWindowText(edit_frace,app.racers[number-1].frace.c_str());

SetWindowText(text_number,text);

<};

<};


if(((HWND)lParam == button_next) && (HIWORD(wParam) == BN_CLICKED))

<{

<{

GetWindowText(edit_blaps,text,20);

GetWindowText(edit_famely,text,20);

GetWindowText(edit_frace,text,20);

GetWindowText(edit_name,text,20);

GetWindowText(edit_pouls,text,20);

GetWindowText(edit_races,text,20);

GetWindowText(edit_tituls,text,20);

GetWindowText(edit_wons,text,20);


SetWindowText(edit_famely, char*)app.racers[number].famely.c_str());

SetWindowText(edit_name, (char*)app.racers[number].name.c_str());

SetWindowText(edit_tituls, text);

SetWindowText(edit_wons, text);

SetWindowText(edit_pouls, text);

SetWindowText(edit_blaps, text);

SetWindowText(edit_races, text);

SetWindowText(edit_frace,app.racers[number].

frace.c_str());

SetWindowText(text_number,text);

<};

<};


<{

SetWindowText(edit_famely, (char*)app.racers[number].famely.c_str());

SetWindowText(edit_name, (char*)app.racers[number].name.c_str());

SetWindowText(edit_tituls, text);

SetWindowText(edit_pouls, text);

SetWindowText(edit_blaps, text);

SetWindowText(edit_races, text);

SetWindowText(edit_frace,app.racers[number]

.frace.c_str());

SetWindowText(text_number,text);


return 0;



OPENFILENAME ofn;

ZeroMemory(&ofn, sizeof(ofn));


<{

<{

SetWindowText(edit_famely, (char*)app.racers[0].famely.c_str());

SetWindowText(edit_name, (char*)app.racers[0].name.c_str());

SetWindowText(edit_tituls, text);

SetWindowText(edit_wons, text);

SetWindowText(edit_pouls, text);

SetWindowText(edit_blaps, text);

SetWindowText(edit_races, text);

SetWindowText(edit_frace,app.racers[0].frace.c_str());

SetWindowText(text_number,text);

<}

elseа MessageBox(hwnd,"Error: Can not open file. File do not exist or damage!","Error!",NULL);

<};


return 0;


<{

MessageBox(hwnd,"Ups! You can not save empty data base! Ai-ai-ai!!!","Ups!",0);

return 0;

<};

GetWindowText(edit_blaps,text,20);

GetWindowText(edit_famely,text,20);

GetWindowText(edit_frace,text,20);

GetWindowText(edit_name,text,20);

GetWindowText(edit_pouls,text,20);

GetWindowText(edit_races,text,20);

GetWindowText(edit_tituls,text,20);

GetWindowText(edit_wons,text,20);


ZeroMemory(&ofn, sizeof(ofn));


<{

MessageBox(hwnd,"Error! Can not save data base!","Save error!",NULL);

<};

return 0;



<{

MessageBox(hwnd,"Error! Can not delete empty data base!","Delete error!",NULL);

return 0;

<};

SetWindowText(edit_famely, (char*)app.racers[0].famely.c_str());

SetWindowText(edit_name, (char*)app.racers[0].name.c_str());

SetWindowText(edit_tituls, text);

SetWindowText(edit_wons, text);

SetWindowText(edit_pouls, text);

SetWindowText(edit_blaps, text);

SetWindowText(edit_races, text);

SetWindowText(edit_frace,app.racers[0].frace.c_str());

SetWindowText(text_number,text);


return 0;


<{

MessageBox(hwnd,"Auch! Can not add element in empty data base!","Khm. Little error...",NULL);

<};


return 0;



<{

MessageBox(hwnd,"Sorry, but data base is empty.","! Nothung for sort",NULL);

return 0;

<};

draw_sort();

return 0;



<{

MessageBox(hwnd,"Sorry, but data base is empty.","! Nothung for sort",NULL);

return 0;

<};

draw_sort();

return 0;



<{

MessageBox(hwnd,"Sorry, but data base is empty.","! Nothung for sort",NULL);

return 0;

<};

draw_sort();

return 0;



<{

MessageBox(hwnd,"Sorry, but data base is empty.","! Nothung for sort",NULL);

return 0;

<};

draw_sort();

return 0;



<{

MessageBox(hwnd,"Sorry, but data base is empty.","! Nothung for sort",NULL);

return 0;

<};

draw_sort();

return 0;



<{

MessageBox(hwnd,"Sorry, but data base is empty.","! Nothung for sort",NULL);

return 0;

<};

draw_sort();

return 0;



<{

MessageBox(hwnd,"Sorry, but data base is empty.","! Nothung for sort",NULL);

return 0;

<};

draw_sort();

return 0;



<{

MessageBox(hwnd,"Sorry, but data base is empty.","! Nothung for sort",NULL);

return 0;

<};

draw_sort();

return 0;


GetWindowText(edit_find,text,20);

SetWindowText(edit_find, "");

if(app.racers[i].famely==(string)text) draw_find(i,app.racers[i].famely);

return 0;


GetWindowText(edit_find,text,20);

SetWindowText(edit_find, "");

if(app.racers[i].name==(string)text) draw_find(i,app.racers[i].famely);

return 0;


GetWindowText(edit_find,text,20);

SetWindowText(edit_find, "");

if(app.racers[i].frace==(string)text) draw_find(i,app.racers[i].famely);

return 0;


GetWindowText(edit_find,text,20);

SetWindowText(edit_find, "");

if( (string) itoa(app.racers[i].tituls,text2,10)==(string) text) draw_find(i,app.racers[i].famely);

return 0;


GetWindowText(edit_find,text,20);

SetWindowText(edit_find, "");

if( (string) itoa(app.racers[i].wons,text2,10)==(string) text) draw_find(i,app.racers[i].famely);

return 0;


GetWindowText(edit_find,text,20);

SetWindowText(edit_find, "");

if( (string) itoa(app.racers[i].pouls,text2,10)==(string) text) draw_find(i,app.racers[i].famely);

return 0;


GetWindowText(edit_find,text,20);

SetWindowText(edit_find, "");

if( (string) itoa(app.racers[i].blaps,text2,10)==(string) text) draw_find(i,app.racers[i].famely);

return 0;


GetWindowText(edit_find,text,20);

SetWindowText(edit_find, "");

if( (string) itoa(app.racers[i].races,text2,10)==(string) text) draw_find(i,app.racers[i].famely);

return 0;


MessageBox(hwnd,"Kursovaya. 3 semestr.","About",0);


default:

return 0;

<};

default:

return DefWindowProc(hwnd, iMsg, wParam, lParam);

<}

}

return 0;

}


"main.h"


#ifndef MAIN_H

#define MAIN_H


#define ID_MENU 501


#define IDM_FILENEW 200

#define IDM_FILEOPEN 201

#define IDM_FILESAVEAS 203

#define IDM_FILEEXIT 207


#define IDM_ADD 210

#define IDM_DELETE 211


#define IDM_SORT_NAME 300

#define IDM_SORT_FAMELY 301

#define IDM_SORT_TITULS 302

#define IDM_SORT_WONS 303

#define IDM_SORT_POULS 304

#define IDM_SORT_BLAPS 305

#define IDM_SORT_RACES 306

#define IDM_SORT_FRACE 307


#define IDM_FIND_NAME 400

#define IDM_FIND_FAMELY 401

#define IDM_FIND_TITULS 402

#define IDM_FIND_WONS 403

#define IDM_FIND_POULS 404

#define IDM_FIND_BLAPS 405

#define IDM_FIND_RACES 406

#define IDM_FIND_FRACE 407


#define IDM_HELPABOUT 218


#endif


"Rsrc.rc"


500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "kursovik.ico"

#include <windows.h>

#include "main.h"


501 MENU

BEGIN

BEGIN

MENUITEM "&New", IDM_FILENEW

MENUITEM "&Open...", IDM_FILEOPEN

MENUITEM "Save &as...", IDM_FILESAVEAS

MENUITEM SEPARATOR

MENUITEM "E&xit", IDM_FILEEXIT

END


BEGIN

MENUITEM "&Add element", IDM_ADD

MENUITEM "&Delete element", IDM_DELETE

END


BEGIN

MENUITEM "&By name", IDM_SORT_NAME

MENUITEM "&By famely", IDM_SORT_FAMELY

MENUITEM "&By tituls", IDM_SORT_TITULS

MENUITEM "&By wons", IDM_SORT_WONS

MENUITEM "&By pouls", IDM_SORT_POULS

MENUITEM "&By best laps", IDM_SORT_BLAPS

MENUITEM "&By races", IDM_SORT_RACES

MENUITEM "&By first race", IDM_SORT_FRACE

END


BEGIN

MENUITEM "&By name", IDM_FIND_NAME

MENUITEM "&By famely", IDM_FIND_FAMELY

MENUITEM "&By tituls", IDM_FIND_TITULS

MENUITEM "&By wons", IDM_FIND_WONS

MENUITEM "&By pouls", IDM_FIND_POULS

MENUITEM "&By best laps", IDM_FIND_BLAPS

MENUITEM "&By races", IDM_FIND_RACES

MENUITEM "&By first race", IDM_FIND_FRACE

END


BEGIN

MENUITEM "&About...", IDM_HELPABOUT

END

END










5. Перспективы доработки.


В дальнейшем доработка алгоритмов сортировки, поиска. Доработка интерфейса

пользователя. Доработка или полностью перестроение структуры базы данных.