资源描述
基于J2EE的电子地图的实现试卷生成系统的设计与开发摘要随着社会的开展和教育制度的改革,在现代教学领域中,各个学科的信息量越来越大,导致用于考核学生学习效果的试卷生成工作的复杂性也越来越大,传统手写出题方式已经越来越不能适应现代教育模式的需要。因此,为了减轻教师的工作负担、提高工作效率,同时使生成的试卷更加公正、客观地评价学生的学习效果,有必要开发一个适合教师需求的高效率的试卷生成系统。试卷生成系统可对试题实行科学的管理,利用现代电脑功能强大、运算速度快的优点,对试题进行集中、有序、有效的管理,更新方便、查询快捷、组卷灵活还可在组卷结束后通过打印机直接打印成试卷,大大降低了劳动强度,需用密码登录系统,具有一定的平安性。本系统使用 swing+JavaBean+servlet技术实现MVC三层结构设计,并结合mysql 数据库设计开发的一个基于C/S架构的试卷生成系统。关键词:C/S架构 试卷生成 swing JavaBean mysqlDesign and Realization of Public Transport Inquiry System Based on J2EEAbstractUrban public transportation is an important part in traffic and transportation domain, and its also the inevitable result of social economys development in urban areas. As an important part of urban transportation system, urban public transportation system is acting a key role in human living, in social production and in transportation domain .But the inquiry system of public transportation developments in our country is in a comparatively backward level. The general passengers have less way to obtain the information. In order to solve this kind of problem, an inquiry system of public transport based on J2EE is designed.The thesis has introduced the realized functions of entire system in detail. Firstly, the system has realized many inquiry functions. The system can search bus route by the name of business mansion, the number of public transport, ordinary bus station and two arbitrary stations. Secondly, the system uses the shortest path algorithm to find the shortest travel routes between any two stations. Finally, the system provides the functions of consumer message, the bus number managing on the backstage and the consumer managing. The function of consumer message mainly collects suggestions from consumer to modify and perfect the system functions. The function of user managing is to delete user information mainly and revises the fundamental user information. The functions of bus number managing are mainly to add, update and delete the bus number and the station on the backstage. These can enable the system have the quality of real-time updating to provide the accurate information for user.Key words:J2EE; Shortest path algorithm; public transport inquiry目 录论文总页数:30页1 引言11.1 选题背景11.2 工程的主要研究工作21.3 开发环境22 理论根底22.1 概念22.1.1 J2EE的概念22.1.2 JSP的概念32.1.3 Java Bean的概念32.1.4 Java Servlet的概念32.1.5 Session对象32.2 J2EE的结构32.3 J2EE的容器类型42.4 J2EE的体系与模式42.4.1 J2EE的体系(分布式计算)42.4.2 J2EE的模式43 电子地图功能分析43.1 电子地图系统的需求43.1.1 系统需求描述43.1.2 系统数据流图53.2 电子地图系统的功能53.3 电子地图系统的数据库设计63.3.1 E-R图63.3.2 数据库表设计74 电子地图系统的设计与实现94.1 创立管理员登录的Servlet94.2 创立用户登录的Servlet114.3 电子地图查询模块12商厦查询124.3.2 车次信息查询154.3.3 站点信息查询174.3.4 两个站点间的信息查询184.4 电子地图添加模块234.4.1 添加车次234.4.2 添加站点244.5 电子地图删除模块244.5.1 删除车次244.5.2 删除站点254.6 电子地图更新模块254.7 电子地图留言板模块264.7.1 发表留言264.7.2 查看留言264.7.3 删除留言275 系统测试与分析27结 论28参考文献28致 谢29声 明301 前 言1.1工程背景随着教育机制竞争压力的增大,各个学校都加强了对学生考核制度的改革,逐步建立了完善的考试系统。为了给学生提供更多的测试培训时机,需要提供不同类型的试卷,但这却增加了教师在出卷过程中的工作负担。因此,为了减轻了教师及教务部门的工作量,提高工作效率,开发试卷生成系统来满足这些条件是非常有必要的。现在,各种网上教育系统也日趋成熟,这就给试卷生成系统提出了更高的要求,使得其不但要具有组卷生成的功能,还得使试卷生成系统具有完善的题库管理及应用功能,使其方便实用、操作简单等等。这些主要表达在题库的灵活多变,考题可以随机抽取,并能自动组卷,从而方便了教师进行试卷的排版处理及打印。1.2 工程开发意义和目的计算机作为数据处理系统,已逐渐成为试卷编辑的重要手段。特别是随着Internet的快速开展,以及WORD在文档排版工作中的广泛应用,使得这些技术在试卷编辑管理中发挥着重要的作用。试卷生成系统有助于实现“考教别离,客观公正地评价学生的学习状况,它不仅可以减轻教师的重复劳动, 提高工作效率, 而且防止了人工组卷时出错,使试卷生成过程可以轻松进行。它更是学校实现考务自动化, 管理数字化、信息化的标志,有助于对试卷进行统一管理,方便对试卷的分析,进一步提高教学质量。1.3 开发环境开发工具:MyEclipse 8.6。运行环境:JSDK 1.5.0_04虚拟机。数据库:MYSQL 5。操作系统:Windows 7。所需内存:2G。2 理论根底2.1 概念2.1.1 J2SE的概念Standard Edition(标准版) J2SE 包含那些构成Java语言核心的类。比方:数据库连接、接口定义、输入/输出、网络编程 Enterprise Edition(企业版) J2EE 包含J2SE 中的类,并且还包含用于开发企业级应用的类。比方:EJB、servlet、JSP、XML、事务控制 Micro Edition(微缩版) J2ME 包含J2SE中一局部类,用于消费类电子产品的软件开发。比方:呼机、智能卡、 、PDA、机顶盒 简单讲就是: J2SE: java 2 Standard edition (java 2 标准版) J2EE: java 2 enterprise edition( Java 2 企业版) J2ME: java 2 micro edition (Java 2 微缩版) 他们的范围是:J2SE包含于J2EE中,J2ME包含了J2SE的核心类,但新添加了一些专有类 应用场合,API的覆盖范围各不相同。 笼统的讲,可以这样理解:J2SE是根底;压缩一点,再增加一些CLDC等方面的特性就是J2ME;扩充一点,再增加一些EJB等企业应用方面的特性就是J2EE。 补充一点J2EE更恰当的说,应该是JAVA2企业开发的技术标准,不仅仅是比标准版多了一些类。J2EE又包括许多组件,如Jsp, Servlet, JavaBean, EJB, JDBC, JavaMail等。 J2SE商业版本,标准版本 (Java2 Standard Edition) 定位在客户端,主要用于桌面应用软件的编程。 J2SE 包含那些构成Java语言核心的类。 比方:数据库连接、接口定义、输入/输出、网络编程 J2SE 是J2EE的根底,他大量的JDK代码库是每个要学习J2EE的编程人员必须掌握的。 从JDK 5.0开始,不再叫J2SE,改名为 Java SE了,因为那个2已经失去了其应该有的意义。2.1.2 Java Bean的概念JavaBean是一种JAVA语言写成的可重用组件,用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。这个对J2EE业务逻辑层处理具有相当重要的局部。2.1.3 swing的概念Swing是一个用于开发Java应用程序2.1.5 mysql简介MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2021年1月16号被Sun公司收购。而2021年,SUN又被Oracle收购。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内。这样就增加了速度并提高了灵活性。MySQL的SQL“结构化查询语言。SQL是用于访问数据库的最常用标准化语言。MySQL软件采用了GPLGNU通用公共许可证。由于其体积小、速度快、总体拥有本钱低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有本钱而选择了MySQL作为网站数据库。2.2 C/S结构介绍2.2.1 什么是c/s和b/sC/S Client/Server结构 即客户机和效劳器结构。它是将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。效劳器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。B/SBrowser/Server结构 即浏览器和效劳器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改良的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,结合浏览器的多种Script语言(VBScript、JavaScript)和ActiveX技术,通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,极少局部事务逻辑在前端Browser实现,但是主要事务逻辑在效劳器端Server实现,形成所谓三层3-tier结构。在这种结构下,客户机上只要安装一个浏览器Browser,如Netscape Navigator或Internet Explorer,效劳器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过eb Server 同数据库进行数据交互。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的本钱和工作量,降低了用户的总体本钱TCO,是一种全新的软件系统构造技术。随着Windows 98/Windows 2000将浏览器技术植入操作系统内部,这种结构更成为当今应用软件的首选体系结构。2.2.2 c/s和b/s 的区别Client/Server是建立在局域网的根底上的,Browser/Server是建立在广域网的根底上的。C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门效劳器提供连接和数据交换效劳。B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例如 上网, 租用设备, 信息自己管理,有比C/S更强的适应范围,一般只要有操作系统和浏览器就行。2.2.3 c/s和b/s 的比拟C/S 的优点 :是能充分发挥客户端的处理能力,很多工作可以在客户端处理后再提交给效劳器。对应的优点就是客户端响应速度快。缺点主要有以下几个:采用Intranet技术,适用于局域网环境可连接用户数有限,当用户数量增多时,性能会明显下降客户端都要安装应用程序系统扩展维护复杂、代码可重用性差、开发费用较低,开发周期较短只适用于局域网。而随着互联网的飞速开展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级本钱非常高。对客户端的操作系统一般也会有限制。可能适应于Win98, 但不能用于win2000或Windows XP。或者不适用于微软新的操作系统等等,更不用说Linux、nix等。B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。系统的扩展非常容易,只要能上网,再由系统管理员分配一个用户名和密码,就可以使用了。采用Internet/Intranet技术,适用于广域网环境支持更多的客户。可根据访问量动态配置WEB效劳器、应用效劳器,以保证系统性能。客户端只需标准的浏览器采用面向对象技术,代码可重用性好, 系统扩展维护简单 开发费用较高,开发周期较长3 在线题库系统功能分析3.1 在线题库系统的需求3.1.1 系统需求描述本系统由教师根据教学资料录入试题,并对其进行分类。待需要考试时,设定好一定的条件,系统就从题库中选取试题自动生成统一格式的考试试卷。从教师的使用角度出发,本着以简单方便、提高工作效率的原那么,系统应具有以下特点: 确保系统具有良好的系统性能,友好的用户界面。 简单快捷的自动组卷方式。 试卷的保密性要求,只有授权人员才能生成和查阅试卷。 生成的试卷按照规定的模板输出。 较高的处理效率,便于使用和维护。 采用成熟技术开发,使系统具有较高的技术水平和较长的生命周期。 系统尽可能简化使用者的重复工作,提高工作效率。3.1.2 系统数据流图管理员用户添加,修改,删除,生成试卷生成题库管理试卷管理查看,修改管理用户添加,修改,删除图3.1 系统数据流图3.2 在线题库系统的功能1管理员对用户进行管理。2用户可以添加,查询,删除选择题。3用户可以添加,查询,删除填空题。4用户可以添加,查询,删除简答题。5用户可以根据自己的需求选择性生成试卷。6可以修改已经从题库中选择的题型。7可以生成试卷。8用户登录验证功能。9用户注册信息功能。10可以查看生成的试卷。11可以导出试卷。 12可以查看所有试题。13管理员登录验证功能。14用户注销功能。3.3 在线题库系统的数据库设计3.3.1 E-R图 pwd name id user图3.2 用户实体及属性 pwd name id admin图3.3 管理员实体及属性chapter title type idanswer choose degree Option2 Option3 Option1 Option4图3.4 选择题实体及属性Option1 id title answer type fill chapter degree图3.4 填空题实体及属性Option1 id title answer type sketch chapter degree图3.4 解答题实体及属性3.3.2 数据库表设计1用户表user如表3.1表3.1 用户表信息列名中文名称数据类型长度允许空id顺序号int50Not nullname用户名varchar50Not nullpwd用户密码varchar50Not null2管理员表admin如表3.2表3.2 管理员信息列名中文名称数据类型长度允许空id顺序号int50Not nullname管理员名Varchar50Not nullpwd密码varchar50Not null3选择题信息表 choose(如表3.3)表3.3 选择题信息表列名中文名称数据类型长度允许空id顺序号int4Not nulltype类型varchar50Not nulltitle题目varchar50Not nullOption1选项一varchar50nullOption2选项二varchar50nullOption3选项三varchar50nullOption4选项四varchar50Not nullanswer答案varchar50nullDegree难度varchar50nullchapter章节varchar50null4填空题信息表fill(如表3.4)表3.4 填空题信息表列名中文名称数据类型长度允许空id顺序号int4Not nulltype类型varchar50Not nulltitle题目varchar50Not nullOption1描述varchar50nullanswer答案varchar50nullDegree难度varchar50nullchapter章节varchar50null5简单题信息表sketch(如表3.5)表3.5 简答题信息表列名中文名称数据类型长度允许空id顺序号int4Not nulltype类型varchar50Not nulltitle题目varchar50Not nullOption1描述varchar50nullanswer答案varchar50nullDegree难度varchar50nullchapter章节varchar50null4 在线题库系统的设计与实现4.1 创立登录界面1翻开MyEclipse工具,新建一个LoginFrame类(如图4.1)图4.1 创立登录界面LoginFrame(2) 在已创立好的LoginFrame类中,对Loginframe里面的按钮进行监听,如果登录的是管理员,就和管理员表里的数据进行比照,成功的话就可以登录,否那么就显示相应的信息。同理,如果是普通用户登录,就和user表里的数据进行比照。 登录界面(如图4.2)图4.2 管理员登录界面相应代码:public void actionPerformed(ActionEvent e) if(e.getSource()=jb2)System.exit(0);elseString name = jf1.getText().trim();String password = jf2.getText().trim();String type = jcb.getSelectedItem().toString().trim();if(name.length()=0)JOptionPane.showMessageDialog(this, 姓名不能为空);return;if(password.length()=0)JOptionPane.showMessageDialog(this, 密码不能为空);return;try if(type.equals(普通用户)userDAO = new UserDAO();User user = userDAO.findStudentByName(name);String pwd = ;if(user = null)JOptionPane.showMessageDialog(this, 对不起,没有您的信息);return;pwd = user.getPwd();if(!pwd.equals(password)JOptionPane.showMessageDialog(this, 对不起,密码错误);return;DefineUser.identity =普通用户;this.dispose();new MainInsterface().setVisible(true);elseadminDAO = new AdminDAO();Admin admin = adminDAO.findStudentByName(name);String pwd = ;if(admin = null)JOptionPane.showMessageDialog(this, 对不起,没有您的信息);return;pwd = admin.getPwd();if(!pwd.equals(password)JOptionPane.showMessageDialog(this, 对不起,密码错误);return;DefineUser.identity =管理员;this.dispose();new MainInsterface().setVisible(true); catch (SQLException e1) e1.printStackTrace();4.2 管理员1翻开MyEclipse开工具,新建一个AdminFrame类(如图4.3)图4.3 创立管理员管理界面AdminFrame类(2) 与登录界面一样,管理员的主界面是用于向管理员展示功能的界面,当管理员通过登录界面的验证以后就跳入这个界面,这个界面上有很多按钮,分别对应管理员的不同功能。 管理员界面(如图4.4)图4.4 管理员界面(3) 管理员可以管理用户,在这个界面里,管理员可以管理普通用户,对普通用户进行增删改查用户管理界面如图4.5图4.4 用户管理界面相关代码:public void actionPerformed(ActionEvent e) if(e.getSource()= button_1)new ChooseAddDialog(this, 增加试题, true);chooseModel = new ChooseModel();table.setModel(chooseModel);else if(e.getSource()= button)String title = textField.getText().trim();if(title.length()=0)JOptionPane.showMessageDialog(this, 查询条件为空);return;String sql = select * from choose where title like %+title+%;chooseModel = new ChooseModel(sql);table.setModel(chooseModel);else if(e.getSource()= button_2)int rownum=table.getSelectedRow();if(rownum=-1)JOptionPane.showMessageDialog(this, 请选择你要修改的试题);return;new ChooseUpdateDialog(this, 更改试题, true,chooseModel,rownum);chooseModel = new ChooseModel();table.setModel(chooseModel);else if(e.getSource()= button_4)this.setVisible(false);new AdminFrame().setVisible(true);elseint rownum=table.getSelectedRow();if(rownum=-1)JOptionPane.showMessageDialog(this, 请选择你要修改的试题);return;int i =JOptionPane.showConfirmDialog(this, 你确定要删除此试题吗?, 是否删除,JOptionPane.YES_NO_OPTION );if(i=-1|i=1)return;int id=(Integer)chooseModel.getValueAt(rownum,0);try new ChooseDAO().delete(id);chooseModel = new ChooseModel();table.setModel(chooseModel); catch (SQLException e1) / TODO Auto-generated catch blocke1.printStackTrace();4.3 普通用户普通用户操作界面(1) 中选择以用户身份登录以后,就会转入一个用户登录的界面。首先,翻开myeclipse,创立一个UserFrame的类,如下列图所示(2) 下面是用户操作界面,在这里用户可以对题库里面的题进行管理,也可以对已经生成的试卷进行管理用户操作界面4.3.2 题库管理(1) 用户可以在这里对题库里面的选择题,填空题和解答题进行增删改查的操作,具体界面以选择题为例如下列图所示:增加选择题:修改选择题:查询选择题:相关代码:查询:String title = textField.getText().trim();if(title.length()=0)JOptionPane.showMessageDialog(this, 查询条件为空);return;String sql = select * from choose where title like %+title+%;chooseModel = new ChooseModel(sql);table.setModel(chooseModel);修改:public void update(Choose choose) throws SQLException conn = DBUtil.getConnection();prep = conn.prepareStatement(update choose set type=?,title=?,option1=?,option2=?,option3=?,option4=?,answer=?,degree=?,chapter=? where id = ?);prep.setString(1, choose.getType();prep.setString(2, choose.getTitle();prep.setString(3, choose.getOption1();prep.setString(4, choose.getOption2();prep.setString(5, choose.getOption3();prep.setString(6, choose.getOption4();prep.setString(7, choose.getAnswer();prep.setString(8, choose.getDegree();prep.setString(9, choose.getChapter();prep.setInt(10, choose.getId();prep.executeUpdate();prep.close();DBUtil.close(conn);增加:public void save(Choose choose) throws Exception conn = DBUtil.getConnection();prep = conn.prepareStatement(insert into choose(type,title,option1,option2,option3,option4,answer,degree,chapter) values(?,?,?,?,?,?,?,?,?);prep.setString(1, choose.getType();prep.setString(2, choose.getTitle();prep.setString(3, choose.getOption1();prep.setString(4, choose.getOption2();prep.setString(5, choose.getOption3();prep.setString(6, choose.getOption4();prep.setString(7, choose.getAnswer();prep.setString(8, choose.getDegree();prep.setString(9, choose.getChapter();prep.executeUpdate();prep.close();DBUtil.close(conn);删除:public void delete(int id) throws SQLException conn = DBUtil.getConnection();prep = conn.prepareStatement(delete from choose where id = ?);prep.setInt(1, id);prep.executeUpdate();prep.close();DBUtil.close(conn);4.3.3 试卷管理(1) 功能介绍:这个模块是对已经生成的试卷进行管理,如下列图所示:试卷管理:(2) 相关代码:public void actionPerformed(ActionEvent e) if (e.getSource() = button_1) int rownum = table.getSelectedRow();if (rownum = -1) JOptionPane.showMessageDialog(this, 请选择你要查看的试卷);return;int id = (Integer) examModel.getValueAt(rownum, 0);String path = new ExamDao().getPathById(id);try Runtime.getRuntime().exec(cmd /c + path + ); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace(); else if (e.getSource() = button) String name = textField.getText().trim();if (name.length() = 0) JOptionPane.showMessageDialog(this, 查询条件为空);return;String sql = select * from exam where name like % + name + %;examModel = new ExamModel(sql);table.setModel(examModel); else this.dispose();4.3.4 试卷生成(1) 功能说明:在这里用户可以根据自己所需要的每个题的个数和分数生成相应的试卷,界面如下列图所示:生成试卷的选择条件:生成的试卷:试卷的答案:对生成的试卷进行修改:相关代码:public class QuestionDAO PreparedStatement prep;Connection conn;Choose choose;Fill fill;Sketch sketch;String degree = QuestionUtil.DEGREE;/String chapter = QuestionUtil.CHAPTER;/* * param chnum 所选选择题的个数 * param finum 填空题个数 * param sknum 简答题个数 * return * throws Exception */public List getQuestions(int chnum,int finum,int sknum)List questions = new ArrayList();addChoose(questions,chnum);addFill(questions,finum);addSketch(questions,sknum);return questions;private void addSketch(List questions,int num) / TODO Auto-generated method stubList sketchs = new ArrayList();try conn = DBUtil.getConnection();if(degree.equals()prep = conn.prepareStatement(select * from sketch);elseprep = conn.prepareStatement(select * from sketch where degree = ? and 1=1);prep.setString(1, degree);/prep.setString(2, chapter);ResultSet rs = prep.executeQuery();while (rs.next() sketch = new Sketch();sketch.setId(rs.getInt(id);sketch.setType(rs.getString(type);sketch.setTitle(rs.getString(title);sketch.setOption(rs.getString(option1);sketch.setAnswer(rs.getString(answer);sketch.setDegree(rs.getString(degree);sketch.setChapter(rs.getString(chapter);sketchs.add(sketch);int arr = getRandom(sketchs.size(),num);for (int i = 0; i arr.length; i+) questions.add(sketchs.get(arri); catch (SQLException e) e.printStackTrace();private void addFill(List questions,int num) List fills = new ArrayList();try conn = DBUtil.getConnection();if(degree.equals()prep = conn.prepareStatement(select * from fill);elseprep = conn.prepareStatement(select * from fill where degree = ? and 1=1);prep.setString(1, degree);/prep.setString(2, chapter);ResultSet rs = prep.executeQuery();while (rs.next() fill = new Fill();fill.setId(rs.getInt(id);fill.setType(rs.getString(type);fill.setTitle(rs.getString(title);fill.setOption(rs.getString(option1);fill.setAnswer(rs.getString(answer);fill.setDegree(rs.getString(degree);fill.setChapter(rs.getString(chapter);fills.add(fill);int arr = getRandom(fills.size(),num);for (int i = 0; i arr.length; i+) questions.add(fills.get(arri); catch (SQLException e) e.printStackTrace();private void addChoose(List questions,int num) List chs = new ArrayList();try conn = DBUtil.getConnection();if(degree.equals()prep = conn.prepareStatement(select * from choose);elseprep = conn.prepareStatement(select * from choose where degree = ? and 1=1);prep.setString(1, degree);/prep.setString(2, chapter);ResultSet rs = prep.executeQuery();while (rs.next() choose = new Choose();choose.setId(rs.getInt(id);choose.setType(rs.getString(type);choose.setTitle(rs.getString(title);choose.setOption1(rs.getString(option1);choose.setOption2(rs.getString(option2);choose.setOption3(rs.getString(option3);choose.setOption4(rs.getString(option4);choose.setAnswer(rs.getString(answer);choose.setDegree(rs.getString(degree);choose.setChapter(rs.getString(chapter);chs.add(choose);int arr = getRandom(chs.size(),num);for (int i = 0; i arr.length; i+) questions.add(chs.get(arri); catch (SQLException e) e.printStackTrace();
展开阅读全文