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!"<