МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
КИЇВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
БУДІВНИЦТВА І АРХІТЕКТУРИ
Кафедра інформаційних технологій
КУРСОВА РОБОТА
З ДИСЦИПЛІНИ
“Об’єктно-орієнтоване програмування”
за темою: «Розробка програми продажу путівок туристичної агенції» _
Виконали студенти ІІ курсу факультету АІТ
спеціальності ІУСТ
_ Кулеба Микола Борисович _
(прізвище, ім’я, по батькові)
_ Коротун Владислав Володимирович _
(прізвище, ім’я, по батькові)
Керівник роботи: Буюклі О. Є. _
(прізвище, ініціали)
Київ – 2013
ЗМІСТ
Завдання до індивідуальної роботи 3
UML - діаграма прецедентів 4
UML – Діаграма класів 5
UML - Діаграма компонентів 6
UML - діаграма послідовностей 7
Опис класів 9
Опис прецедентів 11
Опис програмного інтерфейсу користувача 13
Тестовий приклад 16
Текст програми 19
Unit1.cpp 19
Unit1.h 25
Список використаної літератури 29
Завдання до індивідуальної роботи
Розробка програми продажу путівок туристичної агенції (2 частини)
Основні класи:
1) тур-агент (назва, країна, місто, список фото, категорія («зірочки»), список тур-агентів.
2) путівка (тур-агент, дата, тривалість, кількість осіб), список путівок.
Основні функції:
1) ведення списку тур-агентів, пошук тур-агентів за різними ознаками, ведення довідників категорій, країн, міст.
2) ведення списку путівок, пошук путівки за різними ознаками.
UML - діаграма прецедентів
користувач
UML – Діаграма класів
Agent
Voucher
String name, country, city, stars, photo
String StartDate, agent
int duration, persons
Agent(void)
void GetData(TStrings *s)
void GetData(String *gn, String *gco,
String *gci, String *gs, String *gph)
Voucher(void)
void GetData(TStrings *s)
void GetData(String *sd, int *dur, int *pers, String *ag)
AgentList
VoucherList
__fastcall ~AgentList()
void AddAgent(String nname, String ncountry, String ncity, String nstars, String nphoto)
void DelAgent(int i)
bool GoodStars(String nstars)
voidFillStringGrid(TStringGrid* SG)
FillComboBox(TComboBox* CB)
__fastcall ~VoucherList()
void AddVoucher(String ndate, int nduration, int npersons, String nagent)
void DelVoucher(int i){
FillStringGrid(TStringGrid* SG)
TList
TList
Capacity()
Count()
Items[]
Add()
Delete()
Pack()
Move()
Exchange()
Capacity()
Count()
Items[]
Add()
Delete()
Pack()
Move()
Exchange()
UML - Діаграма компонентів
UML - діаграма послідовностей
Voucher VoucherList
AddVoucher()
Додавання
GoodStars()
Create()
Add()
Return()
Delete()
Видалення
self-call()
return()
рух по
элементам
списку
Пошук
return()
FillStringGrid()
Відображення
FillComboBox()
return()
Voucher VoucherList
AddVoucher()
Додавання
Create()
Add()
Return()
Delete()
Видалення
self-call()
return()
рух по
элементам
списку
Пошук
return()
FillStringGrid()
Відображення
return()
Опис класів
class TList – призначений для створення класу – контейнеру
class Agent:
поля:
name – ім’я партнеру
country – країна
city – місто
stars – кількість зірок
photo – фотографія
методи:
Agent(void) – конструктор
void GetData(TStrings *s) – метод для отримання доступу до даних
void GetData(String *gn, String *gco, String *gci, String *gs, String *gph) – метод для отримання доступу до даних
class AgentList : public TList
методи:
__fastcall ~AgentList() – деструктор
void AddAgent(String nname, String ncountry, String ncity, String n stars, String nphoto) – метод для внесення агенту до списку
void DelAgent(int i) – метод для видалення агенту
bool GoodStars(String nstars) – метод, що перевіряє, чи правильно введено «зірки»
void FillStringGrid(TStringGrid* SG) – метод, що заповнює таблицю зі списком агентів
void FillComboBox(TComboBox* CB) – метод, що заповнює «випадаючий» список з назвами агентів
class Voucher:
поля:
StartDate – дата початоку путівки
agent – назва тур-агенту
duration – кількість ночей
persons – кількість людей
методи:
Voucher(void) – конструктор
void GetData(TStrings *s) – метод для отримання доступу до даних
void GetData(String *sd, int *dur, int *pers, String *ag) – метод для отримання доступу до даних
class VoucherList:
методи:
__fastcall ~VoucherList() – деструктор
void AddVoucher(String ndate, int nduration, int npersons, String nagent) – метод для додавання путівок до списку
void DelVoucher(int i) – видалення путівки зі списку
void FillStringGrid(TStringGrid* SG) – метод для заповнення таблиці зі списком путівок
Опис прецедентів
Прецедент «Запуск програми»
Типовий хід подій
Дії користувача
Відгук програми
Запуск
Список агентів і путівок(пустий)
Натиснули «зчитування з файлу»
Заповнились списки агентів і путівок
Прецедент «Додавання агента»
Типовий хід подій
Дії користувача
Відгук програми
Натиснули «додати агента»
Відкрилась форма додавання агента
Ввели дані, натиснули «додати»
Агента додано
Прецедент «Додавання агента»
Альтернативний хід подій
Дії користувача
Відгук програми
Ввели не правильні дані
Виведено повідомлення про неправильність даних
Прецедент «Пошук агента»
Типовий хід подій
Дії користувача
Відгук програми
Натиснули «пошук агента»
Відкрилась форма пошуку агента
Ввели дані(один критерій), натиснули «знайти»
Виведено інформацію по агенту
Прецедент «Пошук агента»
Альтернативний хід подій
Дії користувача
Відгук програми
Ввели більше одного критерію
Виведено повідомлення про те, що потрібно робити пошук по одному критерію
Прецедент «Видалення агента»
Типовий хід подій
Дії користувача
Відгук програми
Ввели дані в поле «назва», натиснули «видалити»
Агента видалено
Прецедент «Видалення агента»
Альтернативний хід подій
Дії користувача
Відгук програми
Ввели щось, крім назви
Виведено повідомлення про те, що потрібно вводити тільки назву агента
Прецедент «Додавання путівки»
Типовий хід подій
Дії користувача
Відгук програми
Натиснули «додати путівку»
Відкрилась форма додавання путівки
Ввели дані, натиснули «додати»
Путівку додано
Прецедент «Додавання путівки»
Альтернативний хід подій
Дії користувача
Відгук програми
3. Ввели не правильні дані
4. Виведено повідомлення про неправильність даних
Прецедент «Пошук путівки»
Типовий хід подій
Дії користувача
Відгук програми
Натиснули «пошук путівки»
Відкрилась форма пошуку путівки
Ввели дані(один критерій), натиснули «знайти»
Виведено інформацію по агенту
Прецедент «Пошук путівки»
Альтернативний хід подій
Дії користувача
Відгук програми
3. Ввели більше одного критерію
4. Виведено повідомлення про те, що потрібно робити пошук по одному критерію
Прецедент «Видалення путівки»
Типовий хід подій
Дії користувача
Відгук програми
Ввели дані в поле «кількість людей» або «тривалість», натиснули «видалити»
Путівку видалено
Прецедент «Видалення агента»
Альтернативний хід подій
Дії користувача
Відгук програми
1. Ввели більше одного критерію
2. Виведено повідомлення про те, що потрібно вводити або «кількість людей», або «тривалість»
Прецедент «Вихід з програми»
Типовий хід подій
Дії користувача
Відгук програми
Натиснули «закрити програму»
Програма закрилась
Опис програмного інтерфейсу користувача
/
TStringGrid TMainMenu TRadioBox
/
TButton TLabledEdit TRadioBox
TDateTimePicker TComboBox
Рис. 7. Опис візуальних об’єктів інтерфейсу
/
TButton TMainMenu TRadioBox TLabledEdit
Тестовий приклад/
Рис. 9. Тестовий приклад
Завантаження даних з файлу по натисненні кнопки «Загрузить из файла». Відображення списків тур-агентів і путівок.
/
Рис. 10. Тестовий приклад
Додавання тур-агента та путівки. Переключились на форми по додаванню, заповнили інформацію та натиснули «Добавить».
/
Рис. 11. Тестовий приклад
Форми пошуку та видалення. Ввели дані та знайшли путівку і тур агента. Видалення робиться в такий же спосіб.
Текст програми
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#define PATH "c:\\OOP_CW\\"
TForm1 *Form1;
AgentList *AL = new AgentList();
VoucherList *VL = new VoucherList();
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
SetVisibilty(0);
StringGrid1->Rows[0]->Clear();
StringGrid1->Rows[0]->Add("Название");
StringGrid1->Rows[0]->Add("Страна");
StringGrid1->Rows[0]->Add("Город");
StringGrid1->Rows[0]->Add("Класс (*)");
StringGrid1->Rows[0]->Add("Фото");
SetVisibilty(3);
StringGrid2->Rows[0]->Clear();
StringGrid2->Rows[0]->Add("Дата");
StringGrid2->Rows[0]->Add("Длительность");
StringGrid2->Rows[0]->Add("Кол-во ч.");
StringGrid2->Rows[0]->Add("Тур-агент");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TForm1::SetVisibilty(int id)
{
//Агенты
if(id==0)
{
GroupBox5->Visible=true;
AL->FillStringGrid(StringGrid1);
GroupBox6->Visible=false;
GroupBox7->Visible=false;
}
else if(id==1)
{
GroupBox5->Visible=false;
GroupBox6->Visible=true;
GroupBox7->Visible=false;
}
else if(id==2)
{
GroupBox5->Visible=false;
GroupBox6->Visible=false;
GroupBox7->Visible=true;
}
//путевки
else if(id==3)
{
VL->FillStringGrid(StringGrid2);
GroupBox8->Visible=true;
GroupBox9->Visible=false;
GroupBox10->Visible=false;
}
else if(id==4)
{
GroupBox8->Visible=false;
GroupBox9->Visible=true;
AL->FillComboBox(ComboBox1);
GroupBox10->Visible=false;
}
else if(id==5)
{
GroupBox8->Visible=false;
GroupBox9->Visible=false;
AL->FillComboBox(ComboBox1);
// AL->FillComboBox(ComboBox2);
GroupBox10->Visible=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
if(RadioGroup1->ItemIndex==0)
{
SetVisibilty(0);
}
else if(RadioGroup1->ItemIndex==1)
{
SetVisibilty(1);
}
else if(RadioGroup1->ItemIndex==2)
{
SetVisibilty(2);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AL->AddAgent(LabeledEdit1->Text, LabeledEdit2->Text, LabeledEdit3->Text,
LabeledEdit4->Text, LabeledEdit5->Text);
AL->FillStringGrid(StringGrid1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
bool finded = false;
if(LabeledEdit6->Text=="" && LabeledEdit7->Text=="" && LabeledEdit8->Text=="" && LabeledEdit9->Text==""){
Label1->Font->Color=clRed;
Label1->Caption="Введите критерии\n для поиска!";
Label1->Visible=true;
}
else if(LabeledEdit6->Text!="" && LabeledEdit7->Text=="" && LabeledEdit8->Text=="" && LabeledEdit9->Text==""){
for(int i = 0; i < AL->Count; i++)
{
Agent* p = (Agent*)(AL->Items[i]);
if(p->name==LabeledEdit6->Text)
{
Label1->Font->Color=clBlack;
Label1->Caption="Название: "+p->name
+"\nСтрана: "+p->country
+"\nГород: "+p->city
+"\nКласс (*): "+p->stars
+"\nФото: "+p->photo;
Label1->Visible=true;
finded = true;
}
}
if(!finded){
Label1->Font->Color=clRed;
Label1->Caption="Не найдено!";
Label1->Visible=true;
}
}else if(LabeledEdit7->Text!="" && LabeledEdit6->Text=="" && LabeledEdit8->Text=="" && LabeledEdit9->Text==""){
Label1->Caption="Список агентов:\n";
for(int i = 0; i < AL->Count; i++)
{
Agent* p = (Agent*)(AL->Items[i]);
if(p->country==LabeledEdit7->Text)
{
Label1->Font->Color=clBlack;
Label1->Caption=Label1->Caption+"\n"+p->name;
Label1->Visible=true;
finded = true;
}
}
if(!finded){
Label1->Font->Color=clRed;
Label1->Caption="Не найдено!";
Label1->Visible=true;
}
}else if(LabeledEdit8->Text!="" && LabeledEdit6->Text=="" && LabeledEdit7->Text=="" && LabeledEdit9->Text==""){
Label1->Caption="Список агентов:\n";
for(int i = 0; i < AL->Count; i++)
{
Agent* p = (Agent*)(AL->Items[i]);
if(p->city==LabeledEdit8->Text)
{
Label1->Font->Color=clBlack;
Label1->Caption=Label1->Caption+"\n"+p->name;
Label1->Visible=true;
finded = true;
}
}
if(!finded){
Label1->Font->Color=clRed;
Label1->Caption="Не найдено!";
Label1->Visible=true;
}
}else if(LabeledEdit9->Text!="" && LabeledEdit6->Text=="" && LabeledEdit7->Text=="" && LabeledEdit8->Text==""){
Label1->Caption="Список агентов:\n";
for(int i = 0; i < AL->Count; i++)
{
Agent* p = (Agent*)(AL->Items[i]);
if(p->stars==LabeledEdit9->Text)
{
Label1->Font->Color=clBlack;
Label1->Caption=Label1->Caption+"\n"+p->name;
Label1->Visible=true;
finded = true;
}
}
if(!finded){
Label1->Font->Color=clRed;
Label1->Caption="Не найдено!";
Label1->Visible=true;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
bool finded = false;
if(LabeledEdit6->Text=="" && LabeledEdit7->Text=="" && LabeledEdit8->Text=="" && LabeledEdit9->Text==""){
Label1->Font->Color=clRed;
Label1->Caption="Введите критерии\n для поиска!";
Label1->Visible=true;
}
else if(LabeledEdit6->Text!="" && LabeledEdit7->Text=="" && LabeledEdit8->Text=="" && LabeledEdit9->Text==""){
for(int i = 0; i < AL->Count; i++)
{
Agent* p = (Agent*)(AL->Items[i]);
if(p->name==LabeledEdit6->Text)
{
Label1->Font->Color=clBlack;
Label1->Caption="Агент " + p->name + " удален!";
AL->DelAgent(i);
AL->FillStringGrid(StringGrid1);
Label1->Visible=true;
finded = true;
}
}
if(!finded){
Label1->Font->Color=clRed;
Label1->Caption="Не найдено!";
Label1->Visible=true;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
//агенты
String FilePath1 = PATH;
FilePath1 += "AgentList.txt";
fstream file1(FilePath1.c_str(), fstream::in);
if(file1.is_open())
{
while(!file1.eof())
{
char name[100], country[100], city[100], stars[100], photo[100];
file1 >> name >> country >> city >> stars >> photo;
AL->AddAgent(name, country, city, stars, photo);
AL->FillStringGrid(StringGrid1);
}
}
file1.close();
//путевки
String FilePath2 = PATH;
FilePath2 += "VoucherList.txt";
fstream file2(FilePath2.c_str(), fstream::in);
if(file2.is_open())
{
while(!file2.eof())
{
char date[100], agent[100];
int duration, persons;
file2 >> date >> duration >> persons >> agent;
VL->AddVoucher(date, duration, persons, agent);
VL->FillStringGrid(StringGrid2);
}
}
file2.close();
N3->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
Image1->Picture->Bitmap->SetSize(0,0);
String ImgPath = PATH;
ImgPath+="Images//"+StringGrid1->Cells[4][StringGrid1->Selection.Top]+".png";
TPngImage *png = new TPngImage();
png->LoadFromFile(ImgPath);
Image1->Picture->Bitmap->SetSize(70+160,120);
Image1->Picture->Bitmap->Canvas->Draw(70,0,png);
delete png;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioGroup2Click(TObject *Sender)
{
if(RadioGroup2->ItemIndex==0)
{
SetVisibilty(3);
}
else if(RadioGroup2->ItemIndex==1)
{
SetVisibilty(4);
}
else if(RadioGroup2->ItemIndex==2)
{
SetVisibilty(5);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
VL->AddVoucher(DateTimePicker1->Date.DateString(), StrToInt(LabeledEdit11->Text), StrToInt(LabeledEdit10->Text), ComboBox1->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
bool finded = false;
if(LabeledEdit12->Text=="" && LabeledEdit13->Text==""/* && ComboBox2->Text==""*/){
Label3->Font->Color=clRed;
Label3->Caption="Введите критерии\n для поиска!";
Label3->Visible=true;
}
else if(LabeledEdit12->Text!="" && LabeledEdit13->Text==""/* && ComboBox2->Text==""*/){
for(int i = 0; i < VL->Count; i++)
{
Voucher* p = (Voucher*)(VL->Items[i]);
if(p->persons==StrToInt(LabeledEdit12->Text))
{
Label3->Font->Color=clBlack;
Label3->Caption="Список путевок:\n";
Label3->Caption=Label3->Caption+"\nДата: "+p->StartDate
+"\nДлительность: "+p->duration
+"\nКол-во человек: "+p->persons
+"\nАгент: "+p->agent;
Label3->Visible=true;
finded = true;
}
}
if(!finded){
Label3->Font->Color=clRed;
Label3->Caption="Не найдено!";
Label3->Visible=true;
}
}else if(LabeledEdit13->Text!="" && LabeledEdit12->Text==""/* && ComboBox2->Text==""*/){
Label3->Caption="Список путевок:\n";
for(int i = 0; i < VL->Count; i++)
{
Voucher* p = (Voucher*)(VL->Items[i]);
if(p->duration==StrToInt(LabeledEdit13->Text))
{
Label3->Font->Color=clBlack;
Label3->Caption=Label3->Caption+"\nДата: "+p->StartDate
+"\nДлительность: "+p->duration
+"\nКол-во человек: "+p->persons
+"\nАгент: "+p->agent;
Label3->Visible=true;
finded = true;
}
}
if(!finded){
Label3->Font->Color=clRed;
Label3->Caption="Не найдено!";
Label3->Visible=true;
}
}/*else if(ComboBox2->Text!="" && LabeledEdit12->Text=="" && LabeledEdit13->Text==""){
Label3->Caption="Список путевок:\n";
for(int i = 0; i < VL->Count; i++)
{
Voucher* p = (Voucher*)(AL->Items[i]);
if(p->agent==ComboBox2->Text)
{
Label3->Font->Color=clBlack;
Label3->Caption=Label3->Caption+"\nДата: "+p->StartDate
+"\nДлительность: "+p->duration
+"\nКол-во человек: "+p->persons
+"\nАгент: "+p->agent;
Label3->Visible=true;
finded = true;
}
}*/
if(!finded){
Label3->Font->Color=clRed;
Label3->Caption="Не найдено!";
Label3->Visible=true;
// }
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
bool finded = false;
if(LabeledEdit12->Text=="" && LabeledEdit13->Text==""){
Label3->Font->Color=clRed;
Label3->Caption="Введите критерии\n для поиска!";
Label3->Visible=true;
}
else if(LabeledEdit12->Text!="" && LabeledEdit13->Text==""){
Label3->Caption="";
for(int i = 0; i < VL->Count; i++)
{
Voucher* p = (Voucher*)(VL->Items[i]);
if(p->persons==StrToInt(LabeledEdit12->Text))
{
Label3->Font->Color=clBlack;
Label3->Caption=Label3->Caption+"Путевка удалена!";
VL->DelVoucher(i);
VL->FillStringGrid(StringGrid2);
Label3->Visible=true;
finded = true;
}
}
}else if(LabeledEdit13->Text!="" && LabeledEdit12->Text==""){
Label3->Caption="";
for(int i = 0; i < VL->Count; i++)
{
Voucher* p = (Voucher*)(VL->Items[i]);
if(p->duration==StrToInt(LabeledEdit13->Text))
{
Label3->Font->Color=clBlack;
Label3->Caption=Label3->Caption+"Путевка удалена!";
VL->DelVoucher(i);
VL->FillStringGrid(StringGrid2);
Label3->Visible=true;
finded = true;
}
}
}
if(!finded){
Label3->Font->Color=clRed;
Label3->Caption="Не найдено!";
Label3->Visible=true;
}
}
//---------------------------------------------------------------------------
Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
#include <Grids.hpp>
#include <pngimage.hpp>
#include <Mask.hpp>
#include <ComCtrls.hpp>
#include <fstream>
#include <string>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TGroupBox *GroupBox1;
TGroupBox *GroupBox2;
TGroupBox *GroupBox3;
TGroupBox *GroupBox4;
TMainMenu *MainMenu1;
TMenuItem *N2;
TMenuItem *N3;
TGroupBox *GroupBox5;
TImage *Image1;
TRadioGroup *RadioGroup1;
TStringGrid *StringGrid1;
TGroupBox *GroupBox6;
TLabeledEdit *LabeledEdit1;
TLabeledEdit *LabeledEdit2;
TLabeledEdit *LabeledEdit3;
TLabeledEdit *LabeledEdit4;
TLabeledEdit *LabeledEdit5;
TButton *Button1;
TGroupBox *GroupBox7;
TLabeledEdit *LabeledEdit6;
TLabeledEdit *LabeledEdit7;
TLabeledEdit *LabeledEdit8;
TLabeledEdit *LabeledEdit9;
TButton *Button2;
TLabel *Label1;
TButton *Button3;
TRadioGroup *RadioGroup2;
TGroupBox *GroupBox8;
TStringGrid *StringGrid2;
TGroupBox *GroupBox9;
TDateTimePicker *DateTimePicker1;
TComboBox *ComboBox1;
TButton *Button4;
TLabel *Label2;
TLabeledEdit *LabeledEdit10;
TLabeledEdit *LabeledEdit11;
TGroupBox *GroupBox10;
TLabeledEdit *LabeledEdit12;
TLabeledEdit *LabeledEdit13;
TButton *Button5;
TLabel *Label3;
TButton *Button6;
void __fastcall N2Click(TObject *Sender);
void __fastcall RadioGroup1Click(TObject *Sender);
void __fastcall SetVisibilty(int id);
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button3Click(