2021-06-30

Tianjin TianShi College

 

Java课程设计

(阶段一文档)

    别:   信息科学与工程学院

    业:    计算机科学与技术

    级:     2019级计科2

学生姓名:       刘欣宜

指导老师:       董保莲

 

二〇二一年七月

1 选题

选题一

算数运算测试

题目要求

实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算分数

使用Java知识

Java基本输入输出,循环分支,Java数组,文件类的使用

选题二

猜数游戏

题目要求

计算机产生随机数,猜中即可,猜不中,提示猜大还是猜小了,继续猜,直到猜到,给出所用时间和评语。保留用户测试成绩,做出成绩排行榜。排行榜放到文件或数据库中。

使用Java知识

Java基本输入输出,循环分支,Java数组,文件类的使用

 

2 系统需求分析

2.1 系统可行性分析

一.算数运算测试

计算机随机产生0-99之间的数和+,-两种运算符,用户在控制台输入自己的计算结果,将用户的结果和正确答案惊醒对比,将答对题的数目记录在数组中,答对一题记一分,最后在排行榜和文件中对用户的打题情况进行显示

     

图2-1:算数运算测试模块图

二.猜数游戏

计算随机产生数,与用户输入的数进行比较,输出猜大或者猜小,直至两者相等退出程序,并根据所猜次数的大小进行评分,将所猜次数写入文件中并在文件和排行榜中显示

图2-2:猜数游戏模块图

系统随机产生10道题,用户输入参赛姓名,参加比赛,做对一题得1分,最后分数和用户姓名保存到数据库,用户可以选择是否查询排行榜。

  • 猜数游戏

设置参与人数,输入数字,系统和产生的数比较猜大还是猜小了或者是猜对了,最后产生所用时间,生成排行榜名。

2.3 进度安排

阶段一进度安排如表2-1所示。

表2-1 进度安排表

阶段

持续时间

阶段描述

输出

构思阶段

3h

需求分析

需求说明,功能模块图

设计阶段

3h

系统设计

设计说明-可以画流程图;数据库设计

实现阶段

2天

编写代码

项目工程源代码

1天

系统测试

进行黑盒测试(功能测试)-测试说明

运行阶段

1天

部署、运行

系统使用说明、运维报告、录制视频

 

3 系统设计

3.1 系统设计

根据系统的实际功能需求分析,对系统功能部分进行了设计。

一.算数测试运算

随机测试题目生成模块:随机产生 0—99之间的数,随机生成0,01两个数,0代表加法,1代表减法

题目测试模块:输入数字,判断是否为0-99之间的数字并判断正确与否并进行下一题运算

成绩记录模块:每题一分,共十题,总分十分

退出功能模块:系统询问要不要继续,y表示继续,n表示退出

二.猜数游戏

随机数生成模块:运行后,系统随机生成一个数字

判断随机数与输入模块:填写数字判断是否与文本框的值相等并给出提示,继续猜,直至猜对为止

次数记录模块:每猜一次记录一次,记录总次数

成绩记录模块:猜对次数少的成绩最高

3.2 文件设计

猜数游戏信息存入d:\\猜数.txt文件中,运行过程每个人的信息存放在文件中,包括所得分数和所用时间等,所有信息写入文件,在文件中显示出来算数运算写出排行榜等信息。

4 系统实现

4.1算数运算测试

一.算数运算测试

package shiyan;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Random;

import java.util.Scanner;

import java.util.ArrayList;

import java.util.Comparator;

public class math {

   public static Map<String,Integer>map=new HashMap<String,Integer>();

   public static long time ;

   public static void beginTest(){

       System.out.println("请输入你的用户名");

       Scanner inputname=new Scanner (System.in);

       String name =inputname.nextLine();

       if(name!=null){

          int result=0;

          int score =0;

          Random rand =new Random();

          Scanner scan=new Scanner (System.in);

          for(int i=0;i<10;i++){

              int num1=rand.nextInt(100);//0-99随机数字

              int num2=rand.nextInt(100);

              int operator=rand.nextInt(2);//0-1  0:加法  1:减法

              //随机生成一个整数,值域【0,2)

              if (operator==0){

                 result=num1+num2;

                 System.out.println(num1+"+"+num2+"=?");

              }else{

                 result=num1-num2;

                 System.out.println(num1+"-"+num2+"=?");

              }

              int input=scan.nextInt();//用户输入结果

              if(input!=result){

                 System.out.println("回答错误");

              }else if(input==result){

                 System.out.println("回答正确");

                 score+=1;

              }

              map.put(name, score);//存放

          }

   }

       else{

          System.out.println("输入有误重新输入");

       }

   }

       public static void main(String[] args) {

      beginTest();//进行调用

while(true){

   System.out.println("是否继续?");

   Scanner input=new Scanner (System.in);

   String instruction =input.next();

   if(instruction.equals("n")){

       System.out.println("游戏结束,排行榜如下");

       List<Map.Entry<String,Integer>>List=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());

       List.sort(new Comparator<Map.Entry<String,Integer>>(){

          //转换为list

          //方法写在list.sort()的括号里

          //Map.Entry<String,long>转换为list

          //

          public int compare(Map.Entry<String,Integer>o1,Map.Entry<String,Integer>o2){

              //Map.Entry 是Map声明的一个内部接口为泛型,定义为Entry<K.v>

              //表示Map中的一个实体,可以参与比较的字符又完全一样,则返回两个字符串的长度差值

              return o1.getValue().compareTo(o2.getValue());

              //compare to 比较字符串,从第一个字母开始比较,一直到有不同的时候,返回不同的asc码差值

              //两个字符串如果不一样长,参与的自妇产又完全一样,则返回两个字符串的长度差值

          }

       });

       for (int i=0;i<List.size();i++){

       System.out.println(List.get(i).getKey()+":"+List.get(i).getValue()+"分");

          //取list集合第i个元素的键值

       }

       break;

   }

   else if (instruction.equals("y")){

       beginTest();

      

   }

}

   }

}

二.猜数游戏

package shiyan;

import java.io.*;

import java.lang.reflect.Array;

import java.util.*;

public class GuessNumber {

   public static void main(String[] args) {

       // TODO Auto-generated method stub

       System.out.println("一起来猜数字吧!");

       Scanner sc=new Scanner(System.in);

       System.out.println("请输入参与的人数");

       int personNumber=sc.nextInt();

       Writer wr=null;//输入流

       int guess;//用户猜的数字

       int[] score=new int[personNumber];//定义数组存放成绩

       int []count1=new int[personNumber];//定义数组存放猜测次数

       for(int j=0;j<personNumber;j++) {

          int number=(int)(Math.random()*100);//定义number为随机数,随机生成1-100之间的数

          int count=0;//猜测次数

          System.out.println("*******************************");

          System.out.println("准备好了吗?开始了");

          System.out.println("请输入0-100之间的数字");

          long  starttime=System.currentTimeMillis();//开始时间

          //开始猜数

          do {

              guess=sc.nextInt();

              if(number<guess) {

                 System.out.println("猜大了,继续猜");

                 count++;

                 count1[j]+=1;

              }

              else if(number>guess) {

                 System.out.println("猜小了,请继续");

                 count++;

                 count1[j]+=1;

              }

              else {

                 count++;

                 count1[j]+=1;

                 break;

              }

          }while(true);

          long endtime=System.currentTimeMillis();//结束时间

          System.out.println("这个数字是:"+number);

         System.out.println("第"+(j+1)+"位玩家共猜了"+count+"次,本次猜数游戏得分:"+count1[j]);

          System.out.println("一共用时"+(endtime-starttime)/1000+"秒");

          //猜测次数评价

          if(count==1)

          {

              System.out.println("恭喜你,一次就猜对了!");

          }

          else if(count>=2&&count<=10){

              System.out.println("猜得不错,继续加油");

          }else {

              System.out.println("猜的有点慢");

          }

          //写入文件

          try {

              wr=new FileWriter("d://猜数.txt",true);

              wr.write("\r\n");

              wr.write("第"+(j+1)+"位玩家:");

              wr.write("\r\n");

              wr.write("猜数次数");

              String guess1=Integer.toBinaryString(count);

              wr.write(guess1);

              wr.write("\r\n");

              wr.write("\r\n");

              System.out.println("已写入文件");

          }catch(IOException e) {

              e.printStackTrace();

          }finally {

              try {

                 wr.close();

              }catch(IOException e) {

                 e.printStackTrace();

              }

          }

       }

       Arrays.sort(count1);//对分数排序

      System.out.println("***********************************");

       System.out.println("***********排行榜*****************");

       System.out.println("本次得分排名如下:");

       //使用冒泡排序对猜数的信息进行排序

       for(int i=0;i<score.length;i++){

          for(int j=0;j<score.length-1;j++){

              if(count1[j]>count1[j+1]){

                 int temp=count1[j];

                 count1[j]=count1[j+1];

                 count1[j+1]=temp;

              }

          }

       }

       System.out.println();

       System.out.println("名次\t所猜次数");

       for(int x=0;x<score.length;x++){

          System.out.println(""+(x+1)+"\t  "+"所猜次数为:"+count1[x]);

       }

        }

}

4.2用户界面实现

4.2算数运算测试

输入用户名后进入运算,填写运算答案后显示运算结果正确或是错误,继续答题10道完成后,提示是否继续答题,若输入y则继续答题,n则退出答题界面停止答题,游戏结束后体现出各玩家排行榜

图4-1主程序界面

 

图4-2运行界面

4.3猜数游戏

输入参与人数后进入游戏,输入规定范围内所猜数字,猜大猜小或猜中会给出相对应的评语且有十次猜数机会,以及过程中所用到的时间。将这些信息写入文件。猜中退出程序得出排行榜体现出名次和所猜次数。

图4-3主程序界面

图4-4运行界面

5 系统测试

5.1算数运算测试

表5-1  算术运算测试模块

编号

测试功能

输入描述

预期结果

运行结果

1

时间

将用户算数运算过程中所使用的时间放在数组中

用户答题所用时间可以正常记录

正常,与预期结果一致

2

次数

将用户答题所用的正确次数保存

用户答题的正确次数可以正常记录

正常,与预期结果一致

3

成绩

用户答题正确次数*1

用户所得成绩可以根据正确次数进行准确计算

正常,与预期结果一致

算术运算测试模块主要是针对用户的操作,从测试结果中可以看出该模块的所有功能均能正常实现,且测试结果与预期结果一致。

  • 猜数游戏

表5-2猜数游戏测试模块

编号

测试功能

输入描述

预期结果

运行结果

1

时间

将用户猜数过程中所使用的时间放在数组中

用户所猜数字所用时间可以正常记录

正常,与预期结果一致

2

次数

将用户猜数过程中所用的次数保存

用户猜数过程中所用的次数可以正常记录

正常,与预期结果一致

猜数游戏测试模块主要是针对用户的操作,从测试结果中可以看出该模块的所有功能均能正常实现,且测试结果与预期结果一致。

6 结论和心得

结论:本次实验中通过使用Java知识,能够实现猜数游戏和算术运算两个项目的独立运行,且能够实现各自题目的要求,最终结果能与预想结果一致

心得:回顾两天的Java个人项目实训虽然时间很短但是每一天都使我收获很大受益匪浅,它加深了我对理论知识的理解,使我在Java理论上有了全新的认识,在世间能力上也得到了提高,真正的学以致用,也通过老师的指导和自己的练习,顺利化解了一道道的障碍,使自己基本掌握Java的基础知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值