书店管理系统
书店管理系统可以说是设计模式及设计思想的一个比较经典的例子。
本系列将分为多个部分讲述此输电管理系统。
书店管理系统将分为:用户、图书、进货、销售和库存五个模块,另外还有公共包、工具包和登录包,另外还有一个框架。
对于分层设计,都是表现层可以调用逻辑层,逻辑层调用数据层,数据层调用工具和公共包,方向不可打乱,必须严格按照这种模式。
本篇将做登录模块。
本篇是书店系统的最终篇,书店系统在设计思想和设计模式中可以说是比较经典的例子,虽然图形设计的不是很好,但是技术还是可圈可点的,值得学习。
注:本篇需要使用到的框架在本系列二的用户模块:
链接:点击打开链接
同系列有:
系列一(概述):点击打开链接
系列二(用户):点击打开链接
系列三(工具包和公共类):点击打开链接
系列四(图书):点击打开链接
系列五(进货):点击打开链接
系列六(销售):点击打开链接
系列七(库存):点击打开链接
本篇是登录模块,不涉及数据的处理,因此不需要数据层,它只需要对原本的框架进行一些处理,因此只要逻辑层和表现层即可。
特别提醒:本项目做得不是很完善,第一次登录的时候由于没有存数据因此登陆不进去,建议先使用用户模块新建用户在加上登陆界面来使用,不足之处还请见谅。
逻辑层:
接口:
package cn.hncu.login.business.ebi;
public interface LoginEbi {
public String login(String name,String pwd);
}
实现类:
package cn.hncu.login.business.ebo;
import cn.hncu.login.business.ebi.LoginEbi;
import cn.hncu.user.business.factory.UserEbiFactory;
import cn.hncu.user.vo.UserModel;
public class LoginEbo implements LoginEbi {
@Override
public String login(String name,String pwd) {
UserModel user=UserEbiFactory.getUserEbi().getUserByName(name);
if (user==null){
return "对不起,该用户不存在!";
}
if (!user.getPwd().equals(pwd)){
return "对不起,您输入的密码不正确!";
}
return null;
}
}
工厂类:
package cn.hncu.login.business.factory;
import cn.hncu.login.business.ebi.LoginEbi;
import cn.hncu.login.business.ebo.LoginEbo;
public class LoginEbiFactory {
public static LoginEbi getLoginEbi(){
return new LoginEbo();
}
}
表现层:
登录界面:
/*
* LoginPanel.java
*
* Created on __DATE__, __TIME__
*/
package cn.hncu.login.ui;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import cn.hncu.BookStore;
import cn.hncu.common.UserTypeEnum;
import cn.hncu.login.business.factory.LoginEbiFactory;
import cn.hncu.user.business.factory.UserEbiFactory;
import cn.hncu.user.vo.UserModel;
/**
*
* @author __USER__
*/
public class LoginPanel extends javax.swing.JPanel {
private BookStore app = null;
/** Creates new form LoginPanel */
public LoginPanel(BookStore app) {
this.app = app;
this.setOpaque(false);
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
//GEN-BEGIN:initComponents
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
btnLogin = new javax.swing.JButton();
tfdUserName = new javax.swing.JTextField();
pwdFd = new javax.swing.JPasswordField();
setLayout(null);
jLabel1.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));
jLabel1.setText("\u5bc6 \u7801:");
add(jLabel1);
jLabel1.setBounds(250, 270, 70, 40);
jLabel2.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 24));
jLabel2.setForeground(new java.awt.Color(51, 255, 51));
jLabel2.setText("\u767b\u5f55");
add(jLabel2);
jLabel2.setBounds(330, 70, 120, 60);
jLabel3.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));
jLabel3.setText("\u7528\u6237\u540d:");
add(jLabel3);
jLabel3.setBounds(250, 190, 60, 30);
btnLogin.setText("\u767b\u5f55");
btnLogin.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnLoginActionPerformed(evt);
}
});
add(btnLogin);
btnLogin.setBounds(310, 390, 90, 30);
add(tfdUserName);
tfdUserName.setBounds(330, 194, 140, 26);
add(pwdFd);
pwdFd.setBounds(330, 280, 220, 24);
}// </editor-fold>
//GEN-END:initComponents
private void btnLoginActionPerformed(java.awt.event.ActionEvent evt) {
//收集参数
String userName=tfdUserName.getText();
String pwd=new String(pwdFd.getPassword());
//调用逻辑层
String result=LoginEbiFactory.getLoginEbi().login(userName, pwd);
//返回到结果页面
if (result!=null){
JOptionPane.showMessageDialog(null, result);
}
//下面是登陆成功的情况,点亮相应的图标
UserModel user=UserEbiFactory.getUserEbi().getUserByName(userName);
if (user.getType()==UserTypeEnum.ADMIN.getType()){
app.getjMenuItemUser().setEnabled(true);
app.getjMenuItemBook().setEnabled(true);
app.getjMenuItemIn().setEnabled(true);
app.getjMenuItemOut().setEnabled(true);
app.getjMenuItemStock().setEnabled(true);
}
if (user.getType()==UserTypeEnum.BOOK.getType()){
app.getjMenuItemBook().setEnabled(true);
}
if (user.getType()==UserTypeEnum.OUT.getType()){
app.getjMenuItemOut().setEnabled(true);
}
if (user.getType()==UserTypeEnum.IN.getType()){
app.getjMenuItemIn().setEnabled(true);
}
if (user.getType()==UserTypeEnum.STOCK.getType()){
app.getjMenuItemStock().setEnabled(true);
}
app.setContentPane(new WelcomePanel());
app.validate();
}
//GEN-BEGIN:variables
// Variables declaration - do not modify
private javax.swing.JButton btnLogin;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPasswordField pwdFd;
private javax.swing.JTextField tfdUserName;
// End of variables declaration//GEN-END:variables
}
欢迎界面:
/*
* WelcomePanel.java
*
* Created on __DATE__, __TIME__
*/
package cn.hncu.login.ui;
/**
*
* @author __USER__
*/
public class WelcomePanel extends javax.swing.JPanel {
/** Creates new form WelcomePanel */
public WelcomePanel() {
this.setOpaque(false);
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
//GEN-BEGIN:initComponents
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
setLayout(null);
jLabel1.setFont(new java.awt.Font("楷体", 2, 36));
jLabel1.setForeground(new java.awt.Color(255, 255, 0));
jLabel1.setText("Books are the ladder of human progress!");
add(jLabel1);
jLabel1.setBounds(40, 170, 720, 90);
}// </editor-fold>
//GEN-END:initComponents
//GEN-BEGIN:variables
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
// End of variables declaration//GEN-END:variables
}
本系列完结,感谢阅读到最后。