面向对象的程序设计-实验课-课堂练习

根据题目实现求职中心应用程序。
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;

}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值