Е. Работа всех функций должна быть проверена и результаты проверки оформлены протоколом тестирования.
2. Назначение.
Основным назначением программного продукта является осуществление работы с данными о бытовой техники.
Пользователю предоставляются возможности:
просмотр информации о элементах бытовой техники;
добавление данных о элементах бытовой техники;
чтение данных из файла;
сохранение данных в файл;
сортировка элементов по стоимости;
сравнение предметов интерьера по стоимости.
3. Требования к программе.
4.1. Требования к функциональным характеристикам.
Программа должна включать в себя:
1. Иерархию родственных типов, корневой класс которой абстрактный базовый класс - класс интерфейс, для моделирования предметной области "Бытовая техника". Абстрактные классы используются в качестве обобщенных концепций, на основе которых можно создавать более конкретные производные классы. Невозможно создать объект типа абстрактного класса; однако можно использовать указатели и ссылки на типы абстрактного класса. Класс, содержащий хотя бы одну чисто виртуальную функцию, считается абстрактным. Классы, производные от абстрактного класса, должны реализовать все его чисто виртуальные функции, иначе они также будут абстрактными классами.
2. Реализацию файлового ввода/вывода и ввод данных с клавиатуры, вывод данных на дисплей. Файловый ввод-вывод позволяет считывать данные из множества различных файлов, и выводить их в другие (или те же) файлы; для каждого класса создается свой файл, в который построчно записываются данные объектов этого класса. Ввод данных с клавиатуры осуществляется при заполнении соответствующих полей и нажатии на кнопку, при этом вызывается конструктор с параметрами для создания объектов класса. Вывод данных на дисплей осуществляется с помощью отложенного метода класса интерфейса.
3. Обработку исключительных ситуаций, ошибки при вводе данных. Обработка исключений - это механизм, позволяющий двум независимо разработанным программным компонентам взаимодействовать в аномальной ситуации, называемой исключением. При вводе некорректной информации (ввод чисел вместо букв) вывод сообщения об ошибке.
4. Реализацию функции обработки данных (сортировка и поиск по полю "Название", перегруженная оператор сравнения на равенство по полю "Цена"). Перегрузка операторов - один из способов реализации полиморфизма, заключающийся в возможности одновременного существования в одной области видимости нескольких различных вариантов применения оператора, имеющих одно и то же имя, но различающихся типами параметров, к которым они применяются.
4.2. Требования к надежности.
Обработка исключительных ситуаций - механизм языков программирования, предназначенный для описания реакции программы на ошибки времени выполнения и другие возможные проблемы (исключения), которые могут возникнуть при выполнении программы и приводят к невозможности (бессмысленности) дальнейшей отработки программой её базового алгоритма.
Для надежной работы программы должны быть реализованы обработчики исключительных ситуаций.
Добавление элемента с некорректными данными (вместо букв введены цифры или наоборот). При этом выводится сообщение об ошибке.
Добавление пустого элемента (заполнены не все поля). При этом выводится сообщение об ошибке. Для корректного добавления необходимо заполнить все поля.
4.3. Требования к составу и параметрам технических средств.
Система предназначена для работы на IBM-совместимых персональных компьютерах с ОС Windows 98/ME/2000/XP/Vista/7/8.
Минимальная конфигурация:
- тип процессора PentiumIII / PentiumIV;
- объем оперативного запоминающего устройства 16 Мб и более;
объем свободного места на жестком диске 5 Мб.
Для работы программы требуются внешние устройства - монитор, клавиатура, мышь.
4.4. Требования к информационной и программной совместимости.
Программа будет разработана на языке C++ в среде C++ Builder 6 и должна работать под управлением операционной системы семейства Windows (Windows 98/ME/2000/XP/Vista/7/8). Дополнительного программного обеспечения для функционирования программы не требуется.
5. Требования к программной документации.
Программная документация будет содержать:
· расчетно-пояснительную записку;
· текст программы;
· руководство пользователя.
6. Стадии и этапы разработки.
Таблица П1.1.
Этапы разработки
|
Этапы разработки |
Плановая дата |
Фактическая дата |
|
Объектно-ориентированный анализ предметной области |
|
|
|
Проектирование необходимых динамических структур |
|
|
|
Разработка и реализация алгоритмов |
|
|
|
Разработка интерфейса программы |
|
|
|
Отладка и тестирование |
|
|
|
Составление программной документации |
|
|
. Порядок контроля и приемки.
Основная процедура контроля и приема работы будет происходить путем
защиты курсовой работы.
//---------------------------------------------------------------
//AБК - ИНТЕРФЕЙС
//---------------------------------------------------------------
class interf
{:void print(TStringGrid*,int&) const=0;(){};~interf(){};
};
//-----------------------
// БК БЫТОВАЯ ТЕХНИКА 2
//---------------------------------------------------------------bit_texnica:public interf
{protected:name; // названиеpower; // мощность
int cena; //стоимоть:_texnica(); //конструктор по умолчанию
bit_texnica(AnsiString n, int mo, int p); // констр c параметрами_texnica (const bit_texnica &m); //копирующий конструкторprint(TStringGrid*,int&)const; //печатьsave(char *s); //сохранениеclear(char* s); //очистка файла перед записьюload (char* s,TStringGrid*,int&); //загрузка_texnica& operator=(const bit_texnica &m); //перегрузка присваиванияbool operator==(const bit_texnica& m1, bit_texnica& m2); //перегрузка сравнения
};
bit_texnica::bit_texnica() // конструктор по умолчанию !
{ name="Ariston";
power=123;
cena=11500; }
//конструктор с параметрами !
bit_texnica::bit_texnica (AnsiString n ,int mo, int p)
{ name=n ;=mo;=p;
}
//копирующий конструктор !_texnica::bit_texnica (const bit_texnica &m)
{if (this!=&m)
{ name=m.name;= m.power;=m.cena; }
}bit_texnica::print(TStringGrid *k,int &j) const //печать
{=j+1;>RowCount=j+1;>Cells[0][j] = name;>Cells[1][j] = IntToStr(power);>Cells[2][j] = IntToStr(cena);
};//-------------------------------------------------------------
//ПК1 ЗАМОРАЖИВАЮЩАЯ ТЕХНИККА 3.1//----------------------------------------------------------zamor_tehnica:public bit_texnica
{public:_tehnica();_tehnica (AnsiString n ,int mo, int p,int maxt,int s); //maxt-максим темп,s-кол-во камер_tehnica (const zamor_tehnica &m); //копирующий конструктор
~zamor_tehnica(){}; //деструкторprint(TStringGrid *k,int &j) const; //печатьsave(char *s); //сохранениеclear(char* s); //очистка файла перед записьюload (char* s,TStringGrid*,int&); //загрузка из файла_tehnica& operator=(const zamor_tehnica &m); //перегрузка присваиванияbool operator==(const zamor_tehnica& m1, zamor_tehnica& m2); //перегрузка сравнения: //доступ ограничен, но наследуются!
int max_temp;kol_kamer;: //не наследуются!
};zamor_tehnica::zamor_tehnica():bit_texnica() // конструктор по умолчанию !
{_temp=20;_kamer=4;
}
//конструктор с параметрами !
zamor_tehnica::zamor_tehnica (AnsiString n ,int mo, int p,int maxt,int s):bit_texnica(n,mo,p)
{_temp=maxt;_kamer=s;
}
//копирующий конструктор_tehnica::zamor_tehnica(const zamor_tehnica& m):bit_texnica(m)
{_temp=m.max_temp;_kamer=m.kol_kamer;
}
//печать !zamor_tehnica::print(TStringGrid *k,int &j) const
{=j+1;>RowCount=j+1;>Cells[0][j] = name;>Cells[1][j]
= IntToStr(power);>Cells[2][j] = IntToStr(cena);>Cells[3][j] =
IntToStr(max_temp);
>Cells[4][j] = IntToStr(kol_kamer);
}//------------------------------------------------
//------ МОРОЗИЛЬНЫЕ КАМЕРЫ 3.1.1moroz_kamera:public zamor_tehnica
{ public:_kamera();_kamera (AnsiString n ,int mo, int p, int maxt,int s, AnsiString c); //c - расположение
~moroz_kamera(){};print(TStringGrid *k,int &j) const;save(char *s); //сохранениеclear(char* s); //очистка файла перед записьюload (char* s,TStringGrid*,int&); //загрузка_kamera& operator=(const moroz_kamera &m); //перегрузка присваиванияbool operator==(const moroz_kamera& m1, moroz_kamera& m2); //перегрузка сравнения:raspoloshenie;
//очистка перед записьюmoroz_kamera::clear(char* s)
{* f1 ;=fopen(s,"w");(f1);
}
//сохранеине в файлmoroz_kamera::save(char *s)
{* f1;=fopen(s,"a"); //a - открывает файл для добавления
fprintf(f1,"%s\n",name);(f1,"%i\n",power);(f1,"%i\n",cena);(f1,"%i\n",max_temp);(f1,"%i\n",kol_kamer);(f1,"%s\n",raspoloshenie);(f1);
}
// загрузка из файлаmoroz_kamera::load (char* s,TStringGrid* s1,int& j)
{ AnsiString fn=s;fin(s);ss;(!fin.eof() )
{moroz_kamera m ;(fin,ss,'\n'); //читает целую строку(ss!="")
{ m.name=ss.c_str(); }(fin,ss,'\n');(ss!="")
{.power=StrToInt(ss.c_str()); }(fin,ss,'\n');(ss!="")
{.cena=StrToInt(ss.c_str());}(fin,ss,'\n');(ss!="")
{.max_temp=StrToInt(ss.c_str());}(fin,ss,'\n');(ss!="")
{.kol_kamer=StrToInt(ss.c_str());}(fin,ss,'\n');(ss!="")
{.raspoloshenie=ss.c_str();.print(s1,j); }
}.close();
}
//конструктор по умолчанию!_kamera::moroz_kamera():zamor_tehnica()
{="вертикальная";
}_kamera::moroz_kamera(AnsiString n ,int mo, int p,int maxt,int s,AnsiString c):zamor_tehnica(n,mo,p,maxt,s)
{=c;
}
//перегрузка присваивания !_kamera& moroz_kamera :: operator=(const moroz_kamera &m) //объекты =
{ if (this!=&m)
{=m.name;= m.power;=m.cena;_temp=m.max_temp;_kamer=m.kol_kamer;=m.raspoloshenie;
}*this;
}
//перегрузка сравненияoperator == (const moroz_kamera& m1, moroz_kamera& m2)
{srav;(m1.cena == m2.cena)
{srav=true;} else
{srav=false;};srav;
}
//печатьmoroz_kamera::print(TStringGrid *k,int &j) const
{=j+1;>RowCount=j+1;>Cells[0][j] = name;>Cells[1][j] = IntToStr(power);>Cells[2][j] = IntToStr(cena);>Cells[3][j] = IntToStr(max_temp);>Cells[4][j] = IntToStr(kol_kamer);>Cells[5][j] = raspoloshenie;
//------------------------------------------------
//------ ХОЛОДИЛЬНИКИ 3.1.2 -----------------------------holodilniki:public zamor_tehnica
{ public:();(AnsiString n ,int mo, int p, int maxt,int s,AnsiString cx); //cx-схема
~holodilniki(){};print(TStringGrid *k,int &j) const;save(char *s); //сохранениеclear(char* s); //очистка файла перед записьюload (char* s,TStringGrid*,int&); //загрузка из файла& operator=(const holodilniki &m); //перегрузка присваиванияbool operator==(const holodilniki& m1, holodilniki& m2); //перегрузка сравнения:shema_komponovki;
} ;
//очистка перед записьюholodilniki::clear(char* s)
{* f1 ;=fopen(s,"w");(f1);
}
//сохранеине в файлholodilniki::save(char *s)
{* f1;=fopen(s,"a"); //a - открывает файл для добавления
fprintf(f1,"%s\n",name);(f1,"%i\n",power);(f1,"%i\n",cena);(f1,"%i\n",max_temp);(f1,"%i\n",kol_kamer);(f1,"%s\n",shema_komponovki);(f1);
}
// загрузка из файлаholodilniki::load (char* s,TStringGrid* s1,int& j)
{ AnsiString fn=s;fin(s);ss;(!fin.eof() )
{holodilniki m ;(fin,ss,'\n'); //читает целую строку(ss!="")
{ m.name=ss.c_str(); }(fin,ss,'\n');(ss!="")
{.power=StrToInt(ss.c_str()); }(fin,ss,'\n');(ss!="")
{.cena=StrToInt(ss.c_str());}(fin,ss,'\n');(ss!="")
{.max_temp=StrToInt(ss.c_str());}(fin,ss,'\n');(ss!="")
{.kol_kamer=StrToInt(ss.c_str());}(fin,ss,'\n');(ss!="")
{.shema_komponovki=ss.c_str();.print(s1,j); }
}.close();
}::holodilniki():zamor_tehnica()
{_komponovki="американская";
}::holodilniki (AnsiString n ,int mo, int p,int maxt,int s,AnsiString cx):zamor_tehnica(n,mo,p,maxt,s)
{_komponovki = cx;
}
//перегрузка присваивания !& holodilniki :: operator=(const holodilniki &m) //объекты =
{ if (this!=&m)
{=m.name;= m.power;=m.cena;_temp=m.max_temp;_kamer=m.kol_kamer;_komponovki=m.shema_komponovki;
}*this;
}
//перегрузка сравненияoperator == (const holodilniki& m1, holodilniki& m2)
{srav;(m1.cena == m2.cena)
{srav=true;} else
{srav=false;};srav;
}
//печатьholodilniki::print(TStringGrid *k,int &j) const
{=j+1;>RowCount=j+1;>Cells[0][j] = name;>Cells[1][j] = IntToStr(power);>Cells[2][j] = IntToStr(cena);>Cells[3][j] = IntToStr(max_temp);>Cells[4][j] = IntToStr(kol_kamer);>Cells[5][j] = shema_komponovki;
};//-------------------------------------------------------------
//-----------------------------------------------
//----------ПЫЛЕСОСИКИ 3.2.-----
//---------------------------------------------------------------------------pilesos:public bit_texnica
{:();(AnsiString n ,int mo, int p,int obv,int pow1,int kol);
//obv-объём,pow1-можность всасывания,kol-количество насадок
pilesos (const pilesos &k); //копирующий конструктор
~pilesos(){}; //деструкторprint(TStringGrid *k,int &j) const; //печатьsave(char *s); //сохранениеclear(char* s); //очистка файла перед записьюload (char* s,TStringGrid*,int&); //загрузка из файла& operator=(const pilesos &k); //перегрузка присваиванияbool operator==(const pilesos& m1, pilesos& m2);: //доступ ограничен, но наследуются!
int obv1;pow11;kolnas;: //не наследуются!
};
//очистка перед записью
void pilesos::clear(char* s)
{* f1 ;=fopen(s,"w");(f1);
}
//сохранеине в файлpilesos::save(char *s)
{* f1;=fopen(s,"a");(f1,"%s\n",name);(f1,"%i\n",power);(f1,"%i\n",cena);(f1,"%i\n",obv1);(f1,"%i\n",pow11);(f1,"%i\n",kolnas);(f1);
}
// загрузка из файлаpilesos::load (char* s,TStringGrid* s1,int& j)
{ AnsiString fn=s;fin(s);ss;(!fin.eof() )
{pilesos m ;(fin,ss,'\n'); //читает целую строку(ss!="")
{ m.name=ss.c_str(); }(fin,ss,'\n');(ss!="")
{.power=StrToInt(ss.c_str()); }(fin,ss,'\n');(ss!="")
{.cena=StrToInt(ss.c_str());}(fin,ss,'\n');(ss!="")
{.obv1=StrToInt(ss.c_str());}(fin,ss,'\n');(ss!="")
{.pow11=StrToInt(ss.c_str());}(fin,ss,'\n');(ss!="")
{.kolnas=StrToInt(ss.c_str());.print(s1,j); }
}.close();
}::pilesos():bit_texnica() // конструктор по умолчанию
{
obv1=4;
pow11=250;
kolnas=5; }
//конструктор с параметрами 2
pilesos::pilesos (AnsiString n ,int mo, int p,int obv,int pow1,int kol):bit_texnica(n,mo,p)
{=obv;=pow1;=kol;
}
//копирующий конструктор::pilesos(const pilesos& k) :bit_texnica(k)
{=k.name;= k.power;=k.cena;=k.obv1;=k.pow11;=k.kolnas;
}
//перегрузка присваивания 1& pilesos :: operator=(const pilesos &k) //объект =
{ if (this!=&k)
{=k.name;= k.power;=k.cena;=k.obv1;=k.pow11;=k.kolnas;
}*this;
}
//перегрузка сравненияoperator == (const pilesos& m1,pilesos& m2)
{srav;(m1.cena == m2.cena)
{srav=true;} else
{srav=false;};srav;
}
//печатьpilesos::print(TStringGrid *k,int &j) const
{=j+1;>RowCount=j+1;>Cells[0][j] = name;>Cells[1][j] = IntToStr(power);>Cells[2][j] = IntToStr(cena);>Cells[3][j] = IntToStr(obv1);>Cells[4][j] = IntToStr(pow11);>Cells[5][j] = IntToStr(kolnas);
}
//------ МИКРОВОЛНОВАЯ ПЕЧЬ 3.3 -----------------------------microv_pechi:public bit_texnica
{ public:_pechi();_pechi (AnsiString n ,int mo, int p, AnsiString t); //t-тип
~microv_pechi(){};print(TStringGrid *k,int &j) const;save(char *s); //сохранениеclear(char* s); //очистка файла перед записьюload (char* s,TStringGrid*,int&); //загрузка из файла_pechi& operator=(const microv_pechi &m); //перегрузка присваиванияbool operator==(const microv_pechi& m1, microv_pechi& m2); //перегрузка сравнения:tip;
};
//очистка перед записьюmicrov_pechi::clear(char* s)
{* f1 ;=fopen(s,"w");(f1);
}
//сохранеине в файлmicrov_pechi::save(char *s)
{* f1;=fopen(s,"a");(f1,"%s\n",name);(f1,"%i\n",power);(f1,"%i\n",cena);(f1,"%s\n",tip);(f1);
}
// загрузка из файлаmicrov_pechi::load (char* s,TStringGrid* s1,int& j)
{ AnsiString fn=s;fin(s);ss;(!fin.eof() )
{microv_pechi m ;(fin,ss,'\n'); //читает целую строку(ss!="")
{ m.name=ss.c_str(); }(fin,ss,'\n');(ss!="")
{.power=StrToInt(ss.c_str()); }(fin,ss,'\n');(ss!="")
{.cena=StrToInt(ss.c_str());}(fin,ss,'\n');(ss!="")
{.tip=ss.c_str();.print(s1,j); }
}.close();
}_pechi::microv_pechi():bit_texnica()
{="соло";
}_pechi::microv_pechi (AnsiString n ,int mo, int p,AnsiString t):bit_texnica(n,mo,p)
{=t;
}
//перегрузка присваивания !_pechi& microv_pechi :: operator=(const microv_pechi &m) //объект =
{ if (this!=&m)
{=m.name;= m.power;=m.cena;=m.tip;
}*this;
}
//перегрузка сравненияoperator == (const microv_pechi& m1, microv_pechi& m2)
{srav;(m1.cena == m2.cena)
{srav=true;} else
{srav=false;};srav;
}
//печатьmicrov_pechi::print(TStringGrid *k,int &j) const
{=j+1;>RowCount=j+1;>Cells[0][j] = name;>Cells[1][j] = IntToStr(power);>Cells[2][j] = IntToStr(cena);>Cells[3][j] = tip;
};__fastcall TForm1::RadioGroup1Click(TObject *Sender)
{Label12->Visible=true;=RadioGroup1->ItemIndex ;(i==0) //Морозильные камеры
{GroupBox2->Visible=True;->Visible=False;->Visible=False;->Visible=False;->Visible=False;->Visible=False;->Visible=False;->Visible=True;->Visible=True;->Visible=True;->Visible=True;->Visible=False;->Visible=False;->Visible=False;
}(i==1) //Холодильники
{->Visible=False;->Visible=True;->Visible=False;->Visible=True;->Visible=False;->Visible=False;->Visible=False;->Visible=False;->Visible=False;->Visible=True;->Visible=False;->Visible=True;->Visible=False;->Visible=False;
} if (i==2) //Микроволновые печи
{GroupBox2->Visible=False;->Visible=False;->Visible=True;->Visible=False;->Visible=False;->Visible=False;->Visible=True;->Visible=False;->Visible=False;->Visible=True;->Visible=False;->Visible=False;->Visible=True;->Visible=False;
}(i==3) //Пылесосы
{->Visible=False;->Visible=False;->Visible=False;->Visible=False;->Visible=False;->Visible=False;->Visible=False;->Visible=True;->Visible=True;->Visible=True;->Visible=False;->Visible=False;->Visible=False;->Visible=True;
}
}__fastcall TForm1::Button1Click(TObject *Sender)
{name;power,cena;raspoloshenie;max_temp,kol_kamer;shema_komponovki;tip;obv1,pow11,kolnas;*p;
if (i==0) //морозильные камеры
{
{
if ((Edit1->Text=="") && (Edit2->Text=="")&& (Edit3->Text=="")&& (Edit5->Text=="")&& (Edit8->Text=="")&& (Edit17->Text==""))
{throw(1);}((Edit1->Text=="") || (Edit2->Text=="")|| (Edit3->Text=="")|| (Edit5->Text=="")|| (Edit8->Text=="")|| (Edit17->Text==""))
{throw('a');}= (Edit1->Text);= StrToInt(Edit2->Text);= StrToInt(Edit3->Text);_temp=StrToInt(Edit5->Text);_kamer=StrToInt(Edit8->Text);=Edit17->Text;_kamera m(name,power,cena,max_temp,kol_kamer,raspoloshenie);=&m;>print(StringGrid1,j);