资源描述
Java程序设计实训报告册实 训 报 告 册实训课程: Java程序设计项目题目:学生考试登录系统 项目小组:周夜葵 杨君超 和泽慧指导老师:田海燕 实训时间:2010年6月28-2010年7月3日计算机网络08 1班 目录一工具选择,JDK的安装和NetBeans的调试(1) 安装JDK6.0和Netbeans3(2) 环境变量的配置 4(3) 使用NetBeans创建登录窗口5二 用户登录功能模块开发(1) 登陆模块的思路6(2) 用户登录的功能实现 6(3)用户登录核心代码7(4)运行结果9三 用户注册功能模块开发(1) 思路9(2)用户注册实现9(3)用户注册核心代码14(4)用户注册运行结果13四 用户考试功能模块开发(1) 思路15(2) 具体实现15(3) 核心代码15(1.1)运行结果26五 实训总结(1)实训心得27工具选择,JDK的安装和NetBeans的调试1 工具的选择 在题目的选择上我们选择了学生考试系统的开发,开发环境是sun公司的NetBeans,NetBeans是一个全功能的开放源码Java IDE,可以帮助开发人员编写、编译、调试和部署Java应用,并将版本控制和XML编辑融入其众多功能之中。NetBeans 可支持Java 2平台标准版(J2SE)应用的创建、采用JSP和Servlet的2层Web应用的创建,以及用于2层Web应用的API及软件的核心组的创建。此外,NetBeans 最新牒还预装了两个Web服务器,即Tomcat和GlassFish,从而免除了繁琐的配置和安装过程。所有这些都为Java开发人员创造了一个可扩展的开放源多平台的Java IDE,以支持他们在各自所选择的环境中从事开发工作,如Solaris、Linux、Windows或Macintosh。 NetBeans是一个为软件开发者而设计的自由、开放的IDE(集成开发环境),你可以在这里获得许多需要的工具,包括建立桌面应用、企业级应用、WEB开发和JAVA移动应用程序开发、C/C+,甚至Ruby。NetBeans可以非常方便的安装于多种操作系统平台,包括Windows,Linux,Mac OS和Solaris等操作系统 NetBeans IDE6.1版本提供了几种新功能和一些功能的增强。提供了强大的JavaScript编辑功能,支持使用Spring的WEB框架,并加强了与MySQL的整合,使NetBeans比较方便的使用MySQL数据库,NetBeans 6.1增强了性能,启动速度提升40%。在建立一个大工程时,有较低的内存消耗和更快的响应速度!2. JDK的安装和NetBeans的调试要安装NetBeans6.8必须安装JDK5.0或者JDK6.0的版本,因为NetBeans是基于JDK的开发工具,JDK属于支持NetBeans的环境。 安装好后,配置环境变量,path和classpa,path目录指向:C:Program FilesJavajdk1.6.0_18bin就是安装JDK所在的目录。Classpath指向:C:Program FilesJavajdk1.6.0_18lib;.并在后面加上“.”结束。 安装NetBeans6.8,安装步骤省略,首先得注意的时候一定要记得配置环境变量,包括path和classpath一个也不能少否则安装程序检测不到JDK的存在。成功安装如图:界面截图:3使用NetBeans创建登录窗口打开NetBeans,点击左边窗格上的新建文件,选择swing GUI或者awt GUI,选择好存放项目的位置就可以进入图形界面的开发环境进行设计。 首先要添加面板到设计面板上,如图:,然后再工具栏拖动相应的按钮和文本框到底层面板上,布局好相应的按钮后,进行txt属性的修改,再属性栏找到txt属性,修改按钮和标签的文本属性。对于按钮上的事件,则可以双击该按钮进入到代码的编写界面。 由于首次接触NetBeans对其强大的功能和良好的交互性不够了解,许多可用的功能没有得到实现。正在进一步的学习和研究中。用户登录功能模块开发1 登录模块的思路首先我们的思路是,在登录的窗体上输入用户名和密码之后,把用户名和密码与注册界面注册生成的txt文本中的内容进行对比,若一致则登录成功,否则不成功。但是现在的问题是在进行对比的时候由于代码复杂,没有实现这个功能,只好把判断的代码加上注释进行傻瓜式的判断。然后跳转到考试的界面。2 用户登录的功能实现登录窗口作为注册窗口和考试界面的主窗体,在点击注册按钮时调用注册窗体并将父窗体隐藏,可以实现注册界面的调用,注册完后点击“确定”可返回登录界面,在登录窗体上正确填写相关资料后点击登录按钮,可进入考试界面,进行考试。3 用户登录的核心代码LoginPanel-登录界面的类名窗体界面设计的主要思路是:在主界面中添加面板,并在面板中添加相关组件。面板的布局为: BorderLayoutimport java.awt.*;import java.awt.event.*;import javax.swing.*;/完成登录界面的设计class LoginPanel extends JPanel implements ActionListenerJButton loginbtn,registerbtn,cancelbtn;JLabel titlelabel,namelabel,pwdlabel;JTextField namefield;JPasswordField pwdfield;JPanel panel1,panel2,panel3,panel21,panel22;JFrame iframe;public static void main(String args)new LoginPanel();public LoginPanel()iframe=new JFrame();JLabel titlelabel=new JLabel(欢迎使用考试系统);titlelabel.setFont(new Font(隶书,Font.BOLD,24);JLabel namelabel=new JLabel(用户名:);JLabel pwdlabel=new JLabel(密 码:);JTextField namefield=new JTextField(16);JPasswordField pwdfield=new JPasswordField(16);pwdfield.setEchoChar(*);JButton loginbtn=new JButton(登录);JButton registerbtn=new JButton(注册);JButton cancelbtn=new JButton(取消);/装入监听器loginbtn.addActionListener(this); registerbtn.addActionListener(this); cancelbtn.addActionListener(this); panel1 = new JPanel();panel2 = new JPanel();panel3 = new JPanel();panel21 = new JPanel();panel22 = new JPanel();BorderLayout b1=new BorderLayout();setLayout(b1);panel1.add(titlelabel);panel21.add(namelabel);panel21.add(namefield);panel22.add(pwdlabel);panel22.add(pwdfield);panel2.add(panel21,BorderLayout.NORTH);panel2.add(panel22,BorderLayout.SOUTH);panel3.add(loginbtn);panel3.add(registerbtn);panel3.add(cancelbtn);iframe.add(panel1,BorderLayout.NORTH);iframe.add(panel2,BorderLayout.CENTER);iframe.add(panel3,BorderLayout.SOUTH);iframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);iframe.setSize(300,250);iframe.setTitle(登录系统);iframe.setVisible(true);/实现三个按钮事件功能public void actionPerformed(ActionEvent e)if(e.getActionCommand()=登录) /登录按钮的相关事件/if(namefield.getText().trim().equals()/JOptionPane.showMessageDialog(null,t请输入用户名!,用户名空提示,JOptionPane.OK_OPTION);/else/if(new String(pwdfield.getPassword().equals()JOptionPane.showMessageDialog(null,t请输入密码!,密码空提示,JOptionPane.OK_OPTION);/else/if(namefield.getText().trim().equals(zyk)&(new String(pwdfield.getPassword().equals(123456)/new Test_GUI(zyk); /实现与考试模块界面的连接iframe.dispose();if(e.getActionCommand()=注册) /注册按钮的相关事件new Register_GUI(); /实现与注册界面的连接iframe.dispose();if(e.getActionCommand()=取消) /取消按钮的相关事件System.exit(0);4 运行结果用户注册功能模块开发1思路简单的注册界面,有登陆提示信息,注册提示信息,简约的界面,通过用户的注册可以授权合法的用户登陆考试,可以进行界面的跳转功能,主要正对完成注册的跳转,在注册界面通过,获取用户名和密码以及相关的信息后将信息提交到本地txt文本中(模拟数据库)。以便后期登录时从txt中取得相应合法用户的账户和密码。2.用户注册的实现注册窗口作为登陆窗口的子窗体,在点击注册的时候调用子窗体并将父窗体隐藏,就可以实现注册界面的调用。3.用户注册的核心代码Register_GUI-注册界面的类名窗体界面的布局分别为:GridBagLayout、BoxLayoutimport java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.Border;import java.util.*;public class Register_GUIRegister_GUI()RegisterFrame rf=new RegisterFrame();rf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);rf.setVisible(true);public static void main(String args)new Register_GUI();/完成注册界面的设计class RegisterFrame extends JFrameToolkit tool;public RegisterFrame()setTitle(用户注册);tool=Toolkit.getDefaultToolkit();Dimension ds=tool.getScreenSize();int w=ds.width;int h=ds.height;setBounds(w-300)/2,(h-300)/2,300,300);setResizable(false);RegisterPanel rp=new RegisterPanel(this);add(rp);class RegisterPanel extends JPanel implements ActionListenerJlabel titlelabel,namelabel,pwdlabel1,pwdlabel2,sexlabel,agelabel,classlabel;JTextField namefield,agefield;JPasswordField pwdfield1,pwdfield2;JButton commitbtn,resetbtn,cancelbtn;JRadioButton rbtn1,rbtn2;JComboBox combo;Vectorv;GridBagLayout gbl;GridBagConstraints gbc;JPanel panel;Box box;Component c;JFrame iframe;public RegisterPanel(JFrame frame)iframe=new JFrame();titlelabel=new JLabel(用户注册);titlelabel.setFont(new Font(隶书,Font.BOLD,24);namelabel=new JLabel(用户名:);pwdlabel1=new JLabel(密 码:);pwdlabel2=new JLabel(确认密码:);sexlabel=new JLabel(性 别:);agelabel=new JLabel(年 龄:);classlabel=new JLabel(所属班级:);namefield=new JTextField(16);pwdfield1=new JPasswordField(16);pwdfield1.setEchoChar(*);pwdfield2=new JPasswordField(16);pwdfield2.setEchoChar(*);agefield=new JTextField(16);rbtn1=new JRadioButton(男);rbtn2=new JRadioButton(女);rbtn2.setSelected(true);ButtonGroup bg=new ButtonGroup();bg.add(rbtn1);bg.add(rbtn2);v=new Vector();v.add(计算机网络08);v.add(图文图形设计08);v.add(水利水电08);v.add(会计08);v.add(自动化08);combo=new JComboBox(v);commitbtn=new JButton(注册);resetbtn=new JButton(重置);cancelbtn=new JButton(取消);/装入监听器commitbtn.addActionListener(this); resetbtn.addActionListener(this); cancelbtn.addActionListener(this); panel=new JPanel();panel.add(rbtn1);panel.add(rbtn2);Border border=BorderFactory.createTitledBorder();panel.setBorder(border); box = Box.createHorizontalBox();box.add(commitbtn);box.add(Box.createHorizontalStrut(30);box.add(resetbtn);box.add(Box.createHorizontalStrut(30);box.add(cancelbtn);gbl=new GridBagLayout();setLayout(gbl);gbc=new GridBagConstraints();addCompnent(titlelabel,0,0,4,1);add(Box.createVerticalStrut(20);gbc.anchor=GridBagConstraints.CENTER;gbc.fill=GridBagConstraints.HORIZONTAL;gbc.weightx=0;gbc.weighty=100;addCompnent(namelabel,0,1,1,1);addCompnent(namefield,1,1,4,1);addCompnent(pwdlabel1,0,2,1,1);addCompnent(pwdfield1,1,2,4,1); addCompnent(pwdlabel2,0,3,1,1);addCompnent(pwdfield2,1,3,4,1);addCompnent(sexlabel,0,4,1,1);addCompnent(panel,1,4,1,1);gbc.anchor=GridBagConstraints.EAST;gbc.fill=GridBagConstraints.NONE;addCompnent(agelabel,2,4,1,1);gbc.fill=GridBagConstraints.HORIZONTAL;addCompnent(agefield,3,4,2,1);addCompnent(classlabel,0,5,1,1);addCompnent(combo,1,5,4,1);gbc.anchor=GridBagConstraints.CENTER;gbc.fill=GridBagConstraints.NONE;addCompnent(box,0,6,4,1);public void addCompnent(Component c,int x,int y,int w,int h)gbc.gridx=x;gbc.gridy=y;gbc.gridwidth=w;gbc.gridheight=h;gbc.gridx=x;add(c,gbc);/实现三个按钮事件功能public void actionPerformed(ActionEvent e)if(e.getSource()=commitbtn) /注册按钮的相关事件Register rinfo=new Register();rinfo.name=namefield.getText().trim();rinfo.password=new String(pwdfield1.getPassword();rinfo.sex=rbtn2.isSelected()?男:女;rinfo.age=agefield.getText().trim();rinfo.nclass=combo.getSelectedItem().toString();if(rinfo.name.length()=0)JOptionPane.showMessageDialog(null,t用户名不能为空);return;if(rinfo.password.length()=0)JOptionPane.showMessageDialog(null,t密码不能为空);return;if(!rinfo.password.equals(new String(pwdfield2.getPassword()JOptionPane.showMessageDialog(null,密码两次输入不一致,请重新输);return;if(rinfo.age .length()=0)JOptionPane.showMessageDialog(null,t年龄不能为空);return;int age=Integer.parseInt(rinfo.age);if(age100)JOptionPane.showMessageDialog(null,t年龄输入不合法);return;JOptionPane.showMessageDialog(null,t注册成功);new LoginPanel().setVisible(true); /实现与登录界面的连接iframe.dispose();if(e.getSource()=resetbtn) /重置按钮的相关事件namefield.setText();pwdfield1.setText();pwdfield2.setText();rbtn2.isSelected();agefield.setText();combo.setSelectedIndex(0);if(e.getSource()=cancelbtn) /退出按钮的相关事件System.exit(0); class RegisterString name;String password;String sex;String age;String nclass;4用户注册运行结果考试模块功能1.思路首先在同一个目录下新建一个test.txt文件,加入试题,再把试题加载到考试界面模块中;其次在其中添加倒计时模块,实现时间的提醒功能,;再次,实现“开始考试”按钮的功能,当点击“开始考试”按钮时,跳出试题,可对试题进行答案的选择;最后,实现“提交试题”按钮的功能,点击“提交试题”按钮后,跳出得分情况。 2.具体实现 考试模块作为登陆窗口的子窗体,在正确填写相关资料后,点击登录按钮后调用子窗体并将父窗体隐藏,就可以实现考试模块界面的调用。3.核心代码TestGUI-考试模块的类名窗体界面的主要布局为: BorderLayout、BoxLayout以继承线程类的方法实现考试时间倒计时import java.awt.*;import java.awt.event.*;import java.io.*;import java.text.NumberFormat;import java.util.Vector;import javax.swing.*;import javax.swing.border.Border;public class Test_GUI public static void main(String args) new Test_GUI(zyk);public Test_GUI(String name)TestFrame tf = new TestFrame(name);tf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);tf.setVisible(true);/框架类class TestFrame extends JFrame private Toolkit tool;private JMenuBar mb;private JMenu menutool,menuhelp,menuexit;private JMenuItem edition,about;private JDialog help; public TestFrame(String name)setTitle(学生在线考试系统);tool = Toolkit.getDefaultToolkit();Dimension ds = tool.getScreenSize();int w = ds.width;int h = ds.height;setBounds(w-500)/2,(h-430)/2, 500, 450);/设置窗体图标 Image image = tool.getImage(hu.jpg);setIconImage(image);setResizable(false);/-菜单条的设置-mb = new JMenuBar();setJMenuBar(mb);menutool = new JMenu(工具(T);menuhelp = new JMenu(帮助(H);menuexit = new JMenu(退出(E);/设置助记符menutool.setMnemonic(T);menuhelp.setMnemonic(H);menuexit.setMnemonic(E);mb.add(menutool);mb.add(menuhelp);mb.add(menuexit);edition = new JMenuItem(版本(E),E);about = new JMenuItem(关于(A),H);menuhelp.add(edition);/添加分隔线menuhelp.addSeparator();menuhelp.add(about);/设置快捷键edition.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK);about.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK);BorderLayout bl =new BorderLayout();setLayout(bl);TestPanel tp = new TestPanel(name);add(tp,BorderLayout.CENTER); /匿名内部类添加事件 edition.addActionListener(new ActionListener()public void actionPerformed(ActionEvent arg0) JOptionPane.showMessageDialog(null, 单机版 Exam_System V1.1,版本信息,JOptionPane.PLAIN_MESSAGE);); about.addActionListener(new ActionListener()public void actionPerformed(ActionEvent arg0) help = new JDialog(new JFrame();JPanel panel = new JPanel();JTextArea helparea = new JTextArea(14,25);helparea.setText(本书以一个在线考试系统的开发贯穿全书+n系统的开发分为三个版本:+n 1.单机版 Stand-alone_Exam System V1.1+n 2.C/S版 C/S_Exam System V1.2+n 3.数据库版 Data_Exam System V1.3);helparea.setEditable(false);JScrollPane sp = new JScrollPane(helparea);panel.add(sp);help.setTitle(帮助信息);help.add(panel,Center);help.setBounds(350,200,300,300);help.setVisible(true); ); menuexit.addMouseListener(new MouseListener() public void mouseClicked(MouseEvent arg0) int temp = JOptionPane.showConfirmDialog(null, 您确认要退出系统吗?, 确认对话框,JOptionPane.YES_NO_OPTION);if (temp = JOptionPane.YES_OPTION) System.exit(0); else if (temp = JOptionPane.NO_OPTION) return;public void mouseEntered(MouseEvent arg0) public void mouseExited(MouseEvent arg0) public void mousePressed(MouseEvent arg0) public void mouseReleased(MouseEvent arg0) );/容器类class TestPanel extends JPanel implements ActionListenerPrivateJLabel totaltime,lifttime,ttimeshow,ltimeshow,textinfo,userinfo;private JLabel copyright; /版权信息标签private JButton starttest,back,next,commit;private JTextArea area;private JRadioButton rbtna,rbtnb,rbtnc,rbtnd;private String totaltimer = ,lifttimer=,username=;private int i = 0,n = 0; private Box box,box1,box2,box3,box4,box5; private Question question; private ClockDisplay clock; private int index = 0; private int time=0; public TestPanel(String name)username = name;totaltimer = 00:0:00;lifttimer = 00:00:00;totaltime = new JLabel(总的考试时间是:);lifttime = new JLabel(剩余考试时间是:);ttimeshow = new JLabel(totaltimer);ttimeshow.setForeground(Color.RED);ltimeshow = new JLabel(lifttimer);ltimeshow.setForeground(Color.RED);textinfo = new JLabel(第+i+题+,共+n+题);userinfo = new JLabel(考生: +username);copyright = new JLabel();copyright.setHorizontalAlignment(JLabel.RIGHT);copyright.setFont(new Font(宋体,Font.PLAIN,14);copyright.setForeground(Color.GRAY);copyright.setText(杨君超、周夜葵、和泽慧);starttest = new JButton(开始考试);back = new JButton(上一题);back.setEnabled(false);next = new JButton(下一题);next.setEnabled(false);commit = new JButton(提交试卷);commit.setEnabled(false);area = new JTextArea(10,10);area.setText(考场规则:n + 一、考试前15分钟,凭准考证和身份证进入考场,对号入座,将准考证和身份证放在桌面右上角,便于监考人员检查。n +二、笔译考试开考三十分钟后不得入场,答题结束后提交试卷后可以申请离场。n +三、考生要爱惜考场的机器和相关设备,严格按照规定的操作说明进行操作,如有人为损坏,照价赔偿。);JScrollPane sp = new JScrollPane(area);area.setEditable(false);rbtna = new JRadioButton(A);rbtnb = new JRadioButton(B);rbtnc = new JRadioButton(C);rbtnd = new JRadioButton(D);rbtna.setEnabled(false);rbtnb.setEnabled(false);rbtnc.setEnabled(false);rbtnd.setEnabled(false);ButtonGroup bg = new ButtonGroup();bg.add(rbtna);bg.add(rbtnb);bg.add(rbtnc);bg.add(rbtnd);Border border=BorderFactory.createTitledBorder(选项);JPanel panel = new JPanel();panel.add(rbtna);panel.add(rbtnb);panel.add(rbtnc);panel.add(rbtnd);panel.setBorder(border);box = Box.createVerticalBox();box1 = Box.createHorizontalBox();box2 = Box.createHorizontalBox();box3 = Box.createHorizontalBox();box4 = Box.createHorizontalBox();box5 = Box.createHorizontalBox();new JDialog(new JFrame(); /注册监听事件starttest.addActionListener(this);back.addActionListener(this);next.addActionListener(this);commit.addActionListener(this);/添加组件,采用箱式布局 box1.add(totaltime); box1.add(Box.createHorizontalStrut(5); box1.add(ttimeshow); box1.add(Box.createHorizontalStrut(15); box1.add(lifttime); box1.add(Box.createHorizontalStrut(5); box1.add(ltimeshow); box1.add(Box.createHorizontalStrut(15); box1.add(starttest); box2.add(textinfo); box2.add(Box.createHorizontalStrut(30); box2.add(userinfo); box3.add(sp, BorderLayout.CENTER); box4.add(panel); box4.add(Box.createHorizontalStrut(5); box4.add(back); box4.add(Box.createHorizontalStrut(5); box4.add(next); box4.add(Box.createHorizontalStrut(5); box4.add(commit); box5.add(Box.createHorizontalStrut(250); box5.add(copyright); box.add(box1); box.add(Box.createVerticalStrut(10); box.add(box2); box.add(Box.createVerticalStrut(10); box.add(box3); box.add(Box.createVerticalStrut(10); box.add(box4); box.add(Box.createVerticalStrut(20); box.add(box5,BorderLayout.EAST); add(box); /加载考试时间和试题 testTime();createQuestion();ttimeshow.setText(time+分钟);ltimeshow.setText(time+分钟); public void display(Question q) String answer=; answer=q.getSelectedAnswer(); area.setText(n+q.getDetail(); if(answer=A) rbtna.setSelected(true); else if(answer=B) rbtnb.setSelected(true); else if(answer=C) rbtnc.setSelected(true); else if(answer=D) rbtnd.setSelected(true); textinfo.setText(第 + (index+1) + 题 +,共+ question.length+题);/从文件中读取出来的试题加载到程序中public void createQuestion()Vector qStore = new Vector();tryFileReader fr = new FileReader(test.txt);BufferedReader br = new BufferedReader(fr);while(true)Question q = ReadQuestion(br);if(q = null)break;qStore.add(q);br.close();catch(IOException e)e.printStackTrace();question = new QuestionqStore.size();for(int i=0; iqStore.size();i+)questioni = (Question)qStore.elementAt(i);/从试题文件中获取考试时间public void testTime() FileReader fr = null; BufferedReader br = null; String s = ;try fr = new FileReader(test.txt); br = new BufferedReader(fr); s = br.readLine();while(s!=null & (!s.equals()s = br.readLine();time = Integer.parseInt(br.readLine();fr.close();br.close(); catch (IOException e) e.printStackTrace();/从试题文件中读取试题public Question ReadQuestion(BufferedReader br)Question q = new Question();tryString s = br.readLine();while(s!=null & (!s.equals()s = br.readLine();s = br.readLine();while(s!=null & (!s.equals()s = br.readLine();if(s = null) return null;StringBuffer sb = new StringBuffer();s = br.readLine();while(s!=null & (!s.equals(/
展开阅读全文