结对作业-基于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.除了整数的四则运算还要支持分数的四则运算: ...
随机推荐
- java8之lambda表达式(1)-基本语法
lambda表达式,即带有参数的表达式,为更清晰地理解lambda表达式,先看如下例子: (1) class Student{ private String name; private Double ...
- js获取url,截取url参数,截取url后文件名
获取当前: var url = window.location.href; 百度为例: var url=window.location.href; console.info(url); http:// ...
- .net core 2.0学习笔记(一):开发运行环境搭建
期待已久的.net core 2.0终于发布了!大家等的花儿都谢了. 不过比预期提前了一个多月,这在微软历史上还真的不多见.按照历史经验看,2.0版本应该比较靠谱,我猜这也是社区非常火爆的原因吧.下面 ...
- .NET并行计算和并发3-Invoke
Control.Invoke 方法 (Delegate) 在拥有此控件的基础窗口句柄的线程上执行指定的委托. Invoke方法搜索沿控件的父级链,直到它找到的控件或窗口具有一个窗口句柄: 如果尚不存在 ...
- 6个Linux chkconfig命令实例 - 增加,删除,查看和修改services的自动启动选项
注意:service的安装目录在/etc/rc.d/init.d下,/etc/init.d 是/etc/rc.d/init.d的链接. chkconfig命令用来安装,查看或修改 services随系 ...
- 集合-TreeSet-Comparator
package com.bjpowernode.tree2; public class Student { private String name; private int age; public S ...
- 集合-TreeSet-Comparable
Student类:name.age属性 1 package com.bjpowernode.test01_set2_Comparable; /* * T: type */ public class S ...
- 在Python3.5中使用 The del.icio.us API
问题:参考<集体智慧编程>一书的第二章中访问del.icio.us网站的数据需要使用到事先编好的Python API.但是书上提供的API并不适用与Python3.5的版本. 解决方法:在 ...
- C#学习——简介(第一天)
一.控制台输出 在控制台输出: console.writeline(); console.readkey(); 加上后面一句是为了保证弹窗不会一闪而过. 二.注释 1.单行注释: //int a=90 ...
- Linux学习笔记-林耐斯Notes-Linux就该这么学
Linux学习笔记... 参考的优秀Linux网站: http://www.w3cschool.cn/linux/ http://www.linuxeye.com/ http://linux.vbir ...