一、需求分析

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的四则运算的更多相关文章

  1. 结对作业--基于GUI的四则运算生成器

    组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址 :https://coding.net/u/zhang1995/p/wo ...

  2. 结对实验---基于GUI的四则运算

    详细代码:https://git.coding.net/wangluo24/NO.2.git 结对伙伴:吕志哲(201421123021) &本人.许明涛 201421123024 一.题目要 ...

  3. 基于GUI的四则运算

    基于GUI的四则运算 李志强 201421123028 连永刚 201421123014 林方言 201421123023 coding 地址 https://git.coding.net/lizhi ...

  4. 结队编程--基于GUI的四则运算

    coding地址 https://git.coding.net/lizhiqiang0x01/GUI-sizeyunsuan.git 李志强 201421123028 连永刚 201421123014 ...

  5. 结对作业(1)----基于GUI的四则运算

    小伙伴:201421123031 余洋 201421123044  潘志坚  题目要求: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是W ...

  6. 结对作业:基于GUI实现四则运算

    1)Coding.Net项目地址:https://git.coding.net/day_light/GUIszysLL.git 2)在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的 ...

  7. 结队编程-基于gui的四则运算生成器

    成员:卢少锐 201421123027.刘存201421033023 coding.net地址 1.需求分析:除了实现四则运算的功能外,还添加了计时器功能和语言选择功能 2.程序设计:这次作业是基于上 ...

  8. 结对编程1 (四则运算基于GUI)

    https://git.coding.net/Luo_yujie/sizeyunsuan.app.git 201421123034 201421123032 1. 需求分析 这次作业新引用了语言选择, ...

  9. 结对作业1----基于GUI的四则运算生成器

    组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址:代码点这里 需求分析: 1.除了整数的四则运算还要支持分数的四则运算: ...

随机推荐

  1. android四大组件学习总结以及各个组件示例(1)

    android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个 ...

  2. angular select 遍历使用ng-option绑定的时候下面多出一个空白的option处理方法

    只需要在select中加入一个 <option value="" selected hidden></option>

  3. Kotlin 初窥门径[2]:流程控制

    流程控制语句是编程语言中的核心之一.可以分为分支语句.循环语句和跳转语句.本文将详细介绍一下 Kotlin 中的流程控制语句. If 表达式 在Kotlin中一切都是表达式,也就是说一切都返回一个值. ...

  4. 创建第一个简单的AI分类器

    from sklearn import tree# 第一个简单的分类器features = [[140, 1], [130, 1], [150, 0], [170, 0]] #列表左边的变量代表水果的 ...

  5. mac 辅助接口

    mac 辅助接口1.打开文件所在目录并选中该文件2.获取plist属性值3.系统关机4.打开系统网络设置5.字符串包含比较6.系统挂载数及挂载盘符信息 //====================== ...

  6. iOS之网络请求NSURLSession剖析

    2013年的WWDC大会上,苹果推出了NSURLSession,对Foundation URL加载系统进行了彻底的重构,提供了更丰富的API来处理网络请求,如:支持http2.0协议.直接把数据下载到 ...

  7. 利用KVC的方式更方便地获取数组中对象的属性的最值平均值等

    直接上代码 输出结果也在相应的代码里标注出来了 //main.m文件 #import <Foundation/Foundation.h> #import "Student.h&q ...

  8. DLL基础

    Visual C++在创建DLL导出函数时,可能会对原始的函数名做修改.例如: int WINAPI Add(int nLeft, int nRight) 导出后的函数名称是_Add@8. 下面两种方 ...

  9. 轻量级ORM框架 QX_Frame.Bantina(二、框架使用方式介绍)

    轻量级ORM框架QX_Frame.Bantina系列讲解(开源) 一.框架简介 http://www.cnblogs.com/qixiaoyizhan/p/7417467.html 二.框架使用方式介 ...

  10. 命令行创建Maven项目卡住以及出错解决办法。

    第一次通过命令行创建maven项目.结果,果不其然啊,还是出问题了,不过出问题比没有出问题强,知道哪里有问题并学会解决也是一种收获. 遇到的第一个问题,在从仓库下载东西的时候会卡住,我开始以为是网速问 ...