博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结对编程--四则运算改进版(107,120)
阅读量:6824 次
发布时间:2019-06-26

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

题目描述:

本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。

在下面的功能需求中实现两个:

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

需求分析

本次编程要求实现记录用户的对错总数,并且在以前的基础上进行增量计算。因此,这就要求我们需要创建文件或其他方法来保存对错的数量,以便于在再次开启程序时能够读入以前做题的数目。计时功能是相对比较容易实现的,只需在开始答题是开启时钟,提交答案时关闭时钟,两次的差值就是答题所用的时间。多种语言选择,其实就是在实现中文的基础上将显示界面和答案对错提示用不同的语言来替代,而内在的关于计算、比较答案的算法却没有太大的变化。

功能分析

  • 基本功能
    实现中文版的四则运算
  • 扩展功能
    1、实现英文版的四则运算;
    2、实现计时功能,能显示用户在每一个题目的用时;
    3、记录用户的对错总数,并下次程序运行时能在之前的基础上增量计算。
  • 高级功能(暂时还没有)
    1、创建一个类似排行榜的文件,能够记录用户在做相同数量的题目的最短用时,或以分数来计算时的最高得分;
    2、提供错题循环出题的功能。

设计实现

1110651-20170314173124010-803538869.png

代码说明

程序中判断答案的代码如下(为中文版的),在切换到英文等其他语言时,只需将显示正确错误的的中文设置为英文,而生成题目的函数并不需要有任何的改变。

char* Submit(char result[],char * answer){    static char prompt[20];     FILE * in;    FILE * out;    in=fopen("number.txt","r");    fscanf(in,"%d,%d",&right,&wrong);    fclose(in);        if(strcmp(answer,result)==0)    {           strcpy(prompt,"正确!");        right++;    }    else    {           strcpy(prompt,"错误!  ");        strcat(prompt,"正确答案是:");        strcat(prompt,result);        wrong++;    }    out=fopen("number.txt","w");    fprintf(out,"%d,%d",right,wrong);    fclose(out);    return prompt;}

整个工程总共有三个界面:选择语言的界面、中文界面和英文界面(中文繁体的只需创建一个新的界面,然后调用之前的函数即可)。界面之间的跳转使用按钮来控制,以下是部分代码(主界面到中文界面):

void CTeamworkDlg::OnChinese() {    // TODO: Add your control notification handler code here    chinese chinese;    CTeamworkDlg::OnOK();    chinese.DoModal();    }

每一题计时的代码如下:

void chinese::OnButton() {    // TODO: Add your control notification handler code here    UpdateData();    m_Show1=Draw();    start=clock();    UpdateData(false);}void chinese::OnButton_Submit() {    // TODO: Add your control notification handler code here    finish= clock();    duration =(double)(finish-start)/CLOCKS_PER_SEC;    sprintf(temp,"%g",duration);    m_Show3=temp;    UpdateData(false);}

计时功能通过按钮实现,在生成题目之后开启时钟,在提交之后在记录一个时间,两个时间的差值就是本题的用时。

测试运行

1110651-20170314130651604-1548473396.png

1110651-20170314130715354-1371711646.png

1110651-20170314130736354-1752432422.png

1110651-20170314130759666-269795684.png

1110651-20170314130814135-437648718.png

1110651-20170314184651557-1123905806.png

PSP展示

PSP2.1 Personal Software Process Stages Time (%) Senior Student(/hour) Time (%)(/hour)
· Planning 计划 2 1.8
· Estimate 估计这个任务需要多少时间 25 20
· Analysis 需求分析 (包括学习新技术) 2 1
· Coding Standard 代码规范 1 1.5
· Design 具体设计 1.5 1
· Coding 具体编码 20 15
· Test 测试(自我测试,修改代码,提交修改) 1 1.5
Reporting 报告 1 1

小结

整个编程过程中,遇到不少的问题。类似[Error]:LNK2005 ——生成题目的函数写在Draw.h的头文件中,在只有中文界面时调用函数时没有任何的问题,而在加入英文界面的因为重复定义而出现了错误。上网百度后,发现只需声明该方法即可,并不需要重新定义其他与之功能相同的异名函数。在读入文件时,也曾就文件的路径编写时使用绝对路径或则相对路径出现过问题。一开始使用绝对路径编写,发现编译后运行生成的.exe文件时会出现错误。之后,将文件路径改为相对路径并将其移入到Debug文件夹中后就可以很好地实现实验要求的功能。同时,在计时方面仍有不足,只能够一题一题的统计时间。程序还有许多不足,之后会不断改进!!!

转载于:https://www.cnblogs.com/Luojiening/p/6544557.html

你可能感兴趣的文章
祖宗十八代的称谓
查看>>
如何配置Hyper-V的虚拟机通过主机网络上网 (NAT)
查看>>
Linux make语法
查看>>
javascript--鼠标拖动
查看>>
[html] 图层div半透明,文字不透明
查看>>
ssh整合问题总结--在添加商品模块实现图片(文件)的上传
查看>>
Service 广播 到Fragment
查看>>
各种HTTP错误消息含义
查看>>
小酌重构系列目录汇总
查看>>
String类常用方法。
查看>>
Codeforces Round #356 (Div. 2) D. Bear and Tower of Cubes dfs
查看>>
【设计模式】状态模式
查看>>
Eclipse文件覆盖问题
查看>>
Android Camera详解
查看>>
绕过校园网WEB认证_dns2tcp实现
查看>>
Cache-Control官方文档
查看>>
【杂文】2017年度总结
查看>>
微服务化的数据库设计与读写分离
查看>>
SpringMVC-----使用Maven创建Web项目
查看>>
Ribbon重试机制与Hystrix熔断机制的配置问题1
查看>>