1. 程式人生 > >Java圖書管理系統練習程式(二)

Java圖書管理系統練習程式(二)

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;
        }
    }
}