任务要求 idea jdk1.8 三层结构的任务管理系统可以实现登录,判断登录用户权限等操作

任务管理系统

一、系统需求

查询所有任务信息:展示所有任务信息

录入任务信息:

  • 用户输入:任务名, 预计完成时间(Date) , 责任人
  • 状态: 默认是 未开始

开始任务

提示用户输入任务编号

将任务的状态改为进行中

完成任务

提示用户输入任务编号

将任务的状态改为已完成, 同时将 finishDate 设置为当前系统时间

二、任务信息

编号 id , 任务名 name,预计完成时间 deadLine ,完成时间 finishDate , 状态: 进行中、已完成、未开始,责任人:worker

三、升级

不做强制要求

难度: ⭐⭐⭐⭐⭐

添加一个登录功能:

运行系统,

**** 欢迎使用 xxx 系统 ****

请登录

请输入账户:xxx

请输入密码:xxx

1、登录失败

用户名密码错误!

**** 欢迎使用 xxx 系统 ****

请登录

请输入账户:xxx

请输入密码:xxx

2、登录成功

欢迎您:昵称

原始菜单: 用户类User: nickname, loginname,password , role

如果role = 1: 超级管理员,能看到所有菜单

如果role = 0:普通用户: 看不到添加菜单

3、查询任务

普通用户只能查到自己的任务

超管能查到所有用户的任务

任务类中,应该多一个用户id字段

4、退出

实体类-Task(任务信息)

package cn.kgc.bms.entity;import java.util.Date;
import java.util.Objects;public class Task {private int id;private String name;private Date deadLine;private Date finishDate;private String state;private String worker;public Task(String state) {this.state = state;}public Task(int id, String name, Date deadLine, Date finishDate, String state, String worker) {this.id = id;this.name = name;this.deadLine = deadLine;this.finishDate = finishDate;this.state = state;this.worker = worker;}public Task(String name, Date deadLine, Date finishDate, String state, String worker) {this.name = name;this.deadLine = deadLine;this.finishDate = finishDate;this.state = state;this.worker = worker;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Task task = (Task) o;return id == task.id;}@Overridepublic int hashCode() {return Objects.hash(id);}@Overridepublic String toString() {return id+"\t"+name+"\t"+deadLine+"\t"+finishDate+"\t"+state+"\t"+worker;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getDeadLine() {return deadLine;}public void setDeadLine(Date deadLine) {this.deadLine = deadLine;}public Date getFinishDate() {return finishDate;}public void setFinishDate(Date finishDate) {this.finishDate = finishDate;}public String getState() {return state;}public void setState(String state) {this.state = state;}public String getWorker() {return worker;}public void setWorker(String worker) {this.worker = worker;}public Task() {}
}

实体类-User(用户信息)

package cn.kgc.bms.entity;public class User {private String nickName;private String loginName;private String password;private int role;public User() {}public User(String loginName, String password) {this.loginName = loginName;this.password = password;}public User(String nickName, String loginName, String password, int role) {this.nickName = nickName;this.loginName = loginName;this.password = password;this.role = role;}public String getNickName() {return nickName;}public void setNickName(String nickName) {this.nickName = nickName;}public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getRole() {return role;}public void setRole(int role) {this.role = role;}
}

工具包-DateUtil

package cn.kgc.bms.util;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;public class DateUtil {private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";/*** 获取当前的系统时间* @return 系统时间*/public static Date currentDate(){return new Date();}/*** 将 date 格式的字符串转换为一个日期对象* @param dateStr  date 格式的字符串* @param pattern  日期字符串的格式* @return 日期对象*/public static Date str2Date(String dateStr,String pattern) {try {SimpleDateFormat sf = new SimpleDateFormat(pattern);return sf.parse(dateStr);} catch (ParseException e) {throw new RuntimeException("字符串转换日期出错,字符串:" + dateStr+",格式为:" + pattern,e);}}/*** 将 date 格式的字符串转换为一个日期对象* 使用默认的格式: yyyy-MM-dd HH:mm:ss* @param dateStr  date 格式的字符串* @return 日期对象*/public static Date str2Date(String dateStr) {return str2Date(dateStr,DEFAULT_PATTERN);}/*** 将日期转为字符串* @param date      日期* @param pattern   日期格式* @return 转换后的字符串*/public static String date2String( Date date , String pattern){SimpleDateFormat sf= new SimpleDateFormat(pattern);return sf.format(date);}/*** 将日期转为字符串* 使用默认的格式: yyyy-MM-dd HH:mm:ss* @param date      日期* @return 转换后的字符串*/public static String date2String(Date date){return date2String(date,DEFAULT_PATTERN);}/*** 获取当前系统时间的下一天的日期* @return 日期对象*/public static Date getNextDay(){return getNextDay(currentDate(),1);}/*** 获取特定日期的下一天* @param oriDate 某个日期* @return 下一天的日期*/public static Date getNextDay(Date oriDate){return getNextDay(oriDate,1);}/*** 获取指定日期的指定天数后的日期* @param oriDate 原始日期* @param amount  天数* @return 新日期*/public static Date getNextDay(Date oriDate,int amount){Calendar c = Calendar.getInstance();c.setTime(oriDate);c.add(Calendar.DAY_OF_MONTH,amount);return c.getTime();}/*** 获取当前系统日期的指定天数后的日期* @param amount  天数* @return 新日期*/public static Date getNextDay(int amount){return getNextDay(currentDate(),amount);}/*** 获取年份* @param date 日期* @return 年份*/public static Integer getYear(Date date){Calendar c = Calendar.getInstance();c.setTime(date);return c.get(Calendar.YEAR);}/*** 获取月份* @param date 日期* @return 月份*/public static Integer getMonth(Date date){Calendar c = Calendar.getInstance();c.setTime(date);return c.get(Calendar.MONTH) + 1;}/*** 获取日期* @param date 日期* @return 日期*/public static Integer getDate(Date date){Calendar c = Calendar.getInstance();c.setTime(date);return c.get(Calendar.DAY_OF_MONTH);}/*** 获取小时* @param date 日期* @return 小时*/public static Integer getHour(Date date){Calendar c = Calendar.getInstance();c.setTime(date);return c.get(Calendar.HOUR_OF_DAY);}/*** 获取分钟* @param date 日期* @return 分钟*/public static Integer getMinute(Date date){Calendar c = Calendar.getInstance();c.setTime(date);return c.get(Calendar.MINUTE);}/*** 获取秒数* @param date 日期* @return 秒数*/public static Integer getSecond(Date date){Calendar c = Calendar.getInstance();c.setTime(date);return c.get(Calendar.SECOND);}/*** 获取两个日期相差的天数: 精确到秒* @param startDate 起始日期  7.22 15* @param endDate 终止日期    7.24 16* @return 天数*/public static Integer getDurationWithSecond(Date startDate,Date endDate){int duration = 0;while (startDate.before(endDate)){startDate =  getNextDay(startDate);duration++;}return duration;}/*** 获取两个日期相差的天数: 精确到天* @param startDate 起始日期  7.22 13* @param endDate 终止日期    7.24 15* @return 天数*/public static Integer getDurationWithDay(Date startDate,Date endDate){Calendar start = Calendar.getInstance();Calendar end = Calendar.getInstance();clearTime(start);clearTime(end);return getDurationWithSecond(start.getTime(),end.getTime());}/*** 获取一个日期* @param year  年* @param month 月* @param day   日* @return*/public static Date getDate(int year,int month,int day){Calendar c = Calendar.getInstance();c.set(year, month-1, day,0,0,0);return c.getTime();}/*** 获取一个日期* @param year   年* @param month  月* @param day    日* @param hour   时* @param minute 分* @param second 秒* @return*/public static Date getDate(int year,int month,int day,int hour,int minute,int second){Calendar c = Calendar.getInstance();c.set(year, month-1, day, hour, minute, second);return c.getTime();}private static void clearTime(Calendar calendar){calendar.set(Calendar.HOUR,0);calendar.set(Calendar.MINUTE,0);calendar.set(Calendar.SECOND,0);}}

接口类-TaskMapper

package cn.kgc.bms.mapper;import cn.kgc.bms.entity.Task;import java.util.List;public interface TaskMapper {List<Task> selectAll();void insert(Task task);void begin(int id);void complete(int id);List<Task> selectName(String name);
}

接口类-UserMapper

package cn.kgc.bms.mapper;import cn.kgc.bms.entity.User;import java.util.List;public interface UserMapper {User login(String loginName, String passWord);
}

接口类-TaskService

package cn.kgc.bms.service;import cn.kgc.bms.entity.Task;import java.util.List;public interface TaskService {List<Task> selectAll();void insert(Task task);void begin(int id);void complete(int id);List<Task> selectName(String name);
}

接口类-UserService

package cn.kgc.bms.service;import cn.kgc.bms.entity.User;public interface UserService {User login(String loginName, String passWord);}

实现类-TaskMapperImpl

package cn.kgc.bms.mapper.impl;import cn.kgc.bms.entity.Task;
import cn.kgc.bms.mapper.TaskMapper;
import cn.kgc.bms.util.DateUtil;
import sun.security.timestamp.TSRequest;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;public class TaskMapperImpl implements TaskMapper {private Integer i =6;private List<Task> taskList = new ArrayList<>();private Date date = new Date(0);public TaskMapperImpl() {taskList.add(new Task(1,"打扫卫生",null,date,"未开始","狗蛋"));taskList.add(new Task(2,"搬凳子",null,date,"未开始","叮当"));taskList.add(new Task(3,"擦窗户",null,date,"未开始","张三"));taskList.add(new Task(4,"擦车",null,date,"未开始","HGG"));taskList.add(new Task(5,"吃饭",null,date,"未开始","HGG"));}@Overridepublic List<Task> selectAll() {return this.taskList;}@Overridepublic void insert(Task task) {task.setId(i++);taskList.add(task);}@Overridepublic void begin(int id) {for (int j = 0; j < taskList.size(); j++) {Task taskBegin = taskList.get(j);if (taskBegin.getId() == id){taskList.get(j).setState("进行中");}}}@Overridepublic void complete(int id) {for (int j = 0; j < taskList.size(); j++) {Task taskComplete = taskList.get(j);if (taskComplete.getId() == id){Date dateNow = new Date();taskList.get(j).setState("已完成");taskList.get(j).setDeadLine(dateNow);}}}@Overridepublic List<Task> selectName(String name) {List<Task> findNameList = new ArrayList<>();for (int i = 0; i < taskList.size(); i++) {if (taskList.get(i).getWorker().equals(name)){findNameList.add(taskList.get(i));}}return findNameList;}
}

实现类-UserMapperImpl

package cn.kgc.bms.mapper.impl;import cn.kgc.bms.entity.User;
import cn.kgc.bms.mapper.UserMapper;
import sun.dc.pr.PRError;import java.util.ArrayList;
import java.util.List;public class UserMapperImpl implements UserMapper {private List<User> userList = new ArrayList<>();public UserMapperImpl() {userList.add(new User("HGG","a","a",1));userList.add(new User("超级管理员","b","b",0));}@Overridepublic User login(String loginName, String passWord) {for (int i = 0; i < userList.size(); i++) {if (userList.get(i).getLoginName().equals(loginName) && userList.get(i).getPassword().equals(passWord)){return userList.get(i);}}return null;}}

实现类-TaskServiceImpl

package cn.kgc.bms.service.impl;import cn.kgc.bms.entity.Task;
import cn.kgc.bms.factory.ObjectFactory;
import cn.kgc.bms.mapper.TaskMapper;
import cn.kgc.bms.service.TaskService;import java.util.List;public class TaskServiceImpl implements TaskService {private TaskMapper taskMapper = ObjectFactory.getBean(TaskMapper.class);@Overridepublic List<Task> selectAll() {return taskMapper.selectAll();}@Overridepublic void insert(Task task) {taskMapper.insert(task);}@Overridepublic void begin(int id) {taskMapper.begin(id);}@Overridepublic void complete(int id) {taskMapper.complete(id);}@Overridepublic List<Task> selectName(String name) {return taskMapper.selectName(name);}
}

实现类-UserServiceImpl

package cn.kgc.bms.service.impl;import cn.kgc.bms.entity.User;
import cn.kgc.bms.factory.ObjectFactory;
import cn.kgc.bms.mapper.UserMapper;
import cn.kgc.bms.service.UserService;public class UserServiceImpl implements UserService {UserMapper userMapper = ObjectFactory.getBean(UserMapper.class);@Overridepublic User login(String loginName, String passWord) {return userMapper.login(loginName,passWord);}
}

工厂类-ObjectFactory

package cn.kgc.bms.factory;import cn.kgc.bms.entity.Task;
import cn.kgc.bms.mapper.TaskMapper;
import cn.kgc.bms.mapper.UserMapper;
import cn.kgc.bms.mapper.impl.TaskMapperImpl;
import cn.kgc.bms.mapper.impl.UserMapperImpl;
import cn.kgc.bms.service.TaskService;
import cn.kgc.bms.service.UserService;
import cn.kgc.bms.service.impl.TaskServiceImpl;
import cn.kgc.bms.service.impl.UserServiceImpl;import java.util.HashMap;
import java.util.Map;public class ObjectFactory {private static Map<Class,Object> objects;static {// 初始化mapobjects =  new HashMap<>();// 将所有的对象全部放到map中objects.put(TaskMapper.class,new TaskMapperImpl());objects.put(TaskService.class,new TaskServiceImpl());objects.put(UserMapper.class,new UserMapperImpl());objects.put(UserService.class,new UserServiceImpl());}public static <T> T getBean(Class<T> cls){return (T)objects.get(cls);}
}

输入输出层-UserController

package cn.kgc.bms.controller;import cn.kgc.bms.entity.Task;
import cn.kgc.bms.entity.User;
import cn.kgc.bms.factory.ObjectFactory;
import cn.kgc.bms.service.TaskService;
import cn.kgc.bms.service.UserService;
import cn.kgc.bms.util.DateUtil;
import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
import sun.security.timestamp.TSRequest;import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;public class TaskController {private UserService userService = ObjectFactory.getBean(UserService.class);private TaskService taskService = ObjectFactory.getBean(TaskService.class);private Scanner sc = new Scanner(System.in);private int role = 0;private String name = null;public void run(){while (true){login();if (role == 0){role0();}if (role == 1){role1();}}}private void role0() {while (true){printMenu();int chioce = sc.nextInt();if (chioce == 1){findAll();}if (chioce == 2){insert();}if (chioce == 3){begin();}if (chioce == 4){complete();}if (chioce == 5){System.out.println("再见");break;}}}private void role1() {while (true){printMenuPuTong();int choice = sc.nextInt();if (choice == 1){findName();}if (choice == 2){begin();}if (choice == 3){complete();}if (choice == 4){System.out.println("再见");break;}}}private void findName() {List<Task> findNameList =taskService.selectName(name);findNameList.forEach(System.out::println);}private void printMenuPuTong() {System.out.println("您好,"+name);System.out.println("1.查询");System.out.println("2.开始任务");System.out.println("3.完成任务");System.out.println("4.退出登录");System.out.println("请选择...");}private void login() {while (true){System.out.println("****欢迎使用本系统****");System.out.println("请登录:");System.out.println("请输入用户名");String loginName = sc.next();System.out.println("请输入密码");String passWord = sc.next();User user = userService.login(loginName,passWord);if (user == null){System.out.println("账户或者密码不对!");}else {System.out.println("登录成功");role = user.getRole();name = user.getNickName();break;}}}private void complete() {System.out.println("请输入id:");int id = sc.nextInt();taskService.complete(id);System.out.println("状态已经更改为“已完成”");}private void begin() {System.out.println("请输入id:");int id = sc.nextInt();taskService.begin(id);System.out.println("状态已经更改为“进行中”");}private void insert() {System.out.println("请输入任务名");String name = sc.next();System.out.println("请输入预计完成时间,格式:yyyy-MM--dd");Date deadLine  = DateUtil.str2Date(sc.next(),"yyyy-MM-dd");System.out.println("请输入责任人");String worker = sc.next();Task taskInsert = new Task(name,null,deadLine,"未开始",worker);taskService.insert(taskInsert);System.out.println("添加成功");}private void findAll() {List<Task> taskList = taskService.selectAll();System.out.println("编号        任务名      完成时间      预计完成时间          状态         责任人");taskList.forEach(System.out::println);}private void printMenu() {System.out.println("您好,"+name);System.out.println("****欢迎使用HGG任务管理系统****");System.out.println("1.查询所有任务信息");System.out.println("2.录入任务信息");System.out.println("3.开始任务");System.out.println("4.完成任务");System.out.println("5.退出登录");System.out.println("请选择....");}
}

测试类-Test

package cn.kgc.bms;import cn.kgc.bms.controller.TaskController;public class Test {public static void main(String[] args) {TaskController taskController = new TaskController();taskController.run();}
}

三层结构的任务管理系统可以实现登录,判断登录用户权限等操作相关推荐

  1. 计算机日志查询域用户登录记录,域用户权限|查看日志

    域用户权限|查看日志.如果委派特定用户查看DC的系统日志? 回答:根据您的描述,我对这个问题的理解是:您想指定特定的用户允许查看DC上的事件日志. 根据我的研究,要允许特定用户访问域控制器上的事件日志 ...

  2. 实验室管理系统(LIMS)涵盖的三层结构及应用

    从结构上看,实验室管理系统(LIMS)包括三个主要的层: 1)应用层:亦称为技术层,用于LIMS系统与操作系统.网络及其它软件工具之间的交互: 2)交互层:亦称为商业规则层,决定LIMS系统对不同情形 ...

  3. 基于NHibernate的三层结构应用程序开发初步

    本文并不是去详细的介绍如何使用NHibernate,而是通过一个简单的例子来演示基于NHibernate的三层结构应用程序开发过程.关于NHibernate的有关文档,DDL已经做了汉化,但是由于英文 ...

  4. 使用VS搭建三层结构

    参考资料:http://book.51cto.com/art/200906/131383.htm 通过一个简单的登录功能实现,讲述如何搭建三层结构. 1.搭建数据访问层 (1)打开VS 2005开发环 ...

  5. asp.net MVC三层结构代码生成器

    asp.net MVC三层结构代码生成器 一.使用MVC开发的朋友都有一个苦恼,那就是三层结构大量重复代码比较鸡肋,写之无味,不写不行.最近也是从网上找了一些资料,自己又简单加工下,完善了该工具. 1 ...

  6. 简单理解SpringMVC的三层结构顺序MCV以及ModelAndView的使用

    MVC三层结构 (M->C->V) requset–>中心总控制器(DispatcherServlet) 中心控制器接收到用户请求后:将请求转发到HandlerMapping (方法 ...

  7. 从经典的MVC模式到Web三层结构

    暑假这段时间,在海康这边实习,参与了海康iVMS-8700客户端的开发,对MVC有了新的认识,将之前写的这篇博客更新一下.有错误的地方,欢迎大家批评指正. 经典的MVC 什么是MVC? 先来说说MVC ...

  8. 书店管理系统(Servlet+MySQL)登录与注册功能篇

    书店管理系统(Servlet+MySQL) 这个工程主要是对之前的一些总结吧,尽可能地用上所学的所有功能来实现,具体代码稍后也会上传到Github上. 在前端上并没有用上CSS等技术,只用上了基础的H ...

  9. php图书管理系统源码详细设计,C语言程序设计:图书管理系统(超详细有登录系统,附代码和试验报告)...

    C课程设计--图书管理系统 1.题目意义 图书馆,作为文献的聚集地和展示平台,常常扮演着引领文化前进的角色,是每个大学不可或缺的基础设施,而图书管理系统则是一个图书馆能够正常运转的关键.本次课程设计使 ...

最新文章

  1. mvc mvp mvvm的区别与联系_MVC,MVP,MVVM比较以及区别(上)
  2. Android APP终极瘦身指南
  3. 不用临时变量交换两个变量的值
  4. Django运维后台的搭建之四:用bootstrap模板让运维前台变得更漂亮
  5. Atitit 通过调用gui接口杀掉360杀毒 360卫士  qq保镖等难以结束的进程(javac# php )...
  6. leetcode —— 866. 回文素数
  7. [转]ASP.NET 状态服务 及 session丢失问题解决方案总结
  8. powershell / ps脚本ps1中.exe(可执行文件)没反应
  9. rsync+rsync+crond备份
  10. eclipse中Java EE 与Java 区别
  11. BZOJ 2957 分块
  12. java lock -----锁
  13. 模糊综合评价法(FCE)-快速理解
  14. AI+IoT行业“飞轮效应”凸显,全球云服务能力将发挥关键作用
  15. 很遗憾,该服务器不支持 jmail 组件!,Jmail组件安装方法及Windows 7系统下Jmail组件注册失败解决方法...
  16. 基础概念 | 公约数、公倍数、互质数
  17. vuejs实现购物车满多少减多少
  18. 绝地求生6月23号服务器维护到几点,绝地求生6月23号更新内容汇总 维护公告信息一览...
  19. STM32学习笔记1(初识STM32)
  20. 深度学习之Deep Image CTR Model

热门文章

  1. SQL-统计公司迟到名单
  2. hadoop主节点(NameNode)备份策略以、恢复方法、操作步骤
  3. qq邮箱服务器连接不上,无法登录
  4. [CSP-J 2022] 乘方 题解
  5. android6虎牙新版来不了,虎牙精简版永不升级
  6. Unity插件 - MeshEditor(十) 模型风力拉扯特效
  7. 【转】PHP CURL 教学
  8. 诛仙经验地址和怪物ID(7.3)
  9. 【开源者行】游学计划广州站圆满结束
  10. [资料]传说中的CIA总部的kryptos密码