id
|
model
|
number
|
owner
|
cid
|
did
|
“ model ”- модель автомобиля
“ number ”- номер автомобиля
“ owner ”- имя владельца автомобиля
“ cid ”- индефикатор стоянки, в котором стоит автомобиль
“ did ”- индефикатор района, в котором стоит автомобиль
4.
Диаграмма классов
5 Описание классов.
Далее приводится описание 4 основных классов проекта,
предназначенных для работы с базой данных, остальные являются стандартными и
предназначены для отображения информации.
5.1 CColumn
Класс предназначен для задания типов столбцов таблицы.
class CColum
{
string
name; // Название поля
unsigned
int length; // Длина поля
(совпадает с индефикатором типа)
bool autoit; //
Ключ. Показывает, нужно ли автоувеличение
public:
// Конструктор принимает название поля и его тип
CColumn(string&ss,unsigned int len);
// Конструктор принимает название поля,его тип и ключ автоувеличения.
CColumn(string&ss,unsigned int len,int aa);
bool
isauto(); // Являтся ли
поле автоувеличивающися
string&getname(); // Возвращает имя поля
unsigned int gettype(); //
Возвращает тип поля
};
Следует отметить, что автоувеличение применяется только к
целым типам.
5.2 СRecord
Класс
предназначен для хранения одной ячкейки базы данных. Агрегируется только
классом Row.
class СRecord
{
string
name; // Название поля
string
data; // Данные
unsigned
int type; // Тип поля
public:
void
setname(string&nam); // Установить имя поля
void
setdata(string&dat); // Установить данне
void
settype(unsigned int&typ); // Установить тип
string&getname(); //
Получить имя поля
string&getdata(); // Получить данные
unsigned int gettype(); // Получить тип
};
5.3 CRow
Класс предназначен для хранения и строк данных,
полученных в результате поиска
данных или внесения изменений в таблицу.
class CRow
{
vector<CRecord>rec; //
Вектор ячеек строке
int
flag; // Флаг для оператора
присваивания ( временное хранение )
string name; //
Имя для оператора присваивания ( временное хранение )
unsigned int type; //
Тип для оператора присваивания ( временное хранение )
public:
CRow(); //
Конструктор
void reset(); //
Обнуляет строку
void setrow(vector<CRecord>&v); //
Вводит строку в виде ячеек
vector<CRecord>&getrow(); // Вводит строку в виде ячеек
string operator[](string ss); // Возвращает значение по ключу
int operator()(string ss); // Возвращает тип по ключу
// Первая часть составного оператора присваивания
Row&operator()(string
ss,unsigned int typ);
// Вторая часть составного оператора присваивания
void
operator=(string dat);
};
5.4 CTable
Основной класс проектов. Предназначен для создания
интерфейса работы с базой данных. Позволяет создавать базу с любым количеством
столбцов, добавлять, удалять, изменять, искать по точной строке и части строки.
class CTable
{
vector<CColum>
types; // Информацию о
типах
string filename;
// Название файла, с которым идёт работа
fpos_t startdata;
// Начало области данных в файле
int getfullsize();
// Возвращает длину строки
CTable(string&filename); // Конструктор принимает название
файла
Is(); //
Проверяет существование базы
vector<CColumn>
GetCap(); // Возвращает информацию
о типах
int getrows(); //
Возвращает число строк
// Создание базы. Принимает вектор столбцов. Если будет более одного
автоувеличивающе-
// гося столбца, то она применится только к первому
bool
CreateTable(vector<CColumn>&type);
bool
AddRow(CRow&rr); //Добавляет строку
// Осуществляет поиск данных по точному совпадению строки
// Запись, найденных значений идёт в массив finded
void GetStr(vector<CRow>&finded,string
nam,string dat);
// Осуществляет поис данных по вхождению строки
// Запись, найденных значений идёт в массив finded
void GetCmp(vector<CRow>&finded,string
nam,string dat)
bool
DeleteData(string nam,string dat); // Удаляет строку при точном совпадением
// Изменяет строку c ключом nam и значением dat на rr.
bool ChangeData(CRow&rr,string nam,string dat);
};
6 Алгоритм по шагам
6.1 CTable(string&filename)
1. Сохранения значения переменной filename во внутренней переменной класса filename.
2. Проверка существования файла filename.
3. Если файл существует, то считать информацию о полях
таблицы, начале данных, текущее автоувеличение.
6.2 CTable::AddRow(CRow&rr)
1. Открытие файла, заданного в переменной filename и занесение индефикатора файла в FILE*file.
2. Запись текущего автоувеличения, увеличенного на 1.
3. Смещения в конец файла file.
4. Запись введённой строки rr.
6.3
CTable::GetCmp(vector<CRow>&finded,string nam,string dat)
1. Открытие файла, заданного в переменной filename и занесение индефикатора файла в FILE*file.
2. Смещение на начало данных.
3. Считывание строки из файла и занесение в CRow ww.
4. Сравнение ww[“nam”] и dat.
5. Если совпадает, то добавить строку в vector<CRow> finded.
6. Если не совпадают, то перейти на пункт 2 (повторить,
пока не будет достигнут конец файла).
6.4 CTable::ChangeData(CRow&rr,string nam,string
dat)
1. Открытие файла, заданного в переменной filename и занесение индефикатора файла в FILE*file.
2. Смещение на начало данных.
3. Считывание строки из файла и занесение в CRow ww.
4. Сравнение ww[“nam”] и dat.
5. Если совпадают, то сместиться на начало считанной
строки и записать строку rr.
6. Если не совпадает, то перейти на пункт 2(повторить,
пока не будет достигнут конец файла).
6.5 CTable::DeleteData(string nam,string dat)
1. Открытие файла, заданного в переменной filename и занесение индефикатора в FILE*file.
2. Смещение на начало данных.
3. Считывание строки из файла и занесение в CRow ww.
4. Сравнение ww[“nam”] и dat.
5. Если совпадают, то считать следующую и записать на
месте предыдущей
( действие повторяется, пока не будет конец файла)
6. Файл уменьшить на одну строку.
7. Если строки в пункте 4 не совпали, то перейти на пункт
2(повторить, пока не будет достигнут конец файла).
6.6 CTable::Is()
1. Открытие файла, заданного в переменной filename и занесение индефикатора в FILE*file.
2. Считывание информации по адресу 0x00 в buf
3. Если содержимое buf не равно ‘AM’, то вернуть false.
4. Считывание содержимого по адресу 0x02 в buf
5. Если содержимое равно 0, то вернуть false
6. Вернуть true;
7 Листинг
программы
8 Результат работы программы
Программа предназначена для учёта автомобилей на стоянках
города, организованных по районам. Программа позволяет:
- Добавлять/изменять/удалять
названия районов
- Добавлять/изменять/удалять
названия стоянок
- Добавлять/изменять/удалять названия марок автомобилей
- Добавлять/изменять/удалять данные о автомобиле
- Осуществлять поиск автомобилей по владельцу, марке, номеру
- Осуществлять поиск автомобилей на конкретной стоянке, районе или
по всем стоянкам города
- Для удобства работы предусмотрена подсказка.
Рис 1. Общий вид программы
Рис 2. Окно для поиска автомобилей.
Рис 3. Окно для редактирования списка стоянок
9 Заключение
Для работы программы необходимо выполнение следующих
требований:
Минимальные требования:
- процессор Intel 200 МГц;
- оперативная память 64 Мб;
- WINDOWS 95/98/NT.
Запрещается:
-нарушать структуру файлов;
10.Литература.
1.
MSDN Library – техническая справка для
разработчиков программного обеспечения. – MicroSoft Corp.,
2004.
2.
Ю. Тихомиров - «Самоучитель MFC». - БХВ-Петербург, 2002г.
3.
Е. Демидович – «Основы алгоритмизации и
программирования на си». - Бестпринт, 2003.
4.
Б. Страуструп – «Язык программирования C++». – Бином, 2004.