Java实验4

实验内容

考试题

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

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

界面大致布局如下:

实验环境

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

实验结果

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

数据库中的内容

所有列均为varchar类型

源代码

Answer.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);
	}
}

感谢大家的观看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/801847.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【芯片设计- RTL 数字逻辑设计入门 9.1 -- CRG模块】

请阅读【芯片设计 RTL 数字逻辑设计扫盲 】 转自&#xff1a;芯片设计基础 – CRG模块 文章目录 CRG模块CRG时钟系统CRG复位系统同步复位同步复位的优点同步复位的缺点 异步复位异步复位的优点异步复位的缺点 异步复位同步释放 CRG模块 CRG是芯片里的时钟和复位生成模块&#…

27.js实现鼠标拖拽

e.offsetX是鼠标距离准确事件源的左上角距离 e.clientX是鼠标距离浏览器可视窗口左上角的距离 e.pageX是鼠标距离文档左上角的距离 /* 当鼠标点击div时开始挪动&#xff0c;当鼠标抬起&#xff0c;div静止——事件源是div 当鼠标点击后,鼠标在移动——事件源…

Web开发:卡片翻转效果(HTML、CSS)

目录 一、实现效果 二、完整代码 三、实现过程 1、页面结构 2、初始样式 3、翻转效果 4、图片大小问题 一、实现效果 如下图所示&#xff0c;当鼠标移入某个盒子&#xff0c;就反转这个盒子&#xff0c;并显示其背面的内容——卡片翻转效果&#xff1b; 卡片翻转效果 二…

【STM32 IDE】使用STM32CubeIDE创建一个工程

关于IDE的下载安装和环境配置这里暂且不介绍&#xff0c;我们直接使用STM32F407ZGT6创建工程。 这里需要注意两点&#xff1a; 创建工程时&#xff0c;默认使用最新版本的固件包&#xff08;HAL库&#xff09;&#xff0c;好像还不让更改。如果本地电脑位置没有该版本的包&…

webpack优化

优化方向 热更新 概念 /** hmr: hot module replacement 热模块替换 / 模块热更新作用&#xff1a; 一个模块发生改变&#xff0c;只会重新打包这一个模块&#xff08;而不是打包所有模块&#xff09;&#xff0c;极大的提升了构建速度样式文件&#xff1a; 可以使用hmr功能…

防火墙-NAT策略和智能选路

一、背景技术 在日常网络环境&#xff0c;内部网络想要访问外网无法直接进行通信&#xff0c;这时候就需要进行NAT地址转换&#xff0c;而在防火墙上配置NAT和路由器上有点小区别&#xff0c;思路基本一致&#xff0c;这次主要就以防火防火墙配置NAT策略为例&#xff0c;防火墙…

【学习css3】使用flex和grid实现等高元素布局

过往的实现方法是使用浮动加计算布局来实现&#xff0c;当flex和grid问世时&#xff0c;这一切将变得简单起来 一、简单的两列实现 1、先看页面效果 2、css代码 .container {padding: 10px;width: 100ch;margin: 0 auto;box-shadow: inset 0 0 0 2px #ccc;}.column {margin: 2…

git clone 报错 Unable to negotiate

Unable to negotiate with 192.168.110.10 port 39418: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc fatal: Could not read from remote repository. 查询支持哪些加密算法 ssh -Q cipher 修改文件 /etc/ssh/ssh_config…

AR0132AT 1/3 英寸 CMOS 数字图像传感器(AR0132AT6R、AR0132AT6C)适用于监控和高清视频等多种应用

AR0132AT 1/3 英寸 CMOS 数字图像传感器&#xff0c;带 1280H x 960V 有效像素阵列。它能在线性或高动态模式下捕捉图像&#xff0c;且带有卷帘快门读取。它包含了多种复杂的摄像功能&#xff0c;如自动曝光控制、开窗&#xff0c;以及视频和单帧模式。它适用于低光度和高动态范…

基于AT89C51单片机构造波形发生器设计(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于AT89C51单片机构造波形发生器设计的详情介绍&#xff0c;如果对您有帮助的话&#xff0c;还请关注一下哦&#xff0c;如果有资源方面的需要可以联系我。 目录 摘要 仿真图 总体结构框图 仿真程序效果图 原理图 代码 系统论文&#xff08;部分&…

Qcom平台通过Hexagon IDE 测试程序性能指导

Qcom平台通过Hexagon IDE 测试程序性能指导 1 安装Hexagon IDE工具2 测试工程2.1 打开Hexagon IDE2.2 新建工程2.3 添加测试案例2.3.1 方法一&#xff1a;新建2.3.2 方法二&#xff1a;拷贝 2.4 配置测试环境2.4.1 包含头文件2.4.2 添加程序优化功能(需先bulid一下)2.4.3 添加g…

【14】Github Copilot环境搭建

环境搭建 这里以Visual Studio Code为例&#xff0c;安装好vs code&#xff0c;打开扩展侧边菜单栏&#xff0c;搜索“Github Copilot”&#xff0c;会出现如下图的两个插件&#xff0c;点击安装第一个&#xff0c;另一个会附带一起安装&#xff0c;然后弹出提示重新启动vs co…

阿里云CDN- https(设计支付宝春节开奖业务)

HTTP相关概念 1. HTTP概述 http是最广泛的网络协议&#xff0c;是客户端与服务器之间的请求与应答的标准&#xff08;TCP&#xff09;&#xff0c;用于www服务器传输超文本到本地浏览器的传输协议&#xff0c;使浏览器更加高效&#xff0c;网络传输减少。 2.HTTPS概述 http…

OpenHarmony移植之编译工具链

OpenHarmony移植之编译工具链 1、下载工具链 选择适合自己芯片的arm编译工具链&#xff0c;因为我的是arm cortex-a9的芯片&#xff0c;所以我选择如下交叉工具链 Downloads | GNU-A Downloads – Arm DeveloperDownload the The GNU Toolchain for the Cortex-A Family are…

稀疏3D检测-Sparse4Dv1v2v3

0. Multi-view 3D detection LSS(Lift-Splat-Shoot)利用深度估计将图像特征提升到3D空间&#xff0c;并将特征拍到BEV平面。后续工作将lift-splats操作应用于3D检测领域。 Bevformer将时序信息以BEV特征cat一起引入时序信息。 DETR3D中通过预测的3D点投影到图像平面后获取图像…

HTTPS请求头缺少HttpOnly和Secure属性解决方案

问题描述&#xff1a; 建立Filter拦截器类 package com.ruoyi.framework.security.filter;import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.…

vue仿甘特图开发工程施工进度表

前言 本文是根据项目实际开发中一个需求开发的demo&#xff0c;仅用了elementUI&#xff0c;可当作独立组件使用&#xff0c;C V即用。 当然没考虑其他的扩展性和一些数据的校验&#xff0c;主要是提供一个处理思路&#xff0c;有需要的小伙伴可以直接复制&#xff1b;本demo的…

厂家置换电费如何达到最大化收益

新能源行业知识体系-------主目录-----持续更新https://blog.csdn.net/grd_java/article/details/140004020 文章目录 一、电能电费二、同时刻不同厂家置换&#xff0c;不会影响最终电能电费结果三、风险防范补偿和回收机制四、我们的数据如何考虑补偿和回收五、如何利用补偿和…

K8S私有云裸金属服务器负载均衡器OpenELB——筑梦之路

OpenELB介绍 OpenELB 是一个专为裸机 Kubernetes 集群设计的开源负载均衡器实现。 在云服务环境中的 Kubernetes 集群里&#xff0c;通常可以用云服务提供商提供的负载均衡服务来暴露 Service&#xff0c;但是在本地没办法这样操作。而 OpenELB 可以让用户在裸金属服务器、边缘…

二叉树问题,两种解决方法(1遍历 2直接定义名字功能递归

1第一种方法就是另写一个traverse方法&#xff0c;2第二种方法就是把函数名当成已经实现的功能&#xff0c;直接写 1、翻转二叉树 class Solution {public TreeNode invertTree(TreeNode root) {if(rootnull) return null;TreeNode leftinvertTree(root.left);TreeNode righti…