当前位置:文档之家› c++课程设计之计算器

c++课程设计之计算器

《面向对象与C++》

课程设计

题目:计算器

院、系:计算机信息与技术系学科专业:计算机科学与技术学号:

学生姓名:

指导教师:

2010年12月30日

中文摘要

本课程设计将实现一个简单计算器。这个计算器不仅能实现简单的加减乘除运算,还实现了科学计算功能。它的设计简单易行,系统具有较好的显示界面,快速简单的操作,准确得到答案,具有计算器的基本功能,并且具有可行性。降低了数字计算难度和节约了时间,对大家的计算有了一定帮助。在课程设计中,开发工具统一使用了VC++6.0,同时使用了面向对象的思想,如类、对象、多态、重载、等,遵守C++程序标识符的一般约定,并加了适量的注释。在程序设计中,采用了结构化与面向对象两种解决问题方法。

目录

第一章总体设计 (1)

1.1功能需求分析 (1)

1.2 功能结构图 (1)

第二章详细设计 (1)

2.1. zhujm类 (1)

2.2. jiben类 (2)

2.3. sanjiao类 (4)

2.4. jinzhizh类 (4)

第三章功能调试及分析讨论 (7)

3.1. 主界面 (7)

3.2. 基本运算界面 (7)

3.2.1加法运算 (7)

3.2.2取余运算 (8)

3.2.3开方根运算 (8)

3.3. 三角函数运算界面 (8)

3.3.1 sin三角函数运算 (9)

3.3.2 tan三角函数运算 (9)

3.4. 进制转换运算界面 (9)

3.4.1 二进制转十进制 (10)

3.4.2 二进制转十六进制 (10)

3.4.3 十六进制转八进制 (10)

第四章工作总结 (11)

第五章参考文献 (12)

第一章总体设计

本计算器是基于C++语言面向对象程序设计的思路和方法,实现了计算器的基本运算、三角函数、进制转换的功能。

1.1功能需求分析

本课题根据简易计算器的综合分析,将计算器的功能总结起来,共需实现以下几个功能模块:1.基本运算功能主要包括:加、减,乘、除、乘方、平方根等。

2.三角函数运算功能主要包括:正弦、余弦、正切等。

3.进制转换功能主要包括:二进制转换为十进制、八进制,十六进制,其它进制转换为十进制,以及八进制和十六进制的互相转换。

通过上述功能的设计与实现,实现了计算器的基本功能。当然在实际的计算器中,其功能要比本课题的多的多,也复杂的多,本课题仅以比较简单易懂的方式介绍给读者一个计算器的设计与实现的流程。从而让读者明白一个项目开发中需要做的工作,并在今后的工作中能遇到相关问题能知道如何解决。

1.2 功能结构图

第二章详细设计

2.1. zhujm类

该类负责计算器的主界面,主函数通过该类的对象调用,实现了计算器的功能,程序从该类开始执行。

(1)主要调用的类见表2-1

(2)主要函数见表2-2

表2-2 主要函数

(3)主要函数代码

1)主函数代码:

#include "iostream"

#include "jiben.h"

#include"sanjiao.h"

#include"zhujm.h"

#include"jinzhizh.h"

using namespace std;// .h文件为各个类,包含各函数的声明

void main()//主函数

{

zhujm m;//创建一个对象

m.fn3();//调用主菜单界面函数

}

2)zhujm主要函数实现代码:

void zhujm::fn3()//调用函数实现主界面

{ int flag=1;

while (flag==1)

{show();

int ch;

cin>>ch;

switch(ch){

case 1:{jiben a;system("cls"); //调用基本运算菜单显示函数

a.fn1();break; }

case 2:{sanjiao b;system("cls"); //调用三角函数菜单显示函数

b.fn2();break;}

case 3:{jinzhizh c;system("cls"); //调用进制转换菜单显示函数

c.fn4();break;}

case 0:{flag=0;break;} //退出程序

default:cout<<"--------请重新输入---------"<

}

}

详细源代码见附录zhujm.cpp &zhujm.h

2.2. jiben类

该类负责计算器中的基本功能,通过该类的函数的调用,实现了计算器中加、减,乘、除等的功能。

(1)主要函数见表2-2

表2-2 主要函数

(2)主要函数源代码:

void jiben::shuru(double &Number1,double &Number2){//输入两个数

cout<<"please input number1"<

cin>>Number1;

cout<<"please input number2"<

cin>>Number2;}

void jiben::Add(double Number1,double Number2)

{

cout<

}

void jiben::quyu(double Number1,double Number2)//两数取余

{

if(Number2!=0)//Number2不能为0

{cout<<(int)Number1<<"%"<<(int)Number2<<"="<<(int)Number1%(int)Number2<

else {cout<<"the number2=0,error!"<

void jiben::Root()//求x的y次根运算

{ double Number1,Number2;

cout<<"请输入一个底数"<

cin>>Number1;

cout<<"请输入开几次方根"<

cin>>Number2;

double y;

y=1/Number2;//X的Y次即 x的开y次根号

cout<

}

详细代码见附件jiben.cpp & jiben.h

2.3. sanjiao类

该类负责计算器中的三角函数功能,通过该类的函数的调用,实现了计算器中正弦、余弦、正切等功能。

(1)主要函数见表2-2

表2-2 主要函数

(2)主要函数源代码:

void sanjiao::shuru(double &x)//输入函数

{cout<<"please input a number:"<

cin>>x;}

void sanjiao::Sin(double x) //正弦函数

{cout<<"sin("<

void sanjiao::Cot(double x)//余切函数

{cout<<"cot("<

}

详细代码见附录sanjiao.cpp & sanjiao.h

2.4. jinzhizh类

该类负责计算器中的进制转换功能,通过该类的函数的调用,实现了计算器中二进制、八进制、十进制、十六进制之间的转换等功能。

(1)主要函数见表2-2

(2)主要函数源代码:

void jinzhizh::shuru(int &x) ////////输入数据

{cout<<"请输入一个整数"<

cin>>x;}

void jinzhizh::zh16(int x)////十进制转十六进制,也可直接调用hex {int s[16];int y=x;

for(int i=0;i<16;i++)

{s[i]=x%16;

x=x/16;}

int count=0;

for(i=15;i>=0;i--)

{if(s[i]!=0&&count==0)

{count++;

cout<<"它的十六进制为";

for(int t=i;t>=0;t--)

if(s[t]>=10)//当s[t]>10时转换为字符

cout<

else cout<

}

cout<

void jinzhizh::zh10()////二进制转十进制

{ cout<<"请输入一个二进制的整数:";

char a[16];

cin>>a;

int i=0,t=0,j=-1;

int sum=0;

i=strlen(a);//计算数组长度即二进制长度

for(t=i-1;t>=0;t--)

{j++;

if(a[t]=='1')//当数组中字符为'1'时乘2的J次

{sum+=(int)pow(2,j);}//将结果保存在SUM中}

cout<

}/////////////////////////////////////////十六进制转十进制void jinzhizh::zh16_10()

{cout<<"请输入一个十六进制的整数:";

char a[16];

cin>>a;

int i=0,t=0,j=0;

int sum=0;

i=strlen(a);

for(t=i-1;t>=0;t--) //十六进制分两种情况数字和字母

{if(a[t]>='0'&&a[t]<='9')

{int che=(int)pow(16,j);

sum=sum+(a[t]-48)*che;j++;}

if(a[t]>='a'&&a[t]<='f')//字母为小写时

{int che=(int)pow(16,j);

sum=sum+(a[t]-87)*che;j++;}

if(a[t]>='A'&&a[t]<='F')//字母为大写时

{int che=(int)pow(16,j);

sum=sum+(a[t]-55)*che;j++;}

}

cout<

}

详细代码见附录jinzhizh.cpp & jinzhizh.h

第三章功能调试及分析讨论3.1. 主界面

图3-1 主界面

3.2. 基本运算界面

图3-2 基本运算界面

3.2.1加法运算

图3-2-1 加法运算窗口

3.2.2取余运算

图3-2-2 取余运算窗口

3.2.3开方根运算

3-2-3 开方运算窗口

(其他运算截图略,见程序)

3.3. 三角函数运算界面

3.3.1 sin三角函数运算

图3-3-1 sin三角函数运算窗口3.3.2 tan三角函数运算

图3-3-2 tan三角函数运算窗口(其他运算截图略,见程序)

3.4. 进制转换运算界面

3.4.1 二进制转十进制

图3-4-1 二进制转十进制窗口3.4.2 二进制转十六进制

图3-4-2 二进制转十六进制窗口3.4.3 十六进制转八进制

图3-4-3 十六进制转八进制窗口(其他转换截图略,见程序)

第四章工作总结

通过这次课程设计,我锻炼了自己的动手能力,巩固了对面向对象程序设计概念的理解和C++的运用,初步掌握了C++开发应用程序的基本方法,对C++的编译环境更了解了,提高了自己综合运用所学知识的能力。

我一直都相信只有理论与实际相结合才能把知识学好,现在更我让我坚信了这一点。通过这次课程设计使我对C++的编程更感兴趣了,也提高了自己的实际动手能力和独立思考的能力,也使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。其中对C++中对象、一些循环语句、排错等知识有了进一步的理解与应用,相信会对今后的学习工作生活有非常重要的影响。

经过大约一个星期的设计,计算器基本完毕。在本次课程设计中困难遇到不少,比如如何对输入的一个字符数组中的单个字符进行整型运算、如何能循环菜单、如何倒叙输出等。由于设计时间较短,所以该计算器还有很多不尽如人意的地方,比如功能不够完善、函数不够完整等多方面问题。在这次系统开发的过程中,我深深体会到了做一个系统,首先要进行需求分析的重要性,也了解到了制作一个软件的不易。

姓名:鲍琴君

学号: B08060224

日期:2010-12-31

第五章参考文献

第五章参考文献

[1] 王健南. 基于VC++的小型计算器程序设计[J]. 农业网络信息, 2009, (12)

[2] 李伟民, 杨琳. 用C#开发计算器的技术分析[J]. 电脑知识与技术, 2009, (28)

[3] 姜萍,蒋立平,谭雪琴. 正弦函数计算器的设计与实现[J]. 现代电子技术, 2007, (18)

附录(详细代码):

#include "iostream"

#include "jiben.h"

#include"sanjiao.h"

#include"zhujm.h"

#include"jinzhizh.h"

using namespace std;

// .h文件为各个类,包含各函数的声明

void main()//主函数

{

zhujm m;//创建一个对象

m.fn3();//调用主菜单界面函数

}

// zhujm.h: interface for the zhujm class.

class zhujm

{

public:

zhujm();

virtual ~zhujm();

void show();

void fn3();

};

#include "zhujm.h"

#include "jiben.h"

#include "sanjiao.h"

#include "iostream.h"

#include "jinzhizh.h"

#include "windows.h"

zhujm::show()//主界面显示函数

{

cout<<" 主界面"<

cout<<"

***************************************************"<

cout<<" * 1.基本运算*"<

cout<<" * 2.三角函数运算*"<

cout<<" * 3.进制转换运算*"<

cout<<" * 0.退出*"<

cout<<"

***************************************************"<

cout<<" 请输入菜单项(0-3):";

}

void zhujm::fn3()//调用函数实现主界面

{ int flag=1;

while (flag==1)

{show();

int ch;

cin>>ch;

switch(ch){

case 1:{jiben a;system("cls"); //调用基本运算菜单显示函数

a.fn1();break;

}

case 2:{sanjiao b;system("cls"); //调用三角函数菜单显示函数

b.fn2();break;}

case 3:{jinzhizh c;system("cls"); //调用进制转换菜单显示函数

c.fn4();break;}

case 0:{flag=0;break;} //退出程序

default:cout<<"--------请重新输入---------"<

}

}

}

// jiben.h: interface for the jiben class.

class jiben

{

public:

//jiben();

virtual ~jiben();

void shuru(double &Number1,double &Number2);

void show();

void fn1();

void Add(double Number1,double Number2);

void Sub(double Number1,double Number2);

void Multiply(double Number1,double Number2);

void Remove(double Number1,double Number2);

void quyu(double Number1,double Number2);

void Pingf();

void Root() ;

};

// sanjiao.h: interface for the sanjiao class.

class sanjiao

{

public:

sanjiao();

virtual ~sanjiao();

void shuru(double &x);

void Sin(double x);

void Cos(double x);

void Tan(double x);

void Cot(double x);

void fn2();

void show();

};

#include "sanjiao.h"

#include "math.h"

#include"iostream.h"

#include "windows.h"

void sanjiao::show()//三角函数菜单显示函数

{

cout<<" 三角函数菜单"<

}

void sanjiao::shuru(double &x)//输入函数

{

cout<<"please input a number:"<

cin>>x;

}

void sanjiao::Sin(double x) //正弦函数

{

cout<<"sin("<

}

void sanjiao::Cos(double x)//余弦函数

{

cout<<"cos("<

}

void sanjiao::Tan(double x)//正切函数

{

cout<<"tan("<

}

void sanjiao::Cot(double x)//余切函数

{

cout<<"cot("<

}

void sanjiao::fn2()//调用函数实现菜单选择

{ int flag=1;

while (flag==1)

{

show();

double x;

int ch;

cin>>ch;

switch(ch){

case 1:shuru(x);

Sin(x);system("pause");system("cls");break;//调用正弦函数case 2:shuru(x);

Cos(x) ;system("pause");system("cls");break;//调用余弦函数case 3:shuru(x);

Tan(x);system("pause");system("cls");break;//调用正切函数case 4:shuru(x);

Cot(x);system("pause");system("cls");break;//调用余切函数case 0:flag=0;system("cls");break;

default:cout<<"--------请重新输入--------"<

}

}

}

// jinzhizh.h: interface for the jinzhizh class.

class jinzhizh

{

public:

jinzhizh();

virtual ~jinzhizh();

void show();

void shuru(int &x);

void zh2(int x);

void zh8(int x);

void zh16(int x);

void fn4();

void zh10();

void zh8_10();

void zh16_10();

void zh2_16();

void zh2_8();

void zh16_8();

void zh8_16();

};

#include "jinzhizh.h"

#include "iostream.h"

#include "windows.h"

#include "math.h"

#include "string.h"

void jinzhizh::shuru(int &x) ////////////////////////////输入数据{

cout<<"请输入一个整数"<

cin>>x;

}

///////////////////////十进制转二进制,也可直接调用函数void jinzhizh::zh2(int x)

{ int s[16];int y=x;

for(int i=0;i<16;i++)//转换成二进制

{ s[i]=x%2;

x=x/2;

}

int count=0;//设count记次数

for(i=15;i>=0;i--)//倒叙输出清掉前面没用的0

{

if(s[i]!=0&&count==0)//只循环第一次s[i]=1

{ count++;

cout<

for(int t=i;t>=0;t--)

cout<

}

cout<

}

////////////////十进制转八进制,也可直接调用oct

void jinzhizh::zh8(int x)

{

相关主题
文本预览
相关文档 最新文档