码迷,mamicode.com
首页 > 编程语言 > 详细

四则运算问题的MFC移植

时间:2016-03-13 00:37:13      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

四则运算问题的MFC移植

  这种实现了将上周所写的两个程序结合起来并利用MFC提供了图形界面接口。本来这件事是没有什么太大的难点的,但是由于我最初的想法使得我设计了一个相对比较复杂的UI,所以就凭空加了很多需要额外考虑的问题。所以最先讲一下我的UI的设计思路吧。


 

图形界面设计

     技术分享

  图形界面的设计图如上所示。用户能够选择生成算式的数量,用户输入相应数量后,需点击生成算式。在图形界面中一次最多可以同时显示5个算式,用户可分别输入对这5个算式的答案。若算式数量多于5个,用户可以通过点击左右两侧的翻页按钮进行翻页。当然,左右翻页不会影响用户之前输入的结果的情况。用户答案输入结束后,点击提交结果,系统会自动评判每一道题的答案,对每一道题的评判结果会显示在相应题目右侧两个edit control中。包括用户答案的正误,以及标准答案。同时系统还会统计整轮答题选手总共的正误情况,并将结果显示。


设计中需考虑的问题

  由于此次的实现中不涉及新的算法的设计,所以只是写相关的MFC控件的代码。所以其具体的细节就不在此赘述。我只在此谈一下我在实现中遇到的一些需要考虑到的问题以及相应的解决方法。

  1、char转CString

    由于在控制台程序版本中操作字符用的是char*,而在MFC中edit control中字符的操作都是CString,所以需要进行转化,解决的方法就是修改函数,将控制台版本中所有函数中操作char的步骤修改为对CString的操作,CString操作与String操作类似,修改过程比较顺利。

  2、存储表达式

    在控制台版本中,每生成一个表达式用户就输入一个答案,然后立马进行正误判断。这种情况下是不需要存储表达式以及结果的,只需要在正确累加器或错误累加器上自加就可以了。而由于MFC版本的设计,我们必须要保存历史上曾生成的算式,以及用户输入的结果。所以对于此改动的解决方案就是增加一个新的结构体数组,用来保存历史出现过的算式,当用户需要看到之前的算式时,点击翻页按钮就可查看。该结构体的定义如下:

 1 struct problem{
 2     CString prob;
 3     CString ans_usr_input;
 4     num usrans;
 5     num ans;
 6     bool have_judge;
 7     bool judge;
 8     problem()
 9     {
10         prob = "";
11         ans_usr_input = "";
12         have_judge = false;
13         judge = false;
14     }
15 };

    其中:prob为四则表达式,ans_usr_input为用户输入的答案(从edit control中直接读取),usrans为用户答案转换成计算格式的结果(num为结构体,定义同控制台程序的定义),ans为标准答案,hava_judge用来标记此道题是否已经被判过,judge为此题用户的正确性。

    我们定义一个数组来存储所有生成的题目 problem pro[maxp][5];。


总结

  在整个的实现过程中还有很多其他琐碎的小问题,解决的思路也比较好像,只是实现起来代码上写的比较多,在此我就不赘述了。总的来说这次的实现比较仓促,虽然功能实现了,但是鲁棒性没有考虑的很周全,现在仍有一些已知的bug没有解决。同时,此版程序也不支持用户限制题目是否加括号,是否支持乘除法等。改进的空间还是很大的。但是此版也在控制台版本上有了一些改进,首先是支持了图形界面操作;其次能够支持用户回看已经做过的题目,如果对之前的答案不满意还可以修改。

四则运算问题的MFC移植

标签:

原文地址:http://www.cnblogs.com/fanfan-blogs/p/5268809.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!