Java实验4

news2024/11/14 12:08:42

实验内容

考试题

要求在一个界面内至少显示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);
	}
}

感谢大家的观看

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024最新最全MidJourney新手入门教程 参数设置教程

文章目录 MJ的基本使用提示词基本提示高级提示提示说明提示词分类Vary Region多提示分割 MJ 命令blenddescribeinfosettingshorten MJ 参数Aspect Ratios 横纵比Chaos 混乱程度Character Reference 引用图像no 不包含Quality 质量Repeat 重复Seeds 种子Stop 停止Sytle 风格Styl…

W外链创建抖音私信卡片教程,私信卡片跳转微信工具

W外链地址wai.cn 在数字化时代的浪潮中&#xff0c;私域流量的价值愈发凸显&#xff0c;成为企业获取用户、建立品牌忠诚度、提升转化率的关键手段。抖音&#xff0c;作为当下最热门的短视频社交平台之一&#xff0c;其用户基数庞大、互动性强&#xff0c;为企业私域引流提供了…

自己搭建邮件服务器时如何保障数据安全性?

自己搭建邮件服务器的要求&#xff1f;如何正确配置邮件服务器&#xff1f; 自己搭建邮件服务器成为许多企业和个人用户的选择&#xff0c;以实现更高的自主性和定制化需求。下面&#xff0c;AokSend将从几个方面探讨如何在自己搭建邮件服务器的过程中&#xff0c;有效保障数据…

哈默纳科HarmonicDrive减速机组装注意事项

在机械行业中&#xff0c;精密传动设备HarmonicDrive减速机对于维持机械运作的稳定性和高效性起着至关重要的作用。然而在减速机的组装过程中&#xff0c;任何一个细微的错误都可能导致其运转时出现振动、异响等不良现象&#xff0c;严重时甚至可能影响整机的性能。因此&#x…

内衣裤洗衣机有必要买吗?五样超卓臻品专业推荐!

在当今繁忙的生活中&#xff0c;内衣洗衣机已成为我们日常生活中不可或缺的家电。但是&#xff0c;面对市场上众多品牌的内衣洗衣机&#xff0c;那么&#xff0c;到底内衣洗衣机哪个牌子好&#xff1f;本次我将在这篇文章中探讨内衣洗衣机的选购策略&#xff0c;以帮助大家找到…

软件测试好就业吗?软件测试行业的就业前景分析

一、软件测试的重要性 在当今信息化的时代&#xff0c;软件产品的质量至关重要。随着软件行业的蓬勃发展&#xff0c;软件测试作为保障软件质量的关键环节&#xff0c;其重要性日益凸显。软件测试工程师的角色不再仅仅局限于找出软件的缺陷&#xff0c;他们更是软件质量保障的守…

Adobe XD中文设置指南:专业设计师的现场解答

Adobe XD是世界领先的在线合作UI设计工具。它摆脱了Sketch、Figma等传统设计软件对设备的依赖&#xff0c;使设计师可以随时随地使用任何设备打开网页浏览器&#xff0c;轻松实现跨平台、跨时空的设计合作。然后&#xff0c;为了提高国内设计师的使用体验&#xff0c;Adobe XD如…

Django F()函数

F()函数的作用 F()函数在Django中是一个非常强大的工具&#xff0c;主要用于在查询表达式中引用模型的字段。它允许你在数据库层面执行各种操作&#xff0c;而无需将数据加载到Python内存中。这不仅提高了性能&#xff0c;还允许你利用数据库的优化功能。 字段引用 在查询表达…

《藏语翻译通》App功能升级,支持藏文词典在线查单词!iPhone用户推荐使用的藏语学习工具!

《藏语翻译通》App上线了藏文词典查单词功能&#xff0c;该功能可以帮助你更有效地学习藏语&#xff0c;以及掌握工作中涉及到的专业术语。本次更新提供了藏汉词典、藏汉大词典、新术语在线查单词功能。 打开App Store搜索关键词&#xff1a;藏文词典 下载这个官方软件 点击首…

如何理解Spring事务

1 Spring事务是干什么的&#xff0c;解决了什么 Spring事务其实准备来讲叫Spring事务管理&#xff0c;拿mysql来说&#xff0c;事务已在其默认引擎innodb中实现了&#xff0c;我们是通过它提供的sql指令去开启事务、提交/回滚事务。 那么有的疑问是什么呢&#xff1f; 事务不…

企业资源管理的变革:ERP软件的消失与整合型OA系统的崛起

企业资源管理在现代企业运营中起着至关重要的作用。过去&#xff0c;ERP&#xff08;Enterprise Resource Planning&#xff0c;企业资源计划&#xff09;系统因其强大的整合能力和广泛的功能性&#xff0c;被誉为企业管理的中枢。然而&#xff0c;随着技术的迅猛发展和企业需求…

黑马头条微服务学习day02-app端文章查看,静态化freemarker,分布式文件系统MinlO

文章目录 app端文章列表需求分析实现思路实现步骤编写mapper文件编写控制器代码 文章详情实现思路FreemarkerminIO app端文章列表 需求分析 实现思路 实现步骤 ArticleHomeDto package com.heima.model.article.dtos;import lombok.Data;import java.util.Date;Data public c…

某oa代码审计

简介 这次是一次网盘搜索找到的代码。原本因为要下载一些资源顺手充了个网盘会员&#xff0c;结果发现意外的发现网盘搜索出来的资源还挺丰富。于是便开始搜索一些源码。。。 然后安装完毕之后进入web目录中&#xff0c;将web目录单独打包出来。 ps: 由于源码貌似是个备份文件…

超详细Python安装教程(包含python解释器和pycharm)

目录 一&#xff0c;安装python解释器 二&#xff0c;安装PyCharm开发工具 一&#xff0c;安装python解释器 下载地址&#xff1a;https://www.python.org/downloads/ 如果是在windows上下载的话&#xff0c;选择Downloads->Windows 我选择了最新版本的64位安装&#xf…

46 mysql 客户端拿不到具体的错误信息

前言 这是最近碰到的一个问题 同样的一个 环境的问题, 在正常的 mysql 环境会返回 具体的错误信息, 然后 在我的另外一个环境里面 只能返回一些 unknown error 之类的 十分抽象的环境 然后 我们这里 来看一下 具体的情况 我们这里从 错误的环境 往前推导 来查看 并解决这个…

低代码引时代浪潮,校企合作实训共筑未来蓝图

荣誉在身&#xff0c;责任在肩。 为贯彻国家科教兴国战略&#xff0c;充分发挥技术、人才等资源优势&#xff0c;提升学校科研能力与企业技术管理水平。2024年4月&#xff0c;山东建筑大学联合织信低代码正式签署“校企合作协议”&#xff0c;共同构建产学研联盟创新体系&…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(二)——带着问题的学习;一刷感受;环境搭建

按照作者在读者寄语中的说法&#xff1a;我们得榨干这本书的知识。 带着问题 为了更好的学习&#xff0c;我们最好带着问题去探索。 第一&#xff1a;核心问题与基础知识 如上图&#xff1a;这本书介绍了SLAM相关的核心问题和基础知识。王谷博士给我们做了梳理&#xff1a;…

鸿蒙语言基础类库:【@system.file (文件存储)】

文件存储 说明&#xff1a; 从API Version 6开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.fileio]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import file from system.file;f…

OpenCV下的单目标定,双目标定与立体校正(calibrateCamera, stereoCalibrate and stereoRectify)

OpenCV下的单目标定&#xff0c;双目标定与立体校正(calibrateCamera, stereoCalibrate and stereoRectify) 文章目录 1. 杂话2. 单目标定2.1 先看代码2.2 一点解释2.3 calibrateCamera参数 3. 双目标定3.1 先看代码3.2 stereoCalibrate参数 4. 立体校正4.1 先看代码4.2 一点解…

U盘RAW状态深度解析与高效恢复策略

一、U盘RAW状态探秘&#xff1a;数据访问的隐形壁垒 在数字化时代&#xff0c;U盘作为我们日常生活中不可或缺的数据存储工具&#xff0c;承载着大量的重要信息与文件。然而&#xff0c;当U盘突然变为RAW格式时&#xff0c;这些宝贵的数据便仿佛被无形的屏障所隔离&#xff0c…