数据结构课程设计报告JAVA实现(停车场管理、运动会成绩管理、哈弗曼压缩).doc_第1页
数据结构课程设计报告JAVA实现(停车场管理、运动会成绩管理、哈弗曼压缩).doc_第2页
数据结构课程设计报告JAVA实现(停车场管理、运动会成绩管理、哈弗曼压缩).doc_第3页
数据结构课程设计报告JAVA实现(停车场管理、运动会成绩管理、哈弗曼压缩).doc_第4页
数据结构课程设计报告JAVA实现(停车场管理、运动会成绩管理、哈弗曼压缩).doc_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

题目一:学生运动会成绩管理题目二:停车场管理题目三:哈弗曼编译器姓名:李众力学号:0909103001专业班级:物联网工程1002数据结构课程设计实验报告2020年2月12日目录程序一:学生运动会成绩管理(JAVA)1一、需求分析:1二、概要设计2三、详细设计4四、调试分析:9五、用户手册:10附:程序源代码12Data.java12ItemNode.java13MainUI.java15MyTable.java32ResTab.java35ResTab2.java38SchoolNode.java40Tools.java43程序二:停车场管理(JAVA)46一、需求分析:46二、概要设计:46三、详细设计:47四、调试分析:49五、用户手册:52附录:54CarInfo.java54Data.java54ListNode.java58MyListQueue.java59MyStack.java61UI.java64程序三:哈弗曼编译器(JAVA)71一、需求分析71二、概要设计:71三、详细设计:72四、调试分析:75五、测试结果:79附1:基础版源代码80Code.java80HafNode.java81Line.java83MainF.java84MyWindow.java89Shape.java90Word.java91附2:完整版版源代码93Code.java93HafNode.java94LoadFile.java96readFile.java100数据结构课程设计报告0909103001物联网1002班李众力程序一:学生运动会成绩管理(JAVA)一、需求分析:本程序的主要用途是对学生运动会成绩进行输入、存储以及查询。本程序有以下几个功能模块:1. 学校信息输入模块:本模块功能为输入学校的名称以及编号,由于编号必须为唯一,且按照顺序,所以本程序只允许用户进行学校名称的输入,学校编号自动生成,当输入学校名称为空或者重复是会有错误提示。2. 项目信息输入模块:此模块用于添加运动会项目,项目分为男子大项、男子小项、女子大项以及女子小项四个类别,大项取前五名,小项取前三名。为了防止用户输入错误,项目类型为下拉列表供用户选择,项目编号为自动生成,当输入项目名称为空或项目名称重复是会有错误提示。3. 成绩输入模块:此模块功能为输入各学校在各项目上所取得的名次,同样为了防止用户输入错误,项目名称、学校名称以及取得名次都是从下拉列表中选择,当成绩输入重复时(一个学校在同一项目上取得不同名次、不同学校在一个项目上取得相同名次)都会提示错误信息。4. 成绩信息保存模块:此模块对于输入的信息进行保存,将数据从内存中爆出到硬盘的文件中,使数据持久保存。5. 成绩排序模块:此模块可以将学校按照学校编号、项目总分、男子项目总分、女子项目中分进行升序、降序的排序,方便对成绩有一个直观的了解。6. 成绩信息读取模块:此模块可以将以前保存在硬盘中的数据读取出来,并将数据提供给其他模块进行相应操作。7. 成绩查询模块:此模块可以按多种方式对输入的数据进行查询:可以按照学校编号查询该学校在哪些项目上获得了什么名次或者在某一个项目上获得了什么名次,也可以按照项目编号查询都有那些学校在该项目上取得了名次,如果项目编号或者学校编号输入错误会有错误提示信息。二、概要设计本程序有两个自定义的数据类,学校类(SchoolNode)和项目类(ItemNode),分别用来保存参加的学校的信息以及项目的信息。Data类存放着程序运行时的数据,以及保存打开的操作另外Tools类为对于数据操作的具体方法:本程序通过界面与用户进行交互,有界面类MainUI以及界面的配置类。三、详细设计1.输入学校信息模块功能框图如下:输入学校名称是否为空,是否重复自动编号添加对象至学校信息队列否是关键代码:public void actionPerformed(ActionEvent e) na = SclName.getText();if (!na.equals() & to.checkScl(na) int n = da.getSlist().size();jTextField1.setText(n + 1) + );to.addScl(na, n + 1);n = da.getSlist().size();jTextField1.setText(n + 1) + );SclName.setText();javax.swing.JOptionPane.showMessageDialog(null, 添加成功!);jComboBox_SclName.addItem(na); else javax.swing.JOptionPane.showMessageDialog(null, 名称重复或为空!);2.输入项目信息模块功能框图如下:项目名称及类别是否为空,是否重复自动编号添加对象至项目信息队列否是关键代码:public void actionPerformed(ActionEvent e) na = jTextField2.getText();if (to.checkItem(na) & (!na.equals() int n = da.getIlist().size();boolean isMan, isBig;jTextField3.setText( + n + 1);if (jComboBox_setItem.getSelectedItem().equals(男子大项) System.out.println(男子大项);isMan = true;isBig = true; else if (jComboBox_setItem.getSelectedItem().equals(男子小项) System.out.println(男子小项);isMan = true;isBig = false; else if (jComboBox_setItem.getSelectedItem().equals(女子大项) System.out.println(女子大项);isMan = false;isBig = true; else System.out.println(女子小项);isMan = false;isBig = false;to.addItem(na, n + 1, isBig, isMan);n = da.getIlist().size();jTextField3.setText(n + 1) + );jTextField2.setText();javax.swing.JOptionPane.showMessageDialog(null, 添加成功!);jComboBox_Item.addItem(na); else javax.swing.JOptionPane.showMessageDialog(null, 名称重复或为空!);3. 输入比赛成绩信息模块:学校的成绩信息输入数据是否错误添加成绩信息到相应学校添加学校信息到相应项目否是判断语句在鼠标监听器中,具体代码如下:public void actionPerformed(ActionEvent e) / 获得学校的名字String na = (String) jComboBox_SclName.getSelectedItem();/ 获得项目的名字String Iname = (String) jComboBox_Item.getSelectedItem();/ 获得取得名次String Score = (String) (jComboBox_score.getSelectedItem();/ System.out.println(学校名字 + na);/ 通过名字查找学校节点SchoolNode sc = to.findScByName(na);boolean ch1 = false;/ 查找学校输入过的项目名字ArrayList IN = to.findScByName(na).getItemName();/ 检查是否重复添加成绩for (int i = 0; i IN.size(); i+) if (String) jComboBox_Item.getSelectedItem().equals(IN.get(i) ch1 = true;/ 检查是否重复添加成绩if (ch1) javax.swing.JOptionPane.showMessageDialog(null, 已经添加过该校该项目的成绩!);System.out.println(成绩重复); else / 获得该项目节点ItemNode it = to.findItByName(Iname);/ 检查该项目的对应名次是否经被别人取得if (it.getSchools().containsKey(Score) javax.swing.JOptionPane.showMessageDialog(null,已经有别的学校取得该成绩!); else / 根据学校添加成绩信息sc.addScore(Iname, Score, to);javax.swing.JOptionPane.showMessageDialog(null,输入成绩成功);it.getSchools().put(Score, na);4. 排序模块:通过选择条件对数据进行排序,关键代码如下:public void actionPerformed(ActionEvent e) int a = jComboBox2.getSelectedIndex();jTable1Model.setPri(a);if (String) jComboBox1.getSelectedItem().equals(升序) System.out.println(升序);jTable1Model.OpForm();jTable1.updateUI();5. 查询模块,根据选择项目的不同进行查询,关键代码如下:public void actionPerformed(ActionEvent e) / 如果是查询学校if (ChooseWay.getSelectedIndex() = 0) / 获得学校对象try int ID = Integer.parseInt(jTextField4.getText();SchoolNode sc1 = to.findScByID(ID);if (sc1 = null) javax.swing.JOptionPane.showMessageDialog(null,学校编号输入错误); else ResTab rt = new ResTab(sc1,to);String ItID = jTextField5.getText();jTable2.setModel(rt);/ 如果不输项目编号则显示全部项目if (ItID.equals() rt.setAllData();jTable2.setModel(rt);jTable2.updateUI(); else try int ItNum = Integer.parseInt(ItID);/ 检查项目编号是否存在if (!sc1.getItemName().contains(to.findItByID(ItNum).getName() javax.swing.JOptionPane.showMessageDialog(null,无此项目); else rt.set1Data(to.findItByID(ItNum).getName(); jTable2.setModel(rt); jTable2.updateUI(); catch (Exception e3) / TODO: handle exceptione3.printStackTrace();javax.swing.JOptionPane.showMessageDialog(null,项目编号输入错误);jLabel10.setText(sc1.getName(); catch (Exception e2) / TODO: handle exceptione2.printStackTrace();System.out.println(编号输入错误 );javax.swing.JOptionPane.showMessageDialog(null,学校编号输入错误); else tryint ItID=Integer.parseInt(jTextField4.getText();/按项目进行查询ItemNode in=to.findItByID(ItID);if(in=null)javax.swing.JOptionPane.showMessageDialog(null,无此项目);elseResTab2 rt2=new ResTab2(in);jLabel11.setText(in.getName();jTable2.setModel(rt2);jTable2.updateUI();catch (Exception e3) e3.printStackTrace();javax.swing.JOptionPane.showMessageDialog(null,项目编号输入错误);jTextField4.setText();jTextField5.setText();四、调试分析:在程序编写中,由于用到了界面,所以参数传递十分频繁,为了减少出错机会,我将所有数据放在一个单独的对象中创建,在其他地方对其进行引用,取得了不错的效果。另外,由于用到界面上的JTable对象,在数据更新的时候并不能自动的更新数据,所以要在每次更新过后都对其进行一遍刷新,但是如果数据不在TableModel下,刷新是不会成功的,所以要在TableModel类下jiangData中的数据赋值进去才能做到更新。在一开始,我将学校信息与获奖情况组成为一个对象放在了一个定长数组中存储,但是当数据增多时,数组就不能满足要求了,所以将数组换成了一个可变长度的队列。另外,为了加快查询的效率,将学校信息与获奖情况以K-V键值对的形式放入了HashMap中进行储存,这样在查询的时候就可以根据K的值快速返回V,十分方便。五、用户手册:程序分为五个小界面:1. 学校信息输入界面:用户输入学校名称后点击确定,系统会自动检测输入是否有错误,并会在出错时给以提示。2. 项目信息输入界面:用户输入项目名称及其他信息后,系统将自动对名称进行检测,如果有错误就会进行错误提示。3. 成绩输入界面:为了减少用户的误操作,输入成绩界面大量采用下拉框让用户进行选择,在项目为大项的时候成绩自动变为一至五名,项目为小项时为前三名。当用户点击保存时,会在D盘的score.mdat文件中保存数据。4. 查看排名界面:用户可以选择排序方式对成绩进行排序,更直观的看到各个学校的成绩信息,当用户点击载入文件时,程序会从D盘中的score.mdat文件读取数据。5. 查询成绩模块:用户可以选择多种不同的查询方式查询学校或者项目的信息,如果有输入错误的情况,程序会自动弹出提示信息。附:程序源代码Data.javapackage 学生运动会成绩管理;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.ArrayList;/* * 数据类 * * author Micro * */public class Data / 存放学校的队列private ArrayList SclList;/ 存放项目的队列private ArrayList ItemList;public Data() SclList = new ArrayList();ItemList = new ArrayList();protected ArrayList getSlist() return SclList;protected ArrayList getIlist() return ItemList;/ 保存成文件的方法public void save() try FileOutputStream fos = new FileOutputStream(new File(D:/score.mdat);BufferedOutputStream bos = new BufferedOutputStream(fos);ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(SclList);oos.flush();oos.writeObject(ItemList);oos.flush();javax.swing.JOptionPane.showMessageDialog(null, 保存成功!); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();/ 从文件读取的方法/ SuppressWarnings(unchecked) /忽略下面的警告SuppressWarnings(unchecked)public void load() try FileInputStream fis = new FileInputStream(new File(D:/score.mdat);BufferedInputStream bis = new BufferedInputStream(fis);ObjectInputStream ois = new ObjectInputStream(bis);SclList = (ArrayList) ois.readObject();ItemList = (ArrayList) ois.readObject();javax.swing.JOptionPane.showMessageDialog(null, 文件载入成功!); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();ItemNode.javapackage 学生运动会成绩管理;import java.io.Serializable;import java.util.HashMap;/* * 运动项目类 * * author Micro * */public class ItemNode implements Serializable /* * */private static final long serialVersionUID = 1L;/ 属性private boolean isBig;/ 是否为大项目private boolean isMan;/ 是否为男子项目private int num = -1;/ 项目编号private String name = ;/ 项目名称/ 存储哪些学校获得成绩的队列private String Mingci;/ 存储每个学校该项目的成绩的图private HashMap schools = new HashMap();public ItemNode(String name, int num, boolean isBig, boolean isMan) = name;this.num = num;this.isMan = isMan;this.isBig = isBig;if (isBig) Mingci = new String 第一名, 第二名, 第三名, 第四名, 第五名 ; else Mingci = new String 第一名, 第二名, 第三名 ;/ GetSet方法public boolean isBig() return isBig;public boolean isMan() return isMan;public int getNum() return num;public String getName() return name;public String getMingci() return Mingci;public HashMap getSchools() return schools;MainUI.javapackage 学生运动会成绩管理;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.ArrayList;import javax.swing.ComboBoxModel;import javax.swing.DefaultComboBoxModel;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.WindowConstants;import javax.swing.table.DefaultTableModel;import javax.swing.table.TableModel;import javax.swing.SwingUtilities;/* * This code was edited or generated using CloudGardens Jigloo SWT/Swing GUI * Builder, which is free for non-commercial use. If Jigloo is being used * commercially (ie, by a corporation, company or business for any purpose * whatever) then you should purchase a license for each developer using Jigloo. * Please visit for details. Use of Jigloo implies * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR * ANY CORPORATE OR COMMERCIAL PURPOSE. */public class MainUI extends javax.swing.JFrame /* * */private static final long serialVersionUID = 1L;/ Set Look & Feeltry javax.swing.UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel); catch (Exception e) e.printStackTrace();Data da = new Data();private JLabel name;private JTextField SclName;private JButton Bu_SclAdd;private JButton jButton1;private JComboBox jComboBox_setItem;private JLabel chooseSex;private JTextField jTextField3;private JButton save;private JComboBox jComboBox_score;private JLabel jLabel4;private JButton jButton_add;private JLabel jLabel3;private JTextField jTextField2;private JLabel jLabel2;private JPanel addItem;private JComboBox jComboBox_Item;private JLabel chooseItem;private JLabel ChooseName;private JComboBox jComboBox_SclName;private JPanel getScore;private JPanel setScore;private JTabbedPane jTabbedPane1;private JPanel add;private JLabel addScl;private JTextField jTextField1;private JLabel SclID;private Tools to = new Tools(da);private JLabel jLabel10;private JLabel jLabel9;private JTextField jTextField5;private JLabel jLabel8;private JButton jButton4;private JLabel jLabel7;private JTable jTable2;private JScrollPane jScrollPane2;private JLabel jLabel6;private JTextField jTextField4;private JComboBox ChooseWay;private JLabel jLabel5;private JButton jButton3;private JButton jButton2;private JTable jTable1;private JScrollPane jScrollPane1;private JComboBox jComboBox2;private JComboBox jComboBox1;private JLabel jLabel1;private JPanel PaiMing;private MyTable jTable1Model;/ 查询表格显示的数据private String item2 = null;private ResTab rt;private TableModel jTable2Model2;private JLabel jLabel11;/* * Auto-generated main method to display this JFrame */public static void main(String args) SwingUtilities.invokeLater(new Runnable() public void run() MainUI inst = new MainUI();inst.setLocationRelativeTo(null);inst.setVisible(true););public MainUI() super();initGUI();private void initGUI() try this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);getContentPane().setLayout(null);this.setResizable(false);this.setTitle(u5b66u751fu8fd0u52a8u4f1au6210u7ee9u7ba1u7406u7cfbu7edf);jTabbedPane1 = new JTabbedPane();getContentPane().add(jTabbedPane1);jTabbedPane1.setBounds(12, 12, 358, 250);jTabbedPane1.setBackground(new java.awt.Color(192, 192, 192);add = new JPanel();jTabbedPane1.addTab(添加学校, null, add, null);add.setBounds(12, 12, 115, 252);add.setLayout(null);add.setBackground(new java.awt.Color(192, 192, 192);addScl = new JLabel();add.add(addScl);addScl.setText(u6dfbu52a0u5b66u6821);addScl.setBounds(139, 12, 63, 17);name = new JLabel();add.add(name);name.setText(u5b66u6821u540du5b57);name.setBounds(95, 41, 87, 17);name.setFont(new java.awt.Font(宋体, 0, 12);SclName = new JTextField();add.add(SclName);SclName.setBounds(95, 64, 87, 24);SclName.setFont(new java.awt.Font(宋体, 0, 12);SclID = new JLabel();add.add(SclID);SclID.setText(u5b66u6821u7f16u53f7);SclID.setBounds(95, 100, 87, 17);SclID.setFont(new java.awt.Font(宋体, 0, 12);jTextField1 = new JTextField();add.add(jTextField1);jTextField1.setBounds(95, 123, 87, 24);jTextField1.setFont(new java.awt.Font(宋体, 0, 12);jTextField1.setEditable(false);jTextField1.setText(1);Bu_SclAdd = new JButton();Bu_SclAdd.addActionListener(new ActionListener() String na;Overridepublic void actionPerformed(ActionEvent e) na = SclName.getText();if (!na.equals() & to.checkScl(na) int n = da.getSlist().size();jTextField1.setText(n + 1) + );to.addScl(na, n + 1);n = da.getSlist().size();jTextField1.setText(n + 1) + );SclName.setText();javax.swing.JOptionPane.showMessageDialog(null, 添加成功!);jComboBox_SclName.addItem(na); else javax.swing.JOptionPane.showMessageDialog(null, 名称重复或为空!););add.add(Bu_SclAdd);Bu_SclAdd.setText(u6dfbu52a0);Bu_SclAdd.setBounds(107, 159, 63, 24);Bu_SclAdd.setFont(new java.awt.Font(宋体, 0, 12);addItem = new JPanel();jTabbedPane1.addTab(添加项目, null, addItem, null);addItem.setBounds(139, 12, 137, 252);addItem.setLayout(null);addItem.setBackground(new java.awt.Color(192, 192, 192);jLabel2 = new JLabel();addItem.add(jLabel2);jLabel2.setText(u9879u76eeu540du5b57);jLabel2.setFont(new java.awt.Font(宋体, 0, 12);jLabel2.setBounds(69, 41, 87, 17);jTextField2 = new JTextField();addItem.add(jTextField2);jTextField2.setFont(new java.awt.Font(宋体, 0, 12);jTextField2.setBounds(69, 64, 87, 24);jLabel3 = new JLabel();addItem.add(jLabel3);jLabel3.setText(u9879u76eeu7f16u53f7);jLabel3.setFont(new java.awt.Font(宋体, 0, 12);jLabel3.setBounds(69, 100, 87,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论