当前位置: 首页 > news >正文

结对作业

结对分工:

何琴琴---093  1、答题计时功能 2、语言切换功能
翁彬妹---094  1、对错总数功能 2、代码规范

需求分析:

本次编程要求实现计时功能,能够记录用户答题的消耗时间,可以在用户开始答题时开始计时,然后提交答案时结束计时,这样两次的差值就是答题所用的时间。界面支持中文简体/中文繁体,其实就是在实现简体的基础上将显示界面和结束时答题错对数加入繁体版格式显示,而内部使用的函数等是没有变化的。

功能分析:

  • 基本功能:
    • 实现简体版的具有gui界面,同时支持整数与真分数,能控制生成题目的个数,统计对错数的随机四则运算
  • 扩展功能
    • 实现繁体版的随机四则运算;
    • 实现计时功能,能显示用户每次运算的时间;
    • 当答题超时或答题者自动退出时会弹出答题结束的对话框并退出
  • 高级功能(暂时还没有)

程序设计:

代码展示:

根据文本框输入的数值判断答案的对错(简体版),而繁体版的只是将显示界面的简体中文切换为繁体字,判断对错的函数并没有任何改变。

 T3.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            str= decimal.format(sum);
            if(Float.parseFloat(str)==Float.parseFloat(T3.getText())) { T4.setText("恭喜你!答对了!"); dadui++; T5.setText(String.valueOf(dadui)); } else { T4.setText("真遗憾!答错了!正确答案是"+Float.parseFloat(str)); dacuo++; T6.setText(String.valueOf(dacuo)); } noanswer=tishu-dadui-dacuo; } });

在点击开始按钮后,开始随机生成题目并且开始计时,每答完一道题目,会使用currentTimeMillis()函数记录下当前答题的时间,然后全部题目答题完毕后,将几次答题时间相加,显示出答题总时间。当答题超时或自动退出时会弹出答题结束的对话框并退出到前一个界面。

  B1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) { tishu=Integer.parseInt(T1.getText()); noanswer=tishu-dadui-dacuo; summary++; timer = new Timer(); finishtime=System.currentTimeMillis(); starttime=finishtime; timer.schedule(new TimerTask() { public void run() { finishtime=System.currentTimeMillis(); duration=finishtime-starttime; if(duration/1000==60&&summary<tishu) { JOptionPane.showMessageDialog(null, "答题时间已到。答题总题数为"+(dadui+dacuo)+",答对题数为"+dadui+",答错题数为"+dacuo+",未答题题数为"+(tishu-dacuo-dadui)+",答题使用时间:"+(allduration+duration)/1000+"秒。"); frame.setVisible(false); new 初级版题型选择(); } String str=df.format(new Date(duration)); T7.setText(str); } }, 1000, 1000); allduration=allduration+duration; char a[]={'+','-','×','÷'}; int b=(int)(Math.random()*4); int c=(int)(Math.random()*100); int d=(int)(Math.random()*99+1); int g=(int)(Math.random()*100); int f=(int)(Math.random()*99+1); if(a[b]==a[0]) { T2.setText(d+"/"+c+String.valueOf(a[b])+g+"/"+f); sum=(float)d/c+(float)g/f; } else if(a[b]==a[1]) { T2.setText(d+"/"+c+String.valueOf(a[b])+g+"/"+f); sum=(float)d/c-(float)g/f; } else if(a[b]==a[2]) { T2.setText(+d+"/"+c+String.valueOf(a[b])+"("+g+"/"+f+")"); sum=((float)d/c)*((float)g/f); } else if(a[b]==a[3]) { T2.setText(d+"/"+c+String.valueOf(a[b])+"("+g+"/"+f+")"); sum=((float)d/c)/((float)g/f); } } });

当按初级版按钮时,进入初级版的选题界面,其他界面的按钮代码与此类似。

      button.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent arg0) { getFrame().setVisible(false); new 初级版题型选择(); } });

当按繁体版按钮时,进入繁体版的界面1。

      button_2.addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent arg0) { getFrame().setVisible(false); new 界面1(); } });

点击帮助按钮,会出现帮助的显示框,简单介绍整个程序的用途。

    JTextPane textPane = new JTextPane();
    textPane.setFont(new Font("宋体", Font.PLAIN, 23));
    textPane.setText(" 这是一个小学生四则运算生成器!"); panel.add(textPane); frame.getContentPane().setLayout(groupLayout); //设置窗口的位置 Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize(); int w1 = screenSize.width; int h = screenSize.height; int x1 = w1/3; int y1 = h/5; frame.setLocation(x1,y1); frame.setVisible(true);//设置窗口的可见性 frame.setResizable(true);//设置窗口大小的可变性

程序运行:










小结感受:

小结:本次作业代码大部分功能由何琴琴同学完成,因为我的是用c语言编写,介于c语言界面设计不会顾我们选择好java来编写图形界面。首先我们确定用java来编写然后确定界面和要实现的功能进行分析。分析好之后我们先对界面进行排版,排版之后对功能进行实现。从中我们有很多不同的想法,经过讨论我们选择简单的毕竟时间有限。我作为本次编程的领航员,琴琴为导航员。我们发现在计算式在按钮的实现上有瑕疵不够直观容易让人产生误解。我们在编程过程中互相吸取好的编程习惯。合作让我们对很多细节的考虑更加清晰。
先来一片面包:基于我们上次用的是c语言来实现控制台的功能而windows api 薄弱才开始学所以放弃第一次的作业,采用java编写。毕竟所有的都是相通的,java容易实现界面。
再把肉放上:在c语言吸取基本功能的实现+-*/分数等
再来一片面包:对界面和函数工功能的整合

PSP展示:

码市链接:https://coding.net/u/wengbm/p/calculater/git

转载于:https://www.cnblogs.com/wengbm/p/6552980.html

相关文章:

  • FLEX在datagrid中的itemreader中渲染combobox使用outerDocument
  • shell分库备份
  • DataGrid里嵌入checkBox,增加,删除等控件等操作
  • 最近前端面试遇到的题目
  • flex 鼠标中间滚动按钮监听
  • Linux基础之命令练习Day3-文件管理:cat,tar,gzip,vim,ln
  • flex shareObject对象详解
  • 关于中国电信天翼开放平台短信接口的一些使用
  • 1-4字符串分隔
  • svn服务器的架构和配置
  • flex 日期的相关操作
  • flex中String转化为date
  • 浅谈DB2在线分析处理函数
  • flex tree 节点的添加、删除
  • js脚本语言
  • Docker入门(二) - Dockerfile
  • HashMap ConcurrentHashMap
  • js递归,无限分级树形折叠菜单
  • js写一个简单的选项卡
  • Linux gpio口使用方法
  • Linux下的乱码问题
  • Redux系列x:源码分析
  • REST架构的思考
  • vue-router 实现分析
  • webpack+react项目初体验——记录我的webpack环境配置
  • 第十八天-企业应用架构模式-基本模式
  • 给github项目添加CI badge
  • 猴子数据域名防封接口降低小说被封的风险
  • 简单基于spring的redis配置(单机和集群模式)
  • 理解在java “”i=i++;”所发生的事情
  • 前嗅ForeSpider教程:创建模板
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 移动端 h5开发相关内容总结(三)
  • 异步
  • 译自由幺半群
  • 正则与JS中的正则
  • 湖北分布式智能数据采集方法有哪些?
  • 进程与线程(三)——进程/线程间通信
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (007)XHTML文档之标题——h1~h6
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (145)光线追踪距离场柔和阴影
  • (27)4.8 习题课
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (状压dp)uva 10817 Headmaster's Headache
  • .NET 8.0 中有哪些新的变化?
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET轻量级ORM组件Dapper葵花宝典
  • .NET文档生成工具ADB使用图文教程
  • .net下的富文本编辑器FCKeditor的配置方法