#include "ins_DB.h" void InsDB :: Read () { ifstream in("t.ins") ; char buff[80], days[5], course[5] ; int len, start, stop, weight, num ; in.getline(buff,80); while (buff[0] != '@') { InsRecord ins(buff); in.getline(buff, 80); len = sscanf(buff, "%s %i %i %i", days, &start, &stop, &weight); while(len != 1) { ins.AddTimePref(days, start, stop, weight); in.getline(buff, 80); len = sscanf(buff, "%s %i %i %i", days, &start, &stop, &weight); } in.getline(buff, 80); len = sscanf(buff, "%i %s %i", &weight, course, &num); while(len != 0) { CourseID id(course, num); ins.AddCoursePref(id, weight); in.getline(buff, 80); len = sscanf(buff, "%i %s %i", &weight, course, &num); } Add(ins); in.getline(buff, 80); } } InsDB :: InsDB () {} InsDB :: InsDB (const InsDB& i) : GenericDB(i) {} InsDB :: ~InsDB () {} void InsDB :: Add (const InsName& i) { InsRecord ins_rec(i) ; data += ins_rec; } void InsDB :: Add (const InsRecord& ins_rec) { data += ins_rec; } Boolean InsDB :: Delete (const InsName& i) { InsRecord* ptr = (InsRecord*)data.ResetCurrent(); while (ptr != NULL) { if(ptr->GetName() == i) { data.DeleteCurrent(); return TRUE; } ptr = (InsRecord*)data.ListIter(); } return FALSE; } void InsDB :: View (const InsName& i) { InsRecord* ptr = (InsRecord*)data.ResetCurrent(); while (ptr != NULL) { if(ptr->GetName() == i) { ptr->print(); break; } ptr = (InsRecord*)data.ListIter(); } } void InsDB :: print () const { data.print(); } InsRecord* InsDB :: GetInstructor () { return (InsRecord*)DBIter(); } void InsDB :: PickySort () { InsRecord* cur = (InsRecord*)data.ResetCurrent() ; InsRecord* ptr ; InsRecord* min ; while (cur != NULL) { cur->SetPickyRank(); cur = (InsRecord*)data.ListIter(); } cur = (InsRecord*)data.ListIter(); while (cur != NULL) { ptr = cur; min = cur; while (ptr != NULL) { if( (ptr->GetPickyRank()) < (min->GetPickyRank()) ) min = ptr; ptr = (InsRecord*)ptr->GetNext(); } if (min != cur) { ptr = (InsRecord*)min->copy(); min->operator=(*cur); cur->operator=(*ptr); } cur = (InsRecord*)data.ListIter(); } }