JAVA医药进销存管理系统(附源码+调试)

news2024/12/24 9:23:05

JAVA医药进销存管理系统

功能描述

(1)登录模块:登录信息等存储在数据库中
(2)基本信息模块:分为药品信息模块、客户情况模块、供应商情况模块;
(3)业务管理模块:分为药品采购模块、药品销售模块、库存盘点模块、销售退货模块、客户回款模块;
(4)业务查询模块:分为基本信息模块、入库明细模块、销售明细模块、回款明细模块;
(5)用户管理模块:分为增加用户模块、维护用户模块;
(6)窗口管理:更适应更多使用者的前端需求。

代码链接:https://pan.baidu.com/s/1F7dEBfny5aAU_AKpLpwCiA
提取码:3pxo

功能截图

1、登录模块

在这里插入图片描述

2、医药进销存管理系统主界面

在这里插入图片描述

3、药品情况模块

在这里插入图片描述

4、供应商基本信息情况模块

在这里插入图片描述

5、入库明细模块

在这里插入图片描述

部分关键代码

package com.lzw;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.BevelBorder;

import com.lzw.dao.AdapterDao;
import com.lzw.model.Obj_UserName;
import com.lzw.view.JF_main;

public class LoginDialog extends JFrame {
    private static final long serialVersionUID = 8107215375516572660L;
    private LoginPanel loginPanel = null;
    private JLabel jLabel = null;
    private JTextField userField = null;
    private JLabel jLabel1 = null;
    private JPasswordField passwordField = null;
    private JButton loginButton = null;
    private JButton exitButton = null;
    private JF_main mainFrame;
    
    /**
     * @param owner
     */
    public LoginDialog() {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            mainFrame = new JF_main();
            initialize();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * 初始化loginPanel登录面板的方法
     * 
     * @return com.lzw.login.LoginPanel
     */
    private LoginPanel getLoginPanel() {
        if (loginPanel == null) {
            jLabel1 = new JLabel();
            jLabel1.setFont(new Font("", Font.BOLD, 12));
            jLabel1.setBounds(new Rectangle(101, 147, 55, 18));
            jLabel1.setText("密 码:");
            jLabel = new JLabel();
            jLabel.setFont(new Font("", Font.BOLD, 12));
            jLabel.setText("用户名:");
            jLabel.setBounds(new Rectangle(100, 117, 56, 18));
            loginPanel = new LoginPanel();
            loginPanel.setLayout(null);
            loginPanel.setBackground(new Color(0xD8DDC7));
            loginPanel.add(jLabel);
            loginPanel.add(getUserField());
            loginPanel.add(jLabel1);
            loginPanel.add(getPasswordField());
            loginPanel.add(getLoginButton());
            loginPanel.add(getExitButton());
        }
        return loginPanel;
    }
    
    /**
     * This method initializes userField
     * 
     * @return javax.swing.JTextField
     */
    private JTextField getUserField() {
        if (userField == null) {
            userField = new JTextField();
            userField.setBorder(new BevelBorder(BevelBorder.LOWERED));
            userField.setBounds(new Rectangle(157, 115, 127, 22));
        }
        return userField;
    }
    
    /**
     * This method initializes passwordField
     * 
     * @return javax.swing.JPasswordField
     */
    private JPasswordField getPasswordField() {
        if (passwordField == null) {
            passwordField = new JPasswordField();
            passwordField.setBorder(new BevelBorder(BevelBorder.LOWERED));
            passwordField.setBounds(new Rectangle(158, 145, 125, 22));
            passwordField.addKeyListener(new KeyAdapter() {
                @Override
                public void keyTyped(KeyEvent e) {
                    if (e.getKeyChar() == '\n')
                        loginButton.doClick();
                }
            });
        }
        return passwordField;
    }
    
    /**
     * This method initializes loginButton
     * 
     * @return javax.swing.JButton
     */
    private JButton getLoginButton() {
        if (loginButton == null) {
            loginButton = new JButton();
            loginButton.setContentAreaFilled(false);
            loginButton.setBounds(new Rectangle(155, 175, 58, 25));
            loginButton.setIcon(new ImageIcon(getClass().getResource("/images/loginButton.png")));
            loginButton.addActionListener(new ActionListener() {
                private Obj_UserName user;
                
                @Override
                public void actionPerformed(ActionEvent e) {
                    String id = getUserField().getText().trim();
                    if (id == null || id.length() <= 0) {
                        JOptionPane.showMessageDialog(null, "输入用户ID不能为空,请重新输入!!!", "系统提示", JOptionPane.ERROR_MESSAGE);
                        getUserField().requestFocus();
                        return;
                    }
                    String sqlStr = "from Obj_UserName where id = '" + id + "'";
                    List list = null;
                    list = AdapterDao.QueryObject(sqlStr);
                    if (list.size() > 0) {
                        Iterator iterator = list.iterator();
                        user = (Obj_UserName) iterator.next();
                        String pass = new String(getPasswordField().getPassword());
                        if (!user.getPassword().equals(pass)) {
                            JOptionPane.showMessageDialog(LoginDialog.this, "用户名或密码错误,无法登录", "登录失败", JOptionPane.ERROR_MESSAGE);
                            return;
                        }
                    }
                    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
                    Dimension frameSize = mainFrame.getSize();
                    if (frameSize.height > screenSize.height) {
                        frameSize.height = screenSize.height;
                    }
                    if (frameSize.width > screenSize.width) {
                        frameSize.width = screenSize.width;
                    }
                    mainFrame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
                    mainFrame.setVisible(true);
                    LoginDialog.this.setVisible(false);
                }
            });
        }
        return loginButton;
    }
    
    /**
     * This method initializes exitButton
     * 
     * @return javax.swing.JButton
     */
    private JButton getExitButton() {
        if (exitButton == null) {
            exitButton = new JButton();
            exitButton.setContentAreaFilled(false);
            exitButton.setBounds(new Rectangle(230, 175, 58, 25));
            exitButton.setIcon(new ImageIcon(getClass().getResource("/images/exitButton.png")));
            exitButton.addActionListener(new java.awt.event.ActionListener() {
                @Override
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    System.exit(0);
                }
            });
        }
        return exitButton;
    }
    
    /**
     * 界面初始化方法
     * 
     * @return void
     */
    private void initialize() {
        Dimension size = getToolkit().getScreenSize();
        setLocation((size.width - 296) / 2, (size.height - 188) / 2);
        setSize(389, 256);
        this.setTitle("系统登录");
        setContentPane(getLoginPanel());
    }
    
    public static void main(String[] args) {
        try {
            new Thread() {
                private FileInputStream fis;
                private Scanner scanner;
                private LoginDialog jf_login;
                
                @Override
                public void run() {
                    try {
                        initAndRecLog(); // 初始化并记录日志
                        fis = new FileInputStream("APPJXC.log");
                        scanner = new Scanner(fis);
                        while (scanner.hasNextLine()) {
                            String str = scanner.nextLine();
                            int startInt = str.indexOf('-') + 1;
                            if (startInt == -1)
                                startInt = 0;
                            str = "启动信息:" + str.substring(startInt);
                            Thread.sleep(100);
                        }
                        scanner.close();
                        fis.close();
                        jf_login.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                
                // 初始化系统,并记录日志
                private void initAndRecLog() throws FileNotFoundException {
                    FileOutputStream fop = new FileOutputStream("APPJXC.log", false);
                    PrintStream ps = new PrintStream(fop);
                    System.setOut(ps);
                    AdapterDao dao = new AdapterDao();
                    if (!dao.getdao())
                        return;
                    jf_login = new LoginDialog();
                }
            }.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1018082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QStandardItem通过setCheckable添加复选框后无法再次通过setCheckable取消复选框的问题

前言 如题所示&#xff0c;通过setCheckable添加复选框后&#xff0c;想要通过setCheckable(false)取消复选框&#xff0c;你会发现根本没有作用的。 问题复现 #include "widget.h" #include "ui_widget.h" #include <QList>Widget::Widget(QWidg…

QT基础教学(QMainWindow)

文章目录 前言一、QMainWindow介绍二、代码示例三、QMainWindow高级用法总结 前言 之前我们都是在QWidget中来进行学习的&#xff0c;那么今天我将为大家讲解一下QMainWindow。 一、QMainWindow介绍 QMainWindow是Qt框架提供的一个重要的窗口类&#xff0c;用于创建具有标准…

结构体的简单介绍(4)——位段

目录 位段的概念&#xff1a; 位段的内存分配&#xff1a; 问题1&#xff1a;当开辟了内存后&#xff0c;内存中每个比特位从右向左使用?还是从左向右使用? 这个不确定。 问题2&#xff1a;当前面时候&#xff0c;剩余的空间不足下一个成员使用的时候&#xff0c;剩余的空…

1.使用turtle换一个五环2.设计这样一个程序:输入一个数字 判断它是不是一个质数

1.使用turtle换一个五环 import turtle turtle.pensize(15) turtle.penup() turtle.color(blue) turtle.goto(-150,-35) turtle.pendown() turtle.circle(60) turtle.penup() turtle.color(black) turtle.goto(0,-35) turtle.pendown() turtle.circle(60) turtle.penup() turtl…

ffplay源码解析-PacketQueue队列

包队列架构位置 对应结构体源码 MyAVPacketList typedef struct MyAVPacketList {AVPacket pkt; //解封装后的数据struct MyAVPacketList *next; //下一个节点int serial; //播放序列 } MyAVPacketList;PacketQueue typedef struct PacketQueue {MyAVPacketList …

LeetCode题解-让所有学生保持开心的分组方法数

⭐简单说两句⭐ 作者&#xff1a;后端小知识 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 亲爱的各位友友们&#xff0c;今天来给大家讲解一道力扣中等题&…

为什么要有override

多态一定会成功吗 因为逻辑是用户编写的&#xff0c;那么肯定会有遗漏的地方&#xff0c;那就要规则来限制。就比如多态&#xff0c;都知道条件之一是子类重写了父类的虚函数&#xff0c;但是如果子类没有严格遵守这个规则&#xff0c;就无法达到目的。就比如这个代码&#xf…

华清 c++ day7 9月14

#include <iostream> using namespace std;template<typename T> class myVector { private:T* arr;size_t size; //元素数量size_t max_size; //数组容量 public://构造函数myVector() :arr(nullptr), size(0), max_size(0) {}myVector(int size){if (size >…

ts 枚举类型原理及其应用详解

ts 枚举类型介绍 TypeScript的枚举类型是一种特殊的数据类型&#xff0c;它允许开发者为一组相关值定义一个共同的名称&#xff0c;使我们可以更清晰、更一致地使用这些值。 枚举类型在TypeScript中用enum关键字定义&#xff0c;每个枚举值默认都是数字类型&#xff0c;从0开…

Cannot access defaults field of Properties

今天打包maven项目时报错&#xff1a; 解决方案&#xff1a;在pom.xml中加入&#xff1a; <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.1…

C#---第22:Newtonsoft中json/array的解析、创建、SelectToken(获取指定values)方法

1.解析json & array (1)json解析 using Newtonsoft.Json.Linq;string json "{CPU: Intel,Drives: [DVD read/writer,500 gigabyte hard drive]}";JObject o JObject.Parse(json);Console.WriteLine(o.GetType()); Console.WriteLine(o.ToString()); Console.…

Windows配置python(anaconda+vscode方案)的主要步骤及注意事项

Windows配置python&#xff08;anacondavscode方案&#xff09;的主要步骤及注意事项 1、准备工作 anaconda&#xff0c;官网下载&#xff08;直接下载最新版&#xff09;vscode&#xff0c;官网下载 (官网直接下载有可能太慢&#xff0c;可以考虑在国内靠谱的网站上下载&…

GIS跟踪监管系统单元信息更新

GIS跟踪监管系统单元信息更新 单元信息更新。① 新增单元。② 编辑单元。③ 删除单元。物资查询&#xff08;1&#xff09;物资查询与展示。① 几何查询。• 单击查询&#xff1a;• 拉框查询&#xff1a;• 多边形查询&#xff1a;② 物资定位。• 多个物资定位&#xff1a; 单…

Python爬虫实战案例——第五例

文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff01;严禁将文中内容用于任何商业与非法用途&#xff0c;由此产生的一切后果与作者无关。若有侵权&#xff0c;请联系删除。 目标&#xff1a;采集三国杀官网的精美壁纸 地址&#xff1a;aHR0cHM6Ly93d3…

普中51-独立按键实验

独立按键实验 通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时&#xff0c;电压信号 如下图所示&#xff1a; 由于机械点的弹性作用&#xff0c;按键开关在闭合时不会马上稳定的接通&#xff0c;在断开时 也不会一下子断开&#xff0c;因而在闭合和断开的瞬间均伴…

Windows11系统C盘用户文件夹下用户文件夹为中文,解决方案

说明&#xff1a; 1. 博主电脑为Windows11操作系统&#xff0c;亲测有效&#xff0c;修改后无任何影响&#xff0c;软件都可以正常运行&#xff01; 2. Windows10系统还不知道可不可行&#xff0c;因为Windows11的计算机管理中没有本地用户和组&#xff0c;博主在csdn上看到很…

华为云云耀云服务器L实例评测|redis漏洞回顾 MySQL数据安全解决 搭建主从集群MySQL 相关设置

前言 最近华为云云耀云服务器L实例上新&#xff0c;也搞了一台来玩&#xff0c;期间遇到过MySQL数据库被攻击的情况&#xff0c;数据丢失&#xff0c;还好我有几份备份&#xff0c;没有造成太大的损失&#xff1b;后来有发现Redis数据库被攻击的情况&#xff0c;加入了redis密…

R语言绘制热图

1、初步绘图 rm(listls())#clear Global Environment setwd(D:/Desktop/0000/code-main/热图)#设置工作路径#加载R包 library (pheatmap) #读取数据 df <- read.table(file"data.txt",sep"\t",row.names 1, headerT,check.namesFALSE) #查看前3行 hea…

STM32WB55开发(5)----调整射频功率

STM32WB55开发----5.调整射频功率 概述硬件准备视频教学样品申请选择芯片型号配置时钟源配置时钟树RTC时钟配置查看开启STM32_WPAN条件配置HSEM配置IPCC配置RTC启动RF开启蓝牙开启串口调试配置蓝牙参数设置工程信息工程文件设置Keil工程配置代码配置射频功率ACI_HAL_SET_TX_POW…

【微信小程序】外卖点餐效果展示

概述 外卖点餐效果展示&#xff0c;左右布局&#xff0c;快速点餐&#xff0c;商家信息展示等...程序是模仿人家的&#xff0c;所以界面没做什么调整&#xff0c;功能是没啥问题&#xff0c;可以正常使用... 详细 直接看效果图&#xff1a; 可以把这个点餐这个功能分为5部分…