// Project 2 for CS 1704 Spring 2004 // // Programmer: Phil Wallace // OS: Windows XP Professional // System: Pentium 4 2200, 768 MB Memory // Compiler: Visual C++ .NET // Last modified: February 22, 2004 // // Purpose: // The purpose of this class is to implement the commands for the commands // that are requested in this organizer /* On my honor: - I have not discussed the C++ language code in my program with anyone other than my instructor or the teaching assistants assigned to this course. - I have not used C++ language code obtained from another student, or any other unauthorized source, either modified or unmodified. - If any C++ language code or documentation used in my program was obtained from another source, such as a textbook or course notes, that has been clearly noted with a proper citation in the comments of my program. - I have not designed this program in such a way as to defeat or interfere with the normal operation of the Curator System. Phil Wallace*/ #include "storage.h" storage::storage() { ofstream outFile; //open and close output file outFile.open("output.data"); outFile.close(); string idata, sdata; //data for the two files int Idx = 0; //index of array bool FOUND = false; //target flag ifstream studFile("students.data"); //student file stream assert(!studFile.fail()); //kicks out of the program if the file fails ifstream itemFile("items.data"); //item file stream assert(!itemFile.fail()); //kicks out of the program if the file fails while(getline(studFile, sdata)) { set_student(sdata,Idx,studFile); //input all student records } Idx = 0; //reset index while(getline(itemFile,sdata)) { set_student(sdata,Idx,itemFile); //input all items } for(int x = 0; x < 100; x++) //loop through istorage { for(int y = 0; y < 100; y++) //loop through sstorage { if(sstorage[y].get_email().compare(istorage[x].get_owner()) == 0) //if a student record match is found { FOUND = true; //is found break; //skip out of loop } } if(!FOUND) { istorage[x].set_owner(""); //"delete" entry by setting owner to "" } FOUND = false; //reset FOUND } studFile.close(); //close files itemFile.close(); } //////////////////////////////////////////////////////////////// compare // returns an "integerized" conversion from a string to use in switch statements // // Parameters: // data - string containing field conversion // // Pre: must be called by storage constructor // Post: "converts" data field to an int // // Returns: integer for use in swith statement // // Called by: storage::storage // Calls: nothing // int storage::compare(string data) { if(data.compare("@Name:") == 0) //name field return 0; else if(data.compare("@Phone Number:") == 0) //phone number field return 1; else if(data.compare("@E-mail:") == 0) //email field return 2; else if(data.compare("@Address Line 1:") == 0) //Address Line 1 return 3; else if(data.compare("@Address Line 2:") == 0) //Address Line 2 return 4; else if(data.compare("@City:") == 0) //City field return 5; else if(data.compare("@State:") == 0) //state field return 6; else if(data.compare("@Zipcode:") == 0) //zip code field return 7; else if(data.compare("@Other:") == 0) //other comments field return 8; else if(data.compare("@Item:") == 0) //Item field return 9; else if(data.compare("@Media Type:") == 0) //Media type field return 10; else if(data.compare("@by:") == 0) //author field return 11; else if(data.compare("@Owner:") == 0) //author field return 12; else if(data.compare("@Price:") == 0) //price field return 13; else if(data.compare("@Availability:") == 0) //availibility field return 14; else if(data.compare("@@") == 0) //end object return 15; else return 16; //will generate an error message in switch } //////////////////////////////////////////////////////////////// set_student // sets fields inside an object // // Parameters: // sdata - string containing field // index - index of slot to modify // myFile - file stream // // Pre: myFile must open successfully // Post: sets one field in an object // // Returns: nothing // // Called by: add_student, add_item // Calls: compare // void storage::set_student(string sdata, int &index, istream& myFile) { switch(compare(sdata)) //inputs student data { case 0: getline(myFile,sdata); sstorage[index].set_name(sdata); //set name break; case 1: getline(myFile,sdata); sstorage[index].set_phone(sdata); //set phone number break; case 2: getline(myFile,sdata); sstorage[index].set_email(sdata); //set email address break; case 3: getline(myFile,sdata); sstorage[index].set_add1(sdata); //add address 1 break; case 4: getline(myFile,sdata); sstorage[index].set_add2(sdata); //add address 2 break; case 5: getline(myFile,sdata); sstorage[index].set_city(sdata); //add city break; case 6: getline(myFile,sdata); sstorage[index].set_state(sdata); //add state break; case 7: getline(myFile,sdata); sstorage[index].set_zip(sdata); //add zip code break; case 8: getline(myFile,sdata); sstorage[index].set_other(sdata); //add other field break; case 9: getline(myFile,sdata); istorage[index].set_name(sdata); //set item name break; case 10:getline(myFile,sdata); istorage[index].set_media(sdata); //set media type break; case 11:getline(myFile,sdata); istorage[index].set_author(sdata); //set author of media break; case 12:getline(myFile,sdata); istorage[index].set_owner(sdata); //set owner of media break; case 13:getline(myFile,sdata); istorage[index].set_price(sdata); //set price of media break; case 14:getline(myFile,sdata); istorage[index].set_avail(sdata); //set availability break; case 15:index++; //increment Idx to next slot getline(myFile,sdata); //eliminate next space break; default: cout<<"Bad field in students.data"<