第一篇:人事管理系统Java课程设计报告
湖南科技大学计算机科学与工程学院
数据库课程设计报告
题目:人事管理管理系统
学 号:1005030221 姓 名:艾向兵 指导教师:张黎
完成时间:2012年1月4日 组员:苏勇,成佳裕,艾向兵
企业人事管理系统主要用于员工个人资料的录入,职务变动的记录和管理。使用人事管理系统,便于公司领导掌握人员的动向,及时调整人才的分配 1.1系统功能需求分析
人事管理系统主要有以下几项功能要求:.新员工资料的输入。
.自动分配员工编号,并且设置初始的用户密码:.人事变动的记载,包括岗位和部门的调整。.员工信息的查询和修改,包括员工个人信息和密码 1.2 系统功能模块设计
根据系统功能要求,可以将系统分解成几个模块来分别设计应用程序界面,如图,人事资源管理 包括:新员工档案输入,人事变更,员工档案查询
1.3 与其它系统的关系
本关系是公司管理信息系统的基础部分,为其他子系统,如考勤管理系统,工资管理系统和员工培训系统,提供员工的基本信息。同时为其他系统提供了员工登录的密码认证和权限分配。1.4数据库设计 数据库需求分析:
员工信息:员工号,密码,权限,姓名,性别,生日,专业,通讯地址,电话,Email,当前状态,其他。
人事变动:记录号,员工,变动,详细描述
部门设置:部门编号,名称
员工变动代号表
员工信息表
员工职位代码表
管理员登陆界面
信息查询,修改,删除主界面
查询单个员工的界面
总 结
这次的课程设计,是在学习了Java以后通过阅读课本及在图书馆借阅相关书籍同严景、孟珍三人共同完成的。在开发这个系统的过程中,碰到很多或大或小的问题,我们一起思考,一起努力,最后大部分都解决了,得到了现在的这个简单的人事管理系统。
在编制过程中,我们首先考虑到了界面的友好性,并在界面设计时不采用烦琐的细节,使界面简单、清晰,便于操作。一开始我们是想做个登录界面,实现用户的登录权限管理,但试了几次都没有达到预期的效果,最后不得不放弃。
通过这次课程设计,我知道了什么事情都不那么简单,只有努力去做了,你才会有收获,不管收获大小,付出的过程总是有的。有些事情只有亲身感受,你才知道它的价值有多大。同时在遇到困难的时候要沉着冷静,首先要冷静分析问题,对于很难解决的问题要学会请教他人,还可以与别人合作。
在这次数据库系统课程设计中,我主要进行的是界面的设计,以及进行进行整合操作,界面是我学习Java以来第一次做,以前不怎么用的JTabel等,现在都已经熟练的应用了,特别是这次的弹出窗口,我在做这个的时候可谓是一窍不通,因为把按钮JButton定义为了局部变量而在时间响应中而得不到另一个窗口的弹出。
还有就是在整个过程中的ID传递让我不知怎么办,一个简单的参数传递才得以搞定,基础知识还是不够牢靠。在得到修改表的数据库内容后未把值传给表格。
虽然这次课程设计付出了大量的时间,但是我知道我得到的收获远远不是这些时间可以衡量的,它将给我今后的学习和工作带来更多的收益。通过对此课题的开发,使我对用Java开发系统有了一个比较清楚的认识,体会到理论和实践的重要性。由于自己的分析设计和程序经验不足,该系统设计和实现过程中,还有许多没有完善的地方,比如没有设置登录界面,没有考虑到异常等多方面问题,这些都有待进一步完善和提高。对于文中出现的不足和系统中出现的问题敬请老师指导。
弹出登录程序的界面程序
public void actionPerformed(ActionEvent e){
if(e.getSource()==okButton){
String userID=text.getText();String passWD=String.valueOf(passwd.getPassword());if(userID.equals(“1”)&&passWD.equals(“1”)){
JOptionPane.showMessageDialog(null, “登陆成功!”, “消息”, JOptionPane.INFORMATION_MESSAGE);
new UserWindow2().userWindow2();//弹出第二个窗体
} else{
JOptionPane.showMessageDialog(null, “对不起您的用户名或密码错误!”, “错误”,JOptionPane.ERROR_MESSAGE);
text.setText(“");passwd.setText(”“);} } if(e.getSource()==deleButton){
text.setText(”“);passwd.setText(”“);}
} 进行信息查询,修改,删除的程序响应代码:
public void actionPerformed(ActionEvent e){
if(e.getSource()==button1){
new UserWindow3();
} if(e.getSource()==button2){
UserWindow7 u= new UserWindow7();u.userWindow7();} if(e.getSource()==button3){ UserWindow5 u=new UserWindow5();
u.userWindow5();}
public void actionPerformed(ActionEvent e){
if(e.getSource()==button){ int id= Integer.parseInt(text0.getText());//得到用户编号
String name=text1.getText();//得到用户姓名
String sex=text2.getText();//得到性别
String birthDay=text3.getText();//得到生日 String department=text4.getText();//得到所在部门 String job =text5.getText();//得到职位
String education=text6.getText();//得到教育程度 String spcialty=text7.getText();//专业技能 String address=text8.getText();//得到地址 String tel=text9.getText();//得到电话
String email=text10.getText();//得到电子邮箱 String state=text11.getText();//得到员工状态 String remark=text12.getText();//得到备注 Insert in=new Insert();//
boolean b;
b=in.insert(id,name,sex,birthDay,department,job,education,spcialty,address,tel,email,state,remark);if(b){ JOptionPane.showMessageDialog(null, ”数据保存成功!“, ”消息“, JOptionPane.INFORMATION_MESSAGE);}
} }
public void actionPerformed(ActionEvent e){
// TODO Auto-generated method stub
id = Integer.parseInt(text.getText());
if(e.getSource()==button){ UserWindow8 us = new UserWindow8();us.userWindow8(id);
}
Container container=this.getContentPane();container.setLayout(new BorderLayout());
JPanel pan =new JPanel();JLabel lab = new JLabel(”请输入工号:“);JTextField text=new JTextField(10);JButton button =new JButton(”查询“);JButton button1=new JButton(”删除“);pan.add(lab);pan.add(text);pan.add(button);pan.add(button1);container.add(pan);
String []titles={”员工编号“,”姓名“,”性别“,”生日“,”部门“,”职务“,”教育程度“,”专业技能“,”家庭住址“,”联系电话“,”电子邮箱"};
String [][]userInfo={};
JTable table =new JTable(userInfo,titles);table.isCellEditable(2,2);JScrollPane scrollpane
=new
JScrollPane(taboooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo......................le);
container.add(scrollpane,BorderLayout.SOUTH);
第二篇:JAVA课程设计报告ATM存取款系统
目 录
1课程设计题目描述和基本设计要求...............................................................2 系统需求分析..................................................................................................2.1 功能需求分析 ······················································································
2.2 其他需求分析 ······················································································
3系统设计...........................................................................................................3.1 总体设计 ······························································································
3.2 ATM柜员机界面设计 ·········································································
3.3 各功能模块设计 ··················································································
3.3.1 登陆页面模块设计 ································································
3.3.2 选择服务模块设计 ································································
3.3.3 取款模块设计 ·······································································
3.3.4 退卡模块设计 ······································································· 3.4 异常处理情况说明 ·································································· 系统实现与测试..............................................................................................5总程序...............................................................................................................6 课程设计总结..................................................................................................6.1 遇到的问题及解决办法 ······································································
6.2 心得体会 ······························································································
ATM柜员机 课程设计题目描述和基本设计要求
ATM柜员机主要是由各个Windows窗口组成,它是由登录页面、选择服务、取款、查询余额、修改密码和退卡等功能。它的各种按钮的事件和功能可以简单的模拟ATM柜员机的要求。系统需求分析 2.1 功能需求分析
主要功能如下所述:
要求使用图形用户界面。当输入给定的卡号和密码(初始卡号为000000和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
查询余额:初始余额为50000元
ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
ATM存款:不能出现负存款。
修改密码:只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
2.2 其他需求分析
(1)性能描述
实时性好、灵活性强、易于不同年龄阶段的人操作。(2)设计约束
开发工具:JCrator ProV3.5.0 运行环境:Windows 2000以上 能实现用户所定义的各项需求。(3)界面要求
以Windows窗口形式显示,标题栏为ATM柜员机名称,右上角有最小化按钮、最大化按钮、关闭按钮,不同的窗口中有不同的按钮和选择菜单。系统设计 3.1 总体设计
我所设计的ATM柜员机主要是由登录页面模块还由选择服务模块组成,其中选择服务模块又由取款模块、查询余额模块、修改密码模块、退卡模块组成。其功能结构图如下所示:
图1
ATM功能结构示意图
3.2 ATM柜员机界面设计
一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。界面主要分为窗体、菜单、按钮和文本输入框几个部分,分别执行相应的操作。
(1)窗体的设计
窗体整个框架使用Frame类构造,Frame有自己的外边框和自己的标题,创建Frame时可以指定其窗口标题,我创建的窗口标题是各个不同功能的模块的名字,比如说查询余额,还有取款等。相应源代码为:WindowBox(String s,Account act){super(“ATM柜员机”);}、Selection(String s,Account act){ } super(s);向Frame窗口中添加组件使用add()。例如:button1 = new Button(“存款”);
p1.add(button1);this.add(p1);每个Frame在其右上角都有三个控制图标,分别代表将窗口最小化、窗口最大化和关闭的操作,其中最小化和最大化操作Frame可自动完成,而关闭窗口操作实现需要书写有关的代码,在我的程序中我采用的是对WINDOWS_CLOSING事件做出响应,调用dispose()方法关闭窗口。Frame也可以引发WindowsEvent类代表的窗口事件。相应源代码为:
addWindowListener(new WindowAdapter()//窗口侦听器,以从此窗口接收窗口事件 {public void windowClosing(WindowEvent e)//处理窗口关闭事件
{ System.exit(0);} });}(2)窗体的主要结构的设计
我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按钮的监听事件。所以整个设计就趋向简单化了。
为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了动作事件的监听接口ActionListener的监听者,然后为监听者定义actionPerformed(ActionEvent e)方法,在这个方法中调用e.getSource()或e.getActionCommand()来判断用户点击的菜单子项,并完成这个菜单子项定义的操作。
3.3 各功能模块设计 3.3.1 登陆页面模块设计
与ATM柜员机打交道比较多的,也是大家对安全比较关心的问题:密码。所以第一个界面就是要输入密码和卡号才能继续服务。
我定义了文本框累的对象tf1,tf2。抓药是用于输入单行的文本;文本区调用public String getText()方法,获取用户想要的字符串。用来判断输入的密码和卡号是否正确,如果不正确的话,则弹出密码或卡号错误的警告框,并用dispose()关掉窗口。
3.3.2 选择服务模块设计
在选择服务模块中,有各种ATM的服务功能,只要用户在该界面中选择按钮,它就会弹出各个相应的界面。每一个按钮都有监听器,在选择了按钮后,java.awt.event中的ActionEvent类创建一个事件对象,并将它传递给方法public void actionPerformed(ActionEvent e)中的参数e,监视器就会知道所发生的事件,对此事件进行处理。
3.3.3 取款模块设计
在取款模块中,和其他的界面也是同样的结构。也是有一个文本框和一个按钮还有标签组成的。用户在文本框中输入他想取的数额,但是必须是100的倍数,而且每一次最多只能取5000块。当然了取款的时候也不能超过卡里的余额,再就是卡里的余额不可以为负,否则就会弹出报错的窗口。3.3.4 退卡模块设计
在退卡模块设计中,这个方法就更加的简单了,它只是用了if(e.getSource()==button4){//退出
} System.exit(0);dispose();这个方法就可以实现了,这里就不再多说了。
3.4 异常处理情况说明
(1)打开、保存文件时的异常处理 需要处理的异常:IOException(2)数据库访问时的异常处理 需要处理的异常:SQLException(3)加载类时的异常处理
需要处理的异常:ClassNotFindException,当应用程序试图使用Class类中的forName方法通过字符串名加载类时,但是没有找到具有指定名称的类的定义。
(4)加载URL时的异常
需要处理的异常:MalformedURLException,抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串。系统实现与测试
(1)编译运行程序后,将会看到如下的界面,如图2所示。如果输入的密码或卡号不正确的话就会报右下图的错误。
图2 主界面—登陆页面
(2)选择服务界面效果
当输入的密码和卡号正确,单击确定后就会进入到选择服务的界面,如图3所示。然后就可以选择所需要的服务了。
图3 选择服务界面
(3)取款界面,如图4所示。
图4 取款界面
(4)查询余额界面,如图7所示。
图7 查询余额界面
图8 存款界面
图9 转账界面
经过测试,所有的功能基本上都实现了,而且运行正常。.总程序
package ZDC;//主菜单
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;import java.awt.event.*;class Panel1 extends JPanel{ JLabel label1,label2;
Panel1(){
setLayout(new GridLayout(4,1));
label1=new JLabel(“
”+“银行存取款系统”);label2=new JLabel(“
”+“欢迎你成为本行用户,你可以选择中文或英文方式”);
add(new JLabel());add(label1);add(label2);add(new JLabel());
} } class Panel2 extends JPanel{
JButton button1,button2;
Panel2(){
setLayout(new GridLayout(3,6));
button1=new JButton(“中文”);button2=new JButton(“英文”);
add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());
add(new JLabel());add(new JLabel());add(button1);add(new JLabel());add(new JLabel());
add(button2);add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());
add(new JLabel());add(new JLabel());add(new JLabel());
} } class Client extends JFrame implements ActionListener{
Panel1 panel1;Panel2 panel2;JFrame frame;
Client(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new GridLayout(2,1));
panel1=new Panel1();panel2=new Panel2();
con.add(panel1);con.add(panel2);
panel2.button1.addActionListener(this);
panel2.button2.addActionListener(this);
this.setVisible(true);this.pack();
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()==“中文”){
this.setVisible(false);
new Client00(“输入密码”);
}
else if(e.getActionCommand()==“英文”){String inputValue = JOptionPane.showInputDialog(“Please input a value”);}
} } public class menu{
public static void main(String []args){
new Client(“用户取款系统”);
}} package ZDC;
// 输入密码界面
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;import java.awt.event.*;class Panel01 extends JPanel{
JLabel label1,label2,label3,label4;JPasswordField textA;JTextField textC;
static JTextField textB;char t[]=new char[4];
Panel01(){
setLayout(new GridLayout(4,4));
for(int i=0;i<4;i++){t[i]=(char)(Math.random()*26+'a');}
String mm=new String(t);
label2=new JLabel(“请输入卡号:”);label1=new JLabel(“请输入密码:”);
label3=new
JLabel();label4=new
JLabel(“
请
输
入
验
证”);label3.setBackground(Color.white);
码
:
label3.setForeground(Color.red);
textC=new JTextField(10);textC.setForeground(Color.blue);
label3.setText(mm);
textA=new JPasswordField(6);textA.setEchoChar('*');textB=new JTextField(“");
for(int i=0;i<5;i++){add(new JLabel());}
add(label2);add(textB);add(new JLabel());add(new JLabel());
add(label1);add(textA);add(new JLabel());add(new JLabel());
add(label4);add(textC);add(label3);
} } class Panel02 extends JPanel{ JButton button1,button2;
Panel02(){
setLayout(new GridLayout(3,6));
button1=new JButton(”确定“);button2=new JButton(”取消“);
for(int i=0;i<7;i++){add(new
JLabel());}add(button1);add(new JLabel());
add(button2);for(int i=0;i<6;i++){add(new JLabel());}
} } class Client00 extends JFrame implements ActionListener{
Panel01 panel1;Panel02 panel2;JFrame frame;int i=0,j=0;
Client00(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new GridLayout(2,1));
panel1=new Panel01();panel2=new Panel02();
con.add(panel1);con.add(panel2);
JLabel());add(new
panel2.button1.addActionListener(this);
panel2.button2.addActionListener(this);
this.setVisible(true);this.pack();
}
public void actionPerformed(ActionEvent e){
char[] passwords=panel1.textA.getPassword();String password=new String(”000000“);
//设置账号123456789的初始密码为112626,每输入一次都有提示,在连续输入三次不正确后系统自动退出。
”);}
if(e.getActionCommand().equals(“确定”))
if(panel1.textC.getText().equals(panel1.label3.getText())){
heshi();
}
else{JOptionPane.showMessageDialog(frame,“你输入的验证码有误,请重新输入。
else if(e.getActionCommand()==”取消“){this.setVisible(false);new Client08(”“);}
}
public void heshi(){
if(panel1.textA.getText().equals(”“)||panel1.textB.getText().equals(”“)){JOptionPane.showMessageDialog(frame,”
请输入账号、密码!“);return;} try{ Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//连接数据库 Statement sql=con.createStatement();
String ql=panel1.textB.getText();
ResultSet rs=sql.executeQuery(”select cnima from card where cno=“+ql+”“);
if(rs.next()){
String qerycmima=panel1.textA.getText();
String s=rs.getString(1);
if(qerycmima.equals(s)){
JOptionPane.showMessageDialog(frame,”
连接成功!“);
this.setVisible(false);new Client01(”用户取款系统“);
}else{ if(i!=2){i++;j=3-i;
JOptionPane.showMessageDialog(frame,”密码有误!你还有“+j+”次机会,请你再仔细想想.“);
panel1.textA.setText(”“);}
else {JOptionPane.showMessageDialog(frame,”对不起,你输入的密码次数达三次,下次再见。“);System.exit(0);}
}
con.close();frame.repaint();
}
else{JOptionPane.showMessageDialog(null,”
该用户不存在,重新输入!“,”警告!“, JOptionPane.YES_NO_OPTION);
panel1.textA.setText(”“);panel1.textB.setText(”“);panel1.textC.setText(”“);return;}
}catch(SQLException g){ System.out.println(”E Code“+g.getErrorCode());System.out.println(”E M“+g.getMessage());
} catch(Exception e){ e.printStackTrace();
}
} } class Inputpassword{
public static void main(String []args){
new Client00(”用户取款系统“);
}} package ZDC;//选择界面
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;import java.awt.event.*;class Panel03 extends JPanel{
”);
for(int i=0;i<7;i++){add(new
JLabel());}add(button1);add(new
JLabel());add(new
JButton button1,button2,button3,button4,button5;
Panel03(){
setLayout(new GridLayout(8,6));
button1=new JButton(“查询”);button2=new JButton(“取款”);
button3=new JButton(“转账”);button4=new JButton(“退出”);button5=new JButton(“存款JLabel());
add(button2);for(int
i=0;i<8;i++){add(new
JLabel());}add(button3);add(new JLabel());add(new JLabel());add(button5);
for(int i=0;i<17;i++){add(new JLabel());}add(button4);for(int i=0;i<7;i++){add(new JLabel());}
} } class Client01 extends JFrame implements ActionListener{
Panel03 panel1;JFrame frame;
Client01(String s){
super(s);
Container con=this.getContentPane();
panel1=new Panel03();con.add(panel1);
panel1.button1.addActionListener(this);panel1.button2.addActionListener(this);
panel1.button3.addActionListener(this);panel1.button4.addActionListener(this);panel1.button5.addActionListener(this);
this.setVisible(true);this.pack();
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()==”取款“){
this.setVisible(false);
new Client02(”请选择取款金额“);
}
else if(e.getActionCommand()==”查询“){
this.setVisible(false);
new Client06(”查询服务“);
}
else if(e.getActionCommand()==”存款“){
this.setVisible(false);
new Client05(”请选择存款金额“);
}
else if(e.getActionCommand()==”转账“){
this.setVisible(false);
new Client04(”用户转账服务“);
}
else if(e.getActionCommand()==”退出“){ this.setVisible(false);new Client08(”“);}
} } class Selectfunction{
public static void main(String []args){
new Client01(”用户取款系统“);
new Client01(”用户存款系统“);
} } package ZDC;//查询功能
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;
import ZDC.Panel01;
import java.awt.event.*;class Panel06 extends JPanel{
JLabel label1,label2;JTextField textA;JFrame frame;
Panel06(){
setLayout(new GridLayout(4,4));label1=new JLabel(”你的余额为:“);
textA=new JTextField(6);
for(int i=0;i<5;i++){add(new JLabel());}
add(label1);add(textA);for(int i=0;i<9;i++){add(new JLabel());}
} } class Panel07 extends JPanel{
JButton button1,button2;
Panel07(){
setLayout(new GridLayout(3,6));
button1=new JButton(”继续“);button2=new JButton(”查询“);
for(int i=0;i<7;i++){add(new
JLabel());}add(button2);add(new JLabel());
add(button1);for(int i=0;i<7;i++){add(new JLabel());}
} } class Client03 extends JFrame implements ActionListener{
Panel06 panel1;Panel07 panel2;
Client03(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new GridLayout(2,1));
panel1=new Panel06();panel2=new Panel07();
con.add(panel1);con.add(panel2);
panel2.button1.addActionListener(this);
panel2.button2.addActionListener(this);
this.setVisible(true);this.pack();
}
JLabel());add(new
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals(”继续“)){
this.setVisible(false);
new Client01(”选择服务种类“);
}
else if(e.getActionCommand()==”查询“)showcjine();
}
public void showcjine(){
//String
url
=
”jdbc:odbc:driver={Microsoft
Access
Driver(*.mdb)};DBQ=bankSystem.mdb“;//程序直接使用当前类目录下的数据库文件
try{
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);
Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//连接数据库 Statement sql=con.createStatement();String ql=Panel01.textB.getText();Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);ResultSet rs=sql.executeQuery(”select cjine from card where cno=“+ql+”“);
if(rs.next()){
String ucjine=rs.getString(1);
panel1.textA.setText(ucjine);
}
else{JOptionPane.showMessageDialog(null,”
该用户不存在“,”警告!“, JOptionPane.YES_NO_OPTION);}
con.close();
}catch(Exception ex){ ex.printStackTrace();
}
}
} class Searchfunction{
public static void main(String []args){
new Client03(”用户查询服务“);
}} package ZDC;
//查询信息
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;import java.awt.event.*;class Panel11 extends JPanel{
JButton button1,button2;
Panel11(){
setLayout(new GridLayout(10,5));
button1=new JButton(”查询余额“);
button2=new JButton(”查本卡信息“);
for(int i=0;i<=16;i++)add(new JLabel());
add(button1);
for(int i=0;i<=13;i++)add(new JLabel());
add(button2);
for(int i=0;i<=16;i++)add(new JLabel());} }
class Client06 extends JFrame implements ActionListener{
Panel11 panel11;JFrame frame;
Client06(String s){
super(s);
Container con=this.getContentPane();
panel11=new Panel11();
con.add(panel11);
panel11.button1.addActionListener(this);
panel11.button2.addActionListener(this);
this.setVisible(true);this.pack();}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()==”查询余额“){
this.setVisible(false);
new Client03(”用户查询服务“);
}
else if(e.getActionCommand()==”查本卡信息“){ this.setVisible(false);
new Client07(”本卡信息“);
} } } class Searchinformation{
public static void main(String []args){
new Client06(”查询服务“);
} } package ZDC;//转账功能
import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*;
import ZDC.Panel01;
import java.awt.event.*;class Panel08 extends JPanel{
JLabel label1,label2;JTextField textA,textB;
Panel08(){
setLayout(new GridLayout(4,4));
label1=new JLabel(”输入预转账号:“);label2=new JLabel(”输入预转金额:“);
textA=new JTextField(6);textB=new JTextField(6);
for(int i=0;i<5;i++){add(new JLabel());}
add(label1);add(textA);for(int i=0;i<6;i++){add(new JLabel());}
add(label2);add(textB);add(new JLabel());
} } class Panel09 extends JPanel{
JButton button1,button2;
Panel09(){
setLayout(new GridLayout(3,6));
button1=new JButton(”确定“);button2=new JButton(”取消“);
add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());
add(new JLabel());add(new JLabel());add(button1);add(new JLabel());add(new JLabel());
add(button2);add(new JLabel());add(new JLabel());add(new JLabel());add(new JLabel());
add(new JLabel());add(new JLabel());add(new JLabel());
} } class Client04 extends JFrame implements ActionListener{
Panel08 panel1;Panel09 panel2;JFrame frame;
Client04(String s){
super(s);
Container con=this.getContentPane();
con.setLayout(new GridLayout(2,1));
panel1=new Panel08();panel2=new Panel09();
con.add(panel1);con.add(panel2);
panel2.button1.addActionListener(this);
panel2.button2.addActionListener(this);
this.setVisible(true);this.pack();
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals(”确定“)){ zhuanzhang();//程序根据输入账号调用数据库,修改对应金额数。
this.setVisible(false);
new Client01(”用户取款系统“);
}
else if(e.getActionCommand()==”取消“){
this.setVisible(false);
new Client01(”用户取款系统“);}
}
public void zhuanzhang(){
if(panel1.textA.getText().equals(”“)||panel1.textB.getText().equals(”“)){JOptionPane.showMessageDialog(frame,”
请输入欲转账号、金额!“);return;} //String url = ”jdbc:odbc:driver={Microsoft Access Driver(*.mdb)};DBQ=bankSystem.mdb“;//程序直接使用当前类目录下的数据库文件
try{
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);
Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//连接数据库 Statement sql=con.createStatement();String cno=panel1.textA.getText();String ql=Panel01.textB.getText();
Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);
ResultSet ss=sql.executeQuery(”select cno from card where cno=“+cno+”“);String yjine=panel1.textB.getText();
int shjin=Integer.parseInt(yjine);
if(ss.next()){
ResultSet rs=sql.executeQuery(”select cjine from card where cno=“+ql+”“);if(rs.next()){ String queryjine=rs.getString(1);
int qyjine=Integer.parseInt(queryjine);
if(shjin String newjine=String.valueOf(newcjine);String newjine2=String.valueOf(newcjine2); sql.executeUpdate(”update card set cjine='“+newjine+”'where cno=“+ql+”“); sql.executeUpdate(”update card set cjine='“+newjine2+”'where cno=“+cno+”“);JOptionPane.showMessageDialog(frame,” 操作已成功,谢谢使用!“);this.setVisible(false);new Client01(”用户取款系统“); } else{JOptionPane.showMessageDialog(null,” 请重新输入金额!“,”警告!“, JOptionPane.YES_NO_OPTION); panel1.textB.setText(”“);return; } con.close();frame.repaint(); } con.close();frame.repaint(); } else{JOptionPane.showMessageDialog(null,” 警告!“, JOptionPane.YES_NO_OPTION);panel1.textA.setText(”“);} }catch(Exception ex){ ex.printStackTrace(); } } } class Transferfunction{ public static void main(String []args){ new Client04(”用户转账服务“);}} package ZDC;//用户取款 import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement; 该用户不存在,请重新输入。”,“ import javax.swing.*; import ZDC.Panel01; import java.awt.event.*;class Panel04 extends JPanel{ JButton button1,button2,button3,button4; Panel04(){ setLayout(new GridLayout(4,6)); button1=new JButton(”100“);button2=new JButton(”200“); button3=new JButton(”300“);button4=new JButton(”500“); for(int i=0;i<7;i++){add(new JLabel());}add(button1);add(new JLabel());add(new JLabel()); add(button2);for(int i=0;i<8;i++){add(new JLabel());}add(button3);add(new JLabel()); add(new JLabel());add(button4);add(new JLabel()); } } class Panel05 extends JPanel{ JButton button1,button2,button3,button4; Panel05(){ setLayout(new GridLayout(4,6)); button1=new JButton(”800“);button2=new JButton(”1000“); for(int i=0;i<7;i++){add(new JLabel());}add(button1);add(new JLabel());add(new JLabel()); add(button2);for(int i=0;i<13;i++){add(new JLabel());} } } class Client02 extends JFrame implements ActionListener{ Panel04 panel1;Panel05 panel2;JFrame frame; Client02(String s){ super(s); Container con=this.getContentPane(); con.setLayout(new GridLayout(2,1)); panel1=new Panel04();panel2=new Panel05(); con.add(panel1);con.add(panel2); panel1.button1.addActionListener(this);panel1.button2.addActionListener(this); panel1.button3.addActionListener(this);panel1.button4.addActionListener(this); panel2.button1.addActionListener(this);panel2.button2.addActionListener(this); this.setVisible(true);this.pack(); } public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”100“){ this.setVisible(false); qukuan();//程序根据输入金额和输入卡号,修改数据库。 new Client01(”用户取款系统“); } else if(e.getActionCommand()==”200“){ else if(e.getActionCommand()==”300“){ this.setVisible(false); qukuan(); new Client01(”用户取款系统“);} this.setVisible(false); qukuan(); new Client01(”用户取款系统“);} else if(e.getActionCommand()==”500“){ this.setVisible(false); qukuan(); new Client01(”用户取款系统“);} else if(e.getActionCommand()==”800“){ this.setVisible(false); qukuan(); new Client01(”用户取款系统“);} else if(e.getActionCommand()==”1000“){ } public void qukuan(){ try{ Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//连接数据库 Statement sql=con.createStatement();String ql=Panel01.textB.getText(); this.setVisible(false); qukuan(); new Client01(”用户取款系统“);} ResultSet rs=sql.executeQuery(”select cjine from card where cno=“+ql+”“);if(rs.next()){ String mm=rs.getString(1);int nn= Integer.parseInt(mm); String qerycjine=panel1.button1.getActionCommand(); int queryjine=Integer.parseInt(qerycjine);if(queryjine if(updateMima==1){ JOptionPane.showMessageDialog(frame,” 操作已成功,谢谢使用!“);} this.setVisible(false); new Client01(”用户取款系统“); } else{JOptionPane.showMessageDialog(null,” 你的卡余额已不足,请注意!“,”警告!“, JOptionPane.YES_NO_OPTION); } con.close(); frame.repaint(); } }catch(SQLException g){ System.out.println(”E Code“+g.getErrorCode());System.out.println(”E M“+g.getMessage()); } catch(Exception e){ e.printStackTrace(); } } } class Withdraw{ public static void main(String []args){ new Client02(”请选择取款金额“); } } this.setVisible(false);new Client01(”用户取款系统“);package ZDC; //存款功能 import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*; import ZDC.Panel01; import java.awt.event.*;class Panel10 extends JPanel{ JButton button1,button2,button3,button4; Panel10(){ setLayout(new GridLayout(4,6)); button1=new JButton(”100“);button2=new JButton(”200“); button3=new JButton(”300“);button4=new JButton(”500“); for(int i=0;i<7;i++){add(new JLabel());}add(button1);add(new JLabel());add(new JLabel()); add(button2);for(int i=0;i<8;i++){add(new JLabel());}add(button3);add(new JLabel()); add(new JLabel());add(button4);add(new JLabel()); } } class Panel14 extends JPanel{ JButton button1,button2,button3,button4; Panel14(){ setLayout(new GridLayout(4,6)); button1=new JButton(”800“);button2=new JButton(”1000“); for(int i=0;i<7;i++){add(new JLabel());}add(button1);add(new JLabel());add(new JLabel()); add(button2);for(int i=0;i<13;i++){add(new JLabel());} } } class Client05 extends JFrame implements ActionListener{ Panel04 panel1;Panel05 panel2;JFrame frame; Client05(String s){ super(s); Container con=this.getContentPane(); con.setLayout(new GridLayout(2,1)); panel1=new Panel04();panel2=new Panel05(); con.add(panel1);con.add(panel2); panel1.button1.addActionListener(this);panel1.button2.addActionListener(this); panel1.button3.addActionListener(this);panel1.button4.addActionListener(this); panel2.button1.addActionListener(this);panel2.button2.addActionListener(this); this.setVisible(true);this.pack(); } public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”100“){ this.setVisible(false); cunkuan();//程序根据输入金额和输入卡号,修改数据库。 new Client01(”用户存款系统“); } else if(e.getActionCommand()==”200“){this.setVisible(false);new Client01(”用户存款系统“);} //这里当点击取款金额200时,程序返回上层操作界面。 } public void cunkuan(){ try{ Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);Connection con=DriverManager.getConnection(”jdbc:odbc:hello“,”“,”“);//连接数据库 Statement sql=con.createStatement();String ql=Panel01.textB.getText();ResultSet rs=sql.executeQuery(”select cjine from card where cno=“+ql+”“); if(rs.next()){ String mm=rs.getString(1);int nn= Integer.parseInt(mm); String qerycjine=panel1.button1.getActionCommand(); int queryjine=Integer.parseInt(qerycjine);int newjine=nn+queryjine;String newjin=String.valueOf(newjine);int updateMima=sql.executeUpdate(”update card set cjine='“+newjin+”'where cno=“+ql+”“); if(updateMima==1){ JOptionPane.showMessageDialog(frame,” 操作已成功,谢谢使用!“);} this.setVisible(false); new Client01(”用户存款系统“); } else{JOptionPane.showMessageDialog(null,” 请注意!“,”警告!“, JOptionPane.YES_NO_OPTION); this.setVisible(false);new Client01(”用户取款系统“);} con.close(); frame.repaint(); }catch(SQLException g){ System.out.println(”E Code“+g.getErrorCode());System.out.println(”E M“+g.getMessage()); } catch(Exception e){ e.printStackTrace(); } } } class Depositfunction{ public static void main(String []args){ new Client05(”请选择存款金额“); } } package ZDC;//显示用户信息 import java.awt.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*; import ZDC.Panel01; import java.awt.event.*; class Panel12 extends JPanel{ JLabel label1,label2,label3,label4; JButton button1,button2;JTextField text1,text2,text3,text4; Panel12(){ setLayout(new GridLayout(9,6)); label1=new JLabel(”显示用户名:“);label2=new JLabel(”显示性别:“); label3=new JLabel(”显示身份证:“);label4=new JLabel(”显示卡号:“); button1=new JButton(”查询“);text1=new JTextField(”“);text2=new JTextField(”“); button2=new JButton(”取消“);text3=new JTextField(”“);text4=new JTextField(”“); for(int i=0;i<8;i++)add(new JLabel());add(label1);add(text1); for(int i=0;i<4;i++)add(new JLabel());add(label2);add(text2); for(int i=0;i<4;i++)add(new JLabel());add(label3);add(text3); for(int i=0;i<4;i++)add(new JLabel());add(label4);add(text4); for(int i=0;i<15;i++)add(new JLabel());add(button1); add(new JLabel());add(new JLabel());add(button2); for(int i=0;i<7;i++)add(new JLabel());} } class Client07 extends JFrame implements ActionListener{ Panel12 panel12;JFrame frame; Client07(String s){ super(s); Container con=this.getContentPane(); panel12=new Panel12(); con.add(panel12); panel12.button1.addActionListener(this); panel12.button2.addActionListener(this); this.setVisible(true);this.pack();} public void actionPerformed(ActionEvent e){ if(e.getActionCommand()==”查询“)showCard(); else if(e.getActionCommand()==”取消“){ this.setVisible(false); new Client01(”用户取款系统“); } } public void showCard(){ String url = ”jdbc:odbc:driver={Microsoft Access Driver(*.mdb)};DBQ=bankSystem.mdb“;//程序直接使用当前类目录下的数据库文件 try{ Connection con=DriverManager.getConnection(url);Statement sql=con.createStatement();String ql=Panel01.textB.getText();Class.forName(”sun.jdbc.odbc.JdbcOdbcDriver“);ResultSet rs=sql.executeQuery(”select * from user where ucno=“+ql+”“); if(rs.next()){ String uname=rs.getString(1); String usex=rs.getString(2); String uid=rs.getString(3); String ucno=rs.getString(4); panel12.text1.setText(uname); panel12.text2.setText(usex); panel12.text3.setText(uid); panel12.text4.setText(ucno);} else{JOptionPane.showMessageDialog(null,” 该用户不存在“,”警告!“, JOptionPane.YES_NO_OPTION);} con.close(); } catch(Exception ex){ ex.printStackTrace(); } } } class Dislayuserinformation{ public static void main(String []args){ new Client07(”本卡信息“); } } package ZDC;//退出功能 class Client08{ static Athread threadA; Client08(String s){ threadA=new Athread(); threadA.start(); } } class Athread extends Thread{ static int j=1;public void run(){ for(;j<2;){ new Client08(”提示退出对话框“);try{sleep(30000);j++;} catch(InterruptedException e){} } System.exit(0);} } public class Exit{ public static void main(String []args){ new Client08(”“); } } package ZDC;//退卡 import java.awt.*;import java.sql.Connection; import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.*; import java.awt.event.*;class Panel13 extends JPanel{ JLabel label; Panel13(){ label=new JLabel(” 此卡! “); setLayout(new GridLayout(10,1));add(new JLabel()); add(label);for(int i=0;i<6;i++)add(new JLabel());} } class Client09 extends JFrame{ Panel13 panel13; Client09(String s){ super(s); Container con=this.getContentPane(); panel13=new Panel13(); con.add(panel13); this.setVisible(true);this.pack();} } class bankSystem09{ 谢谢使用,请在30秒内退出 JLabel());add(new JLabel());add(new public void main(String []args){ new Client08(”提示退出对话框"); } } 6课程设计总结 6.1 遇到的问题及解决办法 在此次课程设计中,我遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战。对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解。对于实际动手能力与系统开发的流程的适应,必须多进行实际的练习与操作,才能有大的进步。 6.2 心得体会 在这次的课程设计中,我主要运用了Java语言的界面设计、异常处理、、Awt控件、Swing控件,输入输出流等,综合运用了Java语言。我深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。在以后的学习当中,我会更加努力的学习好专业知识,并将所学的知识用于实践当中去,以便牢固掌握知识。 C++程序设计实践教学环节任务书 承接的项目额(10%)提成,业务经理既拿固定月薪(2000元)也领取提成,财务人员固定工资(2000元),文秘为固定工资(1500元)。 (4)可按姓名显示、查找、增加、删除、修改和保存各类人员的信息。 五、解决方案 一、题目: 公司人事管理系统 (1)分析系统中的各个实体之间的关系及其属性和行为; (2)根据问题描述,设计系统的类层次; 二、目的与要求(3)完成类层次中各个类的描述(包括属性和方法);(4)完成类中各个成员函数的定义; 1.目的:(5)完成系统的应用模块;(1)基本掌握面向过程程序设计的基本思路和方法;(6)功能调试;(2)达到熟练掌握C语言的基本知识和技能;(7)完成系统总结报告以及系统使用说明书。(3)能够利用所学的基本知识和技能,解决简单的程序设计问题。 六、进度安排 2.要求此次课程设计时间为一周,分四个阶段完成: 基本要求: 1.分析设计阶段。指导教师应积极引导学生自主学习和钻研问题,明确设计要 (1)要求利用C++语言面向对象的编程思想来完成系统的设计; 求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。 (2)突出C++语言的类和对象的特征,以多个类实现对每一个子功能的封装; 2.编码调试阶段:根据设计分析方案编写C++代码,然后调试该代码,实现课 (3)进行简单界面设计,能够实现友好的交互; 题要求的功能。 (4)具有清晰的程序流程图和类的详细定义; 3.总结报告阶段:总结设计工作,写出课程设计说明书,要求学生写出需求分析、(5)熟练掌握C++语言对文件的各种操作。总体设计、详细设计、编码、测试的步骤和内容。4.考核阶段。创新要求:在基本要求达到后,可进行创新设计,如系统用户功能控制,对管理员级和一 七、撰写课程设计报告或课程设计总结 般级别的用户系统功能操作不同。课程设计报告要求: 三、信息描述 总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试 的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及公司共有4格记。技术经理。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总 额并显示全部信息,并且老板可以对各种人员进行增加、查寻、修改、删除。 八、参考资料 四、功能描述 1.《C++程序设计》.郑莉.清华大学出版社2.《C++编程思想》.Bruce Eckel [刘宗田].机械工业出版社(1)其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序3.《C++ Primer》中文版.Lippman[潘爱民].中国电力出版社出版 加1。4.《Effective C++中文版》Scott Meyers[侯捷].华中科技大学出版社(2)程序对所有人员有提升级别的功能。 (3)月薪的计算方法是:经理拿固定月薪(5000元),技术人员按完成的代码量(1000元/每千行代码)领取月薪,业务人员的报酬按该推销员当月销售额(15%)与 课 程 设 计 课程名称 Java语言课程设计 题目名称 人事管理系统的设计与实现 学生学院 应用数学学院 专业班级 学 号 学生姓名 指导教师 刘科峰 2014 年 10 月 29 日 一.设计内容 自学Swing图形界面设计和数据库程序设计。开发用于某单位的人事管理系统。该系统要求实现以下功能: 1.员工信息管理包括:员工信息一览表、新员工的建立、修改 2.薪资福利管理:考勤与薪资的连动计算、薪资与福利的设置 3.考勤假期管理:考勤项目录入, 实现考勤信息的查询、统计、汇总 4.人事报表管理:按照员工性别,数目,薪酬自动生成相关报表, 可自定义统计分析条件并可对历史报表进行管理。 设计亮点 1.null布局方式 Swing图形界面设计中有很多布局方式,通过本次学习了解到了FlowLayout,BorderLayout,GridLayout以及null布局,就这四种布局方式而言,null布局的优点在于可以将组建的位置精准到坐标值,可以把组件放到任意想放置的位置,另外可以通过null去设置组件的大小,相较于其他布局方式来说是一个很大的优势。但同时它的缺点在于不能根据Frame的大小变化而改变位置。 2.组件部分属性的设计 Swing中有很多方法是用来实现组件属性设置的,比如button.setVisible(false);按钮通过调用这个方法实现不可见,这是我此次课程设计中的一个亮点,因为组件是没有设置大小的方法的,只有依靠于相应的布局方式才能改变它的大小,通过设置多几个按钮设为不可见,将所要可见按钮实现大小以及位置的控制是一种很好的方法。 二、设计方案 1主界面(只列出界面设计方面的代码) JPanel panel=new JPanel();JTable table=null;JButton ibtn=new JButton(“员工信息”);JButton cbtn=new JButton(“考勤管理”);JButton mbtn=new JButton(“薪资管理”);JButton tbtn=new JButton(“人事报表”);ImageIcon rtou = new ImageIcon(“rentou.jpg”); JLabel imgLabel=new JLabel(rtou); //上面代码定义了一个面板与四个标签,并引入了一个图片 panel.setLayout(new FlowLayout());//设置面板为流布局 panel.add(ibtn);panel.add(cbtn);panel.add(mbtn);panel.add(tbtn);panel.setBackground(Color.GRAY); //将按钮加到面板中,设置面板为灰色 this.add(imgLabel,BorderLayout.CENTER);this.add(panel,BorderLayout.SOUTH);this.setBounds(300, 180, 600, 350);this.setVisible(true);this.getContentPane().setBackground(Color.GRAY);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*图片标签以边框布局放置在中间,将面板也以边框布局放置在下面,可见,灰色,点击关闭程序*/ (2)查询员工界面(只列出界面设计方面的代码) Label idlabel = new JLabel(“ID”);JLabel namelabel = new JLabel(“姓名”);JLabel bumenlabel = new JLabel(“部门”);JLabel zhiweilabel = new JLabel(“职位”); JTextField idfiled = new JTextField(8);JTextField namefield = new JTextField(8);JComboBox bumenbox =new JComboBox();JComboBox zhiweubox = new JComboBox(); JButton btn=new JButton(“查询”);JButton ibtn=new JButton(“添加”) JPanel spanel=new JPanel();JPanel vpanel=new JPanel(); /*定义和各个组件,4个标签,两个文本框,两个复选框,两个按钮,两个面板容器*/ spanel.setLayout(new FlowLayout()); vpanel.setLayout(new FlowLayout(FlowLayout.CENTER,45,25)); bumenbox.addItem(“"); bumenbox.addItem(”管理部“); bumenbox.addItem(”生产部“); bumenbox.addItem(”业务部“); zhiweubox.addItem(”“); zhiweubox.addItem(”部长“); zhiweubox.addItem(”副部长“); zhiweubox.addItem(”普工“); spanel.add(idlabel); spanel.add(idfiled); spanel.add(namelabel); spanel.add(namefield); spanel.add(bumenlabel); spanel.add(bumenbox); spanel.add(zhiweilabel); spanel.add(zhiweubox); spanel.add(btn); vpanel.add(ibtn); spanel.setBackground(Color.GRAY); vpanel.setBackground(Color.GRAY); //将各个组件放进对应面板,设置相关属性 this.add(spanel,BorderLayout.NORTH); this.add(vpanel,BorderLayout.SOUTH); this.setBounds(300, 180, 600, 350); this.setVisible(true); this.getContentPane().setBackground(Color.GRAY); //将面板以边框布局放入框架中,设置属性(3)增加员工信息界面 JPanel panel=new JPanel(); JLabel timeLabel=new JLabel(”时间“);JLabel allnumLabel=new JLabel(”员工总数“); JLabel staffMoLabel=new JLabel(”考勤“);JLabel entryLabel=new JLabel(”全勤“); JLabel quitLabel=new JLabel(”缺勤“);JLabel mwLabel=new JLabel(”性别比例“); JLabel manLabel=new JLabel(”男“); JLabel womanLabel=new JLabel(”女“);JLabel proportionLabel=new JLabel(”男女比例“);JLabel distributionLabel=new JLabel(”人员部门分布“);JLabel mdpLabel=new JLabel(”管理部“); JLabel pdpLabel=new JLabel(”生产部“);JLabel bdpLabel=new JLabel(”业务部“);JLabel xmLabel=new JLabel(”项目“);JLabel xzLabel=new JLabel(”细则“);JLabel stLabel=new JLabel(”数据统计“); JTextField timeFiled = new JTextField(8); JTextField allnumFiled = new JTextField(8);JTextField entryFiled = new JTextField(8);JTextField quitFiled = new JTextField(8);JTextField manFiled = new JTextField(8);JTextField womanFiled = new JTextField(8);JTextField proportionFiled = new JTextField(8);JTextField mdpFiled = new JTextField(8);JTextField pdpFiled = new JTextField(8);JTextField bdpFiled = new JTextField(8);// 定义所需组件 public Selectrenshi(String tablename){ super(”人事管理“); panel.setLayout(null); panel.setBackground(Color.GRAY); panel.add(xmLabel); panel.add(xzLabel); panel.add(stLabel); panel.add(timeLabel); panel.add(timeFiled); panel.add(allnumLabel); panel.add(allnumFiled); panel.add(staffMoLabel); panel.add(entryLabel); panel.add(entryFiled); panel.add(quitLabel); panel.add(quitFiled); panel.add(mwLabel); panel.add(manLabel); panel.add(manFiled); panel.add(womanLabel); panel.add(womanFiled); panel.add(proportionLabel); panel.add(proportionFiled); panel.add(distributionLabel); panel.add(mdpLabel); panel.add(mdpFiled); panel.add(pdpLabel); panel.add(pdpFiled); panel.add(bdpLabel); panel.add(bdpFiled); //将组件加到相应面板中 xmLabel.setBounds(120,20,100,30); xzLabel.setBounds(240,20,100,30); stLabel.setBounds(360,20,100,30); timeLabel.setBounds(120,50,100,30); timeFiled.setBounds(360,50,100,30); allnumLabel.setBounds(120,100,100,30); allnumFiled.setBounds(360,100,100,30); staffMoLabel.setBounds(120,150,100,30); entryLabel.setBounds(240,150,100,30); entryFiled.setBounds(360,150,100,30); quitLabel.setBounds(240,200,100,30); quitFiled.setBounds(360,200,100,30); mwLabel.setBounds(120,250,100,30); manLabel.setBounds(240,250,100,30); manFiled.setBounds(360,250,100,30); womanLabel.setBounds(240,300,100,30); womanFiled.setBounds(360,300,100,30); proportionLabel.setBounds(240,350,100,30); proportionFiled.setBounds(360,350,100,30); distributionLabel.setBounds(120,400,100,30); mdpLabel.setBounds(240,400,100,30); mdpFiled.setBounds(360,400,100,30); pdpLabel.setBounds(240,450,100,30); pdpFiled.setBounds(360,450,100,30); bdpLabel.setBounds(240,500,100,30); bdpFiled.setBounds(360,500,100,30); //采用null布局,设置组建坐标值 this.add(panel,BorderLayout.CENTER); this.setBounds(300, 100, 600, 600); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.getContentPane().setBackground(Color.GRAY); //将面板放入框架,设置相应属性(4)员工考勤界面 JLabel idlabel = new JLabel(”ID“);JComboBox idbox =new JComboBox();CheckTable model = null; JButton wbtn=new JButton(”修改“); JButton cbtn=new JButton(”查询“);JButton mbtn=new JButton(”创建薪资表“);JButton rbtn=new JButton(”创建人事表“); JScrollPane scrollpane = null;JPanel spanel=new JPanel();JPanel vpanel=new JPanel();JTable table=null;spanel.add(idbox);panel.add(wbtn);spanel.add(cbtn);vpanel.add(mbtn);vpanel.add(rbtn);spanel.setBackground(Color.GRAY);vpanel.setBackground(Color.GRAY);this.add(spanel,BorderLayout.NORTH);this.add(vpanel,BorderLayout.SOUTH);this.setBounds(300, 180, 600, 350);this.setVisible(true);this.getContentPane().setBackground(Color.GRAY); (5)选择考勤表界面 JLabel checklabel = new JLabel(”选择考勤表“);JLabel newlabel = new JLabel(”创建考勤表“);JComboBox timebox =new JComboBox();JTextField newfield = new JTextField();JButton btn=new JButton(”确认“);JButton nbtn=new JButton(”创建");JPanel spanel=new JPanel();spanel.add(checklabel); spanel.add(timebox); spanel.add(btn); spanel.add(newlabel); spanel.add(newfield); spanel.add(nbtn); checklabel.setBounds(30,90,100,30); timebox.setBounds(180,90,100,30); btn.setBounds(360,90,100,30); newlabel.setBounds(30,200,100,30); newfield.setBounds(180,200,100,30); nbtn.setBounds(360,200,100,30); this.add(spanel); this.setBounds(300, 180, 600, 350); this.setVisible(true); 三、结果和数据处理 四、结论 1.Swing图形界面 图形用户界面(GUI)是程序不可或缺的一部分,它便于用户和程序的交互。在Swing界面中是以Frame为框架,采用合理的布局方式(FlowLayout,BorderLayout,GridLayout,null),将Panel加入框架之中,而实现界面的各个组件将调用各种方法设置自身属性实行可视化界面以及加入到面板之中。再通过事件监听器实现事件的监听预处理机制。 2.数据库 在这次课程设计中哦我主要负责Swing图像界面,对于数据库只做了最简单的了解。程序中采用了最流行的关系型数据库mysql,雪化了mysql的建立,删除,与修改以及使用sql语言对数据库进行一些简单的操作,将按钮等设置的监听事件与数据库相连接。 五、问题与讨论 1.组件的方法调用 在这次课程设计中,用到了很多的组件,例如Button,Jlabel,TextField,ComBox,等。Swing图形界面也确实提供了很多方法去设置相关组件的属性,例如label.setVisible(false);设置标签不可见等很多方法,只要查看API文档几乎就能实现很多功能,但是对于按钮等最常见的组件来说设置大小如果不依靠相关布局方式很难设置,我在程序中之所以运用了很多的bull布局方式就是为了实现组件大小的设置,如果说能有一个方法直接设置组件大小而不受其他组件或容器影响就能使代码很简洁了。2.相对布局 在编写图像界面的程序的时候,我用了很多的布局方式,有FlowLayout,BorderLayout,GrirLayout,null等,其中null布局用的最多。null布局的优点在于可以将组建的位置精准到坐标值,可以把组件放到任意想放置的位置,另外可以通过null去设置组件的大小,相较于其他布局方式来说是一个很大的优势。但同时它的缺点在于不能根据Frame的大小变化而改变位置。其他三种布局方式虽然实现了岁Frame大小变动而改变组件大小及位置但是不容易控制,如果null布局能实现相对布局就是很好的一种布局方式了。 《Java课程实习》报告 题目 学号 学生姓名 音乐播放器 201011621335 201011621329 200811621320 朱剑峰 薛文博 刘彬 联系方式 *** *** *** 所在专业 所在班级 指导教师 成绩 教师签字 计算机科学与技术 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 设计总结....................................................................................................................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 课题背景 随着社会电子音乐文件的与日俱增,作为现在最流行的音乐文件*.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.1 程序界面布局设计 (1)创建一个JFrame类,类名为MyPlayer类。 (2)向对话框中添加JSlider控件、JList控件、JLabel控件、JJToggleButton控件、MenuBar菜单、JPanel容器、JToolBar容器以及JScrolPanel容器。 (3)设置所添加的控件的属性,以及使用Java的界面风格,本设计共使用了6种Java 的不同界面风格。 2.2 功能分析 MyPlayer播放器主要对常用Windows音频格式的文件实现播放控制: 主界面功能 菜单栏功能 添加音乐; 添加音乐文件(即导入一个或多个音乐文件至列表当中); 添加音乐目录(即导入文件夹中所有的音乐文件至列表当中); 控制; 随机播放; 顺序播放; 单曲循环; 设置歌词(有待开发); 更换皮肤; 默认、深海世界、迷人金属、香韵咖啡、骇客帝国、浪漫满屋(均为java的界面风格) 关于; 广东海洋大学本科生课程设计报告 帮助(记录作者的相关信息以及软件开发的日期); 动态音频播放进度显示; 正在播放歌曲在顶层的显示 播放歌曲的时间长度的显示以及正在播放时间的长度的显示 滚动条随播放状态改变显示 歌曲搜索功能; 根据关键字搜索对应的歌曲; 歌曲播放/停止功能; 上一首;(播放上一首歌曲并根据播放模式来选择) 下一首;(播放下一首歌曲并根据播放模式来选择) 播放/停止;(播放或停止歌曲) 双击播放/双击停止;(在列表中对指定歌曲的操作) 列表展示功能; 隐藏/显示列表; 移除单个音乐文件; 移除所有音乐文件; 显示当前歌曲数目,播放模式,皮肤情况; 系统设计与实现 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.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、本播放器缺少歌词设置、显示功能。由于本小组对播放器的主界面还未想到一个满意的设计,所以歌词的实现暂且没有实现,待界面设计得灵活的时候,再添加歌词的功能。 广东海洋大学本科生课程设计报告 系统开发过程 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、打开目录 可以把整个目录里面的MP3、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的图标换成“射手”图标) 广东海洋大学本科生课程设计报告 设计总结 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); } } }第三篇:C++课程设计公司人事管理系统
第四篇:Java课程设计报告
第五篇:Java课程设计报告