https://github.com/zhangxue520/EnglishGame/blob/master/EnglishGame

《程序设计实践I》

题目:       打字训练测试软件

学校:      齐鲁工业大学

学院:      信息学院

班级:      计科(高职)13-1

学号:      201303014033

姓名:_     张 波 涛

2015   年  04  月 28 日

实践三 基础类、IO流与异常处理程序设计实践

一、实践目的

1.掌握Java常用基础类API。

2.掌握输入输出流常用类API。

3.掌握Java异常处理。

二、实践要求

利用Java常用基础类API、输入输出流常用类API、Java异常处理等完成所选项目的程序设计。

三、项目需求

所选项目名称:打字训练测试软件

设计一个英文打字测试软件。从文件中调入英文录入材料,最后可以给出错误率,平均录入速度。

四、项目设计方案

EnglishGame作为主函数的入口。调用actionPerformed类的方法实现事件监听器。当发生点击事件时就会弹出输入框,开始英文打字功能。从而达到打字训练测试的目的。

图1 EnglishGame类图             图2 MyKey类图

五、核心算法详细设计

5.1需求分析

5.1.1问题描述

设计一个英文打字测试软件

5.1.2基本要求

1. 文件中调入英文录入材料

2. 最后给出错误率

3. 最后给出平均录入速度

5.2总体设计

5.2.1 包的描述

由于本次实验使用的类较少,所有的类都建在同一个包下,本次试验也只用到了一个包。

5.2.2 类的描述

EnglishGame类:主要构造都在这里完成。

MyKey类:是该程序的一个内部类。

5.2.3类之间的关系

EnglishGame作为主函数的入口。调用actionPerformed类的方法实现事件监听器。当发生点击事件时就会弹出输入框,开始英文打字功能。从而达到打字训练测试的目的。

5.3页面设计

页面设计分为一个选择框可以选择“退出”,“简单”,“困难”,“普通”四个部分,然后分上下两个框是输入内容与原内容相比,最后显示测试结果框。

六、完整源码

package jae;

import java.awt.Color;

import java.awt.Container;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.io.File;

import java.io.FileReader;

import java.util.Date;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextPane;

import javax.swing.SwingUtilities;     //所使用的包

public class EnglishGame implements ActionListener {

private static JFrame f = new JFrame("英文打字游戏");

private static Container con = f.getContentPane();

JPanel mainPanel,panel0,panel1,panel2,panel3,panel4,panel5,panel6,panel7;

JButton button1,button2,button3,button4,button,button5,button6;

JTextPane tp1,tp2;

FileReader fr;

File frr;

Date date1,date2;

int num,len1,len2,count;

long time;

double rightrate;

char[] ch;

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

String cmd = e.getActionCommand();

date1=new Date();

if (cmd.equals("6.退出"))

{

System.exit(0);

}

else if(cmd.equals("返回"))

{

}

else

{

JFrame f1 = new JFrame("英文打字游戏");

f1.setSize(350, 750);

f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container con1 = f1.getContentPane();

panel0 = new JPanel();

panel1 = new JPanel();

panel2 = new JPanel();

panel3 = new JPanel();

panel4 = new JPanel();

panel6 = new JPanel();

panel7 = new JPanel();

tp1=new JTextPane();

tp1.setBackground(Color.pink);

Font size=new Font("ad",Font.BOLD,20);

tp1.setFont(size);

tp1.setPreferredSize(new Dimension(300,300));

tp1.setForeground(Color.white);

tp2=new JTextPane();

tp2.setBackground(Color.lightGray);

tp2.setFont(size);

tp2.setPreferredSize(new Dimension(300,300));

try

{

if (cmd.equals("1.文本1"))

{

fr=new FileReader("D:\\文本1.txt");

frr=new File("D:\\文本1.txt");

num=(int)frr.length();

ch=new char[num];

while(fr.read(ch)!=-1)

{

String str=new String(ch);

tp1.setText(str);

}

}

else if (cmd.equals("2.文本2"))

{

fr=new FileReader("D:\\文本2.txt");

frr=new File("D:\\文本2.txt");

num=(int)frr.length();

ch=new char[num];

while(fr.read(ch)!=-1)

{

String str=new String(ch);

tp1.setText(str);

}

}

else if(cmd.equals("3.文本3"))

{

fr=new FileReader("D:\\文本3.txt");

frr=new File("D:\\文本3.txt");

num=(int)frr.length();

ch=new char[num];

while(fr.read(ch)!=-1)

{

String str=new String(ch);

tp1.setText(str);

}

}

else if (cmd.equals("4.文本4"))

{

fr=new FileReader("D:\\文本4.txt");

frr=new File("D:\\文本4.txt");

num=(int)frr.length();

ch=new char[num];

while(fr.read(ch)!=-1)

{

String str=new String(ch);

tp1.setText(str);

}

}

else if(cmd.equals("5.文本5"))

{

fr=new FileReader("D:\\文本5.txt");

frr=new File("D:\\文本5.txt");

num=(int)frr.length();

ch=new char[num];

while(fr.read(ch)!=-1)

{

String str=new String(ch);

tp1.setText(str);

}

}

}

catch(Exception arg)

{

System.out.println(arg);

}

button=new JButton("返回");

button.addActionListener(this);

panel1.add(new JLabel("参考练习:"));

panel1.add(button);

panel2.add(tp1);

panel3.add(new JLabel("练习状况:"));

panel4.add(tp2);

panel0.add(panel1);

panel0.add(panel2);

panel0.add(panel3);

panel0.add(panel4);

panel0.add(panel6);

panel0.add(panel7);

con1.add(panel0);

f1.setVisible(true);

tp2.requestFocus(true);

date1=new Date();

tp2.addKeyListener(new MyKey());

}

}

private class MyKey extends KeyAdapter{

@Override

public void keyReleased(KeyEvent arg0) {

// TODO Auto-generated method stub

len1=tp1.getText().length();

len2=tp2.getText().length();

if(len2==len1)

{

JFrame f2 = new JFrame("英文打字游戏");

f2.setSize(250, 150);

f2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container con2 = f2.getContentPane();

date2=new Date();

time=(date2.getTime()-date1.getTime())/1000;

count=0;

for(int i=0;i<len1;i++)

{

if(tp2.getText().toString().charAt(i)==tp1.getText().toString().charAt(i))

count++;

}

rightrate=(double)count/len1*100;

panel0 = new JPanel();

panel1 = new JPanel();

panel2 = new JPanel();

panel3 = new JPanel();

panel1.add(new JLabel("恭喜完成本次游戏测试!"));

panel2.add(new JLabel("游戏总共耗时:"+time+"秒"+"平均速率:"+len1/time+"字/秒"));

panel3.add(new JLabel("您的正确率为:"+rightrate+"%"));

panel0.add(panel1);

panel0.add(panel2);

panel0.add(panel3);

con2.add(panel0);

f2.setVisible(true);

}

else if(len2>len1){

System.exit(0);

}

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

f.setSize(200, 300);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

con.add(new EnglishGame().creatMenu());

f.setVisible(true);

}

public JPanel creatMenu() {

mainPanel = new JPanel();

panel0 = new JPanel();

panel1 = new JPanel();

panel2 = new JPanel();

panel3 = new JPanel();

panel4 = new JPanel();

panel5 = new JPanel();

panel6 = new JPanel();

panel7 = new JPanel();

button1 = new JButton("1.文本1");

button2 = new JButton("2.文本2");

button3 = new JButton("3.文本3");

button4 = new JButton("4.文本4");

button5 = new JButton("5.文本5");

button6 = new JButton("6.退出");

panel0.add(new JLabel("欢迎使用英文打字测试系统"));

panel1.add(new JLabel("请选择游戏难度:"));

button1.addActionListener(this);

button2.addActionListener(this);

button3.addActionListener(this);

button4.addActionListener(this);

button5.addActionListener(this);

button6.addActionListener(this);

panel2.add(button1);

panel3.add(button2);

panel4.add(button3);

panel5.add(button4);

panel6.add(button5);

panel7.add(button6);

mainPanel.add(panel0);

mainPanel.add(panel1);

mainPanel.add(panel2);

mainPanel.add(panel3);

mainPanel.add(panel4);

mainPanel.add(panel5);

mainPanel.add(panel6);

mainPanel.add(panel7);

mainPanel.setVisible(true);

return mainPanel;

}}

七、使用说明与运行结果截图

八、实践总结

本次上机实验提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼了我分析解决实际问题的能力。提高我的适应实际,实践编程的能力。

EnglishGame的更多相关文章

  1. 左右c++与java中国的垃圾问题的分析与解决

    左右c++与java中国的垃圾问题的分析与解决 DionysosLai(906391500@qq.com)  2014/8/1 问题分析: 之所以会出现中文乱码问题,归根结底在于中文的编码与英文的编码 ...

随机推荐

  1. Luogu P4707 重返现世

    题目描述 为了打开返回现世的大门,Yopilla 需要制作开启大门的钥匙.Yopilla 所在的迷失大陆有 \(n\) 种原料,只需要集齐任意 \(k\) 种,就可以开始制作. Yopilla 来到了 ...

  2. MyBatis Generator使用示例

    一.MBG介绍 MyBatis Generator(MBG)是一个Mybatis的代码生成器,它可以用来生成可以访问(多个)表的基础对象.MBG解决了对数据库操作有最大影响的一些简单的CRUD(插入, ...

  3. vlookup函数应用

    筛选状态下的复制粘贴 第一步 原数据 第二步 筛选内容 第三步 使用vlookup '=VLOOKUP(A1,$A\(1:\)A$19,1,0)' 第四步 往下拖拉结果 最终结果

  4. [NOI2003],[AHOI2006]文本编辑器

    嘟嘟嘟 [NOI2003]的其实就是一个板子--所以我就不说啥了. 唯一需要注意的是读入字符(哎--):题中说"中间可能有空格,请忽略"的意思是要在程序里特判掉,不是不管他-- 输 ...

  5. PCB (3)创建新工程PCB

    点击完成 拖进我们创建的工程中

  6. 【一】mongodb安装及配置

    一.mongodb安装 1.下载并解压 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.0.tgz tar ...

  7. ECS API

    一.API调用方式 ➢对ECS API接口调用是通过向ECS API的服务端地址发送HTTP GET请求,并按照接口说明在请求 中加入相应请求参数来完成的;根据请求的处理情况,系统会返回处理结果. ➢ ...

  8. 1029 最大公约数和最小公倍数问题(gcd) luogu洛谷

    题目描述 输入22个正整数x_0,y_0(2 \le x_0<100000,2 \le y_0<=1000000)x0​,y0​(2≤x0​<100000,2≤y0​<=100 ...

  9. three.js - 动画 图形统计帧频 dat.GUI

    运行一把: 代码解释: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  10. 授人以鱼不如授人以渔——和女儿学一起学成语

    女儿二年级了,前段时间背了<小学生必背古诗词75首>,采用几天一篇,然后滚动复习这种方式.磕磕绊绊也把一本古诗背了一遍,效果吗?是有的,但是不怎么明显,前面背,后面忘.当然这是规律,难免的 ...