EnglishGame
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的更多相关文章
- 左右c++与java中国的垃圾问题的分析与解决
左右c++与java中国的垃圾问题的分析与解决 DionysosLai(906391500@qq.com) 2014/8/1 问题分析: 之所以会出现中文乱码问题,归根结底在于中文的编码与英文的编码 ...
随机推荐
- VRS的GPS/BDS双系统网元固定存在的问题
问题如下:部分网元固定卫星数少于2个. 另外:北方xinkong的网元组网也存在问题
- oc kvc的模式:匹配搜索模式(模式匹配)、装包解包
按照一定规则使用匹配模式在目标空间进行搜索,然后执行相应操作: 运行时系统将kvc的运行机制解释为模式匹配,将值的兼容性问题解释为装包解包问题 一.模式匹配 The default implement ...
- B+ Tree vs B Trees
原文地址:https://blog.csdn.net/dashuniuniu/article/details/51072795 引子 最近一直回顾自己曾经写的一些文档,有一篇是关于 Clang Rew ...
- 浅谈js之闭包
1.什么是闭包??? "官方"的解释是指一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分: 红皮书是这样说的,闭包是指有权访问另一 ...
- PHP获取目录下面所有文件和文件夹
如果做一个在线的文件管理系统的话,那么首先必须知道怎么读取目录和文件,其实这个功能几行代码就可以实现了. <?php $dir = "D:/"; //要获取的目录 echo ...
- ethereum/EIPs-158 State clearing 被EIP-161取代
eip title author type category status created superseded-by 158 State clearing Vitalik Buterin Stand ...
- java程序应为CRT登录时启动未设置编码,造成启动乱码
1.以下提供CRT连接程序设置编码脚本,后缀为“.vbs” # $language = "VBScript"# $interface = "1.0" Sub M ...
- 使用RMAN Active duplicate创建异地auxiliary Database
1g的RMAN duplicate 可以通过Active database duplicate和Backup-based duplicate两种方法实现.这里的测试使用的是Active databas ...
- 在TerraExplorer中如何批量根据shape多边形对象创建TerrainModify对象?
其实,在Skyline中TerrainModify对象就是一个特殊类型Polygon对象,他们的Geometry是可以直接交换使用的: <!DOCTYPE html PUBLIC "- ...
- linux下文件共享的几种常用方式
1. python方式,做一个简单的服务器.默认是开启8000端口. > python -m SimpleHTTPServer 执行命令后,在浏览器上输入该机器IP+8000端口即可 2. sc ...