四则运算GUI版

小学四则运算界面版

李永豪 201421123117 郑靖涛 201421123114

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

一、题目描述

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

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

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

a. 满足代码风格规范和代码设计规范(参考书第4章4.1-4.3内容)http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html

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

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

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

三、功能分析

a.实现GUI界面;
b.实现基础式子生成、计算以及判断对错;
c.记录过往的对错总数,并且在程序退出再启动时可以实现保存对错数量并增量计算;
d.实现计时功能;
四、思维导图
1.计时功能实现
1111608-20170315101042198-1676341425.png
2.增量计算实现
1111608-20170315101110776-221933146.png
五、代码分析

1.使用MFC实现GUI界面

1111608-20170315101253838-1148251509.png

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: 在此添加控件通知处理程序代码
}

1111608-20170315101904526-1343192307.png
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: 在此添加控件通知处理程序代码
}

1111608-20170315102029916-1765697658.png

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: 在此添加控件通知处理程序代码
}

1111608-20170315102116385-596959165.png
1111608-20170315102130182-570769808.png
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);
}

1111608-20170315102223385-1445768497.png
六、PSP展示
1111608-20170315102907713-2143215737.png

七、总结

   一开始知道要用这种结对编程方式写程序很怪,感觉是用两个人的时间做一件事情,一人写一个模块不是更快完成demo,感觉1+1<2。尝试几次,发现旁边有一个人帮忙看着自己写的代码,提建议,发现自己程序的错误少了好多,这是最好的一点,也省去了后面再修改的麻烦,还挺不错的。还有一点好处就是,一个人一直写效率会变低,轮流换班写代码轻松了很多,效率也提高了不少。但是我觉得这种做法最大的问题是,有时候会固执己见,谁也不服谁,思维不统一,造成没必要的矛盾。不过这次还是有收获的,学了新鲜的编程模式,也对伙伴的编程思维有了一定的了解。

转载于:https://www.cnblogs.com/zzzjt/p/6552777.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以教你使用 Python 的 Tkinter 模块来编写一个简单的四则运算计算器。 首先,你需要安装 Python,并确保安装了 Tkinter 模块。 接下来,我们可以使用 Tkinter 创建 GUI 界面。这里我提供一个简单的界面设计: ```python from tkinter import * root = Tk() root.title("四则运算计算器") e = Entry(root, width=35, borderwidth=5) e.grid(row=0, column=0, columnspan=3, padx=10, pady=10) def button_click(number): current = e.get() e.delete(0, END) e.insert(0, str(current) + str(number)) def button_clear(): e.delete(0, END) def button_add(): first_number = e.get() global f_num global math math = "addition" f_num = int(first_number) e.delete(0, END) def button_subtract(): first_number = e.get() global f_num global math math = "subtraction" f_num = int(first_number) e.delete(0, END) def button_multiply(): first_number = e.get() global f_num global math math = "multiplication" f_num = int(first_number) e.delete(0, END) def button_divide(): first_number = e.get() global f_num global math math = "division" f_num = int(first_number) e.delete(0, END) def button_equal(): second_number = e.get() e.delete(0, END) if math == "addition": e.insert(0, f_num + int(second_number)) if math == "subtraction": e.insert(0, f_num - int(second_number)) if math == "multiplication": e.insert(0, f_num * int(second_number)) if math == "division": e.insert(0, f_num / int(second_number)) # 创建按钮 button_1 = Button(root, text="1", padx=40, pady=20, command=lambda: button_click(1)) button_2 = Button(root, text="2", padx=40, pady=20, command=lambda: button_click(2)) button_3 = Button(root, text="3", padx=40, pady=20, command=lambda: button_click(3)) button_4 = Button(root, text="4", padx=40, pady=20, command=lambda: button_click(4)) button_5 = Button(root, text="5", padx=40, pady=20, command=lambda: button_click(5)) button_6 = Button(root, text="6", padx=40, pady=20, command=lambda: button_click(6)) button_7 = Button(root, text="7", padx=40, pady=20, command=lambda: button_click(7)) button_8 = Button(root, text="8", padx=40, pady=20, command=lambda: button_click(8)) button_9 = Button(root, text="9", padx=40, pady=20, command=lambda: button_click(9)) button_0 = Button(root, text="0", padx=40, pady=20, command=lambda: button_click(0)) button_add = Button(root, text="+", padx=39, pady=20, command=button_add) button_subtract = Button(root, text="-", padx=41, pady=20, command=button_subtract) button_multiply = Button(root, text="*", padx=40, pady=20, command=button_multiply) button_divide = Button(root, text="/", padx=41, pady=20, command=button_divide) button_equal = Button(root, text="=", padx=91, pady=20, command=button_equal) button_clear = Button(root, text="清除", padx=79, pady=20, command=button_clear) # 将按钮放在屏幕上 button_1.grid(row=3, column=0) button_2.grid(row=3, column=1) button_3.grid(row=3, column=2) button_4.grid(row=2, column=0) button_5.grid(row=2, column=1) button_6.grid(row=2, column=2) button_7.grid(row=1, column=0) button_8.grid(row=1, column=1) button_9.grid(row=1, column=2) button_0.grid(row=4, column=0) button_clear.grid(row=4, column=1, columnspan=2) button_add.grid(row=5, column=0) button_subtract.grid(row=6, column=0) button_multiply.grid(row=6, column=1) button_divide.grid(row=6, column=2) button_equal.grid(row=5, column=1, columnspan=2) root.mainloop() ``` 以上代码将创建一个简单的 GUI 界面,包含数字和运算符按钮,以及一个文本框用于显示计算结果。运行程序后,你可以在文本框中输入数字和运算符,然后单击“=”按钮计算结果。 注意,这只是一个简单的示例,你可以根据自己的需求扩展和改进这个计算器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值