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