利用GUI编写答题系统

介绍:

本次,制作答题系统,要求能够重置题目,提交题目,显示题目,一个页面至少含有五个题目。

照片展示

1.主界面:

代码部分:

数据库操作:

import java.sql.*;
import java.util.Scanner;

public class SQL {
    public Connection conn = null;   //各个数据库资源初始化
    public PreparedStatement psm = null;
    public Statement stm = null;
    public ResultSet rs = null;
    public String user = "root";    //用户和密码
    public String password = "123456";
    public  String url = "jdbc:mysql://localhost:3306/timu?serverTimezone=GMT%2B8&userSSL=false";  //连接数据库的地址

    public SQL() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");   //加载驱动
            conn = DriverManager.getConnection(url, user, password);   //建立连接
        } catch (ClassNotFoundException | SQLException ex) {
            ex.printStackTrace();
        }
    }

    public ResultSet select(){
        try {
            String sql = "SELECT * FROM select_data";     //SQL语句
            psm = conn.prepareStatement(sql);
            rs = psm.executeQuery();                 //执行sql语句
            return rs;
        } catch (SQLException e) {
            System.out.println("操作异常");
            e.printStackTrace();
            return null;
        }
    }
}

 这是连接数据库以及读取出数据库内题目的代码,会返回一个结果集。

主函数:

public class Main {
    public static void main(String[] args) {

        SQL sql = new SQL();        //创建SQL对象,对数据库进行操作

        Menu menu = new Menu(sql.select());     //创建一个界面类对象,生成GUI界面。
    }
}

 界面设计:

1.定义所需要的变量。

public String label = null;
public ResultSet rs = null;
public ButtonGroup[] buttonGroups = new ButtonGroup[101];
public JRadioButton[] jRadioButtons = new JRadioButton[401];
public JLabel[] jLabels = new JLabel[101];
public String[] result = new String[101]; 

2.重写构造函数

public Menu(ResultSet rs) {
    this.rs = rs;
    createMenu();
}

3.设计界面过程以及显示操作过程。

public void createMenu() {                              //界面创建
    JFrame jf = new JFrame("题目界面");              //创建页面
    jf.setSize(1000, 800);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置可关闭
    jf.setLocationRelativeTo(null);//窗口居中
    jf.setLayout(null);     //自定义界面
    jf.setVisible(true);
    jf.setResizable(false);

    JLabel demo01 = new JLabel();                        //标题
    jf.add(demo01);
    demo01.setText("答题系统");
    demo01.setFont(new Font("微软雅黑", Font.BOLD,50));
    demo01.setBounds(400,50,400,80);

    JLabel demo02 = new JLabel();                       //说明
    jf.add(demo02);
    demo02.setText("(答题期间不能切换屏幕,否则系统将会给予警告!)");
    demo02.setFont(new Font("微软雅黑",Font.BOLD,20));
    demo02.setBounds(260,130,600,50);

    JScrollPane js = new JScrollPane();                 //滚动条
    js.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    js.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    js.setBounds(10,200,980,450);

    JPanel jp = new JPanel();           //创建一个子页面,存放题目
    js.setViewportView(jp);

    jf.add(js);
    jp.setLayout(null);
    js.setVisible(true);


    int i = 0;
    int j = 0;
    int sum = 0;
    try {
        while (rs.next()){                  //生成题目,并且创建单选选择题
            int x = 50;
            jLabels[i] = new JLabel(String.valueOf(i + 1) + "、" + rs.getString("tihao"));     //题目
            jp.add(jLabels[i]);
            jLabels[i].setBounds(20,i*90,600,40);
            jLabels[i].setFont(new Font("微软雅黑",Font.BOLD,20));

            result[i] = rs.getString("result");      //存结果

            buttonGroups[i] = new ButtonGroup();        //组

            jRadioButtons[j] = new JRadioButton("A." + rs.getString("timuA"));      //选项
            jp.add(jRadioButtons[j]);
            buttonGroups[i].add(jRadioButtons[j]);
            jRadioButtons[j].setActionCommand(rs.getString("timuA"));
            jRadioButtons[j].setBounds((j % 4)*200 + 20,i*90 + 40,200,30);
            jRadioButtons[j++].setFont(new Font("微软雅黑",Font.BOLD,20));

            jRadioButtons[j] = new JRadioButton("B." + rs.getString("timuB"));
            jp.add(jRadioButtons[j]);
            buttonGroups[i].add(jRadioButtons[j]);
            jRadioButtons[j].setActionCommand(rs.getString("timuB"));
            jRadioButtons[j].setBounds((j % 4)*200 + 20,i*90 + 40,200,30);
            jRadioButtons[j++].setFont(new Font("微软雅黑",Font.BOLD,20));

            jRadioButtons[j] = new JRadioButton("C." + rs.getString("timuC"));
            jp.add(jRadioButtons[j]);
            buttonGroups[i].add(jRadioButtons[j]);
            jRadioButtons[j].setActionCommand(rs.getString("timuC"));
            jRadioButtons[j].setBounds((j % 4)*200 + 20,i*90 + 40,200,30);
            jRadioButtons[j++].setFont(new Font("微软雅黑",Font.BOLD,20));

            jRadioButtons[j] = new JRadioButton("D." + rs.getString("timuD"));
            jp.add(jRadioButtons[j]);
            buttonGroups[i].add(jRadioButtons[j]);
            jRadioButtons[j].setActionCommand(rs.getString("timuD"));
            jRadioButtons[j].setBounds((j % 4)*200 + 20,i*90 + 40,200,30);
            jRadioButtons[j++].setFont(new Font("微软雅黑",Font.BOLD,20));

            i++;
            sum++;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    jp.setPreferredSize(new Dimension(600,sum*90));

    JButton jButton = new JButton("提交");        //提交按钮
    jf.add(jButton);
    jButton.setFont(new Font("微软雅黑",Font.BOLD,20));
    jButton.setBounds(150,670,80,40);

    JButton jButton01 = new JButton("重新答题");        //重置按钮
    jf.add(jButton01);
    jButton01.setFont(new Font("微软雅黑",Font.BOLD,20));
    jButton01.setBounds(400,670,120,40);

    JLabel jLabel = new JLabel();                //显示答对的题目标签
    jf.add(jLabel);
    jLabel.setText("答对的问题数: ");
    jLabel.setFont(new Font("微软雅黑",Font.BOLD,23));
    jLabel.setBounds(650,670,230,40);

    int finalSum = sum;
    jButton01.addActionListener(new AbstractAction() {      //重置事件
        @Override
        public void actionPerformed(ActionEvent e) {
            for (int k = 0; k < finalSum; k++){
                buttonGroups[k].clearSelection();
            }
            jLabel.setText("答对的问题数: ");
            jf.setVisible(false);
            jf.setVisible(true);
        }
    });
    jButton.addActionListener(new AbstractAction() {      //提交事务
        @Override
        public void actionPerformed(ActionEvent e) {
            int score = 0;
            int idx = 0;
            for (int k = 0;k < finalSum;k++){
                if (buttonGroups[k].getSelection() == null){
                    JOptionPane.showMessageDialog(null,"有部分题目没有选择,请仔细检查后重新提交!");
                    idx = 1;
                    break;
                }
                if (buttonGroups[k].getSelection().getActionCommand().equals(result[k])){
                    score++;
                }
            }
            System.out.println(score);
            if (idx == 0){
                int i = JOptionPane.showConfirmDialog(null,"你是否要提交吗,提交后成绩不能修改!",
                        "请确定",JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
                if (i == 0){
                    jLabel.setText("答对的问题数: " + String.valueOf(score));
                }
            }
        }
    });

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿柒爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值