结队编程1-四则运算(95、97)

Coding地址:

https://coding.net/u/huhulqq/p/jiedui1/git/tree/master/

结队成员:

               林清青 201421123095

               郑莹   201421123097

一、题目要求:

本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。
在下面的功能需求中实现两个:

  • 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算;
  • 有计时功能,能显示用户开始答题后的消耗时间;
  • 界面支持中文简体/中文繁体/英语,用户可以选择一种。

二、需求分析:

1.在作业1的基础上,让程序基于GUI界面,使得界面简洁易操作并且较为美观

2.支持中文简体/繁体/英语三种语言,用户可自主选择

3.程序退出时,能将用户所做题目保存在一个txt文件中,存为历史记录

4.程序拥有计时的功能,每道题目都能显示时间,并能保存于文件中

三、功能分析:

1.基本功能:
   支持整数、真分数的四则运算程序,用户能够选择题目数。在用户答题后,能够判断对错,错误及显示正确答案并统计正确率。

2.扩展功能:

  • 实现中文简体、繁体、英语三种语言界面的切换;
  • 用户所做的题目可生成一个txt文件,用于保存所做的题目;
  • 实现计时功能,并且能在txt文件中显示用户做题所用的时间。

四、设计实现:

五、代码实现:

说明:基础功能在作业一中已有体现,以下为此次作业为实现扩展功能的主要代码。

将python代码实现ui界面。

在pyqt4的文件夹里搜索找到脚本,然后将其复制到ui文件所在的文件夹,在配置好python环境的命令行窗口中转到ui所在的文件夹,如图输入以下命令

用于生成窗口:

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Form = QtGui.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

在此窗体上创建主键

def setupUi(self, Form):

        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(568, 291)
        self.pushButton = QtGui.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(480, 180, 75, 23))
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.label_2 = QtGui.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(230, 140, 54, 12))
        self.label_2.setObjectName(_fromUtf8("label_2"))
        self.label_3 = QtGui.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(230, 190, 54, 12))
        self.label_3.setObjectName(_fromUtf8("label_3"))
        self.lineEdit = QtGui.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(300, 130, 113, 31))
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
        self.pushButton_2 = QtGui.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(50, 20, 75, 23))
        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
        self.pushButton_3 = QtGui.QPushButton(Form)
        self.pushButton_3.setGeometry(QtCore.QRect(140, 20, 75, 23))
        self.pushButton_3.setObjectName(_fromUtf8("pushButton_3"))
        self.pushButton_4 = QtGui.QPushButton(Form)
        self.pushButton_4.setGeometry(QtCore.QRect(230, 20, 75, 23))
        self.pushButton_4.setObjectName(_fromUtf8("pushButton_4"))
        self.label_4 = QtGui.QLabel(Form)
        self.label_4.setGeometry(QtCore.QRect(60, 120, 141, 41))
        self.label_4.setText(_fromUtf8(""))
        self.label_4.setObjectName(_fromUtf8("label_4"))
        self.label = QtGui.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(100, 120, 111, 61))
        self.label.setText(_fromUtf8(""))
        self.label.setObjectName(_fromUtf8("label"))
        self.pushButton_5 = QtGui.QPushButton(Form)
        self.pushButton_5.setGeometry(QtCore.QRect(480, 130, 75, 23))
        self.pushButton_5.setObjectName(_fromUtf8("pushButton_5"))
        self.label_5 = QtGui.QLabel(Form)
        self.label_5.setGeometry(QtCore.QRect(300, 180, 121, 41))
        self.label_5.setText(_fromUtf8(""))
        self.label_5.setObjectName(_fromUtf8("label_5"))

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

测试第三方繁体简体转换:

from langconv import *
#line=(‘和‘)
line=‘我‘
print (line.unicode())
#line = line.decode (‘utf-8‘)
line = Converter(‘zh-hans‘).convert( line)
#line = line.decode(‘utf-8‘)
#line = line.encode (‘utf-8‘)
print (line)

部分简体和繁体转换代码:

# -*- coding: utf-8 -*-
# copy fom wikipedia

zh2Hant = {
‘确‘: ‘確‘,
"定": "定",
‘你‘: ‘你‘,
"的": "的",
"答": "答",
"案": "案",
"是": "是",
"否": "否",
"正": "正",
"目": "目",
"显": "显",
"示": "示",
"题": "题",
"简": "简",
"体": "体",
"繁": "繁",
"英": "英",
"文": "文"

显示做题开始和结束时间,为了精确,取到毫级:

import time

 t1=datetime.datetime.now().strftime(‘%Y-%m-%d %H:%M:%S.%f‘)
with  open(‘new.txt‘,‘a+‘) as f:
            f.write("start"+str(t1)+‘\n\r‘)
            f.write(str(h5))
 with  open(‘new.txt‘,‘a+‘) as f:
                    f.write("right"+‘\n\r‘)
                    f.write("final"+str(t2)+‘\n\r‘)

做题结束,显示正确率,并可以选择返回主界面:

def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))
        self.pushButton.setText(_translate("Form", "显示正确率", None))
        self.commandLinkButton.setText(_translate("Form", "    返回主界面", None))
    def huhu(self):
        global rightcount
        global errorcount
        #f.write("error"+‘\n\r‘)
        f = open("new.txt", "r")
        for line in f:
            if line.find(‘right‘)!=-1:
                rightcount=rightcount+1
            elif line.find(‘error‘)!=-1:
                errorcount=errorcount+1
            zcount=rightcount+errorcount
            if zcount!=0:
                mingzhonglv=float(rightcount)/zcount
                r=float(‘%.3f‘%mingzhonglv)

                tt=str(float(‘%.3f‘%mingzhonglv)*100)+‘%‘
                self.label.setText(tt)

文件读取和文件创建:

with  open(‘new.txt‘,‘w‘) as f:
    pass 

with  open(‘new.txt‘,‘a+‘) as f:
                    f.write("right"+‘\n\r‘)
                    f.write("final"+str(t4)+‘\n\r‘)

六、运行测试:

开始界面,选择题目数

进入答题页面,进行答题:

用户可自主切换繁体和英文界面进行答题:

结束答题,显示正确率,点击可以返回初始界面:

答题结束,生产txt文件,显示所做题目、题目正确与否以及时间:

七、PSP展示:

PSP2.1 Personal Software Process Stages Time (%) Senior Student(/hour) Time (%)(/hour)
· Planning 计划 2 1.5
· Estimate 估计这个任务需要多少时间 30 27
· Analysis 需求分析 (包括学习新技术) 5 6
· Coding Standard 代码规范 1 1.5
· Design 具体设计 3 3.5
· Coding 具体编码 30 35
· Test 测试(自我测试,修改代码,提交修改) 1 2
Reporting 报告 1.5 1

八、个人总结:

1、此次实验是在Qt designer 上创建组件、控件,在通过控制台,pyuic4 -x C:\ui_xxx.ui -o C:\py_xxx.py,当时在这上面摸索了很久,因为没有在文件前加目录盘C:\。
2、在记录历史计算中使用的是文件的读取和写入,其实对文件的操作已经忘得比较多,例如w+,a+等的区别。
3、在繁体、简体和英文的转换中使用了第三方库,需要我们先把简体繁体的字列好,这需要的时间较长,所以借助了网上的一些第三方库,这样就避免了机械操作。
4、在按钮触发事情上花的时间较多,因为有一些触发事情。
self.pushButton_5.clicked.connect(self.buttonClicked)
5、使用记事本来计算正确率和消耗时间比较不机能,需要改进。

时间: 2024-10-10 06:24:51

结队编程1-四则运算(95、97)的相关文章

20165214 结队编程项目-四则运算(第二周)

20165214 第一次结队编程项目--四则运算第二周 需求分析 本周的结队编程想要实现一个四则运算系统,它可以自动生成n个计算题(本周不包括分数),其中n由我们输入.每输出一道题目,运行程序的人需要输入相应的答案,直到最后一道题做完.最后,统计正确率.然后,在这个基础上可以进行相应的功能扩展,比如语言支. 设计思路 我需要在上周的基础上对程序进行补充.在题目的生成上,应该再加上括号.÷./ 本周达成: ①能够随机生成n道题目,n由我们输入,最大长度可直接在程序里面修改: ②支持真分数运算: ③

20175126Apollo 20175126《Java程序设计》结队编程项目——四则运算 第一周阶段总结

结队编程项目——四则运算 一.项目需求 自动生成小学四则运算题目(加.减.乘.除)统计正确率 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 需求分析: 生成四则运算:需要使用随机数生成,需要创造一个能实现计算功能的类. 支持多运算符:运算符也需要利用随机生成,并且不限个数. 支持真分数:需要用到生成分子.分母的函数,将分数化简等. 统计正确率:需要设置一个计算变量,并需要用一个判断正确的函数. 二.设计思路 首先根据需求分析,进行大体的设计: 生成题目→输入答案→判断正

20175314 结队编程项目——四则运算第二周

20175314 结队编程项目--四则运算第二周 一.需求分析 实现一个命令行程序,要求: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确率 能生成随机数 产生的算式要有括号 要建立堆栈,进行中缀转后缀,以及后续后缀的运算 能输入想要产生的题目数 能输入用户计算的答案 能够比较用户输入的答案是否正确 能够统计用户答题的正确率 二.设计思路 生成一个有加减乘除支持括号的算式,以字符串的形式输出,每个操作数或操作符中间都用

结队编程第三次作业

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Simple_arithmetic //简易四则运算{ class Program { public static void Ni() { Console.WriteLine("请输入您想做的运算: "); Console.WriteLine("输入 [+] 表示加法"); C

20165230 结对编程项目-四则运算 整体总结

20165230 结对编程项目-四则运算 整体总结 一.需求分析 随机生成题目 生成的题目个数从命令行输入 用户可选择生成不同难度的题目,比如通过参数指定: (1) 运算符个数范围 (2) 运算符限定(小学一年级题目只生成 + - 题目) 能多次生成题目 题目运算(判题) 支持多运算符 支持整数 支持真分数 题目合法性判断 可独立使用 可用于测试生成题目的正确性 扩展需求 题目去重 支持多语言 处理生成题目并输出到文件 完成题目后从文件读入并判题 二.设计思路 设计一个IntNumber类,用来

20165235 结对编程项目-四则运算 整体总结

20165235 结对编程项目-四则运算 整体总结 一.需求分析 本次实验需要产生随机数然后对其进行相应的计算.产生随机数可以直接在主类中进行,四则运算可以通过堆栈实现,可能会出现分母为零的bug,也要对其进行相应的修复.可以将字符序列装换成字符数组,在对字符数组中"/"符号之后的数字进行判断,如果是0就返回-1. 二.设计思路 本次实验总共分为两个思路:(1)是通过类Operate中的calculate方法进行计算,计算的数值由主类Main给出.并对其修复了分母为零的bug(在Mai

结对编程项目——四则运算

1. 结对编程项目---四则运算 (10分) 基本功能要求: 1) 实现一个带有用户界面的四则运算.2) 生成的题目不能重复.3) 支持负数,例如-1,-1/2,-3‘4/5等.(达成) 需要支持的基本设定参数 1) 题目的数量  2) 数值的范围  3) 题目中最多几个运算符(目前没有达成)  4) 题目中或运算过程中有无有分数(比如进行整数除法的时候不能除尽) 5) 题目中是否有乘除法  6) 题目中是否有括号 (目前没有达成) 7) 题目中或运算过程中有无负数         学习感受:

结队编程1-四则运算(107、120)

[码市链接]https://git.coding.net/Luojiening/Teamwork1.git a.需求分析 将这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linux,web,手机上的),成为一个有基本功能.一定价值的程序. 1.记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算: 2.有计时功能,能显示用户开始答题后的消耗时间: 3.界面支持中文简体/中文繁体/英语,用户可以选择一种. b.功能设计 1.生成自定义数目算术

补结对编程(四则运算)

结对编程(四则运算)结对伙伴:刘芳芳.于淼主要用java实现编码内容:给小学生出题的四则运算四种运算1-加法2-减法3-乘法4-除法0-退出 四则运算PSP 类别 开始时间 结束时间 间隔时间 累计净时间 四则运算分析 7:30 8:00 0 30分 编码 8:00 10:43 0 2小时43分 总结 10:43 10:50 0 7分 补充代码函数进度 代码如下:循环遍历运算字符串: 1 private static String interceptOperation(String operat

结队编程之总结篇

结对编程之总结及体会 短暂而又漫长的俩周时间,我和我的队友黄冠译将结队编程的作业刚刚做好.先介绍一下我的队友黄冠译,大学三年的同学,对他挺熟悉,知道他编程特别厉害,喜欢专研.这次老师给我们这样好的机会,让我们交流,共同完成一个小的项目.我觉得我的队友特别聪明,特别有思想,最开始我没有想到会用C语言写界面,我学的C语言只不过是出现一个小黑框而已,再无深入,我队友提出用C语言的图形库来写界面,我在那时候只有震惊.可能是学的知识有限,只知道C语言就是用来写个小黑框的还能干什么.当我的队友把这次结队编程