结对作业-基于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.除了整数的四则运算还要支持分数的四则运算: ...
随机推荐
- Java 库:为 Java 程序员而生的 10 + 最佳库
众所周知,Java 的生态环境相当庞大,包含了数量相当可观的官方及第三方库.利用这些库,可以解决在用 Java 开发时遇到的各类问题,让开发效率得到显著提升. 举些例子,最常用的官方库有 java.l ...
- php通用的树型类创建无限级树型菜单
生成树型结构所需要的2维数组,var $arr = array()数组格式如下: array( 1 => array('id'=>'1','parentID'=>0,'name'=& ...
- Redis环境搭建(MacOS)
Redis是一个开源的key-value类型的存储系统,大部分数据存在于内存中,所有读写速度十分快.其支持的存储value数据类型有多种,如:strings.hashes.lists.sets.sor ...
- ABP从入门到精通(5):使用基于JWT标准的Token访问WebApi
项目:asp.net zero 4.2.0 .net core(1.1) 版本 我们做项目的时候可能会遇到需要提供api给app调用,ABP动态生成的WebApi提供了方便的基于JWT标准的Token ...
- noip普及组2007 守望者的逃离
守望者的逃离 描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座 ...
- 【Eclipse】给web项目打war包
项目右键->export->war file -> Destination ->finish 第二步 保存
- Sql Server数据库使用触发器和sqlbulkcopy大批量数据插入更新
需要了解的知识 1.触发器 2.sqlbulkcopy 我的用途 开发数据库同步的工具,需要大批量数据插入和数据更新. 方式 使用SqlBulkCopy类对数据进行数据批量复制,将需要同步数据的表新建 ...
- Linux基础教程
Linux基础教程之<Linux就该这么学>之学习笔记第一篇... ========================= 一.Basic Linux Commands 基本的Linux ...
- android studio 2.3 编译动态库
工作需要编译android下的动态库,本以为是一件简单的事,没想到因为工具,以及google本身被墙的原因,折腾了好久. 在windows外的平台搞事情,寿命都得缩短. 一种方案是用eclipse+n ...
- Python3 TA-Lib
This is a Python wrapper for TA-LIB based on Cython instead of SWIG. From the homepage: TA-Lib is wi ...