#include <iostream>
#include <string>
#include <vector>
#include <iomanip>
using namespace std;
struct Date {
int day, month, year;
};
class Person {
private:
string name;
Date dob;
public:
Person() {
}
Person(string name, Date dob) {
this->name = name;
this->dob = dob;
}
void input() {
cout << "\nTen: "; getline(cin, name);
cout << "Ngay sinh: "; cin >> dob.day >> dob.month >> dob.year; cin.ignore();
}
void print() {
cout << name << " - " << dob.day << "/" << dob.month << "/" << dob.year;
}
};
class Student: public Person {
private:
string address;
string email;
string telephone;
public:
Student() {
}
Student(string name, Date dob, string address, string email, string telephone):Person(name, dob) {
this->address = address;
this->email = email;
this->telephone = telephone;
}
void input() {
Person::input();
cout << "Nhap dia chi: "; getline(cin, address);
cout << "Nhap email: "; getline(cin, email);
cout << "Nhap SDT: "; getline(cin, telephone);
}
void print() {
Person::print();
cout << " - " << address << " - " << email << " - " << telephone;
}
};
class Undergrad: public Student {
private:
string school, major;
Person parent;
public:
Undergrad() {
}
Undergrad(string name, Date dob, string address,string email, string telephone, string school, string major,Person parent):Student(name, dob, address, email, telephone) {
this->school = school;
this->major = major;
this->parent = parent;
}
void input() {
Student::input();
cout << "Nhap truong: "; getline(cin, school);
cout << "Nhap chuyen nganh: "; getline(cin, major);
cout << "Nhap thong tin phu huynh: "; parent.input();
}
void print() {
Student::print();
cout << " - " << school << " - " << major << " - [";
parent.print();
cout << "]";
}
string getMajor() {
return major;
}
string getSchool() {
return school;
}
};
class Degree {
private:
string university, discipline;
Date awarded;
public:
Degree() {
}
Degree(string university, string discipline, Date awarded) {
this->university = university;
this->discipline = discipline;
this->awarded = awarded;
}
void input() {
cout << "\nTruong dai hoc: "; getline(cin, university);
cout << "Nganh hoc: "; getline(cin, discipline);
cout << "Thoi gian nhan bang: "; cin >> awarded.day >> awarded.month >> awarded.year; cin.ignore();
}
void print() {
cout << "[ " << university << "-" << discipline << "-" << awarded.day << "/" << awarded.month << "/" << awarded.year << " ]";
}
string getDiscipline() {
return discipline;
}
Date getAwarded() {
return awarded;
}
};
class GradStudent: public Student {
private:
string dept;
Degree lastDegree;
public:
GradStudent() {
}
GradStudent(string name, Date dob, string address, string email, string telephone, string dept, Degree lastDegree):Student(name, dob, address, email, telephone) {
this->dept = dept;
this->lastDegree = lastDegree;
}
void input() {
Student::input();
cout << "Nhap khoa: "; getline(cin, dept);
cout << "Nhap bang cap: "; lastDegree.input();
}
void print() {
Student::print();
cout << " - " << dept << " - ";
lastDegree.print();
}
Degree getLastDegree() {
return lastDegree;
}
string getDept() {
return this->dept;
}
};
int main () {
int n;
vector<Undergrad> undergrads;
cout << "Nhap so luong sinh vien dai hoc: ";
cin >> n; cin.ignore();
undergrads.resize(n);
// Nhap n sv dai hoc;
cout << "\n--Nhap " << n << " sinh vien dai hoc--";
for (int i=0; i<n; i++) {
undergrads[i].input();
}
// In sv cntt
cout << "\n---- Danh sach sinh vien nganh CNTT ----";
for (int i=0; i<undergrads.size(); i++) {
if (undergrads[i].getMajor() == "CNTT") {
cout << endl;
undergrads[i].print();
}
}
cout << "\n----------------------------------------\n";
// Tim sv theo truong
string searchText;
cout << "\nNhap ten truong can tim: "; getline(cin, searchText);
cout << ">> Danh sach sinh vien thuoc truong: " << searchText;
for (int i=0; i<undergrads.size(); i++) {
if (undergrads[i].getSchool() == searchText) {
cout << endl;
undergrads[i].print();
}
}
// Nhap ds hoc vien cao hoc
int m;
vector<GradStudent> gradStudents;
cout << "\n\n\nNhap so luong hoc vien cao hoc: "; cin >> m; cin.ignore();
gradStudents.resize(m);
// Nhap m sv cao hoc
cout << "\n--Nhap " << m << " hoc vien cao hoc--";
for (int i=0; i<gradStudents.size(); i++) {
gradStudents[i].input();
}
// In sv cao hoc
cout << "\n---- Danh sach hoc vien cao hoc ----";
for (int i=0; i<gradStudents.size(); i++) {
cout << endl;
gradStudents[i].print();
}
cout << "\n----------------------------------------\n";
//
cout << "\n---- Danh sach hoc vien co bang CNTT cap sau nam 2010 ----";
for (int i=0; i<gradStudents.size(); i++) {
if (gradStudents[i].getLastDegree().getDiscipline() == "CNTT" && gradStudents[i].getLastDegree().getAwarded().year >= 2010) {
cout << endl;
gradStudents[i].print();
}
}
// In ds hoc vien khoa cntt
cout << "\n\n---- Danh sach hoc vien thuoc khoa CNTT ----";
for (int i=0; i<gradStudents.size(); i++) {
if (gradStudents[i].getDept() == "CNTT") {
cout << endl;
gradStudents[i].print();
}
}
return 0;
}