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的基础知识