6
目 录
1 选题
|
选题一 |
算术运算测试 |
|
题目要求 |
|
|
实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确。
|
|
|
使用Java知识 |
|
|
Java基本输入输入出、运算符、循环、选择分支;数组,mysq,GUI。 |
|
|
选题二 |
猜数游戏 |
|
题目要求 |
|
|
计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用时间和评语。 |
|
|
使用Java知识 |
|
|
循环、分支、变量、判断、常用类等;GUI。 |
|
2 系统需求分析
2.1 系统可行性分析
一、算数运算测试
1.技术可行性
本次程序运用的是Eclipse这个软件,采用的JAVA语言,JAVA面向对象,所以技术上是可行的。
2.经济可行性
因为本次程序使用的Eclipse软件是免费的,在这个软件上就能满足我们的需求,不需要额外的开销所以经济上也是可行的。
3.操作可行性
本次程序只需要用户有这个软件并配置好环境变量并且安装windowbuilder插件就可以使用,操作简单便捷,符合大部分用户的使用习惯。因此在操作上是可行的。
4.法律可行性
在法律许可范围内。
2.2 系统需求分析
1.通过与老师和同学交流,完成了简单的运算算数测试,实现了十道100以内加减法数学题,根据题目算出答案,与用户输入答案对比,判断做题是否正确,若正确,则分数加1分,若答错,则不加分,最后计算分数总和,每道题1分,共计10分。
2.功能模块图
图2-1 算数测试运算模块图
图2-2 猜数游戏模块图
2.3进度安排
阶段一进度安排如表3-1所示。
表3-1 进度安排表
|
阶段 |
持续时间 |
阶段描述 |
输出 |
|
构思阶段 |
2小时 |
需求分析 |
需求说明,功能模块图 |
|
设计阶段 |
2小时 |
系统设计 |
设计说明-可以画流程图;数据库设计 |
|
实现阶段 |
3小时 |
编写代码 |
项目工程源代码 |
|
3小时 |
系统测试 |
进行黑盒测试(功能测试)-测试说明 |
|
|
运行阶段 |
4小时 |
部署、运行 |
系统使用说明、运维报告、录制视频 |
3 系统设计
3.1 系统设计
10道计算题:
获得两个随机数和一个字符,获得随机字符方法为,获得一个0或1的随机数若为1则是“+”,否则为“-”。定义一个字符数组存放题目,并设计GUI界面将10道题目显示出来。在每个题目加一个文本框获得用户输入的答案。在界面下方设置一个按钮并监听,点击按钮弹窗显示用户正确的题数
猜数字:
随机生成一个1-100的数字。对用GUI进行界面布局设置,设置一个文本框来获得用户猜测的数字,并设置一个按钮监听;点击按钮弹窗显示猜对,猜大,猜小。
3.2文件设计
4系统实现
4.1 代码实现
猜数字游戏
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Cai extends JFrame {
private JPanel contentPane;
int a=(int)(Math.random()*99)+1; //生成一个随机数
TextField num;
JPanel p = new JPanel();
public Cai() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
Container container = this.getContentPane();
contentPane.setLayout(new GridLayout(3,2,5,5));
num = new TextField(5);
JPanel p1 = new JPanel();
JLabel label = new JLabel("你想猜:");
p1.add(label,FlowLayout.LEFT);
container.add(p1);
add(num);
JButton button = new JButton("提交");
container.add(button);
button.addActionListener(new Mybutton(this));
}
10道计算题
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.SwingConstants;
public class Jisuan extends JFrame {
//属性
public JPanel contentPane;
public TextField[] num = new TextField[10]; //文本框
public JFrame Jframe = new JFrame();
public JPanel[] p = new JPanel[11];//题目
int[] answer1 = new int[10];
int zhengqueshu=0;
Timu timu = new Timu();
//方法
public Jisuan() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 500, 400);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
Container container = this.getContentPane();
contentPane.setLayout(new GridLayout(11, 2, 10,10));
for(int i=1;i<10;i++){
p[i] = new JPanel();
}
for(int i=1;i<10;i++){
num[i] = new TextField(5); //文本框
String labe = timu.getTimu(i); //获得题目
JLabel label = new JLabel(); //显示题目和文本框
label.setText(labe);
p[i].add(label,FlowLayout.LEFT);
p[i].add(num[i]);
container.add(p[i]);
answer1[i]=timu.answer[i];
}
JButton button = new JButton("提交"); //提交按钮
container.add(button);
button.addActionListener(new Mychuangkou());//监听按钮
}
class Mychuangkou extends JDialog implements ActionListener{ //监听提交按钮
public void actionPerformed(ActionEvent e){
this.setVisible(true);
this.setBounds(170, 170, 350, 280);
Container container = this.getContentPane();
contentPane.setLayout(new GridLayout(3, 1, 10,10));
for(int i=1;i<10;i++) { //将用户输入的结果和正确结果对比
if(answer1[i]==Integer.parseInt(num[i].getText()))
{
zhengqueshu++;//正确题数
}
}
JPanel p1 = new JPanel();
String s = "共作对"+zhengqueshu+"道题";
JLabel pp = new JLabel();
pp.setText(s);
p1.add(pp,FlowLayout.LEFT);
container.add(p1);
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
Jisuan frame = new Jisuan();
frame.setVisible(true);
}
});
}
}
public class Timu { //生成题目类
//属性
String [] Timu = new String [10];
int yunSuanFu;
int[] answer = new int[10];
int a,b;
//方法
String getTimu(int i){
yunSuanFu=(int)(Math.random()*2);
a=(int)(Math.random()*99)+1;
b=(int)(Math.random()*99)+1;
Timu[i]=a+Yunsuanfu(yunSuanFu)+b+"=";
answer[i]=jisuan(a,b,yunSuanFu);
return Timu[i];
}
String Yunsuanfu(int index){ // 获得运算符
String string=" ";
switch(index){
case 0:
string="+";
break;
case 1:
string="-";
break;
}
return string;
}
int jisuan(int a,int b,int index){ //计算题目的正确答案
int sum=0;
switch(index){
case 0:
sum=a+b;
break;
case 1:
sum=a-b;
break;
}
return sum;
}
}
4.2 运行界面实现
|
图4.2.2 1 |
|
图4.2.3 1 |
|
图4.2.1 1 |
|
图4.2.4 |
图
5结论和心得
对项目完成情况总结,并写出个人的心得,要求积极正面、切合实际。
结论:使用了GUI图形界面,用Java中的Swing类实现了10道计算题和猜数字的小程序运行。其实窗体的菜单也是有监听事件的,MenuListener,具体用法如其他监听事件一样。比较耗费事件的任务可以使用SwingWorker来达到多线程的目的,如我在任务间歇需要更新进度条,这样主类可以继承Thread,耗时任务放在SwingWorker类实现即可。
心得:Java思想:Java是一门面向对向语言,他定义一切都是对象 面向对象,就是面对现实;现实中的一切都是对象,他们有分类,就产生了“类”; 他们有不同,类和类之间的不同,使用类来区分; 同一个类中不同的对象的区别,使用成员区分。所以,面向对象的内部逻辑是分类。 面向对象编程思想就象数学上的一些概念,如:空间、群、环、域等原始的编程思想就象古典数学,人们只在一个集合上探讨问题,没有系统的方法(即运算)定义,于是仁者见仁、智者见智,这样在一定程度上造成了理论的一种混乱局面,不利于科学的发展。于是近代数学向公理化发展,这是什么意思呢?就是说,人们除了在限定论域(即上面的集合,面向对象也有此概念)外,还在此论域上加进了一套通用的、公认的运算(方法);集合加上集合上定义的运算就构成了数学上的空间、群等,在计算机领域里,就变成为“类”。这种集合上定义了操作的东西利用起来就方便多了,这使得人们讨论问题时都在给定集合的运算能力上下工夫,即有通用性可事半功倍。
目 录
1 选题
|
选题一 |
算术运算测试 |
|
题目要求 |
|
|
实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确。
|
|
|
使用Java知识 |
|
|
Java基本输入输入出、运算符、循环、选择分支;数组,mysq,GUI。 |
|
|
选题二 |
猜数游戏 |
|
题目要求 |
|
|
计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用时间和评语。 |
|
|
使用Java知识 |
|
|
循环、分支、变量、判断、常用类等;GUI。 |
|
2 系统需求分析
2.1 系统可行性分析
一、算数运算测试
1.技术可行性
本次程序运用的是Eclipse这个软件,采用的JAVA语言,JAVA面向对象,所以技术上是可行的。
2.经济可行性
因为本次程序使用的Eclipse软件是免费的,在这个软件上就能满足我们的需求,不需要额外的开销所以经济上也是可行的。
3.操作可行性
本次程序只需要用户有这个软件并配置好环境变量并且安装windowbuilder插件就可以使用,操作简单便捷,符合大部分用户的使用习惯。因此在操作上是可行的。
4.法律可行性
在法律许可范围内。
2.2 系统需求分析
1.通过与老师和同学交流,完成了简单的运算算数测试,实现了十道100以内加减法数学题,根据题目算出答案,与用户输入答案对比,判断做题是否正确,若正确,则分数加1分,若答错,则不加分,最后计算分数总和,每道题1分,共计10分。
2.功能模块图
图2-1 算数测试运算模块图
图2-2 猜数游戏模块图
2.3进度安排
阶段一进度安排如表3-1所示。
表3-1 进度安排表
|
阶段 |
持续时间 |
阶段描述 |
输出 |
|
构思阶段 |
2小时 |
需求分析 |
需求说明,功能模块图 |
|
设计阶段 |
2小时 |
系统设计 |
设计说明-可以画流程图;数据库设计 |
|
实现阶段 |
3小时 |
编写代码 |
项目工程源代码 |
|
3小时 |
系统测试 |
进行黑盒测试(功能测试)-测试说明 |
|
|
运行阶段 |
4小时 |
部署、运行 |
系统使用说明、运维报告、录制视频 |
3 系统设计
3.1 系统设计
10道计算题:
获得两个随机数和一个字符,获得随机字符方法为,获得一个0或1的随机数若为1则是“+”,否则为“-”。定义一个字符数组存放题目,并设计GUI界面将10道题目显示出来。在每个题目加一个文本框获得用户输入的答案。在界面下方设置一个按钮并监听,点击按钮弹窗显示用户正确的题数
猜数字:
随机生成一个1-100的数字。对用GUI进行界面布局设置,设置一个文本框来获得用户猜测的数字,并设置一个按钮监听;点击按钮弹窗显示猜对,猜大,猜小。
3.2文件设计
4系统实现
4.1 代码实现
猜数字游戏
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Cai extends JFrame {
private JPanel contentPane;
int a=(int)(Math.random()*99)+1; //生成一个随机数
TextField num;
JPanel p = new JPanel();
public Cai() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
Container container = this.getContentPane();
contentPane.setLayout(new GridLayout(3,2,5,5));
num = new TextField(5);
JPanel p1 = new JPanel();
JLabel label = new JLabel("你想猜:");
p1.add(label,FlowLayout.LEFT);
container.add(p1);
add(num);
JButton button = new JButton("提交");
container.add(button);
button.addActionListener(new Mybutton(this));
}
10道计算题
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.SwingConstants;
public class Jisuan extends JFrame {
//属性
public JPanel contentPane;
public TextField[] num = new TextField[10]; //文本框
public JFrame Jframe = new JFrame();
public JPanel[] p = new JPanel[11];//题目
int[] answer1 = new int[10];
int zhengqueshu=0;
Timu timu = new Timu();
//方法
public Jisuan() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 500, 400);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
Container container = this.getContentPane();
contentPane.setLayout(new GridLayout(11, 2, 10,10));
for(int i=1;i<10;i++){
p[i] = new JPanel();
}
for(int i=1;i<10;i++){
num[i] = new TextField(5); //文本框
String labe = timu.getTimu(i); //获得题目
JLabel label = new JLabel(); //显示题目和文本框
label.setText(labe);
p[i].add(label,FlowLayout.LEFT);
p[i].add(num[i]);
container.add(p[i]);
answer1[i]=timu.answer[i];
}
JButton button = new JButton("提交"); //提交按钮
container.add(button);
button.addActionListener(new Mychuangkou());//监听按钮
}
class Mychuangkou extends JDialog implements ActionListener{ //监听提交按钮
public void actionPerformed(ActionEvent e){
this.setVisible(true);
this.setBounds(170, 170, 350, 280);
Container container = this.getContentPane();
contentPane.setLayout(new GridLayout(3, 1, 10,10));
for(int i=1;i<10;i++) { //将用户输入的结果和正确结果对比
if(answer1[i]==Integer.parseInt(num[i].getText()))
{
zhengqueshu++;//正确题数
}
}
JPanel p1 = new JPanel();
String s = "共作对"+zhengqueshu+"道题";
JLabel pp = new JLabel();
pp.setText(s);
p1.add(pp,FlowLayout.LEFT);
container.add(p1);
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
Jisuan frame = new Jisuan();
frame.setVisible(true);
}
});
}
}
public class Timu { //生成题目类
//属性
String [] Timu = new String [10];
int yunSuanFu;
int[] answer = new int[10];
int a,b;
//方法
String getTimu(int i){
yunSuanFu=(int)(Math.random()*2);
a=(int)(Math.random()*99)+1;
b=(int)(Math.random()*99)+1;
Timu[i]=a+Yunsuanfu(yunSuanFu)+b+"=";
answer[i]=jisuan(a,b,yunSuanFu);
return Timu[i];
}
String Yunsuanfu(int index){ // 获得运算符
String string=" ";
switch(index){
case 0:
string="+";
break;
case 1:
string="-";
break;
}
return string;
}
int jisuan(int a,int b,int index){ //计算题目的正确答案
int sum=0;
switch(index){
case 0:
sum=a+b;
break;
case 1:
sum=a-b;
break;
}
return sum;
}
}
4.2 运行界面实现
|
图4.2.2 1 |
|
图4.2.3 1 |
|
图4.2.1 1 |
|
图4.2.4 |
图
5结论和心得
对项目完成情况总结,并写出个人的心得,要求积极正面、切合实际。
结论:使用了GUI图形界面,用Java中的Swing类实现了10道计算题和猜数字的小程序运行。其实窗体的菜单也是有监听事件的,MenuListener,具体用法如其他监听事件一样。比较耗费事件的任务可以使用SwingWorker来达到多线程的目的,如我在任务间歇需要更新进度条,这样主类可以继承Thread,耗时任务放在SwingWorker类实现即可。
心得:Java思想:Java是一门面向对向语言,他定义一切都是对象 面向对象,就是面对现实;现实中的一切都是对象,他们有分类,就产生了“类”; 他们有不同,类和类之间的不同,使用类来区分; 同一个类中不同的对象的区别,使用成员区分。所以,面向对象的内部逻辑是分类。 面向对象编程思想就象数学上的一些概念,如:空间、群、环、域等原始的编程思想就象古典数学,人们只在一个集合上探讨问题,没有系统的方法(即运算)定义,于是仁者见仁、智者见智,这样在一定程度上造成了理论的一种混乱局面,不利于科学的发展。于是近代数学向公理化发展,这是什么意思呢?就是说,人们除了在限定论域(即上面的集合,面向对象也有此概念)外,还在此论域上加进了一套通用的、公认的运算(方法);集合加上集合上定义的运算就构成了数学上的空间、群等,在计算机领域里,就变成为“类”。这种集合上定义了操作的东西利用起来就方便多了,这使得人们讨论问题时都在给定集合的运算能力上下工夫,即有通用性可事半功倍。

浙公网安备 33010602011771号