




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据库课程设计系、部:计算机与信息科学系学生1:学生2:专业:计算机科学与技术班级:完成时间:2011年12月29日数据库设计题目:编程词典用户管理系统数据库设计阶段相关的E-R图28客户信息表tb-Buyer的E-R图单价流水号词典信息表词典名称词典编号词典信息表tb-Dictionary的E-R图流水号权限级别:一操作员信息表f操作员(或经手人)密码1操作员信息表tb-Operater的E-R图数据流图:南关系模式客户信息表tb-Buyer(buyerid,ide ntityCard,buyer,sex,birthday,address,postalcode,teleph on e,fax
2、,ha ndest ,QQ,email ) 词典信息表tb-Diction ary(id,cdld,cdName,price)销售主要信息表tb-Main Sell(sellld,category,totalNumber,totelMo ney,buyer,sellDate,operater,dealWit hMa n,buyerld)销售明细信息表tb-DetailSell(id,sellld,buyerld,cdld,price,amoun t,totalMo ney)操作员信息表tb-Operater(id,user name,password,grade)数据库的物理结构设计与数据字典
3、在D盘目录下创建编程管理数据库:CREATE DATABASb_ProgramDict ionaryON PRIMARY(NAME=tushu data, filename=D:tushu.mdf, size=5MB, Maxsize=25MB,FILEGROWTH=10%)LOG ON (NAME=tushu_log, filename=D:tushu.ldf, size=5MB, Maxsize=10MB, filegrowth=1MB) 客户信息表tb-Buyer字段名数据类型是否允许空值是否主键或约束说明buyeridInt4不允许主键,自动编号客户编号ide ntityCardVar
4、char18不允许无约束身份证明buyerVarchar20不允许无约束客户名称sexVarchar10允许无约束性别birthdaydatetime8允许无约束岀生日期addressVarchar200允许无约束地址postalcodeVarchar10允许无约束邮编teleph oneVarchar20允许无约束电话faxVarchar20允许无约束传真han destVarchar30允许无约束手机QQVarchar20允许无约束Q(号码emailVarchar50允许无约束电子信箱词典信息表tb-Dictio nary字段名数据类型长度是否允许空值是否主键或约束说明idInt4不允许主
5、键,自动编号流水号cdIdVarchar20不允许无约束词典编号cdNameVarchar20不允许无约束词典名称pricefloat8不允许无约束单价销售主要信息表tb-Mai nSell(sellld,category,totalNumber,totelMo ney,buyer,sellDate,operater,dealWit hMa n,buyerld)字段名数据类型长度是否允许空值是否主键或约 束说明sellIdVarchar20不允许主键,自动编号销售编号categoryInt4允许无约束品种数totalNumberInt4允许无约束总数量totelMo neyfloat8允许无约
6、束总金额buyerVarchar20允许无约束客户名称sellDatedatetime8允许无约束销售日期operaterVarchar20允许无约束操作员dealWithMa nVarchar20允许无约束经手人buyerIdInt4允许无约束客户编号销售明细信息表tb-DetailSell(id,sellld,buyerld,cdld,price,amou nt,totalMo ney)字段名数据类型长度是否允许空值是否主键或约 束说明idInt4不允许主键,自动编号流水号sellIdVarchar20允许外键销售编号buyerIdInt4允许无约束客户编号cdIdVarchar20允许无
7、约束词典编号pricefloat8允许无约束单价amountInt4允许无约束数量totalMo neyfloat8允许无约束金额操作员信息表tb-Operater(id,user name,password,grade)字段名数据类型长度是否允许空值是否主键或约 束说明idInt4不允许主键,自动编 号流水号user namevarchar20不允许无约束操作员passwordvarchar20不允许无约束密码gradevarchar10不允许无约束权限级别需求分析系统登录系统登录功能可以保障信息的安全,防止他人非法进入系统,要求只有合格用户输入正确的用户名和密码,才 能进入系统进行操作,否
8、则不能进入系统。添加词典信息合法用户通过正确的用户名和密码进入系统后,可以通过“基本信息管理”菜单中的“添加词典信息”菜单项 或单击工具栏上的“添加词典信息”按钮,打开“添加词典信息”对话框添加词典信息。添加客户信息可以添加编程词典客户的基本信息,目的是方便对词典客户的管理和该客户所购买编程合法用户进入系统后, 词典信息的管理,当需要销售词典时需要用到客户信息。词典销售用于完成词典的销售操作,并且在销售时可以批量添加多条销售信息,也就是针对一个用户可以在一个界面中 销售多种词典,并且每添加一种编程词典信息,系统会自动计算相关数据,销售成功后会将销售信息分别保存 在销售主表和销售明纟查询统计同时
9、会对相关数据进行统计,如合计数量和合计金额。用于完成词典销售信息的查询和相关数据的统计,用户通过该功能可以按客户名称,词典名称,销售日期等多 种方式进行查询,并将查询结果以表格的形式显示岀来,修改销售信息芋息,系统会自动计算相关数据,销售成功后会将销售信息分别保存在销售主表和销售明用于完成词典销售后的修改操作,并且在修改销售信息是,可以在一个界面中修改多种销售信息,并且每修改 一种编程词典的销售信 细中。添加用户管理级别的用户通过正确的用户名和密码进入系统后,可以通过该功能添加新的用户,并为其指定密码,一旦 新用户添加成功,以后该用户就可以通过正确的密码进入系统从而可以对系统进行操作。在使用一
10、段时间后,用户可以通过该功能修改密码,为了避免其他人任意修改密码,要修改密码 为了保护密码的安全, 求用户必须输入正确的原密码,然后才可以修改密码,否则不允许其修改密码。 功能结构图编程词典用户管理功能结构图系统登录编程词典用户管理系统主窗体修改密码添加用户查询统计词典销售信息登录N t用户名密码是否正确修改词典销售信息寻、流程图:Y代码,注解与测试用例为JTable表格设置单元格编辑器TableColumn cdNameColumn=tb_detailSell.getColumnModel().getColumn(0);/创建单元格编辑器 一单击两次鼠标启动编辑器 设置表格列对象的编辑器De
11、faultCellEditor cdNameEditor=new DefaultCellEditor(getCmb_tableCellEdit(); cdNameEditor.setClickCountToStart(2);/cdNameColumn.setCellEditor(cdNameEditor);/进行多个数据表的同步操作Connection conn= null ; /声明数据库连接/声明 PreparedStatement对象PreparedStatement psMain =null ;PreparedStatement psDetail =null ;try conn = D
12、AO.getConn();/获得数据库连接conn.setAutoCommit(false);String sqlMain = insert into tb_MainSell (totalMoney) values;/创建PreparedStatement 对象,并传递SQL语句psMain = conn.prepareStatement(sqlMain);psMain.setString(1, sellMain.getSellld(); /为参数赋值psMain.setFloat(1, 8000.0F); psMain.executeUpdate();String sqlDetail = i
13、nsert into tb_DetailSell (totalMoney) values; psDetail = conn.prepareStatement(sqlDetail);psDetail.setFloat(1, 8000.0F);psDetail.executeUpdate(); psDetail.addBatch(); mit();JOptionPane.showMessageDialog ( null , 添加成功。“); catch (Exception ex)try conn.rollback();catch (SQLException e) e.printStackTrac
14、e();JOptionPane.showMessageDialog ( null , 添加失败。“);ex.printStackTrace();return false ; finally try if (conn!= null ) conn.close();catch (SQLException e) e.printStackTrace();批量添加或更新数据表Connection conn= null ; / 声明数据库连接/声明 PreparedStatement对象PreparedStatement psDetail =null ;try conn = DAO.getConn();/获
15、得数据库连接conn.setAutoCommit(false);String sql=insert into tb_DetailSell(amount) values(?)Intnum=20,30,40,50,60For(int i=0;inum,Length;i+)Int sl=numi psDetail.setInt(1,sl); psDetail.executeUpdate();psDetail.addBatch(); mit();JOptionPane. showMessageDialog return true ; catch (Exception ex) try conn.roll
16、back(); catch (SQLException e) e.printStackTrace();JOptionPane. showMessageDialog ex.printStackTrace();return false ; finally try if (conn!= null ) conn.close(); catch (SQLException e) e.printStackTrace(); 公工类设计 公共类 DAO package com.zzk.dao;( null , 批量添加成功。 );( null , 批量添加失败。 );import java.sql.*;impo
17、rt javax.swing.JOptionPane;public class DAO private static DAO dao = new DAO(); /声明 DAO 类的静态实例* 构造方法,加载数据库驱动*/public DAO() try Class.forName(net.sourceforge.jtds.jdbc.Driver); / catch (ClassNotFoundException e) JOptionPane.showMessageDialog(null, + e.getMessage();加载数据库驱动数据库驱动加载失败,请将 JTDS 驱动配置到构建路径中n
18、/*获得数据库连接的方法* return Connection*/public static Connection getConn() try Connection conn = null; /定义数据库连接String url = jdbc:jtds:sqlserver:/localhost:1433/db_ProgramDictionary; / db_ProgramDictionary 的 URLString username = sa; /数据库的用户名String password = 123; /数据库密码conn = DriverManager.getConnection(url
19、, username, password); / 建立连接 return conn; /返回连接 catch (Exception e) JOptionPane.showMessageDialog(null, 数据库连接失败。 n 请检查是否安装了 SP4 补丁, n 以及数据库用户名和密码是否正确。 + e.getMessage();return null;公共类 SaveUserStateToolpackage com.zzk.tool;public class SaveUserStateTool 数据库private static String username; /操作员名privat
20、e static String password; /操作员密码private static String grade; /操作员级另 U/获得操作员名的getter 方法public static String getUsername() return username;/为操作员名赋值的setter 方法public static void setUsername(String username) SaveUserStateTool.username = username;/获得操作员密码的getter 方法public static String getPassword() return
21、 password;/为操作员密码赋值的setter 方法public static void setPassword(String password) SaveUserStateTool.password = password;/获得操作员级别的getter 方法public static String getGrade() return grade;/为操作员级别赋值的setter 方法public static void setGrade(String grade) SaveUserStateTool.grade = grade;系统登录窗体创建登录窗体的背景面板类LoginBackPa
22、nelpackage com.zzk.back.panel;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt .Im age;import javax.swing .J Panel;public class LoginBackPanel extends JPanel private static final long serialVersionUID = 1L; private Image image; /定义图像对象public LoginBackPanel(Image image) super(); /调
23、用超类的构造方法this.image = image; /为图像对象赋值initialize();/* 重写 paintComponent 方法*/protected void paintComponent(Graphics g) 调用父类的方法创建 Graphics2D获得面板的宽度获得面板的高度对象super.paintComponent(g); / Graphics2D g2 = (Graphics2D) g; / if (image != null) int width = getWidth(); /int height = getHeight(); /绘制图像g2.drawImage
24、(image, 0, 0, width, height, this); private void initialize() this.setSize(300, 200);设计系统登录窗体/* This method initializes btn_ok* return javax.swing .J Button*/privateif (btn_ok =btn_ok = btn_ok.setBounds( btn_ok.setIcon( btn_ok.setText( btn_ok.addActionListener( public voidUser user =JButton getBtn_o
25、k() null ) new JButton();new Rectangle(34, 118, 101, 28);new lmagelcon(getClass().getResource(/icon/ 登 录);new java.awt.event.ActionListener() actionPerformed(java.awt.event.ActionEvent e) new User();/登录.png);user.setName(tf_user.getText().trim(); / user.setPwd(new String(pf_pwd.getPassword(); /if (U
26、serDao. okUser |(user) /MainFrame thisClass =new MainFrame();/设置主窗体的自动关闭方式thisClass.setDefaultCloseOperation(JFrame.Toolkit tookit = thisClass.getToolkit(); / Dimension dm = tookit.getScreenSize(); /主窗体在屏幕上居中thisClass.setLocation(dm.width - thisClass.getWidth() / 2, (dm.height - thisClass.getHeight(
27、) / 2);thisClass.setVisible(true );dispose(););return btn_ok;/创建User类的实例获得输入的用户名获得输入的密码调用UserDao类的方法验证用户名和密码 创建主窗体类的实例DO_NOTHING_ON_CLOSE);获得Toolkit对象通过Toolkit 对象获得屏幕的大小显示主窗体销毁登录窗体编程词典用户管理系统主窗体创建主窗体的背景面板 Mai nBackPa nel package com.zzk.back.pa nel;import java.awt.Graphics;import java.awt.Graphics2D;
28、import java.awt .Im age;import javax.swing .J Panel;public class MainBackPanel extends JPanel private static final long serialVersionUID = 1L;private Image image; /定义图像对象public MainBackPanel(Image image) super(); /调用超类的构造方法this.image = image; /为图像对象赋值initialize。;/* 重写 paintComponent 方法*/调用父类的方法创建Gra
29、phics2D 对象获得面板的宽度获得面板的高度protected void paintComponent(Graphics g) super.paintComponent(g); /Graphics2D g2 = (Graphics2D) g; / if (image != null) int width = getWidth(); /int height = getHeight(); /绘制图像g2.drawImage(image, 0, 0, width, height, this);private void initialize() this.setSize(300, 200);通过菜
30、单项或工具栏按钮的事件打开操作窗口btn_addDictionary.setText(“添加编程词典信息“);btn_addDictionary.setlcon(new lmagelcon(getClass().getResource(/icon/添加词典信息.png);btn_addDictionary.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) AddDictionaryFrame thisClass =new
31、AddDictionaryFrame(null );Toolkit tookit = thisClass.getToolkit();Dimension dm = tookit.getScreenSize();thisClass.setLocation(dm.width-thisClass.getWidth()/2,(dm.height-thisClass. getHeight()/2);thisClass.setVisible(true ););添加词典信息窗体设计添加词典信息窗体保存词典信息btn_save.addActionListener(new java.awt.event.Actio
32、nListener() public void actionPerformed(java.awt.event.ActionEvent e) String id = tf_id.getText();String name = tf_name.getText();float price = 0.0f;try price = Float.parseFloat (tf_price.getText().trim();catch (Exception ex)JOptionPane.showMessageDialog (null , 单价必须输入数值。);return ;Dictionary diction
33、ary =new Dictionary();dictionary.setId(id);dictionary.setName(name);insertDictionary false ); true );(dictionary)dictionary.setPrice(price);if (DictionaryDao. btn_save.setEnabled( btn_clear.setEnabled( _);添加客户信息窗体添加客尸信思客戸虻名:性别:W:邮韓=:身槪证号:国胡 C攻出仝曰則:晅回设计添加客户信息窗体保存客户信息btn_save.addActionListener(new jav
34、a.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) Buyer buyer =new Buyer();buyer.setldentityCard(tf_identityCard.getText(); buyer.setName(tf_buyer.getText();String sex = rb_nan.isSelected() ? rb_nan.getText() : rb_nv.getText(); buyer.setSex(sex);buyer.setBirthday
35、(tf_birthday.getText(); buyer.setAddress(tf_buyer.getText(); buyer.setPostcode(tf_postcode.getText(); buyer.setTellphone(tf_tellphone.getText();buyer.setFax(tf_fax.getText(); buyer.setHandset(tf_handset.getText(); buyer.setQq(tf_qq.getText();buyer.setEmail(tf_email.getText();if (BuyerDao. insertBuye
36、r (buyer)btn_save.setEnabled(false );btn_add.setEnabled(true );-);词典销售窗体设计词典销售窗体private void initialize() this.setSize(631, 388); this.setResizable(false);this.setModal(true);this.setTitle( 词典销售窗体 ); this.setContentPane(getJContentPane();this.addWindowListener(new java.awt.event.WindowAdapter() publ
37、ic void windowOpened(java.awt.event.WindowEvent e) tf_tableCellEdit.setVisible(false); cmb_tableCellEdit.setVisible(false);Vector adminVector = UserDao. addComboBoxItem (); if (cdVector != null)int itemCount = adminVector.size();int i = 0;cmb_dealWithMan.addItem();while (iitemCount) cmb_dealWithMan.
38、addItem(adminVector.get(i); i+;Vector buyerVector = BuyerDao. addComboBoxItem (); if (cdVector != null)int itemCount = buyerVector.size();int i = 0;cmb_buyer.addItem();while (iitemCount) cmb_buyer.addItem(buyerVector.get(i); i+;);在窗体的表格中添加空白行btn_add.addActionListener( new java.awt.event.ActionListen
39、er() public void actionPerformed(java.awt.event.ActionEvent e) / 创建日期格式化对象,并指定格式SimpleDateFormat format =new SimpleDateFormat(yyyy-MM-dd);String stringDate = format.format(new Date();tf_sellDate.setText(stringDate);DefaultTableModel dataModel = (DefaultTableModel)tb_detailSell.getModel(); Vector val
40、ue =new Vector();value.add();value.add();value.add();value.add();value.add();dataModel.addRow(value);tf_sellId.setText(SellDao. makeSellId tf_operator.setText(SaveUserStateTool.);选择组合框中的列表项自动添加信息public void itemStateChanged(java.awt.event.ItemEvent e) if (flag)int currentRow = -1;if (tb_detailSell.g
41、etRowCount() 0) currentRow = tableDoubleRowIndex;selectItem = (String)cmb_tableCellEdit.getSelectedItem(); tf_tableCellEdit.setVisible( String data = DictionaryDao.();getUsername ();true );queryDictionaryMessage(selectItem);tb_detailSell.setValueAt(data0, currentRow, 1);tb_detailSell.setValueAt(data
42、1, currentRow, 2); tb_detailSell.editCellAt(currentRow, 3);(DefaultCellEditor) (tb_detailSell.getCellEditor(currentRow, 3).getComponent().requestFocus(); );在表格单元格编辑器中实现自动计算tf_tableCellEdit.addActionListener( new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e
43、) try flag =false ;int currentRow=tableDoubleRowIndex;2);3);float price = Float. parseFloat (String)tb_detailSell.getValueAt(currentRow,int num = Integer. parseInt (String)tb_detailSell.getValueAt(currentRow, tb_detailSell.setValueAt(String. valueOf (price * num),currentRow, 4); cmb_tableCellEdit.re
44、moveItem(selectItem);int totalRows = tb_detailSell.getRowCount();if (totalRows 0)int totalNums = 0;float totalMoney = 0.0f; int row = 0;while (row =0) (DefaultTableModel)tb_detailSell.getModel().removeRow(selectRowIndex); tableDoubleRowIndex-;int totalRows = tb_detailSell.getRowCount();if (totalRows
45、 0)int totalNums = 0;float totalMoney = 0.0f; int row = 0;while (row totalRows)int number = Integer. float money = Float. totalNums = totalNums + number; totalMoney = totalMoney + money; row+;tf_category.setText(String.tf_totalNumber.setText(String.tf_totalMoney.setText(String.parseInt (String)tb_de
46、tailSell.getValueAt(row, parseFloat (String)tb_detailSell.getValueAt(row,valueOf (totalRows); valueOf (totalNums);valueOf (totalMoney);3);4); );保存销售信息 btn_sell.addActionListener( new java.awt.event.ActionListener() public void actionPerformed(java.awt.event.ActionEvent e) try String buyerIdentityCar
47、d = (String)cmb_buyer.getSelectedItem(); String dealWithMan = (String)cmb_dealWithMan.getSelectedItem();if (buyerIdentityCard = null | buyerIdentityCard.trim().equals() JOptionPane. showMessageDialog ( null , 必须选择客户名称。 ); return ;if (dealWithMan = null | dealWithMan.trim().equals() JOptionPane. show
48、MessageDialog ( null , 必须选择经手人。 ); return ;/ 获得向数据表 tb_MainSell 添加的信息 String sellId = tf_sellId.getText().trim();int category = Integer. parseInt (tf_category.getText().trim();int totalNumber = Integer.parseInt (tf_totalNumber.getText().trim();float totalMoney = Float.parseFloat (tf_totalMoney.getTe
49、xt().trim();String s=buyerIdentityCard.split( );String buyer = s0;/ 获得客户的身份证号 String identityCard = s1;String sellDate = tf_sellDate.getText().trim();String operator = tf_operator.getText().trim(); / 根据身份证号获得客户编号int buyerId = BuyerDao.getBuyerId (identityCard);SellMain sellMain =new SellMain();sellMain.setSellId(sellId);sellMain.setCategory(category); sellMain.setTotalNumber(total
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年渔家傲试题及答案
- 2025年专升硕英语试题及答案
- 5年级下册英语第5单元
- 嘉兴风机吊装施工方案
- 登鹳雀楼写了诗人的所见
- arm芯片霍尔信号
- 2025年天然植物纤维及人造纤维编织工艺品合作协议书
- 2025年内蒙古通辽市单招职业倾向性测试题库1套
- 2025年重庆青年职业技术学院单招职业倾向性测试题库及参考答案1套
- 2025年攀枝花攀西职业学院单招职业技能测试题库审定版
- 《S中学宿舍楼工程量清单计价编制(附三维图)》30000字
- 全国运动员注册协议书范本(2篇)
- 2024年03月浙江南浔银行春季招考笔试历年参考题库附带答案详解
- 执行立案申请书模版
- 《高点全景视频监控联网技术要求》
- 智能建筑外挂电梯安装方案
- 2024届广东省广州市高三一模考试英语试题讲评课件
- 数字电子技术(广东工业大学)知到智慧树章节测试课后答案2024年秋广东工业大学
- 安徽省淮北一中2025届高三冲刺模拟数学试卷含解析
- 白云山生态停车场工程施工组织设计施工方案
- 2024年四川省绵阳市中考语文试卷(附真题答案)
评论
0/150
提交评论