IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> C++, STL проект
ammaximus
сообщение 19.06.2009 5:11
Сообщение #1


Ночной волк
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской

Репутация: -  1  +


Проект по STL "Компьютерный магазин".

Программа должна обрабатывать базу данных компьютеров и комплектующих. Сортировать, выводить по параметрам, ввод,вывод... Объекты класса компьютер содержат ссылки на соответстувующее железо. Удаляешь компьютер - авто удаляется и его железо. Помогите правильно организовать классы, я немного запутался на этом этапе.

Проблема в том как вообще все это организовать и в классах ввода вывода - они должны наследовать от стандартных и самостоятельно понимать ссылка на железо или на компьютер передана.

Примерная схема задумки в приложении.


//Preprocessor//
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <conio.h>
#include <windows.h>
#include <process.h>

using namespace std;

////INTERFACE///////
//Menu

int menu(){
cls();
cout << "PUT Some key" << endl;
cout << "F1 - vvod F2 - vivod vse" << endl;
int key;
while(1){
key = getch();
switch (key){
case 59: AddHard(); break;
case 60: PrintAllHard(); break;
}
}
}


//////////////////
////OBJECTS///////
//////////////////

class apparate{
private:
string name;
float price;
float termo;
public:
virtual float optim()=0;
inline void set_name(string n){
this->name=n;
}

inline void set_price(float pr){
this->price=pr;
}
inline void set_termo(float tr){
this->termo=tr;
}
};

class hardware: public apparate{
private:
string type;
string descript;
float memory;
float freq;
public:
hardware(){
this->freq=9;
};

hardware( string t, string d, float m, float f){
this->type=t;
this->descript=d;
this->memory=m;
this->freq=f;
}


virtual float optim(){
return 0;
}
inline set_type(string t){
this->type=t;
}
inline set_desc(string d){
this->descript=d;
}
inline set_mem(float m){
this->memory=m;
}
inline set_freq(float f){
this->freq=f;
}
};

class computer: public hardware{
private:
hardware opermem;
hardware soundcard;
public:

};


///////////////////////
/////RULE CLASSES//////
///////////////////////

class ioconsole{
private:

public:
void cls(){
HANDLE hConsole;
CONSOLE_SCREEN_BUFFER_INFO csInfo;
DWORD dummy;
COORD Home={0,0};
hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsole, &csInfo);
FillConsoleOutputCharacter(hConsole,' ',csInfo.dwSize.X*csInfo.dwSize.Y,Home,&dummy);
SetConsoleCursorPosition(hConsole,Home);
printf("\nComputer Magazine\n");
printf(" \n");
}

void PrintAllHard(hardware &h){
for (int i=1; i<h.size; i++){
h[i].print();
cout << endl;
}
}

void Print(){
cout << type << " - " << descript <<" - " << memory << " - " << freq << endl;
}

void AddHard(hardware &h){

hardware temp;
string temp1;
float temp2;
cin >> temp1;
temp.set_name(temp1);
cin >> temp1;
temp.set_desc(temp1);
cin >> temp2;
temp.set_mem(temp2);
cin >> temp2;
temp.set_freq(temp2);
h.push_back(temp);
}
}

class iofile : public iofstream{

}



///////////////
/////MAIN//////
///////////////

int main(){
hardware temp("vint", "40 gb IDE RAID", 40, 34.4f);
vector<hardware> hSpisok;
vector<hardware>::iterator hIterator;

cout << hSpisok.size()<<endl;


return 0;
};



Эскизы прикрепленных изображений
Прикрепленное изображение

--------------------
Не думай о белой обезьяне.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 20.06.2009 10:49
Сообщение #2


Гость






1) зачем в классе Hardware хранится memory? freq? Ты решил хранить конкретные данные в этом классе, что-ли? Тогда зачем тебе вся эта канитель с векторами составляющих? В том-то и суть, что Hardware - это абстрактный класс "какой-то там аппаратуры", нет у него никаких конкретных характеристик, какая частота может быть у жесткого диска, например? Все характеристики хранятся в конкретных типах. Частота и емкость - в Memory, емкость и скорость - в HDD, частота и количество ядер - в Processor... Что есть общего (присутствует у всех элементов аппаратного обеспечения) - это только цена и название (что такое termo - я не знаю).
2) ты опять за свое? Зачем тебе класс ioconsole, если потоки ввода вывода без тебя работают со стандартной консолью? Тебе достаточно описать глобальную функцию cls() для очистки консоли, это все, что надо (что надо сделать еще - я уже написал выше, повторять не буду)...
3) почему AddHard является методом ioconsole? Это что, функциональность консоли, добавлять в список аппаратных составляющих новый элемент? Нет, это функциональность Menu, не надо перекладывать это на консоль.

В общем, я не буду больше отвечать, пока ты не научишься аргументированно сообщать, чем тебе не нравится то, что я привел выше. Вот почему я тебе все время пишу: 1) ... 2) ... 3) ..., а ты ни слова не говоря, опять приводишь что-то свое, и спрашиваешь, будет ли оно работать? А МНЕ-то зачем это надо, опять лазить по твоей программе, искать, чем это плохо, чем - хорошо, говорить что-то... Зачем? Чтобы опять, безо всяких причин и без объяснений ты привел свою реализацию и начал спрашивать, будет ли оно работать? Так зачем задаешь вопросы? Сделай и посмотри, будет, или нет... А потом я сделаю свой вариант, и сравним...

P.S. У тебя уже не структура, а РЕАЛИЗАЦИЯ. Структура - это только классы, без конкретики... Меня не интересует на данном этапе, как именно ты очищаешь экран. Если тебе для этого надо 10 строк кода - то это только твои проблемы. Вообще это делается в 2 строки. Пока тебе надо только связать все в одно целое...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 24.07.2025 3:37
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"