面向对象程序设计计算器
- 格式:doc
- 大小:370.50 KB
- 文档页数:20
《⾯向对象程序设计》课程设计教学⼤纲设计《⾯向对象程序设计》课程设计教学⼤纲适⽤专业:计算机科学与技术课程周数:2周⼀、⼤纲说明本⼤纲根据计算机科学与技术专业⼈才培养⽅案制订。
(⼀)课程设计性质课程设计是学⽣对课程所学知识的综合运⽤,它与课堂听讲、上机实验、课外练习、⾃学研究相辅相成,构成⼀个完整的课程教学体系。
(⼆)主要先修课程和后续课程1.先修课程:《C语⾔程序设计》2.后续课程:《Java程序设计》、《软件⼯程》⼆、课程设计⽬的及基本要求本课程全⾯系统的学习⾯向对象程序设计的基本概念,基本语法和编程⽅法。
正确理解掌握C++⾯向对象程序设计的基本特性:类,对象,继承与派⽣,多态,虚函数,模板,流类库等。
遵循软件过程的各个环节进⾏系统分析、设计、实现、集成、测试,并相应给出软件规格说明书等制品,了解当前常⽤的软件开发⼯具(Visual C++),要求熟练掌握基于Win32 Console Application的程序设计,培养解决实际问题的能⼒。
三、课程设计容及安排1、有理数运算问题描述:有理数是⼀个可以化为⼀个分数的数,例如2/3,533/920,-12/49都是有理数,⽽就为⽆理数。
在C++中,并没有预先定义有理数,需要时可以定义⼀个有理数类,将有理数的分⼦和分母分别存放在两个整型变量中。
对有理数的各种操作都可以⽤重载运算符来实现。
基本要求:定义并实现⼀个有理数类,通过重载运算符+、-、*、/对有理数进⾏算术运算,通过重载运算符==实现判定两个有理数是否相等。
写⼀个优化函数,它的作⽤是使有理数约去公分母,也即是使保存的有理数分⼦和分母之间没有公约数(除去1以外)。
此外,还要定义⼀个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。
测试数据:在应⽤程序中,创建若⼲有理数对象,通过带参数的构造函数使得各有理数对象值各不相同,然后分别进⾏各类运算,输出运算结果,检验其正确性。
实现提⽰:设有两个有理数a/b和c/d,则有:(1)有理数相加分⼦=a*d+b*c;分母=b*d(2)有理数相减分⼦=a*d-b*c;分母=b*d(3)有理数相乘分⼦=a*c;分母=b*d(4)有理数相除分⼦=a*d;分母=b*c优化函数在创建有理数对象时应执⾏,在执⾏其它各种运算之后也需执⾏它,这样可保证所存储的有理数随时都是最优的。
南京信息工程大学《面向对象程序设计》课程设计实验报告课程名:面向对象程序设计专业:网络工程班级:2班作者:张煜荻、吴辉煌、张一东日期:2011年5~6月实验内容题目:设计一个复数计算器。
要求:1)所设计的复数计算器可以进行+、-、×运算。
2)设计输入重载函数,要求能接收从键盘输入a+b i形式的复数,在程序中可以识别出实部、虚部并进行赋值。
3)设计算器测试程序,对加减法进行测试,要求在两位数以内,对乘法进行测试,乘法要求为一位数的运算。
小组分工程序源码#include<iostream>#include<cmath>#define EPS 1e-5//定义精度为10^-5using namespace std;namespace NameCalculator //定义空间NameCalculator{class Calculator //定义Calculator类{private:double Real,Image; //私有成员:实部Real、虚部Image public:Calculator(double real=0,double image=0) //构造函数{Real=real;Image=image;}int operator==(Calculator &com); //等于重载Calculator operator+(Calculator &com); //加法重载Calculator operator-(Calculator &com); //减法重载Calculator operator*(Calculator &com); //乘法重载Calculator operator*=(Calculator &com);//乘法赋值重载friend istream & operator>>(istream &is,Calculator &com); //输入重载friend ostream & operator<<(ostream &os,Calculator &com); //输出重载};int Calculator::operator==(Calculator &com) //重载等于{if(Real==com.Real && Image==com.Image)return 1;elsereturn 0;}Calculator Calculator::operator+(Calculator &com) //加法重载{Calculator sum;sum.Real=Real+com.Real;sum.Image=Image+com.Image;return sum;}Calculator Calculator::operator-(Calculator &com) //减法重载{Calculator sub;sub.Real=Real-com.Real;sub.Image=Image-com.Image;return sub;}Calculator Calculator::operator*(Calculator &com) //乘法重载{Calculator multi;multi.Real=Real*com.Real-Image*com.Image;multi.Image=Real*com.Image+Image*com.Real;return multi;}Calculator Calculator::operator*=(Calculator &com) //重载乘法赋值{double nReal=Real*com.Real-Image*com.Image;double nImage=Real*com.Image+Image*com.Real;Real=nReal;Image=nImage;return *this;}istream & operator>>(istream &is,Calculator &com) //重载输入{cout<<"请输入复数:";char s[20];is>>s; //用字符串形式接受输入的复数int len=strlen(s);int n=0,sign=1;com.Image=com.Real=0;for(int k=0;k<len;k++){if((s[k]<'0'||s[k]>'9')&&(s[k]!='+'&&s[k]!='-'&&s[k]!='i')){cout<<"输入错误"<<endl;return is;}}for(k=0;k<len;) //检查输入字符串{if(n!=0 &&(s[k]=='-'||s[k]=='+')) //字符是否是符号{com.Real=sign*n;n=0; //将原n*sign值赋给实部,将n清零,准备接受虚部的值}if(s[k]=='-') //字符为负号{sign=-1;k++;}if(s[k]=='+') //字符为正号{sign=1;k++;}if(s[k]=='i') //字符为'i'{if(k!=len-1) //判断字符'i'是否为最后一个字符cout<<"error\n";elsecom.Image=sign*n; //复数对象接受完成,用sign*n为虚部赋值break;}while(s[k]>='0'&&s[k]<='9') //字符在0~9之间,则将字符转换成数值{n=n*10+s[k]-'0';k++;}}if(s[len-1]!='i'&&n!=0) //如果最后一个字符不是'i',则没有虚部{com.Real=n*sign;}return is;}ostream & operator<<(ostream &os,Calculator &com) //重载输出{if(fabs(com.Image)<EPS) //如果虚部为0os<<com.Real; //只输出实部else if((fabs(com.Real)<EPS)) //如果实部为0os<<com.Image<<"i"; //只输出虚部else if(com.Image>0)os<<com.Real<<"+"<<com.Image<<"i";elseos<<com.Real<<com.Image<<"i"; //虚部为正return os;}void Add() //加法运算函数{Calculator num1,num2,sum,zero(0,0);cout<<"加法计算\n"<<"最少输入两个复数,并且以0结束\n";cout<<"第1个复数:";cin>>num1;cout<<"第2个复数:";cin>>num2;sum=num1+num2;cout<<"第3个复数:";cin>>num1;int i=4;while(!(num1==zero)){sum=sum+num1;cout<<"第"<<i<<"个复数:";cin>>num1;i++;}cout<<"加法结果是:"<<sum<<endl;cout<<"请按回车键继续\n";cout.flush();cin.get();cin.get();}void Sub() //减法运算函数{Calculator num1,num2,sub,zero(0,0);cout<<"最少输入两个复数,并且以0结束\n";cout<<"第1个复数:";cout<<"第2个复数:";cin>>num2;sub=num1-num2;cout<<"第3个复数:";cin>>num1;int i=4;while(!(num1==zero)){sub=sub-num1;cout<<"第"<<i<<"个复数:";cin>>num1;i++;}cout<<"减法结果是:"<<sub<<endl;cout<<"请按回车键继续\n";cout.flush();cin.get();cin.get();}void Mul() //乘法运算函数{Calculator num1,num2,mul,zero(0,0);cout<<"乘法计算\n"<<"最少输入两个复数,并且以零结束\n";cout<<"第1个复数:";cin>>num1;cout<<"第2个复数:";cin>>num2;mul=num1*num2;cout<<"第3个复数:";cin>>num1;int i=4;while(!(num1==zero)){mul*=num1;cout<<"第"<<i<<"个复数:";cin>>num1;i++;}cout<<"乘法结果是:"<<mul<<endl;cout<<"请按回车键继续\n";cout.flush();cin.get();}}using namespace NameCalculator;int main() //主函数{char Choise[20];do{system("cls"); //清屏cout<<"1:复数加法\n";cout<<"2:复数减法\n";cout<<"3:复数乘法\n";cout<<"0:退出程序\n\n";cout<<"请选择:";cin>>Choise;if(strcmp(Choise,"1")==0)Add();else if(strcmp(Choise,"2")==0)Sub();else if(strcmp(Choise,"3")==0)Mul();else if(strcmp(Choise,"0")==0){break;}else{cout<<"\n输入错误,按回车键继续\n";cin.get();cin.get();}}while((strcmp(Choise,"0")));return 0;}测试结果实验总结本实验的难点在于:如何让程序识别输入的“复数字符串”。
c面向对象程序设计M F C简单计算器实验报告Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#计算机与信息工程学院《程序设计基础》课程设计报告题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东学生学号:专业班级:电子信息工程(1)班指导教师:高攀1 课程设计的题目编写一个能实现简单功能的计算器2 题目要求1. 有一个计算器图形。
2. 能实现加、减、乘、除及乘方的运算。
3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色例如:输入数字1 时,在计算器图形上的1键变为红色。
4. 屏幕、图形颜色、形状自定3 总体设计总体框架图1 系统框架系统功能说明在VC++中绘制计算器界面,各控件的设置对0~9控件设定相应的ID和其他属性:图2 “1”控件设置对“+、-、*、\”控件设定相应的ID和其他属性:图2 “+”控件设置对其它控件设定相应的ID和其他属性:图3 其它控件设置主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。
拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。
4 程序详细设计系统主调模块图5 程序流程图各模块详细设计建立的变量,控件的命名,对应的消息处理函数对应表double poz; 按钮的处理函数void CCalcDlg::OnPt(){point_flag=TRUE; && buffer[i+1]==0)之前那位}m_Dis=strtod(buffer,NULL);整个大的程序的实现分8个功能,每个功能都通过一个相应的函数来实现.在调试时分别进行调试,使得调试更方便些.在编写各个函数只是按着题目要求的去完成,后来经指导老师指导后,发现了很多自己欠缺的地方,又一次将程序整体进行调试.最后把程序完善了许多。
面向对象方法学画出运算器的UML图及代码生成2009-11-25UML类图运行结果代码Operator.h#ifndef Operator_Im1d666e35m1252921adaemm7e56_H#define Operator_Im1d666e35m1252921adaemm7e56_Hclass Operator{public:///////////////////////////////////////////////////// // public operations///////////////////////////////////////////////////// virtual double getResult() = 0;void setA(double a);void setB(double b);double getA();double getB();private:///////////////////////////////////////////////////// // private attributes///////////////////////////////////////////////////// double NumberA;double NumberB;};#endif// Operator_Im1d666e35m1252921adaemm7e56_H Operator.cpp#include"Operator.h"void Operator::setA(double a){NumberA=a;}void Operator::setB(double b){NumberB=b;}double Operator::getA(){return NumberA;}double Operator::getB(){return NumberB;}Add.h#ifndef Add_Im1d666e35m1252921adaemm7cfe_H#define Add_Im1d666e35m1252921adaemm7cfe_H#include"Operator.h"class Add : public Operator{public:///////////////////////////////////////////////////// // public operations///////////////////////////////////////////////////// double getResult();};#endif// Add_Im1d666e35m1252921adaemm7cfe_HAdd.cpp#include"Add.h"double Add::getResult(){// your code herereturn getA()+getB();}Sub.h#ifndef Sub_Im1d666e35m1252921adaemm7d26_H#define Sub_Im1d666e35m1252921adaemm7d26_H#include"Operator.h"class Sub : public Operator{public:///////////////////////////////////////////////////// // public operations///////////////////////////////////////////////////// double getResult();};#endif// Sub_Im1d666e35m1252921adaemm7d26_HSub.cpp#include"Sub.h"double Sub::getResult(){// your code herereturn getA()-getB();}Mul.h#ifndef Mul_Im1d666e35m1252921adaemm7cd6_H#define Mul_Im1d666e35m1252921adaemm7cd6_H#include"Operator.h"class Mul : public Operator{public:///////////////////////////////////////////////////// // public operations///////////////////////////////////////////////////// double getResult();};#endif// Mul_Im1d666e35m1252921adaemm7cd6_HMul.cpp#include"Mul.h"double Mul::getResult(){// your code herereturn getA()*getB();}Div.h#ifndef Div_Im1d666e35m1252921adaemm7cae_H#define Div_Im1d666e35m1252921adaemm7cae_H#include"Operator.h"class Div : public Operator{public:///////////////////////////////////////////////////// // public operations/////////////////////////////////////////////////////double getResult();};#endif// Div_Im1d666e35m1252921adaemm7cae_HDiv.cpp#include"Div.h"double Div::getResult(){// your code herereturn getA()/getB();}OperatorFactory.h#ifndef OperatorFactory_Im1d666e35m1252921adaemm7b6b_H #define OperatorFactory_Im1d666e35m1252921adaemm7b6b_H#include"Operator.h"class OperatorFactory{public://///////////////////////////////////////////////////// public associations/////////////////////////////////////////////////////////////////////////////////////////////////////////// public operations///////////////////////////////////////////////////// static Operator* creatOperator(char ch);};#endif// OperatorFactory_Im1d666e35m1252921adaemm7b6b_HOperatorFactory.cpp#include"OperatorFactory.h"#include<iostream>#include"Add.h"#include"Sub.h"#include"Mul.h"#include"Div.h"Operator* OperatorFactory::creatOperator(char ch){Operator *oper=NULL;switch (ch){case'+':oper = new Add;break;case'-':oper = new Sub;break;case'*':oper = new Mul;break;case'/':oper = new Div;break;default:break;}return oper;}Client.h#ifndef Client_Im1d666e35m1252921adaemm7add_H#define Client_Im1d666e35m1252921adaemm7add_H#include"OperatorFactory.h"class Client{public:///////////////////////////////////////////////////// // public associations////////////////////////////////////////////////////////////////////////////////////////////////////////// // public operations/////////////////////////////////////////////////////void main();};#endif// Client_Im1d666e35m1252921adaemm7add_HClient.cpp#include"Client.h"#include<iostream>void main(){double A;double B;char c;std::cout<<"请输入第一个操作数:"<<std::endl;std::cin>>A;std::cout<<"请输入第二个操作数:"<<std::endl;std::cin>>B;std::cout<<"请输入一个运算符(+,-,*,/):"<<std::endl;std::cin>>c;Operator *oper;oper = OperatorFactory::creatOperator(c);if(B==0&&c=='/'){std::cout<<"除数不能为!"<<std::endl;return;}if(oper==NULL)std::cout<<"输入运算符出错!"<<std::endl;else{oper->setA(A);oper->setB(B);double result = oper->getResult();std::cout<<"运算结果为:"<<result<<std::endl;}}实验总结这次试验让我对UML方面的知识有了进一步的认识,让我对今后的学习有了很强的信心。
《Python程序设计》习题与答案python教材答案《Python程序设计》习题与答案第一章:Python基础题目1:计算器程序设计答案:代码可以如下所示:```pythondef add(a, b):return a + bdef subtract(a, b):return a - bdef multiply(a, b):return a * bdef divide(a, b):if b == 0:return "Error: Division by zero is not allowed"return a / b```题目2:变量和数据类型答案:Python中的常见数据类型有整型(int)、浮点型(float)、字符串型(str)、布尔型(bool)等。
题目3:条件语句答案:条件语句用于根据不同的条件执行不同的代码块。
常见的条件语句有if语句、if-else语句和if-elif-else语句。
题目4:循环语句答案:循环语句用于多次执行相同或类似的代码块。
常见的循环语句有for循环和while循环。
第二章:函数和模块题目1:函数的定义和调用答案:函数是一段可重复使用的代码块,用于完成特定的任务。
函数的定义可以通过def关键字来实现,而函数的调用则通过函数名和参数完成。
题目2:内置函数答案:Python提供了丰富的内置函数,如print()、len()、input()等。
这些内置函数可以直接使用,无需额外定义。
题目3:模块的导入和使用答案:Python模块是一组相关的函数、类和变量的集合,用于组织、重用和扩展代码。
模块的导入可以使用import语句,然后通过模块名和函数名来调用模块中的内容。
第三章:文件操作题目1:文件的打开和关闭答案:文件操作前需要通过open()函数打开文件,在完成操作后需要使用close()函数关闭文件。
例如:```pythonfile = open("test.txt", "w")# 执行文件操作file.close()```题目2:读取文件内容答案:使用Python的read()函数可以读取整个文件的内容,或者使用readline()函数读取一行内容。
课程设计报告VB课程设计课程设计题目:计算器程序设计姓名:学号:*专业: 电子信息工程班级: :指导教师:摘要VisualBasic 6.0 是一款可视化的,面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发windows 环境下的种类应用程序。
它简单易学,效率高,且功能强大,可以与Windows专业开发工具相媲美。
在VisualBasic环境下,利用事出有因件驱动的编程机制,新颖易用的可视化工具,使用Windows内部的广泛应用程序接口(API)函数,运用动态链接库(DLL),对象的链接与嵌入(OLE),开放式数据连接(ODBC)等技术,可以高效,可以快速地开发Windows环境不功能强大,图形界面丰富的程序。
为了适应信息化时代的需求,各高校对大多数专业都开设了一定的计算机语言课程,有的讲授VisualBasic语言。
VisualBasic以其语法简单,可视化设计,功能强大,为许多学校计算机语言课程的首选语言。
目前国内各出版了大量的VisualBasic语言教程,它们都具有同样的特点:介绍语言的语法等基本知识,再辅助一些简单的示例。
学生通过学习,可能能够考一个不错的成绩,但所掌握的仍然是一些支离破碎的知识,不能将所有的知识融会贯通,遇到具体的程序设计,还是无从下手。
这次我要做的是计算器,通过这样程序设计,我们可以学到好多关于VB语言的使方法,熟悉VisualBasic 6.0的运行环境,快速掌握VB语言!小小的计算器是我们学VB初级语言的最好课程。
目录一功能描述 (4)1.功能 (4)2. 实验目的 (4)二概要设计 (6)1.界面设计 (6)2.代码编辑 (8)三详细设计 (14)四心得体会 (16)五参考文献 (18)一功能描述1.功能可以简单计算加减乘除四则运算,可以简单计算三角函数运算的简易计算器。
2.实验目的这次我要做的是计算器,通过这样程序设计,我们可以学到好多关于VB语言的使方法,熟悉VisualBasic 6.0的运行环境,快速掌握VB语言!小小的计算器是我们学VB初级语言的最好课程。
用C语言设计一个多功能计算器实现功能:1)具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。
依次输入第一个运算数、运算符(+,-,*,/),第二个运算数,然后输出结果。
结果可以作为下一个运算的第一运算数。
按‘C’清屏,按‘X’退出。
例如:输入:2+5输出:72)实现单运算符表达式计算的功能。
输入的操作数可以包含整数或浮点数。
如果遇到错误的表达式,应输出错误提示信息。
输入表达式如下:例如:输入:2+5输出:7目录摘要 (1)第一章引言 (3)1.1 计算器概述 (3)第二章设计任务及要求 (5)2.1 设计任务 (5)2.2 设计要求 (6)第三章计算器硬件设计 (7)3.1 方案说明 (7)3.2 设计单片机主体电路图 (8)第四章软件设计 (9)4.1 模块介绍 (9)4.2 程序流程图 (10)4.3 程序部分 (11)第五章总结 (16)参考文献 (17)摘要:[目录]一、课程设计题目及任务要求二、设计思路三、部分程序介绍四、程序框图五、汇编程序六、参考资料[原文]一、课程设计题目及任务要求请设计十进制加减法计算器。
要求能(不同时)显示3位输入和4位输出。
二、设计思路1、操作显示设备显示设备采用八片七段共阴极LED显示器,共设置16 个键,其中数字键0~9 共十个,接下来依次是加号键、减号键、等于号、清除键。
操作设备是两行八列共16键的简单键盘。
第一行从左至右分别为0、1、2、3、4、5、6、7,第二行分别为8、9、A(+)、B(-)、C(=)、D(清除键)、E (清除键)、F(清除键),“清除键”表示程序初始化,为下次输入准备。
2、程序实现功能(1)十进制加减法计算:输入范围为(1~999),该程序输入两个定点数,每个3位,输出4位;A为加,B为减,C为等于,输出为四位计算结果。
数据输入采用规范化输入,即必须输入3个数才算完成一个运算数的输入,两个运算数之间输入运算符A或者B,输入完成按C显示计算结果;(2)计算机复位功能:DEF均为清零重启,任何时候按下DEF中一个将重新开始;三、部分程序介绍(1)主程序(START)程序开始运行初始化程序,设置输入输出口PA、PB、PC,扫描键盘,输入两个待求数据和运算符,存入寄存器,等待输入等号同时显示第二个数,运行计算程序,并将计算结果分离,输出到显示器;(2)读键子程序(RD_KB)程序分别扫描两行键盘,若有键按下则通过移位的方式计算键码;若无键按下,则将键码缓存设置为10H,判断后进行相应的跳转。
《C++面向对象程序设计》实验报告学院:信息科学与工程学院专业:学号:姓名:一.题目:利用MFC框架编写Windows附件中所示的简易计算器二.功能描述:1.能够实现最基本的加,减,乘,除四则基本运算。
2.界面有清空,退格按钮,方便用户计算使用。
3.此计算器具有开方,取倒数,求对数的高级运算。
三.概要设计:1.Windows消息处理机制通过对教材的阅读,对Windows程序的消息处理机制有个大致的了解。
Windows的程序都是通过消息来传送数据,并且存在异常处理等不需要用户参与的系统消息,用户消息就是鼠标的单击,双击等。
2.界面的设计如图,简易的计算器界面主要使用菜单中相关控件,并合理的布置各个按钮的位置,使得界面让用户看起来整洁简单。
3.框架描述Windows 简易计算器在资源视图画好界面添加控件的同时,通过属性修改名称为各个按钮和编辑框添加不同的函数四则运算+,-,*,/ 1/x,lgx等函数退格和清空键4.建立的变量和控件的命名,对应的消息处理函数命名表ID CAPTION Message Handler IDC_BUTTON0 0 OnButton0()IDC_BUTTON1 1 OnButton1()IDC_BUTTON2 2 OnButton2()IDC_BUTTON3 3 OnButton3()IDC_BUTTON4 4 OnButton4()IDC_BUTTON5 5 OnButton5()IDC_BUTTON6 6 OnButton6()IDC_BUTTON7 7 OnButton7()IDC_BUTTON8 8 OnButton8()IDC_BUTTON9 9 OnButton9()IDC_BUTTON10 . OnButton11()IDC_BUTTON11 = OnButtonequal() IDC_BUTTON12 + OnButtonadd()IDC_BUTTON13 - OnButtoncut()IDC_BUTTON14 * OnButtonmultiply() IDC_BUTTON15 / OnButtonremove() IDC_BUTTON16 1/x OnButton1x()IDC_BUTTON17 lg OnButtonlg()IDC_BUTTON18 sqrt OnButtonsqrt()IDC_BUTTON19 Backspace OnButtonbackspace() IDC_BUTTON20 C(清空) OnButtonclear()5.下图是基本对话框中所有的类四.详细设计:1.新建工程,选择MFC AppWizard[exe],并命名工程的名称为mycalculator2.选择基本对话框3.通过控件添加各种按钮和编辑框(对话框右边的“Controls”控件箱提供了可用于对话框的各种组建,在此次计算器中,基本上只用到上面四个控件,对话框只能通过控件来实现它们的功能,把控件中的数据保存在对话框类的数据成员中,应用程序才能通过这些数据成员获取控件中的数据)4.考虑用户们的习惯,把编辑框的显示的数字属性由靠左改成靠右(选中编辑框,右击选择属性-样式,排列文本改为向左)5.用同样的方法改变按钮的标题,其他按钮同理6.为美观改变对话框的标题为“计算器”7.右击编辑框添加类向导,添加变量m_result,且type为CString//可通过其改变类型和名称8.实现每个按钮的功能,双击按钮,为按钮添加函数,可以改变函数的名称① 0~9和小数点的函数大致类似void CMycalculatorDlg::OnButton1(){// TODO: Add your control notification handler code herem_result +=_T("1");UpdateData(FALSE);}函数_T()可以对字符串进行操作,UpdateData(FALSE)可以把数据传到文本框里面,小数点与数字同样这样处理。
面向对象Windows程序设计选题:计算器、小闹钟、通讯录学号:姓名:院(系):信息工程学院专业:信息完成日期:指导老师:老师题目一:利用MFC框架编写简易计算器一.需求分析即要实现简单计算器的功能,包括加、减、乘、除等运算功能,还要实现数据的输入、输出、计算、显示及程序退出等功能。
二.总体设计1.程序的创建.使用软件Visual C++ 6.0.,首先,新建一个MFC 基于对话框的工程。
点击文件-新建,在工程选项卡里选择MFC AppWizard[exe],给工程命名Jisuan。
点击确定。
创建一个基于对话框的应用程序。
2.界面的设计按如图所示向对话框添加控件,且按如图所示一样排版。
4.为控件添加成员变量和消息处理函数为IDC_FIRNUM 增加一个变量,点Add Variable…,我们为它增加一个 float 型的变量,命名为m_Firnum。
给第二个编辑框增加float变量m_Secnum。
第三个编辑框增加float变量m_Result。
按ctrl+w选择第一个选项卡 Message Maps,从IDs 中选择IDC_JIA,即加这个按钮,从 Messages 中选择 BN_CLICKED,即当被单击的时候,然后点 AddFunction…为其添加函数然后弹出对话框,为函数命名,选择默认即可,点击OK。
同样为-,*,/添加一样的响应函数。
结果如图:三、编程说明与实现添加如下代码:void CJisuanDlg::OnJia(){// TODO: Add your control notification handler code hereUpdateData(true);m_Result=m_Firnum+m_Secnum;UpdateData(false);}void CJisuanDlg::OnJian(){// TODO: Add your control notification handler code hereUpdateData(true);m_Result=m_Firnum-m_Secnum;UpdateData(false);}void CJisuanDlg::OnCheng(){// TODO: Add your control notification handler code hereUpdateData(true);m_Result=m_Firnum*m_Secnum;UpdateData(false);}void CJisuanDlg::OnChu(){// TODO: Add your control notification handler code hereUpdateData(true);m_Result=m_Firnum/m_Secnum;UpdateData(false);}这里有一个UpdateData(Bool)函数。
java面向对象程序设计习题答案Java面向对象程序设计习题答案Java是一种广泛应用于软件开发的编程语言,而面向对象程序设计(Object-Oriented Programming,简称OOP)则是一种常用的编程范式。
在学习Java的过程中,习题是非常重要的一部分,通过解答习题可以帮助我们巩固所学的知识,并提升编程能力。
本文将为大家提供一些Java面向对象程序设计习题的答案,希望能对大家的学习有所帮助。
1. 编写一个Java类,实现一个简单的计算器功能。
该计算器应该具有加、减、乘、除四种基本运算功能,并能够接受用户输入的两个操作数和运算符。
在计算结果后,将结果输出给用户。
```javaimport java.util.Scanner;public class Calculator {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入第一个操作数:");double num1 = scanner.nextDouble();System.out.print("请输入第二个操作数:");double num2 = scanner.nextDouble();System.out.print("请输入运算符(+、-、*、/):"); String operator = scanner.next();double result = 0;switch (operator) {case "+":result = num1 + num2;break;case "-":result = num1 - num2;break;case "*":result = num1 * num2;break;case "/":result = num1 / num2;break;default:System.out.println("无效的运算符!");return;}System.out.println("计算结果为:" + result);}}```2. 编写一个Java类,实现一个简单的学生管理系统。
计算机科学与技术学部面向对象程序课程设计题目计算器学部计算机科学与技术班级计科1103 班指导教师李军姓名王荣、刘湘炎2011年6月16日课程设计任务分配表姓名工作安排组长王荣程序设计组员刘湘炎实验报告书的制作Visual C++的课程设计成绩表姓名学号成绩王荣刘湘炎计算器摘要摘要随着当今社会的发展,越来越多的人开始使用电子商品,新的高考制度也允许使用计算器,而作为一名计算机专业的学生,在使用工具的同时也应该学会制作这类工具。
该系统则是与Windows附件里的计算器相仿的一个计算器。
计算器的产生和发展是建立在电子计算机基础之上的。
硬件方面,自1946年第一台电子计算机诞生以来,计算机技术的发展可谓日新月异,从庞大的只能在实验室里供研究使用的计算机到如今能适应不同环境满足不同需求的各种各样的计算机;运算速度从每秒几千次到每秒几百亿次;处理器从焊有上百万个电子管的大的惊人的电子板到只有指甲大小的集成电路;现在计算机在硬件方面的发展已达到了每三个月更新换代一次的惊人速度。
软件方面,也已从机器语言、汇编语言、高级语言发展到现如今的第四代语言——非结构化、面向对象、可视化的语言。
在这个计算器里面,我们实现了简单的四则运算以及更高功能的科学计算,它的外观简洁明了,使人员能快捷简单的操作。
能准确的得到计算结果,大大减少了数字计算所需要的时间,为人们的生活带来便利。
此系统在Windows XP环境下,使用VC++ 6.0进行编写。
简单计算器包括双目运算和单目运算功能。
双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,对数,开方,阶乘,倒数等运算。
可对其输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。
并且包含清除,退格功能以及有与所有按钮相对应的菜单项。
通过C++课程设计,将学到的面相对象的程序设计思想用到具体的工作和学习中,加深对类与对象的理解,提高学生分析问题,解决问题从而运用所学知识解决实际问题的能力。
关键词:计算器,运算,VC++等。
目录第1章前言 (1)1.1 简介说明 (1)1.1.1 研究目的 (1)1.1.2可行性分析 (1)1.1.3 关于Visual C++ 6.0 (1)1.2 题目要求 01.3 设计思路 0第2章系统功能分析 (2)2.1 系统总体功能分析 (2)2.1.1 部分控件定义 (3)2.1.2 变量的定义 (4)2.1.3 变量的初始化 (4)2.2.1数字键和符号键的核心代码 (4)2.2.2调用科学型、标准计算器的核心代码 (5)2.2.3 退格键的核心代码 (5)2.2.4进制和弧度的核心代码 (6)3.1 程序变量添加 (9)3.1.1 显示变量的添加截图 (9)3.1.2 相关按键的实现截图 (9)3.2 程序运行测试 (10)3.2.1 程序主界面截图 (10)3.2.2数字键和符号键截图 (10)3.2.3科学型计算器截图 (11)3.2.4退格键截图 (11)3.2.5进制和弧度截图 (11)第4章总结 (13)参考文献 (14)第1章前言1.1 简介说明1.1.1 研究目的制作此工具主要有四个目的:1、熟悉掌握基于对话框的程序编写。
2、熟练掌握放置控件及control 工具条的使用。
3、掌握控件摆放的基本方法,熟练掌握Dialog 工具条的使用。
4、熟悉建立对话框步骤。
1.1.2可行性分析伴随着经济全球化,计算机的普及发展,软件行业在社会占着举足轻重的作用。
我们在学校生活中常会遇到一些繁杂的数值运算,我们必须要用到科学计算器,所以便着手开发了这个计算器程序,既紧随科技发展的前沿,又方便了我们的生活,具有一定的现实意义。
1.1.3 关于Visual C++ 6.0Visual C++ 6.0 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT的优秀集成开发环境。
该环境为用户提供了良好的可视化编程环境,程序员可以利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。
Visual C++6.0不仅包括编辑器,还包括许多有用组件,通过这些组件的协同工作,可以在Visual C++6.0集成环境中轻松地完成创建源文件、编辑资源以及对程序的编译、连接和调试等各项工作。
VC++6.0是Windows 95/98、XP或Windows NT下的一个应用程序,本身对软件没有特殊要求。
就是说它对环境的要求与Windows 95/98、Windows NT 的要求是一致的。
VC++6.0系统可以在一张CD盘上,也可以在“Visual Studio (Visual C++、Visual Foxpro)”等产品的第一张CD盘上。
一般都有一个VC的自动安装程序,也可以执行VC++6.0目录下的Setup.exe,在安装包的提示下进行,对初学者可采用“典型安装”方式。
在安装好VC6.0系统后,有时根据需要添加或删除某些部件,可插入CD 盘重新执行Setup.exe安装程序,安装程序会检测当前系统安装VC6.0的组件,用户单击“添加/删除”按钮后,在“安装维护”对话框中选定要与一般的应用软件一样,有以下两种启动方式:(1)通过“开始”按钮,选择“程序”菜单,然后打开“Microsoft Visual C++6.0中文版”子菜单中的“Microsoft Visual C++6.0中文版”程序。
(2)用户也可以使用命令行启动VC,单击“开始”按钮后选择“运行”命令,在“运行”对话框中输入C:\program Files\Microsoft Visual Studio\VC98\VC6.exe(按默认盘符和路径安装即可)。
1.2 题目要求所编写的计算器是基于对话框的程序,能够进行加减乘除的运算,开方,立方,三角函数,反三角函数等功能。
仿照Windows 自带的计算器进行编写。
1.3 设计思路<1> 首先考虑所有按键分为两类,即数字键和符号类,0、1、2、3、4、5、6、7、8、9为数字键,其余均为符号键,如’+’、’-’、’C’等等。
数字在计算的过程中最多需要保存两个,所以定义了两个double型变量m_first和m_second 来进行存储。
符号用一个CString型变量m_operator来存储。
<2> 其次,考虑在计算的过程中,m_first和m_second的存储状态有三种,一种是m_first==0&&m_second==0也就是程序刚开始运行还没有开始录入数字的状态;第二种是m_first!=0&&m_second==0也就是第一个数字已经录入,符号也已经录入的时候,直接将其值赋给m_first,并通过UpdateDisplay()函数输出;第三种是m_first!=0&&m_second!=0,其表示可以通过m_operator的计算把两个数合并为一个数。
<3>考虑到所有的计算结果必须在按下’=’按钮后都会将其数据进行计算,并显示到编辑框,因此,将符号判断放在’=’按钮的函数体内,当其按下时逐一判计算器第1章前言断此数据应当进行何种操作。
<4> 考虑到数字全部使用的都是double型,键入的数字必须通过一定的处理达到其计算的效果,特别是当其数据有小数和整数处理时,其差异性大,所以分别用m_coff来判断小数和整数。
<5> 考虑到科学型计算器的使用,和科学型计算器与标准型计算器之间的切换,在其菜单中通过菜单的调用间接调用其科学型计算器对话框,所以使用了非模式对话框的调用。
第2章系统功能分析2.1 系统总体功能分析此程序采用VC++编写,是一个基于对话框的应用程序,当用户在对话框点击相应按钮时,先执行输出按钮对应字符串,用户可以在对话框上选择相应地科学计算操作按钮,通过程序内相关代码完成相应地科学计算功能。
它的设计按软件工程的方法进行,系统具有良好的界面,必要的交互信息,简约的美观效果。
使用人员能快捷简单地进行操作,,即可单机按钮进行操作,也可直接通过键盘输入。
即时准确地获取所需要的计算结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定帮助。
其具体的功能有:(1)包含的功能有:加、减、乘、除运算,开方、求倒数等功能。
(2)计算器上数字0-9为一个控件数组,加、减、乘、除为一个控件数组,其余的为单一控件。
(3)给对话框添加菜单。
(4)输入的原始数据、运算的中间数据和结果都显示在窗口顶部的同一个标签中。
(5)实现对话框的扩展功能。
(6)计算功能基本上是用系统内部函数。
(7)程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点以0开头等不正常现象。
(8)“C”按钮可以清除所有已输出的数据从头计算。
2.1.1 部分控件定义如表2.1.1序号ID CAPTION Message Handler1 IDC_0~9 0~9 On0~92 IDC_ADD + OnAdd3 IDC_SIGN +/- OnSign4 IDC_POINT . OnPoint5 IDC_3Equal = On3Equal6 IDC_Daoshu x/1 OnDaoshu7 IDC_MINUS - OnMinus8 IDC_QUYU % OnQuyu9 IDC_MULTIPLY * OnMultiply10 IDC_SQRT sqrt OnSqrt11 IDC_DIVID / OnDivid12 IDC_M_ M_ OnM_13 IDC_MADD M+ OnMAdd14 IDC_MS MS OnMs15 IDC_MR MR OnMr16 IDC_MC MC OnMc17 IDC_CE CE OnCe18 IDC_C C OnC19 IDC_BACKSPACE <- OnBackspace20 IDC_Ln ln OnLn21 IDC_Log Log OnLog22 IDC_Sin sin OnSin23 IDC_Cos cos OnCos24 IDC_Tan tan OnTan26 IDC_ Jiecheng n! OnJiecheng27 IDC_Lifang x^3 OnLifang28 IDC_Pingfang x^2 OnPingfang29 IDC_MI x^y OnMi30 IDC_Exp exp OnExp31 IDC_3Equal = On3Equal2.1.2 变量的定义double m_coff;//保存小数点的位置double m_first;//保存计算过程中的前一个数字double m_second;//保存计算过程中的第二个数字CString m_operator;//记录当前的计算符号CString m_display;//保存编辑框上需要显示的数字void UpdateDisplay(double lval);//将需要输出的数据格式化处理2.1.3 变量的初始化m_second=0.0;m_coff=1.0;m m_first=0.0;_operator="+";m_display = _T("");2.2 程序核心代码2.2.1数字键和符号键的核心代码void CSecondDlg::Num(int n){if(m_coff==1.0)m_second=m_second*10+n;else{m_second=m_second+m_coff*n;m_coff*=0.1;}UpdateDisplay(m_second);}void CjsqrDlg::On0() //数字0的处理{if( m_coff == 1.0)// 作为整数输入m_second = m_second*10 + 0.0;else //作为小数输入{m_second = m_second +0.0*m_coff;m_coff *= 0.1;}UpdateDisplay(m_second);//更新编辑框6}2.2.2调用科学型、标准计算器的核心代码void CJsqDlg::OnScience() //调用科学型计算器{Ckx *pDlg2=new Ckx;pDlg2->Create(IDD_JSQ_DIALOG1);pDlg2->ShowWindow(SW_SHOW);// TODO: Add your command handler code here}void CJsqDlg::OnNormal() //调用标准型计算器{CJsqDlg *pDlg=new CJsqDlg;pDlg->Create(IDD_JSQ_DIALOG);pDlg->ShowWindow(SW_SHOW);// TODO: Add your command handler code here}2.2.3 退格键的核心代码void CjsqDlg::OnBackspace() //退格键的实现{char buffer[15];if(m_second-(int)m_second==0) //如果是整数,则以除以10的方式退格m_second=(int)m_second/10;else //小数方式的退格{*gcvt(m_second,sizeof(m_second),buffer); //将输入的浮点数转换为字符串for(int i=0;i<15;i++)if(buffer[i]==0){6buffer[i-1]=0;m_second=strtod(buffer,NULL); //将字符串转换回为浮点数break;}}UpdateDisplay(m_second);m_coff=1.0;}2.2.4进制和弧度的核心代码void Ckx::Onbajinzhi() //八进制实现代码{char string[8]={'0','1','2','3','4','5','6','7'};char dis[20]=" ",temp[20];for(int i=0;;i++){if((int)m_second!=0){dis[i]=string[(int)m_second%8];m_second=m_second/8;}else break;}dis[i]='\0';for(int k=0,j=i-1;j>=0;j--)temp[k++]=dis[j];temp[k]='\0';m_display.Format(_T("%s"),temp);int m=m_display.GetLength();while(m_display.GetAt(m-1)=='\0'){m_display.Delete(m-1);m--;}UpdateData(false);// TODO: Add your control notification handler code here}void Ckx::Onjiaodu() //角度实现代码{HUDU=0;// TODO: Add your control notification handler code here }void Ckx::Onfudu() //弧度实现代码{HUDU=1;// TODO: Add your control notification handler code here}void Ckx::Onpi() //∏的实现代码{m_second=3.1415926535897932384626433832795;UpdateDisplay(m_second);// TODO: Add your control notification handler code here}void Ckx::Onsin() //sin的实现代码{if(HUDU==1)m_first=sin(m_second);elsem_first=sin(m_second*(pi/180));UpdateDisplay(m_first);m_second=0.0;// TODO: Add your control notification handler code here }第3章系统测试3.1 程序变量添加3.1.1 显示变量的添加截图3.1.3.1.2 相关按键的实现截图图3.1.23.2 程序运行测试3.2.1 程序主界面截图图3.2.13.2.2数字键和符号键截图当用户按下数字键和符号键时显示如下界面:图3.1.23.2.3科学型计算器截图当用户选择科学型计算器时显示如下界面:图3.2.23.2.4退格键截图当用户按下退格键前后显示界面:图3.2.4.1 图3.2.4.2 3.2.5进制和弧度截图当用户选择相应的进制或者弧度之间的转换时显示如下界面:图3.2.5.1图3.2.5.2计算器第4章总结第4章总结经过多番测试,得出结论为设计的计算器能够完成功能描述内容中的全部功能。