Постановка задачі
Даний курсовий проект присвячений розробці програмного продукту для клубу кінологів.
Для кожної з собаки необхідно зберігати таку інформацію:
кличка;
порода;
вік;
вид собаки;
дата тренування;
послуги.
Клуб кінологів можуть відвідувати такі види собак:
декоративні;
бійцівські;
службові.
Для кожного з видів собак потрібно реалізувати певні послуги. Так, наприклад, для декоративних собак можна запропонувати відвідування перукаря, манікюр тощо, для бійцівських собак можна назначити графік тренування і обрати тренера, для службових собак можна обрати напрямок підготовки та графік проведення тренувань.
Слід реалізувати такі операції:
введення інформації про собак та збереження її у файлі;
вивід інформації;
редагування та вилучення інформації про собак;
пошук собак за кличкою і за породою;
сортування інформації за різними полями.
Для реалізації поставленої задачі було обрано середовище Borland C++.
Опис програмного продукту
Діаграми класів.
Діаграми дій.
Опис класів та методів.
При розробці даного курсового проекту було розроблено наступні класи:
клас Avto_base – базовий клас;
клас Avto – похідний клас від Avto_base;
клас Bus – похідний клас від Avto;
клас Truck – похідний клас від Avto;
класс DBF для робот из файлами.
Розглянемо детальніше дані і методи цих класів.
Клас Avto_base призначений для збереження загальної інформації про автомобіль. Він містить такі дані:
Nomer типу AnsiString – для збереження номерного знаку авто;
Marka типу AnsiString – для збереження марки авто;
Colir типу AnsiString – для збереження кольору авто;
Vodiy типу AnsiString – для збереження інформації про водія;
Data типу AnsiString – для збереження дати відвідування мийки;
Chas типу AnsiString – для збереження часу відвідування мийки.
Всі дані цього класу мають рівень доступу protected.
Для роботи з даними цього класу були розроблені відповідні set-методи та get-методи. Set-методи встановлюють необхідне значення для відповідного даного класу, а get-методи відповідно повертають це значення.
Клас Avto_base містить наступні методи:
AnsiString Avto_Base::getNomer() {return Nomer;}
AnsiString Avto_Base::getVodiy() {return Vodiy;}
AnsiString Avto_Base::getMarka(){return Marka;}
AnsiString Avto_Base::getColir(){return Colir;}
AnsiString Avto_Base::getData(){return Data;}
AnsiString Avto_Base::getChas(){return Chas;}
void Avto_Base::setNomer(AnsiString a){Nomer=a;};
void Avto_Base::setMarka(AnsiString a){Marka=a;};
void Avto_Base::setColir(AnsiString a){Colir=a;};
void Avto_Base::setVodiy(AnsiString a){Vodiy=a;};
void Avto_Base::setData(AnsiString a){Data=a;};
void Avto_Base::setChas(AnsiString a){Chas=a;};
Клас Avto є похідним від класу Avto _Base і призначений для збереження інформації про послуги легкових автомобілів. Він містить такі дані:
Moyka типу bool – містить значення true у випадку, коли водій замовляє мийку, і false в іншому випадку;
Vosk типу bool – призначений для послуги воскування кузова;
Poliruvannya типу bool – призначений для послуги полірування кузова;
Salon типу bool- призначений для послуги хімчистки салону.
Описані вище поля також мають рівень доступу protected.
Для роботи з цими полями було створено відповідні set-методи і get-методи:
bool Avto::getMoyka(){return Moyka;};
bool Avto::getVosk(){return Vosk;};
bool Avto::getPoliruvannya(){return Poliruvannya;};
bool Avto::getSalon(){return Salon;};
void Avto::setMoyka(bool f){Moyka=f;};
void Avto::setVosk(bool f){Vosk=f;};
void Avto::setPolir(bool f){Poliruvannya=f;};
void Avto::setSalon(bool f){Salon=f;};
При записі даних у файл для кожного з типів авто використовуються так звана «мітка». Для легкових авто вона є «1.», для автобусів «2.», а для вантажівок «3.». Для цього кожен з класів про авто містить метод getType(), який і повертає цю мітку. Для класу Avto цей метод має вигляд:
int Avto::getType(){return 1;};
Для запису інформації про легковий автомобіль і його послуги призначений метод Add(), параметром для якого є назва файлу. Він має такий протип: void Add(AnsiString name_file);
Робота з файлами реалізована за допомогою бібліотеки fstream.h.
Файлова змінна для запису описується відповідно ofstream f;
відкривається файл для запису за допомогою методу
open(<назва файлу>, ios::app), запис у файл здійснюється за допомогою оператора f<<endl<<(дані, що записуються у файл).
Для розрахунку вартості послуг, що надає автомийка даному авто, розроблено метод
double calcPrice();
Відповідно для розрахунку тривалості послуг розроблено метод
double calcTime();
В цих методах використовуються дані, що заносяться в масиви PriceList[3][5] та TimeList[3][5], що містять тарифи на послуги для кожного з типів авто та тривалість виконання відповідних послуг. Для занесення даних в ці масиви призначена функція
setPriceTimeList(double mas_p[3][5], double mas_t[3][5]).
Розглянемо клас Bus. Він є похідним від Avto і має таку структуру:
class Bus:public Avto
{
public:
int getType();
void Add(AnsiString name_file);
double calcPrice();
double calcTime();
};
Тут перевизначено методи getType(), Add(), calcPrice() та CalcTime().
Клас Truck є похідним від класу Avto і призначений для роботи з вантажівками. Він має схожу структуру з класом Bus, але в ньому добавлено дане MoykaPr і відповідно методи bool getMoykaPr()i void setMoykaPr(bool f).
Тепер розглянемо клас DBF, який призначений для роботи з файлом бази даних. Він має таку структуру:
class DBF
{private:
AnsiString Name_file;
public:
int Print(Truck rez[100]);
void Delete(AnsiString nomer);
int Search_product(AnsiString x, Truck *rez);
void setName_file(AnsiString a);
AnsiString getName_file();
};
Поле Name_file призначене для збереження назви файлу. В даному проекті цей текстовий файл має ім’я «baza.txt».
Відповідно для встановлення імені файлу та отримання назви файлу призначені методи setName_file(AnsiString a) і getName_file().
Також клас містить метод int Print(Truck rez[100]), який читає файл та заносить інформацію в масив rez[100] об’єктів Truck. Цей метод повертає кількість записів у файлі.
Метод Delete(AnsiString nomer) призначений для вилучення автомобіля з файлу за його номерним знаком.
Відповідно метод int Search_product(AnsiString x, Truck *rez) призначений для пошуку автомобіля у файлі за його номерним знаком. Результуючий набір записів заноситься в масив rez об’єктів Truck. Повертає цей метод кількість записів, що відповідають умові пошуку.
Всі описані вище класи оформлені у вигляді бібліотеки «Avto_Base» і розміщені у файлах «Avto_Base.h» і «Avto_Base.cpp», тексти яких наведені в додатку.