100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Java实现最粗略的小学生数学考试自动系统

Java实现最粗略的小学生数学考试自动系统

时间:2019-10-08 22:49:46

相关推荐

Java实现最粗略的小学生数学考试自动系统

分享一个粗糙的小学生数学考试自动系统

1. 概述2. 基本功能及完成的程度3. 程序流程图4. 部分代码(你们最喜欢的部分来了,过一阵子发出完整代码)(1)登陆界面的页面设计(2)登陆界面的按钮设置(3)考试界面的页面设计(4)倒计时功能(5)考试界面的按钮设置(6)考试平均分按钮5. 运行结果6. 结束

1. 概述

该系统为大一下学期Java课程结束后的课程设计,做的极为粗糙,之后也没再去修改,当时使用的是eclipse编写(编写Java建议Idea)。

题目为:采用图形用户界面,界面标题为“广州市X小学数学考试自动系统”,主要功能为:自动生成50道数学题,每题为随机生成的3个100以内整数的加减混合运算,每道题为2分,共100分,考试时间为90分钟。

2. 基本功能及完成的程度

开始界面上需要填写姓名、专业、和班级信息;(完成)点击开始考试按钮后,自动生成50道数学题,计时开始;(完成)考试计时功能,在界面上显示考试花费时间,90分钟后自动交卷;(完成)交卷功能按钮:点击该按钮提前交卷或90分钟时间后自动交卷,均弹出对话框,并显示统计后的考试得分;(完成)试卷显示部分采用卡式布局管理器(CardLayout),每页显示5道题,共25页,通过“首页”、“上一页”、“下一页”和“尾页”四个按钮控制翻页功能,其他功能部分可自行合理布局;(完成)每道题100以内的整数随机生成,加法和减法也是随机,但3个数的混合运算结果不能为负数;(完成混合运算未完成结果不为负数)考试的成绩累加写入“成绩.txt”文件,格式为“姓名 年级 班级 成绩”,如:“张三 **年级 *班 98”。(完成)扩展功能要求:增加考试平均分按钮,实现对进行过考试的人员平均分统计,即对文件“成绩.txt”进行平均分统计可额外加分10-20分。(完成)

3. 程序流程图

流程图非常简单,就不必多说了。

4. 部分代码

(你们最喜欢的部分来了,过一阵子发出完整代码)

(1)登陆界面的页面设计

public Login_Interface() {this.setTitle("广州市×小学数学考试自动系统");this.setSize(500, 450);this.setLocationRelativeTo(null); //将此窗口置于屏幕的中央this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setLayout(new BorderLayout(20,20));jl1.setFont(new Font("黑体",Font.BOLD,35));jl1.setForeground(Color.blue);jp1.add(jl1);jp1.setLayout(new GridBagLayout());this.add(jp1,BorderLayout.NORTH);jl2.setFont(new Font("黑体",Font.BOLD,25));jl2.setForeground(Color.red);jp2.add(jl2);JLName.setFont(new Font("黑体",Font.BOLD,15));jp3.add(JLName);jp3.add(JTName);JLMagic.setFont(new Font("黑体",Font.BOLD,15));jp4.add(JLMagic);jp4.add(JTMagic);JLClass.setFont(new Font("黑体",Font.BOLD,15));jp5.add(JLClass);jp5.add(JTClass);jp6.add(jp2);jp6.add(jp3);jp6.add(jp4);jp6.add(jp5);jp6.setLayout(new GridLayout(4,2));this.add(jp6,BorderLayout.CENTER);jp6.setBorder(BorderFactory.createLoweredBevelBorder());jp7.add(JBave);jp7.add(jl4);jp7.add(JB1);jp7.add(jl3);jp7.add(JB2);this.add(jp7,BorderLayout.SOUTH);//美化界面try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch (Exception e) {e.printStackTrace();}Event();this.setVisible(true);}

(2)登陆界面的按钮设置

private void Event() {JB1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if(JTName.getText().equals("") || JTClass.getText().equals("") || JTMagic.getText().equals("")) {String s = "请输入完整信息";JOptionPane.showMessageDialog(null, s,"提示",JOptionPane.ERROR_MESSAGE);}else {setVisible(false);dispose();s1 = JTName.getText();s2 = JTClass.getText();s3 = JTMagic.getText();new Test_Interface();}}});JB2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JTName.setText(null);JTMagic.setText(null);JTClass.setText(null);}});JBave.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {new Average_Score();} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}});}

(3)考试界面的页面设计

public Test_Interface() {this.setTitle("开始考试");this.setSize(550, 400);this.setLocationRelativeTo(null); //将此窗口置于屏幕的中央this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setLayout(new BorderLayout(20,20)); //设置 各组件间水平垂直间隔为20像素countDown();pnl1.add(JLhour);pnl1.add(JLminute);pnl1.add(JLseconds);JLpage.setText("第" + count + "页");pnl2.setLayout(new FlowLayout());pnl2.add(JLgross);pnl2.add(JLpage);//页数pnl2.add(jl1);pnl2.add(JLtime);pnl2.add(pnl1);pnl2.add(JB1);this.add(pnl2,BorderLayout.NORTH);pnl3.setLayout(care);this.add(pnl3,BorderLayout.CENTER);pnl3.setBorder(BorderFactory.createLoweredBevelBorder()); //边框for(int i = 0 , k = 0; i < 10 ; i++ ) {JPanel p = new JPanel();p.setLayout(new GridLayout(5,2,20,20)); //网格布局5行2列,水平垂直间距都设为20像素for(int j = 0 ; j < 5 ; j++) {a=(int)(Math.random()*100+1);b=(int)(Math.random()*100+1);c=(int)(Math.random()*100+1);jl[k] = new JLabel(a + "+" + b + "-" + c + "=");jl[k].setFont(new Font("黑体",Font.BOLD,15));p.add(jl[k]);answer[k] = a + b - c;jtf[k] = new JTextField(6);p.add(jtf[k]);k++;}pnl3.add(p);}pnl4.setLayout(new GridLayout(1,4));pnl4.add(b1);pnl4.add(b2);pnl4.add(b3);pnl4.add(b4);this.add(pnl4, BorderLayout.SOUTH);//美化界面try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());} catch (Exception e) {e.printStackTrace();}Event();setVisible(true);}

(4)倒计时功能

(这个功能在当时线程一直出现问题,问了一大堆人最后才解决/(ㄒoㄒ)/~~

private void countDown() {Timer timer = new Timer();timer.schedule(new TimerTask() {public void run() {time--;long hour = time / 3600;long minute = (time - hour * 3600) / 60;long seconds = time - hour * 3600 - minute * 60;JLhour.setText(hour + "时");JLminute.setText(minute + "分");JLseconds.setText(seconds + "秒");if( time == 0 ) {JB1.doClick(); //调用提交试卷按钮}}}, 0, 1000);}

(5)考试界面的按钮设置

private void Event() {//提交试卷按钮JB1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {int correctAnswer=0;for(int i=0,k=0;i<max;i++,k++){studentAnswer[i]=jtf[k].getText().trim();try {if(Integer.parseInt(studentAnswer[i]) == answer[k]){//将string字符串类型转换为integer整数类型correctAnswer++;}}catch(NumberFormatException u) {}}int score = 100*(int)correctAnswer/max;setVisible(false);dispose();String s="共50道题\n";s=s+"答对"+correctAnswer+"道题\n";s=s+"答错"+(max-correctAnswer)+"道题\n";s=s+"成绩"+String.format("%d",score)+"分\n";file = new File("信息收集.txt");if(!file.exists()){try {file.createNewFile();}catch (IOException u1) {u1.printStackTrace();}}try {fw1 = new FileWriter(file, true);fw1.write("姓名 " + Login_Interface.s1 + " 专业 " + Login_Interface.s3+ " 班级 " + Login_Interface.s2 + " 考试得分:" + score + "\n");fw1.close();}catch(IOException u2) {u2.printStackTrace();}JOptionPane.showMessageDialog(null, s,"考试结束",JOptionPane.ERROR_MESSAGE);}});//首页b1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){care.first(pnl3);count = 1;JLpage.setText("第" + count + "页");}});//前一页b2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){care.previous(pnl3);if ( count > 1 && count <=10) {count --;}else {count = 10 ;}JLpage.setText("第" + count + "页");}});//下一页b3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){care.next(pnl3);if ( count >= 1 && count < 10 ) {count ++;}else {count = 1 ;}JLpage.setText("第" + count + "页");}});//尾页b4.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){care.last(pnl3);count = 10;JLpage.setText("第" + count + "页");}});}

(6)考试平均分按钮

我放置的位置在开始考试界面,答辩的时候被老师狂怼,可以考虑在考试结束界面再加一个小界面…

public Average_Score() throws IOException{BufferedReader input = new BufferedReader(new FileReader("信息收集.txt"));while(( f = input.readLine() ) != null){String k[] = f.split(":");a = Integer.parseInt(k[1]);c = c + a;e ++;}d = c / e;if(e == 0) {d = 0;}h.setTitle("平均分查看");h.setLayout(null); //取消默认布局h.setSize(300,180); //设置大小h.setLocationRelativeTo(null); //使窗口显示在屏幕中央h.getContentPane().setBackground(Color.YELLOW); //内容面板背景i.setText("参加考试人数为 "+e);h.getContentPane().add(i);i.setBounds(45, 15, 120, 50);j.setText("平均分为 "+d);h.getContentPane().add(j);j.setBounds(45, 50, 120, 50);h.setVisible(true);}

5. 运行结果

6. 结束

附上完整源码链接:/ZZDT099/article/details/116211456?spm=1001..3001.5502。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。