阶段一个人项目
Java课程设计
(阶段一文档)
二〇二一年六月
目 录
1 选题................................................................................................. 2
2 系统需求分析................................................................................. 3
2.1 系统可行性分析............................................................ 3
2.2 系统需求分析...................................................................... 4
2.3 进度安排.............................................................................. 4
3 系统设计......................................................................................... 5
3.1 系统设计.............................................................................. 5
4 系统实现......................................................................................... 6
4.1 算数运算测试...................................................................... 6
4.1.1 主程序界面................................................................. 6
4.1.2 运行界面..................................................................... 6
4.1.3 查询成绩文件............................................................. 6
4.2 猜数字游戏.......................................................................... 8
4.2.1 游戏界面..................................................................... 8
4.2.2 得到随机数并输入猜测数界面................................. 8
4.2.3 猜对了界面................................................................. 9
5 系统测试....................................................................................... 11
5.1 算数运算测试.................................................................... 11
5.1.1 随机产生测试题模块测试.............................. 11
5.1.2 数据正确性测试和分数保存测试................ 11
5.2 猜数字游戏测试................................................................ 11
5.2.1提交模块测试.......................................................... 11
6 结论和心得................................................................................... 12
1 选题
|
选题一 |
算术运算测试 |
|
题目要求 |
|
|
实现十道100以内加减法数学题(五道加法,五道减法),能根据题目计算出答案,与输入答案对比,判断做题是否正确, 正确得10分,不正确不得分,将成绩保存到TXT文本中 |
|
|
使用Java知识 |
|
|
Java基本输入输出、运算符、循环
|
|
|
选题二 |
猜数游戏 |
|
题目要求 |
|
|
计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,可以选择保存数据和用户信息,有时间限制,时间到自动退出程序 。保留用户测试次数,做出成绩排行榜。排行榜存放到数据库中。 |
|
|
使用Java知识 |
|
|
循环、分支、变量、常用类等;GUI |
|
2 系统需求分析
2.1 系统可行性分析
一、算数运算测试
运用Java基础知识(面向对象,流程控制等等),做到了解耦,各干各的事 。实现基本要求,操作简单,控制台输入输出。
二、猜数字游戏
运用GUI,Java基础知识(面向对象,流程控制等等),做到了解耦,各干各的事 。
有了图形化界面,用户操作更直观方便
2.2 系统需求分析
一、算数运算测试
系统随机产生10道题,用户输入参赛姓名,参加比赛,做对一题得10分,最后分数和用户姓名保存到文件
二、猜数字游戏
GUI界面,随机产生数字,然后输入猜的数字,提交,系统会和生产的数比较提示用户猜大了还是猜小了,还是猜大了,猜对了。
2.3 进度安排
阶段一进度安排如表3-1所示。
表3-1 进度安排表
|
阶段 |
持续时间 |
阶段描述 |
输出 |
|
构思阶段 |
2小时 |
需求分析 |
需求说明,功能模块图 |
|
设计阶段 |
2小时 |
系统设计 |
设计说明-可以画流程图; |
|
实现阶段 |
2天 |
编写代码 |
项目工程源代码 |
|
2小时 |
系统测试 |
进行黑盒测试(功能测试)-测试说明 |
|
|
运行阶段 |
3小时 |
部署、运行 |
系统使用说明、运维报告、录制视频 |
3 系统设计
3.1 系统设计
根据系统的实际功能需求分析,对系统功能部分进行了设计。
一、算数运算测试
10道测试用for循环,随机数用Random对象实现,保存数据运用了字符流。
二、猜数字游戏
GUI界面,产生随机数,然后输入要猜的数字,点击提交,弹窗提示大了,小了猜对了。
4 系统实现
4.1算数运算测试
源代码实现:
package 阶段一;
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 Suanshu {
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();
}
}
}
}
}
4.2 算数运算测试
4.2.1 主程序界面
图 4-2-1 主程序界面
4.2.2 运行界面
运用循环实现10道计算题,Random实现随机数的产生,并提示答案的正确与否,渲染到控制台。
图 4-2-2 运行界面
4.2.3 查询成绩文件
图4.2.3
4.3 猜数字游戏
源码实现:package com.ts.zy;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MyFrame extends JFrame {
int number;
JLabel label;
JTextField text;
JButton button1,button2;
PoliceListener policeListener;
public static void main(String[] args) {
MyFrame myFrame = new MyFrame();
}
public MyFrame(){
init();
setTitle("猜数字");
setBounds(300,300,260,150);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
validate();
}
void init(){
setLayout(new FlowLayout());
button1 = new JButton("得到一个随机数");
add(button1);
label = new JLabel("输入你的猜测:",JLabel.CENTER);
label.setBackground(Color.cyan);
add(label);
text = new JTextField("0",10);
add(text);
button2 = new JButton("确定");
add(button2);
policeListener = new PoliceListener();
button1.addActionListener(policeListener);
button2.addActionListener(policeListener);
}
class PoliceListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
if(e.getSource() == button1){
number = (int)(Math.random()*100)+1;
label.setText("输入你的猜测");
text.setText(null);
}
else if(e.getSource() == button2){
int guess = 0;
try{
guess = Integer.parseInt(text.getText());
if(guess == number){
label.setText("猜对了!");
}else if(guess < number){
label.setText("猜小了!");
text.setText(null);
}else {
label.setText("猜大了!");
text.setText(null);
}
}catch (NumberFormatException event){
label.setText("请输入数字字符");
}
}
}
}
}
4.3.1 游戏界面
GUI实现图形化界面,
布局涉及到表格布局,流式布局等。
图 4-2-1 游戏界面
4.3.2 得到随机数并输入猜测数界面
图 4-2-2 游戏界面
确定按钮绑定监听事件,当被按下弹出提示猜大了还是小了还是猜对了,弹窗点击确定关闭
图 4-3-3 提交界面猜大了
图 4-3-4提交界面猜小了
4.3.3 猜对了界面
出现弹窗提示猜对了
5 系统测试
5.1 算数运算测试
5.1.1随机产生测试题模块测试
表 5-1-1 输入和随机产生测试题 测试表
|
编号 |
测试功能 |
输入描述 |
预期结果 |
运行结果 |
|
C01 |
随机产生测试题 |
不输入 |
显示题目到控制台 |
与预期结 果一致 |
5.1.2 数据正确性测试和分数保存测试
表 5-1-2 数据持久化测试表
|
编号 |
测试功能 |
输入描述 |
预期结果 |
运行结果 |
|
C02 |
判断答案正确性 |
不输入 |
与答案相一致 |
与预期结 果一致 |
|
C03 |
查询保存的文件 |
查找打开文件 |
文件中显示分数 |
与预期结 果一致 |
5.2 猜数字游戏测试
5.2.1提交模块测试
表 5-2-1 提交模块测试表
|
编号 |
测试功能 |
输入描述 |
预期结果 |
运行结果 |
|
C04 |
点击产生随机数 |
不输入 |
自动生成随机数 |
与预期结 果一致 |
|
C05 |
点击输入框输入要猜的数字 |
2 |
弹窗提示猜小了, |
与预期结 果一致 |
|
C06 |
再次输入要猜的数字 |
95 |
弹窗提示猜大了 |
与预期结 果一致 |
|
C07 |
不停输入要猜的数字,往复 |
随机数 |
弹窗提示猜对了 |
与预期结 果一致 |
6 结论和心得
心得:通过这次的学习真的让自己成长的不少,学会了很多新知识,复习了很多旧知识。虽然过程非常的艰辛,期间遇到了很多难题,但是通过同学的指导以及自己上网百度,翻阅资料顺利的做了下来。尽管大部分的问题我还都不会,但我相信只要有付出就会有收获。今后我一定会继续学习,丰富自己的知识。

浙公网安备 33010602011771号