招聘模拟Java(包含思路、结果及流程图)

该博客介绍了一个使用Java实现的招聘管理系统,系统通过链表数据结构管理应聘者,并按成绩进行归并排序。应聘者可以申报两个工种,系统按第一志愿录取,未录取消减5分后重新排序考虑第二志愿。程序包括应聘者信息管理、链表操作、归并排序和录取策略等功能。最后,展示了模拟招聘过程,包括应聘者录取和落选情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

问题描述: 某公司为发展生产向社会公开招聘m个工种的工作人员,每个工种各有不同的编号(0,1,2,…,m-1)和计划招聘人数,参加招聘的人数有n个(编号为0,1,2,…,n-1)。每位应聘者可以申报两个工种,并参加公司组织的考试。公司将按应聘者的成绩,从高到低的顺序排队录取。公司的录取原则是:从高分到低分依次对每位应聘者按其第一志愿录取;当不能按第一志愿录取时,便将他的成绩扣去5分后,重新排队,并按其志愿考虑录取。

功能要求: 要求程序输出每个工种录用者的信息(编号和成绩),以及落选者的信息(编号和成绩)。

设计思路: 程序为每个工种保留一个录取者的有序队列。录取处理循环直至招聘额满,或已对全部应聘者都做了录用处理。

在这里,假设招聘的工种数为m=3,分别是工种0,工种1和工种2;而应聘者的序号是由系统自动从0开始排序的

代码

应聘者属性:

package keshe.entity;

/**
 * @ClassName 应聘者
 * @Description DOTO
 * @Author 作者
 * @Date 2021/12/15 4:16
 * @Version 1.0
 **/
public class Applicant {
    public int id;  //编号
    public double grade;    //成绩
    public int first;   //第一工种
    public int second;  //第二工种

    public Applicant () {}//无参构造函数

    public Applicant(int id, double grade, int first, int second) {//带参构造函数
        this.id = id;
        this.grade = grade;
        this.first = first;
        this.second = second;
    }
}

 接口:

package keshe.service;

import keshe.entity.Applicant;

public interface ILinked {//接口
    //尾插法创建链表
    void addLast(Applicant applicant);

    //打印单链表
    void display(Node head);

    //归并排序
    public Node sortNode (Node head);

    //删除节点--按照应聘者的序号进行删除
    public void remove(int id);
}

 节点类

package keshe.service;
import keshe.entity.Applicant;

/**
 * @ClassName 节点类
 * @Description DOTO
 * @Author 作者
 * @Date 2021/12/15 4:18
 * @Version 1.0
 **/
public class Node {
    public Node next;   //指针域
    public Applicant applicant;   //数据域--员工对象

    public Node (Applicant applicant) {
        this.applicant = applicant;
    }
}

 链表类:

package keshe.service;

import keshe.entity.Applicant;

/**
 * @ClassName 实现类--链表类
 * @Description DOTO
 * @Author 作者
 * @Date 2021/12/15 4:20
 * @Version 1.0
 **/
public class SingleListed implements ILinked{
    public Node head;   //创建头结点


    @Override
    //创建链表
    public void addLast(Applicant applicant) {  //尾插法创建链表
        Node node = new Node(applicant);    //创建一个实体对象
        Node cur = this.head;   //尾结点指向头结点

        //如果是第一次插入,直接到尾结点
        if(this.head == null) {
            this.head = node;
        } else {
            //找尾巴
            while(cur.next != null) {
                cur = cur.next;
            }
            //推出上面的循环,cur所执行的位置就是尾结点
            cur.next = node;
        }

    }

    @Override
    //打印
    public void display(Node head) {
        Node p = head;
        while (p != null) {
            System.out.println("该应聘者的序号为:" + p.applicant.id);
            System.out.println("该应聘者的成绩为:" + p.applicant.grade);
            System.out.println();
            p = p.next;
        }
        System.out.println();
    }

    @Override
    //排序
    public Node sortNode(Node head) {
        //采用归并排序
        if (head == null || head.next == null) {
            return head;
        }
        //获取中间节点
        Node mid = getMid(head);
        Node right = mid.next;
        mid.next = null;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_1_7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值