Java个人设计
目 录
1 选题......................................................................................................1
2 系统需求分析........................................................................................2
2.1 系统可行性分析.................................................................................2
2.2 系统需求分析.....................................................................................3
2.3 项目进度安排.....................................................................................4
3 系统设计...............................................................................................5
3.1 系统设计............................................................................................5
3.2 文件设计............................................................................................6
4 系统实现...............................................................................................7
4.1代码实现.............................................................................................8
4.2运行界面实现.....................................................................................17
5 结论和心得.......................................................................................... 22
1 选题
|
选题 |
算术运算测试 |
|
题目要求 |
|
|
功能基本要求:实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算分数,提示要不要继续玩下一局,结束后把分数保存起来。说明:用数字1和2来控制加减法;每道题10分总共一百分;把分数保存到chengji1.txt中,结束游戏后,成绩清空。 能力要求:1.沟通表达能力;2:资料搜集能力;3. 自主学习能力;4.时间规划能力 5.独立完成项目能力;6.文档撰写能力;7.面向对象编程思维和软件工程思想。 |
|
|
使用Java知识 |
|
|
Java基本输入输出、运算符、随机数、while循环、for循环、continue、break、数据类型转换、选择分支、IO流、异常。 |
|
|
选题二 |
猜数游戏 |
|
题目要求 |
|
|
功能基本要求:计算机产生随机数(1-100之间),猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到;猜对了可以点获取随机数继续玩下一局,点结束按钮可以显示次数和分数,最后给出评语。说明:次数大于8默认为60分,7-8次--70分 5-6次--80分 3-4次--90分 1-2次-100分;次数大于8,给出评语您需要继续努力;次数小于等于8,给出评语您真厉害。 能力要求:1.沟通表达能力;2:资料搜集能力;3. 自主学习能力;4.时间规划能力 5.独立完成项目能力;6.文档撰写能力;7.面向对象编程思维和软件工程思想。 |
|
|
使用Java知识 |
|
|
GUI等基本知识、选择分支、switch选择结构、随机数、类型转换等。 |
|
2 系统需求分析
2.1 系统可行性分析
一、算数运算测试
1.技术可行性
本次程序运用的是Eclipse这个软件,采用的Java语言,Java面向对象,所以技术上是可行的。
2经济可行性
因为本次程序使用的Eclipse软件是免费的,在这个软件上就能满足我们的需求,我们不需要额外的开销,所以经济上也是可行的。
3.操作可行性
本次程序只需要用户有这个软件并配置好了环境变量就可以使用,操作简单便捷,符合大部用户的使用习惯。因此在操作上是可行的。
二 、猜数游戏
1技术可行性
. 本次程序运用的是Eclipse这个软件中的GUI插件技术,采用的Java语言,Java面向对象,GUI基础语言,所以技术上是可行的。
2.经济可行性
因为本次程序使用的Eclipse软件是免费的,在这个软件上就能满足我们的需求,我们不需要额外的开销,所以经济上也是可行的。
3.操作可行性
本次程序只需要用户有这个软件并配置好了环境变量并且安装WindowBuilder插件就可以使用,操作简单便捷,符合大部用户的使用习惯。因此在操作上是可行的。
2.2 系统需求分析
一、算数运算测试
1.需求分析
实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算分数,提示要不要继续玩下一局,结束后把分数保存起来。说明:用数字1和2来控制加减法;每道题10分总共一百分;把分数保存到chengji1.txt中,结束游戏后,成绩清空。
2.功能模块图

图2.2-1算术测试运算模块图
二、猜数游戏
1.需求分析
计算机产生随机数(1-100之间),猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到;猜对了可以点获取随机数继续玩下一局,点结束按钮可以显示次数和分数,最后给出评语。说明:次数大于8为默认为60分,7-8次--70分 5-6次--80分 3-4次--90分 1-2次-100分;次数大于8,给出评语您需要继续努力;次数小于等于8,给出评语您真厉害。
2.功能模块图

图2.2-2猜数游戏模块图
2.3 进度安排
阶段一进度安排如表2.3-1所示。
表2.3-1 进度安排表
|
阶段 |
持续时间 |
阶段描述 |
输出 |
|
构思阶段 |
3小时 |
需求分析 |
需求说明,功能模块图 |
|
设计阶段 |
3小时 |
系统设计 |
设计说明-可以画流程图; |
|
实现阶段 |
2天 |
编写代码 |
项目工程源代码 |
|
1天 |
系统测试 |
进行黑盒测试(功能测试)-测试说明 |
|
|
运行阶段 |
1天 |
部署、运行 |
系统使用说明、运维报告、录制视频 |
3 系统设计
3.1 系统设计
一、算术测试运算
根据系统的实际功能需求分析,对系统功能部分进行了设计。
随机测试题目生成模块:先随机产生两个1-100之间的数,判断产生的随机数在不在1-100之间,不在的话退出本次循环继续下一次的。在的话再随机生成1、2两个数字,1代表加法,2代表减法。
题目测试模块:输入得数,判断是不是1-100之间的数字并判断是否正确,正确继续下一道题,错误,告诉正确答案继续下一道题。
成绩记录模块:每道题十分,一共十道题,总共100分。
保存成绩模块:把总分保存到系统中默认的地址chengji1.txt中。
退出功能模块:系统询问要不要继续,y代表继续,n代表不继续。n的话退出游戏,y的话循环做游戏。如果输入的不是这两个字母,提醒用户让他重新输入。
二、猜数游戏
随机数生成模块:运行过后,弹出GUI图形界面,点获取随机数按钮,系统随机生成一个数。
判断随机数与输入模块:”输入”标签后的文本框里填写数字,按确定按钮,判断文本框的值与猜的数是否相等,并给出提示,继续猜,直到猜对为止。
次数记录模块:每猜一次记录一次,记录总次数。
成绩记录模块:次数大于8为默认为60分,7-8次--70分 5-6次--80分 3-4次--90分 1-2次-100分.
评语记录模块:次数大于8,给出评语您需要继续努力;次数小于等于8,给出评语您真厉害。猜对给出标签提示。
退出功能模块:继续按“获取随机数”按钮,所有的提示清空,重复上面步骤。按”结束”按钮给出用户所猜的次数和所得的分数并给出评语,然后直接关闭窗口即可。
3.2 文件设计
一、算术运算测试
为了让用户更清楚的看到自己的成绩,创建了chengji1.txt保存用户的成绩。
图3.2-1文件设计
4 系统实现
4.1代码实现
一、算数运算测试
package hu;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
/*功能基本要求:实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,
* 判断做题是否正确,最后计算分数,提示要不要继续玩下一局,结束后把分数保存起来。
* 说明:用数字1和2来控制加减法;每道题10分,总共一百分;把分数保存到chengji1.txt中
* 结束游戏后,成绩清空
*/
public class JiaJianFa {
public static void main(String[] args) {
File file=null;//创建文件
int j=1;
boolean f=false;//设置不能追加,文件覆盖掉原先的
//(缓冲输出流) BufferedWriter bw=new BufferedWriter(new Filewriter(file),f);Filewriter是字符流
//给循环设标签
loop:
while(true) {
System.out.println("*********欢迎来到算数游戏(100以内加减法)*************");
int count=0;//分数
Scanner input=new Scanner(System.in);
//循环10次
for(int i=1;i<=10;i++) {
boolean flag=false;//做对了为true,没做对false
//随机生成两个数
int a=(int)(Math.random()*100);
int b=(int)(Math.random()*100);
//随机生成加减法
int c=(int)((Math.random()*2)+1);//1是+法,2是-法[0,2)[1,3)
//不在1-100范围内
if(a+b>100||a-b<0) {
i=i-1;
continue;//跳出本次循环继续做
}
else {
System.out.println("第"+i+"道算式:");
//c为1时做加法
if(c==1) {
System.out.println("输出:"+a+"+"+b+"=?");
while(true) {
System.out.print("得数:");
String n=input.next();
//匹配一个或多个数字并判断用户输入的是不是1-100之间的数
if(!(n.matches("[0-9]+"))||(Integer.valueOf(n)>100||Integer.valueOf(n)<0)) {//String类型转换int类型
System.out.println("您输入有误,请重新输入!请输入1-100之间的数字!");
} else{
//String类型转换为int类型
if(Integer.parseInt(n)==(a+b)) {
System.out.println("您算对了!");
flag=true;
}
else {
System.out.println("您算错了!正确答案是:"+(a+b));
}
break ;//结束最近的循环
}
}
}
//c为2时做减法
else if(c==2){
System.out.println("输出:"+a+"-"+b+"=?");
while(true) {
System.out.print("得数:");
String n1=input.next();
//匹配一个或多个数字
if(!(n1.matches("[0-9]+"))||(Integer.valueOf(n1)>100||Integer.valueOf(n1)<0)) {
System.out.println("您输入有误,请重新输入!请输入1-100之间的数字!");
} else{
//String类型转换为int类型
if(Integer.parseInt(n1)==(a-b)) {
System.out.println("您算对了!");
flag=true;
}
else {
System.out.println("您算错了!正确答案是:"+(a-b));
}
break ;//结束循环
}
}
}
}
//做对了得分。每道10分,满分100分
if(flag==true) {
count=count+10;
}
}
System.out.println("总分是:"+count);
//用字符流把成绩保存起来
BufferedWriter bw=null;//缓冲流效率高,字符流保存文字不出现乱码
try {
file=new File("chengji1.txt");
bw=new BufferedWriter(new FileWriter(file,f));//f初始值设置不能追加,文件覆盖掉原先的
bw.write("第"+j+"次成绩:"+count+"\n");
j++;
System.out.println("成绩保存成功!");
}
catch (IOException e) {
e.printStackTrace();
}
finally {
try {
bw.flush();//刷新缓冲区
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("您是否要继续呢?(y是的/n不是)");
String answer=input.next();
while(true) {
if(answer.equals("y")) {
f=true;//继续玩的话设置可追加保留上面的成绩
break ;
}else if(answer.equals("n")) {
System.out.println("***********游戏结束**************");
break loop;//结束标签的循环
}else {
System.out.println("输入有误!请重新输入!");
answer=input.next();
}
}
}
}
}
二、猜数游戏
package hu1;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/*功能基本要求:计算机产生随机数(1-100之间),猜中即胜,猜不中,提示是大了还是小了,
继续猜,直至猜到,猜对了可以点获取随机数继续玩下一局,点结束按钮可以显示次数和分数,最后给出评语。
说明:次数大于8为默认为60分,7-8次--70分 5-6次--80分 3-4次--90分 1-2次-100分;
次数大于8,给出评语您需要继续努力;次数小于等于8,给出评语您真厉害*/
public class CaiShuNameGUI extends JFrame {
JPanel jp1,jp2,jp3,jp4;//面板
JButton jb1,jb2,jb3;//按钮
JTextField jtf;//文本框
JLabel jL1,jL2,jL3,jL4,jL5;//标签
int random;//随机数
int count=1;//次数
int score;//分数
//初始化界面
public CaiShuNameGUI() {
this.setTitle("欢迎来到猜数游戏!");//设置标题
this.setBounds(400,200,400,300);//设置位置大小
this.setLayout(new GridLayout(4,1));//设置布局4行1列
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
jp4=new JPanel();
jL1=new JLabel("输入");
jL2=new JLabel();
jL3=new JLabel();
jL4=new JLabel();
jL5=new JLabel();
jtf=new JTextField(20);
jb1=new JButton("获取随机数");
jb2=new JButton("确定");
jb3=new JButton("结束");
//将组件添加到面板上
jp1.add(jL1);
jp1.add(jtf);
jp2.add(jb1);
jp2.add(jb2);
jp2.add(jb3);
jp3.add(jL2);
jp4.add(jL3);
jp4.add(jL4);
jp4.add(jL5);
//将面板添加到窗体上
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.add(jp4);
//设置窗体可见
this.setVisible(true);
//按钮jb1设置监听事件
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//将jL2,jL3,JL4,jL5设为空
jL2.setText(null);
jL3.setText(null);
jL4.setText(null);
jL5.setText(null);
count=0;//次数清零
random=(int)(Math.random()*100+1);//0-100之间的数
}
});
//按钮jb2设置监听事件
jb2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String s=jtf.getText().trim();//将文本框里的值取出来
int n=Integer.parseInt(s);//将String类型转换为int型
//再依次比较
if(n>random) {
jL2.setText("猜大了");
}else if(n<random) {
jL2.setText("猜小了");
}else {
jL2.setText("猜对了,点击结束查看次数分数和评语;点击获取随机数,继续游戏");
}
count++;
}
});
//按钮jb3设置监听事件
jb3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jL3.setText("您一共猜了"+count+"次");
//根据次数写出成绩
switch(count) {
case 1:
case 2:
score=100;
break;
case 3:
case 4:
score=90;
break;
case 5:
case 6:
score=80;
break;
case 7:
case 8:
score=70;
break;
default:
score=60;//否则设为默认值60分
}
//给标签设置字
jL4.setText("您的成绩是:"+score+"分");
if(count>8) {
jL5.setText("您需要继续努力!");
}else {
jL5.setText("您真厉害!");
}
}
});
}
public static void main(String[] args) {
CaiShuNameGUI c=new CaiShuNameGUI();
}
}
4.2运行界面实现
一、算数运算测试


图4.2-1算术运算测试运行图

图4.2-2用户成绩表
二、猜数游戏











图4-2-3猜数游戏测试运行图
5 结论和心得
心得:通过这次的学习真的让自己成长的不少,学会了很多新知识,复习了很多旧知识。虽然过程非常的艰辛,期间遇到了很多难题,但是通过老师的指导以及自己上网百度,翻阅资料顺利的做了下来。我相信只要有付出就会有收获。今后我一定会继续学习,丰富自己的知识。
浙公网安备 33010602011771号