




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构实训报告题目: 用C实现外部流文件的引用 一、课程设计题目:有订单文件如下:货号品名进口单价数量开单日期生产单位LX-750影碟机TRUE5900.0041996-8-10松下电器公司YU-120彩电FALSE6700.0041996-10-10上海电视厂AX-120音响TRUE3100.0051995-10-11日立电器公司DV-430影碟机TRUE2680.0031996-9-30三星公司FZ-901取暖器FALSE318.0061996-9-5福利电器厂LB-133音响TRUE4700.0081995-12-30索尼公司SY-701电饭锅FALSE258.00101996-8-19爱德电器厂NV-920录音机TRUE1750.0061996-7-20先锋电器公司要求:1) 实现订单的输入功能2) 实现订单的输出功能3) 实现订单的删除功能4) 实现订单的查询功能(可以按照货号、品名、单价查询)二、问题描述:1、外部流文件的引用。2、输入,输出控件化。三、问题分析以明确的无歧义的陈述说明课程设计的任务,强调的是程序要做什么?我们小组认为,本题的要求是在于用JAVA实现对外部数据库的调用,更新,排序以及删除。在一开始,我们打算用本学期所学习的数据结构方面的知识再结合上学期所学的JAVA控件知识来实现这道题目(见图),但是在调试过程中遇到了很大的问题,不得不中途换别的方式进行算法实现。并明确规定:1、输入的形式和输入值的范围;数据库表格的形式输入,并依照数据库表格字段值的规定来规定输入值。2、输出的形式;用JAVA语言来进行窗口式的调用。3、程序所能达到的功能;在JAVA界面进行对外部数据库的简单应用。比如进行查询,更新,排序以及删除。4、算法涉及的基本理论分析:窗口界面是基于事件的程序,用户对具体图形组件的选择和激活,产生事件。在程序中创建监听器类并注册事件,并实例化。5、题目研究和实现的价值。我们小组认为,本题的研究价值在于,此题目设计多个程序的跨平台应用,通过JAVA程序对数据库的加载和调用,实现后台调用和操作数据库。实现的价值是,通过这个简单的程序初步认识到编程这项工作在将来的程序开发中的作用和价值。四、算法设计1、概要设计阐述说明本算法中用到的所有数据结构的定义及其含义、主程序的流程以及各程序模块之间的层次(调用)关系。因为涉及到外部文件流的引用,所以我们小组进行的方式是用JAVA命令式的程序对数据库进行创建,删除,插入以及查找。我们用了四个小程序来进行对数据库的调用,分别是见图。2、详细设计(1)实现概要设计中定义的所有数据类型;货号(char),品名(char),进口(boolean),单价(integer),数量(integer),开单日期(date),生产单位(char)。(2)所有函数的接口描述;ListSelectionListener,WindowListener,处理窗口时间的监听器类。(3)所有函数的算法描述(只需要写出伪码算法);函数为调用数据库和对数据库操作以及构造用户图形界面。(3)对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序),可采用流程图 、N S 图或PAD图进行描述;操作数据库的主程序为两个类,其中try类是对数据库进行加载桥接以及创建,catch类是依照算法的健壮性,对错误情况的处理。(4)画出函数的调用关系图。无。五、算法实现创建数据表程序J_AccessCreateTableimport java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class J_AccessCreateTable public static void main(String args) try Class.forName(microsoft.jdbc.sqlserver.SQLServerDriver);/加载JDBC-ODBC桥驱动程序 Connection c/通过数据源与数据库建立起连接 =DriverManager.getConnection(jdbc:odbc:OD); Statement s=c.createStatement();/创建SQL语句对象 /创建数据库表:订单 s.executeUpdate( Create table 订单(+ 货号 char(10) CONSTRAINT authIndex PRIMARY KEY, + 品名 char(10), + 进口 boolean, + 单价 integer, + 数量 integer, + 开单日期 char(12) + 生产单位 char(14); s.close(); c.close(); System.out.println(创建数据库表:订单); catch (Exception e) System.err.println(异常:+e.getMessage(); 增加一个订单程序J_AccessInsertRecordimport java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class J_AccessInsertRecord public static void main(String args) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/加载JDBC-ODBC桥驱动程序 Connection c/通过数据源与数据库建立起连接 =DriverManager.getConnection(jdbc:odbc:OD); Statement s=c.createStatement();/创建SQL语句对象 s.executeUpdate( insert into 订单 valuse(LX,影碟机,FALSE,5900.00,5,1996-6-6,长虹集团); s.close(); c.close(); System.out.println(给数据库表订单增加记录); catch(Exception e) System.err.println(异常:+e.getMessage(); 删除数据表J_AccessDropTableimport java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class J_AccessDropTable public static void main(String args) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/加载JDBC-ODBC桥驱动程序 Connection c/通过数据源与数据库建立起连接 =DriverManager.getConnection(jdbc:odbc:OD); Statement s=c.createStatement();/创建SQL语句对象 s.executeUpdate(drop table 订单); s.close(); c.close(); System.out.println(删除数据表:订单); catch (Exception e) System.err.println(异常:+e.getMessage(); 数据表查询并且按指定字段名排序J_AccessShowRecordimport java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;public class J_AccessShowRecord public static void mb_ShowRecord(ResultSet r) try r.last(); System.out.println(数据库表共有+r.getRow()+行记录); r.beforeFirst(); while(r.next() System.out.println(第+r.getRow()+行记录为:); catch(Exception e) System.err.println(异常+e.getMessage(); public static void main(String args) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection c =DriverManager.getConnection(jdbc:odbc:OD); Statement s=c.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet r1=s.executeQuery(select 货号 from 订单); ResultSet r2=s.executeQuery(select 品名 from 订单); ResultSet r3=s.executeQuery(select 单价 from 订单); mb_ShowRecord(r1); mb_ShowRecord(r2); mb_ShowRecord(r3); s.close(); c.close(); catch (Exception e) System.err.println(异常:+e.getMessage(); 以下为交互式界面图形窗口以及SWING组件的程序import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.table.*;import java.io.*;public class OrderBookJFrame extends JFrame implements ListSelectionListener,WindowListener public String filename; /文件名 public TreeSet tbook; /订单 public JList list; /列表框 public DefaultListModel listModel; /默认列表框模型 public JTable table; /表格组建 public DefaultTableModel tableModel; /默认表格模型 public String nam; /品名 public String product; /货号 public boolean imp; /是否为进口 public String dat; /开单日期 public String compan; /生产单位 public double pric; /单价 public double amoun; public OrderBookJFrame(String filename) /构造用户图形界面 super(订单); Dimension dim =getToolkit().getScreenSize(); /获得屏幕分辨率 this.setBounds(dim.width/4,dim.height/4,dim.width/2,dim.height/2); /窗口居中 this.addWindowListener(this);/注册窗口事件监听器 this.filename=filename; tbook=new TreeSet(); /从指定文件中读取对象信息 this.readFromFile();JSplitPane splitter_h=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); /分割窗格 splitter_h.setDividerLocation(60); /设置分割条的位置 this.getContentPane().add(splitter_h); JSplitPane splitter_v=new JSplitPane(JSplitPane.VERTICAL_SPLIT);/垂直分割 splitter_v.setDividerLocation(dim.height/4); this.listModel=new DefaultListModel(); /默认列表框模式 this.listModel.addElement(全部); this.getFamilyName(); /列表框中加电话薄中所有姓氏 this.list=new JList(listModel); /创建列表框 this.list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); /设置单选模式 this.list.addListSelectionListener(this); /列表框注册选择事件监听器 splitter_h.add(new JScrollPane(this.list); /添加在滚动窗格中 splitter_h.add(splitter_v); String columnNames=货号,品名,进口,单价,数量,开单日期,生产单位; /表格各列的中文标题 this.tableModel=new DefaultTableModel(columnNames,0); /制定列标题,0行 this.table=new JTable(tableModel); /创建空表格,有列标题 this.list.setSelectedIndex(0); /列表框选中第一项 splitter_v.add(new JScrollPane(table); splitter_v.add(new orderJPanel(); this.setVisible(true); public OrderBookJFrame() this(friends.dat); /指定默认文件名 public void valueChanged(ListSelectionEvent e) / 选择事件处理方法 if(e.getSource()=this.list) /选中列表框的数据项时触发 String selected=(String)list.getSelectedValue(); /返回列表框选中数据项对象 this.searchByName(selected); /返回选中姓氏的对象并更新表格 public void getFamilyName() / JList 订单中中的所有首字母 if(!tbook.isEmpty() Iterator it=tbook.iterator(); /返回一个迭代器对象 while(it.hasNext() /使用迭代器遍历一个集合 Order f=(Order)it.next(); /返回后继元素 String familyname = f.getName().charAt(0)+ ; / 获得首字母 if(!this.listModel.contains(familyname) this.listModel.addElement(familyname); /列表框模型添加数据项 private void searchByName(String familyname) /更新表格,参数指定姓氏 if(!tbook.isEmpty() & familyname!= null & familyname!=) for(int i=this.tableModel.getRowCount()-1;i=0;i-) /清空表格 this.tableModel.removeRow(i); Iterator it=tbook.iterator(); while(it.hasNext() Order f =(Order)it.next(); if(familyname=全部 | f.getName().charAt(0)=familyname.charAt(0) this.tableModel.addRow(f.toArray(); /表格添加一行,参数数组指定各列值 /私有内部类,构造一个面板,包括两个文本行和添加,删除,查找等按钮 private class FriendJPanel extends JPanel implements ActionListener private JTextField text_name; /文本行,输入品名 private JTextField text_code; /文本行,输入货号 private JTextField text_impo; private JTextField text_price; private JTextField text_amount; private JTextField text_data; private JTextField text_company; public FriendJPanel() this.setLayout(new GridLayout(3,1); JPanel p1=new JPanel(); this.add(p1); p1.add(new JLabel(货号); this.text_name=new JTextField(电视机,20); p1.add(text_name); JPanel p2=new JPanel(); this.add(p2); p2.add(new JLabel(品名); this.text_code=new JTextField(xy-730,20); p2.add(text_code); this.setLayout(new GridLayout(3,1); JPanel p3=new JPanel(); this.add(p3); p2.add(new JLabel(是否为进口); this.text_code=new JTextField(true,20); p2.add(text_code); JPanel p4=new JPanel(); this.add(p4); p2.add(new JLabel(单价); this.text_code=new JTextField(3400,20); p2.add(text_code); this.setLayout(new GridLayout(3,1); JPanel p5=new JPanel(); this.add(p5); p2.add(new JLabel(数量); this.text_code=new JTextField(1,20); p2.add(text_code); JPanel p6=new JPanel(); this.add(p6); p2.add(new JLabel(开单日期); this.text_code=new JTextField(2010-7-11,20); p2.add(text_code); this.setLayout(new GridLayout(3,1); JPanel p7=new JPanel(); this.add(p7); p2.add(new JLabel(生产单位); this.text_code=new JTextField(松下集团,20); p2.add(text_code); JPanel p8=new JPanel(); this.add(p8); JButton button_add=new JButton(添加); p3.add(button_add); button_add.addActionListener(this); JButton button_delete=new JButton(删除); p3.add(button_delete); button_delete.addActionListener(this); JButton button_search=new JButton (按货号查找); p3.add(button_search); button_search.addActionListener(this); public void actionPerformed(ActionEvent e) /单击事件处理程序 if(e.getActionCommand().equals(添加) /单击添加按钮 String name=text_name.getText(); String code=text_code.getText(); String impo=text_impo.getText(); String price=text_price.getText(); String amount=text_amount.getText(); String data=text_data.getText(); String company=text_company.getText(); if(name!=) Order f=new Order(product,nam,imp,pric,amoun,dat,compan); if(!tbook.contains(f) /订单不能插入重复对象 tbook.add(f); /添加对象 String familyname=name.charAt(0)+; /返回品名的第一个字符 if(list.getSelectedValue().equals(familyname) tableModel.addRow(f.toArray(); else if(!listModel.contains(familyname) listModel.addElement(familyname); list.setSelectedValue(familyname,true); /设置列表框中选中项 else JOptionPane.showMessageDialog(null,不能添加空对象或重复对象+ f.toString(),提示,JOptionPane.DEFAULT_OPTION);/使用标准对话框显示提示信息 else JOptionPane.showMessageDialog(null,请输入姓名,提示,JOptionPane.DEFAULT_OPTION); if(e.getActionCommand().equals(货号码查询) searchByCode(text_code.getText(); /查找货号 if(e.getActionCommand().equals(删除) /表格当前选中行号 int i=table.getSelectedRow(); int yes=JOptionPane.showConfirmDialog(null,删除+i+行?, 询问,JOptionPane.YES_NO_OPTION); /询问对话框,包括yes和no按钮 if(yes=0) /单击yes String name=(String)table.getValueAt(i,0); String code =(String)table.getValueAt(i,0); tbook.remove(new Order(product,nam,imp,pric,amoun,dat,compan); /订单中删除对象 tableModel.removeRow(i); /表格中删除一行 listModel.removeElement(name.charAt(0)+);/列表框中删除指定姓氏 /OrderJPanel内部类结束 private void readFromFile() /从指定文件中读取已有对象 try FileInputStream fin =new FileInputStream(this.filename); /文件字节输入流 ObjectInputStream objin=new ObjectInputStream(fin); /对象字节输入流 while(true) /输入流未结束时 try Order f=(Order)objin.readObject(); /读取一个对象 tbook.add(f); /添加到订单 catch(ClassNotFoundException e) /输入流结束时抛出该异常 break; objin.close(); /先关闭对象流 fin.close(); /再关闭文件流 catch(IOException e) /若文件不存在,则不读取 public void writeToFile() /向指定文件写入订单中的所有对象 try FileOutputStream fout =new FileOutputStream(this.filename);/文件字节输出流 ObjectOutputStream objout=new ObjectOutputStream(fout); /对象字节输出流 if(!tbook.isEmpty() Iterator it=tbook.iterator(); while(it.hasNext() objout.writeObject(Order)it.next(); /写入一个对象 objout.close(); fout.close(); catch(IOException ex) public void windowClosing(WindowEvent e) /关闭窗口事件处理方法 /this.writeToFile(); /将订单所有对象写入指定文件 System.exit(0); /应用程序终止执行 public void windowOpened(WindowEvent e) public void windowActivated(WindowEvent e) public void windowDeactivated(WindowEvent e) public void windowClosed(WindowEvent e) public void windowIconified(WindowEvent e) public void windowDeiconified(WindowEvent e) public static void main(String args ) throws IOException new OrderBookJFrame(); /默认文件名为“friends.dat” 六、软件测试这里的测试主要是基于功能的黑盒测试,所以首先提出测试的功能点,然后给出测试数据(包括正确的输入及其输出结果和含有错误
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽省宿州市省、市示范高中2023-2024学年高一下学期期中考试语文试题(解析版)
- 浙江国企招聘2025杭州萧山融媒发展有限公司招聘5人笔试参考题库附带答案详解
- 浙江国企招聘2025台州市黄岩永恒电力建设有限公司招聘6人笔试参考题库附带答案详解
- 营业厅员工安全知识培训课件
- 2025辽宁省能源产业控股集团所属抚矿集团招聘90人笔试参考题库附带答案详解
- 银行纪检监察培训
- 2025河北雄安软通教育科技有限公司招聘10人笔试参考题库附带答案详解
- 2025年萍乡创新发展投资集团有限公司招聘6人笔试参考题库附带答案详解
- 2025山西交控集团招聘450人笔试参考题库附带答案详解
- 2025天津市北人人力资源管理咨询有限公司派驻至某央企外包制员工招聘笔试参考题库附带答案详解
- 网络安全防护讲座课件
- 丁类厂房消防设计规范
- 英语PET考试固定搭配
- 立裁连衣裙方法
- 甘肃省兰州市成考专升本2023年英语真题及答案
- 人才培养模式与课程体系改革总结报告
- 《非暴力沟通》市公开课一等奖课件
- 07J902-3 医疗建筑(卫生间、淋浴间、洗池)
- 茶叶生物化学理论考试题库(100题)
- 推荐如果历史是一群喵读书分享会模板
- 急诊绿色通道管理考试及参考答案
评论
0/150
提交评论