ПРОФЕСИОНАЛНА ГИМНАЗИЯ ПО ТЕЛЕКОМУНИКАЦИИ
ПРОЕКТ
по Обектно-ориентирано програмиране
тема:
„Софтуерен каталог“
на ученика
Благовест Петров
от 1г клас уч. 2010/2011г.
График за изпълнението на проекта за времето 01.06–15.06
1. 01.06-1.06 Замисляне
2. 03.06-10.06 Написване основните компоненти на програмата
2. 10.06-12.06 Дописване на допълнителни функционалности
3. 12.06-15.06 Оптимизация на кода и документиране
Описание на алгоритъма
Основата на цялата програма е класът SoftwareData, която съдържа цялата информация за
всички продукти. Програмата действа като записва всички класове във файл с
последователен достъп.
Функция int main()
Безкраен цикъл за менюто. На потребителя се изписват възможностите и той записва
своя избор в променливата foo. Тя се изследва чрез конструкция switch, като се
изпълняват съответните функции на програмата, за всяка от функционалностите.
Функция void add()
Служи за добавяне на запис във файла с произволен достъп. Отваря се файла softdb като
обект от клас ofstream. Ако това е неуспешно, се извежда съобение на екрана. Програма
се отваря в режим ios::app, т.е. записва се в краяна файла. Осъществява се записа чрез
функцията write. Файлът се затваря с функцията close();
Функция void search(int what)
Това, което потребителят ще търси се записва в низа search_arg[15].
Отваря се файла softdb за четене. Изписва се колонтитул на таблицата с резултатите.
Преглеждат се всички записи във файла (цикъл for). В зависимост от аргумента (int
kakvo), search_arg се сравнява с различен член на SoftwareData. Това сe осъществява,
чрез конструкция switch. Ако what е 1, се изписват всички записи; ако е 2 – само тези на
които члена zaglavie съвпада със search_arg и тн....
Файлът се затваря
Изходен код на програмата:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
class SoftwareData {
public:
char zaglavie [20];
char prednaznachenie [20];
char avtor [20];
char licenz [15];
char platforma [20];
float razmer;
};
void add() {
ofstream outSoftware("softdb", ios::app | ios::in | ios::binary );
if (!outSoftware){
cerr << "ne moje da se otvori failn";
exit (1);
}
SoftwareData soft;
cout <<"Napishete zaglavie, prednaznachenie, avtor, licenz, platforma i razmer na programata:n |_ ";
cin >> soft.zaglavie >> soft.prednaznachenie >> soft.avtor >> soft.licenz >> soft.platforma >> soft.razmer;
outSoftware.write(
reinterpret_cast<const char *>( &soft ),
sizeof ( SoftwareData ));
outSoftware.close();
cout <<endl;
}
void search(int what){
char search_arg [20];
SoftwareData soft;
switch (what){
case 2:
cout << "Zaglavie:_ ";
cin >> search_arg;
break;
case 3:
cout << "Lizenz:_ ";
cin >> search_arg;
break;
case 4:
cout << "Prednaznachenie:_ ";
cin >> search_arg;
break;
case 5:
cout << "Platforma:_ ";
cin >> search_arg;
break;
}
ifstream inSoftware("softdb", ios::in | ios::binary );
if (!inSoftware) { cerr << "Ne moje da se otvori fail" <<endl; exit(1); }
cout <<"Turseneto izvede slednite rezultati:"<<endl<<
"Zaglavie:tPrednaznachenie:tAvtor:tLicenz:tPlatforma:tRazmer:t"<<endl;
while (inSoftware.read(reinterpret_cast<char *>(&soft), sizeof(SoftwareData))) {
switch(what) {
case 1:
cout << soft.zaglavie << "t" << soft.prednaznachenie << "t" << soft.avtor << "t" << soft.licenz << "t" <<
soft.platforma;
cout << "t" << soft.razmer <<endl;
break;
case 2:
if(!strcmp(search_arg, soft.zaglavie)){
cout << soft.zaglavie << "t" << soft.prednaznachenie << "t" << soft.avtor << "t" << soft.licenz << "t" <<
soft.platforma;
cout << "t" << soft.razmer <<endl;}
break;
case 3:
if(!strcmp(search_arg, soft.licenz)){
cout << soft.zaglavie << "t" << soft.prednaznachenie << "t" << soft.avtor << "t" << soft.licenz << "t" <<
soft.platforma;
cout << "t" << soft.razmer <<endl;}
break;
case 4:
if(!strcmp(search_arg, soft.prednaznachenie)){
cout << soft.zaglavie << "t" << soft.prednaznachenie << "t" << soft.avtor << "t" << soft.licenz << "t" <<
soft.platforma;
cout << "t" << soft.razmer <<endl;}
break;
case 5:
if(!strcmp(search_arg, soft.platforma)){
cout << soft.zaglavie << "t" << soft.prednaznachenie << "t" << soft.avtor << "t" << soft.licenz << "t" <<
soft.platforma;
cout << "t" << soft.razmer <<endl;}
break;
}
}
cout << "n";
inSoftware.close();
int main(void)
{
char foo;
while(1){
cout <<"Kakvo iskate da napraviten";
cout <<"1. Dobavqne na novo prilojenie" << endl << "2. Pokazvane na vsichki zapisi" << endl << "3.
Tursene spored zaglavie" << "4. Tursene spored licenz ";
cout << "5. Tursene spored prednaznachenie" << endl << "6. Tursene spored platforma" <<endl << "7.
Izhod (^C)n |_ " <<endl;
cin >>foo;
switch(foo){
case '7':
exit(0);
break;
case '1':
add();
break;
case '2':
search(1);
break;
case '3':
search(2);
break;
case '4':
search(3);
break;
case '5':
search(4);
break;
case '6':
search(5);
break;
default:
cout << "Kakwo?"<<endl;
break;
}
}
return 0;
}

Стар проект на Благо?!

  • 1.
    ПРОФЕСИОНАЛНА ГИМНАЗИЯ ПОТЕЛЕКОМУНИКАЦИИ ПРОЕКТ по Обектно-ориентирано програмиране тема: „Софтуерен каталог“ на ученика Благовест Петров от 1г клас уч. 2010/2011г.
  • 2.
    График за изпълнениетона проекта за времето 01.06–15.06 1. 01.06-1.06 Замисляне 2. 03.06-10.06 Написване основните компоненти на програмата 2. 10.06-12.06 Дописване на допълнителни функционалности 3. 12.06-15.06 Оптимизация на кода и документиране
  • 3.
    Описание на алгоритъма Основатана цялата програма е класът SoftwareData, която съдържа цялата информация за всички продукти. Програмата действа като записва всички класове във файл с последователен достъп. Функция int main() Безкраен цикъл за менюто. На потребителя се изписват възможностите и той записва своя избор в променливата foo. Тя се изследва чрез конструкция switch, като се изпълняват съответните функции на програмата, за всяка от функционалностите. Функция void add() Служи за добавяне на запис във файла с произволен достъп. Отваря се файла softdb като обект от клас ofstream. Ако това е неуспешно, се извежда съобение на екрана. Програма се отваря в режим ios::app, т.е. записва се в краяна файла. Осъществява се записа чрез функцията write. Файлът се затваря с функцията close(); Функция void search(int what) Това, което потребителят ще търси се записва в низа search_arg[15]. Отваря се файла softdb за четене. Изписва се колонтитул на таблицата с резултатите. Преглеждат се всички записи във файла (цикъл for). В зависимост от аргумента (int kakvo), search_arg се сравнява с различен член на SoftwareData. Това сe осъществява, чрез конструкция switch. Ако what е 1, се изписват всички записи; ако е 2 – само тези на които члена zaglavie съвпада със search_arg и тн.... Файлът се затваря Изходен код на програмата: #include <iostream> #include <fstream> #include <cstdlib> #include <cstring> using namespace std; class SoftwareData { public: char zaglavie [20]; char prednaznachenie [20];
  • 4.
    char avtor [20]; charlicenz [15]; char platforma [20]; float razmer; }; void add() { ofstream outSoftware("softdb", ios::app | ios::in | ios::binary ); if (!outSoftware){ cerr << "ne moje da se otvori failn"; exit (1); } SoftwareData soft; cout <<"Napishete zaglavie, prednaznachenie, avtor, licenz, platforma i razmer na programata:n |_ "; cin >> soft.zaglavie >> soft.prednaznachenie >> soft.avtor >> soft.licenz >> soft.platforma >> soft.razmer; outSoftware.write( reinterpret_cast<const char *>( &soft ), sizeof ( SoftwareData )); outSoftware.close(); cout <<endl; } void search(int what){ char search_arg [20]; SoftwareData soft; switch (what){ case 2: cout << "Zaglavie:_ "; cin >> search_arg; break; case 3: cout << "Lizenz:_ "; cin >> search_arg; break; case 4: cout << "Prednaznachenie:_ ";
  • 5.
    cin >> search_arg; break; case5: cout << "Platforma:_ "; cin >> search_arg; break; } ifstream inSoftware("softdb", ios::in | ios::binary ); if (!inSoftware) { cerr << "Ne moje da se otvori fail" <<endl; exit(1); } cout <<"Turseneto izvede slednite rezultati:"<<endl<< "Zaglavie:tPrednaznachenie:tAvtor:tLicenz:tPlatforma:tRazmer:t"<<endl; while (inSoftware.read(reinterpret_cast<char *>(&soft), sizeof(SoftwareData))) { switch(what) { case 1: cout << soft.zaglavie << "t" << soft.prednaznachenie << "t" << soft.avtor << "t" << soft.licenz << "t" << soft.platforma; cout << "t" << soft.razmer <<endl; break; case 2: if(!strcmp(search_arg, soft.zaglavie)){ cout << soft.zaglavie << "t" << soft.prednaznachenie << "t" << soft.avtor << "t" << soft.licenz << "t" << soft.platforma; cout << "t" << soft.razmer <<endl;} break; case 3: if(!strcmp(search_arg, soft.licenz)){ cout << soft.zaglavie << "t" << soft.prednaznachenie << "t" << soft.avtor << "t" << soft.licenz << "t" << soft.platforma; cout << "t" << soft.razmer <<endl;} break; case 4: if(!strcmp(search_arg, soft.prednaznachenie)){ cout << soft.zaglavie << "t" << soft.prednaznachenie << "t" << soft.avtor << "t" << soft.licenz << "t" << soft.platforma; cout << "t" << soft.razmer <<endl;} break;
  • 6.
    case 5: if(!strcmp(search_arg, soft.platforma)){ cout<< soft.zaglavie << "t" << soft.prednaznachenie << "t" << soft.avtor << "t" << soft.licenz << "t" << soft.platforma; cout << "t" << soft.razmer <<endl;} break; } } cout << "n"; inSoftware.close(); int main(void) { char foo; while(1){ cout <<"Kakvo iskate da napraviten"; cout <<"1. Dobavqne na novo prilojenie" << endl << "2. Pokazvane na vsichki zapisi" << endl << "3. Tursene spored zaglavie" << "4. Tursene spored licenz "; cout << "5. Tursene spored prednaznachenie" << endl << "6. Tursene spored platforma" <<endl << "7. Izhod (^C)n |_ " <<endl; cin >>foo; switch(foo){ case '7': exit(0); break; case '1': add(); break; case '2': search(1); break; case '3': search(2); break; case '4': search(3);
  • 7.