一、需求分析

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. MySQL编程基础

    本文是关于MySQL编程中的一些基础知识,包括变量和运算符.常用语句.函数. 一.变量与运算符 1.用户会话变量声明:SET @变量名 = 表达式;//即:用户会话变量无需提前定义,直接用赋值语句赋值 ...

  2. .NET并行计算和并发2-Foreground and Background Threads

    后台线程不会使托管执行环境处于运行状态,除此之外,后台线程与前台线程是一样的. 一旦所有前台线程在托管进程(其中 .exe 文件是托管程序集)中被停止,系统将停止所有后台线程并关闭.

  3. Kotlin 初窥门径[1]:基础概念

    Kotlin 是由 JetBrains 开发的基于JVM的语言.JetBrains 因为创造了一个强大的Java开发 IDE(Intellij) 而被大家所熟知.Android Studio 就是基于 ...

  4. .NET Core 2.0 开源Office组件 NPOI

    前言 去年 12 月,我移植了大家所熟知 NPOI 到 .NET Core 版本,这里是当时发的博客,当时得到了很多同学的支持,社区反应也很好,在这里非常感谢当时推荐的朋友们. 去年的那个版本是针对于 ...

  5. JMeter网站测试分析

     WEB类型: User Driver:以用户量作为衡量系统性能的主要指标的系统,典型如IM系统.企业 内部业务系统: TPS-Driver:以tps作为衡量系统性能的主要指标的系统,典型的如消息系统 ...

  6. Use Select To Generate Any Insert/Delete/Update Statement

    If you don't have the permission to generate script according to an existing db, but you have the re ...

  7. CentOS自带mysql配置(密码更改、端口开放访问、添加进系统启动项)

    前些天虚拟机安装好了CentOS6.1,但是自己想远程连接自带的mysql发现不知道如何改密码,于是谷歌一下,把结果记录下来,方便后期自己使用: 方法一: # /etc/init.d/mysql st ...

  8. 【Linux】查看系统信息

    查看发行版本 [root@centos68 ~]# more /etc/issue CentOS release 6.9 (Final) RedHat 系 [root@centos68 ~]# cat ...

  9. js中匿名函数

    今天碰到一道题,里面既包含了匿名函数的知识,也包含了预编译,函数的传参(形参),感觉迷迷糊糊的,所以想着做个总结. var foo={n:1}; (function(foo){ console.log ...

  10. mapper.xml是怎样实现Dao层接口

    上午写了一个简单的 从xml读取信息实例化一个Bean对象.下午就开始想mybatis是怎么通过xml文件来实现dao层接口的,一开始想直接用Class.forName(String name)然后调 ...