目 录
1 选题............................................................................................................................. 1
3 系统需求分析............................................................................................................. 2
3.1 系统可行性分析.............................................................................................. 2
3.2 系统需求分析.................................................................................................. 2
3.3 项目进度安排.................................................................................................. 2
4 系统设计..................................................................................................................... 4
4.1 系统设计.......................................................................................................... 4
4.2 数据库设计(有则写-无则删除,如果是文件直接写文件).................... 4
5 系统实现..................................................................................................................... 6
5.1 管理员登录界面实现...................................................................................... 6
5.2 管理用户信息界面实现.................................................................................. 6
6 系统测试..................................................................................................................... 8
7 结论和心得................................................................................................................. 9
选题一 |
算术运算测试 |
题目要求 |
|
实现十道 100 以内加减法数学题,能根据题目计算出答案,与输 入答案对比,判断做题是否正确,最后计算分数。 添加排行榜功能存放到文件或数据库中。 |
|
使用Java知识 |
|
if循环 封装 方法调用 Random类 AWT和Swing组件的运用 |
|
选题二 |
简易计算器模拟程序 |
题目要求 |
|
简易计算器模拟程序 功能要求:仿照 Windows 计算器,编写一具有 GUI 的计算器,能实现整数的 加、减、乘、除四则运算。历次计算需存放在文件或数据库中,下回启动可重复 使用。功能具体参考 windows 计算器(查看菜单选择:标准型即可) 加分建议-可升级至综合设计:更多功能(进制转换)、更漂亮界面、更方便 的操作、支持解析四则运算表达式、支持对大数的加减法、支持对运算结果的保 存与读取。或者做成多线程,提供网络计算服务。根据添加内容:可提升至综合 设计。
|
|
使用Java知识 |
|
继承 构造方法 方法调用 AWT和Swing组件的运用 |
算术运算测试
功能要求:实现十道 100 以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算分数。添加排行榜功能存放到文件或数据库中。
简易计算器模拟程序
功能要求:仿照 Windows 计算器,编写一具有 GUI 的计算器,能实现整数的加、减、乘、除四则运算。历次计算需存放在文件或数据库中,下回启动可重复使用。功能具体参考 windows 计算器(查看菜单选择:标准型即可),加分建议-可升级至综合设计:更多功能(进制转换)、更漂亮界面、更方便的操作、支持解析四则运算表达式、支持对大数的加减法、支持对运算结果的保存与读取。或者做成多线程,提供网络计算服务。根据添加内容:可提升至综合设计。
1、随机产生一道算术题并且这道算术题是从100以内的数字产生的,需要输入结果进行判断是否正确,利用循环完成十道算术题,答对一题加十分最后统计总分。
2、在输出界面上随意进行一个加减乘除的运算。就按照平时的简易计算器进行操作即可。
阶段一进度安排如表3-1所示。
表3-1 进度安排表
阶段 |
持续时间 |
阶段描述 |
输出 |
构思阶段 |
10min |
需求分析 |
需求说明,功能模块图 |
设计阶段 |
30min |
系统设计 |
设计说明-可以画流程图;数据库设计 |
实现阶段 |
3h |
编写代码 |
项目工程源代码 |
1h |
系统测试 |
进行黑盒测试(功能测试)-测试说明 |
|
运行阶段 |
30min |
部署、运行 |
系统使用说明、运维报告、录制视频 |
根据系统的实际功能需求分析,对系统功能部分进行了设计。
算术运算测试:
分析:利用JFrame(窗口)、JPanel(容器)函数进行主界面的输出,分别对窗口大小,窗口内的标题框,答案框,还有期中的输出,都进行了大小的设置,导入了Java中有用的包,判断窗口。
总结:
优点:系统完成了实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比判断答案是否正确,最后计算分数功能。
缺点:系统界面还是比较单调,需要进一步美化,提高用户的兴趣。点击下一题时上次输入的答案还在新题的答案框里。
收获:刚开始的时候觉得自己学的不好,这要写那么多怎么办呀,可是慢慢的还是自己边翻笔记边写虽然这个过程是有点艰难但是最后还是做出来了,感觉自己收获了很多,以前不清晰的知识点也变得清晰了很多。通过个人阶段的训练我相信后面的总和实训自己会做的更好。
运行结果:
1 import java.awt.event.ActionEvent; 2 import java.awt.event.ActionListener; 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 import java.util.Random; 9 10 import javax.swing.JButton; 11 import javax.swing.JFrame; 12 import javax.swing.JLabel; 13 import javax.swing.JOptionPane; 14 import javax.swing.JPanel; 15 import javax.swing.JTextField; 16 import javax.swing.WindowConstants; 17 18 public class Random_problem { 19 20 // MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL 21 static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 22 static final String DB_URL = "jdbc:mysql://localhost:3306/person1"; 23 // 数据库的用户名与密码,需要根据自己的设置 24 static final String USER = "result"; 25 static final String PASS = "lw280615"; 26 27 JFrame jf=new JFrame(); 28 JPanel jp=new JPanel(); 29 JLabel jl=new JLabel(); //显示题目 30 JLabel jl2=new JLabel(); //显示结果正确与否 31 JButton jb=new JButton("提交"); 32 JButton jb2=new JButton("next"); 33 34 JTextField jtf=new JTextField(); //输入答案 35 public int num1,num2,sum,s,temp,count=0,score,s1; 36 public Random_problem() 37 { 38 //定义界面的大小 39 jf.setSize(300,300); 40 jf.add(jp); 41 jp.setLayout(null); 42 jp.add(jl); 43 jl.setBounds(18,18,100,10); 44 jp.add(jtf); 45 jtf.setBounds(120,10,40,20); 46 jp.add(jb); 47 jb.setBounds(10,50,60,40); 48 jp.add(jb2); 49 jb2.setBounds(80,50,60,40); 50 jp.add(jl2); 51 jl2.setBounds(60,100,200,50); 52 jf.setVisible(true); 53 jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 54 } 55 public void produce() 56 { 57 //创建Random类 58 Random rand=new Random(); 59 //产生随机数 60 num1=(int)(Math.random()*100); 61 num2=(int)(Math.random()*100); 62 sum=0; 63 //根据temp产生的随机数对2取余的值来判断是加法还是减法 64 65 temp=(int)(Math.random()*100)%2; 66 if(temp==0) 67 { 68 jl.setText("第"+(count)+"题:"+num1+"+"+num2+"="); 69 count++; 70 sum=num1+num2; 71 } 72 else if(num1>num2){ 73 count++; 74 jl.setText("第"+(count)+"题:"+num1+"-"+num2+"="); 75 sum=num1-num2; 76 } 77 else { 78 count++; 79 jl.setText("第"+(count)+"题:"+num2+"-"+num1+"="); 80 sum=num2-num1; 81 } 82 jb.addActionListener(new ActionListener() 83 { 84 public void actionPerformed(ActionEvent e) { 85 int s=Integer.parseInt(jtf.getText()); 86 if(sum==s) { 87 jl2.setText("恭喜,回答正确"); 88 score+=10; 89 } 90 else { 91 jl2.setText("抱歉,回答错误。"+"正确答案:"+sum); 92 } 93 } 94 } 95 ); 96 97 Connection conn = null; 98 Statement stmt = null; 99 try{ 100 // 注册 JDBC 驱动 101 Class.forName(JDBC_DRIVER); 102 103 // 打开链接 104 System.out.println("连接数据库..."); 105 conn = DriverManager.getConnection(DB_URL,USER,PASS); 106 107 // 执行查询 108 System.out.println(" 实例化Statement对象..."); 109 stmt = conn.createStatement(); 110 String sql; 111 sql = "insert into result value(‘"+count+"‘,‘"+s+"‘,‘"+sum+"‘,‘"+score+"‘);"; 112 ResultSet rs = stmt.executeQuery(sql); 113 114 // 完成后关闭 115 rs.close(); 116 stmt.close(); 117 conn.close(); 118 }catch(SQLException se){ 119 // 处理 JDBC 错误 120 se.printStackTrace(); 121 }catch(Exception e){ 122 // 处理 Class.forName 错误 123 e.printStackTrace(); 124 }finally{ 125 // 关闭资源 126 try{ 127 if(stmt!=null) stmt.close(); 128 }catch(SQLException se2){ 129 }// 什么都不做 130 try{ 131 if(conn!=null) conn.close(); 132 }catch(SQLException se){ 133 se.printStackTrace(); 134 } 135 } 136 137 138 jb2.addActionListener(new ActionListener() { 139 public void actionPerformed(ActionEvent e) 140 { 141 if(count==10) { 142 JOptionPane j=new JOptionPane(); 143 j.showMessageDialog(jf,"您的分数是:"+score); 144 jf.setVisible(false); 145 } 146 Random rand =new Random(); 147 num1=(int)(Math.random()*100); 148 num2=(int)(Math.random()*100); 149 sum=0; 150 temp=(int)(Math.random()*10)%2; 151 if(temp==0) { 152 count++; 153 jl.setText("第"+(count)+"题:"+num1+"+"+num2+"="); 154 sum=num1+num2; 155 } 156 else if(num1>num2){ 157 count++; 158 jl.setText("第"+(count)+"题:"+num1+"-"+num2+"="); 159 sum=num1-num2; 160 } 161 else { 162 count++; 163 jl.setText("第"+(count)+"题:"+num2+"-"+num1+"="); 164 sum=num2-num1; 165 } 166 } 167 } 168 ); 169 170 } 171 172 173 174 175 176 public static void main(String[] args) 177 { 178 Random_problem a=new Random_problem(); 179 a.produce(); 180 181 182 } 183 }
简易计算器:
流程图:
总结:
1、在实验过程中出现了各类问题,通过发现问题并改正,提高了自身的编程能力。
2、熟练掌握了Swing组件和AWT组件的应用以及之前的一些知识点的应用。
运行结果
1 import java.awt.*; //导入包 2 import java.awt.event.*; 3 4 import javax.swing.*; 5 6 class Jisuan extends JFrame { //计算器 7 JPanel p1 = new JPanel(); 8 JButton numberbutton[] = new JButton[10]; 9 String numbuttonName[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0"};//为了后面对数字按钮的构造 10 11 JButton plusbutton = new JButton("+"); 12 JButton minusbutton = new JButton("-"); 13 JButton multipybutton = new JButton("X"); 14 JButton dicisionbutton = new JButton("/"); 15 JButton calbutton = new JButton("="); 16 JButton pointbutton = new JButton("."); 17 18 JLabel label = new JLabel("计算:"); 19 20 String add1 = ""; //标签上运算符之前的内容 21 String add2 = ""; 22 String output = ""; 23 boolean plusClicked = false; 24 boolean minuClicked = false; 25 boolean multClicked = false; 26 boolean diciClicked = false; 27 Double result = 0.0; //输出结果初始化 28 29 Jisuan() { //构造方法 30 setTitle("简易计算器"); 31 getContentPane().setLayout(null); 32 p1.setBounds(100, 30, 400, 450); 33 p1.setLayout(new GridLayout(4, 4)); 34 for (int i = 0; i < 10; i++) { 35 numberbutton[i] = new JButton(numbuttonName[i]); //对数字按钮的构造 36 numberbutton[i].setFont(new Font("楷体", Font.BOLD, 20)); 37 numberbutton[i].addActionListener(new ActionListener() { //为了简洁下面都会使用这种格式的监听接口实现 38 public void actionPerformed(ActionEvent e) { 39 if (!(plusClicked || minuClicked || multClicked || diciClicked)) { 40 add1 = add1 + e.getActionCommand(); 41 output = "计算:" + add1; 42 label.setText(output); 43 } else { 44 add2 = add2 + e.getActionCommand(); 45 output = output + e.getActionCommand(); 46 label.setText(output); 47 } 48 } 49 }); 50 p1.add(numberbutton[i]); 51 } // 数字按钮的添加 52 53 plusbutton.addActionListener(new ActionListener() { //加号监听事件 54 public void actionPerformed(ActionEvent e) { 55 plusClicked = true; 56 output += "+"; 57 label.setText(output); 58 } 59 }); 60 plusbutton.setFont(new Font("楷体", Font.BOLD, 20)); 61 p1.add(plusbutton); //将加号加到面板上 62 63 minusbutton.addActionListener(new ActionListener() { 64 public void actionPerformed(ActionEvent e) { 65 minuClicked = true; 66 output += "-"; 67 label.setText(output); 68 } 69 }); 70 minusbutton.setFont(new Font("楷体", Font.BOLD, 20)); //为了美观特意把按钮字体调大 71 p1.add(minusbutton); //将减号加到面板上 72 73 multipybutton.addActionListener(new ActionListener() { 74 public void actionPerformed(ActionEvent e) { 75 multClicked = true; 76 output += "*"; 77 label.setText(output); 78 } 79 }); 80 multipybutton.setFont(new Font("楷体", Font.BOLD, 20)); 81 p1.add(multipybutton); //将乘号加到面板上 82 83 dicisionbutton.addActionListener(new ActionListener() { 84 public void actionPerformed(ActionEvent e) { 85 diciClicked = true; 86 output += "/"; 87 label.setText(output); 88 } 89 }); 90 dicisionbutton.setFont(new Font("楷体", Font.BOLD, 20)); 91 p1.add(dicisionbutton); //将除号加到面板上 92 93 pointbutton.addActionListener(new ActionListener() {//小数点监听事件 94 public void actionPerformed(ActionEvent e) { 95 if (!(plusClicked || minuClicked || multClicked || diciClicked)) { 96 add1 += "."; 97 output += "."; 98 } else { 99 add2 += "."; 100 output += "."; 101 } 102 103 label.setText(output); 104 } 105 }); 106 p1.add(pointbutton); 107 pointbutton.setFont(new Font("楷体", Font.BOLD, 20)); //将小数点加到面板上 108 109 calbutton.addActionListener(new ActionListener() { 110 public void actionPerformed(ActionEvent e) { 111 if (plusClicked) { 112 result = Double.valueOf(add1) + Double.valueOf(add2); 113 plusClicked = false; 114 add1 = ""; 115 add2 = ""; 116 } 117 if (minuClicked) { 118 result = Double.valueOf(add1) - Double.valueOf(add2); 119 minuClicked = false; 120 add1 = ""; 121 add2 = ""; 122 } 123 if (multClicked) { 124 result = Double.valueOf(add1) * Double.valueOf(add2); 125 multClicked = false; 126 add1 = ""; 127 add2 = ""; 128 } 129 if (diciClicked) { 130 result = Double.valueOf(add1) / Double.valueOf(add2); 131 diciClicked = false; 132 add1 = ""; 133 add2 = ""; 134 135 } 136 output += "=" + Double.toString(result); 137 label.setText(output); 138 output = ""; 139 } 140 }); 141 calbutton.setFont(new Font("楷体", Font.BOLD, 20)); 142 p1.add(calbutton); //将等号加到面板上 143 144 getContentPane().add(p1); //把面板放到JFrame上 145 label.setBounds(20, 380, 200, 300); 146 label.setFont(new Font("黑体", Font.BOLD, 20)); 147 getContentPane().add(label); //把标签放到窗口上 148 setSize(600, 680); 149 setVisible(true); 150 setDefaultCloseOperation(EXIT_ON_CLOSE); 151 }//构造方法的末尾 152 } 153 154 155 public class Calculator { 156 public static void main(String[] args) { 157 158 Jisuan js = new Jisuan(); 159 } 160 }
与老师讨论:
原文:https://www.cnblogs.com/qkmm/p/13200704.html