版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据库原理与应用数据库原理与应用 课程设计课程设计 分析与设计报告分析与设计报告 题题 目目 小型医药管理系统小型医药管理系统 专业班级专业班级 软件软件 09010901 学学 号号 2 2 姓姓 名名 刘千飞刘千飞 指导老师指导老师 完成时间完成时间 2012-01-122012-01-12 目目 录录 1 设计任务与要求设计任务与要求 .1 1.1 课程选题. 1.2 课程设计目的. 1.3 课程设计任务. 1.4 课程设计意义. 2 需求分析需求分析 .1 2.1 功能需求. 2.2 性能需求. 2.3 数据需求. 2.4 运行需求. 3 系统总体设计系统总体设计 .2 4 数据库设计
2、数据库设计 .2 4.1 概念结构设计.3 4.2 逻辑结构设计.3 4.3 物理结构设计.3 5 运行结果和测试运行结果和测试 .3 6 参考资料参考资料 .3 1 设计任务与要求设计任务与要求 1.1 课程选题 本次课程设计的题目是小型药店管理系统 。 1.2 课程设计目的 加深对课堂理论学习的理解,提高应用水平,增强动手能力,为毕业设计做准备。 1.3 课程设计任务 掌握数据库的基本概念,使用软件工程的思路确定总体方案; 完成详细的需求分析,在 PowerDesigner 中进行数据库设计,完成概念结构设 计,生成 CDMA 和 PDM,以及 SQL 脚本,建立规范化程度较高的关系模型,
3、在 SQL Server 中建立完善的数据库; 进行系统界面设计、功能模块设计; 熟悉某种开发工具(如 Delphi、VB、VC+6.0、PowerBuilder 等,本次使用 eclipse) ,使用某种语言(如 Pascal、C+、Java 等)编程实现药店对药品、价格基本信 息的增加、删除、修改操作,以及药品的入库、出库处理和查询、统计等功能; 编码调试完成系统,最终完成开发任务; 撰写并提交课程设计报告和个人总结。 1.4 课程设计意义 使我们掌握了数据库系统的基本概念、原理和技术,结合实际的操作和设计,巩 固课堂教学的内容,将理论与实际相结合,应用现有的数据建模工具和数据库管理系统软
4、 件,规范、科学地完成一个小型数据库的设计与实现,培养我们调查研究、查阅技术文献、 资料、手册以及编写技术文献的能力,把理论与实践相结合,提高实际动手能力和创新能 力。 2 需求分析需求分析 根据课题调查和分析用户的业务活动、信息和处理的需求,以及各种数据之间的约束 条件关系,形成以下的系统的需求说明。 2.1 功能需求功能需求(功能划分,功能描述) Login.java 实现注册和登录功能。注册,将用户姓名和密码写入数据库用户表 (Users) ,并反馈给注册用户。登录,按照用户填写的用户名和密码,在数据库中查找相 关信息,如果匹配则提示登录成功,并转至药品管理系统的管理界面。否则提示登录失
5、败。 ManageMain.java 实现用户管理界面功能选择。在功能选择界面中可以选择添 加、删除、修改、查询和统计药品信息,并且可以选择售出药品。 InsMedicineInfo.java 实现添加药品信息功能。在这一模块中,可以将药品信 息填写保存到数据库药品信息表(MedicineInfos)中。并返回操作状态。 DelMedicineInfo.java 实现分别按药品编号或药品名称删除指定药品信息,被 删除的药品信息将从药品信息表中删除。并返回操作状态。 UpdMedicineInfo.java 实现按药品编号更新药品信息功能。被修改的药品信息 在数据库中也被相应修改。并返回操作状态
6、。 QueMedicineInfo.java 实现分别按药品编号或药品进价范围查询药品信息。数 据库中符合条件的药品信息将被显示在查询界面的文本域中。 StaMedicineInfo.java 实现统计数据库中药品信息。统计的药品信息将显示在 统计药品信息界面,以表格的形式呈现。 SalMedicineInfo.java 实现出售药品功能。填写药品编号和售出数量,并生成 订单信息。出售药品订单信息将被存入到数据库药品订单信息表(WholesaleInfo)中。 2.22.2 性能需求性能需求(软件适应性和移植性等) 在 Windows 平台测试无误。 使用 SQL Server 2005 数据
7、库。 可用于一般的药品信息管理。 2.32.3 数据需求数据需求(数据之间的依赖和约束关系) 本药品信息管理系统共有三张表,一张为独立的用户信息表(Users) ,用于管理 用户信息。其余两张为药品信息表(MedicineInfo)和订单信息表(WholesaleInfo) , MedicineInfo 表中药品编号为主键,与 WholesaleInfo 表形成外键的关系,药品编号为外 键,MedicineInfo 为外键主表。 2.42.4 运行需求运行需求(用户界面,硬件接口,软件接口,故障处理) 用户界面对显卡无特别要求,一般软件显示水平即可。 硬件接口符合一般软件需求,要求可以负载数据
8、库处理数据信息,不至于死机。 软件接口,用于电脑,台式或笔记本。 需要定期对数据库进行备份,以防止数据库发生异常,如硬盘损坏或认为恶意 破坏,提供备份资料,尽量减少损失。 3 3 系统总体设计系统总体设计 3.13.1 登录界面登录界面 注册信息 用户登录 登录界面 3.23.2 系统功能系统功能 药品管理系统药品管理功能 添 加 药 品 信 息 删 除 药 品 信 息 修 改 药 品 信 息 查 询 药 品 信 息 统 计 药 品 信 息 出 售 药 品 功 能 4 数据库设计数据库设计 4.14.1 概念结构设计概念结构设计 用户表 用户名 用户密码 药品信息表 药品编号 药品名称 药品通
9、称 药品规格 药品类别 药品进价 药品批发价 药品库存量 药品订单表 订单编号 药品编号 批发药品数量外键约束 4.2 逻辑结构设计逻辑结构设计 UserInfos Username Userpassword MedicineInfos medNumber medName medShortName medNors medCate medInPrice medWholesale medCount WholesaleInfo wsNumber medNumber wsMedCount 4.3 物理结构设计物理结构设计 4.3.1 用户信息表 UserInfos 4.3.2 药品信息表 Medici
10、neInfos 4.3.3 订单信息表 WholesaleInfo 5 运行结果和测试运行结果和测试 5.15.1 运行界面及其效果图运行界面及其效果图 登录和注册界面 a.注册用户 用户名和密码写入数据库 用注册的用户帐号登录,跳转到功能选择界面。 功能选择界面 点击“增加”按钮,跳转到增加药品信息界面; 点击“删除”按钮,跳转到删除药品信息界面; 点击“修改”按钮,跳转到修改药品信息界面; 点击“查询”按钮,跳转到查询药品信息界面; 点击“统计”按钮,跳转到统计药品信息界面; 点击“出售”按钮,跳转到出售药品信息界面。 增加药品信息界面 点击增加确定按钮,则将药品信息写入是数据库: 删除药
11、品信息界面 按药品编号删除药拼信息: 按药品名称删除药品信息: 修改药品信息界面 点击按药品编号修改药品信息: 查询药品信息界面 按药品编号查询药品信息: 按药品进价范围查询药品信息: 统计药品信息界面 出售药品信息界面 出售成功并生成订单写入到数据库药品订单信息表(WholesaleInfo)中: 6 参考资料参考资料 【1】高荣芳.数据库原理与应用.西安:西安电子科技大学出版社,2009.8 【2】邱桃荣.Java 语言程序设计教程.北京:机械工业出版社,2007.6 数据库设计参考:数据库设计参考: 一药品信息表: SQL: if exists (select 1 from sys.sy
12、sreferences r join sys.sysobjects o on (o.id = r.constid and o.type = F) where r.fkeyid = object_id(WholesaleInfo) and = FK_WHOLESAL_REFERENCE_MEDICINE) alter table WholesaleInfo drop constraint FK_WHOLESAL_REFERENCE_MEDICINE go if exists (select 1 from sysobjects where id = object_id(Medicin
13、eInfo) and type = U) drop table MedicineInfo go /*=*/ /* Table: MedicineInfo */ /*=*/ create table MedicineInfo ( medNumber varchar(8) not null, medName varchar(40) not null, medShortName varchar(10) null, medNors varchar(4) null, medCate varchar(20) null, medInPrice float not null, medWholesalePric
14、e float not null, medCount int not null, constraint PK_MEDICINEINFO primary key (medNumber) ) go 二:订单信息: SQL: if exists (select 1 from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = F) where r.fkeyid = object_id(WholesaleInfo) and = FK_WHOLESAL_REFERENCE_MEDICINE)
15、 alter table WholesaleInfo drop constraint FK_WHOLESAL_REFERENCE_MEDICINE go if exists (select 1 from sysobjects where id = object_id(WholesaleInfo) and type = U) drop table WholesaleInfo go /*=*/ /* Table: WholesaleInfo */ /*=*/ create table WholesaleInfo ( wsNumber varchar(8) not null, medNumber v
16、archar(8) null, wsMedCount int not null, constraint PK_WHOLESALEINFO primary key (wsNumber) ) go alter table WholesaleInfo add constraint FK_WHOLESAL_REFERENCE_MEDICINE foreign key (medNumber) references MedicineInfo (medNumber) go 三用户表: SQL: if exists (select 1 from sysobjects where id = object_id(
17、Users) and type = U) drop table Users go /*=*/ /* Table: Users */ /*=*/ create table Users ( username varchar(10) not null, userpassword varchar(20) null, constraint PK_USERS primary key (username) ) Go 以下是代码参考:以下是代码参考: Login.java import java.awt.event.ActionEvent; import java.awt.event.ActionListen
18、er; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import javax.swing.*; public class Login extends JFrame JLabel labelName=new JLabel(用户名:); JTextField textName=new JTextField(20); JLabel labelPassword=new JLabel(密 码:); JPasswordFiel
19、d pwdPassword=new JPasswordField(20); JButton btnLogin=new JButton(登录); JButton btnRegist=new JButton(注册); /-构造函数-/ public Login() super(药店管理系统-登录); this.labelName.setSize(60,30); this.labelName.setLocation(20,20); this.textName.setSize(200, 30); this.textName.setLocation(100,20); this.labelPassword
20、.setSize(60,30); this.labelPassword.setLocation(20,70); this.pwdPassword.setSize(200,30); this.pwdPassword.setLocation(100,70); this.btnLogin.setSize(100, 30); this.btnLogin.setLocation(50,120); this.btnRegist.setSize(100,30); this.btnRegist.setLocation(180,120); this.setLayout(null); this.getConten
21、tPane().add(labelName); this.getContentPane().add(textName); this.getContentPane().add(labelPassword); this.getContentPane().add(pwdPassword); this.getContentPane().add(btnLogin); this.getContentPane().add(btnRegist); /-登录按钮的事件注册-/ this.btnLogin.addActionListener(new LoginButtonActionPreform(this);
22、/-注册按钮的事件注册,内部匿名类-/ this.btnRegist.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) String UserName=textName.getText(); String UserPassword=pwdPassword.getText(); try String url=jdbc:sqlserver:/localhost:1433;DatabaseName=MedicineManage; String dbname=sa; String dbpa
23、ssword=pwd; String sql=Insert Into Users Values (+UserName+,+UserPassword+); Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver); Connection conn=DriverManager.getConnection(url,dbname,dbpassword); Statement stmt=conn.createStatement(); stmt.executeUpdate(sql); JOptionPane.showMessageDialog(
24、null,注册成功!n 用户名: +UserName+n 密码:+UserPassword); catch(Exception ee) ee.printStackTrace(); ); this.setSize(330,200); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); /-主函数-/ public static void main(String args) new Login(); public void ButtonLogina
25、ctionPerformed(ActionEvent arg0) String UserName=textName.getText(); String UserPassword=pwdPassword.getText(); try String url=jdbc:sqlserver:/localhost:1433;DatabaseName=MedicineManage; String dbname=sa; String dbpassword=pwd; String sql=Select userpassword From Users Where username =+UserName+; Cl
26、ass.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver); Connection conn=DriverManager.getConnection(url,dbname,dbpassword); Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery(sql); if(rs.next() String pwd=rs.getString(userpassword); if (!pwd.equals(UserPassword) JOptionPane.sho
27、wMessageDialog(null, 登录名或密码错误。, 警告, 1); return; else ManageMain managemain=new ManageMain(); managemain.show(); this.setVisible(false); else JOptionPane.showMessageDialog(null, 登录名或密码错误。,警告, 1); catch(Exception ee) ee.printStackTrace(); class LoginButtonActionPreform implements ActionListener Login
28、l; LoginButtonActionPreform(Login l) this.l=l; public void actionPerformed(ActionEvent arg0) l.ButtonLoginactionPerformed(arg0); ManageMain.java import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class ManageMain extends JFrame private static final
29、long serialVersionUID = 1L; JLabel title=new JLabel(-请选择您的操作 -); JLabel insMedicineInfo=new JLabel(增加药品信息:); JButton btInsInfo=new JButton(增加); JLabel delMedicineInfo=new JLabel(删除药品信息:); JButton btDelInfo=new JButton(删除); JLabel updMedicineInfo=new JLabel(修改药品信息:); JButton btUpdInfo=new JButton(修改)
30、; JLabel queMedicineInfo=new JLabel(查询药品信息:); JButton btQueInfo=new JButton(查询); JLabel staMedicineInfo=new JLabel(统计药品信息:); JButton btStaInfo=new JButton(统计); JLabel salMedicineInfo=new JLabel(出售药品管理:); JButton btSalInfo=new JButton(出售); public ManageMain() super(药店管理系统-功能); this.title.setSize(200,
31、 30); this.title.setLocation(200,10); this.insMedicineInfo.setSize(100,30); this.insMedicineInfo.setLocation(80,50); this.btInsInfo.setSize(60,30); this.btInsInfo.setLocation(190,50); this.delMedicineInfo.setSize(100,30); this.delMedicineInfo.setLocation(260,50); this.btDelInfo.setSize(60,30); this.
32、btDelInfo.setLocation(360,50); this.updMedicineInfo.setSize(100,30); this.updMedicineInfo.setLocation(80,90); this.btUpdInfo.setSize(60,30); this.btUpdInfo.setLocation(190,90); this.queMedicineInfo.setSize(100,90); this.queMedicineInfo.setLocation(260,60); this.btQueInfo.setSize(60,30); this.btQueIn
33、fo.setLocation(360,90); this.staMedicineInfo.setSize(100,30); this.staMedicineInfo.setLocation(80,130); this.btStaInfo.setSize(60,30); this.btStaInfo.setLocation(190,130); this.salMedicineInfo.setSize(100,30); this.salMedicineInfo.setLocation(260,130); this.btSalInfo.setSize(60,30); this.btSalInfo.s
34、etLocation(360,130); this.setLayout(null); this.getContentPane().add(title); this.getContentPane().add(insMedicineInfo); this.getContentPane().add(btInsInfo); this.getContentPane().add(delMedicineInfo); this.getContentPane().add(btDelInfo); this.getContentPane().add(updMedicineInfo); this.getContent
35、Pane().add(btUpdInfo); this.getContentPane().add(queMedicineInfo); this.getContentPane().add(btQueInfo); this.getContentPane().add(staMedicineInfo); this.getContentPane().add(btStaInfo); this.getContentPane().add(salMedicineInfo); this.getContentPane().add(btSalInfo); /-添加药品信息注册事件-/ btInsInfo.addAct
36、ionListener(new ActionListener() Override public void actionPerformed(ActionEvent e) / TODO Auto-generated method stub InsMedicineInfo insmedicineinfo=new InsMedicineInfo(); insmedicineinfo.show(); ); /-删除药品信息注册事件-/ this.btDelInfo.addActionListener(new ActionListener() Override public void actionPer
37、formed(ActionEvent e) / TODO Auto-generated method stub DelMedicineInfo delmedicineinfo=new DelMedicineInfo(); delmedicineinfo.show(); ); /-修改药品信息注册事件-/ this.btUpdInfo.addActionListener(new ActionListener() Override public void actionPerformed(ActionEvent e) / TODO Auto-generated method stub UpdMedi
38、cineInfo updmedicineinfo=new UpdMedicineInfo(); updmedicineinfo.show(); ); /-查询药品信息注册事件-/ this.btQueInfo.addActionListener(new ActionListener() Override public void actionPerformed(ActionEvent e) / TODO Auto-generated method stub QueMedicineInfo quemedicineinfo=new QueMedicineInfo(); quemedicineinfo
39、.show(); ); /-统计药品信息注册事件-/ this.btStaInfo.addActionListener(new ActionListener() Override public void actionPerformed(ActionEvent e) / TODO Auto-generated method stub StaMedicineInfo stamedicineinfo=new StaMedicineInfo(); stamedicineinfo.show(); ); /-出售药品信息注册事件-/ this.btSalInfo.addActionListener(new
40、 ActionListener() Override public void actionPerformed(ActionEvent e) / TODO Auto-generated method stub SalMedicineInfo salmedicineinfo=new SalMedicineInfo(); salmedicineinfo.show(); ); this.setSize(550,230); this.setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisi
41、ble(true); public static void main(String args) new ManageMain(); InsMedicineInfo.java import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.*; import javax.swing.*; public class InsMedicineInfo extends JFrame private static final long serialVersionUID = -L; JLabel
42、 labelmedNumber=new JLabel(药品编号:); JTextField textmedNumber=new JTextField(8); JLabel labelmedName=new JLabel(药品名称:); JTextField textmedName=new JTextField(40); JLabel labelmedShortNuame=new JLabel(药品通称:); JTextField textmedShortNuame=new JTextField(10); JLabel labelmedNors=new JLabel(药品规格:); JTextF
43、ield textmedNors=new JTextField(4); JLabel labelmedCate=new JLabel(药品类别:); JTextField textmedCate=new JTextField(20); JLabel labelmedInPrice=new JLabel(药品进价:); JTextField textmedInPrice=new JTextField(10); JLabel labelmedWholesale=new JLabel(批发价格:); JTextField textmedWholesale=new JTextField(10); JL
44、abel labelmedCount=new JLabel(药品库存:); JTextField textmedCount=new JTextField(10); JButton btnInsert=new JButton(增加); JButton btnQuit=new JButton(取消); JButton btnReset=new JButton(重置); /-构造函数-/ public InsMedicineInfo() super(药店管理系统-增加); this.labelmedNumber.setSize(100,30); this.labelmedNumber.setLoca
45、tion(30,30); this.textmedNumber.setSize(100, 30); this.textmedNumber.setLocation(140,30); this.labelmedName.setSize(100,30); this.labelmedName.setLocation(270,30); this.textmedName.setSize(100, 30); this.textmedName.setLocation(380,30); this.labelmedShortNuame.setSize(100,30); this.labelmedShortNuam
46、e.setLocation(30,70); this.textmedShortNuame.setSize(100, 30); this.textmedShortNuame.setLocation(140,70); this.labelmedNors.setSize(100,30); this.labelmedNors.setLocation(270,70); this.textmedNors.setSize(100, 30); this.textmedNors.setLocation(380,70); this.labelmedCate.setSize(100,30); this.labelm
47、edCate.setLocation(30,110); this.textmedCate.setSize(100, 30); this.textmedCate.setLocation(140,110); this.labelmedInPrice.setSize(100,30); this.labelmedInPrice.setLocation(270,110); this.textmedInPrice.setSize(100, 30); this.textmedInPrice.setLocation(380,110); this.labelmedWholesale.setSize(100,30
48、); this.labelmedWholesale.setLocation(30,150); this.textmedWholesale.setSize(100, 30); this.textmedWholesale.setLocation(140,150); this.labelmedCount.setSize(100,30); this.labelmedCount.setLocation(270,150); this.textmedCount.setSize(100, 30); this.textmedCount.setLocation(380,150); this.btnInsert.s
49、etSize(60,30); this.btnInsert.setLocation(140,190); this.btnReset.setSize(60,30); this.btnReset.setLocation(210,190); this.btnQuit.setSize(60,30); this.btnQuit.setLocation(280,190); this.setLayout(null); this.getContentPane().add(labelmedNumber); this.getContentPane().add(textmedNumber); this.getCon
50、tentPane().add(labelmedName); this.getContentPane().add(textmedName); this.getContentPane().add(labelmedShortNuame); this.getContentPane().add(textmedShortNuame); this.getContentPane().add(labelmedNors); this.getContentPane().add(textmedNors); this.getContentPane().add(labelmedCate); this.getContentPane().add(textmedCate); this.getContentPane().add
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国际合作租赁合同范本
- 仓配战略合作协议内容
- 2024年种鸽买卖合同正规范本
- 标准建筑设备租赁合同文本
- 房屋出租代理合同样本
- 定向培养就业协议书范本
- 个人之间版权许可协议书
- 医疗旅游合作合同
- 《大青树下的小学》第一课时公开课一等奖创新教案
- 统编版语文四年级上册第七单元 习作写信+语文园地 公开课一等奖创新教学设计(共3课时)
- 幼儿园绘本故事:《我不知道我是谁》
- 内部控制案例第07章案例20 华为内控
- 18项核心制度完整版
- 三位数乘两位数笔算乘法 说课稿
- 深化设计方案(完整版)
- 部编 二年级语文上册 第七单元【教材解读】
- 假天狮传销课程
- 电大《现代教育原理》形考任务2
- 胆管癌的CT诊断与鉴别诊断知识ppt
- 新疆开放大学实用写作课堂测试答案
- SJG 77-2020 房屋建筑工程造价文件分部分项和措施项目划分标准-高清现行
评论
0/150
提交评论