Java图书管理系统练习程序(二)
第二部分
本部分主要实现系统用户这部分的功能,实现用户的注册、登录、修改密码等功能
程序各类及调用关系如下图所示
一、创建user实体类
User实体类:id、username、password、email
package sky.book.bean;
public class User {
private int id;
private String name;
private String password;
private String email;
//省略其setter和getter方法与默认构造方法
}
二、创建IUserRepository接口
IUserRepository接口主要模拟数据的基本操作,实现用户的更新、查找、添加、等功能,代码如下
package sky.book.dao;
import sky.book.bean.User;
import java.util.ArrayList;
import java.util.List;
public interface IUserRepository {
/**
* 取得所有用户信息
* @return 所有用户信息的集合
*/
public List<User> selectAllUser();
/**
* 根据用户的id取得用户信息
* @param id 用户的id
* @return
*/
public User selectUserById(int id);
/**
* 添加用户
* @param user 欲添加的用户
* @return 返回受影响的记录数
*/
public int insertUser(User user);
/**
* 根据用户名查找用户
* @param name 用户名
* @return 如果有该用户返回用户对象,否则返回null
*/
public User selectUserByName(String name);
/**
* 更新用户信息
* @param user 欲更新的用户信息
* @return 返回受影响的记录数
*/
public int updateUser(User user);
}
三、创建IUserRepository接口的实现类UserRepository类
该类具体实现IUserRepository接口的功能,代码如下
package sky.book.dao;
import sky.book.bean.User;
import java.util.ArrayList;
import java.util.List;
public class UserRepository implements IUserRepository {
private List<User> users=new ArrayList<>();//存储用户的列表集合
private static int n;//存储用户数
public UserRepository(){
init();
}
/**
* 初始化部分用户信息
*/
private void init(){
User user=new User();
user.setId(n++);
user.setName("admin");
user.setPassword("admin");
user.setEmail("[email protected]");
users.add(user);
}
@Override
public List<User> selectAllUser() {
return users;
}
@Override
public User selectUserById(int id) {
if(id>=0 && id<n){
return users.get(id);
}
return null;
}
@Override
public int insertUser(User user) {
//首先判断用户名是否存在,如果存在则,不能添加,否则添加
boolean f=false;
for (User u:users) {
if(u.getName().equals(user.getName())){
f=true;
break;
}
}
if(!f){
user.setId(n++);
users.add(user);
return 1;
}else{
return 0;
}
}
@Override
public User selectUserByName(String name) {
for (User u:users) {
if(u.getName().equals(name))
return u;
}
return null;
}
@Override
public int updateUser(User user) {
int id=user.getId();
if(id>=n)
return 0;
users.get(id).setName(user.getName());
users.get(id).setPassword(user.getPassword());
users.get(id).setEmail(user.getEmail());
return 1;
}
}
四、创建IUserServicer接口
IUserService接口:制定UserService类必须实现的主要功能,用户注册、用户登录、修改密码,代码如下:
package sky.book.services;
import sky.book.bean.User;
import java.util.List;
/**
* 用户业务接口,实现用户 注册、用户登录、修改密码功能
*/
public interface IUserService {
/**
* 注册用户
* @param user 用户注册信息
* @return
*/
public boolean createUser(User user);
/**
* 用户登录
* @param name 用户名
* @param pwd 密码
* @return 如果是合法用户返回true,否则返回false
*/
public boolean userLogin(String name,String pwd);
/**
* 修改密码
* @param id 用户编号
* @param pwd 用户新密码
* @param oldpwd 用户旧密码
* @return
*/
public boolean changePassWord(int id,String pwd,String oldpwd);
/**
* 取得所有用户列表
* @return 所有的用户集合
*/
public List<User> getUsers();
}
五、创建UserService类,实现IUserService接口
package sky.book.services;
import sky.book.bean.User;
import sky.book.dao.IUserRepository;
import sky.book.dao.UserRepository;
import java.util.List;
public class UserService implements IUserService {
private IUserRepository userRepository=new UserRepository();
/**
* 注册用户
* @param user 用户注册信息
* @return 如果注册成功,返回true,否则返回false
*/
@Override
public boolean createUser(User user) {
if(userRepository.insertUser(user)>0)
return true;
else
return false;
}
/**
* 用户登录
* @param name 用户名
* @param pwd 密码
* @return 如果登录成功,返回true,否则返回false
*/
@Override
public boolean userLogin(String name, String pwd) {
User user=userRepository.selectUserByName(name);
if(user==null){
return false;
}
if(user.getPassword().equals(pwd))
return true;
else
return false;
}
/**
* 修改密码
* @param id 用户编号
* @param newPwd 用户新密码
* @param oldPwd 用户旧密码
* @return
*/
@Override
public boolean changePassWord(int id, String oldPwd, String newPwd) {
User user=userRepository.selectUserById(id);
if(user==null)
return false;
if(user.getPassword().equals(oldPwd)){
user.setPassword(newPwd);
if(userRepository.updateUser(user)>0)
return true;
else{
return false;
}
}
return false;
}
/**
* 取得所有用户 列表
* @return
*/
@Override
public List<User> getUsers() {
return userRepository.selectAllUser();
}
}
六、创建services层的工厂类
该类主要向ui层提供services层的对象
package sky.book.services;
public class ServiceFactory {
public static IUserService getUserService(){
return new UserService();
}
}
七、创建用户管理程序的界面
package sky.book.ui;
import sky.book.bean.User;
import sky.book.services.IUserService;
import sky.book.services.ServiceFactory;
import java.util.List;
import java.util.Scanner;
/**
* 用户管理界面
*/
public class UserUI {
/**
* 取得业务逻辑层的对象
*/
private IUserService userService=ServiceFactory.getUserService();
private Scanner sc=new Scanner(System.in);
/**
* 输出所有用户信息
*/
public void showAllUser(){
List<User> users=userService.getUsers();
System.out.println("编号\t用户名\t密码\t电子邮件");
for(User user : users){
System.out.println(user.getId()+"\t"+user.getName()+"\t"+user.getPassword()+"\t"+user.getEmail());
}
}
/**
* 用户登录
* @return 如何合法返回true,否则返回false
*/
public boolean login(){
System.out.println("请输入用户名");
String name=sc.next();
System.out.println("请输入密码");
String pwd=sc.next();
if(userService.userLogin(name,pwd)){
return true;
}else{
return false;
}
}
/**
* 用户注册
* @return 如果注册成功返回true,否则返回false
*/
public boolean createUser(){
User user=new User();
System.out.println("请输入用户名");
user.setName(sc.next());
System.out.println("请输入密码");
user.setPassword(sc.next());
System.out.println("请输入email");
user.setEmail(sc.next());
if(userService.createUser(user)){
return true;
}else{
return false;
}
}
/**
* 修改密码
* @return 修改成功返回true,否则返回false
*/
public boolean changePassWord(){
System.out.println("请输入旧密码");
String oldPwd=sc.next();
System.out.println("请输入新密码");
String pwd=sc.next();
if(userService.changePassWord(0,oldPwd,pwd)){
return true;
}else{
return false;
}
}
}