您的位置:首页 > 其它

第三次高级软件工程作业

2017-10-11 17:52 260 查看

高级软件工程作业

0 小组成员

何健 / 2017282110267

蔡凯峰 / 2017282110285

1.项目 GitHub 地址

GitHub: https://github.com/caikkk2017/arithmetic.git

2.题目

结对项目:四则运算题目生成程序(基于GUI)http://www.cnblogs.com/hyfatwhu/p/7605757.html

3.预估耗时

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

4.解题思路

l 界面部分:使用QT来做

l 要求功能的解决思路:

  1.记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。

每次用户做完题目后都将答题对错情况记录在本地的一个记录文档中,程序启动时读取该文档,再将历史记录显示在页面上,同时菜单栏中 记录->重置 可以重置记录。

  2.有计时功能,能显示用户开始答题后的消耗时间。

使用QTime计时器,每1s回调一次回调函数,在回调函数中更新时间。在用户每次开始答题时会为QTime绑定回调函数并从0计时,用户提交后就会解绑回调函数,时间不会再累加。

  3.界面支持中文简体/中文繁体/英语,用户可以选择一种。

设计了一个结构体,包含了所需文本的字符串指针,每种语言都提供了一个函数来动态设置该结构体。同时设计了一个Language类,该类通过所选的语言来调用不同的设置函数来设置结构体。只需要调用相应的获取函数就能获取到所需的文本内容。

5.设计实现过程

5.1获取题目

#define get_langue_str(x,y) CS2QS(x.get_##y())
/*类型转换*/
QString  CS2QS(char *x)
{
QString ret= QString(x);
return ret;
}

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{

ui->setupUi(this);
........//省略部分代码
// 设置记录菜单
menu_R = ui->menuBar->addMenu(get_langue_str(language,record));
resetAction = new QAction(get_langue_str(language,reset), this);
menu_R->addAction(resetAction);

// 设置语言菜单
menu_L = ui->menuBar->addMenu(get_langue_str(language,language));
QAction *chineseAction = new QAction(tr("&简体中文"), this);
menu_L->addAction(chineseAction);
QAction *chineseTAction = new QAction(tr("&繁体中文"), this);
menu_L->addAction(chineseTAction);
QAction *englishAction = new QAction(tr("&English"), this);
menu_L->addAction(englishAction);
.......//省略部分代码
connect(chineseAction,SIGNAL(triggered()),this,SLOT(setChinese()));
connect(chineseTAction,SIGNAL(triggered()),this,SLOT(setChineseT()));
connect(englishAction,SIGNAL(triggered()),this,SLOT(setEnglish()));
connect(resetAction,SIGNAL(triggered()),this,SLOT(resetRecord()));
}

/*更新UI*/
void MainWindow::setUI()
{
menu_F->setTitle((get_langue_str(language,file)));
openAction->setText(get_langue_str(language,openfile));
copyAction->setText(get_langue_str(language,copyfile));
exitAction->setText(get_langue_str(language,exit));
menu_L->setTitle(get_langue_str(language,language));
menu_H->setTitle(get_langue_str(language,help));
parameterAction->setText(get_langue_str(language,params));
aboutAction->setText(get_langue_str(language,about));
submitBtn->setText(get_langue_str(language,submit));
startBtn->setText(get_langue_str(language,start)); ;
numberLE->setPlaceholderText(get_langue_str(language,input));
historyRecord->setText(get_langue_str(language,history));
menu_R->setTitle(get_langue_str(language,record));
resetAction->setText(get_langue_str(language,reset));
this->setScore();
this->setTime();
this->setFormulaWidget();
}

void MainWindow::setChinese()
{
language.setLanguageType(LANGUAGE_CHINESE);
this->setUI();
}
void MainWindow::setChineseT()
{
language.setLanguageType(LANGUAGE_CHINESE_T);
this->setUI();
}

void MainWindow::setEnglish()
{
language.setLanguageType(LANGUAGE_ENGLISH);
this->setUI();
}


View Code

6 测试运行

6.1启动程序



6.2开始答题



6.3提交



6.4切换语言



6.5重置记录



7.合作情况

何健:这次结对编程项目的任务为四则运算生成器程序做成GUI,我和我的队友使用C++,并在QT Creater环境上进行编写。我主要负责、界面的设计开发以及把第二次的四则运算器添加到本次项目中。我是第一次接触C++可视化编程,在QT学习上花费时间较多。在编写过程中,遇到了许多问题和BUG。在实现GUI上设计计时器按钮信号和槽之间的触发上、界面显示除号出现乱码问题、程序运行操作偶尔会出现崩溃、四则运算算式滑动窗口显示问题等等。我通过网上查询资料和在我的合作伙伴的帮助下解决这些问题,我将编写好的程序上传到github,我的搭档pull项目到本地,并对程序添加语言切换功能和一些程序的逻辑判断功能。我们结对编程,大大减少了程序编写的时间。我们通过自身的努力和交流帮助最终实现了本次结对编程项目的完成。

蔡凯峰:在此次结对编程中,我主要负责后端,主要是语言切换和程序的逻辑判断。遇到的主要问题就是字符串的乱码问题,以及如何动态实现语言切换。在搭档的帮助和建议下,我逐渐地完善代码,并将最终的代码整合在一起,上传到github上。

8.中程汇报

项目进展情况:利用QT进行C++可视化编程,计时器功能完成,界面布局设计基本完成,用户记录对错总数功能完成,语言切换功能未完成。
面临的主要问题:QT以前没有接触过,在学习上花费时间较多,基本功能实现完成。目前最大的问题就是在考虑将上次写的程序加入到界面中,进行整合优化。语言切换目前在探索中。
基本的解决思路:摸索,探索,网上查询相关资料。

问:两个人都没接触过QT吗?
答:都没有接触过。

问:那选择这个技术的原因是?为何不选你们熟悉的技术?
答:我们上次作业用的c++,c++可视化常见的用mfc和qt,我们选择了较容易学习的qt。以前没有进行过c++可视化方面的编程。

9.项目小结

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

蔡凯峰

很荣幸有这一次结对编程的机会,让我对结对编程有了更深入的理解,在与搭档何健的合作中,我学会了许多,如面对困难时的思考方法以及解决难题的方式。我以前的编程习惯就是功能性为主,只要能实现功能,怎么简单方便怎么来,没有一点规范。但是在这次结对编程中,我意识到这种编程习惯的弊端:会给搭档带来许多不必要的烦扰,反而降低了整体效率。相信以后我会慢慢改掉这个坏毛病。

何健

在结对编程中,我学会了QT的基本知识,并能使用它实现简单的C++可视化编程。
在和搭档的交流合作中,虽然我们都是使用相同的语言C++,但是我们的代码编写风格和习惯不同,在代码查看上花费了一些不必要的时间。我们互相弥补不足,在此次项目下,我也意识到如何使代码更加规范化。
此次结对编程,我们之间分工不同,我负责前端,他负责后端。最后进行整合,大大缩减了项目完成的时间,程序完成的效果也不错。同时,我们增进之间的友谊,并且大大提高了自己的编程水平。

10.结对照片





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: