实践项目三: 校园兼职平台(合作重构版)

news2024/11/26 21:28:26

项目说明

1
据了解,目前在校大学生80%以上有做兼职的需求,兼职打工已经不仅仅是经济困难的学生赚取生活费用的途径。调查显示,全球经济危机对就业产生冲击,用人单位对人员的社会实践能力要求提高,大学期间必要的社会实践既可以提高能力,又为适应社会,减轻家庭经济负担起到了积极的作用;社会中虚假兼职机构、欺骗性中介机构充斥,真伪难辨,学生受骗事件频发,极大的损害了学生的经济利益,甚至对学生的人生安全造成威胁。从校园踏入社会,兼职只是一段小小的插曲,通过兼职丰富阅历、增长社会经验固然是好事,可是毫无戒备的步入社会,不仅会事与愿违,还可能造成不必要的损所以。所以,我们需求设计一个校园兼职平台来方便在校学生找兼职。

2
本平台根据角色定位不同有不同的模块,首先系统有一个登录注册模块,属于兼职人员的模块有个人信息管理和兼职申请;属于管理员的模块有基本信息维护、兼职信息投放和系统管理。

3
平台登录注册:用户可以通过账号密码登录平台,如果用户是第一次使用该平台,则可以通过注册方式完成信息录入。平台根据用户输入的账号密码,判断该用户的角色是兼职人员还是管理员,展示不同的操作界面。如果用户忘记密码,可以通过自己的账号和注册时录入的真实姓名找回密码。

4
个人信息管理:能够对用户的基本信息进行管理,包括个人信息的修改,如学生转到别的专业,此时要修改学生的基本信息;修改密码,为了账户的安全性,可以修改用户的密码。查询信用等级,比如有一个用户一开始可以完成兼职等级最高的工作,但是在这次工作中,未能按时完成工作,于是管理员降低了该用户的信用等级,该用户就不能接高级的兼职工作了。查询余额,用户每次按时完成兼职能得到一笔费用,有逾期会扣除一部分佣金,最后得到总的余额。

5
兼职申请模块:用户能够查询所有的职位信息,因为信用等级的限制,用户也可以只查询自己能够申请的职位信息。查询到合适的职位用户可以直接申请,申请后到达工作截至时间前完成工作可以提前结束工作得到佣金,如果逾期后完成,管理员会调整用户的信用等级。用户可以查询自己已经完成过的兼职信息和自己正在完成的兼职信息。

6
基本信息维护模块:管理员能够根据用户完成兼职的情况动态的调整用户的兼职等级状态。管理员可以调整兼职的等级,供用户选择。管理员能够根据兼职的等级不同设置逾期费用扣除比例,比如最高级的兼职逾期一天扣10元,扣除兼职费用后继续扣除用户余额,直到用户余额为0,自动结束工作,结算费用。

7
兼职信息投放:管理员可以把所有公司的兼职招聘信息发布到网上,根据公司的需求设置岗位所需人员,工资以及兼职的时间段,比如发传单,这份兼职需要周一到周五的上午9点至11点工作,那么在这个时间段已经有了其他工作的用户就不能申请该工作。

8
系统管理模块:管理员能够删除管理员账户,也能删除平台用户以及一些完成过的兼职信息。管理员能够添加平台用户信息到系统,本平台是针对学生的软件,所以能够注册的只能是学生,所以平台需要提前将学生信息录入系统,用户才能注册账号,如果未能及时录入信息照成无法注册,那么就需要联系管理员进行信息录入。管理员可以添加其他的管理员账户,为了安全起见,管理员和普通用户一样能够修改密码。管理员还能够查询所有的用户信息、管理员账户信息、已经投放的职位信息、已经完成的兼职信息和已经逾期的兼职信息。

项目功能流程结构图

在这里插入图片描述
1.基本功能不变,增删改查,相应的加上一些逻辑处理的过程,就比如用户
(1)登录注册功能:用户通过注册进入平台,注册信息包括用户编号(用户编号决定角色类型,学号注册为兼职人员,教师编号注册为管理员),注册后到登录界面输入账号和密码登录平台,注册信息包括:用户编号(学号/教师编号)、密码、姓名、出生日期、性别、电话、所在院系、注册日期等。后期如果忘记了密码,用户通过自己的账号和注册时的姓名找回密码。注意,为了安全起见,只有已经录入系统的用户可以注册账户,本平台提前录入了部分管理员和学生的信息到系统中供大家注册。(相关存储数据可通过数据库存储)
(2)个人信息管理:包括个人信息修改、密码修改、查询信用等级和查询余额功能。普通用户登录成功之后,可以修改个人注册时录入的信息,学号和注册时间不可更改,密码单独修改;也可以查询个人的信用等级,若信用等级不是最高,则查询个人信用等级时附加显示“按时完成X次后信用等级恢复至X级”(默认未逾期完成兼职工作3次恢复1级信用等级,等级梯度为1-5级,5级最高)。(相关存储数据可通过数据库存储)
(3)兼职申请功能:包括兼职信息查询、申请工作和结束工作。用户登录成功之后,可以查询所有的兼职信息,包括自己能申请的职位和不能申请的职位,也可以只查看自己能申请的职位(是否可申请与信用等级、岗位所需人员、兼职时间相关)。用户还可查看自己已完成的兼职信息和自己正在完成的兼职信息。满足条件的兼职,用户可以申请,开始工作时间为系统当前时间,相对的该兼职岗位对应的所需人员需要减少;完成工作后(逾期完成信用自动降低1级,0级为最低,0级后不可再申请兼职工作),需要计算所得薪酬(所得薪酬和是否逾期、逾期天数相关),若未逾期且信用等级未满,则需要计算恢复信用等级所需的次数,完成时间手动输入,不可小于兼职开始时间。(相关存储数据可通过数据库存储)
(4)基本信息维护功能:包括兼职等级设置、用户信用调整和逾期费用扣除比例调整。管理员端登录成功之后,可以调整兼职的等级(兼职等级梯度为一-五级,五级最高,一级最低),普通用户的信用等级>=兼职等级可申请职位,还可以增删兼职的类型,比如开发外包/销售/设计师等。管理员可以根据用户的表现动态地调整用户的信用等级,可越级增减,0级信用的普通用户管理员不可调整其信用等级。管理员还可以调整兼职的逾期费用,每天逾期扣除的费用相同,比如:原定一份兼职总薪资1000元,工作要求10天完成,逾期1天扣除100元,调整后一天扣除200元(扣除兼职费用为0后继续扣除用户余额,直到用户余额为<=0,自动结束工作,结算费用)。(相关存储数据可通过数据库存储)
(5)兼职信息投放:包括兼职人员设置、兼职的金额设置、兼职的时间录入以及兼职的其他信息录入。系统管理员登录成功之后可以把所有公司发布的兼职信息录入到平台,录入信息包括:营业执照编号、公司名字、岗位名称、兼职类型、兼职等级、工作内容、需求人数、工作时间等。系统管理员可以根据市场和公司要求,动态调整这些兼职工作的部分内容,比如需求人数、薪水等,工作时间不允许更改。(相关存储数据可通过数据库存储)
(6)系统管理功能:包括对普通用户、管理员和兼职信息的增删查改等。系统提前录入了一些管理员或者学生的信息在系统中,但是未全部录入,所以后续需要注册的用户需要已经录入的管理员登录平台进行信息录入,系统录入仅需要学号/教师编号和姓名即可,此信息供用户注册使用。管理员可以删除普通用户和别的管理员,以及没有用的兼职信息。(相关存储数据可通过数据库存储)
2.(补充功能来自于上面功能图中红色部分,具体细节如下:)
提供了又一个新的角色,发布兼职人员。他的角色就相当于公司的招聘人员,可以根据公司需求,去这个平台上发布自己公司对应需要的兼职信息。
发布兼职人员基本功能:
可以对兼职信息进行发布
可以对自己发布的兼职信息进行查看(状态:未通过,已通过,未审批),还可以查看审核过关的信息是否有兼职人员已经接取。
可以对自己发布的兼职信息进行撤销
为了保证兼职人员的安全性,所有发布兼职人员发布的信息都需要管理员审批通过后才能展示给兼职人员,如果信息虚假可由管理员直接拒绝。

管理员添加的功能:
可以对兼职信息进行审批
可以有审批通过的信息才能展示给兼职人员查看
可以发布兼职人员进行增,删,改,查

大概流程
1.先由管理人员添加发布兼职人员的信息
2.再由发布兼职人员登录后去平台发布兼职信息
3.接着等管理人员审批同意兼职信息后,信息方能在兼职人员界面看到相关信息
4.最后兼职人员登录平台可以去选择自己想要兼职的信息,进行兼职

登录注册:

//首界面
package com.view;

import java.util.Scanner;

public class Index {
    public static void main(String[] args) {
        Enroll enroll = new Enroll();
        Scanner sc = new Scanner(System.in);
        Login login = new Login();
        ForgotPasswordView forgot = new ForgotPasswordView();
        boolean flag = true;
        while (flag) {
            System.out.println("==========校园兼职平台==========");
            System.out.println("1-注册     2-登录     3-忘记密码     4-退出");
            int options = sc.nextInt();
            switch (options) {
                //注册
                case 1:
                    enroll.register();
                    break;
                //登录
                case 2:
                    login.IndexLogin();
                    break;
                //找回密码
                case 3:
                    forgot.forgot();
                    break;
                case 4:
                    System.out.println("确定退出吗?(N/Y)");
                    String choice = sc.next();
                    if (choice.equals("Y")) {
                        flag = false;
                    }
                    break;
                default:
                    System.out.println("输入有误!请重新输入!");
                    break;
            }
        }
    }
}

//注册界面
package com.view;

import com.service.AdminService;
import com.service.ReleasePartTimeService;
import com.service.UserService;
import com.service.serviceimpl.AdminServicelmpl;
import com.service.serviceimpl.ReleasePartTimeServicelmpl;
import com.service.serviceimpl.UserServiceImpl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

/**
 * @author BaBa
 * @Version 1/0
 */
public class Enroll {
    private Scanner sc = new Scanner(System.in);
    private ReleasePartTimeService RP = new ReleasePartTimeServicelmpl();
    private UserService userService = new UserServiceImpl();
    private AdminService adminService = new AdminServicelmpl();
    //注册
    public void register() {
        boolean flag = true;
        while (flag) {
            System.out.println("==========");
            System.out.println("1.注册为用户");
            System.out.println("2.注册为管理员");
            System.out.println("3.注册为发布人员");
            System.out.println("4.退出");
            int options = sc.nextInt();
            switch (options) {
                //注册为用户
                case 1:
                    registerUser();
                    break;
                //注册为管理员
                case 2:
                    while (true) {
                        System.out.println("请输入管理员账号(3xxx):");
                        int AminNumber = sc.nextInt();
                        if (Integer.toString(AminNumber).startsWith("3")) {
                            System.out.println("请输入密码:");
                            String AminPassword = sc.next();
                            adminService.addAdmin(AminNumber,AminPassword);
                            break;
                        } else {
                            System.out.println("输入不合法(3xxx),请重新输入!");
                        }
                    }
                    break;
                case 3:
                    while (true) {
                        System.out.println("请输入发布人员账号(2xxx):");
                        int number  = sc.nextInt();
                        if (Integer.toString(number).startsWith("2")) {
                            System.out.println("请输入密码:");
                            String password = sc.next();
                            RP.register(number, password);
                            break;
                        } else {
                            System.out.println("输入不合法(2xxx),请重新输入!");
                        }
                    }
                    break;
                case 4:
                    System.out.println("退出中!");
                    flag = false;
                    break;
                default:
                    System.out.println("您输入的有误,请重新输入!!!");
            }
        }
    }

    public void registerUser() {
        List list = new ArrayList();
        while (true) {
            System.out.println("请输入用户账号(1xxx):");
            int UserNumber = sc.nextInt();
            if (Integer.toString(UserNumber).startsWith("1")) {
                list.add(UserNumber);
                break;
            } else {
                System.out.println("输入不合法(2xxx),请重新输入!");
            }
        }
        System.out.println("请输入密码:");
        String UserPassword = sc.next();
        list.add(UserPassword);
        System.out.println("请输入名字:");
        String UserName = sc.next();
        list.add(UserName);
        System.out.println("请输入年龄:");
        int age= sc.nextInt();
        list.add(age);
        System.out.println("请输入性别:");
        String sex= sc.next();
        list.add(sex);
        System.out.println("请输入电话号码(11位):");
        String phone = sc.next();
        list.add(phone);
        System.out.println("请输入所在院校:");
        String department = sc.next();
        list.add(department);
        Date date = new Date();
        list.add(new Date(date.getTime()));
        userService.add(list);
    }
}

//登录界面
package com.view;

import com.service.AdminService;
import com.service.ReleasePartTimeService;
import com.service.UserService;
import com.service.serviceimpl.AdminServicelmpl;
import com.service.serviceimpl.ReleasePartTimeServicelmpl;
import com.service.serviceimpl.UserServiceImpl;
import java.util.Scanner;

//登录界面
public class Login{
    private Scanner sc = new Scanner(System.in);
    private UserService userService = new UserServiceImpl();
    private ReleasePartTimeService rpts = new ReleasePartTimeServicelmpl();
    private AdminService adminService = new AdminServicelmpl();
    private UserView userView = new UserView();
    private ReleasePartTimeView releasePartTimeView = new ReleasePartTimeView();
    private AdminView  adminView = new AdminView();
    public void IndexLogin(){
        boolean flag= true;
        while (flag) {
            System.out.println("====登录界面====");
            System.out.println("1.用户");
            System.out.println("2.发布人员");
            System.out.println("3.管理员");
            System.out.println("4.退出");
            int options = sc.nextInt();
            switch (options){
                //用户
                case 1:
                        System.out.println("请输入您的编号:");
                        int usernumber = sc.nextInt();
                        if (Integer.toString(usernumber).startsWith("1")){
                            System.out.println("请输入您的密码:");
                            String password = sc.next();
                            boolean b = userService.loginUser(usernumber, password);
                            if (b){
                                System.out.println("登录成功!");
                                userView.UserView(usernumber);
                            }else {
                                System.out.println("您输入的账号或密码错误,请检查后登录!!!");
                            }
                        }else {
                            System.out.println("您的输入有误,请重新输入!!");
                        }
                    break;
                //发布人员
                case 2:
                        System.out.println("请输入您的编号:");
                        int releasenumber= sc.nextInt();
                        if (Integer.toString(releasenumber).startsWith("2")){
                            System.out.println("请输入您的密码:");
                            String releaseps = sc.next();
                            boolean boo = rpts.ReleasePartTimelogin(releasenumber, releaseps);
                            if (boo){
                                System.out.println("登录成功!");
                                releasePartTimeView.ReleasePartTimeView(releasenumber);
                            }else {
                                System.out.println("您输入的账号或密码错误,请检查后登录!!!");
                            }
                        }else {
                            System.out.println("您的输入有误,请重新输入!!");
                        }
                    break;
                //管理员
                case 3:
                        System.out.println("请输入您的编号:");
                        int adminnumber = sc.nextInt();
                        if (Integer.toString(adminnumber).startsWith("3")){
                            System.out.println("请输入您的密码:");
                            String adminps = sc.next();
                            boolean bool = adminService.loginAdmin(adminnumber,adminps);
                            if (bool){
                                System.out.println("登录成功!");
                                adminView.adminView(adminnumber);
                            }else {
                                System.out.println("您输入的账号或密码错误,请检查后登录!!!");
                            }
                        }else {
                            System.out.println("您的输入有误,请重新输入!!");
                        }
                    break;
                //退出
                case 4:
                    flag=false;
                    break;
                default:
                    System.out.println("您输入的有误,请重新输入!!!");
                    break;
            }
        }
    }
}

其他的已近没有什么写的必要,学好数据库,这个项目就没什么了!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/629456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java学习笔记(StringJoiner和集合)

StringJoiner StringJoiner与StringBuilder一样&#xff0c;也可以看成是一个容器&#xff0c;创建之后的内容是可变的 作用&#xff1a;提高字符串的操作效率&#xff0c;而且代码编写特别简洁&#xff0c;但是目前市场上很少有人用 构造方法&#xff1a; 方法名 说明 pub…

四、HAL_驱动机械按键

1、开发环境。 (1)KeilMDK&#xff1a;V5.38.0.0 (2)STM32CubeMX&#xff1a;V6.8.1 (3)MCU&#xff1a;STM32F407ZGT6 2、机械按键简介 (1)按键内部是机械结构&#xff0c;也就是内部是没有电路的。按键按下内部引脚导通&#xff0c;松开内部断开。 3、实验目的&原理…

Git、Github、Gitee的区别

⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;Git 目录 1、Git2、Gitee3、GitHub 什么是版本管理&#xff1f;   版本管理是管理各个不同的版本&#xff0c;出了问题可以及时回滚。 1、Git Git是一个分布式版本控制系统&#xff0c;用于跟踪和管理代码的变化。它是…

开源代码分享(2)—综合能源系统零碳优化调度

参考文献&#xff1a; Optimal dispatch of zero-carbon-emission micro Energy Internet integrated with non-supplementary fired compressed air energy storage system | SGEPRI Journals & Magazine | IEEE Xplore 1.引言 全球能源危机和环境污染的双重压力促使能量…

mysql 删表引出的问题

背景 将测试环境的表同步到另外一个数据库服务器中&#xff0c;但有些表里面数据巨大&#xff0c;&#xff08;其实不同步该表的数据就行&#xff0c;当时没想太多&#xff09;&#xff0c;几千万的数据&#xff01;&#xff01; 步骤 1. 既然已经把数据同步过来的话&#x…

chatgpt赋能python:Python怎么从1加到100

Python怎么从1加到100 Python是一种面向对象的编程语言&#xff0c;随着人工智能和大数据技术的流行&#xff0c;Python也变得越来越受欢迎。Python有很多优点&#xff0c;其中之一就是易于学习和使用。在这篇文章中&#xff0c;我们将介绍如何用Python从1加到100。 前置知识…

还在为浏览量焦虑吗?为何不用R语言来做归因分析找出痛点

一、引言 大家好&#xff0c;我是一名博客作者&#xff0c;同时也是一个有着浏览量焦虑症的患者。每次发一篇新的博客文章&#xff0c;我总是不停地刷新页面&#xff0c;看看有多少人来访问、阅读和留言。当发现访问量不如自己预期时&#xff0c;我就会有一种被冷落、被忽视的…

【DFT】MBIST (1) MBIST基础

MBSIT基础 1. 存储器测试2. 存储器结构3. 存储器故障模型3.1 固定故障(SAF)3.2 转换故障(TF)3.3 耦合故障(CF)3.4 桥接和状态耦合故障 4. 功能测试方法4.1 March 测试算法4.2 March-C 算法4.3 MATS 算法4.4 其他的 March 测试 5. MBSIT方法5.1 简单的 March MBIST1. 简单的Marc…

灵动超值系列FTHR-G0140开发板

文章目录 引言MM32G0140微控制器FTHR-G0140电路板MM32G0140最小核心系统供电系统可编程按键和小灯扩展插座 MindSDK软件开发平台 引言 2023年上半年的一些活动现场&#xff08;包括但不限于4月在苏州的全国高校电子信息类专业教学论坛、5月和6月在同济大学、四川大学、南京大学…

Vue3+Vite+TypeScript常用项目模块详解

目录 1.Vue3ViteTypeScript 概述 1.1 vue3 1.1.1 Vue3 概述 1.1.2 vue3的现状与发展趋势 1.2 Vite 1.2.1 现实问题 1.2 搭建vite项目 1.3 TypeScript 1.3.1 TypeScript 定义 1.3.2 TypeScript 基本数据类型 1.3.3 TypeScript语法简单介绍 2. 项目配置简单概述 2.…

chatgpt赋能python:如何在Python中二次运行同一个命令语句

如何在Python中二次运行同一个命令语句 如果您是一个熟练的Python开发者&#xff0c;一定会遇到必须二次运行同一个命令语句的情况。在本文中&#xff0c;我们将探讨Python中的几种方法来实现这一目标。 方法1&#xff1a;使用Python Shell Python Shell是Python解释器的一个…

R 语言学习笔记

1. 基础语法 赋值 a 10; b <- 10;# 表示流向&#xff0c;数据流向变量&#xff0c;也可以写成10 -> b创建不规则向量 不用纠结什么是向量&#xff0c;就当作一个容器&#xff0c;数据类型要相同 a c("我","爱","沛")创建一定规则的向…

编译原理 | 课程设计 — 语法分析

第1关&#xff1a;使用C/C语言编写PL/0编译程序的语法分析程序 1、任务描述 基于第二章的词法分析程序&#xff0c;使用C/C语言编写PL/0编译程序的语法分析程序。 2、编程要求 完成上述编程任务&#xff0c;将C/C语言源程序复制粘贴到右侧代码编辑器&#xff0c;点击“评测”按…

bthclsbthclsbthcls

Sql简单查询 创建数据库/表 进入数据库&#xff1a;mysql -uroot -p123456 支持中文字符&#xff1a; Set character_set_databaseutf8; Set character_set_serverutf8; 1.创建数据库 create database demo; use demo; 2.创建数据表 create table score( id int primar…

Day_48堆排序

目录 一. 关于堆排序 1. 堆的定义 二. 堆排序的实现 1. 堆排序的思路 2. 堆排序的问题分析 3. 堆排序的具体实施 4. 效率分析 三. 堆排序的代码实现 1. 堆排序 2. 调整堆&#xff08;核心代码&#xff09; 四. 代码展示 五. 数据测试 六. 总结 一. 关于堆排序 1. 堆的定义…

Shell脚本学习记录

shell教程 第一个shell脚本 打开文本编辑器(可以使用 vi/vim 命令来创建文件)&#xff0c;新建一个文件 test.sh&#xff0c;扩展名为 sh&#xff08;sh代表shell&#xff09;。 #!/bin/bash echo "Hello World !" #! 是一个约定的标记&#xff0c;它告诉系统这个…

ieda codeformatV2.xml

ieda codeformatV2.xml 目录概述需求&#xff1a; 设计思路实现思路分析1.codeformatV22.codeformatV23.codeformatV24.codeformatV25.数据处理器 拓展实现 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&…

MySQL数据库基础 08

第八章 聚合函数 1. 聚合函数介绍1.1 AVG和SUM函数1.2 MIN和MAX函数1.3 COUNT函数 2. GROUP BY2.1 基本使用2.2 使用多个列分组2.3 GROUP BY中使用WITH ROLLUP 3. HAVING3.1 基本使用3.2 WHERE和HAVING的对比 4. SELECT的执行过程4.1 查询的结构4.2 SELECT执行顺序4.3 SQL 的执…

MT1619

MT1619 是一款PD快充开关电源转换器芯片&#xff0c;其内部集成了一颗高集成度、高性能的电流模式 PWM 控制器和一颗功率 MOSFET。它适用于小于 30W 的开关电源设备。MT1619 具有恒功率功能&#xff0c;特别适用于 PD 充电器、电源适配器等中小功率的开关电源设备。极低的启动电…

[golang 微服务] 5. 微服务服务发现介绍,安装以及consul的使用,Consul集群

一.服务发现介绍 引入 上一节讲解了使用 gRPC创建微服务,客户端的一个接口可能需要调用 N个服务,而不同服务可能存在 不同的服务器,这时&#xff0c;客户端就必须知道所有服务的 网络位置&#xff08;ipport&#xff09;&#xff0c;来进行连接服务器操作,如下图所示: 以往的做…