- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
面向对象课程设计报告格式
题目:计算器
学号: 1004681035
姓名: 李博洋
班级: 计科101
需求分析: 题目:设计一个简单的计算器
要求: 在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。
分析:输入或从文件中读入需要计算的式子,然后计算出正确的结果,将结果输出。
解析:得到一个需要计算的式子,很显然这个式子中包含着数字以及各种运算符和括号,这个式子是一个字符串,因而要用到string。在数据结构中,一个算术表达式就是一个按中序遍历的二叉树,如果要计算,很显然要将该式子按后续遍历(逆波兰式),得到按优先级排列的便于计算的式子,中间过程需要用到栈(stack),计算过程也要用到栈,因而创建了一个链栈的模板,在需要的时候,按需要的类型实例化就可以了。
操作流程:菜单界面---选择输入的方式----按不同的输入方式读取信息----将计算式子按逆波兰式转化----计算----输出结果
2、概要设计
template class T
class Node{
public:
Node() {this-next = NULL;}
Node(T data,NodeT *next=NULL){this-data = data;this-next = next;}
T data;
NodeT *next;
}
明确设计为链表类型的存储结构,因而节点(Node)就必须包含一个需要存储类型数据成员,还应有一个指向下一个节点的指针,用构造函数初始化个数据成员。将数据成员定义为public是为了下面的访问方便。
template class T
class LinkedStack{
public:
LinkedStack();
~LinkedStack();
bool isEmpty();
void push(T x);
T pop();
T getTop();
private:
NodeT *top;
};
根据需要,要用到多种类型的栈(stack),而栈的功能都大体相同,所以将类设计为模板类(template),这样在需要用的时候实例化就可以用了。创建链栈,就要用到上面的节点(Node).栈的主要功能有 初始化(LinkedStack()),入栈(void push(T x)),出栈(T pop()),得到栈顶元素(T getTop()),还有可能判断栈是否为空栈(bool isEmpty()),然后分别将各个部分实现。
程序编码。
程序的流程图如下:
部分重点代码注释详见程序清单。
4、调试分析
分模块(类)进行,设计好测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些 问题如何解决 ),算法的改进设想。
菜单界面。选择读取方式...
从键盘读入表达式,并计算得出结果。
继续从键盘读入
选择从文件读入,并且文件打开成功
输入文件中的算术表达式
输出文件中的结果
调试时存在的问题:刚开始时,链表的链接存在问题,老是出现内存访问错误,最后通过调试发现,原来多写了一个next。然后就是在写tochange()函数时,switch语句中的条件考虑的不够全面。再就是string类型的表达式不能够作为switch的条件。最后就是定义了一个string a,不能够通过a[i]= 2as这种方式给string 类型的数据赋值
算法的改进设想:在分配expression的时候,都是按的比较大的值分配的,有很多空间都没有用到,造成了很多内存的浪费。改进:运用链表,动态的分配,按需分配
程序清单:
#include iostream
#include string
#include fstream
#include cstdlib
using namespace std;
template class T // 链表节点 类
class Node
{
public:
Node() // default constructor
{
this-next = NULL;
}
Node(T data,NodeT *next=NULL)
{
this-data = data;
this-next = next;
}
// 声明为public类型是便于top的访问
T data;
NodeT *next; //next指向的对象是NodeT,
};
template
文档评论(0)