0.小组成员
2017282110284 章辉宇
2017282110242 张宇光
1.项目地址
GitHub:https://github.com/fz267671/ArithmeticOpProject
2.PSP
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) |
|---|---|---|
| Planning | 计划 | 20 |
| · Estimate | · 估计这个任务需要多少时间 | 20 |
| Development | 开发 | 1225 |
| · Analysis | · 需求分析 (包括学习新技术) | 120 |
| · Design Spec | · 生成设计文档 | 40 |
| · Design Review | · 设计复审 (和同事审核设计文档) | 30 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 40 |
| · Design | · 具体设计 | 120 |
| · Coding | · 具体编码 | 800 |
| · Code Review | · 代码复审 | 60 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 45 |
| Reporting | 报告 | 100 |
| · Test Report | · 测试报告 | 50 |
| · Size Measurement | · 计算工作量 | 30 |
| ·Postmortem& Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 |
| 合计 | 1375 |
3.解题思路
刚拿到题目时,则是运用第二次作业的成果,在此基础上做一个相应的界面即可,由于我们用过的语言是C和Java,所以我们选择了在VS上利用C#写相应的界面,完成题目的基本要求。对于题目中我们不熟悉的语言转换的问题,直接在网上百度相应的代码,稍加修改。网上前辈的方法也进行了相应的参考:http://www.cnblogs.com/1175429393wljblog/p/5267918.html 。
出现分歧时都会首先考虑到代码的实现难度以及用户在使用过程中的方便程度,进行相应的讨论,比如在进行多语言转换的过程中会存在界面的某些显示转换比较麻烦,界面看起来觉得会比较多余,没有什么必要的存在,我们最终选择删除,降低难度的同时也使界面看得更舒服。
4.设计过程
4.1 基本GUI实现
这一部分基本就是对作业二已经实现的功能用界面展示,其中添加了对用户输入合法性判断,提交时利用正则表达式对用户输入过滤,如果输入不是数字弹窗提示用户重新输入。
4.2 计时功能实现
当用户输入题目数量,点击开始自动开始计时,答题结束时停止计时。具体过程:首先,加入计时器timer,在窗体加载时初始化计时器,定义一个按秒变化的全局计时变量t,在开始事件中启动计时器;然后,新建一个时间函数将t转换成hh:mm:ss的格式;最后,在计时器触发事件中对t进行加一操作,获取t的时间格式并显示。
4.3 记录用户对错数量
这个部分用到文件的读写,窗体加载时从文件读取对错数量,窗体退出时将对错数量写入文件。
4.4 实现语言切换
一开始考虑在程序中为界面上的所有国家的文字信息,在代码中进行赋值,这样的做法是可以的,但绝对是愚蠢的,而且如果实现很多种不同语言的版本,那就需要大量重复的代码,并且维护起来也相当麻烦。看了几篇参考博客,试着用资源文件实现,根据题目需求为窗体创建三个对应相应语言的资源文件,然后在资源文件中添加不用语言版本的字符串资源,最后在菜单不用语言单机事件函数中添加代码实现更新窗口的语言信息。
5.代码说明
5.1 基本GUI
5.1.1 对输入作合法性判断
1 //获取用户输入 2 string userAns = textBox2.Text.ToString(); 3 //如果输入不是数字,要求重输 4 if (!isNumberic(userAns)) 5 { 6 MessageBox.Show(rm.GetString("message1"), rm.GetString("message2"), 7 MessageBoxButtons.OK, MessageBoxIcon.Error); 8 textBox2.Text = ""; 9 return; 10 } 11 12 /// <summary> 13 /// 通过正则表达式判断输入是否为数字 14 /// </summary> 15 protected bool isNumberic(string message) 16 { 17 System.Text.RegularExpressions.Regex rex = 18 new System.Text.RegularExpressions.Regex(@"^(-?[0-9]+[/]?[0-9]*)$"); 19 if (rex.IsMatch(message)) 20 { 21 return true; 22 } 23 else 24 return false; 25 }