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.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("有一个099之间的整数,你猜是什么?");

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();

}

 

}

 

 

}

 

 

}

 

 

 

}

 

结论和心得

这次实训通过不断地敲写代码让我对java的有关知识点更加清晰起来,或许在之前的理论课中我只是对这些知识点有些模糊的记忆,但是这次的实训让这些记忆开始变得清晰起来了。在我所学的语言当中,我自认为java是一门比较强大的面向对象的编程语言,不仅仅因为它的跨平台性,更多的是因为它的灵活多变和实用性较强,可以说比较的经典和强悍。所以学好java语言有很大的用处,充分全面的了解java的应用和扩展运用