资源描述
《数据库系统原理》课程设计报告
课程设计题目:医药管理系统
班 级:
姓 名:
学 号: 201124131239
指导教师:
开始日期: 13.4.10
撰写日期: 13.6.10
目录
第1章 概述 1
1.1 项目背景 1
1.2编写目的 1
1.3软件定义 1
1.4开发环境 1
第2章 需求分析 1
2.1信息要求 1
2.2处理要求 2
2.3安全性与完整性要求 2
第3章 概念结构设计 3
3.1 系统E—R图 3
3.1.1局部E—R图 3
3.1.2 系统全局E—R图 3
第4章 逻辑结构设计 4
4.1把ER模型图转换为关系表 4
第5章 主要模块的设计以及代码 6
5.1系统主要模块设计 6
5.2数据库连接 19
第6章 总结 20
第7章 参考文献 20
第1章 概述
1.1 项目背景
学习了数据库,为了能让我们更加了解数据库的操作,结合前台软件界面和后台数据库进行的可视化信息系统操作。同时随着科技的不断进步,企业都在不断的注重管理的信息化以完善企业管理,增强企业自身的竞争力。医药业也不例外,通过较完善的信息系统实现自身企业对内部管理的方便性、合理性、快捷性、高效性等要求。
以前的手工管理效率低是最明显的缺陷,另外,数据的一致性不好维护,如某个药品信息的记录有所改动,那么该药品的其他记录就与此不一致,造成查询的费时费力。要把全部数据都更改又相当不方便。而药品业是关民生的行业,错误信息可能会造成不可收拾的严重后果。因此,运用高效、准确的信息管理系统来代替手工管理是完善医药业管理的有效手段。
1.2编写目的
利用数据库系统可以很好的对数据进行维护,减少由于数据不一致等错误带来的麻烦。方便数据的更新与查询,降低错误率,方便药品信息的维护及库存的盘点。还可以运用较少的人员,高效的完成对医药的管理。
由于社会的发展不断趋于信息化,各个行业都要加强自身的信息化程度以适应社会的发展。而管理信息化正迎合了这个趋势,数据库系统在医药业的应用业实现了医药业执行工具、业务管理等的信息化,在这个信息化社会为医药业的发展增加了新的动力。相信随着社会的不断发展对该类系统的需求会越来越高。
医药管理信息系统,即服务于个人,又服务于企业,并最终服务于社会,这是让科技为人类服务的最好例证,其开发意义显而易见。
1.3软件定义
应用型软件,应用于医药信息管理的一门软件
1.4开发环境
Microsoft SQL Server 2005、eclipse(java编译器)
第2章 需求分析
2.1信息要求
不同的用户有不同的权限,不同的权限可从该数据库中进行不同的操作。
用户类型有四种:(1)普通顾客 (2)采购员 (3)管理员。(4)供应商
1.“信息查询统计”功能
1) 查询药品经销商信息并统计其供应药品的总金额
2) 查询药品信息及库存量
3) 查询顾客信息及其购药的总金额。
4) 统计采购人员的采购总金额
2.“信息录入”功能
1) 录入药品经销商信息
2) 录入药品信息
3) 录入负责药品采购的超市员工(采购员)的信息
4) 录入药品销售人的信息
5) 录入顾客信息
3.“信息删除”功能
1)删除顾客信息
注:删除顾客信息后,其相应的购买记录中的顾客字段置为空值。
2)删除销售人员信息
注:删除销售人员信息后,其相应的销售记录中的销售人员字段置为空值。
4.“信息修改”功能模块
1)修改顾客信息
2)修改销售人员信息
3)修改药品信息
顾客信息:顾客编号、姓名、性别、年龄、住址、电话、备注。
顾客交易信息:顾客编号、症状、药品编号。
采购员信息:编号、姓名、性别、年龄、住址、电话、备注。
药品信息:药品编号、药品名称、服用方法、功效等。
2.2处理要求
系统要实现的功能有:
(1)用户登陆功能与用户管理:可以选择不同的用户身份登录、同时修改用户的密码。
(2)信息查询功能:查询相应的顾客信息、采购员人信息、药品信息、采购信息、销售员信息。
(3)信息修改功能:修改相应的顾客信息、采购信息、药品信息、销售员。
(4)信息删除功能:删除相应的顾客信息、经办人信息、药品信息、销售员。
(5)信息录入功能:录入相应的顾客信息、采购员信息、药品信息、销售员。
(6)浏览功能:浏览全部的顾客信息、药品交易信息、采购员信息、药品信息。
(7)报表功能:实现导出顾客信息、采购员信息、销售员信息与药品信息。
(8)帮助功能:对各类操作进行详细说明。
(9)用户的注册:必须先在复选框里面选择身份,才能注册。
2.3安全性与完整性要求
(1)顾客信息:添加顾客时,顾客的编号是系统自动增加每次增加一;删除顾客时,该顾客的信息将会删调;修改顾客信息时,顾客编号不允许修改,一个顾客只有一条记录。
(2)药品信息:药品的信息包括产地等信息。
(3)供应商信息:添加供应商时,供应商的编号是系统自动增加每次增加一;删除供应商时,该供应商的信息将会删调;修改供应商信息时,供应商编号不允许修改,一个供应商只有一条记录。
第3章 概念结构设计
3.1 系统E—R图
3.1.1局部E—R图
年龄 性别 姓名 编号
住址 名称
电话 编号
顾客 购买 药品信息
症状
图3.1 药品——顾客实体联系图
年龄 性别 姓 名 姓 名
住址 编号 性别
电话 编号
顾客 服务 销售员
症状 n 1
已购药品 备注 电话
录入日期
采购员
图3.2 顾客——采购员实体联系图
3.1.2 系统全局E—R图
通过系统局部E—R图优化设计系统的基本E—R图如下:
药品 购买 顾客 服务 销售员
1 n n 1
1
供应 N 供应商
图3.3 医药管理实体联系图
第4章 逻辑结构设计
4.1把ER模型图转换为关系表
数据库的表:
数据库里面包括九个表其各个表如下:
顾客信息表(client)
表4-1 顾客信息表
供应商信息表(gys)
表4-2 供应商信息表
采购员信息表(caigou)
表4-3 采购员信息表
药品信息表(medicine)
表4-4 药品信息表
销售员信息(xiaoshou)
表4—5 销售员
顾客购买药品信息(xiaoshou)
表4—6 销售员
其余的表的结构原理是一样的所以不一一列出,详细的信息请浏览数据库!
第5章 主要模块的设计以及代码
5.1系统主要模块设计
系统主要有一下几大大模块:
1. 用户登陆功能模块:复选框里面有四个选项包括:管理员、顾客、销售员、采购员。
图5.1 登陆界面
2. 用户登陆成功后界面:
图5.2 登陆成功后界面
登录界面的部分代码如下:
public class yiyao_log extends JFrame{
//省略部分不是核心代码
public yiyao_log(){
setBounds(200, 200,330, 255);
URL url=this.getClass().getResource("/log.jpg");//设置背景图片
ImageIcon icon=new ImageIcon(url);
jlabel.setIcon(icon);//使图片在标签上显示
co.add(jlabel);JComboBox jc=new JComboBox(new mycombox4());
jc.setBounds(90, 60, 150, 25); jc.setOpaque(false);
jlabel.add(jc);final JLabel jl=new JLabel("用户名:");
java.awt.Font awt=new java.awt.Font("用户名:",1,15);//设置字体大小
jl.setFont(awt);jl.setBounds(30, 30,60, 170);
jlabel.add(jl);jt.setBounds(90, 100,150, 25);
jlabel.add(jt);jt.setOpaque(false);
final JLabel jl1=new JLabel("密 码:"); jl1.setBounds(30, 60,60, 180);
jlabel.add(jl1); jp.setBounds(90, 135,150, 25);
jp.setOpaque(false); jlabel.add(jp);
final JButton jb1=new JButton("登 录"); jb1.setBounds(95, 170,65, 30);
jb1.addActionListener(new queding()); jlabel.add(jb1);
JButton jb2=new JButton("重 置"); jb2.setBounds(175, 170,65, 30);
jlabel.add(jb2);
jb2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
jp.setText(""); jt.setText("");
}
});
JButton jb_zuzhe=new JButton("注 册");
jb_zuzhe.setBounds(250, 170,65, 30); jlabel.add(jb_zuzhe);
jb_zuzhe.addActionListener(new jb_zuzhe());
setVisible(true); setResizable(false);//使窗体不能变化
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
class jb_zuzhe implements ActionListener{
public void actionPerformed(ActionEvent e) {
new zhuce_log();
}
}
class mycombox4 extends AbstractListModel implements ComboBoxModel{
String[] name=daoyaogys.name;
Object[] name={"管理员","顾客","供应商","采购员"};
public Object getElementAt(int index) {
return name[index];
}
public int getSize() {
return name.length;
}
public Object getSelectedItem() {
return selecte;
}
public void setSelectedItem(Object item) {
selecte=(String)item;
}
}
class queding implements ActionListener{
public void actionPerformed(ActionEvent e) {
if(selecte.equals("管理员")){
new Maininform();setVisible(false);
}
else if(jt.getText().trim().length()==0||jp.getText().trim().length()==0){
JOptionPane.showMessageDialog(null, "用户名或密码不允许为空");
return;
}
else{
if(selecte.equals("顾客")){
new daoguke_log();
setVisible(false);
}
else if(selecte.equals("供应商")){
new daogys_log(); setVisible(false);
}
} } }
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//更换皮肤代码/////////////////
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
// SubstanceLookAndFeel.setSkin(new NebulaSkin());
try //更改风格和皮肤
{
UIManager.setLookAndFeel(UIManager
.getCrossPlatformLookAndFeelClassName());
UIManager
.setLookAndFeel(new SubstanceGreenMagicLookAndFeel());
SubstanceLookAndFeel.setCurrentTheme("org.jvnet.substance.theme.SubstanceCremeTheme");
//改变主题
}
catch (Exception e)
{ e.printStackTrace();
}
new Maininform(); new yiyao_log();
}
}); } }
2.“注册”功能模块
图5-3注册界面
部分代码如下:
public class zhuce_log extends JFrame{
//省略部分不是核心代码
public zhuce_log(){
// setTitle("注册信息"); setBounds(100, 100, 310, 350);
JLabel jlabel=new JLabel();
URL url=this.getClass().getResource("/yaopin.jpg");
ImageIcon icon=new ImageIcon(url);
jlabel.setIcon(icon); JLabel jgys_name=new JLabel("姓 名:");
jgys_name.setBounds(24,54, 50, 60); jlabel.add(jgys_name);
zc_name.setBounds(70,70, 150, 30); zc_name.setOpaque(false);
jlabel.add(zc_name); JLabel jgys_jiancheng=new JLabel("性 别:");
jgys_jiancheng.setBounds(24,97, 50, 60); jlabel.add(jgys_jiancheng);
zc_jiancheng.setBounds(70,110, 150, 30); zc_jiancheng.setOpaque(false);
jlabel.add(zc_jiancheng); JLabel jgys_youbian=new JLabel("密 码:");
jgys_youbian.setBounds(24,137, 50, 60); jlabel.add(jgys_youbian);
zc_youbian.setBounds(70,150, 150, 30);
zc_youbian.setOpaque(false); jlabel.add(zc_youbian);
JButton j_zhuce=new JButton("确 定"); j_zhuce.setBounds(70, 210,65, 30);
j_zhuce.addActionListener(new zhuce()); jlabel.add(j_zhuce);
JButton j_quxiao=new JButton("取 消");
j_quxiao.setBounds(145, 210,65, 30);
j_quxiao.addActionListener(new quxiao());
jlabel.add(j_quxiao);
JButton j_fanhui=new JButton("返 回");
j_fanhui.setBounds(220, 210,65, 30);
j_fanhui.addActionListener(new fanhui());
jlabel.add(j_fanhui);
co.add(jlabel); setVisible(true);
setResizable(false);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
class zhuce implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
new daojb_zuzhe(yiyao_log.selecte);
}
}
}
}}
3.“信息查询”功能模块包括有:顾客信息、药品信息、供应商信息、销售员信息及采购员的信息查询。其中的顾客信息和供应商信息查询界面如下:
图5-3 顾客信息查询界面
图5-4 供应商信息查询界面
顾客信息查询部分代码如下:
public class client_chaxun extends InternalFrame{
//省略部分不是核心代码
public client_chaxun(String string){
super(string); setTitle("顾客信息查询");
setLayout(null); jlabel.setBounds(0,0,980,650);
URL url=this.getClass().getResource("/client.jpg");//设置背景图片
ImageIcon icon=new ImageIcon(url);
jlabel.setIcon(icon);//使图片在标签上显示
JLabel j_i=new JLabel("顾客信息查询");
j_i.setBounds(30, 30, 160, 30); jlabel.add(j_i);
java.awt.Font awt=new java.awt.Font("顾客信息查询",1,25);//设置字体大小
j_i.setFont(awt); j_i.setForeground(Color.red);
JLabel j_id=new JLabel("请 输 入 查 询 的 编 号:");
j_id.setBounds(29, 70, 160, 30); jlabel.add(j_id);
t_id.setBounds(175, 70, 180, 30); t_id.setOpaque(false);
jlabel.add(t_id); JLabel j=new JLabel("购买的药品:");
j.setBounds(480,70,110,30); jlabel.add(j);
JButton j_ckeek1=new JButton("查 询");
j_ckeek1.setBounds(365, 70, 95, 30);
j_ckeek1.addActionListener(new cheek());
jlabel.add(j_ckeek1); JLabel j_name=new JLabel("姓 名:");
j_name.setBounds(125, 115, 45, 30);
jlabel.add(j_name); t_name.setOpaque(false);//设置为透明
t_name.setEditable(false);//使其不能够改写
t_name.setBounds(175, 115, 285, 30); jlabel.add(t_name);
JLabel j_sage=new JLabel("年 龄:"); j_sage.setBounds(125, 155, 45, 30);
t_sage.setEditable(false); t_sage.setOpaque(false);
t_sage.setBounds(175, 155, 110, 30); jlabel.add(t_sage);
JLabel j_sex=new JLabel("性 别:"); j_sex.setBounds(300,155,45,30);
t_sex.setEditable(false); t_sex.setOpaque(false);
t_sex.setBounds(350, 155, 110, 30); jlabel.add(t_sex);
jlabel.add(j_sage); jlabel.add(j_sex);
JLabel j_adress=new JLabel("住 址:"); j_adress.setBounds(125, 195, 45, 35);
co.add(j_adress); t_adress.setEditable(false);
t_adress.setOpaque(false); t_adress.setBounds(175, 195, 285, 30);
jlabel.add(t_adress);
JLabel j_phome=new JLabel("电 话:"); j_phome.setBounds(125,230, 45, 35);
jlabel.add(j_phome); t_phome.setBounds(175, 235, 285, 30);
t_phome.setEditable(false); t_phome.setOpaque(false);
jlabel.add(t_phome);
JLabel j_date=new JLabel("录 入 日 期: "); j_date.setBounds(90,275, 90, 35);
jlabel.add(j_date); t_date.setBounds(175, 275, 285, 30);
t_date.setEditable(false); t_date.setOpaque(false);
jlabel.add(t_date);
JLabel j_menony=new JLabel("购 药 总 金 额:"); j_menony.setBounds(70,310, 100, 35);
jlabel.add(j_menony); t_menony.setOpaque(false);
t_menony.setBounds(175, 315, 285, 30); t_menony.setEditable(false);
jlabel.add(t_menony);
JLabel j_symtom=new JLabel("症 状:"); j_symtom.setBounds(105,355, 40, 25);
jlabel.add(j_symtom); jt_symtom.setBounds(175, 355, 125, 100);
jt_symtom.setBorder(new LineBorder(Color.blue)); jt_symtom.setOpaque(false);
jt_symtom.setEditable(false); jt_symtom.setLineWrap(true);
jlabel.add(jt_symtom); JLabel j_cremark=new JLabel("备 注:");
j_cremark.setBounds(300,355, 40, 25); jlabel.add(j_cremark);
jt_cremark.setBounds(340, 355, 120, 100); jt_cremark.setBorder(new LineBorder(Color.blue));
jt_cremark.setOpaque(false); jt_cremark.setEditable(false);//不允许再编辑
jt_cremark.setLineWrap(true);//自动换行 jlabel.add(jt_cremark);
JButton j_move=new JButton("继 续"); j_move.setBounds(280, 470, 70, 30);
j_move.addActionListener(new move()); jlabel.add(j_move);
JButton j_close=new JButton("关 闭"); j_close.setBounds(390, 470, 70, 30);
j_close.addActionListener(new close()); jlabel.add(j_close);
co.add(jlabel); setMaximizable(true);// 设置允许自由调整大小
setIconifiable(true);// 设置提供关闭按钮
setIconifiable(true);// 设置提供图标化按钮
setMaximizable(true);// 设置提供最大化按钮
setFrameIcon(icon); // 设置窗体图标
}
class cheek implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
new daoclient_chaxun(t_id.getText().trim());
new daobiaoclient_yaopinchaxun(t_id.getText().trim());
JScrollPane js=new JScrollPane(daobiaoclient_yaopinchaxun.table);
js.setBounds(480,115,400,120);
jlabel.add(js);
t_menony.setText(daobiaoclient_yaopinchaxun.st+"元");
}
}
}
4.“信息录入”功能模块:包括顾客信息、药品信息、供应商信息、销售员信息及采购员的信息录入。其中的顾客信息和供应商信息添加界面如下:
图5-5 顾客添加界面
图5-6 药品添加界面
药品添加部分核心代码代码如下:
public class yaop_tianjia extends InternalFrame{
public yaop_tianjia(String string){
super(string);
setTitle("药品添加");
// setBounds(250,60,510,500);
label.setBounds(0,0,980,650);
URL url=this.getClass().getResource("/client.jpg");
ImageIcon icon=new ImageIcon(url);
label.setIcon(icon);
new daoyaogys();
JComboBox t_mgys=new JComboBox(new mycombox());
JLabel j_i=new JLabel("药品信息添加");
j_i.setBounds(30, 30, 250, 30);
label.add(j_i);
java.awt.Font awt=new java.awt.Font("药品信息添加",1,25);//设置字体大小
j_i.setFont(awt);
j_i.setForeground(Color.red);
JLabel j_mgys=new JLabel("供应商:");//id 编号
j_mgys.setBounds(20, 80, 55, 30);
t_mgys.setBounds(70, 80, 150, 30);
label.add(j_mgys);
label.add(t_mgys);
JComboBox t_mid=new JComboBox(new mycombox6());
JLabel j_mid=new JLabel("采购员:");//id 编号
j_mid.setBounds(250, 80, 55, 30);
t_mid.setBounds(315, 80, 150, 30);
// t_mid.setEnabled(false);
t_mid.setOpaque(false);
label.add(j_mid);
label.add(t_mid);
JLabel j_mname=new JLabel("名 称:");//药品名称
j_mname.setBounds(25,120, 45, 30);
t_mname.setBounds(70, 120, 150, 30);
t_mname.setOpaque(false);
label.add(j_mname); label.add(t_mname);
JLabel j_mmode=new JLabel("方 法:");//药品服用方法
j_mmode.setBounds(25, 160, 45, 30);
t_mmode.setBounds(70, 160, 150, 30);
t_mmode.setOpaque(false);
label.add(j_mmode);
label.add(t_mmode);
JLabel j_mchangdi=new JLabel("产 地:");//药品产地
j_mchangdi.setBounds(25, 200, 45, 30);
t_mchangdi.setBounds(70, 200, 150, 30);
t_mchangdi.setOpaque(false);
label.add(j_mchangdi);
label.add(t_mchangdi);
JLabel j_mdanwei=new JLabel("单 位:");//药品单位
j_mdanwei.setBounds(25, 240, 45, 30);
JComboBox t_mdanwei=new JComboBox(new mycombox1());
t_mdanwei.setBounds(70, 240, 150, 30);
t_mdanwei.setOpaque(false);
label.add(j_mdanwei);
label.add(t_mdanwei);
JLabel j_mjixing=new JLabel("剂 型:");//药品剂型
j_mjixing.setBounds(25, 280, 45, 30);
JComboBox t_mjixing=new JComboBo
展开阅读全文