面向对象的程序设计计划书
要求
项目简介
一位小学教师Ken希望完成这样的任务:针对于小学生正在学习四边形(quadrangle)的特性,编写一个小软件,能够随机在屏幕上显示矩形(rectangle)、正方形(square)、平行四边形(parallelogram)、梯形(trapezoid)和菱形(diamond)五种形体之一,同时显示该形体的特性和关键数据(随机产生),学生复习形体的特性,然后根据给出的关键数据计算形体的面积,软件判断其结果的正确性。在学习过程中,软件记录产生的每一个形体,在学生选择不再继续后,将其学习的过程重放一遍,用以重温,加深印象。编程语言:C++
- 最后实现的效果如下展示:
选择模式:
- 学习模式
- 复习模式
用户输入1:
开始进入学习模式,并随机出现图形,图形的参数为随机数
- 平行四边形
展示名字,参数,图形样子
请输入面积:
若用户输入面积正确,返回上上一级,选择模式
若用户输入面积错误,弹出“请重新输入”,直到输入正确为止 - 矩形
- 正方形
- 梯形
- 菱形
用户输入2:
若队列为空,则提醒“尚未学习”
返回最初的样子,选择模式
若已经有学习过的内容,则一定顺序弹出(正序或者逆序),不需要重复之前的学习步骤,就是不用再次输入面积,只需要直接弹出名字(wnat()),画出形体以及参数即可(darw()),当弹出完毕之后,程序结束。注意:darw()里面有名字与参数的输出。
问题分析
List应该是构成一个容器,用链表构成,加入的时候,长度+1,p = p->next,将学习过的图形放到最后一位,最后遍历的时候,长度-1,并且输出,直到长度为0的时候提醒“复习结束”,到这个时候程序结束。当重载了[]之后,可以返回链表的特定位置的元素
- size();//返回列表中的节点数,在list类中增加private的元素len,而size()就是用来返回len的;
- push_back();//将数据添加到列表末尾,这个函数应用到学习过程中向链表增加元素,会用到[];
- operator[];//返回指定下标的数据,这是一个运算符的重载函数,原型为QUADPTR& operator;
- traverse();//遍历,需要一个访问函数作为参数
- pop_back() //用来删除列表的最后一个节点,其原型为:void pop_back();
待实现的功能
随机设置四边形的参数
解决:生成随机数判断用户输入是否正确
解决:用while(i != area),只有当错误时才会反复执行随机输出某个四边形
解决:switch语句每个四边形有编号,用生成随机数的方法来选择四边形
存在问题
- 随机数不能为0(四边形的参数)
- 梯形画出来有误
- 梯形面积计算有误
- 菱形不对
- 计算出的面积有可能为浮点数
- 复习模式会陷入死循环
- 遍历函数的参数是访问函数,那么访问函数是什么,访问函数与遍历函数都需要实现什么功能?