title: Software Engineering-HW3

date: 2017-10-05 10:04:08

tags: HW

小组成员

264 李世钰

249 王成科

项目地址

https://github.com/lishiyuwhu/Homework/tree/master/SE/HW3

运行 dist目录下的DONE.exe

运行方法(环境PyQt5+py3.6.2)

>python display_QWidget.py

本来想用pyinstaller打包成EXE, 但好像在py3.6下面有一些问题, 还没解决.

经查是py36不支持pyinstaller. 新建了py35的环境, 成功打包.

py35的环境下, 试了一下多语言动态切换居然就可以了, 血都要吐出来了, python这版本问题真是头疼.

主体的多语言没问题, 但

    self.scoreEdit.setText(self.tr(' Right Num: %d \n Total Num: %d \n Score: %.2f \n Time: %.f s') % (
rightnum, totalnum, 100 * (float(rightnum) / totalnum), clock()))

部分的语言无法切换.

改为

setText(self.tr('xxxx%1').arg(y))

形式后报错. 查询结果:

假如翻译文本中包含了需要动态显示的数据, 必须使用上面这种形式. arg()属于QString的方法. 然后PyQt5移除了QString, 转换为python的str

尝试了几种形式都是无法识别, 这点要去stackoverflow提个问才能知道该怎么做.

或者说修改GUI为这样

PSP

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
· Estimate · 估计这个任务需要多少时间 20 15
Development 开发
· Analysis · 需求分析 (包括学习新技术) 420 600
· Design Spec · 生成设计文档 30 20
· Design Review · 设计复审 (和同事审核设计文档) 60 80
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10
· Design · 具体设计 30 50
· Coding · 具体编码 120 180
· Code Review · 代码复审 30 20
· Test · 测试(自我测试,修改代码,提交修改) 60 40
Reporting 报告
· Test Report · 测试报告 20 10
· Size Measurement · 计算工作量 10 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 50
合计 860 1085

解题思路

开始的时候, 首先确定使用python进行开发. 之后就GUI工具进行了比较, 选用了PyQt, 最终决定PyQt5+python3的开发环境. 资料并不多, 开始看了使用一些中文资料, 而后PyQt5 tutorial配合官方文档进行学习.

计时模块方面, 原意是直接在旁边写一个时钟. 但学习时发现应该使用多线程, 否则会计时不准. 最后采用的方案是调用clock()函数, 每次检查答案时会返回时间.

三个目标:

  • 记录对错:

    生成一个txt用来存储记录

    完成

  • 计时:

    主界面旁边再写个计时器模块

    多线程

    调用clock()

  • 多语言:

    三个语言的txt, 需要使用时候从中调用

    使用Qt的多语言工具

设计实现过程

首先修改了HW2, 得到一个

def produceOpListMid():  # 返回一个[str(OpList), ANS]  i.e.[' 4/3 + 2/3 ÷ 9/7 - 7/8', [Fraction(211, 216)]]

函数作为GUI调用的主体.

由于前两个功能基本分离, 多语言要在最后GUI确定之后再添加.初步决定以:

基本功能GUI -> 记录对错 -> 计时功能 -> 多语言切换

的顺序进行

代码说明

两个槽函数来实现记录存储. 在运行目录下生成一个file.txt记录答对的题目数和已答题的数目.

    def newfile(self):
f = open('file.txt', 'w')
f.write('0\n0')
f.close()
clock()
self.putstrin()
self.scoreEdit.setText(
'正确题目数: 0 \n题目总数: 0 \n分数: 无 \n时间%.f s' % 0) def loadfile(self):
global rightnum, totalnum
try:
f = open('file.txt', 'r')
except:
f = open('file.txt', 'w')
f.write('0\n0') twonum = f.readlines()
f.close()
rightnum = int(twonum[0])
totalnum = int(twonum[1])
if totalnum == 0:
self.scoreEdit.setText(
'正确题目数: 0 \n题目总数: 0 \n分数: 无 \n时间%.f s' % 0)
else:
self.outputtobox()

测试运行

对修改后的convAndPrint2(equList)进行了单元测试, 发现了一个括号处理的问题.

运行截图:

合作情况

264 李世钰

经过前期讨论, 确定由我确定主体框架, 使用的语言, GUI工具等. 我首先负责学习资料的搜集, GUI的绘制和部分功能的实现, 之后王成科负责剩余的功能和文书.

两个人结对编程的视野会更开阔. 比如我在搜集资料的时候, 看到计时器模块基本都是需要多线程的操作以防主线程卡顿造成计时不准. 但之后对接的时候, 结对伙伴提出其实并不用真的需要一个后台时钟, 只要每次判题显示对错时能够同时显示一个经过的时间即可. 最后采用了clock()函数在每次刷新成绩栏的时候调用.

249 王成科

上一阶段计算器是java实现的,这次实现界面使用python,又一次学习机会,结对编程也收获很多。

一开始不喜欢有人对自己写着东西指手画脚的,但是队友提供的思路,给出的意见,会帮助自己换一个新思路,慢慢的效率也会提升一些,更早发现问题也更快能解决,团队的重要性应该就是从两个人的合作开始体现的吧。

另外一个比较大的收获是从PyQt5实例源码中看到的python编程的精悍之处,自己本身逻辑思考能力一般,感觉对PyQt5的了解还只是冰山一角,但是这应该是很好的学习教材,无论是对于编程,代码规范和思考能力,我会继续膜拜的。

项目小结

264 李世钰

最大的问题出现在了多语言动态切换. 首先是中文引起的乱码, 查阅资料发现Qt Linguist不能处理中文转英文, 但可以英文转其他语言, 于是把源文件重写成了英文. 而后通过Qt Linguist进行翻译, 实现了静态加载的翻译. 但动态切换方面, 需要在切换之后刷新GUI, 而刷新GUI的retranslateUi()函数每次使用均会造成GUI崩溃. 暂时查不到原因.

初步原因推测是UI和逻辑分离造成?

然而并不是

这次最大的收获是有了和别人一起编程的经验, 和想象中还是不太一样的, 要统一两个人的想法和方向, 需要很多的交流. git的使用上也出现了一些问题.还有, 见识到了GUI的大体框架, 没有接触之前觉得GUI的绘制和后端的编码很难整合, 接触了UI和逻辑分离的方法之后感觉打开了思路.

还有一个比较大的收获是关于新技术的学习方面. 开始接触PyQt的时候感觉一头雾水, 各种新的概念都不知道什么意思. 但现在看来浪费了一些时间在某些并不核心的东西上. 重要的是应该先把握开发流程搞清楚, 每一块都是干什么. 理解了UI逻辑分离的概念, 就明白为什么有的demo把所有代码都写在一起, 而使用Qtdesigner的demo都是分块编写的. 先把握主干, 然后简单实现功能work起来再添加功能.

不足的地方就是, 看到别人写的之后, 觉得还是直接写一个table然后生成题目放在里面的展示形式更好, 我这个操作有点麻烦了. 还有程序中全局变量使用总是胆战心惊的, 还是写一个专门管理这几个变量的函数更安全一点.

249 王成科

上一阶段计算器是java实现的,这次实现界面使用python,又一次学习机会,结对编程也收获很多。

一开始不喜欢有人对自己写着东西指手画脚的,但是队友提供的思路,给出的意见,会帮助自己换一个新思路,慢慢的效率也会提升一些,更早发现问题也更快能解决,团队的重要性应该就是从两个人的合作开始体现的吧。

另外一个比较大的收获是从PyQt5实例源码中看到的python编程的精悍之处,自己本身逻辑思考能力一般,感觉对PyQt5的了解还只是冰山一角,但是这应该是很好的学习教材,无论是对于编程,代码规范和思考能力,我会继续膜拜的。

合影

Software Engineering-HW3 264&249的更多相关文章

  1. Software Engineering: 3. Project planning

    recourse: "Software Engineering", Ian Sommerville Keywords for this chapter: planning sche ...

  2. 第二篇——The communication during software engineering.

    I've learned a lot in my software engineering class about how a program comes out.That's also a esse ...

  3. Software Engineering: 2. Project management

    resources:"Software Engineering" Ian Sommerville For most projects, important goals are: D ...

  4. Software Engineering: 1. Introduction

    Resource: Ian, Sommerville, Software Engineering 1. Professional software development 1.1 Software e ...

  5. SENG201 (Software Engineering I) Project

    SENG201 (Software Engineering I) ProjectSpace ExplorerFor project admin queries:For project help, hi ...

  6. 个人阅读作业2—《No Silver Bullet: Essence and Accidents of Software Engineering》读后感

    在进行了一次结对编程.一次团队编程和一次个人编程项目后,读了<No Silver Bullet: Essence and Accidents of Software Engineering> ...

  7. Software Engineering at Google

    Google的Fergus Henderson在Software Engineering at Google中介绍了Google的软件工程实践. 软件开发 源码仓库 单一源代码仓库,除了核心配置和安全 ...

  8.  Go is more about software engineering than programming language research.

    https://talks.golang.org/2012/splash.article Go at Google: Language Design in the Service of Softwar ...

  9. 10. Software, Software Engineering, water fall (瀑布模型),Code Complete等名词的来源

    ①.Software-软件”一词是20世纪60年代才出现的,软件Software——1958年由贝尔实验室的著名统计学家John Tukey 提出软件与硬件一起构成完整的计算机系统,它们是相互依存,缺 ...

随机推荐

  1. Windows10 + Matlab2013 mex C++ 调用gsl

    最前面啰嗦一句,matlab默认编译c的编译器有点奇怪,会出现引用.h却找不到相应函数的问题,解决方法是把.c全部都改成.cpp!血的教训! 下面进入正题~~ 由于Matlab调用的C函数中引用了GS ...

  2. input输入框

    7.1,置灰和input框去除置灰 $("#key_SettlementCycle").attr("disabled","disabled" ...

  3. 一个简单的freemark输入输出的案例(一)

    一. 创建FreeMarker模板文件user.ftl <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&qu ...

  4. I2C总线通讯协议

    I2C总线通讯协议 1. I2C总线简介 I2C是Inter-Integrated Circuit的简称,读作:I-squared-C.由飞利浦公司于1980年代提出,为了让主板.嵌入式系统或手机用以 ...

  5. Fu+ 后台管理 (Thinkphp)

    简要:小主从事PHP二年,期间一直做后台;为此向大家分享我制作一个后台(权限),希望能够跟各位PHP大神学习探索,如果有不对或者好的建议告知下:*~*! 1. 介绍 Fu+ 后台管理,是本人基于H+好 ...

  6. Labview中嵌入flex/flash

    将flash动画作为ActiveX文档插入LabVIEW程序的前面板的方法 (1)在前面板插入Controls的ActiveX Container控件. (2)在Container控件上单击鼠标右键, ...

  7. [Luogu3527][POI2011]MET-Meteors

    BZOJ权限题!提供洛谷链接! sol 昨晚突发奇想去学了一下整体二分. 这道题应该算是整体二分的板子题吧. 整体二分 首先要求可离线,不然还是安心码数据结构吧. 整体二分简单的来讲,就是时间复杂度可 ...

  8. [HNOI2010]CHORUS 合唱队

    题面 Bzoj Sol 简单\(DP\) # include <bits/stdc++.h> # define IL inline # define RG register # defin ...

  9. 用vmware workstation制作cloudstack(kvm)镜像及问题解决办法

    说明1:vmware workstation镜像是vmdk格式 说明2:cloudstack配置文件目录:/run/libvirt/qemu/     kvm配置文件目录:/etc/libvirt/q ...

  10. Java .classpath文件Classpath entry org.maven.eclipse.MAVEN2_CLASSPATH_CONTAINER will not be exported or published异常解决办法

    在实际用Maven构建Java Web项目开发过程中,有时候会出现上述情况的警告,如果不解决这个警告,就会在启动Web服务器的时候抛出无法加载Maven管理的第三方jar包的异常. 所以,要解决上面的 ...