小学四则运算界面版

李永豪 201421123117 郑靖涛 201421123114html

coding 地址:https://git.coding.net/ras/work2.gitgit

1、题目描述web

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

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

2、题目要求小程序

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

      a. 知足代码风格规范和代码设计规范(参考书第4章4.1-4.3内容)http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html
      - 请重视这点,在开发时两我的要有口头上的沟通:“好的,咱们一块儿在开发中遵照一块儿承认的编码规范”
      - 请把大家约定的编码规范文档也提交到gitdom

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

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

3、功能分析测试

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

4、思惟导图编码

5、代码分析

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);
}

6、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

 

 7、总结

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

相关文章
相关标签/搜索