Hi,
I am trying to implement a student grading system.
-Use an Associative container, multimap.
-Search record by Student name (the key) and the data consists of student ID and GPA.
Since more than one student can have the same name, use a
multimap.
progam does the following:
1. It will use a multimap as the container.
2. It will use the Student class to describe the
ID and GPA. multimap will be declared:
multimap<string, Student> grades;
3. use data(names, IDs and GPAs)
4. The main() driver will display a menu of commands available to
the user: The commands are:
a. insert a student’s data into the system, The program will
allow duplicate names to be inserted.
b. Find a student’s data, given the student’s name(key). If
there are multiple students in the container with the given
name, display information about all of them.
c.. Exit the system
1. should have a source (.h and .cpp) files
please help thanks
|
Newbie Member
|
|
| 22Mar2012,23:06 | #2 |
|
how i stated:
Code:
#include <iostream>
#include <string>
#include <map>
using namespace std;
class Student
{
public:
//--- Constructor
Student (int id = 0, double gpa = 0);
//--- Output operator
friend ostream & operator<<(ostream & out, const Student & s);
//--- Input operator
friend istream & operator>>(istream & in, Student & s);
//--- Less-than operator
friend bool operator<(const Student & a, const Student & b);
private:
//--- Data members
int myId;
double myGPA;
}; // end of class Student
//--- Definition of constructor
inline Student::Student(int id, double gpa)
: myId(id), myGPA(gpa)
{ }
//--- Definition of input operator
inline istream & operator>>(istream & in, Student & s)
{
in >> s.myId >> s.myGPA;
}
//--- Definition of output operator
inline ostream & operator<<(ostream & out, const Student & s)
{ out << "id = " << s.myId << " GPA = " << s.myGPA;
return out;
}
//--- Definition of less-than operator
inline bool operator<(const Student & a, const Student & b)
{ return a.myId < b.myId; }
//================================================================
int main()
{
//typedef multimap<string, Student>grades
typedef multimap<string, Student, less<string>> grades1;
typedef multimap<Student, string, less<Student>> grades2;
grades1 a1; // associative array of Student, index type is string
grades2 a2; // associative array of string, index type is Student
Student s;
s = Student(12345, 3.3); a1["Fred"] = s; a2[s] = "Fred";
s = Student(32322, 3.9); a1["Al"] = s; a2[s] = "Al";
s = Student(13131, 2.5); a1["Joan"] = s; a2[s] = "Joan";
s = Student(22121, 4.0); a1["Barb"] = s; a2[s] = "Barb";
s = Student(28888, 2.9); a1["George"] = s; a2[s] = "George";
s = Student(19981, 3.0); a1["Dot"] = s; a2[s] = "Dot";
s = Student(20012, 2.9); a1["Sue"] = s; a2[s] = "Sue";
string name;
cout << "Enter a name: ";
cin >> name;
grades1::iterator it1 = a1.find(name);
cout << name << " has ";
if (it1 == a1.end())
cout << "no info";
else
cout << a1[name];
cout << endl;
Student aStudent;
cout << "Enter a Student's id and GPA: ";
cin >> aStudent;
grades2::iterator it2 = a2.find(aStudent);
cout << "Student " << aStudent << " is ";
if (it2 == a2.end())
cout << "no info";
else
cout << a2[aStudent];
cout << endl;
}
|
|
Mentor
|
![]() |
| 23Mar2012,15:07 | #3 |
|
OK, what do you need help with? You've written some fairly advanced stuff there with friends and operators and so on, so the whole task should be straight forward for you.
|

