Примечание | от редактора: Автор стесняется назвать своё настоящее имя и правильный адрес E-mail |
Загрузить архив: | |
Файл: ref-25743.zip (338kb [zip], Скачиваний: 106) скачать |
Содержание:
1. Введение 2
2. Постановка задачи 3
3. Структура выходных и входных данных 4
4. Диаграмма классов 5
5. Описание основных классов 6
5.1 CColum 6
5.2 СRecord 7
5.3 СRow 8 9
5.4 CTable 9
6. Алгоритмпо шагам 9
6.1 CTable(string&filename) 9
6.2 CTable::AddRow(CRow&rr) 9
6.3
CTable::GetCmp(vector
6.4 CTable::ChangeData(CRow&rr,string nam,string dat) 9
6.5 CTable::DeleteData(string nam,string dat) 9
6.6 CTable::Is() 10
7. Листинг программы 11
8. Результат работы программы 49
9. Заключение 51
10. Литература 52
1.Введение
Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько "близок к машине", что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. С таким умыслом первоначально задумывался C. Второй цели идеально отвечает язык, который настолько "близок к решаемой задаче", чтобы концепции ее решения можно было выражать прямо и коротко. С таким умыслом предварительно задумывались средства, добавленные к C для создания C++.
Связь между языком, на котором мы думаем/программируем, и задачами и решениями, которые мы можем представлять в своем воображении, очень близка. По этой причине ограничивать свойства языка только целями исключения ошибок программиста в лучшем случае опасно. Как и в случае с естественными языками, есть огромная польза быть по крайней мере двуязычным. Язык предоставляет программисту набор концептуальных инструментов; если они не отвечают задаче, то их просто игнорируют. Например, серьезные ограничения концепции указателя заставляют программиста применять вектора и целую арифметику, чтобы реализовать структуры, указатели и т.п. Хорошее проектирование и отсутствие ошибок не может гарантироваться чисто за счет языковых средств.
Cистема типов должна быть особенно полезна в нетривиальных задачах. Действительно, концепция классов в C++ показала себя мощным концептуальным средством.
2.Постановка задачи
Написать информационную систему по учёту автомобилей. Организовать автостоянки по районам. Осуществлять поиск автомобилей на конкретной автостоянке и по всем автостоянкам по владельцу, по номеру автомобиля, по марке автомобиля.
Добавление, удаление автомобилей со стоянок.
Для реализации поставленной задачи используется система классов, организующая интерфейс работы с базой данных: добавления, удаления, изменения и получения записей, хранящихся в, базе данных.
3. Структура выходных и входных данных
Программа использует 4 файла для хранения информации о районах, стоянках, автомобилях и марках машин. Каждый из файлов имеет структуру, представленную ниже:
Смещение в файле |
Описание |
0х00 |
Индефикатор файла ( “AM” ) |
0х02 |
Количество столбцов |
0х03 |
Номер автоувеличивающегося столбца |
0х04 |
Номер последнего автоувеличения |
0x06 |
Описание полей базы (размер, название) |
Область с данными (информация о длине берётся из описания полей). |
Для хранения информации о марках машин используется файл models.bas. Структура файла представлена ниже:
id |
model |
“id”- индефикатор марки машины
“model ”- название марки машины
Для хранения информации о районах используется файл districts.bas. Структура файла представлена ниже:
id |
district |
“id”- индефикатор района
“district”- название района
Для хранения информации о стоянках используется файл stations.bas. Структура файла представлена ниже:
id |
station |
sid |
“id”- индефикатор стоянки
“station”- название стоянки
“sid”- индефикатор района, к которому принадлежит стоянка
. Для хранения информации о автомобилях используется файл cars.bas. Структура файла представлена ниже:
id |
model |
number |
owner |
cid |
did |
“id”- индефикатор автомобиля
“ model ”- модель автомобиля
“ number ”- номер автомобиля
“ owner ”- имя владельца автомобиля
“ cid ”- индефикатор стоянки, в котором стоит автомобиль
“ did ”- индефикатор района, в котором стоит автомобиль
4. Диаграмма классов
5 Описание классов.
Далее приводится описание 4 основных классов проекта, предназначенных для работы с базой данных, остальные являются стандартными и предназначены для отображения информации.
5.1 CColumn
Класс предназначен для задания типов столбцов таблицы.
class CColum
{
string name; // Названиеполя
unsignedintlength; // Длина поля (совпадает с индефикатором типа)
boolautoit; // Ключ. Показывает, нужно ли автоувеличение
public:
// Конструктор принимает название поля и его тип
CColumn(string&ss,unsigned int len);
// Конструктор принимает название поля,его тип и ключ автоувеличения.
CColumn(string&ss,unsigned int len,int aa);
boolisauto(); // Являтся ли поле автоувеличивающися
string&getname(); // Возвращает имя поля
unsignedintgettype(); // Возвращает тип поля
};
Следует отметить, что автоувеличение применяется только к целым типам.
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
intflag; //Флаг для оператора присваивания ( временное хранение )
stringname; //Имя для оператора присваивания ( временное хранение )
unsignedinttype; // Тип для оператора присваивания ( временное хранение )
public:
CRow(); // Конструктор
voidreset(); // Обнуляет строку
voidsetrow(vector
vector
stringoperator[](stringss); // Возвращает значение по ключу
int operator()(string ss); // Возвращаеттиппо ключу
// Первая часть составного оператора присваивания
Row&operator()(stringss,unsignedinttyp);
// Вторая часть составного оператора присваивания
void operator=(string dat);
};
5.4 CTable
Основной класс проектов. Предназначен для создания интерфейса работы с базой данных. Позволяет создавать базу с любым количеством столбцов, добавлять, удалять, изменять, искать по точной строке и части строки.
classCTable
{
vector
stringfilename; // Название файла, с которым идёт работа
fpos_tstartdata; // Начало области данных в файле
intgetfullsize(); // Возвращает длину строки
public:
CTable(string&filename); // Конструктор принимает название файла
Is(); // Проверяет существование базы
vector
intgetrows(); // Возвращает число строк
// Создание базы. Принимает вектор столбцов. Если будет более одного автоувеличивающе-
// госястолбца, то она применится только к первому
bool CreateTable(vector
bool AddRow(CRow&rr); //Добавляетстроку
// Осуществляет поиск данных по точному совпадению строки
// Запись, найденных значений идёт в массив finded
void GetStr(vector
// Осуществляет поис данных по вхождению строки
// Запись, найденных значений идёт в массив finded
void GetCmp(vector
boolDeleteData(stringnam,stringdat); //Удаляет строку при точном совпадением
// Изменяет строку 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
1. Открытие файла, заданного в переменной filename и занесение индефикатора файла в FILE*file.
2. Смещение на начало данных.
3. Считывание строки из файла и занесение в CRowww.
4. Сравнение ww[“nam”] и dat.
5. Если совпадает, то добавить строку в vector
6. Если не совпадают, то перейти на пункт 2 (повторить, пока не будет достигнут конец файла).
6.4 CTable::ChangeData(CRow&rr,string nam,string dat)
1. Открытие файла, заданного в переменной filename и занесение индефикатора файла в FILE*file.
2. Смещение на начало данных.
3. Считывание строки из файла и занесение в CRowww.
4. Сравнение ww[“nam”] и dat.
5. Если совпадают, то сместиться на начало считанной строки и записать строку rr.
6. Если не совпадает, то перейти на пункт 2(повторить, пока не будет достигнут конец файла).
6.5 CTable::DeleteData(string nam,string dat)
1. Открытие файла, заданного в переменной filename и занесение индефикатора в FILE*file.
2. Смещение на начало данных.
3. Считывание строки из файла и занесение в CRowww.
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.MSDNLibrary – техническая справка для разработчиков программного обеспечения. – MicroSoftCorp., 2004.
2.MFC». - БХВ-Петербург, 2002г.
3.
4.C++». – Бином, 2004.