Java实验4

实验内容

考试题

要求在一个界面内至少显示5道选择题,每道题4个选项。题目从数据库读取。表结构自定义。

另有2个命令按钮,分别为"重新答题"(全部选项及正确答题数清空)和"提交"(计算),在按钮下方的标签内显示最终的正确的题目数(自动和数据库中的标准答案比对)。

界面大致布局如下:

实验环境

eclipse+MySQL8.0版本+MySQL的JDBC驱动

实验结果

如果运行之后显示空白窗口,首先检查数据库等是否正确,如果全部正确可以点击右上角最大化,刷新之后即可正常显示(不知道为什么会这样)

数据库中的内容

所有列均为varchar类型

源代码

Answer.java

java 复制代码
package lab4;
import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Answer extends JFrame
{
	public static void main(String[] args) throws SQLException
	{
		int i=0;
		String[] strla = new String[5];//存储5个题目
		String[] strbu = new String[20];//存储20个单选选项内容
		String[] str = new String[5];//存储数据库中的答案
		String[] str1 = new String[5];//存储选择的选项
		JFrame f = new JFrame("Test");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLayout(new GridLayout(12,1));
		f.setSize(1000,600);
		f.setVisible(true);
		JPanel P0 = new JPanel();P0.setLayout(new GridLayout());//面板分区
		JPanel P1 = new JPanel();P1.setLayout(new GridLayout(1,4,5,5));
		JPanel P2 = new JPanel();P2.setLayout(new GridLayout());
		JPanel P3 = new JPanel();P3.setLayout(new GridLayout(1,4,5,5));
		JPanel P4 = new JPanel();P4.setLayout(new GridLayout());
		JPanel P5 = new JPanel();P5.setLayout(new GridLayout(1,4,5,5));
		JPanel P6 = new JPanel();P6.setLayout(new GridLayout());
		JPanel P7 = new JPanel();P7.setLayout(new GridLayout(1,4,5,5));
		JPanel P8 = new JPanel();P8.setLayout(new GridLayout());
		JPanel P9 = new JPanel();P9.setLayout(new GridLayout(1,4,5,5));
		JPanel P10 = new JPanel();P10.setLayout(null);
		JPanel P11 = new JPanel();P11.setLayout(new GridLayout());
		Connection con = null;
		JLabel[] la = new JLabel[5];//题目显示
    	la[0]=new JLabel();la[1]=new JLabel();la[2]=new JLabel();la[3]=new JLabel();la[4]=new JLabel();
		JRadioButton[] bu = new JRadioButton[20];//单选显示
		for(i=0;i<20;i++)
			bu[i]=new JRadioButton();
		try
		{
			Class.forName("com.mysql.cj.jdbc.Driver");
	    	String url = "jdbc:mysql://localhost:3306/?user=root";//换成自己的mysql用户名
	    	String username = "root";	//换成自己的mysql用户名
	    	String password = "123456";	//换成自己的mysql密码
	    	con = DriverManager.getConnection(url, username, password);
	    	ResultSet re = null;
	    	PreparedStatement pre =null;
	    	String sql = "select * from stusys.ans";//换成自己的数据库名.表名
	    	pre = con.prepareStatement(sql);
	    	re = pre.executeQuery();
			i=0;
			while(re.next())
			{
				strla[i]=re.getString("question");
				strbu[4*i]=re.getString("A");
				strbu[4*i+1]=re.getString("B");
				strbu[4*i+2]=re.getString("C");
				strbu[4*i+3]=re.getString("D");
				str[i]=re.getString("answer");
				i++;
			}
			pre.close();
			re.close();
		}
		catch(Exception e)
	    {
	    	e.printStackTrace();
	    	System.out.println("操纵数据库时发生未知错误");
	    }
		finally
	    {
	    	if(con!=null)
	    		con.close();
	    }
		for(i=0;i<5;i++)//给每个题设置内容和选项内容
		{
			la[i].setText("题目"+(i+1)+":"+strla[i]);
			la[i].setFont(new Font("Dialog",1,20));
			bu[4*i].setText("A."+strbu[4*i]);
			bu[4*i].setFont(new Font("Dialog",1,20));
			bu[4*i+1].setText("B."+strbu[4*i+1]);
			bu[4*i+1].setFont(new Font("Dialog",1,20));
			bu[4*i+2].setText("C."+strbu[4*i+2]);
			bu[4*i+2].setFont(new Font("Dialog",1,20));
			bu[4*i+3].setText("D."+strbu[4*i+3]);
			bu[4*i+3].setFont(new Font("Dialog",1,20));
		}
    	ButtonGroup group1 = new ButtonGroup();//每一题的四个选项为一组
    	for(i=0;i<4;i++)
    		group1.add(bu[i]);
		ButtonGroup group2 = new ButtonGroup();
		for(i=4;i<8;i++)
    		group2.add(bu[i]);
		ButtonGroup group3 = new ButtonGroup();
		for(i=8;i<12;i++)
    		group3.add(bu[i]);
		ButtonGroup group4 = new ButtonGroup();
		for(i=12;i<16;i++)
    		group4.add(bu[i]);
		ButtonGroup group5 = new ButtonGroup();
		for(i=16;i<20;i++)
    		group5.add(bu[i]);
	JButton b1 = new JButton("重新答题");//重新答题按钮
	b1.setFont(new Font("Dialog",1,20));
	b1.setBounds(250, 0, 200, 40);
	JButton b2 = new JButton("提交");//提交按钮
	b2.setFont(new Font("Dialog",1,20));
	b2.setBounds(550, 0, 200, 40);
	JLabel show = new JLabel("答对的题目数量是:0");
	show.setFont(new Font("Dialog",1,20));
	P0.add(la[0]);//添加题目和选项
	for(i=0;i<4;i++)
		P1.add(bu[i]);
	P2.add(la[1]);
	for(i=4;i<8;i++)
		P3.add(bu[i]);
	P4.add(la[2]);
	for(i=8;i<12;i++)
		P5.add(bu[i]);
	P6.add(la[3]);
	for(i=12;i<16;i++)
		P7.add(bu[i]);
	P8.add(la[4]);
	for(i=16;i<20;i++)
		P9.add(bu[i]);
	P10.add(b1);P10.add(b2);//添加重新答题和提交按钮
	P11.add(show);
	f.add(P0);f.add(P1);//将各个面板添加到顶级容器中
    f.add(P2);f.add(P3);
    f.add(P4);f.add(P5);
    f.add(P6);f.add(P7);
    f.add(P8);f.add(P9);
    f.add(P10);f.add(P11);
    MouseListener lisb1 = new MouseListener()//重新答题按钮功能实现
	{
		@Override
		public void mouseClicked(MouseEvent e)
		{
				group1.clearSelection();
    			group2.clearSelection();
    			group3.clearSelection();
    			group4.clearSelection();
    			group5.clearSelection();
    			for(int i=0;i<5;i++)
    				str1[i]=null;
    			int ans=0;
    			String Ans = String.valueOf(ans);
    			show.setText("答对的题目数量是:"+Ans);
    			show.setFont(new Font("Dialog",1,20));
		}
		@Override
		public void mousePressed(MouseEvent e) {
			// TODO 自动生成的方法存根
		}
		@Override
		public void mouseReleased(MouseEvent e) {
			// TODO 自动生成的方法存根
		}
		@Override
		public void mouseEntered(MouseEvent e) {
			// TODO 自动生成的方法存根
		}
		@Override
		public void mouseExited(MouseEvent e) {
			// TODO 自动生成的方法存根
		}
	};
    MouseListener lisb2 = new MouseListener()//提交按钮功能实现
    {
		@Override
		public void mouseClicked(MouseEvent e)
		{
			int i=0,j=0,ans=0;
			for(i=0;i<5;i++)
			{
				if(bu[4*i].isSelected())
				{
					str1[j]="A";
					j++;
				}
				if(bu[4*i+1].isSelected())
				{
					str1[j]="B";
					j++;
				}
				if(bu[4*i+2].isSelected())
				{
					str1[j]="C";
					j++;
				}
				if(bu[4*i+3].isSelected())
				{
					str1[j]="D";
					j++;
				}
			}
			for(i=0;i<5;i++)
			{
				if(str[i].equals(str1[i]))
					ans++;
			}
			String Ans = String.valueOf(ans);
			show.setText("答对的题目数量是:"+Ans);
			show.setFont(new Font("Dialog",1,20));
		}
		@Override
		public void mousePressed(MouseEvent e) {
			// TODO 自动生成的方法存根
		}
		@Override
		public void mouseReleased(MouseEvent e) {
			// TODO 自动生成的方法存根
		}
		@Override
		public void mouseEntered(MouseEvent e) {
			// TODO 自动生成的方法存根
		}
		@Override
		public void mouseExited(MouseEvent e) {
			// TODO 自动生成的方法存根
		}
    };
    b1.addMouseListener(lisb1);
    b2.addMouseListener(lisb2);
	}
}

感谢大家的观看

相关推荐
爆炒的番茄1 分钟前
初识C++(二)
开发语言·c++·算法
黄卷青灯774 分钟前
c++ vector类 和 eigen库 处理向量的区别 列出代码举例
开发语言·c++·vector·eigen
闲人编程8 分钟前
Python 实现 LM 算法(Levenberg-Marquardt)
开发语言·python·算法·优化·梯度下降·拟合·lm
cwywsx10 分钟前
C++:二叉搜索树
开发语言·c++·算法
神奇夜光杯18 分钟前
Python酷库之旅-第三方库Pandas(117)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
小丑西瓜66629 分钟前
c++智能指针
开发语言·c++·学习·基础语法·智能指针
码农探知30 分钟前
黑马程序员Java笔记整理(day01)
java
爱是小小的癌36 分钟前
C语言自定义类型-联合与枚举
c语言·开发语言
Flying_Fish_roe39 分钟前
Spring Boot-Swagger相关问题
java·spring boot·后端
hac132242 分钟前
HashMap线程不安全|Hashtable|ConcurrentHashMap
java·开发语言·安全