结对作业-基于GUI的四则运算
一、需求分析
1、题目要求:
我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:
记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
有计时功能,能显示用户开始答题后的消耗时间。
界面支持中文简体/中文繁体/英语,用户可以选择一种;
2、题目分析:
(1)支持真分数和整数的运算;
(2)能够判断对错,且输出正确答案;能够计算正确率并输出;
(3)将程序弄成GUI;
(4)可切换语言,界面支持中文简体/中文繁体/英语,用户可以选择一种;
(5)计时器功能,点击开始计时时,能显示用户开始答题后的消耗时间;
3、分工
此次程序设计由l吴伟君(201421123080)和我(201221123032)一起完成
我的码云地址:https://git.oschina.net/junge212/Arithmetic_java/tree/master
二、 程序设计
我们选择设计了两个功能:
1、计时器功能,点击开始计时时,能显示用户开始答题后的消耗时间;
2、可切换语言,界面支持中文简体/中文繁体/英语,用户可以选择一种;
流程图:

三、代码展示
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*; public class Arithmetic {
public static void main(String[] args){
MathF math = new MathF();
math.show();
}
}
class MathF extends JFrame{
public MathF(){
Container contentPane = getContentPane();
final Panel panel = new Panel();
contentPane.add(panel);
//contentPane.add(label); setSize(500,500);
setTitle("四则运算");
setResizable(false);
setLocation(0,0);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.setCursor(new Cursor(Cursor.HAND_CURSOR)); JMenuBar menuBar = new JMenuBar();
JMenu menuSet=new JMenu("设置");
JMenu menuOut=new JMenu("退出"); JMenuItem TISHU = new JMenuItem("题数");
JMenuItem NANDU = new JMenuItem("难度");
JMenuItem YUYAN = new JMenuItem("语言");
JMenuItem TUICHU = new JMenuItem("退出"); menuBar.add(menuSet); menuSet.add(TISHU);
TISHU.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
String i1 = JOptionPane.showInputDialog(null, "请输入你需要的题目数:\n", "题目数",JOptionPane.QUESTION_MESSAGE);
int count = Integer.parseInt(i1);
panel.SUIJI(count);
}
});
menuSet.add(NANDU);
menuSet.add(YUYAN);
menuSet.add(TUICHU);
TUICHU.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
int i1 = JOptionPane.showConfirmDialog(null,"是否退出?","提示:",JOptionPane.YES_NO_OPTION);
if(i1==JOptionPane.OK_OPTION){
System.exit(0);
}else{
String z = "请继续!";
JOptionPane.showMessageDialog(null, z);
} }
}); this.setJMenuBar(menuBar); }
} class Panel extends JPanel{
//int result;
static int score = 0;
JButton BUTTON = new JButton(); //提交按钮 触发事件
JLabel SCORE = new JLabel();//准确率
JLabel OUT = new JLabel();//退出
ArrayList<JTextField> answer=new ArrayList<>();
public Panel(){ //printf("正确率为:%lf",score*1.0/count);
//this.add(SCORE);
//this.add(BUTTON);
BUTTON.setLocation(100,100); } public void SUIJI(int count){
int SUIJI;
// printf("请输入题目数?");
//scanf("%d",&count);
String s1,s2=null;
for(int i=0;i<count;i++)
{
SUIJI = new Random().nextInt(2);
if(SUIJI==0)
{s2=this.zhengshu();}
else
{s2=this.fenshu();}
s1=answer.get(i).getText();
System.out.println(s1);
if(s1.equals(s2)){
score ++ ;
}
} this.add(BUTTON);
this.add(SCORE);
BUTTON.setText("\r提交");
//this.add(OUT);
BUTTON.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
SCORE.setText("正确率:"+score/count);
}
});
}
public String zhengshu(){
String result=new String();
int left = new Random().nextInt(9) + 1;
int mid = new Random().nextInt(4);
int right = new Random().nextInt(9) + 1;
JLabel XIANSHI1 = new JLabel();
JLabel XIANSHI2 = new JLabel();
JLabel XIANSHI3 = new JLabel();
//JButton TIJIAO = new JButton();
JTextField SHURU = new JTextField(10);
String s2 =null;
this.add(XIANSHI1);
this.add(XIANSHI2);
this.add(XIANSHI3);
//this.add(TIJIAO);
//this.add(BUTTON);
this.add(SHURU);
answer.add(SHURU);
//is.setLayout(null); XIANSHI1.setText(" "+left+" ");
switch(mid)
{
case(0):result=left+right+"";
XIANSHI2.setText(" + ");break;
case(1):result=left-right+"";
XIANSHI2.setText(" - ");break;
case(2):result=left*right+"";
XIANSHI2.setText(" * ");break;
case(3):result=left/right+"";
XIANSHI2.setText(" / ");break;
}
XIANSHI3.setText(" "+right+" = ");
System.out.println(left+" " +mid+" "+right +result);
return result;
}
public String fenshu(){
int left_x,left_y,mid,right_x,right_y,x = 0,y = 0,GYS;
do{
left_x = new Random().nextInt(9) + 1;
left_y = new Random().nextInt(9) + 1;
mid = new Random().nextInt(4) ;
right_x = new Random().nextInt(9) + 1;
right_y = new Random().nextInt(9) + 1;
}while(!(left_x<left_y&&right_x<right_y));
JLabel XIANSHI1 = new JLabel();
JLabel XIANSHI2 = new JLabel();
JLabel XIANSHI3 = new JLabel();
//JLabel TIJIAO = new JLabel();
JTextField SHURU = new JTextField(10);
String s1 = SHURU.getText();
String s2 ="";
this.add(XIANSHI1);
this.add(XIANSHI2);
this.add(XIANSHI3);
//this.add(TIJIAO);
//this.add(BUTTON);
this.add(SHURU);
answer.add(SHURU);
//is.setLayout(null); XIANSHI1.setText(" "+left_x+"/"+left_y);
switch(mid)
{
case(0):x=left_x*right_y+left_y*right_x;
y=left_y*right_y;GYS=gcd(x,y);x=x/GYS;y=y/GYS;s2 = x +"/" +y;
XIANSHI2.setText(" + ");break;
case(1):x=left_x*right_y-left_y*right_x;
y=left_y*right_y; GYS=gcd(x,y);x=x/GYS;y=y/GYS; s2 = x +"/" +y;
XIANSHI2.setText(" - ");break;
case(2):x=left_x*right_x;
y=left_y*right_y;GYS=gcd(x,y);x=x/GYS;y=y/GYS;s2 = x +"/" +y;
XIANSHI2.setText(" * ");break;
case(3):x=left_x*right_y;
y=left_y*right_x;GYS=gcd(x,y);x=x/GYS;y=y/GYS;s2 = x +"/" +y;
XIANSHI2.setText(" / ");break;
}
System.out.println(left_x+"/"+left_y +" "+mid+" "+right_x+"/"+right_y+"="+x +"/" +y);
XIANSHI3.setText(" "+right_x+"/"+right_y+" = "); return s2; }
private int gcd(int x, int y) {
int r;
r=x%y;
while(r!=0)
{
x=y;
y=r;
r=x%y;
}
return y;
}
}
四、程序运行

五 psp

六 小结
这次的实验是对上次实验的功能的一种完善,升级,本次要求把这个程序做成GUI。我和刘光华同学做该项目的时候由于基础不扎实,在GUI的方面花费了大量时间,导致我们的程序没能完成原先设计的许多功能,包括计时器功能,中英转换,唯有一个GUI的基本框架,能够显示用户所需的数量的题目,但是输入的答案没能传入和正确答案比较,目前还在寻找解决方案。
结对作业-基于GUI的四则运算的更多相关文章
- 结对作业--基于GUI的四则运算生成器
组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址 :https://coding.net/u/zhang1995/p/wo ...
- 结对实验---基于GUI的四则运算
详细代码:https://git.coding.net/wangluo24/NO.2.git 结对伙伴:吕志哲(201421123021) &本人.许明涛 201421123024 一.题目要 ...
- 基于GUI的四则运算
基于GUI的四则运算 李志强 201421123028 连永刚 201421123014 林方言 201421123023 coding 地址 https://git.coding.net/lizhi ...
- 结队编程--基于GUI的四则运算
coding地址 https://git.coding.net/lizhiqiang0x01/GUI-sizeyunsuan.git 李志强 201421123028 连永刚 201421123014 ...
- 结对作业(1)----基于GUI的四则运算
小伙伴:201421123031 余洋 201421123044 潘志坚 题目要求: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是W ...
- 结对作业:基于GUI实现四则运算
1)Coding.Net项目地址:https://git.coding.net/day_light/GUIszysLL.git 2)在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的 ...
- 结队编程-基于gui的四则运算生成器
成员:卢少锐 201421123027.刘存201421033023 coding.net地址 1.需求分析:除了实现四则运算的功能外,还添加了计时器功能和语言选择功能 2.程序设计:这次作业是基于上 ...
- 结对编程1 (四则运算基于GUI)
https://git.coding.net/Luo_yujie/sizeyunsuan.app.git 201421123034 201421123032 1. 需求分析 这次作业新引用了语言选择, ...
- 结对作业1----基于GUI的四则运算生成器
组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址:代码点这里 需求分析: 1.除了整数的四则运算还要支持分数的四则运算: ...
随机推荐
- python3.6----datetime.timedelta
学习利用python进行数据分析---时间序列分析的时候发现python2.7版本的timedelta模块跟python3.6模块区别python2.7:in:delta= datetime(2017 ...
- 使用yeoman构建angular应用
本文将介绍如何亲手来完成一个yeoman的generator,以实现快速构建最适合自己的项目. 本文将实现的generator起名为ngtimo,依照yeoman的命名规矩就叫做generator-n ...
- MySQL中的基本知识
本文是MySQL中的一些基本知识,包括各种基本操作.数据类型和表的约束等. ps:都是自己总结.手打出来的,虽然不是什么新东西,但也勉强算原创吧.. 一.数据库 1.创建:CREATE DATABAS ...
- 小球自由落体动态模拟(Position Based Simulation)
在过去的几十年中,基于物理的三维物体动态模拟成为了计算机图形学的研究热点,其中最常见的方法是基于力(force-based)的模拟方法,比如弹簧质点模型,它把物体抽象成一系列质点以及连接这些质点的弹簧 ...
- Webservice 中涉及的几个概念
开发webservice有一段时间了.但是对其中的协议及实现一直存在疑惑.这里搜集相关概念.用以更好的理解它. 一.什么是Webservice WebService是一种跨编程语言和跨操作系统平台的远 ...
- css3中的动画效果
css3中的animation属性动画效果代码如下: <!DOCTYPE html> <html lang="en"> <head> <m ...
- node.js之模块
node.js之模块 1.自定义模块的设置 加载自定义模块利用require: eg: require('./custom_module.js') 2.从模块外部访问模块内的成员 2.1使用expor ...
- SQL语句查询某字段不同数据的个数(DISTINCT 的使用)
今天做了一个题,学到了一个知识点: 有一个高速收费表VF,如下: 统计收费涉及的车辆有多少: SQL语句: SELECT COUNT(DISTINCT VchReg) from VF ; 其中 ...
- EF5.0默认不支持DB First了?
面试官说貌似都是Code First了,需确认下
- 在配置wem.xml后,Tomcat遇到问题,启动失败的解决方法
前两天在写程序时,碰到了Tomcat无法启动的问题,就是在配置完web.xml后.想必好多小伙伴都有遇到吧. 如图: 出现这个错误的原因是:在配置web.xml的时候出现了错误! 如图所示,没有修改这 ...