#include "Includes.h" int CComputer_Entry::_CompareSpeed(CComputer_Entry * left,const CComputer_Entry * right) { double leftSpeed=atof(left->cpuSpeed.c_str()); double rightSpeed=atof(right->cpuSpeed.c_str()); if(leftSpeed>rightSpeed) { return 1; } if(leftSpeedPrint_Word(this->manufacturer,15,true,&x); cout << " "; this->Print_Word(this->modelNumber,10,false,&x); cout << " "; this->Print_Word(this->cpuSpeed,5,false,&x); cout << " "; this->Print_Word(this->ramAmount,15,false,&x); cout << " "; this->Print_Word(this->hdSize,15,false,&x); } void CComputer_Entry::Print_Word(string word,size_t columnWidth,bool rightJustify,int * cursorX) { columnWidth-=word.size(); if(!rightJustify){ cout << word.c_str(); } while(columnWidth>0) { cout << " "; columnWidth--; } if(rightJustify){ cout << word.c_str(); } } void CComputer_Entry::Print_Proper() { // Prints out a summary of itself cout << this->manufacturer << ": " << this->modelNumber << " @ " << this->cpuSpeed << "Ghz" << ", " << this->ramAmount << " ram" << ", " << this->hdSize << " hard drive"; } bool CComputer_Entry::operator>(const CComputer_Entry & right) { int result=this->_CompareSpeed(this,&right); return (result==1); } bool CComputer_Entry::operator>=(const CComputer_Entry & right) { int result=this->_CompareSpeed(this,&right); return (result==1 || result==0); } bool CComputer_Entry::operator<(const CComputer_Entry & right) { int result=this->_CompareSpeed(this,&right); return (result==-1); } bool CComputer_Entry::operator<=(const CComputer_Entry & right) { int result=this->_CompareSpeed(this,&right); return (result==-1 || result==0); } bool CComputer_Entry::operator==(const CComputer_Entry & right) { int result=this->_CompareSpeed(this,&right); return (result==0); } bool CComputer_Entry::operator!=(const CComputer_Entry & right) { int result=this->_CompareSpeed(this,&right); return (result!=0); } void CComputer::Clear() { // Clear out vector this->entries.clear(); } bool CComputer::GrabFromFile(string filePath) { ifstream file; CComputer_Entry entry; bool done; bool result; // Clear myself of data this->Clear(); // Open the file file.open(filePath.c_str(),ifstream::in); if(!file){ this->_Log("Couldn't open file: ",filePath); return false; } this->_Log("File opened: ",filePath); // Read lines until done done=false; this->_Log("CComputer::GrabFromFile - will read in the file..."); while(!done) { result=this->_ReadLine(&file,&entry,&done); if(!result){ this->_Log("CComputer::GrabFromFile has failed."); done=true; } else{ this->entries.push_back(entry); } // For dramatic effect Sleep(10); } this->_Log("CComputer::GrabFromFile has completed successfully."); return true; } void CComputer::Pager() { int key; size_t index; bool done; // Print our first frame index=0; this->PrintPage("Showing data... use a/z for up/down, escape to quit",index,10); // Clear buffer while(kbhit()){getch();} done=false; while(!done) { key=getch(); if(key=='a'){ if(index>0){ index--; } } else if(key=='z'){ index++; } else if(key==27){ done=true; } else{ continue; } this->PrintPage("Showing data... use a/z for up/down, escape to quit",index,10); } } void CComputer::PrintPage(string heading,size_t startRecord,size_t pageSize) { size_t a; system("cls"); cout << "\n" << heading.c_str() << "\n"; // Iterate through each entry and print it for(a=startRecord;aentries.size() && (a-startRecordentries[a].Print(); } } CComputer_Entry * CComputer::FindSpeed(double speed) { size_t a; double dTempSpeed; for(a=0;aentries.size();a++){ dTempSpeed=atof(this->entries[a].cpuSpeed.c_str()); if(dTempSpeed==speed){ return &this->entries[a]; } } return NULL; } vector CComputer::GetSpeedSortedList() { vector list; CComputer_Entry *left, *right, *temp; size_t a; bool didAnything; // Fill list with unsorted pointers for(a=0;aentries.size();a++){ list.push_back(&this->entries[a]); } /////////////// // Bubble sort didAnything=true; // Keep going until we've run through the list // without having to switch anything while(didAnything) { didAnything=false; // Run through the entire list (from first item to second to last item) // switching any pair if needed for(a=0;a list; size_t a; list=this->GetSpeedSortedList(); cout << "\n\n-------Speed sorted list\n"; for(a=0;aPrint(); } } void CComputer::_Log(string message1,string message2,string message3) { cout << "\n" << message1.c_str() << message2.c_str() << message3.c_str(); } void CComputer::_Log(string message1,string message2) { this->_Log(message1,message2,""); } void CComputer::_Log(string message1) { this->_Log(message1,""); } bool CComputer::_ReadLine(/*IN*/ifstream * file,/*IN/OUT*/CComputer_Entry * entry,/*OUT*/bool * done) { string temp; if(!*file){ return false; } /* File should have this order per line: Computer Manufacturer, Model Number, Amount of RAM, Harddrive Size, Processor Speed */ *file >> entry->manufacturer; if(!*file){ // If first item won't read we're just done *done=true; return true; } *file >> entry->modelNumber; if(!*file){ return false; } *file >> entry->ramAmount; if(!*file){ return false; } *file >> entry->hdSize; if(!*file){ return false; } // This last one just sets to done if the file is now over *file >> entry->cpuSpeed; if(!*file){ *done=true; } cout << "."; return true; }