博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小学四则运算界面版
阅读量:5278 次
发布时间:2019-06-14

本文共 5719 字,大约阅读时间需要 19 分钟。

李永豪 201421123117 郑靖涛 201421123114

coding 地址:

一、题目描述

我们在中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:

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

二、题目要求

    1. 一个小组中的两个同学选取比较优秀的 作业1 (两个人的都独立完成了), 把它作为本次作业的基础,然后再修改。
    2. 结对编程实现上述功能,同样的,在程序正式开发之前,请先预估下PSP每个环节的消耗时间,并在过程中统计实际耗时,最后提交PSP表格。依然注意,这个主要是给你们自己看的,不必造假数据。
    3. 在两人合作的过程中, 请看下面的内容

      a. 满足代码风格规范和代码设计规范(参考书第4章4.1-4.3内容)

      - 请重视这点,在开发时两个人要有口头上的沟通:“好的,我们一起在开发中遵守一起认可的编码规范”
      - 请把你们约定的编码规范文档也提交到git

      b. 给人提意见的方式——送一个汉堡包http://www.cnblogs.com/xinz/archive/2011/08/22/2148776.html

      c. 理解领航员和驾驶员两种角色关系,并在结对编程中两个人轮流做对方的角色。两人都必须参与本次作业的编码工作,并在git提交日志上体现这点。

三、功能分析

  1. 实现GUI界面;
  2. 实现基础式子生成、计算以及判断对错;
  3. 记录过往的对错总数,并且在程序退出再启动时可以实现保存对错数量并增量计算;
  4. 实现计时功能;

四、思维导图

五、代码分析

1.使用MFC实现GUI界面

2.点击生成按钮自动生成式子

void C第二周Dlg::OnBnClickedButton1(){    CString num1;    CString num2, result;    CString oper;    CString s1, s2;    int  b, c;    char a;    s1 = "正确答案";    s2 = "判断对错";    a = getopre();    b = random(0, 20);    c = random(1, 20);    oper.Format(_T("%c"), a);    num1.Format(_T("%d"), b);    num2.Format(_T("%d"), c);    switch (a)    {    case '+':         GetDlgItem(IDC_STA1)->SetWindowTextW(num1);        GetDlgItem(IDC_STA2)->SetWindowTextW(oper);        GetDlgItem(IDC_STA3)->SetWindowTextW(num2);        break;    case '-':          GetDlgItem(IDC_STA1)->SetWindowTextW(num1);        GetDlgItem(IDC_STA2)->SetWindowTextW(oper);        GetDlgItem(IDC_STA3)->SetWindowTextW(num2);        break;    case '*':         GetDlgItem(IDC_STA1)->SetWindowTextW(num1);        GetDlgItem(IDC_STA2)->SetWindowTextW(oper);        GetDlgItem(IDC_STA3)->SetWindowTextW(num2);        break;    case '/': b = c*b;        num1.Format(_T("%d"), b);        GetDlgItem(IDC_STA1)->SetWindowTextW(num1);        GetDlgItem(IDC_STA2)->SetWindowTextW(oper);        GetDlgItem(IDC_STA3)->SetWindowTextW(num2);        break;    }    GetDlgItem(IDC_STA4)->SetWindowTextW(s1);    GetDlgItem(IDC_STA5)->SetWindowTextW(s2);    // TODO: 在此添加控件通知处理程序代码}

3.点击计算按钮,计算出正确答案并显示

void C第二周Dlg::OnBnClickedButton2(){    CString num1, oper, num2,s1,s2,s3,s4,answer;    int result;    GetDlgItem(IDC_STA1)->GetWindowText(num1);    GetDlgItem(IDC_STA2)->GetWindowText(oper);    GetDlgItem(IDC_STA3)->GetWindowText(num2);    int a = _tstoi(LPCTSTR(num1));    int b = _tstoi(LPCTSTR(num2));    s1 = "+";    s2 = "-";    s3 = "*";    s4 = "/";    if (oper == s1) {        result = a + b;    }    else if (oper == s2) {        result = a - b;    }    else if (oper == s3) {        result = a*b;    }    else {        result = a / b;    }    answer.Format(_T("%d"), result);    GetDlgItem(IDC_STA4)->SetWindowTextW(answer);    // TODO: 在此添加控件通知处理程序代码}

4.输入用户计算结果后点击检验按钮,可以判断对错,并且记录保存对错数量

void C第二周Dlg::OnBnClickedButton5(){    CString num1, oper, num2, s1, s2, s3, s4,s5,s6,s7, answer,key,rights,mistakes;    int result,right,mistake,i=0,t=0;    CString strline;    CStdioFile  File1;    CStdioFile  File2;    File1.Open(_T("TRUE.txt"), CFile::modeReadWrite);    File2.Open(_T("FALSE.txt"), CFile::modeReadWrite);    while (File1.ReadString(strline))        i++;    while (File2.ReadString(strline))        t++;    rights.Format(_T("%d"), i);    mistakes.Format(_T("%d"), t);        GetDlgItem(IDC_STA1)->GetWindowText(num1);    GetDlgItem(IDC_STA2)->GetWindowText(oper);    GetDlgItem(IDC_STA3)->GetWindowText(num2);    int a = _tstoi(LPCTSTR(num1));    int b = _tstoi(LPCTSTR(num2));    s1 = "+";    s2 = "-";    s3 = "*";    s4 = "/";    s5 = "true";    s6 = "false";    s7 = "恭喜";    if (oper == s1) {        result = a + b;    }    else if (oper == s2) {        result = a - b;    }    else if (oper == s3) {        result = a*b;    }    else {        result = a / b;    }    answer.Format(_T("%d"), result);    GetDlgItem(IDC_EDIT1)->GetWindowText(key);    if (key == answer) {        GetDlgItem(IDC_STA5)->SetWindowTextW(s5);        GetDlgItem(IDC_STA4)->SetWindowTextW(s7);        GetDlgItem(IDC_STA10)->SetWindowTextW(rights);        File1.SeekToEnd();        File1.WriteString(rights);        File1.Write("\n", 1);    }    else {        GetDlgItem(IDC_STA5)->SetWindowTextW(s6);        GetDlgItem(IDC_STA4)->SetWindowTextW(answer);        GetDlgItem(IDC_STA11)->SetWindowTextW(mistakes);        File2.SeekToEnd();//文件尾部        File2.WriteString(mistakes);        File2.Write("\n", 1);    }    File1.Close();    File2.Close();    // TODO: 在此添加控件通知处理程序代码}

5.点击开始按钮开始计时,点击暂停按钮暂停计时

void C第二周Dlg::OnTimer(UINT_PTR nIDEvent){    // TODO: 在此添加消息处理程序代码和/或调用默认值    CDialogEx::OnTimer(nIDEvent);    static UINT mm = 0;    static UINT ss = 0;    static UINT mss = 0;    CString str2;    switch (nIDEvent)    {    case 1:        mss++;        if (mss == 60) { mss = 0; ss++; }        if (ss == 60) { ss = 0; mm++; }        str2.Format(_T("%02i:%02i:%02i"), mm, ss, mss);        m_time.SetWindowTextW(str2);        break;    }}void C第二周Dlg::OnStnClickedSta6(){    // TODO: 在此添加控件通知处理程序代码}void C第二周Dlg::OnBnClickedButton4(){    // TODO: 在此添加控件通知处理程序代码    SetTimer(1, 1000, NULL);}void C第二周Dlg::OnBnClickedButton7(){    // TODO: 在此添加控件通知处理程序代码    KillTimer(1);}

六、PSP展示

PSP2.1

Personal Software Process Stages

Time (%) Senior Student

Time (%)

Planning

计划

2h

2.5h

· Estimate

估计这个任务需要多少时间

36h

41h

· Analysis

需求分析 (包括学习新技术)

1h

2h

· Coding Standard

代码规范

1h

1h

· Design

具体设计

2h

3h

· Coding

具体编码

30h

32h

· Test

测试(自我测试,修改代码,提交修改)

1.5h

2h

Reporting

报告

1h

1h

 

 七、总结

  第一次尝试结对的方法进行编程,可以说是很不习惯的,因为从来编程都是一个人来完成的,两个人本来是可以分开写两个不同的模块,加快完成的速度,可是这样有的时候自己的思路和同伴的思路不相符,还需要解释,这样大大拉长了完成的时间。可有利有弊,有一个人在旁边复审,一段代码经过两双眼睛,这样减少了错误的发生,也可以集思广益想出更多的解决方法。但是即便如此我还是比较习惯于自己写代码,因为有个人在旁边看着让我感觉很不习惯,而且每一次的编程都需要调节两个人都有空的时间,感觉很麻烦。

  

 

转载于:https://www.cnblogs.com/lyh117/p/6550323.html

你可能感兴趣的文章
dom4j 通用解析器,解析成List<Map<String,Object>>
查看>>
第一个项目--用bootstrap实现美工设计的首页
查看>>
使用XML传递数据
查看>>
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>
模板设计模式的应用
查看>>
实训第五天
查看>>
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>