logo资料库

c++课程设计(多功能计算器设计).doc

第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
资料共20页,剩余部分请下载后查看
1 、设计系统的目的意义……………………………………………3 目录 2 、系统功能,功能分析……………………………………………3 2.1 设计内容与要求………………………………………………3 2.2 需求分析………………………………………………………3 2.3 系统的功能分析………………………………………………3 3 、系统设计…………………………………………………………4 3.1 设计思想………………………………………………4 3.2 总体设计………………………………………………4 4、运行和调试………………………………………………………… 5 、课程设计心得……………………………………………………… 6、参考书目……………………………………………………………… 7 、附录(源代码)……………………………………………………… 1
一、设计系统的目的意义 通过 c++课程设计,将学到的面向对象的程序设计思想用到具体的工作和学 习中,加深对类与对象的理解,提高学生分析问题,解决问题从而运用所学知识 解决实际问题的能力。 1.设计内容与要求 二、系统需求,功能分析 系统要求具有加、减,乘、除、乘方、开方、阶乘、三角函数运算等功能; 对每一个运算都具有一个子菜单,在主画面上方设计一个结果显示框; 对四则运算有连续运算的功能;对三角函数运算模块要求输入数据用角度,运算 使自动转换为弧度。 项目运行的软、硬件环境: Windows 操作系统以及相应的软硬件 Visual C++ 6.0 Microsoft 2.需求分析 在仔细分析多功能计算器设计的过程中,得到计算器系统处理的流程如 图所示: 开始 a 四则运算 s 三角函数 k 乘方、开方、阶乘运 正 切 正 弦 余 弦 乘 方 开 方 阶 乘 根据压栈法,利用 后缀表达式求值 3.系统的功能分析 这个多功能计算器包括三个主要的大功能模块: ①四则运算; 2
②三角函数运算; ③乘方、开方、阶乘运算 其中①四则运算→要能进行连续混合运算,也能独立加、减、乘、除;②三 角函数运算→又分为正切、正弦、余弦三个子功能模块;③乘方、开方、阶乘运 算→包括乘方、开方、阶乘三个子功能模块。 ⑴ 设计思想 三. 系统设计 对于四则运算,我们使用一个存放操作数的栈,求值过程顺序扫描后缀表达 式,每次遇到操作数便将它压入堆栈;遇到运算符,则从栈中弹出两个整数进行 计算,然后再把结果压入堆栈。这样等到扫描结束时,留在栈顶的整数就是所求 表达式的值。 对于三角函数,通过使用命令行:#include或#include “math.h” 可以直接运用 c 库函数 tan() 、sin() 、cos(),只是该库函数的参数单位是弧 度,需要一条语句将输入的角度转换成弧度:N=data*(PI/180),N 即函数的参 数,data 是输入的角度。 至于乘方、开方、阶乘运算,我采用友元的方法,设计了三个以 Calculator 类型的对象为参数的友元函数,这样有利于直接访问类中的数据和函数,进行计 算。 ⑵ 总体设计 本系统经过分析和研究,采用面向对象的方法以及 C++的编程思想来完成本 系统的设计。在 Visual C++ 6.0 中进行程序编码、测试、及运行通过。 源文件中 main()函数主要用来显示主菜单。 两个头文件: Stack(堆栈)的数据类型是变化的,所以设计为模板类。将这个类写在 stack.h 的头文件内;另外设计一个 calulator 模板类,写在头文件 calulator.h 中,各种功能函数都蕴含在其中: void Run(void)四则运算函数 void trangle(void)三角函数,出现子菜单,选择便可以进行具体三角函数操作; void com(void)乘方、开方、阶乘运算函数,出现子菜单,按提示选择具体操作, 即可进行计算,通过 friend void chengfang(Calcualator &A);等友元函数 来实现 3
大体如下图所示: sin cos tan Chengfang kaifang jiecheng Computer2 trangle ch com main run Computer1 四.运行和调试 进入主界面 选择 a,做四则运算:32*(6-15)+35= 得如下界面: 4
选择 y 进入主菜单,重新选择所需要的运算,下面选 s,得到子菜单,再选 T,输 入角度有: 选择 y 进入主菜单,选 k,出现子菜单,选 3 阶乘有: 这只是调试过程中的部分界面,具体的运行有待用户自己去操作。 五.课程设计的心得 我做的这个课程设计,还是个拙劣之作,还有很多地方有待完善和提高, 5
特别是四则运算的求解,我暂时只能依照书本上的一个设计,利用后缀表达式来 实现,但在书本的基础上,我按照自己的想法成功完成了其他所有的功能函数, 觉得也蛮有成就感的!在这次实践当中,我觉得重点在于你要不断地去尝试,尝 试各种代码的输入,(当然,这要求你先得冷静地分析和处理课题,)然后不断地 调试程序,调试是一个非常重要的步骤,很多时候我都会顾此失彼,或者被几十 或几百个错误吓到,但是硬着头皮顶过来,不懂就问,不懂就翻阅资料,你就会 发现自己长本事了。另外,在这次设计过程中,程序的顺利运行,有个重要因素, 就是邹老师的精心指导,邹老师让我清楚了,c++中许多细节问题是不容忽视的, 一定要细心、小心! 通过这次课程设计,可以明显地感觉到它弥补了课堂教学和实验中知识的深 度和广度方面的不足,也让我进一步掌握了面向过程和面向对象程序设计的基本 方法和编程技巧,同时也巩固所学理论知识,虽然花费了不止一点点的时间和精 力,不过那确实挺值得的,既让我认识到自己知识方面的缺陷,又培养了我独立 分析问题、解决问题的能力。 六.参考书目 【1】陈维兴、林小茶,《C++面向对象程序设计教程》,清华大学出版社 【2】谭浩强,《C 语言程序设计》,清华大学出版社,2000 年. 【3】陈维兴、陈昕、林小茶,《C++面向对象程序设计习题解答与实验指导》, 清华大学出版社,2005 年 【4】刘振安、刘燕君、孙忱,《C++语言课程设计》,机械工业出版社,2007 年 七.附录(源代码) //stack.h 标准的堆栈模板程序(头文件) #if !defined(STACK_H) #define STACK_h #include 6
#include using namespace std; const int MaxStackSize=50; template class Stack { private: T stacklist[MaxStackSize]; int top; //堆栈的最大尺寸 public: Stack(); void Push(const T& item); T Pop(); void ClearStack(); T Peek() const; int StackEmpty() const; int StackFull() const; //压栈 //出栈 //清空堆栈 //输出堆栈顶部元素(计算结果) //判断堆栈是否为空 //判断堆栈是否已满 }; //构造函数,将 top 置-1 template Stack::Stack(): top(-1){} //压栈 template void Stack::Push(const T& item) { if (StackFull()) { //判断堆栈是否已满 cerr<<"Stack overflow!"<
stacklist[top]=item; //不满则压栈 } //出栈 template T Stack::Pop() { T temp; if(StackEmpty()) { //判断是否为空栈 cerr<<"Attempt to pop an empty stack!"< void Stack::ClearStack() { } //返回栈顶元素 template T Stack::Peek() const { if(top==-1) { //弹出 //判断 top 是否有效 cerr<<"attempt to peek at an empty stack!"<
分享到:
收藏