java课程设计学生信息

2023-06-19

第一篇:java课程设计学生信息

JAVA课程设计员工信息管理系统

JAVA员工管理系统

实验报告

姓名:张旭冉

学号:10105010117

班级:信10-1

北方工业大学理学院信息与计算科学系

2013年 12月 17日

员工管理系统

一、实验目的

通过该课程设计,使同学们进一步理解概JAVA的基本概念、理论和方法,初步掌握JDK、Eclipse的调试和应用,以及程序中错误的解决方法,明确JAVA在实际程序设计中的应用。使课堂中学习到理论得到应用,练习文件形式在JAVA程序设计中的应用。

二、实验内容

A.设计题目:员工管理系统

设计要求:(1)完成员工信息的添加、删除、查询、修改功能

(2)使用用户界面操作

(3)使用文件形式完成

设计思路:首先设计界面进入面板,在面板中添加菜单选项,并将要实现的功能选项添加其中,然后对这些选项实施监听,实现其功能。通过文件类型知识的应用,实现对员工信息的管理。 B.概要设计

面板设计:首先设计一个容器,然后再容器中添加菜单,在菜单中添加选项,并在容器中加入面板,面板布局设置为CardLayout,最后将面板添加进容器。

功能实现:在录入、查询、修改和删除界面中使用JButton、JLabel、ButtonGroup、JRadioButton、JTextField、Choice为界面中加入相应的组件,并对其进行监听,同时附加了文件流的处理。 C.详细设计

1、定义员工类:

public class Employee implements java.io.Serializable { String number,name,discipling,grade,borth,sex; public Employee() { } public void setNumber(String number) { this.number=number; } public String getNumber() { return number;

} public void setName(String name) { this.name=name; } public String getName() { return name; } public void setDiscipling(String discipling) { this.discipling=discipling; } public String getDisciping() { return discipling; } public void setGrade(String grade) { this.grade=grade; } public String getGrade() { return grade; } public void setBorth(String borth) { this.borth=borth; } public String getBorth() { return borth; } public void setSex(String sex) { this.sex=sex; } public String getSex() { return sex; }}

2、主程序:

import java.awt.*;

import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.Hashtable; public class EmployeeManager extends JFrame implements ActionListener { EmployeeSituation 基本信息录入=null; ModifySituation 基本信息修改=null; Inquest 基本信息查询=null; Delete 基本信息删除=null; JMenuBar bar; JMenu fileMenu; JMenuItem 录入,修改,查询,删除; Container con=null; Hashtable 基本信息=null; File file=null; CardLayout card=null; JLabel label=null; JPanel pCenter; public EmployeeManager() { 录入=new JMenuItem("录入员工基本信息"); 修改=new JMenuItem("修改员工基本信息"); 查询=new JMenuItem("查询员工基本信息"); 删除=new JMenuItem("删除员工基本信息"); bar=new JMenuBar(); fileMenu=new JMenu("菜单选项"); fileMenu.add(录入); fileMenu.add(修改); fileMenu.add(查询); fileMenu.add(删除); bar.add(fileMenu); setJMenuBar(bar); label=new JLabel("欢迎进入员工信息管理系统",JLabel.CENTER); label.setFont(new Font("SansSerif",Font.BOLD+Font.ITALIC,25)); label.setForeground(Color.red); 基本信息=new Hashtable(); 录入.addActionListener(this); 修改.addActionListener(this); 查询.addActionListener(this); 删除.addActionListener(this); card=new CardLayout(); con=getContentPane(); pCenter=new JPanel();

pCenter.setLayout(card); pCenter.setBackground(Color.yellow); file=new File("基本信息.txt"); if(!file.exists()) {

try

{

FileOutputStream out=new FileOutputStream(file); ObjectOutputStream objectOut=new ObjectOutputStream(out);

objectOut.writeObject(基本信息);

objectOut.close();

out.close();

}

catch(IOException e)

{

} } 基本信息录入=new EmployeeSituation(file); 基本信息修改=new ModifySituation(file); 基本信息查询=new Inquest(this,file); 基本信息删除=new Delete(file); pCenter.add("欢迎语界面",label); pCenter.add("录入界面",基本信息录入); pCenter.add("修改界面",基本信息修改); pCenter.add("删除界面",基本信息删除); con.add(pCenter,BorderLayout.CENTER); con.validate(); addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) { System.exit(0); }}); setVisible(true); setBounds(100,50,420,380); validate(); } public void actionPerformed(ActionEvent e) { if(e.getSource()==录入) { card.show(pCenter,"录入界面"); } else if(e.getSource()==修改)

{ card.show(pCenter,"修改界面"); } else if(e.getSource()==查询) { 基本信息查询.setVisible(true); } else if(e.getSource()==删除) { card.show(pCenter,"删除界面"); } } public static void main(String args[]) { new EmployeeManager(); }}

3、实现员工信息的录入: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; public class EmployeeSituation extends JPanel implements ActionListener { Hashtable 基本信息表=null; JTextField 员工号,姓名,工资; Choice 部门; JRadioButton 男,女; Employee 员工=null; ButtonGroup group=null; JButton 录入,重置; FileInputStream inOne=null; ObjectInputStream inTwo=null; FileOutputStream outOne=null; ObjectOutputStream outTwo=null; File file=null; public EmployeeSituation(File file) {

this.file=file;

员工号=new JTextField(10);

姓名=new JTextField(10);

部门=new Choice(); 部门.add("请选择"); 部门.add("研发部"); 部门.add("销售部"); 部门.add("人事部"); 部门.add("安全部"); 工资=new JTextField(10); group=new ButtonGroup(); 男=new JRadioButton("男",true); 女=new JRadioButton("女",false); group.add(男); group.add(女); 录入=new JButton("录入"); 重置=new JButton("重置"); 录入.addActionListener(this); 重置.addActionListener(this); Box box1=Box.createHorizontalBox(); box1.add(new JLabel("员工号:",JLabel.CENTER)); box1.add(员工号); Box box2=Box.createHorizontalBox(); box2.add(new JLabel("姓名:",JLabel.CENTER)); box2.add(姓名); Box box3=Box.createHorizontalBox(); box3.add(new JLabel("性别:",JLabel.CENTER)); box3.add(男); box3.add(女); Box box4=Box.createHorizontalBox(); box4.add(new JLabel("部门:",JLabel.CENTER)); box4.add(部门); Box box6=Box.createHorizontalBox(); box6.add(new JLabel(" ",JLabel.CENTER)); Box box5=Box.createHorizontalBox(); box5.add(new JLabel("工资:",JLabel.CENTER)); box5.add(工资); Box boxH=Box.createVerticalBox(); boxH.add(box1); boxH.add(box2); boxH.add(box3); boxH.add(box5); boxH.add(box6); boxH.add(box4); boxH.add(Box.createVerticalGlue()); JPanel pCenter=new JPanel(); pCenter.add(boxH);

pCenter.setBackground(Color.yellow);

setLayout(new BorderLayout());

add(pCenter,BorderLayout.CENTER);

JPanel pSouth=new JPanel();

pSouth.add(录入);

pSouth.add(重置);

pSouth.setBackground(Color.yellow);

add(pSouth,BorderLayout.SOUTH);

validate();

} public void actionPerformed(ActionEvent e) { if(e.getSource()==录入) { String number=""; number=员工号.getText(); if(number.length()>0) { try { inOne=new FileInputStream(file); inTwo=new ObjectInputStream(inOne); 基本信息表=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); } catch(Exception ee) { } if(基本信息表.containsKey(number)) { String warning="该员工基本信息已存在,请到修改页面修改!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); } else { String m="基本信息将被录入!"; int ok=JOptionPane.showConfirmDialog(this,m,"确认",JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE); if(ok==JOptionPane.YES_OPTION) { String name=姓名.getText();

String discipling=部门.getSelectedItem(); String grade=工资.getText(); String sex=null; if(男.isSelected()) { sex=男.getText(); } else { sex=女.getText(); } 员工=new Employee(); 员工.setNumber(number); 员工.setName(name); 员工.setDiscipling(discipling); 员工.setGrade(grade); 员工.setSex(sex); try { outOne=new FileOutputStream(file); outTwo=new ObjectOutputStream(outOne);

基本信息表.put(number,员工); outTwo.writeObject(基本信息表); outTwo.close(); outOne.close();

员工号.setText(null);

姓名.setText(null);

工资.setText(null); } catch(Exception ee) { System.out.println(ee); }}}} else { String warning="必须要输入员工号!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); }}

if(e.getSource()==重置)

{

员工号.setText(null);

姓名.setText(null);

部门.remove(部门.getSelectedIndex());

工资.setText(null); }}}

4、实现员工信息的修改: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; public class ModifySituation extends JPanel implements ActionListener { Hashtable 基本信息表=null; JTextField 员工号,姓名,工资; Choice 部门; JRadioButton 男,女; ButtonGroup group=null; JButton 开始修改,录入修改,重置; FileInputStream inOne=null; ObjectInputStream inTwo=null; FileOutputStream outOne=null; ObjectOutputStream outTwo=null; File file=null; public ModifySituation(File file)

{ this.file=file; 员工号=new JTextField(10); 姓名=new JTextField(10); 部门=new Choice(); 部门.add("请选择"); 部门.add("研发部"); 部门.add("销售部"); 部门.add("人事部"); 部门.add("安全部"); 工资=new JTextField(10); group=new ButtonGroup(); 男=new JRadioButton("男",true); 女=new JRadioButton("女",false); group.add(男); group.add(女); 开始修改=new JButton("开始修改"); 录入修改=new JButton("录入修改"); 录入修改.setEnabled(false); 重置=new JButton("重置"); 员工号.addActionListener(this); 开始修改.addActionListener(this); 录入修改.addActionListener(this); 重置.addActionListener(this); Box box1=Box.createHorizontalBox(); box1.add(new JLabel("输入要修改信息的员工号:",JLabel.CENTER)); box1.add(员工号); box1.add(开始修改); Box box2=Box.createHorizontalBox(); box2.add(new JLabel("姓名:",JLabel.CENTER)); box2.add(姓名); Box box3=Box.createHorizontalBox(); box3.add(new JLabel("性别:",JLabel.CENTER)); box3.add(男); box3.add(女); Box box4=Box.createHorizontalBox(); box4.add(new JLabel("部门:",JLabel.CENTER)); box4.add(部门); Box box6=Box.createHorizontalBox(); box6.add(new JLabel(" ",JLabel.CENTER)); Box box5=Box.createHorizontalBox(); box5.add(new JLabel("工资:",JLabel.CENTER)); box5.add(工资); Box boxH=Box.createVerticalBox();

boxH.add(box1); boxH.add(box2); boxH.add(box3); boxH.add(box5); boxH.add(box6); boxH.add(box4); boxH.add(Box.createVerticalGlue()); JPanel pCenter=new JPanel(); pCenter.add(boxH); pCenter.setBackground(Color.yellow); setLayout(new BorderLayout()); add(pCenter,BorderLayout.CENTER); JPanel pSouth=new JPanel(); pSouth.add(录入修改); pSouth.add(重置); pSouth.setBackground(Color.yellow); add(pSouth,BorderLayout.SOUTH); validate();

} public void actionPerformed(ActionEvent e) {

if(e.getSource()==开始修改||e.getSource()==员工号)

{

String number="";

number=员工号.getText();

if(number.length()>0) { try { inOne=new FileInputStream(file); inTwo=new ObjectInputStream(inOne); 基本信息表=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); } catch(Exception ee) { } if(基本信息表.containsKey(number)) { 录入修改.setEnabled(true); Employee stu=(Employee)基本信息表.get(number); 姓名.setText(stu.getName()); 部门.getSelectedItem(); 工资.setText(stu.getGrade());

if(stu.getSex().equals("男")) { 男.setSelected(true); } else { 女.setSelected(true); } }

else

{

录入修改.setEnabled(false); String warning="该员工号不存在!"; JOptionPane.showMessageDialog(this,warning,"警告

",JOptionPane.WARNING_MESSAGE); 员工号.setText(null); 姓名.setText(null); 部门.remove(部门.getSelectedItem()); 工资.setText(null);

} }

else { 录入修改.setEnabled(false); String warning="必须要输入员工号!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); 员工号.setText(null); 姓名.setText(null); 部门.remove(部门.getSelectedItem()); 工资.setText(null); }

}

else if(e.getSource()==录入修改)

{

String number="";

number=员工号.getText();

if(number.length()>0)

{

try { inOne=new FileInputStream(file); inTwo=new ObjectInputStream(inOne); 基本信息表=(Hashtable)inTwo.readObject(); inOne.close();

inTwo.close(); } catch(Exception ee) { } if(基本信息表.containsKey(number)) { String question="该员工基本信息已存在,您想修改他(她)的基本信息吗?"; JOptionPane.showMessageDialog(this,question,"警告",JOptionPane.QUESTION_MESSAGE); String m="基本信息将被修改!"; int ok=JOptionPane.showConfirmDialog(this,m,"确认",JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE); if(ok==JOptionPane.YES_OPTION) { String name=姓名.getText(); String discipling=部门.getSelectedItem(); String grade=工资.getText(); String sex=null; if(男.isSelected()) { sex=男.getText(); } else { sex=女.getText(); } Employee 员工=new Employee();

员工.setNumber(number);

员工.setName(name);

员工.setDiscipling(discipling);

员工.setGrade(grade);

员工.setSex(sex); try { outOne=new FileOutputStream(file); outTwo=new ObjectOutputStream(outOne); 基本信息表.put(number,员工); outTwo.writeObject(基本信息表); outTwo.close(); outOne.close();

员工号.setText(null); 姓名.setText(null); 部门.remove(部门.getSelectedItem()); 工资.setText(null); } catch(Exception ee) { System.out.println(ee); } 录入修改.setEnabled(false); } else if(ok==JOptionPane.NO_OPTION) { 录入修改.setEnabled(true); } }

else

{ String warning="该员工号没有基本信息,不能修改!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); 录入修改.setEnabled(false);

}

}

else

{

String warning="必须要输入员工号!"; JOptionPane.showMessageDialog(this,warning,"警告

",JOptionPane.WARNING_MESSAGE);

录入修改.setEnabled(false);

}

}

if(e.getSource()==重置)

{

员工号.setText(null);

姓名.setText(null);

部门.remove(部门.getSelectedItem());

工资.setText(null); }}}

5、实现员工信息的查询: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; public class Inquest extends JDialog implements ActionListener { Hashtable 基本信息表=null; JTextField 员工号,姓名,部门,工资; JRadioButton 男,女; JButton 查询; ButtonGroup group=null; FileInputStream inOne=null; ObjectInputStream inTwo=null; File file=null; public Inquest(JFrame f,File file) {

super(f,"查询对话框",false);

this.file=file;

员工号=new JTextField(10);

查询=new JButton("查询");

员工号.addActionListener(this);

查询.addActionListener(this); 姓名=new JTextField(10); 姓名.setEditable(false); 部门=new JTextField(10); 部门.setEditable(false); 工资=new JTextField(10); 工资.setEditable(false); 男=new JRadioButton("男",false); 女=new JRadioButton("女",false); group=new ButtonGroup(); group.add(男); group.add(女); Box box1=Box.createHorizontalBox(); box1.add(new JLabel("输入要查询的员工号:",JLabel.CENTER)); box1.add(员工号); box1.add(查询); Box box2=Box.createHorizontalBox(); box2.add(new JLabel("姓名:",JLabel.CENTER)); box2.add(姓名); Box box3=Box.createHorizontalBox(); box3.add(new JLabel("性别:",JLabel.CENTER)); box3.add(男); box3.add(女); Box box4=Box.createHorizontalBox(); box4.add(new JLabel("部门:",JLabel.CENTER)); box4.add(部门); Box box5=Box.createHorizontalBox(); box5.add(new JLabel("工资:",JLabel.CENTER)); box5.add(工资); Box boxH=Box.createVerticalBox(); boxH.add(box1); boxH.add(box2); boxH.add(box3); boxH.add(box5); boxH.add(box4); boxH.add(Box.createVerticalGlue()); JPanel pCenter=new JPanel(); pCenter.add(boxH); pCenter.setBackground(Color.green); Container con=getContentPane(); con.add(pCenter,BorderLayout.CENTER); con.validate(); setVisible(false); setBounds(100,200,360,270);

addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { setVisible(false); } }); } public void actionPerformed(ActionEvent e) { 姓名.setText(null); 部门.setText(null); 工资.setText(null); if(e.getSource()==查询||e.getSource()==员工号) { String number=""; number=员工号.getText(); if(number.length()>0) { try { inOne=new FileInputStream(file); inTwo=new ObjectInputStream(inOne); 基本信息表=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); } catch(Exception ee) { } if(基本信息表.containsKey(number)) { Employee stu=(Employee)基本信息表.get(number); 姓名.setText(stu.getName()); 部门.setText(stu.getDisciping()); 工资.setText(stu.getGrade()); if(stu.getSex().equals("男")) { 男.setSelected(true); } else { 女.setSelected(true); } } else {

String warning="该员工号不存在!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); }} else { String warning="必须要输入员工号!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); }}}}

6、实现员工信息的删除: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; public class Delete extends JPanel implements ActionListener {

Hashtable 基本信息表=null;

JTextField 员工号,姓名,部门,工资;

JRadioButton 男,女;

JButton 删除;

ButtonGroup group=null;

FileInputStream inOne=null;

ObjectInputStream inTwo=null;

FileOutputStream outOne=null;

ObjectOutputStream outTwo=null;

File file=null;

public Delete(File file)

{

this.file=file;

员工号=new JTextField(10);

删除=new JButton("删除");

员工号.addActionListener(this);

删除.addActionListener(this);

姓名=new JTextField(10);

姓名.setEditable(false);

部门=new JTextField(10);

部门.setEditable(false);

工资=new JTextField(10);

工资.setEditable(false);

男=new JRadioButton("男",false);

女=new JRadioButton("女",false);

group=new ButtonGroup();

group.add(男);

group.add(女);

Box box1=Box.createHorizontalBox();

box1.add(new JLabel("输入要删除的学号:",JLabel.CENTER));

box1.add(员工号);

box1.add(删除);

Box box2=Box.createHorizontalBox();

box2.add(new JLabel("姓名:",JLabel.CENTER));

box2.add(姓名);

Box box3=Box.createHorizontalBox();

box3.add(new JLabel("性别:",JLabel.CENTER));

box3.add(男);

box3.add(女);

Box box4=Box.createHorizontalBox();

box4.add(new JLabel("部门:",JLabel.CENTER));

box4.add(部门);

Box box6=Box.createHorizontalBox();

box6.add(new JLabel(" ",JLabel.CENTER));

Box box5=Box.createHorizontalBox();

box5.add(new JLabel("工资:",JLabel.CENTER));

box5.add(工资);

Box boxH=Box.createVerticalBox();

boxH.add(box1);

boxH.add(box2);

boxH.add(box3);

boxH.add(box5);

boxH.add(box6);

boxH.add(box4);

boxH.add(Box.createVerticalGlue());

JPanel pCenter=new JPanel();

pCenter.add(boxH);

pCenter.setBackground(Color.yellow);

setLayout(new BorderLayout());

add(pCenter,BorderLayout.CENTER);

validate();

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==删除||e.getSource()==员工号)

{

String number="";

number=员工号.getText(); if(number.length()>0) { try { inOne=new FileInputStream(file); inTwo=new ObjectInputStream(inOne); 基本信息表=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); } catch(Exception ee) {

} if(基本信息表.containsKey(number)) {

Employee stu=(Employee)基本信息表.get(number);

姓名.setText(stu.getName());

部门.setText(stu.getDisciping());

工资.setText(stu.getGrade()); if(stu.getSex().equals("男")) { 男.setSelected(true); } else { 女.setSelected(true); } String m="确定要删除该员工号及全部信息吗?"; int ok=JOptionPane.showConfirmDialog(this,m,"确认

",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(ok==JOptionPane.YES_OPTION) { 基本信息表.remove(number); try { outOne=new FileOutputStream(file); outTwo=new ObjectOutputStream(outOne); outTwo.writeObject(基本信息表); outTwo.close(); outOne.close(); 员工号.setText(null); 姓名.setText(null); 部门.setText(null); 工资.setText(null); } catch(Exception ee) { System.out.println(ee); } } else if(ok==JOptionPane.NO_OPTION) { 员工号.setText(null); 姓名.setText(null); 部门.setText(null);

工资.setText(null); } } else {

String warning="该员工号不存在!"; JOptionPane.showMessageDialog(this,warning,"警告

",JOptionPane.WARNING_MESSAGE); } } else {

String warning="必须要输入员工号!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); }}}}

三、实验结果体会

本次JAVA课程设计我所编写的程序是员工信息管理系统,程序中实现了对员工信息的添加、查询、修改、删除的功能,我是应用文件的形式完成的,其中还应用到了图形用户界面。我设计的程序简单易懂,操作简单,且 适用于不同的单位使用,只需按照自己的需要将所要录入的信息名称做添加或修改就可以实现。通过这次JAVA的程序设计,使我对JAVA有了更加深入的了解,巩固了我对JAVA基础知识的掌握。

第二篇:JAVA课程设计--员工信息管理系统(徐如飞)

摘要

众所周知,当今社会是信息社会,因此,要想加强人事管理,单纯依靠以前的手工管理,不仅会浪费大量的人力,物力,财力,而且效率不高,而且很难达到预期的目的。所以人事管理信息系统能够提供准确的人员信息,以便领导者了解企业各个部门的人员构成,安排好工作计划,使企业变的更高效。

该系统能够对某单位的职工进行管理,主要功能如下是:

一、人事资料输入:输入员工信息,如姓名、身份证号、地址、电话、部门、工资、参加工作时间、专业、职务、备注等。

二、信息查询:可根据职工编号、职工名称、出生年月范围、工资范围、参加工作时间范围等条件查询。

三、登陆检测、用户管理、密码修改、权限设置。

四 、系统初始化:包括操作员信息初始化和职工信息初始化。

五、用户信息修改:拥有权限的操作员可以修改、冻结、删除普通用户。

关键词:人事信息、java、用户界面

目 录

一、设计目的 ................................................................................................................ 1

二、设计问题 ................................................................................................................ 1

三、概要设计 ................................................................................................................ 1

四、详细设计 ................................................................................................................ 2

1、定义员工类: ..................................................................................................................... 3

2、主程序: ............................................................................................................................. 4

3、实现员工信息的录入: ..................................................................................................... 7

4、实现员工信息的修改: ................................................................................................... 12

5、实现员工信息的查询: ................................................................................................... 19

6、实现员工信息的删除: ................................................................................................... 23

五、设计总结 .............................................................................................................. 27 参考文献 ...................................................................................................................... 28

信息专业java语言程序设计课程设计

人事管理系统

一、设计目的

通过该课程设计,使同学们进一步理解概JAVA的基本概念、理论和方法,初步掌握JDK、Eclipse的调试和应用,以及程序中错误的解决方法,明确JAVA在实际程序设计中的应用。使课堂中学习到理论得到应用,练习文件形式在JAVA程序设计中的应用。

二、设计问题

设计题目:员工管理系统

设计要求:(1)完成员工信息的添加、删除、查询、修改功能

(2)使用用户界面操作 (3)使用文件形式完成

设计思路:首先设计界面进入面板,在面板中添加菜单选项,并将要实现的功能选项添加其中,然后对这些选项实施监听,实现其功能。通过文件类型知识的应用,实现对员工信息的管理。

三、概要设计

1、从管理员角度讲,实现的功能是: (1) 对员工有关数据的输入功能 a) 实现对员工基本信息的输入 b) 实现对员工奖惩信息的输入 (2) 对员工有关数据的更新功能

由管理员进行档案收集,经过对档案资料的处理,更新员工档案管理系统中的奖惩相关信息(包括员工基本信息和员工业绩信息)。 (3) 对员工档案信息的查询功能

管理员可以通过自己的用户名和密码在因特网上对所有员工的信息(包括员工的档案信息、员工的业绩信息)进行查询。

(4) 对员工、部门和部门领导信息的简单管理 (5) 对用户密码的管理

2、从普通用户(员工)的角度讲,实现的功能是:

人事管理系统

(1)在单位员工可以通过自己的编号和密码在因特网上对自己的个人信息(包括个人的档案信息、业绩信息)进行查询。 (2) 对用户密码的管理

面板设计:首先设计一个容器,然后再容器中添加菜单,在菜单中添加选项,并在容器中加入面板,面板布局设置为CardLayout,最后将面板添加进容器。

功能实现:在录入、查询、修改和删除界面中使用JButton、JLabel、ButtonGroup、JRadioButton、JTextField、Choice为界面中加入相应的组件,并对其进行监听,同时附加了文件流的处理。

员工信息管理系统的系统运行流程图

四、详细设计

信息专业java语言程序设计课程设计

1、定义员工类:

public class Employee implements java.io.Serializable { String number,name,discipling,grade,borth,sex; public Employee() { } public void setNumber(String number) { this.number=number; } public String getNumber() { return number; } public void setName(String name) { this.name=name; } public String getName() { return name; } public void setDiscipling(String discipling) { this.discipling=discipling; } public String getDisciping() { return discipling; } public void setGrade(String grade) { this.grade=grade; } public String getGrade() { return grade; } public void setBorth(String borth) { this.borth=borth; } public String getBorth() 3

人事管理系统

{ return borth; } public void setSex(String sex) { this.sex=sex; } public String getSex() { return sex; }}

2、主程序:

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.Hashtable; public class EmployeeManager extends JFrame implements ActionListener { EmployeeSituation 基本信息录入=null; ModifySituation 基本信息修改=null; Inquest 基本信息查询=null; Delete 基本信息删除=null; JMenuBar bar; JMenu fileMenu; JMenuItem 录入,修改,查询,删除; Container con=null; Hashtable 基本信息=null; File file=null; CardLayout card=null; JLabel label=null; JPanel pCenter; public EmployeeManager() { 录入=new JMenuItem("录入员工基本信息"); 修改=new JMenuItem("修改员工基本信息"); 查询=new JMenuItem("查询员工基本信息"); 删除=new JMenuItem("删除员工基本信息"); bar=new JMenuBar(); fileMenu=new JMenu("菜单选项"); fileMenu.add(录入); fileMenu.add(修改); fileMenu.add(查询); 4

信息专业java语言程序设计课程设计

fileMenu.add(删除); bar.add(fileMenu); setJMenuBar(bar); label=new JLabel("欢迎进入员工信息管理系统",JLabel.CENTER); label.setFont(new Font("SansSerif",Font.BOLD+Font.ITALIC,25)); label.setForeground(Color.red); 基本信息=new Hashtable(); 录入.addActionListener(this); 修改.addActionListener(this); 查询.addActionListener(this); 删除.addActionListener(this); card=new CardLayout(); con=getContentPane(); pCenter=new JPanel(); pCenter.setLayout(card); pCenter.setBackground(Color.yellow); file=new File("基本信息.txt"); if(!file.exists()) {

try

{

FileOutputStream out=new FileOutputStream(file); ObjectOutputStream objectOut=new ObjectOutputStream(out);

objectOut.writeObject(基本信息);

objectOut.close();

out.close();

}

catch(IOException e)

{

} } 基本信息录入=new EmployeeSituation(file); 基本信息修改=new ModifySituation(file); 基本信息查询=new Inquest(this,file); 基本信息删除=new Delete(file); pCenter.add("欢迎语界面",label); pCenter.add("录入界面",基本信息录入); pCenter.add("修改界面",基本信息修改); pCenter.add("删除界面",基本信息删除); con.add(pCenter,BorderLayout.CENTER); con.validate(); addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) 5

人事管理系统

{ System.exit(0); }}); setVisible(true); setBounds(100,50,420,380); validate(); } public void actionPerformed(ActionEvent e) { if(e.getSource()==录入) { card.show(pCenter,"录入界面"); } else if(e.getSource()==修改) { card.show(pCenter,"修改界面"); } else if(e.getSource()==查询) { 基本信息查询.setVisible(true); } else if(e.getSource()==删除) { card.show(pCenter,"删除界面"); } } public static void main(String args[]) { new EmployeeManager(); }}

信息专业java语言程序设计课程设计

3、实现员工信息的录入: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; public class EmployeeSituation extends JPanel implements ActionListener { Hashtable 基本信息表=null; JTextField 员工号,姓名,工资; Choice 部门; JRadioButton 男,女; Employee 员工=null; ButtonGroup group=null; JButton 录入,重置; FileInputStream inOne=null; ObjectInputStream inTwo=null; FileOutputStream outOne=null; ObjectOutputStream outTwo=null; File file=null; public EmployeeSituation(File file) {

this.file=file;

员工号=new JTextField(10);

姓名=new JTextField(10);

部门=new Choice();

部门.add("请选择");

部门.add("研发部");

部门.add("销售部");

部门.add("人事部"); 7

人事管理系统

部门.add("安全部"); 工资=new JTextField(10); group=new ButtonGroup(); 男=new JRadioButton("男",true); 女=new JRadioButton("女",false); group.add(男); group.add(女); 录入=new JButton("录入"); 重置=new JButton("重置"); 录入.addActionListener(this); 重置.addActionListener(this); Box box1=Box.createHorizontalBox(); box1.add(new JLabel("员工号:",JLabel.CENTER)); box1.add(员工号); Box box2=Box.createHorizontalBox(); box2.add(new JLabel("姓名:",JLabel.CENTER)); box2.add(姓名); Box box3=Box.createHorizontalBox(); box3.add(new JLabel("性别:",JLabel.CENTER)); box3.add(男); box3.add(女); Box box4=Box.createHorizontalBox(); box4.add(new JLabel("部门:",JLabel.CENTER)); box4.add(部门); Box box6=Box.createHorizontalBox(); box6.add(new JLabel(" ",JLabel.CENTER)); Box box5=Box.createHorizontalBox(); box5.add(new JLabel("工资:",JLabel.CENTER)); box5.add(工资); Box boxH=Box.createVerticalBox(); boxH.add(box1); boxH.add(box2); boxH.add(box3); boxH.add(box5); boxH.add(box6); boxH.add(box4); boxH.add(Box.createVerticalGlue()); JPanel pCenter=new JPanel(); pCenter.add(boxH); pCenter.setBackground(Color.yellow); setLayout(new BorderLayout()); add(pCenter,BorderLayout.CENTER); JPanel pSouth=new JPanel(); pSouth.add(录入); 8

信息专业java语言程序设计课程设计

pSouth.add(重置);

pSouth.setBackground(Color.yellow);

add(pSouth,BorderLayout.SOUTH);

validate();

} public void actionPerformed(ActionEvent e) { if(e.getSource()==录入) { String number=""; number=员工号.getText(); if(number.length()>0) { try { inOne=new FileInputStream(file); inTwo=new ObjectInputStream(inOne); 基本信息表=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); } catch(Exception ee) { } if(基本信息表.containsKey(number)) { String warning="该员工基本信息已存在,请到修改页面修改!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); } else { String m="基本信息将被录入!"; int ok=JOptionPane.showConfirmDialog(this,m,"确认",JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE); if(ok==JOptionPane.YES_OPTION) { String name=姓名.getText(); String discipling=部门.getSelectedItem(); String grade=工资.getText(); String sex=null; if(男.isSelected()) { 9

人事管理系统

sex=男.getText(); } else { sex=女.getText(); } 员工=new Employee(); 员工.setNumber(number); 员工.setName(name); 员工.setDiscipling(discipling); 员工.setGrade(grade); 员工.setSex(sex); try { outOne=new FileOutputStream(file); outTwo=new ObjectOutputStream(outOne);

基本信息表.put(number,员工); outTwo.writeObject(基本信息表); outTwo.close(); outOne.close();

员工号.setText(null);

姓名.setText(null);

工资.setText(null); } catch(Exception ee) { System.out.println(ee); }}}} else { String warning="必须要输入员工号!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); }}

if(e.getSource()==重置)

{

员工号.setText(null);

姓名.setText(null);

部门.remove(部门.getSelectedIndex());

工资.setText(null);

}}} 10

信息专业java语言程序设计课程设计

人事管理系统

4、实现员工信息的修改: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; public class ModifySituation extends JPanel implements ActionListener { Hashtable 基本信息表=null; JTextField 员工号,姓名,工资; Choice 部门; JRadioButton 男,女; ButtonGroup group=null; JButton 开始修改,录入修改,重置; FileInputStream inOne=null; ObjectInputStream inTwo=null; FileOutputStream outOne=null; ObjectOutputStream outTwo=null; File file=null; public ModifySituation(File file) {

this.file=file; 12

信息专业java语言程序设计课程设计

员工号=new JTextField(10); 姓名=new JTextField(10); 部门=new Choice(); 部门.add("请选择"); 部门.add("研发部"); 部门.add("销售部"); 部门.add("人事部"); 部门.add("安全部"); 工资=new JTextField(10); group=new ButtonGroup(); 男=new JRadioButton("男",true); 女=new JRadioButton("女",false); group.add(男); group.add(女); 开始修改=new JButton("开始修改"); 录入修改=new JButton("录入修改"); 录入修改.setEnabled(false); 重置=new JButton("重置"); 员工号.addActionListener(this); 开始修改.addActionListener(this); 录入修改.addActionListener(this); 重置.addActionListener(this); Box box1=Box.createHorizontalBox(); box1.add(new JLabel("输入要修改信息的员工号:",JLabel.CENTER)); box1.add(员工号); box1.add(开始修改); Box box2=Box.createHorizontalBox(); box2.add(new JLabel("姓名:",JLabel.CENTER)); box2.add(姓名); Box box3=Box.createHorizontalBox(); box3.add(new JLabel("性别:",JLabel.CENTER)); box3.add(男); box3.add(女); Box box4=Box.createHorizontalBox(); box4.add(new JLabel("部门:",JLabel.CENTER)); box4.add(部门); Box box6=Box.createHorizontalBox(); box6.add(new JLabel(" ",JLabel.CENTER)); Box box5=Box.createHorizontalBox(); box5.add(new JLabel("工资:",JLabel.CENTER)); box5.add(工资); Box boxH=Box.createVerticalBox(); boxH.add(box1); boxH.add(box2); 13

人事管理系统

boxH.add(box3); boxH.add(box5); boxH.add(box6); boxH.add(box4); boxH.add(Box.createVerticalGlue()); JPanel pCenter=new JPanel(); pCenter.add(boxH); pCenter.setBackground(Color.yellow); setLayout(new BorderLayout()); add(pCenter,BorderLayout.CENTER); JPanel pSouth=new JPanel(); pSouth.add(录入修改); pSouth.add(重置); pSouth.setBackground(Color.yellow); add(pSouth,BorderLayout.SOUTH); validate();

} public void actionPerformed(ActionEvent e) {

if(e.getSource()==开始修改||e.getSource()==员工号)

{

String number="";

number=员工号.getText();

if(number.length()>0) { try { inOne=new FileInputStream(file); inTwo=new ObjectInputStream(inOne); 基本信息表=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); } catch(Exception ee) { } if(基本信息表.containsKey(number)) { 录入修改.setEnabled(true); Employee stu=(Employee)基本信息表.get(number); 姓名.setText(stu.getName()); 部门.getSelectedItem(); 工资.setText(stu.getGrade()); if(stu.getSex().equals("男")) { 14

信息专业java语言程序设计课程设计

男.setSelected(true); } else { 女.setSelected(true); } }

else

{

录入修改.setEnabled(false); String warning="该员工号不存在!"; JOptionPane.showMessageDialog(this,warning,"警告

",JOptionPane.WARNING_MESSAGE); 员工号.setText(null); 姓名.setText(null); 部门.remove(部门.getSelectedItem()); 工资.setText(null);

} }

else { 录入修改.setEnabled(false); String warning="必须要输入员工号!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); 员工号.setText(null); 姓名.setText(null); 部门.remove(部门.getSelectedItem()); 工资.setText(null); }

}

else if(e.getSource()==录入修改)

{

String number="";

number=员工号.getText();

if(number.length()>0)

{

try { inOne=new FileInputStream(file); inTwo=new ObjectInputStream(inOne); 基本信息表=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); } 15

人事管理系统

catch(Exception ee) { } if(基本信息表.containsKey(number)) { String question="该员工基本信息已存在,您想修改他(她)的基本信息吗?"; JOptionPane.showMessageDialog(this,question,"警告",JOptionPane.QUESTION_MESSAGE); String m="基本信息将被修改!"; int ok=JOptionPane.showConfirmDialog(this,m,"确认",JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE); if(ok==JOptionPane.YES_OPTION) { String name=姓名.getText(); String discipling=部门.getSelectedItem(); String grade=工资.getText(); String sex=null; if(男.isSelected()) { sex=男.getText(); } else { sex=女.getText(); } Employee 员工=new Employee();

员工.setNumber(number);

员工.setName(name);

员工.setDiscipling(discipling);

员工.setGrade(grade);

员工.setSex(sex); try { outOne=new FileOutputStream(file); outTwo=new ObjectOutputStream(outOne); 基本信息表.put(number,员工); outTwo.writeObject(基本信息表); outTwo.close(); outOne.close();

员工号.setText(null); 姓名.setText(null); 16

信息专业java语言程序设计课程设计

部门.remove(部门.getSelectedItem()); 工资.setText(null); } catch(Exception ee) { System.out.println(ee); } 录入修改.setEnabled(false); } else if(ok==JOptionPane.NO_OPTION) { 录入修改.setEnabled(true); } }

else

{ String warning="该员工号没有基本信息,不能修改!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); 录入修改.setEnabled(false);

}

}

else

{

String warning="必须要输入员工号!"; JOptionPane.showMessageDialog(this,warning,"警告

",JOptionPane.WARNING_MESSAGE);

录入修改.setEnabled(false);

}

}

if(e.getSource()==重置)

{

员工号.setText(null);

姓名.setText(null);

部门.remove(部门.getSelectedItem());

工资.setText(null); }}} 17

人事管理系统

信息专业java语言程序设计课程设计

5、实现员工信息的查询: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; public class Inquest extends JDialog implements ActionListener { Hashtable 基本信息表=null; JTextField 员工号,姓名,部门,工资; JRadioButton 男,女; JButton 查询; ButtonGroup group=null; FileInputStream inOne=null; ObjectInputStream inTwo=null; File file=null; public Inquest(JFrame f,File file) {

super(f,"查询对话框",false);

this.file=file;

员工号=new JTextField(10);

查询=new JButton("查询");

员工号.addActionListener(this); 19

人事管理系统

查询.addActionListener(this); 姓名=new JTextField(10); 姓名.setEditable(false); 部门=new JTextField(10); 部门.setEditable(false); 工资=new JTextField(10); 工资.setEditable(false); 男=new JRadioButton("男",false); 女=new JRadioButton("女",false); group=new ButtonGroup(); group.add(男); group.add(女); Box box1=Box.createHorizontalBox(); box1.add(new JLabel("输入要查询的员工号:",JLabel.CENTER)); box1.add(员工号); box1.add(查询); Box box2=Box.createHorizontalBox(); box2.add(new JLabel("姓名:",JLabel.CENTER)); box2.add(姓名); Box box3=Box.createHorizontalBox(); box3.add(new JLabel("性别:",JLabel.CENTER)); box3.add(男); box3.add(女); Box box4=Box.createHorizontalBox(); box4.add(new JLabel("部门:",JLabel.CENTER)); box4.add(部门); Box box5=Box.createHorizontalBox(); box5.add(new JLabel("工资:",JLabel.CENTER)); box5.add(工资); Box boxH=Box.createVerticalBox(); boxH.add(box1); boxH.add(box2); boxH.add(box3); boxH.add(box5); boxH.add(box4); boxH.add(Box.createVerticalGlue()); JPanel pCenter=new JPanel(); pCenter.add(boxH); pCenter.setBackground(Color.green); Container con=getContentPane(); con.add(pCenter,BorderLayout.CENTER); con.validate(); setVisible(false); setBounds(100,200,360,270); 20

信息专业java语言程序设计课程设计

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) { setVisible(false); } }); } public void actionPerformed(ActionEvent e) { 姓名.setText(null); 部门.setText(null); 工资.setText(null); if(e.getSource()==查询||e.getSource()==员工号) { String number=""; number=员工号.getText(); if(number.length()>0) { try { inOne=new FileInputStream(file); inTwo=new ObjectInputStream(inOne); 基本信息表=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); } catch(Exception ee) { } if(基本信息表.containsKey(number)) { Employee stu=(Employee)基本信息表.get(number); 姓名.setText(stu.getName()); 部门.setText(stu.getDisciping()); 工资.setText(stu.getGrade()); if(stu.getSex().equals("男")) { 男.setSelected(true); } else { 女.setSelected(true); } } else { 21

人事管理系统

String warning="该员工号不存在!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); }} else { String warning="必须要输入员工号!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); }}}}

22

信息专业java语言程序设计课程设计

6、实现员工信息的删除: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import java.util.*; public class Delete extends JPanel implements ActionListener {

Hashtable 基本信息表=null;

JTextField 员工号,姓名,部门,工资;

JRadioButton 男,女;

JButton 删除;

ButtonGroup group=null;

FileInputStream inOne=null;

ObjectInputStream inTwo=null;

FileOutputStream outOne=null;

ObjectOutputStream outTwo=null;

File file=null;

public Delete(File file)

{

this.file=file;

员工号=new JTextField(10);

删除=new JButton("删除");

员工号.addActionListener(this);

删除.addActionListener(this);

姓名=new JTextField(10);

姓名.setEditable(false);

部门=new JTextField(10);

部门.setEditable(false);

工资=new JTextField(10);

工资.setEditable(false);

男=new JRadioButton("男",false);

女=new JRadioButton("女",false);

group=new ButtonGroup();

group.add(男);

group.add(女);

Box box1=Box.createHorizontalBox();

box1.add(new JLabel("输入要删除的学号:",JLabel.CENTER));

box1.add(员工号);

box1.add(删除);

Box box2=Box.createHorizontalBox();

box2.add(new JLabel("姓名:",JLabel.CENTER));

box2.add(姓名);

Box box3=Box.createHorizontalBox(); 23

人事管理系统

box3.add(new JLabel("性别:",JLabel.CENTER));

box3.add(男);

box3.add(女);

Box box4=Box.createHorizontalBox();

box4.add(new JLabel("部门:",JLabel.CENTER));

box4.add(部门);

Box box6=Box.createHorizontalBox();

box6.add(new JLabel(" ",JLabel.CENTER));

Box box5=Box.createHorizontalBox();

box5.add(new JLabel("工资:",JLabel.CENTER));

box5.add(工资);

Box boxH=Box.createVerticalBox();

boxH.add(box1);

boxH.add(box2);

boxH.add(box3);

boxH.add(box5);

boxH.add(box6);

boxH.add(box4);

boxH.add(Box.createVerticalGlue());

JPanel pCenter=new JPanel();

pCenter.add(boxH);

pCenter.setBackground(Color.yellow);

setLayout(new BorderLayout());

add(pCenter,BorderLayout.CENTER);

validate();

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==删除||e.getSource()==员工号)

{

String number="";

number=员工号.getText(); if(number.length()>0) { try { inOne=new FileInputStream(file); inTwo=new ObjectInputStream(inOne); 基本信息表=(Hashtable)inTwo.readObject(); inOne.close(); inTwo.close(); } catch(Exception ee) { 24

信息专业java语言程序设计课程设计

} if(基本信息表.containsKey(number)) {

Employee stu=(Employee)基本信息表.get(number);

姓名.setText(stu.getName());

部门.setText(stu.getDisciping());

工资.setText(stu.getGrade()); if(stu.getSex().equals("男")) { 男.setSelected(true); } else { 女.setSelected(true); } String m="确定要删除该员工号及全部信息吗?"; int ok=JOptionPane.showConfirmDialog(this,m,"确认

",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(ok==JOptionPane.YES_OPTION) { 基本信息表.remove(number); try { outOne=new FileOutputStream(file); outTwo=new ObjectOutputStream(outOne); outTwo.writeObject(基本信息表); outTwo.close(); outOne.close(); 员工号.setText(null); 姓名.setText(null); 部门.setText(null); 工资.setText(null); } catch(Exception ee) { System.out.println(ee); } } else if(ok==JOptionPane.NO_OPTION) { 员工号.setText(null); 姓名.setText(null); 部门.setText(null); 25

人事管理系统

工资.setText(null); } } else {

String warning="该员工号不存在!"; JOptionPane.showMessageDialog(this,warning,"警告

",JOptionPane.WARNING_MESSAGE); } } else {

String warning="必须要输入员工号!"; JOptionPane.showMessageDialog(this,warning,"警告",JOptionPane.WARNING_MESSAGE); }}}} 26

信息专业java语言程序设计课程设计

五、设计总结

通过本次课程设计,我对软件开发设计分析过程有了深刻了解,不仅提高了编程思路,而且充分认识到分工合作在软件开发部署过程中的重要性。通过查询资料,参考丛书,受益匪浅。然后对这些遇到的问题进行处理,在解决问题的能力思路上活跃起来,对于以后开发高质量的软件有很大的提高。

本次JAVA课程设计我所选择的程题目是人事信息管理系统,程序中实现了对员工信息的添加、查询、修改、删除等一系列功能,在设计的过程中,我查阅了大量的资料,请教了一些老师,也获得了同学们的帮助,我设计的程序简单易懂,操作简单,适用于不同的单位使用,只需按照自己的需要将所要录入的信息名称做添加或修改就可以实现。通过这次JAVA的程序设计,使我对JAVA有了更加深入的了解,巩固了我对JAVA基础知识的掌握,并且能够更加熟练的应用JDK与Eclipse进行JAVA程序的编写。可以说理论联系实际,这使我的知识和能力都更上一层楼。

27

人事管理系统

参考文献

[1] 张桂元,贾燕枫.Eclipse开发入门与项目实践[M].北京:人民邮电出版社,2006 [2] 赵强.基于开源软件的J2EE企业级应用开发[M].北京:电子工业出版社,2005 [3] (美)John Hunt,Chris Loftus著.精通J2EE——Java企业级应用[M].周立斌,杨飞等译.北京:清华大学出版社. 2004 [4] 曹广鑫,王谢华,王建凤等.Struts数据库项目开发宝典[M].北京:电子工业出版社,2006 [5] 施伯乐、丁宝康. 数据库系统教程,高等教育出版社,2008年7月; [6] 邵丽萍.软件开发技术[M].北京:清华大学出版社,2005 [7] 谢星星,沈懿卓.UML基础与ROSE建模实用教程.北京:清华大学出版社,2009 [8] 邵丽萍.软件开发技术[M].北京:清华大学出版社,2005 [9] 郭兴成.PowerBuilder9.0实用教程[M].北京:清华大学出版社,2003

28

第三篇:Java课程设计

Java及J2EE课程设计题目

1、文件档案管理

文件档案管理系统主要对外来文件、下发文件和需要抄送的文件进行统一管理。划分为以下三个模块:收文管理、发文管理、抄送文件。

1. 收文文件增加、删除和修改,其字段有:收文编号、收件日期、文件标题、内容、发文单位、签发人

2. 发文文件增加、删除和修改,其字段有:发文编号、发件日期、文件标题、内容、收文单位、发件人

3. 抄送文件增加、删除和修改,其字段有:文件编号、发件日期、文件标题、内容、抄送单位、发件人

4. 查询条件是发文类型(收文、发文还是抄送)、文件标题、内容进行模糊查询。

应用工具:jsp+struts+jdbc

题目等级:A

2、运动员档案管理

运动员档案管理系统是对运动员的基本信息及参加比赛的情况进行管理维护。分为两个模块:运动员建档、比赛记录。

5. 运动员建档增加、删除和修改,其字段有:学生编号、姓名、出生日期、性别、民族、政治面貌、主修项目、联系方式

6. 对运动员的档案进行模糊查询,查询条件有:学生编号、学生姓名、性别、主修项目

7. 对比赛记录进行增加、删除、修改,其字段有:学生编号、姓名、时间、地点、比赛名称、参加项目、成绩、名次

8. 对比赛记录进行模糊查询,查询条件有:学生编号、学生姓名、比赛名称、参加项目、成绩 应用工具:jsp+struts+jdbc

题目等级:A

3、信息发布系统

信息发布系统是将最新信息、以最快的方式展示给用户。提供信息的维护管理功能。信息主要字段:发布时间、标题、内容、有效期开始时间、结束时间、发布人、是否阅读,完成对信息的发布、修改、删除操作,对信息进行模糊查询,其查询条件为标题、内容、发布人

应用工具:jsp+struts+jdbc

题目等级:A

4、通讯录管理

通讯录管理系统是方便用户管理自己的联系人,查找相应的联系方式。根据类别的不同对联系人进行分类管理。联系人信息有:姓名、性别 、职务、办公电话、手机、宅电 、电子邮件、通讯地址,完成对联系人的增加、删除、修改操作,提供对通讯录进行模糊查询,其条件为姓名、性别、职务、通讯地址字段

应用工具:jsp+struts+jdbc

题目等级:A

5、备忘录管理

备忘录管理系统是记录每天需要做的事情,起到一个提醒的作用。提供对这些信息的维护功能。备忘录中的内容主要有:日期、标题、内容这三个数据项,完成对其的增加、删除、修改操作,并可以按日期和标题、内容进行模糊查询

应用工具:jsp+struts+jdbc

题目等级:A

6、会议管理

会议管理系统是记录会议的基本信息,开完会后记录会议的讨论结果,进行备案,供以后查询使用。会议的基本信息:会议主题、会议类型 (周会、报告会、考务会……)、会议状态 (准备中、进行中、已结束三种)、会议时间、会议地址 、参与者 、会议主要内容,完成对其会议基本信息的增加、删除、修改操作,并要记录会议结果,会议记录结果主要记录的是会议讨论结果 、领导签字两个数据项。 应用工具:jsp+struts+jdbc

题目等级:A

7、日程管理

日程管理要记录每天的工作日程安排,主要内容包括:记录时间、名称、内容、地点、日程的开始

和结束时间,完成对基本信息的增加、删除、修改操作,并对日程的信息进行查询,查询条件有:名称、内容

应用工具:jsp+struts+jdbc

题目等级:A

8、日志管理

日志管理要记录每一天完成工作的情况,记录的信息有时间、上午工作记录、下午工作记录、记录人,完成对这些信息的维护,并对日期进行查询

应用工具:jsp+struts+jdbc

题目等级:A

9、用户管理

为了方便网站管理者对用户进行身份确认,或者是用户购买以后进行配送等服务,必须要有用户管理系统。用户管理系统应该具有用户注册、用户登录、用户修改和用户注销等功能。

1. 用户注册(1)

2. 用户登录(1)

3. 用户信息修改(1)

4. 用户注销(1)

应用工具:jsp+struts+jdbc

题目等级:A

10、数据查询

网上购物的一个优势是可以在商品中进行查询。

1. 生成查询记录集(1)

2. 分页显示功能(1)

3. 查看商品详细信息(1)

应用工具:jsp+struts+jdbc

题目等级:A

11、购物车

1.添加到购物车(1)

2.查看购物车(1)

3.购物车操作(1)

4.结帐(1)

应用工具:jsp+struts+jdbc

题目等级:A

12.新闻管理系统

题目:当今社会是一个信息社会,人们通过信息了解社会情况,进行社会活动,而新闻作为企事业单位宣

传自己,发布信息的主要形式,而在网络新闻的宣传是一个新兴事务,并且发展很快,已经成为一个重要信息发布媒体。所以现要求你设计一个用于新闻管理的信息系统,实现新闻的编辑与发布。

功能要求:本系统要求可以完成新闻在线发布,在线编辑,新闻分类,图片新管理等功能,技术上要求

使用JSP技术。

题目等级:B

13.在线考试系统

题目:考试作为学员学习效果的检验的主要方式一直被采用,而且考试形式也有许多方式,如笔试,面

试等,在线测试作为一种新的考试形式,得到越来越快的发展。所以现要求你设计一个在线考试系统,实现在线测试。

功能能要求:实现在线测度,在线评测,随机出题,试题编辑等功能,技术上采用JSP+JavaBean实现。题目等级:A

14.网上书店系统

题目:图书是人们了解知识,掌握知识的主要手段,传统的书店都店面形式,人们需要去书店才能够购

买,花费大量的时间也不一定得到一本满意的书籍。而网上书店就是利用网络为人们提供一个足不出户就可以买到一本理想的书籍的方式。所以要求你设计一个网络书店系统,实现书籍的在线销售,在线阅读。

功能要求:实现图书在线阅览,在线选购,新书推荐等功能,技术上要求采用JSP +JavaBean实现。 题目等级:A

15.学生学籍系统

题目:学生学籍管理是一个学校管理的重要组成部分,学生学籍管理也是最麻烦的一项管理,所以实现

学生学籍管理的信息化是一种简化管理的主要途径。现要求你设计一个实现学生学籍管理的系统,实现学生学籍管理的信息化。

功能要求:学生学籍注册,查询,更新,学生奖惩,学籍变动等功能。技术上要求采用JSP技术实现。 题目等级:B

16.留言本

题目:留言本是网站中用于与管理员进行信息交流的主要方式,是网站中的一个重要功能之一,现要求

你设计一个留言本,实现在线留言。

功能要求:留言发布,留言回复,留言置顶,留言验证等功能,技术采用JSP实现。

题目等级:C

17.在线投票问卷管理系统

题目:在线调查是调查了解对某件事情人们反映的主要方式,是目前比要流行的一种调查方式。现要求

实现一个在线投票调查系统,并可以进行结果统计,结果评测等功能。

功能要求:在线投票,在线答卷,在线统计,在线评测等功能,技术上采用JSP实现。

题目等级:C

18.员工档案管理系统

题目:员工档案是一个企业人才建设管理的重要资源,好的员工档案管理,对提高员工工作积极性,

提高企业效益的重要方式。所以要求设计一个员工档案管理系统,实现员工档案管理的信息化管理。

功能要求:员工档案注册,员工考核,员工调动等功能,技术上采用JSP+JavaBean实现。

题目等级:A

19.文本编辑器

题目:参照Windows记事本程序设计一个文本编程器,可以进行文本的格式编辑。

功能要求:要求有菜单,工具栏,文本编辑功能所需要的功能,技术上采用Java图形窗口技术实现。题目等级:C

20.计算器

题目:参照Windows计算器程序设计一个计算器,可以实现数学计算。

功能要求:要求功能上要与Windows计算器功能类似。

题目等级:C

21. HANNOI-塔

题目:运用多线程与图形接口技术设计一个HANNOI-塔演示程序,要求增加简易图形界面。功能要求:能够至少演示5级HANNOI-塔。

题目等级:B

22.挖雷游戏

题目:运用多线程程序与图形接口技术设计一个挖雷游戏程序,要求有简易的图形界面。

功能要求:功能上与Windows扫雷游戏类似。

题目等级:A

23.动态时钟

题目:运用Applet和多线程技术设计钟表程序,以实现当前时钟的显示。

功能要求:要求有表盘,可以调整时间。

题目等级:B

24.音乐播放器

题目:运用Applet技术设计一个可以播放音乐的播放器。

功能要求:可以播放音乐,可以添加乐曲等功能。

题目等级:C

25.实验室网上签到系统

题目:要求实现一个实验在线签到系统,学生可以在上实验时完成签到。

功能要求:课程设置,新建签到,学生签到列表,学生在线签到等功能。技术上采用JSP+JavaBean技

术实现。

题目等级:B

26.用户管理系统

题目:要求实现用户管理系统,可以实现用户注册,用户权限管理等功能。

功能要求:用户注册,用户极限分配,用户登录等功能。技术采用JSP技术实现。、

题目等级:C

27.图书馆管理系统

题目:要求实现图书馆的在线管理,学生可以在线借书,在线阅览等功能。

功能要求:在线图书管理。在线阅读,在线借书,还书等功能。技术上采用JSP+JavaBean实现。题目等级:B

28.求职招聘系统

题目:网上求职是当今人才流动,人才引进的重要途径,但对于成百万的简历的管理,职位的发布的

管理如果采用人工的方式会花费大量的人力、物力,但如果实现计算机网络化 管理就显得容易一些,所以现要求你设计一个求职招聘管理系统,实现人才交流的信息化处理。。

功能要求:职位发布,在线投简,在线应聘等功能。技术上采用JSP+JavaBean技术实现。题目等级:B

29.仓库管理系统

题目:仓库管理是一个非常烦琐,但是很重要的工作。如果能够实现仓库管理的计算机处理,对于提

高工作效率,降低工作成本,能够起到非常重要的作用,所以现要求实现一个仓库管理系统,实现仓库的信息化管理。

功能要求:实现货物的出库,入库,库存统计,库存预警等功能。技术上采用JSP+JavaBean技术实现。题目等级:B

30企业网站管理系统

题目:网站对企业宣传工作的开展提供一个非常的好的效果,产生很好的效益,这就说明网站已经成

为企业宣传自己的重要手段,网站管理的好坏直接影响这个网站的应用,所以现要求为某企业网站设计一个管理系统,实现网站的后台管理。

功能要求:产品发布,用户管理,信息发布等功能。技术上采用JSP+JavaBean技术实现。题目等级:A

31.流量统计系统

题目:网络流量是反映一个网站受关注度情况的重要表现,是网站调整版面信息的参考,访问流量高

的网站证明其效益非常好,是一个非常理想的网站,但流量低的网站就需要进行信息的更新和版面的修改,以提高网站的访问量,这样网站流量的时时统计能够给网站管理员提供一个网站运行情况信息参考,为其更好的管理网站提供帮助。现要求你设计一个网站访问流量的统计系统,时时统计网站访问流量。

功能要求:显示在线人数,当前访问者IP,历史访问人数,最高流量时间等功能。技术上采用JSP技

术实现。

题目等级:C

其它可选题目

以上题目的等级全都为C,所选工具应为jsp+jdbc,都要完全相应的增、删、改、查等功能

(1) 酒店管理信息系统

(2) 客房管理信息系统

(3) 药品管理信息系统

(4) 学籍管理信息系统

(5) 成绩管理信息系统

(6) 宿舍管理信息系统

(7) 图书管理信息系统

(8) 财务处理信息系统

(9) 固定资产核算信息系统

(10) 工资管理信息系统

(11) 材料管理信息系统

(12) 成本管理信息系统

(13) 房地产产权产籍管理信息系统的开发

(14) 住宅小区物业管理信息系统的开发

(15) 建设工程报价管理信息系统的开发

(16) 建设工程预算系统的开发

(17) 项目材料管理信息系统的开发

(18) 工程材料采购管理信息系统的开发

(19) 工程成本管理信息系统的开发

(20) 机械设备租赁管理系统的开发

(21) 工程图档管理信息系统的开发

(22) 企业人力资源管理信息系统的开发

(23) 企业职工培训管理信息系统的开发

(24) 企业职工医疗保险信息系统的开发

(25) 商品销售管理信息系统的开发

第四篇:Java课程设计

统一要求:

设计成品 (按难度自选一个到两个完成)

可分组或单独完成,每组最多两人,19周前交 1设计报告

(1)本程序的功能描述

(2)程序设计思想(数据结构和各功能的实现办法) (3)核心程序清单(应有必要说明) 2结果分析

(1)本程序的局限性及改进方法

(2)应用本程序的设计方法可以编写哪些类似的程序 一:小型通讯管理系统

通讯录管理系统含有:输入 显示 查找 删除

要求

1通讯录的每一条信息包括姓名,单位,电话!(可用数组或数据库) 2输入功能:可以一次完成若干条信息的输入.

3显示功能:完成全部通讯录信息的显示(一屏最多显示10条,超过十条应能够自动分屏显示) 4查找功能:完成按姓名查找通讯信息. 5删除功能:完成按姓名删除通讯信息.

6应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!

二:个人简历程序:(参照中华英才网http://的创建个人简历的选项)

通过文本框输入姓名,通过单选按钮设置性别,通过组合框选择籍贯(列出省、市),文化程度、出生日期、现居住地。以及填写教育经历、语言及方言等。

请按自行安排界面排版方式,注意美观性。

三:多小球运动程序:

请编写一个多小球运动的程序,要求可以设置每个小球的半径,初始书度,加速度。

当用户点击发射按钮时,程序按指定的弹出一个小球,当小球碰到边界线时,碰撞为完全碰撞。

要求每个小球为一个线程,不考虑小球之间的碰撞。

四:打字小程序。

从屏幕顶端随机落下不同的英文。如果在字符下落的过程中,用户正确输入对应字符,字符消失,加1分;到字符落到底端还没正确输入,扣一分。

给出最宗成绩。程序可设 重新开始,暂停,练习时间,字符出现的数量,速度等。

五:龟兔赛跑

龟兔在同一个圆赛跑,要求可以设置龟兔跑一周的时间,兔比龟快。龟兔同时其跑,当兔快龟一圈时,计算器加1,并显示在屏幕上。 六:学生成绩管理系统。

完成一个班学生的成绩管理。为完成程序功能,至少要有两个这样的功能模块:

l 输入成绩 2 查询成绩

因为查询模块中又分为:

l 按学生查询 2 按课程查询

所以为它们分别编写函数。因为上述这些操作中要输入某位学生和某门课程,所以再编写两个函数来输出数组中的学生信息和课程信息并请用户从中选择:

1显示学生信息从中进行选择 2显示课程信息从中进行选择

系统管理员需要管理系统所有用户的信息,包括用户编号、名称、备注等,可以对其添加删除修改和启用停用等操作。

还需要为系统用户划分角色和权限,保证不同身份的用户进入后可以有不同的权限,如某科目的老师可以录入本科目的成绩,学生只可以有查询权限等。

七:使用ServerSocket和Socket实现服务器支持多客户机通信。当有多个客户向服务器提出时请求时,服务器一端会分别为每个客户从一个包含多行文字的文本文件中读取一行文字,发送给每个客户,直到文件读完文件中所有行,服务器一端发出“bye”并停止运行,客户端也都停止运行。

八:编写一个图形用户界面的应用程序,在窗口中,有一个图片循环地从窗口的左面移动到窗口的右边。当鼠标点击窗口时,图片停止运动,再次点击图片恢复运动。 九:编写程序,在文件中输入若干个单词(每个单词可重复一次或多次)。编程实现统计每个单词重复次数,并对非重复的单词进行排序,将排序结果输出到文件中。 十. JDBC技术的应用

——校园卡信息/学生信息/教师信息/图书信息/宿舍信息/学生会/成绩/课程/教室管理/公务员招考系统的设计实现

以校园卡信息管理、学生信息管理、教师信息管理、图书信息管理、宿舍信息管理、学生会活动管理、成绩管理、教室管理等为例,使用JDBC-ODBC数据库接口,完成对后台数据库的插入、删除、修改、查询等操作。数据库系统可采用Sql Server、Access等,要根据完成的不同功能在数据库系统中定义有关的各种信息表:如在教师信息管理系统中要设计教师基本信息表、教师学习进修情况表、教师奖惩情况表、教师上课情况表等。其他几个子系统中数据表的设计由同学们根据实际的需求自主完成设计。 十一. 文本编辑器的设计与实现

设计一个类似于Windows记事本(Notepad)的Java程序。可以打开、新建、保存一个文本文件;对选中的文本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、查找、替换等);在文本中能够插入对象。 十二..计算器的设计与实现

设计一个能实现计算器功能的Java程序,可以进行加、减、乘、除(另外可适当加上阶乘、正弦、余弦和指数)运算。 十三. 图象浏览器的设计与实现

设计一个能实现图象浏览与编辑功能的Java程序,包括如下功能:

1)从已有的图象文件列表中选择某一个,即可显示该图象,并可做旋转等变换。 2)在画布区域上可以进行各种规则图形的绘制(如:线段、矩形、多边形、圆等),还可通过鼠标的拖动自由绘图。

3)可以连续播放所选文件夹下的所有图象。 十四: 媒体播放器的设计与实现

利用JMF(Java Media Framework)提供的API,实现图像浏览、音频播放、视频播放功能。

十五:局域网聊天程序的设计与实现

该程序实现局域网内的聊天功能,包括服务器端程序和客户端程序两部分。 客户端程序:可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的信息。 服务器端程序:可将消息发送到客户端和接受客户端发送来的信息 十六:基于Web的应用

——网上超市/网上书店/网上花店/网上物流/网上招聘/同学录/网上选课/网上考试系统的设计

应用JSP技术,设计一个类似电子商务、电子政务类的简单应用系统,可以在网上动态展示各类信息,并根据相应的业务流程进行必要的逻辑处理,系统信息可以进行后台维护。需要动态显示的信息要存放数据库中,数据库可以用Sql Server、Access;后台管理要提供对数据库中信息进行动态维护(包括添加、删除、修改)的页面。 十七:益智类小游戏的设计与实现

运用多线程和多媒体技术设计一个简单的益智类小游戏,游戏内容自行构思,不得直接利用网上现有游戏程序,要求有人机交互和界面动画,游戏过程中有声音效果,游戏成绩能记录、显示。

第五篇:Java课程设计报告

《Java课程实习》报告

题目 学号 学生姓名

音乐播放器

201011621335 201011621329 200811621320

朱剑峰 薛文博 刘彬

联系方式 13763009739 13726903356 15766274948 所在专业 所在班级 指导教师 成绩 教师签字

计算机科学与技术

1103 刘思凤

课程设计时间:2013年6月1日 至 2013年6月25日 评语:

广东海洋大学本科生课程设计报告

目 录

摘要 ...................................................................................................................................... 2 1 绪论 .............................................................................................................................. 3 1.1 1.2 1.3 1.4 2 2.1 2.2 3 3.1 3.2 课题背景 .............................................................................................................. 3 课程设计目的 ...................................................................................................... 3 课程设计实验环境.............................................................................................. 3 课程设计要求 ...................................................................................................... 4 程序界面布局设计.............................................................................................. 4 功能分析 .............................................................................................................. 4 系统功能结构图.................................................................................................. 5 模块功能设计 ...................................................................................................... 5 课程系统分析 .............................................................................................................. 4

系统设计与实现 .......................................................................................................... 5

3.2.1 “菜单栏”功能设计 ...................................................................................... 5 3.2.2 “动态音频播放进度显示”功能设计 .......................................................... 9 3.2.3 “歌曲搜索”功能实现 .................................................................................. 9 3.2.4 “歌曲播放/停止”功能实现 ...................................................................... 10 3.2.5 “列表展示”功能实现 ................................................................................ 11 4 系统优点与缺点 ........................................................................................................ 13 4.1 4.2 5 系统优点 ............................................................................................................... 13 系统缺点 ............................................................................................................... 13

系统开发过程 ............................................................................................................ 14 Myeclipse平台开发版本 ............................................................................................... 14 NetBeans开发平台版本 ................................................................................................ 15

6 设计总结 .................................................................................................................... 16

参考文献 ............................................................................................................................. 17 附

录 ................................................................................................................................. 18 关键代码 .......................................................................................................................... 18

1、 音乐解码函数(decodeMusic) ........................................................................ 18

2、 播放线程类(class PlayThread) ..................................................................... 20

3、 控制滚动条类(class RunSlider) ................................................................... 21

广东海洋大学本科生课程设计报告

摘要

JAVA是目前最流行的软件开发语言之一,称为网络上的“世界语”。JAVA适合开发基于多媒体、与平台无关、用面向对象的方法进行的基于Internet、Intranet、Extranet的Applet和应用程序。它具有简单高效、面向对象、不依赖于机器结构的特点,支持多线程、分布和并发机制。用JAVA开发的应用软件在可移植性、健壮性、安全性等方面大大优于已存在的其他编程语言。

JAVA是一门包含多种知识的学科,提供了丰富的类库,能最大限度地利用网络。JAVA可广泛用于面向对象的事件描述、处理面向对象的企业型的应用开发,还应用于Internet系统管理、Web页面设计、Internet可视化软件开发等方面。在学习的过程中我学到了许多以前没有学到的概念和新鲜资讯。运用这些知识可以完成老师交给我的课程设计任务。这次老师让我们自己拟订题目,给了我们很大的想象空间。我们自选了一个音乐播放器的课程设计题目。

本小组之所以选择做音乐播放器,全赖于本小组成员均对音乐有浓厚的兴趣,虽热衷于听音乐,但现在网上流传的音乐播放器还不能满足我们这些发烧友,像高清音乐等,这些高品质的作品若在现流行的播放器上运行,这只能做普通音乐文件“享用”。话说如此,因本小组开发能力有限,课程比较多,时间所限,以至暂且把音乐播放器开发到version0.9。主要功能还未能达到我们想要的境界。

小结一下,本小组的播放器所具备的功能有如下,添加音乐,删除音乐,搜索音乐,更换播放器皮肤,更改播放模式等。(详见2.2节)

本次设计的播放器在具备基本功能的基础上,还具有很强的扩展性,如歌词导入,可播放音乐类型的增加等等这些还未实现的地方我们都提供了许多接口,以便日后做修改或增加功能所用。

能够具备一个属于自己的播放器确实是一件非常高兴的事情,能够一边开发一边享受音乐的熏陶更是一件难得可贵的经历,愿此摘要能让读者感受得到笔者的兴奋与成功。

广东海洋大学本科生课程设计报告

音乐播放器

任务分工

系统设计与代码实现:朱剑峰 系统测试与维护:薛文博 需求与功能分析:刘彬 指导教师:刘思凤

1 绪论

1.1 课题背景

随着社会电子音乐文件的与日俱增,作为现在最流行的音乐文件*.mp3,*.wav文件的数量和规模也在比以往的任何时候要多,不论是电台DJ需要使用方便而有效地管理自己所使用的音乐文件,还是个人。在计算机日益普及的今天,若采用一套有效的音乐播放器。将自己所收藏的大量的音乐文件能随时随地的播放,这将方便于众用户听音乐的需求。通过使用本音乐播放器能为音乐爱好者带来意想不到的收获。

1.2 课程设计目的

《应用软件开发实习》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《应用软件开发实习》课程后,进行的一次全面的综合训练,程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

1.3 课程设计实验环境

程序运行在安装有windows操作系统的计算机上(台式机和笔记本),兼容windows 2K/XP/Vista/7/8 计算机硬件基本要求(仅供参考): 1. 2. 3. CPU:1G; 内存:512M. ; 显卡:256M显存;

文件播放:需要安装有声卡、要求安装有语音库。

JAVA程序设计语言及相应的集成开发环境,Myeclipse和Netbeans开发工具。

广东海洋大学本科生课程设计报告

1.4 课程设计要求

按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。

2 课程系统分析

2.1 程序界面布局设计

(1) 创建一个JFrame类,类名为MyPlayer类。

(2) 向对话框中添加JSlider控件、JList控件、JLabel控件、JJToggleButton控件、MenuBar菜单、JPanel容器、JToolBar容器以及JScrolPanel容器。

(3) 设置所添加的控件的属性,以及使用Java的界面风格,本设计共使用了6种Java 的不同界面风格。

2.2 功能分析

MyPlayer播放器主要对常用Windows音频格式的文件实现播放控制:  主界面功能

 菜单栏功能

 添加音乐;

 添加音乐文件(即导入一个或多个音乐文件至列表当中);  添加音乐目录(即导入文件夹中所有的音乐文件至列表当中);  控制;

 随机播放;  顺序播放;  单曲循环;

 设置歌词(有待开发);  更换皮肤;

 默认、深海世界、迷人金属、香韵咖啡、骇客帝国、浪漫满屋(均为java的界面风格)

 关于;

广东海洋大学本科生课程设计报告

 帮助(记录作者的相关信息以及软件开发的日期);

 动态音频播放进度显示;

 正在播放歌曲在顶层的显示

 播放歌曲的时间长度的显示以及正在播放时间的长度的显示  滚动条随播放状态改变显示  歌曲搜索功能;

 根据关键字搜索对应的歌曲;  歌曲播放/停止功能;

 上一首;(播放上一首歌曲并根据播放模式来选择)  下一首;(播放下一首歌曲并根据播放模式来选择)  播放/停止;(播放或停止歌曲)

 双击播放/双击停止;(在列表中对指定歌曲的操作)  列表展示功能;

 隐藏/显示列表;  移除单个音乐文件;  移除所有音乐文件;

 显示当前歌曲数目,播放模式,皮肤情况;

3 系统设计与实现

3.1 系统功能结构图

MyPlayer播放器的功能结构图如图3-1。

主界面功能菜单栏功能动态音频播放进度显示歌曲搜索功能歌曲播放/停止功能列表展示功能

图3-1 主界面功能图

3.2 模块功能设计 3.2.1 “菜单栏”功能设计

“菜单栏”功能结构图如图3-2-1。

广东海洋大学本科生课程设计报告

菜单栏功能添加音乐添加音乐文件添加音乐目录控制更换皮肤关于随机播放顺序播放单曲循环种皮肤图3-2-1菜单栏功能结构

6帮助 3.2.1.1 “添加音乐”功能实现

当点击“添加歌曲/文件夹”选择“添加本地歌曲”或“添加本地歌曲文件夹”的时候,这时候会触发这两个JMenuItem事件,调用了open()函数(opendir()函数),即将选中的音乐文件(或文件夹内所有音乐文件)的信息(名称与路径)放入nameVector 和 urlVector 当中。并修改listCount的值,显示歌曲的总数,最后将nameVector的所有内容放入list列表当中。如图3-2-1-1。

图3-2-1-1 (左上)选择操作,(左下)选择目录,(右下)列表显示

广东海洋大学本科生课程设计报告

3.2.1.2 “控制”功能实现

当选择“控制”功能的任意一项,则会使全局的chosenMethod整型变量的值根据选择的项赋对应的值,值域为1(随机播放)、2(顺序播放)、3(单曲循环)。因播放器的播放功能是一个while(true)的循环,每当播放歌曲时候,播放前会由函数chooseNextSong()根据chosenMethod的值来选择下一首歌是那一首。

如果值是1,则会由[0,listCount(列表歌曲总数)],获取随机数,再根据play()函数播放;如果值是2,则根据chosenIndex(当前播放歌曲号),直接加一,再根据play()函数播放;如果值是3,则chosenIndex(当前播放歌曲号)的值不再修改,再根据play()函数播放;如图3-2-1-2。

图3-2-1-2(左上)选择操作;(左下)随机播放后歌曲序号, (此处为后台显示),起始播放第1首歌,下一首歌为第295首歌曲; (右侧)为列表显示,指向对应歌曲,并且列表底下显示“随机播放”

3.2.1.3 “更换皮肤”功能实现

当选择“更换皮肤”功能的任意一项,则会触发对应事件的发生,调用函数loadskin1()或loadskin2()等等。此时会调用LookAndFeel的类,指定java包含的皮肤风格。Loadskin1()对应“默认”,loadskin2()对应“深海世界”等等。

选择皮肤后,主界面底下会显示对应的提示,如选择了“浪漫满屋”,地下就会显示 “皮肤:浪漫满屋”。如图3-2-1-3所示。

广东海洋大学本科生课程设计报告

图3-2-1-3

(左)选项显示,(右)换肤后主

界面情况。

3.2.1.4 “关于”功能实现

当选择“帮助”功能时,则弹出信息窗口,提示本软件的开发时间与开发人员相关信息。如图3-2-1-4所示。

图3-2-1-4

广东海洋大学本科生课程设计报告

3.2.2 “动态音频播放进度显示”功能设计

当歌曲播放正在播放时,则顶层“正在播放”处会显示歌曲的名称,当歌曲名称过长时候,超长部分会用省略号显示。

同时会根据歌曲的格式,得到歌曲的长度,并显示在歌曲的右侧的JLabel fileTime中;另外会另起一个线程RunSlider来控制计时功能,每1秒钟,滚动条左侧JLabel runningTime 会根据播放的时间来修改,滚动条PlayerSlider则会每秒钟根据runingTime的值来移动。如图3-2-2所示

图3-2-2

正在播放歌曲中的动态播放进度显示。

3.2.3 “歌曲搜索”功能实现

在搜索栏中输入关键字,在回车确认,系统就会调用seachMusic()来搜索与关键字吻合的歌曲,并将其放入临时的Vector tmpName当中,并显示其到list列表当中。如图3-2-3-1

在临时的列表中选择所需要播放的歌曲,双击播放,同时临时列表消失,回复原来的列表,即导入nameVector的数据到list当中。

当点击“X”按钮,若还在临时列表当中,则会清除临时列表并且恢复原来的列表;若已经恢复到临时列表,则搜索框中会返回提示“请输入搜索关键字...”。

图3-2-3-1(上)搜索“陈奕迅”的歌曲

(下)取消搜索后,搜索框的内容

广东海洋大学本科生课程设计报告

3.2.4 “歌曲播放/停止”功能实现

“歌曲播放/停止”功能结构图如图3-2-4。

歌曲播放/停止功能上一首下一首播放/停止双击播放/停止

图3-2-4 “歌曲播放/停止”功能结构

3.2.4.1 “上一首”“下一首”功能实现

当点击“上一首”的按钮时,会根据按钮事件,若chosenMethod(播放方式)的值为1(即随机播放)则系统会调用chooseNextSong()来随机选择歌曲号来播放下一首歌;若chosenMethod不为1,则会调用previousMusic(),对chosenIndex(当前播放歌曲号)减一,再调用play()函数播放上一首歌曲。

当点击“下一首”的按钮时,会根据按钮事件,若chosenMethod(播放方式)的值为1(即随机播放)则系统会调用chooseNextSong()来随机选择歌曲号来播放下一首歌;若chosenMethod不为1,则会调用nextMusic(),对chosenIndex(当前播放歌曲号)加1,再调用play()函数播放下一首歌曲。

3.2.4.2 “播放/停止”“双击播放/停止”功能实现

当点击“播放/停止”的按钮时候,若点击了“播放”,则会显示“停止”,同时会对列表正在选中的歌曲进行播放。同时会触发“动态音频播放进度显示”功能(3.2.2节所介绍),更改或增加播放信息;

若点击了“停止”,则会显示“播放”,同时会对当前播放的歌曲进行停止,同样会触发“动态音频播放进度显示”功能,清除对应的显示。如图3-2-4-2

广东海洋大学本科生课程设计报告

图3-2-4-2 (左)“播放”

(右)“停止”

3.2.5 “列表展示”功能实现

“列表展示”功能结构图如图3-2-5。

列表展示功能隐藏/显示列表移除音乐文件显示列表信息

图3-2-5 “列表展示”功能结构

3.2.5.1 “隐藏/显示列表”功能实现

当点击“显示列表/隐藏列表”的按钮时候,若点击了“显示列表”,则会显示“隐藏列表”,同时触发该事件,将原来的JFrame大框架的长度减少440个单位;

若点击了“隐藏列表”,则会显示“显示列表”,同时触发该事件,将原来的JFrame大框架的长度增加440个单位。

隐藏与显示列表这一功能虽然非常简单,但其重要性不可忽视,对于现在许多用户对音乐播放器的要求,就如自己的手机或着MP3一样,小巧、灵活、精致,至此这一项功能对于本小组一开始的设计就算是一个亮点。如图3-2-5-1所示。

广东海洋大学本科生课程设计报告

图3-2-5-1 (左)隐藏列表,(右)显示列表

3.2.5.2 “移除歌曲”功能文件实现

当用鼠标对着列表的音乐文件右键的时候,会弹出两个选项“移除歌曲/移除所有歌曲”。

当选择“移除歌曲”,则对所选择的音乐文件从列表中移除,即事件的触发调用了deleteSingle()函数,将对应的项从列表中移除,从nameVector中移除,从urlVector中移除;

同理当选择“移除所有歌曲”的时候,事件触发调用deleteAll()函数,将列表清空,将nameVector中的元素清除。

以上两者运行过后均会更新主界面底层“歌曲数目”,并且停止正在播放的歌曲。

图3-2-5-2右键列表后出现的选择项

广东海洋大学本科生课程设计报告

3.2.5.3 “显示列表信息”功能实现

由“添加音乐”功能(3.2.1.1节)调用的open()、opendir()函数,会将保存在nameVector中的内容导入列表当中。当双击列表中的歌曲的时候,如果歌曲正在播放则会停止,如果播放器没有进行播放,则双击后就进行播放。

当我们对着列表右键时,则会弹出列表,“移除歌曲/移除所有歌曲”,详见(3.2.5.2节)

4 系统优点与缺点

4.1 系统优点

1、windows界面风格可选择性,如上如所述,本音乐播放器具有6种皮肤可以更换。这大大满足了一个娱乐性的软件的需要,并且皮肤起名也符合用户的感官需求,像“深海世界”、“浪漫满屋”这些贴切而休闲的词汇更能吸引用户对播放器的使用。

2、播放方式可选择性,对于喜欢听音乐的用户,会根据自己的需要选择一定的顺序来听音乐。

3、列表隐藏的功能,符合大众播放器的功能,将播放器的界面弄得小巧而精致,即使隐藏了列表也不妨碍主要的播放器功能。

4、搜索功能,随着网络的发达,音乐歌曲随处下载,人均播放列表的歌曲数目数以百计,这时候搜索功能就显得十分重要。本播放器根据关键字可以对列表进行搜索,并可以显示搜索后的列表,同时临时的列表不会缩减播放器功能。

4.2 系统缺点

1、本系统主要代码均在一个文件当中MyPlayer.java当中,由于本小组是用netBeans7.2.1开发平台开发的,对开发平台尚未了解,故暂且没有将代码弄得更具有可读性。

2、本播放器还缺少暂停功能,在开发的最后版本(Music_Player0.9fornetBeans)还在改进当中。期待1.0版本对此功能的实现。

3、本播放器对音乐文件的选择,仅仅.mp3文件以及.wav文件可播放。针对decodeMusic()解码函数的改善,尚未能解决。

4、本播放器缺少歌词设置、显示功能。由于本小组对播放器的主界面还未想到一个满意的设计,所以歌词的实现暂且没有实现,待界面设计得灵活的时候,再添加歌词的功能。

广东海洋大学本科生课程设计报告

5 系统开发过程

Myeclipse平台开发版本

Version 0.1

1、菜单栏

*文件包括“打开文件”“打开目录”“退出程序” *控制 -随机播放-顺序播放-单曲循环-设置歌词 *更换皮肤

*帮助-关于

2、上一首、下一首、停止/播放、隐藏列表4个button

3、帮助显示-关于 消息框。

Version0.2

1、能打开文件,显示文件名称在下面的框内,多个文件显示在框内!

2、文件-退出程序

实现

3、能够显示列表与隐藏列表

Version0.3

1、双击能够播放

2、暂停 跟 继续

新增

1、双击整个title 换成为歌曲名称 问题

1、隐藏列表/显示列表 list 会缩水

2、filedialog 没有选择任何文件 直接关闭会出现错误!(verson0.4中已解决)

3、双击空的列表也可以开始(version 0.6for netBeans 已经解决)

Version0.31 (Version0.3崩溃)

Version0.4

1、上一首,下一首 能够在列表中显示

2、上一首 下一首播放功能 新增:

1、打开文件可以多选

2、打开目录 可以把整个目录里面的MP

3、wav文件导出在列表中。

问题:

1、双击 第一次 是开始,第二次 是停止(相对于同一首歌,相对于其它歌会停止,

也不播放)(version 0.6for netBeans 已经解决)

2、播放完一首歌后,不能自动往下播放。(version 0.5forneatBeans 已经解决)

歌曲不能删除(version 0.6for netBeans 已经解决) 修改:

1、“打开文件”“打开目录”分别换成 添加本地歌曲,添加本地歌曲文件夹

Version0.5

1、皮肤(简单的颜色或者图片)

2、更换皮肤-可供选择

修改:

1、项目已经转至netbeans平台上开发,并明明为Music_Player0.5forneatBeans 新增:

1、快捷键 添加歌曲/文件夹 添加了快捷键 和 关于 加了快捷键

广东海洋大学本科生课程设计报告

Version 0.6

1、播放模式

2、删除功能 问题:

1、播放列表可以拉出来,播放到名字比较长的歌曲,list会变宽!(已经完全解决,删

除正在播放的label)

2、播放按钮,双击 未解决(version0.6已经修复), 上一首

下一首 置顶时候,以及

随机播放时候 下一首上一首序号问题!(version0.6已经修复)。

3、菜单项 选中后,没有特别标志(解决办法

1、换另外一种菜单项

2、选中菜单项后 字

体等改变)

selected 方法!是改变修改字体的!(version0.7添加1中 解决)

4、删除 单首歌,序号不能改变(version0.7已经修复) NetBeans开发平台版本

Version0.7 for netbeans

1、添加底下: 歌曲数目、播放模式、皮肤的显示

2、歌曲名前面有序号

3、音乐时间,以及滚动条

4、”正在播放“显示的问题 Version0.8 for netbeans

1、添加搜索模块

2、添加搜索功能

3、搜索功能->搜索列表播放功能 Version0.9fornetbeans

1、修改播放器软件运行时的图标(将java的图标换成“射手”图标)

广东海洋大学本科生课程设计报告

6 设计总结

JAVA是目前最流行的软件开发语言之一,称为网络上的“世界语”。JAVA适合开发基于多媒体、与平台无关、用面向对象的方法进行的基于Internet、Intranet、Extranet的Applet和应用程序。它具有简单高效、面向对象、不依赖于机器结构的特点,支持多线程、分布和并发机制。用JAVA开发的应用软件在可移植性、健壮性、安全性等方面大大优于已存在的其他编程语言。

JAVA是一门包含多种知识的学科,提供了丰富的类库,能最大限度地利用网络。JAVA可广泛用于面向对象的事件描述、处理面向对象的企业型的应用开发,还应用于Internet系统管理、Web页面设计、Internet可视化软件开发等方面。在学习的过程中我学到了许多以前没有学到的概念和新鲜资讯。运用这些知识可以完成老师交给我的课程设计任务。这次老师让我们自己拟订题目,给了我们很大的想象空间。我们自选了一个音乐播放器的课程设计题目。

课程设计的过程虽然是艰难而辛苦的,但是我却从中感到了快乐与欣慰。快乐是因为我以前对于JAVA的知识可以说是孤陋寡闻,但是通过这次课程设计我使自己的知识更加的丰富了,加大了自己的知识面。让自己的实力扩大了。所以我感到非常的快乐。欣慰是因为看着自己做出的课程设计得到了老师的认同,取得了成功。这次课程设计的整体过程是充实而满足的。

广东海洋大学本科生课程设计报告

参考文献

[1] (美) 埃克尔(Eckel , B.)著,《Java编程思想》(第四版)陈昊鹏译. 一北京: 机械工业出版社,2007.6

[2] 刁成嘉 著,《UML系统建模与分析设计》,机械工业出版社,2007.6

[3] 朱喜福 著,《Java程序设计》(第2版),清华大学出版社, 2009.10

[4] 辛运帏 著,《Java语言程序设计》(第1版) ,人民邮电出版社, 2009.10

[5] 叶核亚 著,《Java程序设计实用教程》 (第3版) ,电子工业出版社,2010.2

[6] 耿祥义,张跃平 编著,《Java面向对象程序设计》.一北京:清华大学出版社,2010.1

广东海洋大学本科生课程设计报告

关键代码

1、音乐解码函数(decodeMusic)

解析:由于java applet播放声音,对应的格式只有一些原始格式如.au、.Wav 、.Midi、 .rfm格式,因此一下的解码函数就非常必要了,即将MP3等其它格式文件的音频等格式修改成系统能够实现的格式,并写入内存由此来实现播放功能。详细实现请阅读如下代码。

public void decodeMusic(AudioInputStream in) {// 开始解码 MP3

AudioFormat format = in.getFormat();

AudioFormat decodedFormat = new AudioFormat(

AudioFormat.Encoding.PCM_SIGNED,// 音频编码技术

format.getSampleRate(),// 每秒的样本数

16,// 每个样本中的位数

format.getChannels(),// 声道数(单声道 1 个,立体声 2 个,等等)

format.getChannels() * 2,// 每帧中的字节数

format.getSampleRate(), false);// 每秒的帧数和是否以 big-endian // 字节顺序存储单个样本中的数据

// 然后重新获取一个新的输入流,

AudioInputStream decodeIn = AudioSystem.getAudioInputStream(

decodedFormat, in); /**

* 源数据行是可以写入数据的数据行。它充当其混频器的源。 应用程序将音频字节写入源数据行,这样可处理字节缓冲并将它们传递给混频器。

* 混频器可以将这些样本与取自其他源的样本混合起来,然后将该混合物传递到输出端口之类的目标 (它可表示声卡上的音频输出设备)。

* */ SourceDataLine sdl = null; // 然后

DataLine.Info info = new DataLine.Info(SourceDataLine.class,

decodedFormat); try {

/**

* AudioSystem :类充当取样音频系统资源的入口点。 此类允许查询和访问安装在系统上的混频器

* **/

sdl = (SourceDataLine) AudioSystem.getLine(info);

sdl.open(decodedFormat);

} catch (Exception e) {

广东海洋大学本科生课程设计报告

e.printStackTrace(); } /** 指示该行是否支持特定类型的控件。 */ if (sdl.isControlSupported(FloatControl.Type.PAN)) {

// FloatControl 对象提供对浮点值范围的控制

FloatControl pan = (FloatControl) sdl

.getControl(FloatControl.Type.PAN);

if (curPosition == Position.RIGHT) {

pan.setValue(1.0f);

} else if (curPosition == Position.LEFT) {

pan.setValue(-1.0f);

} }

sdl.start(); int nBytesRead = 0; byte[] abData = new byte[EXTERANAL_BUFFER_SIZE]; try {

while (nBytesRead != -1) {

// 文件流的读写

nBytesRead = decodeIn.read(abData, 0, abData.length);

if (nBytesRead >= 0) {

sdl.write(abData, 0, nBytesRead);

}

} } catch (Exception e) {

e.printStackTrace();

return ; } finally {

// 通过在清空数据行的内部缓冲区之前继续数据 I/O,排空数据行中的列队数据。

sdl.drain();

sdl.close(); }

}

广东海洋大学本科生课程设计报告

2、播放线程类(class PlayThread)

解析:本播放器只使用一个线程来实现歌曲播放的功能,若用户要更换歌曲或者停止音乐,则对线程重建,即杀死原线程再建立新的线程,其实现的效果还是跟原来线程一样。同时此线程包含了许多子功能,如更改播放模式,对“上一首”“下一首”显示“正在播放”等功能均在此线程上实现。详细内容请阅读如下代码。

class PlayThread extends Thread{

public void run() {

while(true){

try {

setInitShowing();//初始化滚动条以及计时label 的值

isStop = true;//标志状态,说明是停止了

filename = (String) nameVector.get(chosenIndex).toString();//取chosenIndex对应的歌曲名称

filepath = (String) urlVector.get(chosenIndex).toString();////取chosenIndex对应的歌曲路径

System.out.println("我在播放:"+chosenIndex+" "+filename); //后台输出检测

/*设置“正在播放”的值,只输出前23个字符,以免超出长度,后面补...*/

String showName = null;

if(filename.length()>23){

showName = filename.substring(0, 23) + "..";

}else{

showName = filename;

}

showTileOfMusic.setText("正在播放:"+showName);

File file = new File(filepath);

setTitle(filename);

list.setSelectedValue(nameVector.get(chosenIndex), true);

listIndex = chosenIndex;

stporplySongButton.setText("停止");//修改 停止/播放button的状态值

AudioInputStream in = AudioSystem.getAudioInputStream(file);//去音乐文件

AudioFileFormat aff = AudioSystem.getAudioFileFormat(file);//去音乐文件的格式(为了得到歌曲长度)

musicLength = aff.getFrameLength()/aff.getFormat().getFrameRate();//取音乐文件的长度

System.out.println("我有那么长:"+musicLength);//后台显示,用于检测

setShowingTime(musicLength,fileTime);//显示总长度到fileTime label中

PlayerSlider.setMaximum((int)musicLength);//并且设置滚动条的最大值

isStop = false;//设置正在播放状态

hasStop = false;//设置正在播放状态

decodeMusic(in);//解码并播放

isStop = true;//播放完毕后设置回非播放状态

hasStop = true;

广东海洋大学本科生课程设计报告

chooseNextSong();//选择下一首歌返回while

} catch (Exception e) {

//e.printStackTrace();

System.out.println("刚才那首歌出错了!");//如果出现错误,则显示直接跳至下一首歌

nextMusic();

}

}

}

}

3、控制滚动条类(class RunSlider)

解析:此类虽然简短,但其能动态实现滚动条以及播放时间的运动。其中setShowingTime()方法提供的接口十分灵活,能够对不同空间进行时间的控制,本播放器只对播放时间的两个JLabel实现了此功能,这大大提高了本播放器的可扩展性。详细内容请阅读如下代码。

class RunSlider extends Thread{

public void run() {

try {

musicCouter = 0;

while(true){

Thread.sleep(1000);//每秒钟滚动一次

musicCouter++;

PlayerSlider.setValue((int)musicCouter);

setShowingTime(musicCouter, runingTime);//转换时间并显示回去runingTime label

}

} catch (InterruptedException ex) {

Logger.getLogger(MyPlayer.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

21

上一篇:msds化学品安全说明书下一篇:观音灵签1一108签解签