#include "database.h" #include using std::ofstream; using std::ifstream; #include using std::string; using std::istringstream; #include #include using std::cout; using std::ios; database::database() { ifstream instudents( "students.data", ios::in ); ifstream initems( "items.data", ios::in ); int n = 0; string buffer = ""; getline(instudents, buffer); while(!instudents.eof()) { string name, phone, email, street, aptnum, city, state, other, zippy, temp; int zip = 0; while( buffer != "@@" && buffer != "\n" && !instudents.eof() ) { if(buffer == "@Name:") getline(instudents, name); else if(buffer == "@Phone Number:") getline(instudents, phone); else if(buffer == "@E-mail:") getline(instudents, email); else if(buffer == "@Address Line 1:") getline(instudents, street); else if(buffer == "@Address Line 2:") getline(instudents, aptnum); else if(buffer == "@City:") getline(instudents, city); else if(buffer == "@State:") getline(instudents, state); else if(buffer == "@Zipcode:") { getline(instudents, zippy); istringstream zipper(zippy); zipper >> zip; } else if(buffer == "@Other:") getline(instudents, other); getline(instudents, buffer); } student newstudent(name, phone, email, street, aptnum, city, state, zip, other); addstudent(n, newstudent); n++; getline(instudents, buffer); } /*student blanks; for( int i = n; i < 100; i++) addstudent(i, blanks);*/ getline(initems, buffer); while(!initems.eof()) { string buffer, name, type, author, owner, status, pricey, temp; char temp1; double price = -9999; while( buffer != "@@" && buffer != "\n" && !initems.eof()) { if(buffer == "@Item:") getline(initems, name); else if(buffer == "@Media Type:") getline(initems, type); else if(buffer == "@by:") getline(initems, author); else if(buffer == "@Owner:") getline(initems, owner); else if(buffer == "@Availability:") getline(initems, status); else if(buffer == "@Price:") { getline(initems, pricey); istringstream pricer(pricey); pricer >> temp1 >> price; } getline(initems, buffer); } multimedia newitem(name, type, author, owner, price, status); additem(n, newitem); n++; getline(initems, buffer); } //multimedia blanki; //for(int i = n; i < 100; i++) // additem(i, blanki); instudents.close(); initems.close(); } bool database::additem( int index, multimedia& item ) //adds an item to the items array at index { if(item.getowner() == "") return false; if(findstudent(item.getowner()) == -1) return false; int n = findblankitem(); if(n == -1) return false; assert(n<100&&n>-1); items[n] = item; return true; } bool database::addstudent( int index, student& newstudent)//adds an student to the students array at index { if(newstudent.getemail() == "") return false; int n = findblankstudent(); assert(n<100&&n>-1); students[n] = newstudent; return true; } void database::printstudents( ofstream& out ) const //prints a list of students to the output file { for(int n = 0; n < 100; n++) { if(students[n].getemail() != "") { assert(n<100&&n>-1); students[n].print(out); out << "\n"; } } } void database::printitems( ofstream& out ) const //prints a list of items to the output file { for(int n = 0; n < 100; n++) { if(items[n].getowner() != "") { assert(n<100&&n>-1); items[n].print(out, true); out << "\n"; } } } bool database::printemail( string email, ofstream& out ) const //prints a student and all its corresponding items to the output file { int i = findstudent(email); if(i == -1) return false; assert(i<100&&i>-1); students[i].print(out); out << "\n"; for(int n = 0; n < 100; n++) { if(items[n].getowner() == email) { assert(n<100&&n>-1); items[n].print(out, false); out << "\n"; } } return true; } bool database::deletestudent( string email ) //deletes a student with email and all its items { int i = findstudent(email); if(i == -1) return false; assert(i<100&&i>-1); student blanks; students[i]=blanks; multimedia blanki; for(int n = 0; n < 100; n++) { if(items[n].getowner() == email) { assert(n<100&&n>-1); items[n]=blanki; } } return true; } int database::findstudent( string email ) const //finds a student with email and returns its index { for(int n = 0; n < 100; n++) if(students[n].getemail() == email) return n; return -1; } int database::findblankstudent( ) const //finds the first blank location and returns its index { return findstudent(""); } int database::findblankitem( ) const //finds the first blank location and returns its index{} { for(int n = 0; n < 100; n++) if(items[n].getowner() == "") return n; return -1; }