承接上次数据库设计,来到数据库编程模块!
一、说明
- 技术栈:Java语言程序设计,JDBC,Swing图形用户界面设计,数据库设计
- 相关工具: IntelliJ IDEA,JDK-15,SSMS,SQL Server。
二、代码组织模式
模仿MVC模式设计,视图层负责处理用户交互,控制层负责处理用户的请求,逻辑层负责处理具体操作与数据库交互。
主要类图:
三、项目构建
三、项目构建
建立项目初期,想法较多,设计了比较多功能,编程实践后删减了一些功能,保留了需求分析阶段的核心功能,即登记客户->客户选购商品->开订单->开发票。
下图为项目目录(其中部分功能删减了,部分类没有实现)
SSMS建表:
四、类文件说明
上图中的所有类在下面没说明的都可以忽略!
程序入口:
Application_Entrance.java
常量文件:
Constant.java:保存各种常量等
视图层类:
Login_Frame.java:管理员登录界面
Administrator_Frame.java:管理员功能界面
CustomerManage_Frame.java:客户管理界面
GoodsManage_Frame.java:商品管理界面
OrderManage_Frame.java:订单管理界面
InvoiceManage_Frame.java:发票管理界面
控制层类:
LoginController.java:管理员登录控制
QueryController.java:查询控制
UpdateContriller.java:更新控制
AddController.java:添加控制
逻辑层类:
AddCustomerAction.java:新增客户处理
AddGoodsInfoInOrder.java:添加订单中的商品信息处理
AddInvoiceAction.java:添加发票处理
AddOrderAction.java:添加订单处理
QueryAdministratorAction.java:查询管理员
QueryCustomerAction.java:查询客户
QueryGoodsAction.java:查询商品
QueryGoodsInfoInOrderAction.java:查询订单中的商品信息
QueryInvoiceAction.java:查询发票
QueryOrderAction.java:查询订单
UpdateGoodsAction.java:更新商品信息
以上提到的文件为有效文件。
五、运行示例
核心业务操作顺序:管理员输入密码登录->新增客户->去购物->客户选购商品->开订单->保存订单->开发票->选择支付方式->去支付->保存(打印)发票
以上就是核心业务啦!当然笔者还实现了部分其他功能,在源代码中可以知晓!
六、完整源代码
以下为部分类源代码,全部代码笔者已上传,所有上传文件免费!!!不需要任何形式的货币!!!
Constant.java:
/*
*@author W-nut
*
*/
package application_Constant;
import java.util.ArrayList;
public interface Constant
{
//the link to database
String DATABASE_URL="jdbc:sqlserver://W-NUT:1433;DatabaseName=CustomerPurchase";
String USER_NAME="sa";
String USER_PASSWORD="123456";
//the name of actions
String LOAD_DATABASE="application_Action.LoadDatabaseAction";
//the query of SQL
String QUERY_ADMINISTRATOR_NAME_PASSWORD="select ad_Name,ad_Password from CP_administrator";
String QUERY_CUSTOMER="select* from CP_customer";
String QUERY_CUSTOMER_NUM="select cus_Num from CP_customer";
String QUERY_CUSTOMER_BY_NAME="select cus_Name from CP_customer where cus_Name=?";
String QUERY_CUSTOMER_ALL_BY_NAME="select cus_Num,cus_Name,cus_Tel,cus_Address from CP_customer where cus_Name=?";
String QUERY_CUSTOMER_NUM_BY_NAME="select cus_Num from CP_customer where cus_Name=?";
String QUERY_CUSTOMER_NAME="select cus_Name from CP_customer";
String QUERY_GOODS= "select* from CP_goods";
String QUERY_GOODS_BY_NAME="select * from CP_goods where goods_Name=?";
String QUERY_GOODS_STORE_NUM_BY_NAME="select goods_StoreNum from CP_goods where goods_Name=?";
String QUERY_GOODS_STORE_NUM="select goods_StoreNum from CP_goods where goods_Name=?";
String QUERY_GOODS_INFO_IN_ORDER_BY_ORDER_NUM= "select goods_Name,goods_ChooseNum from CP_goodsInfoInOrder where order_Num=?";
String QUERY_GOODS_INFO_IN_ORDER_LAST_PK="select info_PK from CP_goodsInfoInOrder ";
String QUERY_ORDER_NUM="select order_Num from CP_Order";
String QUERY_INVOICE_NUM="select inv_Num from CP_invoice";
String ADD_CUSTOMER="insert into CP_customer values(?,?,?,?) ";
String ADD_ORDER="insert into CP_order(order_Num,order_CustomerNum,order_Date) values(?,?,?)";
String ADD_GOODS_INFO_IN_ORDER="insert into CP_goodsInfoInOrder values(?,?,?,?,?)";
String ADD_INVOICE="insert into CP_invoice values(?,?,?,?,?,?)";
String UPDATE_GOODS_STORE_NUM="update CP_goods set goods_StoreNum=? where goods_Name=?";
//the table info of customer
ArrayList<String>CUSTOMER_INFO_HEADER=new ArrayList<>(); //客户表表头
ArrayList<String>CUSTOMER_INFO_NUM=new ArrayList<>(); //客户号
ArrayList<String>CUSTOMER_INFO_NAME=new ArrayList<>(); //客户名
ArrayList<String>CUSTOMER_INFO_TEL=new ArrayList<>(); //客户电话
ArrayList<String>CUSTOMER_INFO_ADDRESS=new ArrayList<>(); //客户地址
ArrayList<String>CUSTOMER_INFO_ALL=new ArrayList<>(); //客户全部信息
//the table info of goods
ArrayList<String>GOODS_INFO_HEADER=new ArrayList<>(); //商品表表头
ArrayList<String>GOODS_INFO_SELECTED_HEADER=new ArrayList<>(); //已选商品表表头
ArrayList<String>GOODS_INFO_NUM=new ArrayList<>(); //商品号
ArrayList<String>GOODS_INFO_NAME=new ArrayList<>(); //商品名
ArrayList<Float>GOODS_INFO_PRICE=new ArrayList<>(); //商品单价
ArrayList<Integer>GOODS_INFO_STORE_NUM=new ArrayList<>(); //商品库存
ArrayList<String>GOODS_SELECTED_HEADER=new ArrayList<>(); //已选商品表格头
ArrayList<String>GOODS_SELECTED_NAME=new ArrayList<>(); //已选商品名
ArrayList<String>GOODS_SELECTED_CHOOSE_NUM=new ArrayList<>(); //已选商品个数
//the info of order table
ArrayList<String>ORDER_INFO_NUM=new ArrayList<>(); //查询的订单号
ArrayList<String>INVOICE_INFO_NUM=new ArrayList<>(); //查询的发票号
//some state flags
int CUSTOMER_NAME_OVER_LENGTH=0; //输入客户名长度错误
int CUSTOMER_NAME_OVERLOAD=1; //输入客户名重名
int CUSTOMER_NAME_NOT_OVERLOAD=2; //客户名不重名
int CUSTOMER_TEL_OVER_LENGTH=3; //输入客户名电话长度错误
int CUSTOMER_ADDRESS_OVER_LENGTH=4; //输入客户名地址长度错误
int ADD_CUSTOMER_ALLOWED=5; //输入客户信息全部合法
int DATABASE_ERROR=6; //数据库错误
int GOODS_STORE_NUM_SHORT=7; //商品库存不够
int GOODS_STORE_NUM_ENOUGH=8; //商品库存充足
int INPUT_NOT_INTEGER=9; //输入的不是整数
int ERROR=10; //操作成功
int SUCCESS=11; //操作失败
//the ways of paying
String [] PAY_WAYS={"支付宝","微信","银行卡","现金"}; //支付方式
}
Application_Entrance.java:
/*
* @author W-nut
* 业务流程:登记客户信息->选购商品->生成订单->开具发票
* 框架模式:模仿MVC(model-view-controller)
*/
package application_Entrance;
import application_Frame.Login_Frame;
@SuppressWarnings("unused")
public class Application_Entrance
{
public static void main(String[] args)
{
Login_Frame login_frame=new Login_Frame();
}
}
Login_Frame.java:
/*
* @author W-nut
*/
package application_Frame;
import application_Controller.LoginController;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Login_Frame extends JFrame
{
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
private JButton button_Login;
private JButton button_Esc;
private JTextField textField_User_Name;
private JLabel label_User_Name;
private JLabel label_Password;
private JPasswordField passwordField_Password;
private Administrator_Frame administrator_frame;
private LoginController loginController;
// JFormDesigner - End of variables declaration //GEN-END:variables
public Login_Frame()
{
initComponents();
Load_Login_Frame();
}
public String get_textField_User_Name()
{
return textField_User_Name.getText();
}
public String get_passwordField_Password()
{
return String.valueOf(passwordField_Password.getPassword());
}
private void Load_Login_Frame()
{
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setSize(400,300);
this.setVisible(true);
}
private void button_Login_MouseClicked(MouseEvent e)
{
boolean input_message= !get_textField_User_Name().equals("") && !get_passwordField_Password().equals("");
if(input_message)
{
loginController=new LoginController(get_textField_User_Name(),get_passwordField_Password());
boolean id_verifiedMessage = loginController.getVerifiedMessage();
if(id_verifiedMessage)
{
administrator_frame = new Administrator_Frame();
this.setVisible(false);
}
else
JOptionPane.showMessageDialog(this,"用户名或密码错误!");
}
else
JOptionPane.showMessageDialog(this,"用户名和密码不能为空!");
}
private void button_Esc_MouseClicked(MouseEvent e)
{
System.exit(0);
}
private void initComponents()
{
// Generated using JFormDesigner Evaluation license - nut
button_Login = new JButton();
button_Esc = new JButton();
textField_User_Name = new JTextField();
label_User_Name = new JLabel();
label_Password = new JLabel();
passwordField_Password = new JPasswordField();
//======== this ========
setTitle("W-nut Login");
var contentPane = getContentPane();
contentPane.setLayout(null);
//---- button_Login ----
button_Login.setText("Login");
button_Login.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
button_Login_MouseClicked(e);
}
});
contentPane.add(button_Login);
button_Login.setBounds(new Rectangle(new Point(115, 215), button_Login.getPreferredSize()));
//---- button_Esc ----
button_Esc.setText("Esc");
button_Esc.addMouseListener(new MouseAdapter()
{
@Override //重写父类方法声明
public void mouseClicked(MouseEvent e)
{
button_Esc_MouseClicked(e);
}
});
contentPane.add(button_Esc);
button_Esc.setBounds(new Rectangle(new Point(265, 215), button_Esc.getPreferredSize()));
contentPane.add(textField_User_Name);
textField_User_Name.setBounds(155, 65, 135, textField_User_Name.getPreferredSize().height);
//---- label_User_Name ----
label_User_Name.setText("User_Name");
contentPane.add(label_User_Name);
label_User_Name.setBounds(new Rectangle(new Point(70, 70), label_User_Name.getPreferredSize()));
//---- label_Password ----
label_Password.setText("Password");
contentPane.add(label_Password);
label_Password.setBounds(new Rectangle(new Point(70, 125), label_Password.getPreferredSize()));
contentPane.add(passwordField_Password);
passwordField_Password.setBounds(155, 115, 135, passwordField_Password.getPreferredSize().height);
{
// compute preferred size
Dimension preferredSize = new Dimension();
for(int i = 0; i < contentPane.getComponentCount(); i++)
{
Rectangle bounds = contentPane.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
}
Insets insets = contentPane.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
contentPane.setMinimumSize(preferredSize);
contentPane.setPreferredSize(preferredSize);
}
pack();
setLocationRelativeTo(getOwner());
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
}
Adminstrator_Frame.java:
/*
* Created by JFormDesigner on Mon Nov 16 17:55:01 CST 2020
* @author W-nut
*/
package application_Frame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import application_Frame_Administrator_ChildFrame.*;
@SuppressWarnings("unused")
public class Administrator_Frame extends JFrame
{
public Administrator_Frame()
{
initComponents();
Load_Administrator();
}
private void Load_Administrator()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(400,300);
this.setVisible(true);
}
private void menuItem_AddCustomer_ActionPerformed(ActionEvent e)
{
CustomerManage_Frame customerManage_frame=new CustomerManage_Frame(0);
this.setVisible(false);
}
private void menuItem_QueryCustomer_ActionPerformed(ActionEvent e)
{
CustomerManage_Frame customerManage_frame=new CustomerManage_Frame(1);
this.setVisible(false);
}
private void menuItem_DeleteCustomer_ActionPerformed(ActionEvent e)
{
CustomerManage_Frame customerManage_frame=new CustomerManage_Frame(2);
this.setVisible(false);
}
private void menuItem_UpdateCustomer_ActionPerformed(ActionEvent e)
{
CustomerManage_Frame customerManage_frame=new CustomerManage_Frame(3);
this.setVisible(false);
}
private void menuItem_QueryOrder_ActionPerformed(ActionEvent e)
{
OrderManage_Frame orderManage_frame=new OrderManage_Frame(0);
this.setVisible(false);
}
private void menuItem_AddOrder_ActionPerformed(ActionEvent e)
{
OrderManage_Frame orderManage_frame=new OrderManage_Frame(1);
orderManage_frame.checkCustomer();
this.setVisible(false);
}
private void menuItem_AddInvoice_ActionPerformed(ActionEvent e)
{
InvoiceManage_Frame invoiceManage_frame=new InvoiceManage_Frame();
invoiceManage_frame.checkCustomer();
this.setVisible(false);
}
private void menuItem_SelectGoods_ActionPerformed(ActionEvent e)
{
GoodsManage_Frame goodsManage_frame=new GoodsManage_Frame(0);
goodsManage_frame.checkCustomer();
this.setVisible(false);
}
private void menuItem_AddCustomer_MouseClicked(MouseEvent e)
{
// TODO add your code here
}
private void menuItem_QueryCustomer_MouseClicked(MouseEvent e)
{
// TODO add your code here
}
private void menuItem__DeleteCustomer_MouseClicked(MouseEvent e)
{
// TODO add your code here
}
private void menuItem_UpdateCustomer_MouseClicked(MouseEvent e)
{
// TODO add your code here
}
//方法功能:初始化框架
private void initComponents()
{
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
// Generated using JFormDesigner Evaluation license - nut
menuBar_1 = new JMenuBar();
menu_CustomerManage = new JMenu();
menuItem_AddCustomer = new JMenuItem();
menuItem_QueryCustomer = new JMenuItem();
menuItem_DeleteCustomer = new JMenuItem();
menuItem_UpdateCustomer = new JMenuItem();
menu_GoodsManage = new JMenu();
menuItem_SelectGoods = new JMenuItem();
menuItem_AddGoods = new JMenuItem();
menuItem_DeleteGoods = new JMenuItem();
menuItem_QueryGoods = new JMenuItem();
menuItem_UpdateGoods = new JMenuItem();
menu_OrderManage = new JMenu();
menuItem_QueryOrder = new JMenuItem();
menuItem_AddOrder = new JMenuItem();
menu_InvoiceManage = new JMenu();
menuItem_AddInvoice = new JMenuItem();
menu_Own = new JMenu();
menuItem_OwnInfo = new JMenuItem();
//======== this ========
setTitle("Nut Dynasty-Administrator");
setIconImage(new ImageIcon("E:\\CodeFile\\DataBase-CustomerPurchaseManagementSystem\\Code\\src\\META-INF\\background.jpg").getImage());
var contentPane = getContentPane();
contentPane.setLayout(null);
//======== menuBar_1 ========
{
//======== menu_CustomerManage ========
{
menu_CustomerManage.setText("\u5ba2\u6237\u7ba1\u7406");
//---- menuItem_AddCustomer ----
menuItem_AddCustomer.setText("\u65b0\u589e\u5ba2\u6237\u4fe1\u606f");
menuItem_AddCustomer.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
menuItem_AddCustomer_MouseClicked(e);
}
});
menuItem_AddCustomer.addActionListener(e -> menuItem_AddCustomer_ActionPerformed(e));
menu_CustomerManage.add(menuItem_AddCustomer);
//---- menuItem_QueryCustomer ----
menuItem_QueryCustomer.setText("\u67e5\u8be2\u5ba2\u6237\u4fe1\u606f");
menuItem_QueryCustomer.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
menuItem_QueryCustomer_MouseClicked(e);
}
});
menuItem_QueryCustomer.addActionListener(e -> menuItem_QueryCustomer_ActionPerformed(e));
menu_CustomerManage.add(menuItem_QueryCustomer);
//---- menuItem_DeleteCustomer ----
menuItem_DeleteCustomer.setText("\u5220\u9664\u5ba2\u6237\u4fe1\u606f");
menuItem_DeleteCustomer.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
menuItem__DeleteCustomer_MouseClicked(e);
}
});
menuItem_DeleteCustomer.addActionListener(e -> menuItem_DeleteCustomer_ActionPerformed(e));
menu_CustomerManage.add(menuItem_DeleteCustomer);
//---- menuItem_UpdateCustomer ----
menuItem_UpdateCustomer.setText("\u4fee\u6539\u5ba2\u6237\u4fe1\u606f");
menuItem_UpdateCustomer.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
menuItem_UpdateCustomer_MouseClicked(e);
}
});
menuItem_UpdateCustomer.addActionListener(e -> menuItem_UpdateCustomer_ActionPerformed(e));
menu_CustomerManage.add(menuItem_UpdateCustomer);
}
menuBar_1.add(menu_CustomerManage);
//======== menu_GoodsManage ========
{
menu_GoodsManage.setText("\u5546\u54c1\u7ba1\u7406");
//---- menuItem_SelectGoods ----
menuItem_SelectGoods.setText("\u9009\u8d2d\u5546\u54c1");
menuItem_SelectGoods.addActionListener(e -> menuItem_SelectGoods_ActionPerformed(e));
menu_GoodsManage.add(menuItem_SelectGoods);
//---- menuItem_AddGoods ----
menuItem_AddGoods.setText("\u65b0\u589e\u5546\u54c1\u4fe1\u606f");
menu_GoodsManage.add(menuItem_AddGoods);
//---- menuItem_DeleteGoods ----
menuItem_DeleteGoods.setText("\u5220\u9664\u5546\u54c1\u4fe1\u606f");
menu_GoodsManage.add(menuItem_DeleteGoods);
//---- menuItem_QueryGoods ----
menuItem_QueryGoods.setText("\u67e5\u8be2\u5546\u54c1\u4fe1\u606f");
menu_GoodsManage.add(menuItem_QueryGoods);
//---- menuItem_UpdateGoods ----
menuItem_UpdateGoods.setText("\u4fee\u6539\u5546\u54c1\u4fe1\u606f");
menu_GoodsManage.add(menuItem_UpdateGoods);
}
menuBar_1.add(menu_GoodsManage);
//======== menu_OrderManage ========
{
menu_OrderManage.setText("\u8ba2\u5355\u7ba1\u7406");
//---- menuItem_QueryOrder ----
menuItem_QueryOrder.setText("\u67e5\u8be2\u8ba2\u5355\u4fe1\u606f");
menuItem_QueryOrder.addActionListener(e -> {
menuItem_QueryOrder_ActionPerformed(e);
menuItem_QueryOrder_ActionPerformed(e);
});
menu_OrderManage.add(menuItem_QueryOrder);
//---- menuItem_AddOrder ----
menuItem_AddOrder.setText("\u65b0\u589e\u8ba2\u5355\u4fe1\u606f");
menu_OrderManage.add(menuItem_AddOrder);
}
menuBar_1.add(menu_OrderManage);
//======== menu_InvoiceManage ========
{
menu_InvoiceManage.setText("\u53d1\u7968\u7ba1\u7406");
//---- menuItem_AddInvoice ----
menuItem_AddInvoice.setText("\u65b0\u589e\u53d1\u7968\u4fe1\u606f");
menuItem_AddInvoice.addActionListener(e -> menuItem_AddInvoice_ActionPerformed(e));
menu_InvoiceManage.add(menuItem_AddInvoice);
}
menuBar_1.add(menu_InvoiceManage);
//======== menu_Own ========
{
menu_Own.setText("\u4e2a\u4eba\u4e2d\u5fc3");
//---- menuItem_OwnInfo ----
menuItem_OwnInfo.setText("\u4e2a\u4eba\u4fe1\u606f");
menu_Own.add(menuItem_OwnInfo);
}
menuBar_1.add(menu_Own);
}
setJMenuBar(menuBar_1);
{
// compute preferred size
Dimension preferredSize = new Dimension();
for(int i = 0; i < contentPane.getComponentCount(); i++) {
Rectangle bounds = contentPane.getComponent(i).getBounds();
preferredSize.width = Math.max(bounds.x + bounds.width, preferredSize.width);
preferredSize.height = Math.max(bounds.y + bounds.height, preferredSize.height);
}
Insets insets = contentPane.getInsets();
preferredSize.width += insets.right;
preferredSize.height += insets.bottom;
contentPane.setMinimumSize(preferredSize);
contentPane.setPreferredSize(preferredSize);
}
pack();
setLocationRelativeTo(getOwner());
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
// Generated using JFormDesigner Evaluation license - nut
private JMenuBar menuBar_1;
private JMenu menu_CustomerManage;
private JMenuItem menuItem_AddCustomer;
private JMenuItem menuItem_QueryCustomer;
private JMenuItem menuItem_DeleteCustomer;
private JMenuItem menuItem_UpdateCustomer;
private JMenu menu_GoodsManage;
private JMenuItem menuItem_SelectGoods;
private JMenuItem menuItem_AddGoods;
private JMenuItem menuItem_DeleteGoods;
private JMenuItem menuItem_QueryGoods;
private JMenuItem menuItem_UpdateGoods;
private JMenu menu_OrderManage;
private JMenuItem menuItem_QueryOrder;
private JMenuItem menuItem_AddOrder;
private JMenu menu_InvoiceManage;
private JMenuItem menuItem_AddInvoice;
private JMenu menu_Own;
private JMenuItem menuItem_OwnInfo;
// JFormDesigner - End of variables declaration //GEN-END:variables
}