1 选题
|
选题一 |
算术运算测试 |
|
题目要求 |
|
|
实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算分数。添加排行榜功能存放到文件或数据库中。
|
|
|
使用Java知识 |
|
|
Java基本输入输出,运算符,循环,选择分支
|
|
|
选题二 |
猜数游戏 |
|
题目要求 |
|
|
计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用时间和评语。保留用户测试成绩,做出成绩排行榜。排行榜存放到文件或数据库中。
|
|
|
使用Java知识 |
|
|
Java基本输入输出,运算符,循环,选择分支,异常,常用类
|
|
2 系统需求分析
2.1 系统可行性分析
一、技术可行性
Java语言目前是世界上运用最为广泛的计算机语言,也是最为可行的语言。
二、操作可行性。
本次设计实验采用的是Eclipse软件执行,此软件操作便利。满足我们大学生目前的所有实验要求,只要配置好电脑环境变量。
2.2 系统需求分析
一、算术运算测试
1、功能分析
a.系统随机生成两个100以内的数进行加减运算
b.用户输入答案
c.系统进行判断,并给出提示
d.当答完10道题游戏结束,系统给出分数和排行
2.模块图

二、猜数游戏
1、功能分析
a.让用户输入玩几轮游戏
b.系统随机产生一个100以内的数字
c.用户输入猜的数字
d.系统对用户输入的数字进行判断,猜对了就继续猜下一个随机数,猜错了系统提示猜大了还是猜小了,继续猜这个数字是多少
e.最后系统给出猜测次数,时间和评语
2、模块图

2.3 进度安排
阶段一进度安排如表3-1所示。
表3-1 进度安排表
|
阶段 |
持续时间 |
阶段描述 |
输出 |
|
构思阶段 |
3h |
需求分析 |
需求说明,功能模块图 |
|
设计阶段 |
2h |
系统设计 |
设计说明-可以画流程图;数据库设计 |
|
实现阶段 |
5h |
编写代码 |
项目工程源代码 |
|
2h |
系统测试 |
进行黑盒测试(功能测试)-测试说明 |
|
|
运行阶段 |
3h |
部署、运行 |
系统使用说明、运维报告、录制视频 |
3 系统设计
3.1 系统设计
根据系统的实际功能需求分析,对系统功能部分进行了设计。
一、算术运算测试
随机生成题模块:通过random()随机生成10道100以内的加减法
测试模块:用户输入答案,系统进行判断,并给出正确或者错误的提示
成绩记录模块:0分开始,正确一个得一分,错误不得分
输出模块:输出分数,并进行排行
二、猜数游戏
随机数生成模块:系统自动生成一个100以内的随机数
输入模块:用户输入玩几次和猜的数字
系统判断模块:系统判断用户猜的是否正确,正确就猜下一个随机数,错误就 给出猜大了或者猜小了的提示,并让用户继续猜这个数
输出模块:输出猜了多少次,用了多长时间以及排行榜
3.2 文件
4 系统实现
4.1 运行界面实现
算术运算测试:

猜数游戏:


4.2 代码实现
一、算术运算测试
package JieDuanYi;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class JiSuan {
static ArrayList<Integer> al=new ArrayList<Integer>();
static Object[] counts;
public static void main(String[] args) {
int count = 0;//计算正确次数
Random r = new Random();
Scanner input = new Scanner(System.in);
for(int i=1;i<=10;i++) {
//生成两个随机数
int num1=r.nextInt(100);
int num2=r.nextInt(100);
//加法
if(num1<num2) {
System.out.println(num1+"+"+num2+"=?");
int answer = input.nextInt();
if(answer==num1+num2) {//判断是否正确
count++;
System.out.println("回答正确!");
}else {
System.out.println("回答错误!");
}
}
//减法
if(num1>num2) {
System.out.println(num1+"-"+num2+"=?");
int answer = input.nextInt();
if(answer==num1-num2) {
count++;
System.out.println("回答正确!");
}else {
System.out.println("回答错误!");
}
}
}
System.out.println(" 您的分数是:"+count);
JiSuan.Ranking( count);
FileInputStream fos=null;
InputStreamReader oss=null;
BufferedReader br = null;
try {
fos=new FileInputStream("D:/JAVA文件表/排行.txt");
oss=new InputStreamReader(fos);
br=new BufferedReader(oss);
String count1=null;
while((count1=br.readLine())!=null) {
al.add(Integer.valueOf(count1));
counts =al.toArray();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Arrays.sort(counts);
for(int i=0;i<counts.length;i++) {
if((int)counts[i]==count) {
System.out.println("您的排名是"+(counts.length- i));
}
}
}
public static void Ranking(int count) {
FileWriter fw=null;
BufferedWriter bw=null;
// FileReader reader=null;
try { //try catch捕获异常
//输入
fw=new FileWriter("D:/JAVA文件表/排行.txt",true); //分数录入
bw=new BufferedWriter(fw);
String s=Integer.toString(count);
bw.write(s); //记录分数
bw.write("\n");
bw.flush();
System.out.println("操作完毕!---"+count);
bw.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
一、猜数游戏
package JieDuanYi;
import java.io.*;
import java.util.Scanner;
public class Guess {
public static void main(String[] args) {
int count = 0;
int countr=0;
int k=0;
int min=0;
int[] totol=new int[10];
int[] time=new int[10];
Scanner input = new Scanner(System.in);
FileOutputStream fos=null;
OutputStreamWriter osw=null;
BufferedWriter bf = null;
try {
fos = new FileOutputStream("d:/JAVA文件表/JAVA计算器.txt");
osw=new OutputStreamWriter(fos);
bf=new BufferedWriter(osw);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("想玩多少轮游戏:");
int n=input.nextInt();
int num[]=new int[n];
//Scanner input = new Scanner(System.in);
for(int j=1;j<=n;j++) {
int number = (int)(Math.random()*100);//产生随机数
count = 0;//猜测次数
System.out.println("第"+j+"次测试");
int guess;//用户猜的数字
System.out.println("有一个0到99之间的整数,你猜是什么?");
long starttime=System.currentTimeMillis();
//用户猜测随机数
do {
guess=input.nextInt();
if(number<guess) {
System.out.println("猜大了,再猜!");
count++;
}else if(number>guess) {
System.out.println("猜小了,再猜!");
count++;
}else {
count++;
break;
}
}while(true);
long endtime=System.currentTimeMillis();
time[j]=(int)(endtime-starttime)/1000;
System.out.println("这个数字是"+number);
System.out.println("您猜的次数是"+count);
System.out.println("您猜的时间是"+((endtime-starttime)/1000)+"秒");
//根据猜测次数给出评价
if(count==1) {
System.out.println("您太聪明了!");
}else if(count>=2&&count<=5) {
System.out.println("不错,再接再厉!");
}else {
System.out.println("要加油啊!");
}
//System.out.println("恭喜你,猜对了!!!");
try {
String say="朋友"+j+":猜测了:"+count+"次成功"+",用时"+(endtime-starttime)/1000+"秒";
bf.write(say);
bf.newLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
totol[j]=count;
for(k=0;k<j;k++) {
if(totol[j]<totol[k]) {
min=j;
}else if(totol[j]==totol[k]) {
countr++;
num[countr]=k;
}
}
//if(totol[j]+time[j-1]<totol[j-1]+time[j-1]) {
//min=j;
//}
}
if(countr==0) {
//Arrays.sort(totol);
String win="本次猜数字游戏是朋友"+min+"获胜";
try {
bf.write(win);
bf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
String win1="本次获胜的朋友是:";
try {
bf.write(win1);
bf.newLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(int num1=0;num1<=countr;num1++) {
String frend="朋友"+k;
try {
bf.write(frend);
bf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
5 结论和心得
这次实训通过不断地敲写代码让我对java的有关知识点更加清晰起来,或许在之前的理论课中我只是对这些知识点有些模糊的记忆,但是这次的实训让这些记忆开始变得清晰起来了。在我所学的语言当中,我自认为java是一门比较强大的面向对象的编程语言,不仅仅因为它的跨平台性,更多的是因为它的灵活多变和实用性较强,可以说比较的经典和强悍。所以学好java语言有很大的用处,充分全面的了解java的应用和扩展运用。
浙公网安备 33010602011771号