随机点名器
一、设计目的
随机点名器是一个能够从 Excel 文件的某个 Sheet 中读出班级所
有同学的名单,然后通过产生一个随机数选中其中一个同学回答问题,
然后输入回答问题的得分,并将该得分存入 Excel 表的另外一个
Sheet 中的简单程序。 实现要点:通过开源项目 jExcel 提供的
jxl.jar 包,实现 Excel 文件的读写。
二、设计思路
根据随机点名器的设计要求,总结出如下设计思路流程图:
开始
登录窗口
主窗口
退
出
重
新
登
录
选
择
班
级
随
机
点
名
输
入
分
数
新
建
班
级
创
建
班
级
窗
口
1
保
存
结果
结束
三、功能介绍(使用说明)
1
2
3
4
5
6
7
2
1. 点击选择班级,显示该班级的学生。
2. “随机点名”按钮,点击随机选择表中的一个学生。
3. 分数输入框。
4. “保存”按钮,点击可以保存学生的分数。
5. 重新登录,返回到登录窗口。
6. 退出程序。
7. 新建班级,打开一个文件选择窗口,选择文件并创建新班级。
四、程序清单
package com.gdupt.javabigjob;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import com.mysql.jdbc.BlobFromLocator;
//定义登录窗口类
public class LoginWin extends JFrame implements ActionListener {
3
//创建组件
private JLabel lblUserName; //标签
private JLabel lblUserPsw;
private JTextField txfUserName; //文本框
private JPasswordField pwfUserPsw; //密码框
private JButton btnSubmit; //按钮
private JButton btnCencal;
//构造方法
public LoginWin() {
//实例化各组件对象
this.lblUserName = new JLabel("用户:");
this.lblUserPsw = new JLabel("密码:");
this.txfUserName =new JTextField(20);
this.pwfUserPsw = new JPasswordField(20);
this.btnSubmit = new JButton("确定");
this.btnCencal = new JButton("取消");
//为按钮设置名字
this.btnSubmit.setName("btnSubmit");
this.btnCencal.setName("btnCencal");
//注册监听者
this.btnSubmit.addActionListener(this);
this.btnCencal.addActionListener(this);
//取得窗口的内容面板
Container container = this.getContentPane();
//设置布局管理器
container.setLayout(new FlowLayout());
//将各组件添加到窗口
this.add(lblUserName);
this.add(txfUserName);
this.add(lblUserPsw);
this.add(pwfUserPsw);
this.add(btnSubmit);
this.add(btnCencal);
//设置窗口属性(标题,大小,位置,可视化...)
this.setTitle("请登录");
4
this.setSize(300, 250);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(400, 200);
this.setVisible(true);
}
@Override //设置监听方式
public void actionPerformed(ActionEvent e) {
//获得事件源
Object o = e.getSource();
//如果 o 是按钮
if(o instanceof JButton) {
//将 o 转型为按钮
JButton button = (JButton) o;
//获得名字
String name = button.getName();
//通过名字确定点击的按钮
if("btnSubmit".equals(name)) {
//获得数据库连接
Connection cnt = this.getDatabaseCon();
try {
Statement s = cnt.createStatement();
ResultSet rs = s.executeQuery("select* from ManagerialStaff
where username='" + txfUserName.getText() + "' and userpsw='" +
pwfUserPsw.getText() + "';");
if(rs.next()) {
JOptionPane.showMessageDialog(null, "登录成功!");
this.dispose();
s.close();
cnt.close();
MainWindow mw = new MainWindow();
}else {
JOptionPane.showMessageDialog(null, "登录失败,请重
试!");
}
5
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
if("btnCencal".equals(name)) {
JOptionPane.showMessageDialog(null, "欢迎 " +
this.txfUserName.getText() + " 再来!");
System.exit(0);
}
}
}
//连接数据库,该方法返回一个 Connection 连接
public Connection getDatabaseCon() {
Connection cnt = null;
try {
//注册 MySQLJDBC 驱动程序
Class.forName("com.mysql.jdbc.Driver");
//创建数据库连接
cnt = DriverManager.getConnection("jdbc:mysql://localhost/mydb",
"root", "123456");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
try {
cnt =
DriverManager.getConnection("jdbc:mysql://localhost/information_schema",
"root", "123456");
Statement stat = cnt.createStatement();
//创建数据库
stat.executeUpdate("create database mydb;");
//打开创建的数据库
stat.close();
cnt.close();
6
cnt =
DriverManager.getConnection("jdbc:mysql://localhost/mydb", "root",
"123456");
stat = cnt.createStatement();
//创建表
stat.executeUpdate("create table ManagerialStaff(username
char(12), userpsw char(12));");
stat.executeUpdate("insert into ManagerialStaff values('0000',
'0000');");
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return cnt;
}
}
package com.gdupt.javabigjob;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
7
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.*;
import jxl.write.*;
import jxl.write.biff.RowsExceededException;
//主窗口
public class MainWindow extends JFrame implements ActionListener{
private JLabel studentName; //标签
private JLabel score;
private JTextField txfStName; //文本框
private JTextField txfScore;
private JButton callSN; //按钮
private JButton JSave;
private JPanel pan1;
private JPanel pan2;
private JTable table;
private JMenu jClass;
private JScrollPane jsPane;
private int tag = 0;
private String filePath = null;
private JMenuItem[] Jmi = new JMenuItem[10]; //定义一组菜单项
private String[] sName = new String[10]; //定义一组字符串,用于储存菜单项
的名字
private String[] fPaths = new String[10]; //储存对应菜单项的文件路径
private int tagJmi = 0;
//构造函数,初始化该组件
public MainWindow() {
studentName = new JLabel("学生姓名:");
score = new JLabel("分数:");
txfStName = new JTextField(5);
txfScore = new JTextField(5);
callSN = new JButton("随机点名");
callSN.setName("callSN");
8