Student Scedule

// OneRecord.h #ifndef ONE_RECORD_H #define ONE_RECORD_H #include <string> class OneRecord // to hold record for one subject { public: OneRecord() : name(""), sesion(0), credits(0) {} OneRecord(string str, unsigned short int ses, unsigned short int cred) : name(str), sesion(ses), credits(cred) {} void display() const; private: string name; unsigned short int sesion; unsigned short int credits; }; #endif
// one_record.cpp #include <iomanip> #include "OneRecord.h" //---------------------------------------------------------- void OneRecord::display() const //---------------------------------------------------------- { cout.setf(ios::left); cout << " " << setw(8) << name.c_str() << setw(4) << sesion << setw(6) << credits << endl; }
// Subject.h #ifndef SUBJECTS_H #define SUBJECTS_H #include <list> #include "OneRecord.h" typedef list<OneRecord> Record; class Subjects // to hold entire record for one student { public: bool create_record(); void display(); void remove_record(int); private: Record List; }; #endif
// subject.cpp #include "Subject.h" //---------------------------------------------------------- bool Subjects::create_record() //---------------------------------------------------------- { unsigned short int ses, cred; string sub, line(38,'='); cout << "Enter Subject: (0 - to exit) "; cin >> sub; if ( sub.size() <= 1 ) return false; cout << "Enter Sesion: "; cin >> ses; cout << "Enter Credits: "; cin >> cred; List.push_back(OneRecord(sub,ses,cred)); cout << line << endl; return true; } //---------------------------------------------------------- void Subjects::display() //---------------------------------------------------------- { int ind=0; string empty(14,' '); list<OneRecord>::const_iterator It = List.begin(); for ( ; It != List.end(); It++, ind++ ) { if (ind) cout << empty; It->OneRecord::display(); } } //---------------------------------------------------------- void Subjects::remove_record(int ind) //---------------------------------------------------------- { list<OneRecord>::iterator It = List.begin(); for ( int i = 0; i < ind; i++, It++ ) ; // put iterator It to neded place List.erase(It); }
// Menu.h #ifndef MENU_HH #define MENU_HH #include #include <map> #include "Subject.h" class Menu // to data manipulation { typedef map<string, Subjects> Map; // string - ID public: // Subjects - entire record void create_record(); void display(); void add_record(); void remove_record(); void erase_entire_record(); void display_one_record(); void one_record(Map::iterator,int); void banner(); void header(); private: Map M; // to hold list of all records }; #endif
// menu.cpp #include <iomanip> #include "Menu.h" //---------------------------------------------------------- void Menu::create_record() //---------------------------------------------------------- { system("clear"); while(1) // any number of students { string student_id; Subjects S; // every iteration - new object cout << "Enter Student ID: (0 - to exit) "; cin >> student_id; cout << endl; if ( student_id.size() <= 1 ) return; while (1) // any number of subjects { if ( !S.create_record() ) { cout << endl << endl; break; } } // student ID - key, S - value for map M M.insert(Map::value_type(student_id,S)); } } //---------------------------------------------------------- void Menu::header() //---------------------------------------------------------- { cout << " N° ID Subject Ses Cred" << endl; cout << "===================================" << endl; } //---------------------------------------------------------- void Menu::display() //---------------------------------------------------------- { int ind=1; // number of records Map::iterator It = M.begin(); system("clear"); header(); while ( It != M.end() ) { one_record(It,ind); It++; ind++; } } //---------------------------------------------------------- void Menu::add_record() //---------------------------------------------------------- { system("clear"); string str; cout << "Enter Student ID ( to add record ): "; cin >> str; cout << endl; Map::iterator It = M.find(str); It -> second.create_record(); } //---------------------------------------------------------- void Menu::remove_record() //---------------------------------------------------------- { system("clear"); string str; int ind; cout << "Enter Student ID ( to remove record ): "; cin >> str; cout << endl; Map::iterator It = M.find(str); // finding record header(); one_record(It,1); cout << "Enter number of record to remove "; cin >> ind; It->second.remove_record(ind-1); } //---------------------------------------------------------- void Menu::one_record(Map::iterator It, int ind) //---------------------------------------------------------- { cout.setf(ios::right); cout << setfill('0') << setw(3) << ind; cout.setf(ios::left); cout << setfill(' ') << " "; cout << (*It).first << " "; It -> second.display(); cout << endl; } //---------------------------------------------------------- void Menu::display_one_record() //---------------------------------------------------------- { string str; int ind=0; system("clear"); cout << "Enter Student ID ( to see one record ): "; cin >> str; cout << endl; Map::iterator It = M.find(str); header(); one_record(It,1); } //---------------------------------------------------------- void Menu::erase_entire_record() //---------------------------------------------------------- { system("clear"); string str; cout << "Enter Student ID ( to remove full record ): "; cin >> str; // student ID is key inside of map cout << endl; M.erase(str); } //---------------------------------------------------------- void Menu::banner() //---------------------------------------------------------- { string l(23,'='), bann = " M E N U", empty(26,' '); char *line[] = { "C - Create new record", "D - Display all records", "O - Display one record", "A - Add one record", "R - Erase one record", "E - Erase full record", "Q - Quit" }; cout << "\v\v\v" << empty << bann << endl; cout << empty << l << endl; for ( int i = 0; i < 7; i++ ) cout << empty << line[i] << endl; cout << empty << l << endl << endl; cout << endl << "Enter your Choice "; }
// schedule_driver.cpp #include <iostream> #include "Menu.h" //////////////////////////////////////////////////////////// int main () { Menu menu; char ch, a[10]; while(1) { system("clear"); menu.banner(); cin >> ch; switch(ch) { case 'c' : case 'C' : menu.create_record(); // cin.getline(a,2,'\n'); break; case 'd' : case 'D' : menu.display(); cin.ignore(2); break; case 'o' : case 'O' : menu.display_one_record(); cin.ignore(2); break; case 'a' : case 'A' : menu.add_record(); cin.getline(a,2,'\n'); break; case 'r' : case 'R' : menu.remove_record(); cin.getline(a,2,'\n'); break; case 'e' : case 'E' : menu.erase_entire_record(); cin.getline(a,2,'\n'); break; case 'q' : case 'Q' : return 0; default : cout << "Please, right choice "; cin.get(); } } }