JAVA医药进销存管理系统(附源码+调试)
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() {@Overridepublic 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;@Overridepublic 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() {@Overridepublic 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;@Overridepublic 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();}}
}相关文章:
JAVA医药进销存管理系统(附源码+调试)
JAVA医药进销存管理系统 功能描述 (1)登录模块:登录信息等存储在数据库中 (2)基本信息模块:分为药品信息模块、客户情况模块、供应商情况模块; (3)业务管理模块&#x…...
H5 <blockquote> 标签
主要应用于:内容引用 标签定义及使用说明 <blockquote> 标签定义摘自另一个源的块引用。 浏览器通常会对 <blockquote> 元素进行缩进。 提示和注释 提示:如果标记是不需要段落分隔的短引用,请使用 <q>。 HTML 4.01 与 H…...
nginx配置指南
nginx.conf配置 找到Nginx的安装目录下的nginx.conf文件,该文件负责Nginx的基础功能配置。 配置文件概述 Nginx的主配置文件(conf/nginx.conf)按以下结构组织: 配置块功能描述全局块与Nginx运行相关的全局设置events块与网络连接有关的设置http块代理…...
【数据结构】优先级队列(堆)
文章目录 💐1. 优先级队列1.1 概念 💐2.堆的概念及存储方式2.1 什么是堆2.2 为什么要用完全二叉树描述堆呢?2.3 为什么说堆是在完全二叉树的基础上进行的调整?2.4 使用数组还原完全二叉树 💐3. 堆的常用操作-模拟实现3…...
前端笔试2
1.下面哪一个是检验对象是否有一个以自身定义的属性? foo.hasOwnProperty("bar")bar in foo foo["bar"] ! undefinedfoo.bar ! null 解析: bar in foo 检查 foo 对象是否包含名为 bar 的属性,但是这个属性可以是从原型链继承来的&a…...
LeetCode:66.加一
66.加一 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/plus-one/description/ 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数…...
Redis 常用命令
目录 全局命令 1)keys 2)exists 3) del(delete) 4)expire 5)type SET命令 GET命令 MSET 和 MGET命令 其他SET命令 计数命令 redis-cli,进入redis 最核心的命令:我们这里只是先介绍 set 和 get 最简单的操作…...
Integer.valueOf()用于字符和字符串的区别
LeetCode 17 电话号码的字母组合 先贴代码 class Solution {List<String> result new ArrayList<>();String temp new String("");Integer num;public List<String> letterCombinations(String digits) {dfs(digits, 0);return result;} publi…...
机械寿命预测(基于NASA C-MAPSS数据的剩余使用寿命RUL预测,Python代码,CNN_LSTM模型,有详细中文注释)
1.效果视频:机械寿命预测(NASA涡轮风扇发动机剩余使用寿命RUL预测,Python代码,CNN_LSTM模型,有详细中文注释)_哔哩哔哩_bilibili 环境库版本: 2.数据来源:https://www.nasa.gov/int…...
ConfigMaps-1
文章目录 主要内容一.使用 YAML 文件创建1.在data节点创建了一些键值:代码如下(示例): 2.解释 二.使用命令行创建1.创建了一个名为 person 的键值:代码如下(示例): 2.解释3.创建了一个 index.html 文件&…...
docker上安装es
安装docker 1 安装docker依赖 yum install -y yum-utils2 设置docker仓库镜像地址 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3 安装制定版本的docker yum -y install docker-ce-20.10.17-3.el74 查看是否安装成功 y…...
#循循渐进学51单片机#c语言基础和流水灯实现#not.3
1、熟练掌握二进制、十进制和十六进制的转换方法。 多少进制就是多少之间相加,比如十六进制就是十六一次一加;二进制转化十六进制,分成四个一组。 2、C语言变量类型与取值范围,for、while等基本语句的用法。 for、while等基本语句…...
算法刷题 week3
这里写目录标题 1.重建二叉树题目题解(递归) O(n) 2.二叉树的下一个节点题目题解(模拟) O(h) 3.用两个栈实现队列题目题解(栈,队列) O(n) 1.重建二叉树 题目 题解 (递归) O(n) 递归建立整棵二叉树:先递归创建左右子树,然后创建根节点&…...
TCP详解之流量控制
TCP详解之流量控制 发送方不能无脑的发数据给接收方,要考虑接收方处理能力。 如果一直无脑的发数据给对方,但对方处理不过来,那么就会导致触发重发机制,从而导致网络流量的无端的浪费。 为了解决这种现象发生,TCP 提…...
mac根目录下创建文件不能问题
mac根目录下创建文件不能问题 解决办法2: 原因 mac os引入了系统完整性保护(SIP)机制,无法在/、/usr目录下新建文件 解决办法1: 打开终端,输入 csrutil status显示enabled表示启用了SIP,接下来需要禁用SIP…...
stable diffusion model训练遇到的问题【No module named ‘triton‘】
一天早晨过来,发现昨天还能跑的diffusion代码,突然出现了【No module named ‘triton’】的问题,导致本就不富裕的显存和优化速度雪上加霜,因此好好探究了解决方案。 首先是原因,由于早晨过来发现【电脑重启】导致了【…...
线性dp,优化记录,273. 分级
273. 分级 273. 分级 - AcWing题库 给定长度为 N 的序列 A,构造一个长度为 N 的序列 B,满足: B 非严格单调,即 B1≤B2≤…≤BN 或 B1≥B2≥…≥BN。最小化 S∑Ni1|Ai−Bi|。 只需要求出这个最小值 S。 输入格式 第一行包含一…...
JWT 安全及案例实战
文章目录 一、JWT (json web token)安全1. Cookie(放在浏览器)2. Session(放在服务器)3. Token4. JWT (json web token)4.1 头部4.1.1 alg4.1.2 typ 4.2 payload4.3 签名4.4 通信流程 5. 防御措施 二、漏洞实例(webgoa…...
Vue2+Vue3
文章目录 Vue快速上手Vue是什么第一个Vue程序插值表达式Vue核心特性:响应式 Vue指令v-htmlv-show 与 v-ifv-else 与 v-else-ifv-onv-bindv-forv-model指令修饰符 计算属性watch侦听器(监视器)watch——简写watch——完整写法 Vue生命周期 和 …...
华为云云耀云服务器L实例评测|redis漏洞回顾 MySQL数据安全解决 搭建主从集群MySQL 相关设置
前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到过MySQL数据库被攻击的情况,数据丢失,还好我有几份备份,没有造成太大的损失;后来有发现Redis数据库被攻击的情况,加入了redis密…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
