Java圖書管理系統練習程式(二)
阿新 • • 發佈:2018-12-08
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;
}
}
}