根据题目实现求职中心应用程序。
1.求职者对“求职中心”的职位需求信息非常关心,很想跟踪“求职中心”中职位需求信息的变化。“求职中心”让求职者把个人信息登记下来。当出现新的职位需求时,“求职中心”会通知全体求职者,而求职者会根据不同的职位需求做出不同的响应:应聘或忽略。
2.编写程序,模拟求职者在“求职中心”进行登记,“求职中心”发布职位需求信息,求职者决定是否应聘的过程。
(1)定义“求职中心”类JobCenter,其成员变量可以保存所有的求职者;
(2)定义求职者类JobSeeker,定义2种不同类型的求职者对象,应届大学毕业生Student类和有工作经验的求职者Experienced类,并在“求职中心”中进行注册登记;
(3)“求职中心”发布新的职位需求信息,并及时通知所有注册过的求职者。
(4)求职者能够自动接收信息,并做出响应:应聘或忽略。
(5)应届大学毕业生做出应聘的响应之前,还必须先经过学校(University)的审核:绩点(GPA)不低于2.5分才允许毕业和参加应聘;成绩低于2.5分就必须留级一年,不能参加应聘。
3.题目要求
(1)创建新的工程项目Findjob;
(2)为每个类编写单独的头文件和源文件,例如JobCenter.h和JobCenter.cpp;
(3)主程序对应的源文件名为Findjob.cpp,里面包含main()函数。
4.编写程序并测试。可以自由扩展程序。
class JobCenter {
public:
void addStudent(Student *pStudent); // 添加学生求职者
void addExperienced(Experienced *pExperienced); // 添加有工作经验求职者
void publishMessage(const string &message); // 发布职位需求信息
void notifyJobSeekers(); // 通知所有的求职者,让他们接收职位需求信息
private:
string message; // 职位需求信息
········ // 其他属性
int numJobSeeker; // 当前求职者的数量
Student *studentsList[100]; // 指针数组,保存Student对象的指针
Experienced *experiencedList[100]; // 指针数组,保存Experienced对象的指针
};
class JobSeeker {
public:
JobSeeker(const string &name, int age);
void answerPhone(const string &message); // 接收职位需求信息
protected:
string name; //名字
int age; //年龄
};
class Student: public JobSeeker { // 应届大学毕业生
public:
Student(const string &name, int age, double GPA, JobCenter *,…); // 在求职中心登记
void answerPhone(const string &message);
};
class Experienced: public JobSeeker { // 有工作经验的求职者
public:
Experienced(const string &name, int age, JobCenter *jobCenter);
void answerPhone(const string &message); // 如果是程序员的工作,就应聘
};
class University { // 应届大学毕业生所在的大学
public:
University(const string &name);
…examine(…); // 学校审核应届大学生是否能够按时毕业。自己定义
private:
string name; // 学校名称
};
int main() {
JobCenter *jobCenter = new JobCenter(); // 创建“求职中心”
University ouc(“中国海洋大学”);
// 创建求职者,并在求职中心登记
Student *zhang = new Student("小张", 22, 3.3, jobCenter);
Experienced *wang = new Experienced("小王", 30, jobCenter);
Student *li = new Student("小李", 21, 2.4, jobCenter);
// 求职中心发布职位需求信息,并通知全体求职者
jobCenter->publishMessage("腾辉公司需要10个C++程序员。");
jobCenter-> notifyJobSeekers();
cout << endl;
jobCenter->publishMessage("海景公司需要8个动画设计师。");
jobCenter-> notifyJobSeekers();
cout << endl;
jobCenter->publishMessage("仁海公司需要9个电工。");
jobCenter-> notifyJobSeekers();
cout << endl;
delete li;
...... // 其他代码,完成收尾工作
}
9.程序执行完毕后,命令行窗口显示的结果:
求职中心成立了
发布招聘信息:腾辉公司需要10个C++程序员。
通知所有求职者…
我叫小张,我是一名毕业生,我收到了招聘信息:腾辉公司需要10个C++程序员。可以应聘。
我叫小王,我有工作经验,待遇要好。我收到了招聘信息:腾辉公司需要10个C++程序员。可以应聘。
我叫小李,我是一名毕业生,我收到了招聘信息:腾辉公司需要10个C++程序员。无法毕业,不能应聘。
发布招聘信息:海景公司需要8个动画设计师。
通知所有求职者…
我叫小张,我是一名毕业生,我收到了招聘信息:海景公司需要8个动画设计师。可以应聘。
我叫小王,我有工作经验,待遇要好。我收到了招聘信息:海景公司需要8个动画设计师。工作不合适,不应聘。
我叫小李,我是一名毕业生,我收到了招聘信息:海景公司需要8个动画设计师。无法毕业,不能应聘。
发布招聘信息:仁海公司需要9个电工。
通知所有求职者…
我叫小张,我是一名毕业生,我收到了招聘信息:仁海公司需要9个电工。可以应聘。
我叫小王,我有工作经验,待遇要好。我收到了招聘信息:仁海公司需要9个电工。工作不合适,不应聘。
我叫小李,我是一名毕业生,我收到了招聘信息:仁海公司需要9个电工。无法毕业,不能应聘。
求职中心关闭了
提示:采用下面的方法判断一个字符串中是否含有指定的子串。
if (str1.find(str2) != string::npos) {
cout << “found!” << endl;
**}
JobSeeker.h**
#pragma once
#ifndef JOBSEEKER_H_
#define JOBSEEKER_H_
#include<string>
using namespace std;
class JobSeeker {
public:
JobSeeker(const string& name, int age);
virtual void answerPhone(const string& message); // 接收职位需求信息
string getName();
protected:
string name; //名字
int age; //年龄
};
#endif
JobSeeker.cpp
#include<iostream>
#include"JobSeeker.h"
using namespace std;
JobSeeker::JobSeeker(const string& name, int age) :name(name), age(age) {}
void JobSeeker::answerPhone(const string& message) {
}
Student.h
#pragma once
#ifndef STUDENT_H_
#define STUDENT_H_
#include"JobCenter.h"
using namespace std;
class JobCenter;
class JobSeeker;
class Student;
class Experienced;
class Student : public JobSeeker { // 应届大学毕业生
public:
Student(const string& name, int age, double GPA, JobCenter* jobCenter); // 在求职中心登记
void answerPhone(const string& message);
private:
double GPA;
};
#endif
Student.cpp
#include
#include"JobCenter.h"
using namespace std;
class JobCenter;
class JobSeeker;
class Student;
class Experienced;
Student::Student(const string& name, int age, double GPA, JobCenter* jobCenter) :JobSeeker(name, age), GPA(GPA) {
jobCenter->addStudent(this);
}
void Student::answerPhone(const string& message) {
if (GPA >= 2.5)
cout << “我叫” << name << “,我是一名毕业生,我收到了招聘信息:” << message << “可以应聘。”<<endl;
else
cout << “我叫” << name << “,我是一名毕业生,我收到了招聘信息:” << message << “无法毕业,不能应聘。”<<endl;
}
Experienced.h
```cpp
#pragma once
#ifndef EXPERIENCED_H_
#define EXPERIENCED_H_
#include"JobSeeker.h"
using namespace std;
class JobCenter;
class JobSeeker;
class Student;
class Experienced;
class Experienced : public JobSeeker { // 有工作经验的求职者
public:
Experienced(const string& name, int age, JobCenter* jobCenter);
void answerPhone(const string& message); // 如果是程序员的工作,就应聘
};
#endif
Experienced.cpp
#include<iostream>
#include"Experienced.h"
#include"JobCenter.h"
Experienced::Experienced(const string& name, int age, JobCenter* jobCenter) :JobSeeker(name, age) {
jobCenter->addExperienced(this);
}
void Experienced::answerPhone(const string& message) {
cout << "我叫" << name << "," << "我有工作经验,待遇要好。我收到了招聘信息:" << message;
if (message.find("程序员") != string::npos)cout << "可以应聘。";
else cout << "工作不合适,不应聘。";
cout << endl;
}
JobCenter.h
#pragma once
#ifndef JOBCENTER_H_
#define JOBCENTER_H_
#include<iostream>
#include"Experienced.h"
#include"JobSeeker.h"
#include"Student.h"
using namespace std;
class JobCenter;
class JobSeeker;
class Student;
class Experienced;
class JobCenter {
public:
JobCenter();
void addStudent(Student* pStudent); // 添加学生求职者
void addExperienced(Experienced* pExperienced); // 添加有工作经验求职者
void publishMessage(const string& message); // 发布职位需求信息
void notifyJobSeekers(); // 通知所有的求职者,让他们接收职位需求信息
private:
string message; // 职位需求信息
int numJobSeeker; // 当前求职者的数量
Student* studentsList[100]; // 指针数组,保存Student对象的指针
Experienced* experiencedList[100]; // 指针数组,保存Experienced对象的指针
JobSeeker* jobSeekerList[200];
};
#endif
JobCenter.cpp
#include<iostream>
#include"JobCenter.h"
using namespace std;
JobCenter::JobCenter() :numJobSeeker(0){
cout << "求职中心成立了" << endl << endl;
}
void JobCenter::addStudent(Student* pStudent) {
jobSeekerList[numJobSeeker++] = pStudent;
}
void JobCenter::addExperienced(Experienced* pExperienced) {
jobSeekerList[numJobSeeker++] = pExperienced;
}
void JobCenter::publishMessage(const string& message) {
this->message = message;
cout << "发布招聘信息:" << message << endl<<endl;
}
void JobCenter::notifyJobSeekers() {
cout << "通知所有求职者..." << endl;
for (int i = 0; i < numJobSeeker; i++) {
jobSeekerList[i]->answerPhone(message);
}
}
FindJob.cpp
#include<iostream>
#include"JobCenter.h"
#include"University.h"
using namespace std;
int main() {
JobCenter* jobCenter = new JobCenter(); // 创建“求职中心”
//University ouc("中国海洋大学");
// 创建求职者,并在求职中心登记
Student* zhang = new Student("小张", 22, 3.3, jobCenter);
Experienced* wang = new Experienced("小王", 30, jobCenter);
Student* li = new Student("小李", 21, 2.4, jobCenter);
// 求职中心发布职位需求信息,并通知全体求职者
jobCenter->publishMessage("腾辉公司需要10个C++程序员。");
jobCenter->notifyJobSeekers();
cout << endl;
jobCenter->publishMessage("海景公司需要8个动画设计师。");
jobCenter->notifyJobSeekers();
cout << endl;
jobCenter->publishMessage("仁海公司需要9个电工。");
jobCenter->notifyJobSeekers();
cout << endl;
delete li;
delete jobCenter;
cout << endl << "求职中心关闭了" << endl;
}