《企业用电管理系统设计(41页).doc》由会员分享,可在线阅读,更多相关《企业用电管理系统设计(41页).doc(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-企业用电管理系统设计数据库课程实训报告( 2015- 2016年度第2学期)题目: 企业用电管理系统 专业软件工程学生姓名成晓伟班级软件141学号1410075094指导教师徐静完成日期2016.7.1-第 37 页目 录目 录21 课题内容和要求11.1课题描述11.2 课题要求12 需求分析12.1 对功能的规定12.2 数据需求分析23 系统设计33.1 功能模块设计33.2 数据库概念设计43.2.2 E-R图43.3 数据库逻辑设计53.4 数据库物理设计53.5 数据库表间联系64系统实现64.1登陆模块实现64.2查询模块实现74.3 添加模块实现84.4 删除模块实现94.5
2、 修改模块实现104.6 生成电费单模块实现105 代码调试与功能测试115.1 测试方案115.2 测试结果126 收获与体会16参考文献17附录18附录1源程序部分清单18企业用电管理系统设计1 课题内容和要求 1.1课题描述系统设计的的信息有:(1) 用电企业(用电企业编号、用电企业名、地址、电话、联系人);(2) 电费信息(谷价、峰价);(3) 用电情况(用电企业编号、谷电量、峰电量、年月、年合计用电量、年合计用电费)。1.2 课题要求要求能够进行如下操作:(1) 能够统计各个用电企业的月耗电量以及电费;(2) 能够统计查询各个用电企业的总的谷电量和峰电量;(3) 能够统计该地区的峰谷
3、电量比例以及电费情况;(4) 能维护基本数据;(5) 用户分级管理,人机界面良好。2 需求分析2.1 对功能的规定1、理解需求理解需求是在问题及其最终解决方案之间架设桥梁的第一步。开发者只有和用户充分理解了需求之后才能开始设计系统,否则,对需求定义的任何改进,设计上都必须大量的返工。下面是对系统的终端用户和客户调研后得到的需求规格说明书。(1)由于使用者为相关电力部门及学习使用,系统开始时,便可以进入到欢迎界面。(2)进入到系统之后,友好的界面可以很清晰的分为企业信息管理跟企业用电信息管理两大选择。(3)点击企业信息管理,下拉菜单中选项可以实现对企业信息的查询、添加、修改、删除操作。(4)点击
4、企业用电管理信息,下拉菜单中选项可以实现对企业用电管理信息的查询、添加、修改和删除操作。(5)系统客户端运行在Windows平台下,服务器可以运行在Windows或Unix平台下。系统还应该有一个较好的图形用户界面。(6)系统应该有很好的可扩展性。2、需求分析需求分析是从客户的需求中提取出软件系统能够帮助用户解决的业务问题,通过对用户业务问题的分析,确定系统的功能需求。这个步骤是对理解需求的升华,直接关系到该系统的质量。分析的根本目的是在开发者和提出需求的人之间建立一种理解和沟通机制,因此,系统的需求分析也应该是开发人员和用户或客户一起完成的。2.2 对性能的规定1、精度在精度需求上,根据使用
5、需要,在各项数据的输入,输出及传输过程中,可以满足各种精度的需求。如:根据关键字精度的不同,查找可分为精确查找和泛型查找,精确查找可精确匹配系统使用者所知道的企业名称及编号快速便捷的查询所要知道的信息。2、时间特性要求在软件方面,响应时间,更新处理时间都比较快且迅速,完全满足用户要求。3、灵活性当用户需求,如操作方式,运行环境,结果精度,数据结构于其他软件接口等发生变化时,设计的软件要做适当调整,灵活性非常大。2.2 数据需求分析数据字典(1)factory名称:factory别名:无描述:企业的基本信息组成:factory=(num+facname+repname+tel+usefnum+u
6、segnum+usemoney)(2) worker名称:worker别名:无描述:员工及管理员的基本信息组成:worker=(id+workername+password+level)3 系统设计3.1 功能模块设计3.2 数据库概念设计3.2.1实体属性图3.2.2 E-R图3.3 数据库逻辑设计企业(编号,企业名,法人代表)电价(峰电量,谷电量,峰电价,谷电价,总电费)系统用户(编号,姓名,密码,权限)3.4 数据库物理设计表一:factory列名数据类型允许Null值numvarchar(50)是facnamevarchar(50)是repnamevarchar(50)是telvarc
7、har(50)是usefnumint是usegnumint是usemoneyint是numfacnamerepnametelusefnumusegnumusemoney001新华书店陈国勇17802590001131410222333002苏果超市陈博文17802590002151622532863003微软公司毕世勇17802590003368524674952004乐天玛特丁小杰17802590004301127943105005三厂中学陈家勇17802590005242219742875表二:worker列名数据类型允许Null值idint否workernamevarchar(50)否p
8、asswordvarchar(50)否levelint否idworkernamepasswordlevel111张三1234561112李四1234561113熊大1234562114熊二12345623.5 数据库表间联系 数据库中所建的两张表factory与worker之间并没有任何直接的联系,一个代表的是企业信息,一个代表的是员工信息。4系统实现4.1登陆模块实现private class ButtonactionPerformed implements ActionListener/为登陆按钮ButtonactionPerformed添加事件监视器public void actionP
9、erformed(ActionEvent e)/从worker表中获得元组信息进行登陆,下面为获得元组登陆代码a=username2.getText();s=password2.getText();tryconn=DriverManager.getConnection(url, user, password);conn.setAutoCommit(true);System.out.println(和数据库已经建立连接!); stmt=(Statement) conn.createStatement(); rs=(ResultSet)stmt.executeQuery(select * from
10、 worker );if(c.equals(a)&b.equals(s)message.setText(姓名和密码不能为空);else if(true)while(rs.next()if(rs.getString(2).equals(a)& rs.getString(3).equals(s)&rs.getInt(4)=level)message.setText(数据库连接成功!);if(level=1)operate2 app2=new operate2();app2.setLocationRelativeTo(null);elseoperate app3=new operate();app3
11、.setLocationRelativeTo(null);elsemessage.setText(用户名和密码或者身份不正确);rs.close();stmt.close();conn.close();4.2查询模块实现private class ButtonactionPerformed implements ActionListener/为查询按钮ButtonactionPerformed添加事件监视器public void actionPerformed(ActionEvent e)/从worker表中获取元组,并且显示在系统上facname=search.getText();tryco
12、nn=DriverManager.getConnection(url, user, password);conn.setAutoCommit(true);System.out.println(和数据库已经建立连接!); stmt=(Statement) conn.createStatement();rs=(ResultSet)stmt.executeQuery(select * from factory );while(rs.next()if(rs.getString(2).equals(facname)text1.setText(rs.getString(1);text2.setText(r
13、s.getString(2);text3.setText(rs.getString(3);text4.setText(rs.getString(4);text5.setText(+(rs.getInt(5);text6.setText(+rs.getInt(6);text7.setText(+rs.getInt(7);rs.close();stmt.close();conn.close();4.3 添加模块实现private class ButtonactionPerformed implements ActionListener/为添加按钮ButtonactionPerformed添加事件监
14、视器public void actionPerformed(ActionEvent e)/在系统内输入要添加的元组信息,通过添加按钮添加到数据库中的factory表内x1=text1.getText();x2=text2.getText();x3=text3.getText();x4=text4.getText();x5=text5.getText();x6=text6.getText();x7=text7.getText();tryconn=DriverManager.getConnection(url, user, password);conn.setAutoCommit(true);Sy
15、stem.out.println(和数据库已经建立连接!);prepstmt1=(PreparedStatement) conn.prepareStatement(INSERT INTO factory(num,facname,repname,tel,usefnum,usegnum,usemoney)+VALUES(?,?,?,?,?,?,?);prepstmt1.setString(1, x1);prepstmt1.setString(2, x2);prepstmt1.setString(3, x3);prepstmt1.setString(4, x4);prepstmt1.setStrin
16、g(5, x5);prepstmt1.setString(6, x6);prepstmt1.setString(7, x7);prepstmt1.executeUpdate();conn.close();4.4 删除模块实现private class ButtonactionPerformed implements ActionListenerpublic void actionPerformed(ActionEvent e)x1=text1.getText();tryconn=DriverManager.getConnection(url, user, password);conn.setA
17、utoCommit(true);System.out.println(和数据库已经建立连接!); stmt=(Statement) conn.createStatement();stmt.executeUpdate(delete from factory where num=+x1);conn.close();4.5 修改模块实现private class ButtonactionPerformed implements ActionListenerpublic void actionPerformed(ActionEvent e)x1=text1.getText();x2=text2.get
18、Text();x3=text3.getText();x4=text4.getText();tryconn=DriverManager.getConnection(url, user, password);conn.setAutoCommit(true);System.out.println(和数据库已经建立连接!);prepstmt2=(PreparedStatement) conn.prepareStatement(update factory set num=?,usegnum=?,usefnum=?,usemoney=? where num=?);prepstmt2.setString(
19、1, x1);prepstmt2.setString(2, x2);prepstmt2.setString(3, x3);prepstmt2.setString(4, x4);prepstmt2.setString(5, x1);prepstmt2.executeUpdate();prepstmt2.close();conn.close();4.6 生成电费单模块实现private class ButtonactionPerformed implements ActionListenerpublic void actionPerformed(ActionEvent e)facname=sear
20、ch.getText();tryconn=DriverManager.getConnection(url, user, password);conn.setAutoCommit(true);System.out.println(和数据库已经建立连接!); stmt=(Statement) conn.createStatement();rs=(ResultSet)stmt.executeQuery(select * from factory );while(rs.next()if(rs.getString(2).equals(facname)x1=rs.getString(5);x2=rs.ge
21、tString(6);x3=rs.getString(7);text1.setText(rs.getString(5);text2.setText(rs.getString(6);text3.setText(rs.getString(7);rs.close();stmt.close();conn.close();5 代码调试与功能测试5.1 测试方案(1)分别输入用户、管理员查看登陆进去后的界面(2)分别用用户和管理员查询企业用电信息(3)添加企业用电信息(4)修改企业用电信息(5)删除企业用电信息(6)生成电费单5.2 测试结果 管理员登陆 管理员登陆后的界面 管理员登陆后查询的界面 用户登
22、陆后查询的界面 点击添加后的界面 输入数据添加成功 点击修改进行修改信息 修改成功 点击删除后出现的界面 删除成功 点击生成电费单出现的界面在桌面生成的电费单6 收获与体会一、这次课程设计的心得体会通过实践我的收获如下:一开始接触数据结构课程设计真的挺难的,好多都不会,不是逻辑方面的问题,而不具备动手能力,脑子里总有一团火,比如对于这个题目,一开始有很多的想法,想到了从逻辑上怎么实现他,要编写哪些程序,但是一到需要编写了就开始为难了,可以说是几乎不知道从哪里入手,参考了书本里的程序,仿照他的结构一步一步做下来,现在对于单链表的各种操作已经算是比较熟练了,但我知道光有理论知识还远远不够,需要多动
23、手,写的多了自然就能手到擒来。二、根据我在实习中遇到得问题,我将在以后的学习过程中注意以下几点:1、认真上好专业实验课,多在实践中锻炼自己。2、写程序的过程中要考虑周到,严密。3、在做设计的时候要有信心,有耐心,切勿浮躁。4、认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。5、在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。参考文献1 钱雪忠,王燕玲,林挺.数据库原理及技术M.北京:清华大学出版社,2011.2 钱雪忠,罗海驰,陈国俊.数据库原理及技术课程设计M.北京:清华大学出版社,2014.附录附录1源程序部分清单附录1.1re
24、cord代码import java.awt.*;import java.awt.event.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.ResultSet;import java.sql.Statement;import javax.swing.*;public class Record extends JFrameprivate static final long serialVersionUID = 1L;private JLa
25、bel username,password;private JTextField username2;private JTextField password2,message;private JButton button;private JRadioButton box1,box2;private ButtonGroup buttongroup;private String a,s;private String c=;private String b=;private int level=2;/private String juzi; public Record()super(Record);
26、setSize(300,300);tryUIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();catch(Exception e)Container container=getContentPane();container.setBackground(Color.lightGray);container.setLayout(null);username=new JLabel(用户名:,JLabel.RIGHT);password=new JLabel( 密码: ,JLabel.RIGHT);buttongroup=
27、new ButtonGroup();box1=new JRadioButton(员工,true);box2=new JRadioButton(管理员);username2=new JTextField(20);password2=new JTextField(20);message=new JTextField(欢迎使用企业用电管理系统);message.setHorizontalAlignment(JTextField.CENTER);button=new JButton(登录);username.setBounds(50, 50, 50, 25);username2.setBounds(1
28、00, 50, 120, 25);password.setBounds(50, 85, 50, 25);password2.setBounds(100,85, 120, 25);message.setBounds(55,160, 190, 25);box1.setBounds(50,120,50,25);box2.setBounds(110,120,70,25);button.setBounds(190, 120, 60, 25);buttongroup.add(box1);buttongroup.add(box2);ButtonactionPerformed buttoner=new But
29、tonactionPerformed();button.addActionListener(buttoner);RadioButtonHandler handler = new RadioButtonHandler();box1.addItemListener(handler);box2.addItemListener(handler);container.add(username);container.add(username2);container.add(password);container.add(password2);container.add(box1);container.ad
30、d(box2);container.add(button);container.add(message);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);public static void main(String args)Record app=new Record();app.setLocationRelativeTo(null);private class RadioButtonHandler implements ItemListenerpublic void itemStateChanged(ItemEv
31、ent event)if(box1.isSelected()message.setText(员工登录);level=2;else if(box2.isSelected()message.setText(管理员登录);level=1;private class ButtonactionPerformed implements ActionListenerpublic void actionPerformed(ActionEvent e)/登录a=username2.getText();s=password2.getText();tryClass.forName(driver);catch(Cla
32、ssNotFoundException arg0)System.out.print(class not find exception occur. message is:);tryClass.forName(driver);/加载驱动catch(ClassNotFoundException event)System.out.print(class not find exception occur. message is:);Statement stmt;ResultSet rs;String url=jdbc:sqlserver:/localhost:1433; DatabaseName=企业
33、用电;String driver=com.microsoft.sqlserver.jdbc.SQLServerDriver;String user=sa;String password=123456;Connection conn=null;tryconn=DriverManager.getConnection(url, user, password);conn.setAutoCommit(true);System.out.println(和数据库已经建立连接!); stmt=(Statement) conn.createStatement(); rs=(ResultSet)stmt.exec
34、uteQuery(select * from worker );if(c.equals(a)&b.equals(s)message.setText(姓名和密码不能为空);else if(true)while(rs.next()if(rs.getString(2).equals(a)& rs.getString(3).equals(s)&rs.getInt(4)=level)message.setText(数据库连接成功!);if(level=1)operate2 app2=new operate2();app2.setLocationRelativeTo(null);elseoperate a
35、pp3=new operate();app3.setLocationRelativeTo(null);elsemessage.setText(用户名和密码或者身份不正确); rs.close();stmt.close();conn.close();catch(SQLException eb)System.out.print(SQL exception occur. message is:);System.out.print(eb.getMessage();附录1.2 operate代码import java.awt.Color;import java.awt.Container;import
36、java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextField;import javax.swing.UIManager;import java.
37、sql.ResultSet;import java.sql.Statement;public class operate extends JFrameprivate static final long serialVersionUID = 1L;private JButton b1,b2,b3,b4,b5,b6;private JLabel c1,c2,c3,c4,c5,c6,c7;private JTextField text1,text2,text3,text4,text5,text6,text7;private JTextField search;private JLabel name;
38、private String facname; public operate()super(operate);setSize(700,400);tryUIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();catch(Exception e)Container container=getContentPane();name=new JLabel(输入企业名:,JLabel.RIGHT);c1=new JLabel(企业编号:,JLabel.RIGHT);c2=new JLabel(企业名称:,JLabel.RIGHT
39、);c3=new JLabel(企业代表人:,JLabel.RIGHT);c4=new JLabel(企业联系电话:,JLabel.RIGHT);c5=new JLabel(企业谷电量:,JLabel.RIGHT);c6=new JLabel(企业峰电量:,JLabel.RIGHT);c7=new JLabel(企业用电费:,JLabel.RIGHT);b1=new JButton(查询);b2=new JButton(取消);b3=new JButton(添加);b4=new JButton(删除);b5=new JButton(修改);b6=new JButton(生成电费单);text1
40、=new JTextField(200);text2=new JTextField(200);text3=new JTextField(200);text4=new JTextField(200);text5=new JTextField(200);text6=new JTextField(200);text7=new JTextField(200);search=new JTextField(60);name.setBounds(80, 50, 100, 30);c1.setBounds(80, 100, 100, 30);c2.setBounds(80, 130, 100, 30);c3.
41、setBounds(80, 160, 100, 30);c4.setBounds(80, 190, 100, 30);c5.setBounds(80, 220, 100, 30);c6.setBounds(80, 250, 100, 30);c7.setBounds(80, 280, 100, 30);search.setBounds(200, 50, 100, 25);b1.setBounds(370, 52,60,25);b2.setBounds(500,52,60,25);b3.setBounds(150, 330,60,25);b4.setBounds(250, 330,60,25);b5.setBounds(350, 330,60,25);b6.set