一、项目需求
-
据了解,目前在校大学生80%以上有做兼职的需求,兼职打工已经不仅仅是经济困难的学生赚取生活费用的途径。调查显示,全球经济危机对就业产生冲击,用人单位对人员的社会实践能力要求提高,大学期间必要的社会实践既可以提高能力,又为适应社会,减轻家庭经济负担起到了积极的作用;社会中虚假兼职机构、欺骗性中介机构充斥,真伪难辨,学生受骗事件频发,极大的损害了学生的经济利益,甚至对学生的人生安全造成威胁。从校园踏入社会,兼职只是一段小小的插曲,通过兼职丰富阅历、增长社会经验固然是好事,可是毫无戒备的步入社会,不仅会事与愿违,还可能造成不必要的损所以。所以,我们需求设计一个校园兼职平台来方便在校学生找兼职。
-
本平台根据角色定位不同有不同的模块,首先系统有一个登录注册模块,属于兼职人员的模块有个人信息管理和兼职申请;属于管理员的模块有基本信息维护、兼职信息投放和系统管理。
-
平台登录注册:用户可以通过账号密码登录平台,如果用户是第一次使用该平台,则可以通过注册方式完成信息录入。平台根据用户输入的账号密码,判断该用户的角色是兼职人员还是管理员,展示不同的操作界面。如果用户忘记密码,可以通过自己的账号和注册时录入的真实姓名找回密码。
-
个人信息管理:能够对用户的基本信息进行管理,包括个人信息的修改,如学生转到别的专业,此时要修改学生的基本信息;修改密码,为了账户的安全性,可以修改用户的密码。查询信用等级,比如有一个用户一开始可以完成兼职等级最高的工作,但是在这次工作中,未能按时完成工作,于是管理员降低了该用户的信用等级,该用户就不能接高级的兼职工作了。查询余额,用户每次按时完成兼职能得到一笔费用,有逾期会扣除一部分佣金,最后得到总的余额。
-
兼职申请模块:用户能够查询所有的职位信息,因为信用等级的限制,用户也可以只查询自己能够申请的职位信息。查询到合适的职位用户可以直接申请,申请后到达工作截至时间前完成工作可以提前结束工作得到佣金,如果逾期后完成,管理员会调整用户的信用等级。用户可以查询自己已经完成过的兼职信息和自己正在完成的兼职信息。
-
基本信息维护模块:管理员能够根据用户完成兼职的情况动态的调整用户的兼职等级状态。管理员可以调整兼职的等级,管理员能够根据兼职的等级不同设置逾期费用扣除比例,比如最高级的兼职逾期一天扣10元,扣除兼职费用后继续扣除用户余额,直到用户余额为0,自动结束工作,结算费用。
-
兼职信息投放:管理员可以把所有公司的兼职招聘信息发布到网上,根据公司的需求设置岗位所需人员,工资以及兼职的时间段,比如发传单,这份兼职需要周一到周五的上午9点至11点工作,那么在这个时间段已经有了其他工作的用户就不能申请该工作。
-
系统管理模块:管理员能够删除管理员账户,也能删除平台用户以及一些完成过的兼职信息。管理员能够添加平台用户信息到系统,本平台是针对学生的软件,所以能够注册的只能是学生,所以平台需要提前将学生信息录入系统,用户才能注册账号,如果未能及时录入信息照成无法注册,那么就需要联系管理员进行信息录入。管理员可以添加其他的管理员账户,为了安全起见,管理员和普通用户一样能够修改密码。管理员还能够查询所有的用户信息、管理员账户信息、已经投放的职位信息、已经完成的兼职信息和已经逾期的兼职信息。
二、全局构图
三、项目
开始拿到项目的时候其实比较迷茫,不知道从什么地方下手,找不到突破点;所以我建议打架接到项目后一定要先对其进行一个大概的分析,不要拿着就开始直接写代码。充分了解项目需求后,最好还能够对项目做出后续的计划安排,之后在开始写代码实现功能。
言归正传直接上代码部分:
3.1 用户登录、注册
由于作者我是个愣头青,没什么实践编程经验的;所以我拿到项目需求后直接开始边看边写,打算一个模块一个模块的写,最后再将模块连起来,所以我直接从用户的登录注册界面开始写。
package 关卡16.view;
import java.io.IOException;
import java.text.ParseException;
import 关卡16.service.AccediService;
import 关卡16.service.PasswordService;
import 关卡16.service.SigninService;
public class Interfaccia {
public static void main(String[] args) throws IOException, ParseException {
AccediService accediService = new AccediService();
SigninService signinService = new SigninService();
PasswordService passwordService = new PasswordService();
boolean b1 = true;
while (b1){
System.out.println("---------------欢迎来到校园兼职平台----------------");
System.out.println("请选择你需要进行的操作:");
System.out.print("🐻1. 注册 ");
System.out.print("🐘2. 登录 ");
System.out.print("🦁3. 忘记密码 ");
System.out.println("🦊4. 退出软件");
System.out.println("⬇请选择: ");
String a = strumento.readKeyBoard(1);
//取a中的第一个字符
char ch = a.charAt(0);
if (ch != '1' && ch != '2' && ch != '3' && ch != '4') {
System.out.println("您输入的数据有误,请重新输入");
} else {
switch (ch) {
case '1':
accediService.registro();
break;
case '2':
signinService.Loginfunction();
break;
case '3':
passwordService.Passwordretrieval();
break;
case '4':
System.out.println("确认是否退出(Y/N):");
b1 = strumento.signOut();
break;
}
}
}
}
}
因为想着反正登录界面都一样,通过用户选择不同的身份,进行不同的身份识别。
- 跟一般软件一样,需要先注册在进行登录嘛,而本次实践项目主要考察IO流的知识,所以需要创建两个文件用来存放管理员和兼职人员的学号和姓名。
- 我们要根据这两个文件判断用户是否录入信息,录入之后才能开始注册功能
package 关卡16.service;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
import 关卡16.domain.Teacher;
import 关卡16.domain.User;
import static 关卡16.view.strumento.*;
public class AccediService {
Properties properties = new Properties();//读取录入的信息
Data1 data = new Data1();
//注册
public void registro() throws IOException {
int num=0;
int num1=0;
boolean x =true;
while (x){
//选择要注册的身份
System.out.println("===============欢迎来到校园兼职平台===============");
System.out.println("请选择你需要进行的操作:");
System.out.print("🐻1. 兼职人员注册 ");
System.out.print("🐘2. 管理员注册 ");
System.out.println("🦁3. 退出 ");
String s = readKeyBoard(1);
char ch = s.charAt(0);
if (ch != '1' && ch != '2' && ch !='3') {
System.out.println("您输入的数据有误,请重新输入");
}else {
switch (ch){
case '1':
System.out.println("请输入账户:");
String a = readKeyBoard(11);
if (data.arr1.size()>0){
for (int i = 0; i <data.arr1.size() ; i++) {
if (data.arr1.get(i).equals(a)){
System.out.println("用户已注册,无法再次注册!");
break;
}else {
num++;
if (num==data.arr1.size()){
Personaleparttime(a);
break;
}
}
}
}else {
Personaleparttime(a);
}
// x = false;
break;
case '2':
System.out.println("请输入账户:");
String b = readKeyBoard(11);
if (data.arr2.size()>0){
for (int i = 0; i <data.arr2.size() ; i++) {
if (data.arr2.get(i).equals(b)){
System.out.println("用户已注册,无法再次注册!");
break;
}else {
num1++;
if (num1==data.arr2.size()){
administrators(b);
break;
}
}
}
}else {
administrators(b);
}
break;
case '3':
System.out.println("确认是否退出(Y/N):");
x=signOut();
break;
}
}
}
}
//注册:兼职人员
public void Personaleparttime(String a) throws IOException {
int num=0;
int num1=0;
User user = new User();
//出生日期、性别、电话、所在院系、注册日期等
Scanner sc =new Scanner(System.in);
// System.out.println("请输入账户:");
// String a = readKeyBoard(11);
FileReader fileReader = new FileReader("D:\\黄埔训练营\\后端关卡8-16\\关卡16_第二个实践项目\\personale\\Personaleparttime.txt");
properties.load(fileReader);
Set<Object> keys = properties.keySet();
for (Object key : keys){
Object value = properties.get(key);
if (key.equals(a)){
System.out.println("请输入姓名:");
String name = sc.nextLine();
if (value.equals(name)){
System.out.println("请输入密码:");
String password = readKeyBoard(20);
System.out.println("请输入您的性别:");
String Gender = readKeyBoard(1);
System.out.println("请输入您的电话号码:");
long phone = restrictionType(11);
System.out.println("请输入所在院系:");
String college = readKeyBoard(10);
//关闭读入流
fileReader.close();
//添加用户
user.setUID((String) key);
user.setUsername((String) value);
user.setPassword(password);
user.setSex(Gender);
user.setPhone(phone);
user.setDepartment(college);
int age =birthday();
user.setAge(age);
String age1 = age+"";
//注册时间
String time = time();
System.out.println(time);
user.setRegdat(time);
data.arruser.add(user);
data.arr1.add((String)key);
//写入文件
FileWriter fileWriter = new FileWriter("D:\\黄埔训练营\\后端关卡8-16\\关卡16_第二个实践项目\\personale\\RegistrationInformation1.txt");
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
for (int i = 0; i <data.arruser.size() ; i++) {
bufferedWriter.write(transformation(data.arruser.get(i)));
bufferedWriter.newLine();
}
bufferedWriter.close();
System.out.println("注册成功!");
return;
}else {
System.out.println("姓名输入错误!");
break;
}
}else {
num++;
if (num==12){
System.out.println("该信息未被录入!");
break;
}
}
}
}
//注册:管理员
public void administrators(String a) throws IOException {
int num1 = 0;
Teacher teacher = new Teacher();
//出生日期、性别、电话、所在院系、注册日期等
Scanner sc = new Scanner(System.in);
// System.out.println("请输入账户:");
// String a = readKeyBoard(11);
FileReader fileReader = new FileReader("D:\\黄埔训练营\\后端关卡8-16\\关卡16_第二个实践项目\\personale\\gestione.txt");
properties.load(fileReader);
Set<Object> keys = properties.keySet();
for (Object key : keys) {
Object value = properties.get(key);
if (key.equals(a)) {
System.out.println("请输入姓名:");
String name = readKeyBoard(4);
if (value.equals(name)) {
System.out.println("请输入密码:");
String password = readKeyBoard(20);
System.out.println("请输入您的性别:");
String Gender = readKeyBoard(1);
System.out.println("请输入您的电话号码:");
long phone = restrictionType(11);
System.out.println("请输入所在院系:");
String college = readKeyBoard(10);
//关闭读入流
fileReader.close();
//添加用户
teacher.setUID((String) key);
teacher.setUsername((String) value);
teacher.setPassword(password);
teacher.setSex(Gender);
teacher.setPhone(phone);
teacher.setDepartment(college);
int age = birthday();
teacher.setAge(age);
String age1 = age + "";
//注册时间
String time = time();
System.out.println(time);
teacher.setRegdat(time);
data.arrteacher.add(teacher);
data.arr2.add((String) key);
//写入文件
FileWriter fileWriter = new FileWriter("D:\\黄埔训练营\\后端关卡8-16\\关卡16_第二个实践项目\\personale\\RegistrationInformation2.txt");
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
for (int i = 0; i < data.arrteacher.size(); i++) {
bufferedWriter.write(transformation(data.arrteacher.get(i)));
bufferedWriter.newLine();
}
bufferedWriter.close();
System.out.println("注册成功!");
return;
} else {
System.out.println("姓名输入错误!");
break;
}
} else {
num1++;
if (num1 == 12) {
System.out.println("该信息未被录入!");
break;
}
}
}
}
}
下面是登录的代码:
package 关卡16.service;
import 关卡16.view.AdministratorinterfaceView;
import 关卡16.view.UserinterfaceViwe;
import java.io.*;
import java.text.ParseException;
import static 关卡16.view.strumento.readKeyBoard;
import static 关卡16.view.strumento.signOut;
public class SigninService {
AdministratorinterfaceView administratorinterfaceView = new AdministratorinterfaceView();
UserinterfaceViwe userinterfaceViwe = new UserinterfaceViwe();
Data1 data = new Data1();
//登录功能
public void Loginfunction() throws IOException, ParseException {
boolean x = true;
while (x){
//选择登录身份
System.out.println("============登录============");
System.out.println("请选择你需要进行的操作:");
System.out.print("🐻1. 兼职人员登录 ");
System.out.print("🐘2. 管理员登录 ");
System.out.println("🦁3. 退出 ");
String s = readKeyBoard(1);
char ch = s.charAt(0);
if (ch != '1' && ch != '2' && ch !='3') {
System.out.println("您输入的数据有误,请重新输入");
}else {
switch (ch){
case '1':
BufferedReader bufferedReader = new BufferedReader(new FileReader("D:\\黄埔训练营\\后端关卡8-16\\关卡16_第二个实践项目\\personale\\RegistrationInformation1.txt"));
String line;
if ((line = bufferedReader.readLine())==null){
System.out.println("无用户注册,请注册后登录!");
bufferedReader.close();
}else {
System.out.println("请输入账户:");
String a = readKeyBoard(11);
Logindetection(a);
}
break;
case '2':
BufferedReader bufferedReader2 = new BufferedReader(new FileReader("D:\\黄埔训练营\\后端关卡8-16\\关卡16_第二个实践项目\\personale\\RegistrationInformation2.txt"));
String line1;
if ((line1 = bufferedReader2.readLine())==null){
System.out.println("无用户注册,请注册后登录!");
bufferedReader2.close();
}else {
System.out.println("请输入账户:");
String b = readKeyBoard(11);
AdministratorLogin(b);
}
break;
case '3':
System.out.println("确认是否退出(Y/N):");
x=signOut();
break;
}
}
}
}
//用户登录
public void Logindetection(String a) throws IOException, ParseException {
BufferedReader bufferedReader1 = new BufferedReader(new FileReader("D:\\黄埔训练营\\后端关卡8-16\\关卡16_第二个实践项目\\personale\\RegistrationInformation1.txt"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("D:\\黄埔训练营\\后端关卡8-16\\关卡16_第二个实践项目\\personale\\Loginpersonnel.txt"));
String line;
int num=0;
while ((line = bufferedReader1.readLine())!=null){
String[] splits = line.split(",");
if (splits[0].equals(a)){
System.out.println("请输入密码:");
String password = readKeyBoard(20);
if (splits[2].equals(password)){
System.out.println("用户登录成功!");
// String information = "用户ID: "+splits[0]+",用户姓名: "+splits[0]+",用户信誉等级: "+splits[8]+",账户余额: "+splits[9];
String information = a+","+splits[8]+","+splits[9];
bufferedWriter.write(information);
bufferedWriter.close();
userinterfaceViwe.Maininterface();
break;
}
else {
System.out.println("密码输入错误!");
break;
}
}else{
num++;
if (num==data.arr1.size()){
System.out.println("账号输入错误!");
break;
}
}
}
bufferedReader1.close();
}
//管理员登录
public void AdministratorLogin(String b) throws IOException{
BufferedReader bufferedReader1 = new BufferedReader(new FileReader("D:\\黄埔训练营\\后端关卡8-16\\关卡16_第二个实践项目\\personale\\RegistrationInformation2.txt"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("D:\\黄埔训练营\\后端关卡8-16\\关卡16_第二个实践项目\\personale\\Loginpersonnel.txt"));
String line;
int num=0;
while ((line = bufferedReader1.readLine())!=null){
String[] splits = line.split(",");
if (splits[0].equals(b)){
System.out.println("请输入密码:");
String password = readKeyBoard(20);
if (splits[2].equals(password)){
System.out.println("管理员登录成功!");
// String information = "用户ID: "+splits[0]+",用户姓名: "+splits[0]+",用户信誉等级: "+splits[8]+",账户余额: "+splits[9];
String information = b+","+splits[8]+","+splits[9];
bufferedWriter.write(information);
bufferedWriter.close();
administratorinterfaceView.administrators();
break;
}
else {
System.out.println("密码输入错误!");
break;
}
}else{
num++;
if (num==data.arr2.size()){
System.out.println("账号输入错误!");
break;
}
}
}
bufferedReader1.close();
}
}
那么问题很多的龙龙就会问了,如果我忘了密码怎么办呢? 没关系我们还准备了贴心的密码找回功能,只要你还记得用户名和账户我们就能贴心的帮你找回
package 关卡16.service;
import 关卡16.view.strumento;
import static 关卡16.view.strumento.*;
public class PasswordService {
Data1 data = new Data1();
//密码找回
public void Passwordretrieval(){
boolean x = true;
while (x) {
//选择登录身份
System.out.println("=============密码找回=============");
System.out.println("请选择你需要进行的操作:");
System.out.print("🐻1. 兼职人员密码找回 ");
System.out.print("🐘2. 管理员密码找回 ");
System.out.println("🦁3. 退出 ");
String s = readKeyBoard(1);
char ch = s.charAt(0);
if (ch != '1' && ch != '2' && ch != '3') {
System.out.println("您输入的数据有误,请重新输入");
}else{
switch (ch){
case '1':
if (data.arruser.size()==0){
System.out.println("无用户注册,请注册后找回密码!");
x =false;
}else {
Employee1();
}
break;
case '2':
if (data.arrteacher.size()==0){
System.out.println("无管理员注册,请注册后找回密码!");
x =false;
}else {
administrators();
}
break;
case '3':
System.out.println("确认是否退出(Y/N):");
x= strumento.signOut();
break;
}
}
}
}
//员工密码
public void Employee1(){
int num=0;
System.out.println("请输入账户:");
String account = readKeyBoard(11);
for (int i = 0; i <data.arruser.size() ; i++) {
if (data.arruser.get(i).getUID().equals(account)){
System.out.println("请输入用户名:");
String name =readKeyBoard(4);
if (data.arruser.get(i).getUsername().equals(name)){
System.out.println("您的密码是:"+data.arruser.get(i).getPassword());
}
}else {
num++;
if (num==data.arruser.size()){
System.out.println("账号错误!");
}
}
}
}
//管理员密码
public void administrators(){
int num=0;
System.out.println("请输入账户:");
String account = readKeyBoard(11);
for (int i = 0; i <data.arrteacher.size() ; i++) {
if (data.arrteacher.get(i).getUID().equals(account)){
System.out.println("请输入用户名:");
String name =readKeyBoard(4);
if (data.arrteacher.get(i).getUsername().equals(name)){
System.out.println("您的密码是:"+data.arrteacher.get(i).getPassword());
}
}else {
num++;
if (num==data.arrteacher.size()){
System.out.println("账号错误!");
}
}
}
}
}
3.2 管理员模块
在写完公有的登录界面后就可以开始写,管理员模块或者兼职人员模块;因为兼职人员的有些功能是的实现是需要管理员那边先录入数据,所以先写管理员模块会比较好。
别问我怎么知道的,因为我是个愣头青,先写的兼职人员模块,写一半发现某些功能他展示无法实现,只能写完管理员模块后再回来改。
话说回来管理员模块一共分为3个模块,每个模块各有许多不同的功能。
这次我大概扫了一眼,按从左到右的顺序直接写就行,不存在逻辑上的顺序问题了。
3.2.1 基本信息维护
基本信息维护的代码如下:
package 关卡16.service;
import 关卡16.domain.User;
import 关卡16.view.strumento;
import java.io.*;
import static 关卡16.view.strumento.*;
public class InformationmaintenanceService {
Data1 data = new Data1();
public void Maintain() throws IOException {
//读取文件重新写入数组
BufferedReader bufferedReader = new BufferedReader(new FileReader("D:\\黄埔训练营\\后端关卡8-16\\关卡16_第二个实践项目\\personale\\RegistrationInformation1.txt"));
String line;
while ((line=bufferedReader.readLine())!=null){
data.arruser.add(transformation(line));
}
bufferedReader.close();
boolean x = true;
while (x) {
System.out.println("=============