医药管理系统设计

Sametime

发布日期: 2019-01-29 08:42:02 浏览量: 1824
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

1 系统的详细设计

面对企业办公自动化的现状和发展趋势,应医药公司的要求,本小组有针对性的为该公司开发一套办公自动化系统,借助该自动化系统,提高了办公过程的自动化程度,也提高员工日常工作效率,减少了纸张浪费和规范管理层的工作。

一套软件,首先要能够满足用户的使用要求,这是基本条件。诚然,经过这么多年的发展,时常上的进销存软件的功能都已经非常完整,可以说基本上可以满足一般企业的仓库管理要求。

了解到该医药公司的业务流程特点,结合现代企业的先进管理思想和模式,采用了Client/Server的可靠、高效系统作为平台,该系统包括了七大功能模块:系统管理、基本信息设置、进货信息管理、售货信息管理、库存信息管理、财务信息管理、系统帮助。

对于一般的企业,采用相应的安全措施,没有可能权限的用户不能直接大开文件查看数据,有足够安全措施。从而构成了严密的权限保护系统。

创建面向整个公司所处理的数据对象的数据结构,从而减少、消除相同数据多次重复录入,数据一直性差、冗余的现象,以保证数据准确性、安全性提高工作的时效性。

1.1 系统的目标

市场竞争的激烈意味着管理工作的重要性,药品种类和数量的增加也就意味着销售管理的重要性。本医药公司销售管理系统的目标大体有:

  • 为该公司提供一体化解决方案涵盖物流的整个过程,满足业内各种经营模式和特性。

  • 适合特色管理和经营,针对该行业经营品种繁多,对药品的有效期,批准文号,合格证等要有比较严格的管理。

1.2 系统的功能图

1.3 系统功能模块设计

系统开发的总体任务是实现各种信息的系统化,规范化和自动化。该公司的销售管理系统完成功能的设计如下:

系统管理用于管理本系统用户的增加、删除和修改用户密码等操作

基本信息设置包括对药品类别的设置、药品的设置、供应商的设置和业务员的设置等

货源信息管理主要完成对订货单的录入和进货入库等操作

分类销售查询主要完成销售结果的查询,如按照药品查询和按照业务员查询

2 系统实现

面向对象分析首要的高能工作,是建立问题域的对象模型,这个模型描述了现实世界的“类—-&——对象”以及它们之间的关系,表示了目标系统的静态数据结构,静态数据结构对应细节以来较少,比较容易确定;当用户的需求变化时,静态数据结构相对来说比较稳定。因此,用面向对象开发的决大多数软件时,都首先建立对象模型,然后再建立子模型。

类和对象是对应用领域中的概念的标识,是系统分析及软件的复用的基础,这一过程需要考虑多种情况,正确的表示类—对象,以形成下一步软件的复用性,提高软件质量及生产效率。例如,在办公自动化系统中,文档是整个软件的基础,如果没有标识此类对象,一旦文档稍有改变,则整个系统就会面临重建的风险。

OOA系统的属性层包括对象的属性及对象间的实例连接(关系),属性为对象的一些静态信息,它是对象的内部资料描述,即内部封装的资料。

对象所能执行的操作称为服务或方法。在属性层讨论是应用领域的静态方面。而对象间的动态关系及对象实例间的消息连接构成了服务层。

结合面向对象的语言,就非常符合实际的情况。应用户在各种处理方面的需求,以及针对系统功能的具体设计将得到如下所示的本系统所要处理的数据流程图。

2.1 用户登陆模块的创建

运行本系统后将出现一个对话框如图6所示,提供用户输入用户名和密码,验证用户的合法性。如果用户3次输入登陆信息错误,将退出系统。这个模块包括三个类:LoginSystem.java、CheckUser.java和Main.java。其中Main.java是系统启动后运行的第一个类,在该类中初始化登陆窗口(Longinsystem.java)并将它显示出来,CheckUser.java封装了登陆和验证中一些公用的方法。

在CheckUser类中用JDBC连接数据库,提供了验证用户,也实现了为以后添加用户和修改密码的功能。

  1. package com.csbook.restaurant.utility;
  2. import java.sql.*;
  3. import javax.swing.*;
  4. public class CheckUser{
  5. //构造数据库连接参数
  6. //private String url="jdbc:odbc:yumen","","";
  7. public CheckUser() {
  8. try {
  9. //装载数据库驱动程序
  10. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  11. }
  12. catch (Exception ex) {
  13. ex.printStackTrace();
  14. }
  15. }
  16. //检查指定用户是否为合法用户
  17. public boolean isValidUser(String operator,String password)
  18. {
  19. Connection con=null;
  20. PreparedStatement ps=null;
  21. ResultSet rs=null;
  22. boolean isValid=false;
  23. try{
  24. con = DriverManager.getConnection("jdbc:odbc:yumen","","");
  25. String queryStr = "select * from operator WHERE id=? and password=?";
  26. ps = con.prepareStatement(queryStr);
  27. ps.setString(1, operator);
  28. ps.setString(2, password);
  29. rs = ps.executeQuery();
  30. if (rs.next())
  31. isValid = true;
  32. }
  33. catch(SQLException exc){
  34. exc.printStackTrace();
  35. }
  36. finally{
  37. if (rs != null) try { rs.close();}catch (SQLException ignore) {}
  38. if (ps != null) try{ ps.close();}catch (SQLException ignore) {}
  39. if (con != null) try{con.close();}catch (SQLException ignore) {}
  40. }
  41. return isValid;
  42. }
  43. //更改用户密码
  44. public void updatePassword(String operator,String password)
  45. {
  46. Connection con=null;
  47. PreparedStatement ps=null;
  48. try{
  49. //con = DriverManager.getConnection(url);
  50. con = DriverManager.getConnection("jdbc:odbc:yumen","","");
  51. String updateStr = "update operator set password=? WHERE id=?";
  52. ps = con.prepareStatement(updateStr);
  53. ps.setString(1, password);
  54. ps.setString(2, operator);
  55. ps.executeUpdate();
  56. }
  57. catch(SQLException exc){
  58. exc.printStackTrace();
  59. }
  60. finally{
  61. if (ps != null) try{ ps.close();}catch (SQLException ignore) {}
  62. if (con != null) try{con.close();}catch (SQLException ignore) {}
  63. }
  64. }
  65. //检查指定用户是否存在
  66. public boolean userExist(String userID)
  67. {
  68. Connection con = null;
  69. PreparedStatement ps = null;
  70. ResultSet rs=null;
  71. boolean exist=false;
  72. try{
  73. // con = DriverManager.getConnection(url);
  74. con = DriverManager.getConnection("jdbc:odbc:yumen","","");
  75. String selectStr = "select id from operator where id=?";
  76. ps = con.prepareStatement(selectStr);
  77. ps.setString(1, userID);
  78. rs=ps.executeQuery();
  79. if(rs.next())
  80. exist=true;
  81. }
  82. catch(SQLException exc){
  83. exc.printStackTrace();
  84. }
  85. finally{
  86. if (rs != null) try{ rs.close();}catch (SQLException ignore) {}
  87. if (ps != null) try{ ps.close();}catch (SQLException ignore) {}
  88. if (con != null) try{con.close();}catch (SQLException ignore) {}
  89. }
  90. return exist;
  91. }
  92. //添加新用户
  93. public void addOperator(String userID,String username,String userType,String password,String PICNo,String tel,String addr,String remark)
  94. {
  95. Connection con=null;
  96. PreparedStatement ps=null;
  97. try{
  98. //con = DriverManager.getConnection(url);
  99. con = DriverManager.getConnection("jdbc:odbc:yumen","","");
  100. String updateStr = "insert into operator(id,password,name,type,tel,addr,PICNo,remark) values(?,?,?,?,?,?,?,?)";
  101. ps = con.prepareStatement(updateStr);
  102. ps.setString(1, userID);
  103. ps.setString(2, password);
  104. ps.setString(3,username);
  105. ps.setString(4,userType);
  106. ps.setString(5,tel);
  107. ps.setString(6,addr);
  108. ps.setString(7,PICNo);
  109. ps.setString(8,remark);
  110. ps.executeUpdate();
  111. }
  112. catch(SQLException exc){
  113. exc.printStackTrace();
  114. }
  115. finally{
  116. if (ps != null) try{ ps.close();}catch (SQLException ignore) {}
  117. if (con != null) try{con.close();}catch (SQLException ignore) {}
  118. }
  119. }
  120. //删除用户
  121. public boolean deleteOperator(String userID)
  122. {
  123. Connection con=null;
  124. PreparedStatement ps=null;
  125. boolean succeed=true;
  126. try{
  127. //con = DriverManager.getConnection(url);
  128. con = DriverManager.getConnection("jdbc:odbc:yumen","","");
  129. String deleteStr="delete from operator where id=?";
  130. ps=con.prepareStatement(deleteStr);
  131. ps.setString(1,userID);
  132. ps.executeUpdate();
  133. }
  134. catch(SQLException exc){
  135. succeed=false;
  136. }
  137. finally{
  138. if (ps != null) try{ ps.close();}catch (SQLException ignore) {}
  139. if (con != null) try{con.close();}catch (SQLException ignore) {}
  140. }
  141. return succeed;
  142. }
  143. //获得用户类型
  144. public String getUserType(String user)
  145. {
  146. Connection con=null;
  147. PreparedStatement ps=null;
  148. ResultSet rs=null;
  149. String userType="";
  150. try{
  151. //con = DriverManager.getConnection(url);
  152. con = DriverManager.getConnection("jdbc:odbc:yumen","","");
  153. String queryStr = "select * from operator WHERE id=?";
  154. ps = con.prepareStatement(queryStr);
  155. ps.setString(1, user);
  156. rs = ps.executeQuery();
  157. if (rs.next())
  158. userType = rs.getString("type");
  159. }
  160. catch(SQLException exc){
  161. exc.printStackTrace();
  162. }
  163. finally{
  164. if (rs != null) try { rs.close();}catch (SQLException ignore) {}
  165. if (ps != null) try{ ps.close();}catch (SQLException ignore) {}
  166. if (con != null) try{con.close();}catch (SQLException ignore) {}
  167. }
  168. return userType;
  169. }
  170. }

2.2 用户管理功能的实现

以添加用户为例说明用户管理功能的实现,在Jbuilder自动生成的jbInint()方法的末尾加上如下的代码:

  1. userType.addItem("operator");
  2. userType.addItem("manager");
  3. userType.addItem("sa");

然后在设计(design)界面选定“确定”按钮,在Events选项的actionPerformed后的空格中双击,加入如下代码:

  1. void ok_actionPerformed(ActionEvent e) {
  2. String id = userID.getText();
  3. //检查用户名是否为空,如为空,提示用户输入用户名
  4. if(id.trim().equals("")){
  5. JOptionPane.showMessageDialog(this, "用户名不能为空!", "警告",
  6. JOptionPane.ERROR_MESSAGE);
  7. return;
  8. }
  9. String name = username.getText();
  10. String userT = (String) userType.getSelectedItem();
  11. String telephone = tel.getText();
  12. String addr = address.getText();
  13. char temp[]=password.getPassword();
  14. String pass=new String(temp);
  15. String PIC = PICNo.getText();
  16. String note = remark.getText();
  17. CheckUser cUser = new CheckUser();
  18. boolean userExist=cUser.userExist(id);
  19. if(userExist)
  20. {
  21. JOptionPane.showMessageDialog(this, "系统中已存在该用户!", "错误",
  22. JOptionPane.ERROR_MESSAGE);
  23. return;
  24. }
  25. //调用CheckUser类中的方法添加用户
  26. cUser.addOperator(id,name,userT,pass,PIC,telephone,addr,note);
  27. //刷新列表显示
  28. JButton refreshButton=DBNavToolBar.getRefreshButton();
  29. refreshButton.doClick();
  30. //提示用户添加成功
  31. JOptionPane.showMessageDialog(this,"该用户已成功添加","提示",JOptionPane.PLAIN_MESSAGE);
  32. }

2.3 药品信息设置功能的实现

在药品信息设置界面中,药品类型和生产厂商的输入信息是以下拉框的形式给出的,它不能由用户自由输入,它们的选项列表分别从yType和supplier中读取的。在本系统中它们是在prepareShow()方法中实现的。

  1. private void prepareShow(){
  2. Connection conn=null;
  3. PreparedStatement ps=null;
  4. ResultSet rs=null;
  5. try{
  6. conn=DriverManager.getConnection("jdbc:odbc:yumen","","");
  7. ps=conn.prepareStatement("select name from supplier");
  8. rs=ps.executeQuery();
  9. while(rs.next())
  10. producer.addItem(rs.getString("name"));
  11. ps=conn.prepareStatement("select name from foodType");
  12. rs=ps.executeQuery();
  13. while(rs.next())
  14. foodType.addItem(rs.getString("name"));
  15. }
  16. catch(SQLException e){
  17. e.printStackTrace();
  18. }
  19. finally{
  20. if(rs!=null)try{rs.close();}catch(SQLException ignore){}
  21. if(ps!=null)try{ps.close();}catch(SQLException ignore){}
  22. if(conn!=null)try{conn.close();}catch(SQLException ignore){}
  23. }
  24. }

在添加之前,先要检测系统中是否已经存在相同名称的药品,通过加入下面的方法来实现。

  1. private boolean foodExist(String food)
  2. {
  3. Connection conn=null;
  4. PreparedStatement ps=null;
  5. ResultSet rs=null;
  6. boolean exist=false;
  7. try{
  8. conn=DriverManager.getConnection("jdbc:odbc:yumen","","");
  9. ps=conn.prepareStatement("select name from food where name='"+food+"'");
  10. rs=ps.executeQuery();
  11. if(rs.next())
  12. exist=true;
  13. }
  14. catch(SQLException e){
  15. e.printStackTrace();
  16. }
  17. finally{
  18. if(rs!=null)try{rs.close();}catch(SQLException ignore){}
  19. if(ps!=null)try{ps.close();}catch(SQLException ignore){}
  20. if(conn!=null)try{conn.close();}catch(SQLException ignore){}
  21. }
  22. return exist;
  23. }

2.4 创建销售功能模块

销售模块是本系统中比较复杂的功能模块,主要是同时更新销售信息表和库存信息表里的对应信息和一些异常处理。把Jbuilder自动生成的构造函数修改为:

  1. public BookService(String title,boolean resizable,boolean closable,boolean maximizable,boolean iconifiable,String operator) {
  2. super(title,resizable,closable,maximizable,iconifiable);
  3. this.currentOper=operator;
  4. try {
  5. jbInit();
  6. }
  7. catch(Exception ex) {
  8. ex.printStackTrace();
  9. }
  10. }

此外,还要在BookServer中声明一个String类型的变量currentOper来保存传入的数据。在系统的构造函数中还应有下面的方法,提供下拉框的选项。

  1. public void prepareShow(){
  2. Connection conn=null;
  3. PreparedStatement ps=null;
  4. ResultSet rs=null;
  5. try{
  6. conn=DriverManager.getConnection("jdbc:odbc:yumen","","");
  7. ps=conn.prepareStatement("select id from room");
  8. rs=ps.executeQuery();
  9. while(rs.next())
  10. roomNo.addItem(rs.getString("id"));
  11. }
  12. catch(SQLException ex){
  13. ex.printStackTrace();
  14. }
  15. try{
  16. conn=DriverManager.getConnection("jdbc:odbc:yumen","","");
  17. ps=conn.prepareStatement("select commodity from stockInfo");
  18. rs=ps.executeQuery();
  19. while(rs.next())
  20. customer.addItem(rs.getString("commodity"));
  21. }
  22. catch(SQLException ex){
  23. ex.printStackTrace();
  24. }
  25. finally{
  26. if(rs!=null)try{rs.close();}catch(SQLException ignore){}
  27. if(ps!=null)try{ps.close();}catch(SQLException ignore){}
  28. if(conn!=null)try{conn.close();}catch(SQLException ignore){}
  29. }
  30. }

参考文献

[1] 作者:张海潘 书名:软件工程 出版社:人民邮电出版社

[2] 作者:杨岚 刘静 书名:java实例导航 出版社:人民邮电出版社

[3] 作者:Herbert Schilot 书名:java2参考大全 出版社:电子工业出版

[4] 作者:陆正中 马进德石正贵 书名:JBiulder软件开发项目实践 出版社:清华大学出版社

[5] 网络文章:工作流技术在流程分析中的应用研究

[6] 网络文章:基于面向对象技术的异构系统整合

上传的附件 cloud_download 基于java的医药管理系统.zip ( 4.77mb, 102次下载 )
error_outline 下载需要11点积分

发送私信

懒惰有懒惰的好处,勤奋有勤奋的乐趣。重要的是,你有享受过程的权利,就有承担后果的义务

6
文章数
7
评论数
最近文章
eject