#include <string>
#include "Relations.h"
#include <iostream>
using namespace std;
//Link attribute structure
//Uniquely identifies a student-class link
struct Record{
Record(const string& grade = string(), int absenses = 0)
: Grade(grade), Absenses(absenses){}
string Grade;
int Absenses;
};
main(){
/*
There is a many-to-many relationship between students and
classes: a student might be in many classes and a class might
have many students
*/
//Many-To-Many relationship with a link attribute
typedef ManyMany <string, long, less<string>, less<long>,
Record> School_Rel;
School_Rel school;
Record r1("A", 1);
school.insert("Peter", 101, r1);
Record r2("B", 2);
school.insert("Peter", 102, r2);
Record r3("C", 3);
school.insert("Peter", 103, r3);
Record r4("A", 1);
school.insert("Jane", 101, r4);
Record r5("B", 1);
school.insert("Jane", 103, r5);
Record r6("A", 4);
school.insert("Jane", 104, r6);
cout << "Listing Peter's classes:" << endl;
for(School_Rel::iterator2 it = school.begin("Peter"),
end = school.end("Peter"); it != end; ++it)
cout << *it << endl;
cout << endl;
cout << "Listing students in 103: " << endl;
for(School_Rel::iterator1 it = school.begin(103),
end = school.end(103); it != end; ++it)
cout << *it << endl;
cout << endl;
const Record* r = school.getAttribute("Peter", 103);
if(r){
cout << "Peter's Grade and absenses for 103:" << endl;
cout << "Grade - " << r->Grade << " Absenses - "
<< r->Absenses << endl;
}
////////////////////////////////////////////////////////////
////Many-To-Many relationship without a link attribute
ManyMany <string, long> school1;
school1.insert("Peter", 101);
school1.insert("Peter", 102);
school1.insert("Peter", 103);
school1.insert("Jane", 101);
school1.insert("Jane", 103);
school1.insert("Jane", 104);
cout << "Listing Jane's classes:" << endl;
for(ManyMany <string, long> ::iterator2 it =
school1.begin("Jane"), end = school1.end("Jane");
it != end; ++it)
cout << *it << endl;
cout << endl;
cout << "Listing students in 101: " << endl;
for(ManyMany <string, long>::iterator1 it =
school1.begin(101), end = school1.end(101);
it != end; ++it)
cout << *it << endl;
}
/*
Output:
Listing Peter's classes:
101
102
103
Listing students in 103:
Peter
Jane
Peter's Grade and absenses for 103:
Grade - C Absenses - 3
Listing Jane's classes:
101
103
104
Listing students in 101:
Peter
Jane
*/
End of Listing