个人设计文档
目 录
1 选题 1
2 系统需求分析 2
2.1 系统可行性分析 2
2.2 系统需求分析 2
2.3 项目进度安排 2
3 系统设计 4
3.1 系统设计 4
3.2 数据库设计(有则写-无则删除,如果是文件直接写文件) 4
4 系统实现 6
4.1 代码实现 6
4.2 运行界面实现 6
5 结论和心得 9
1 选题
|
选题一 |
算术运算测试 |
|
题目要求 |
|
|
随机生成十道两个100以内数的加减法运算题 通过与用户输入的答案相比较对错计算分数 具有排行榜功能 排行榜保存 用随机生成的一个1-10的数来取余2判断结果是否为零来决定加减法 每题十分 答完十道题将用户名和分数存到数据库 根据分数来进行排名
|
|
|
使用Java知识 |
|
|
运算符、循环、选择分支、JDBC、基本输入和输出
|
|
|
选题二 |
猜数游戏 |
|
题目要求 |
|
|
随机猜数 猜对或猜错了给出范围提示 直到猜对 根据猜的次数计算分数 猜对了提示是否继续猜 用random随机生成一个数来进行猜数 猜错了提示猜大了还是猜小了 猜对时显示猜了几次和分数评语
|
|
|
使用Java知识 |
|
|
循环、分支、变量、常用类、gui 随机数
|
|
2 系统需求分析
2.1 系统可行性分析
一、算数运算测试
1.技术可行性
本次程序运用的是eclipse软件和数据库,采用的java语言,java面向对象,所以技术上是可行的。
2.经济可行性
因为本次程序使用的eclipse软件是免费的,在这个软件上就能满足我们的需求,我们不需要额外的开销,所以经济上也是可行的。
3.操作可行性
本次程序只需要用户有这个软件并配置好了环境变量就可以使用,操作简单便捷,符合大部用户的使用习惯。因此在操作上是可行的。
二、猜数游戏
1技术可行性
本次程序运用的是eclipse这个软件中的GUI插件技术,采用的java语言,java面向对象,GUI基础语言,所以技术上是可行的。
2.经济可行性
因为本次程序使用的eclipse软件是免费的,在这个软件上就能满足我们的需求,我们不需要额外的开销,所以经济上也是可行的。
3.操作可行性
本次程序只需要用户有这个软件并配置好了环境变量并且安装windowbuilder插件就可以使用,操作简单便捷,符合大部用户的使用习惯。因此在操作上是可行的。
2.2 系统需求分析
一、算数运算测试
1.需求分析
随机生成十道两个100以内数的加减法运算题 通过与用户输入的答案相比较对错计算分数 具有排行榜功能 排行榜保存
用随机生成的一个1-10的数来取余2判断结果是否为零来决定加减法
每题十分 答完十道题将用户名和分数存到数据库 根据分数来进行排名
1.功能模块图

图2-1模块图
二、猜数游戏
- 需求分析
随机猜数 猜对或猜错了给出范围提示 直到猜对 根据猜的次数计算分数 猜对了提示是否继续猜
用random随机生成一个数来进行猜数 猜错了提示猜大了还是猜小了 猜对时显示猜了几次和分数评语
2.功能模块图

图2-2模块图
2.3 进度安排
阶段一进度安排如表2-1所示。
表2-1 进度安排表
|
阶段 |
持续时间 |
阶段描述 |
输出 |
|
构思阶段 |
2小时 |
需求分析 |
需求说明,功能模块图 |
|
设计阶段 |
2小时 |
系统设计 |
设计说明-可以画流程图;数据库设计 |
|
实现阶段 |
4小时 |
编写代码 |
项目工程源代码 |
|
4小时 |
系统测试 |
进行黑盒测试(功能测试)-测试说明 |
|
|
运行阶段 |
2小时 |
部署、运行 |
系统使用说明、运维报告、录制视频 |
3 系统设计
3.1 系统设计
根据系统的实际功能需求分析,对系统功能部分进行了设计。
一、算数运算测试
输入用户名来开始测试,然后随机生成两个1-100的数,再随机生成一个1-10的数,用随机生成的1-10的数来取余2判断结果是否为零来决定是加法或是减法运算,显示计算题循环十次,然后与键盘输入的数进行比较来,正确则加10分,错误不加分。
再导入数据库 存储姓名和成绩到数据库,在数据库中根据成绩来计算排名。再显示出成绩姓名和排名,最后询问用户是否继续进行下一次测试。输入1则继续循环,0则显示退出游戏。
二、猜数游戏
运行程序,在gui界面上有我猜和再来一次按钮,在文本框中输入你想猜的数字,正确则显示猜对了!并显示猜了几次和分数,猜错了则提示猜大了或是猜小了,猜对之后显示如果想要进行下一次猜数则按再来一次。
3.2 数据库设计(有则写-无则删除,如果是文件直接写文件)
用户表主要记录了普通用户基本信息,如表3-2所示。
表3-1 用户信息
|
序号 |
字段名 |
数据类型 |
约束 |
是否为空 |
说明 |
|
1 |
name |
varchar(10) |
主键 |
否 |
用户id |
|
2 |
score |
Int(10) |
|
是 |
成绩 |
|
3 |
num |
Int(10) |
|
否 |
排名 |
4 系统实现
4.1 代码实现
一、算数运算测试
package projectone;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
public class Main {
/*
* 随机生成十道两个100以内数的加减法运算题
* 通过与用户输入的答案相比较对错计算分数 具有排行榜功能 排行榜保存
*/
public void jt(String name){
int num1,num2,i;
int sum =0; // 结果
int score=0; //分数
Random r = new Random();
Main m = new Main();
System.out.println("\t算术运算测试\t");
for(int a=0;a<10;a++) {
//随机生成两个数
num1 = (int)(Math.random()*100);
num2 = (int)(Math.random()*100);
//随机生成一个1-10的数 来取余2
//判断结果是否为零 来决定是加法还是减法
i = (int)(Math.random()*10)%2;
if(i==0) {//加法运算
System. out. println(num1+"+"+num2+"=?");
sum = num1+num2;
}else {//减法运算
System. out. println(num1+"-"+num2+"=?");
sum = num1-num2;
}
System. out. println("请输入答案:");
Scanner input=new Scanner(System.in);
int n = input.nextInt();
if(n==sum) {
System. out. println("回答正确加10分!");
score+=10;
}else {
System. out. println("回答错误不加分!");
}
}
System.out.println("------------------------");
System.out.println("测试结束 您的总分为"+score);
//存储数据库
Connection con;
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "926498";
try {
//Class.forName() 将JDBC驱动加载进JAVA虚拟机
Class.forName("com.mysql.jdbc.Driver");
//用DriverManager的getConnection方法取得mysql连接
con = DriverManager.getConnection(url, user, password);
if(!con.isClosed())
System.out.println("正在保存中");
//进入数据库
Statement statement = con.createStatement();
String sql = "insert into test(name,score) values('"+name+"',"+score+")";
//存储数据库
int count = statement.executeUpdate(sql);
if(count>0)
System.out.println("存储成功");
else
System.out.println("存储失败");
String sql1="SELECT @rowNum:=@rowNum + 1 AS 'num' ,a.* FROM test a,(SELECT @rowNum:=0) b ORDER BY a.score DESC";
ResultSet rs = statement.executeQuery(sql1);
System.out.println("名次" + "\t\t" + "姓名" + "\t\t" + "总分");
while(rs.next()) {
int num = rs.getInt("num");
int score1 = rs.getInt("score");
String name1 = rs.getString("name");
System.out.println(num + "\t\t" + name1 + "\t\t" + score1);
}
}catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
}
System.out.println("是否继续下一轮测试:");
System.out.print("继续: 1\n退出:0\n");
Scanner input=new Scanner(System.in);
int Ro = input.nextInt();
if(Ro==1) {
m.loop();
}else {
System.out.print("已退出游戏!n");
}
}
public static void main(String[] args) {
Main m = new Main();
m.loop();
}
public void loop() {
Main m = new Main();
Scanner input = new Scanner(System.in);
System.out.println("输入名字 开始测试");
String name = input.next();
m.jt(name);
input.close();
}
}
二、猜数游戏
package projectTwo;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.Font;
public class Guess extends JFrame implements ActionListener{
private JPanel contentPane;
Label lb2 = new Label();
Label lb3 = new Label(); //
Label lb1 = new Label();
Label lb4 = new Label();
Label lb5 = new Label();
JTextField textField;
JButton btnNewButton = new JButton("我猜");
JButton btnNewButton_1 = new JButton("再来一次");
int num = (int)(Math.random()*100);
int sum=1;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Guess frame = new Guess();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Guess() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
textField = new JTextField();
textField.setBounds(168, 31, 66, 21);
contentPane.add(textField);
textField.setColumns(10);
btnNewButton.addActionListener(this);
btnNewButton.setBounds(154, 92, 97, 23);
contentPane.add(btnNewButton);
lb1.setFont(new Font("宋体", Font.PLAIN, 12));
lb1.setBounds(245, 34, 58, 15);
contentPane.add(lb1);
lb2.setBounds(43, 149, 100, 15);
contentPane.add(lb2);
btnNewButton_1.addActionListener(this);
btnNewButton_1.setBounds(154, 164, 97, 23);
contentPane.add(btnNewButton_1);
lb3.setBounds(43, 212, 150, 15);
contentPane.add(lb3);
lb4.setBounds(43, 34, 150, 15);
contentPane.add(lb4);
lb5.setBounds(261, 136, 100, 15);
contentPane.add(lb5);
System.out.println(num);
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
if(arg0.getSource()==btnNewButton) {
System.out.println("************");
int a = Integer.parseInt(textField.getText());
if(a==num) {
lb2.setText("太棒了你猜中了!");
lb3.setText("继续游戏请按再来一次");
lb5.setText("你一共尝试了"+sum+"次");
if(sum<5)
lb4.setText("你的分数为100分 太棒了你是个天才!");
if(sum>5&&sum<10)
lb4.setText("你的分数为80分 很棒了 继续努力!");
if(sum>10)
lb4.setText("你的分数为60分 继续努力吧 大傻蛋!");
}else if(a>num) {
lb1.setText("猜大了!");
sum+=1;
}else {
lb1.setText("猜小了!");
sum+=1;
}
}
if(arg0.getSource()==btnNewButton_1) {
textField.setText(null);
lb1.setText(null);
lb2.setText(null);
lb3.setText(null);
lb4.setText(null);
lb5.setText(null);
num = (int)(Math.random()*100);
}
}
}
4.2运行界面实现
一、算数运算测试




图4-2-1 算术测试运行截图
二、猜数游戏




图4-2-2 猜数游戏运算截图
5 结论与心得
本次课程设计我选择的是项目一的算术测试程序和项目二的猜数游戏,刚开始做时有一点懵懵的,不知道从什么地方开始做起,看了几遍和老师讨论过后的要求,我渐渐捋清了思路。首先项目一我本打算用GUI实现整个程序,然而自己尝试了一下午之后进展十分缓慢,选择了放弃GUI,只选择在控制台上显示,用数据库实现成绩、姓名和排名的存储与读取,在通过室友的教导和自己看视频,慢慢找到了思路,在调试了很久之后终于可以完美的运行了,虽然还有很多不好的地方,但是是通过我自己的努力来完成的,这让我倍感骄傲。在做项目二时,我选择了GUI实现,因为这个项目的要求要比第一题来的简单许多,没有排名和用户的限制,在经过一段时间的调试之后也实现了完美的运行。
通过这次课程设计让我发现了许多自身不足的地方,也锻炼了自己独立完成程序的能力,在这次设计中我也感觉到了编程的乐趣,特别是经过许多次调试之后终于能运行的时候,会有极大的满足感。相信在接下来的综合项目中会发挥的比现在还要好

浙公网安备 33010602011771号