模拟计算器系统_第1页
模拟计算器系统_第2页
模拟计算器系统_第3页
模拟计算器系统_第4页
模拟计算器系统_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模拟计算器系统说明书重庆工商大学派斯学院计算机科学系09计本一班学号2009305116张黄江2010/6/27模拟计算器系统说明书重庆工商大学派斯学院计算机科学系09计本一班学号2009305116张黄江2010/6/27目录-3-3-3-3-3-5-6-6-7-7-7-715【设计题目】【程序简介】【主要功能】【主要特点】【异常处理】【设计方法】【测试方法】【创新介绍】【遗留问题】【自我评价】【附源代码】【技术统计】模拟计算器系统一说明书【设计题目】分数计算器【程序简介】该程序可以完成分数的"+、一、X、/"运算,也可以完成对整数及实数的"+、-、*、/"运算,是一个比较完善的模拟计算器。卜面就从功能及特点等方面做详细介绍:【主要功能】1、支持多次计算。2、支持整数、小数及分数。3、支持文件记录。4、支持直接查看(或删除)记录。5、记录时间信息。6、具有一定的异常处理能力【主要特点】1、界面友好,加入了载入效果和退出百分比效果;有欢迎界面;层次清晰,只有一个主菜单。有开发者信息;如下图所示:主菜单分为:1.实数2.分数3.看记录4.退出程序。1为计算实数,当然也包含整数类型2为计算分数类型数据3为查看曾经计算过的记录,包含上次退出时保存到文件的记录4为结束该程序。简单明了,让使用者看了一目了然。・E:镭+W。必课程设计、张莓BD弟四\计算器,见b[口|回系统载入中……皿pr

2E:\Study\C++Work、课程琴h孳虽匡战煎淄g■■些1▲模拟计算器系统—1<c>AllRight张黄江E-mail:xaigb(?163.comuersion2010build欢迎使用!主菜单:输入」2、《1一「实数2-分数3-看记录4-退出程序3、4选择:卜2、时间记录。每一次计算结果都有时间提示,并且文件记录里还加入了日期。计算结果的显示做了优化,使使用者看起来清晰,方便。3.计算次数统计。程序结束的时候提示本次计算共计算多少次。■E:\Study\C++Wci「kV果程设计\张黄江\。初曜\5十算器旧烂□回共计算■己录保存在“计算器操作记录J煦〃中谢谢使用按“回车键”退出<1「「「1►>□T"4.文件记录。将记录保存到文件,以便日后查看。0分数类,h2KBCHeaderfile2010/6/247:34通计算器-副本.cpp6KBC++Sourcefile2010/6/2714:36叵|计算器,cpp2KBC++Sourcefile2010/6/2714:50□计算浑作1KB丈本文档2010/6/27IS:575KBCHeaderfile2010/6/2718:12

【异常处理】1.如果被除数为0,则要求重新输入。如下图:计算实数时,被除数为0,这是非法的,则重新输入。2.如果分母为0,则重新输入。如下图:分数123/0的分母为0,这是非法的,则重新输入。3.如果操作符有误,则重新输入。如下图:输入1h5,“h”不是“+”、“一”、"X”、"/”的一种,所以无法计算,则重新输入。.—.一4.如果输入数字选择时,后面误输入了多个字符,系统将抛弃后面的字符,以防止系统进入死循环。\如下图:输入的是31aaa,显然不止一个字符,但第一个是“3”,系统将默认为用户选择“3.看记录”,程序将记录显示到屏幕上,如第二张图所示。

E:\Study\C++W。E:\Study\C++W。「k\3果程设计燃黄江\DebugVi十算器旧好口|回■如下图:要求输入1、2、3、4,但却输入了字母“y”,系统会重新显示欢迎界面,并提示重新选择。【设计方法】对分数有一个类来封装,对一般的功能使用函数进行模块化处理。【测试方法】用不合法的数字进行测试。包括错误的操作方法。测试结果参见【异常处理】【创新介绍】1、循环计算计算完第一次后,还可以计算,直到在主菜单中选择“4.退出程序”才结束计算。2、文件记录保存在磁盘上,日后可以调出记录查看,文件格式为“.log”,可以用记事本打开查看。3、计算记录密码保护如果要删除计算记录,则要求输入密码,防止恶意删除。改密码为012。4、时间记录窗口中记录了每一次计算的时间,方便使用者查找记录。并且文件记录里加入了日期,使用者可以方便的查找到确定日期的计算记录。5、载入与退出效果载入和退出时加入百分比显示进度,给人一种真正的系统的感觉。6、清屏当计算多了,屏幕上显示的内容就很杂,这里用到了一个清屏函数,使屏幕显得干净。7、延迟退出程序当手动打开exe文件进行计算,到结束程序时,会等到使用者敲下回车确认退出,这样做的目的是给使用者留出时间看退出时的计算统计信息。【遗留问题】要求输入数字进行计算时,如果输入字符,就会进入死循环,原因就是用整型变量读取字符型变量,导致整型变量无法读进去,它的值就是一个随机数。未解决。【自我评价】该程序达到了按面向对象程序设计思想对问题进行抽象的目的,且程序能够正确运行。【源代码】该程序分为3个文件:“计算器.cpp”、“计算器函数.h”和“分数类.h”。〃计算器.cpp#include"计算器函数.h"intmain(){intn=0;〃统计计算次数char*temp=newchar[];//字符数组,屏蔽输入过多字符welcome();〃欢迎界面〃功能实现部分while(1)//循环计算{if(n!=0)system("cls");for(inti=0;i<37;i++)〃在屏幕上输出"----"cout<<"----";cout<<"\n主菜单:1.实数2.分数3.看记录4.退出程序\n"<<"输入1、2、3、4选择:";cin>>temp;//选择类型getchar();〃以下为整个程序的核心部分,以一个多分枝语句为主体switch(*temp){case'1'://浮点型数据n=shishu(n);//参数n为统计计算次数break;case'2'://数据分数型n=fenshu(n);break;case'3'://查看记录view();break;case'4'://退出程序goout(n);//调用程序结束函数default://缺省cout<<"你的选择无效。";welcome();break;}}return0;//返回给操作系统}//计算器.cpp结束//计算器函数.h#include<iostream>#include<iomanip>#include<fstream>//文件系统#include<windows.h>#include"分数类.h"usingnamespacestd;〃文件操作ofstreamoutf("计算器操作记录.log",ios_base::app);//时间操作,内联函数inlinetimeout(intx)//x有两个参数:1,2{SYSTEMTIMEtime;GetLocalTime(&time);if(x==1)〃到显示器{cout.fill('0');cout<<"计算于:"<<setw(2)<<time.wHour<<':'<<setw(2)<<time.wMinute<<':'<<setw(2)<<time.wSecond<<'\n';cout.fill('');}elseif(x==2)〃到文件{outf<<time.wYear<<"年"<<setw(2)<<time.wMonth<<"月"<<setw(2)<<time.wDay<<"日"<<setw(2)<<time.wHour<<':'<<setw(2)<<time.wMinute<<':'<<setw(2)<<time.wSecond<<"";}}//显示欢迎界面voidwelcome(){〃制作载入效果for(inti=0;i<=10;i++){cout<<"\n\n\n\t\t\t系统载入中……"<<i<<"0%";if(i==100)Sleep(1000);//暂停1000毫秒system("cls");//刷新屏幕}cout<<"载入成功!!!\n";system("cls");cout<<endl;cout<<"\t|1"<<endl;cout<<"\t|模拟计算器系统I"<<endl;cout<<"\t|1"<<endl;cout<<"\t|(c)AllRight张黄江|"<<endl;cout<<"\t|E-mail:xaigb@163.com|"<<endl;cout<<"\t|version2010build|"<<endl;cout<<"\t11"<<endl<<"欢迎使用!"<<endl;}//强制退出程序的函数inlinegoout(intn){system("cls");for(inti=0;i<=6;i++){cout<<"\n\n\n\t\t\t系统退出中……"<<15*i<<"%”;if(i==100)Sleep(500);system("cls");}cout<<"\n\n共计算了"<<n<<"次,记录保存在“计算器操作记录.log”中\n"<<"\n谢谢使用\n\t按“回车键”确认退出";cin.get();//延迟退出exit(0);〃程序结束函数}〃模板函数template<classT>Tcompute(Ta,charp,Tb,bool&pr,int&n){n++;〃计算次数switch(p){case'+':returna+b;case'-':returna-b;case'*':returna*b;case'/':returna/b;default:cout<<"运算符错误!!!请检查输入是否有误?\n";>pr=0;//pr置零,输出语句关闭break;}returna;}〃计算实数intshishu(intn){charp;^^//存放+,-,*,/boolpr=1;〃输出结果开关doublea,b,s;system("cls");//刷新屏幕do{cout<<"实数,输入式子(示例:a+b):";cin>>a>>p>>b;cin.get();if(p=='/'&&b==0)cout<<"被除数不能为0,";

while(p=='/'&&b==0);〃若分母为0,则重新输入s=compute(a,p,b,pr,n);〃计算pr为输出开关n为计算次数〃个性化显示if(pr==1){cout<<"结果为:"<<"r*************n\n"〃左对齐〃设置位宽//恢复对齐方式的默认值<<setiosflags(ios_base::left)<<"\t|"<<setw(13)<<s<<"〃左对齐〃设置位宽//恢复对齐方式的默认值timeout(1);cout<<"\tl*************j\n";〃输出到文件:计算器操作记录.logtimeout(2);outf<<a<<p<<b<<'='<<s<<endl;}cout<<"即将返回主菜单……";Sleep(3500);system("cls");returnn;}〃计算分数intfenshu(intn){charp;〃存放+,-,*,/boolpr=1;〃输出结果开关FenShuA,B,C;intc,d,e,f;char*ptemp=newchar[2];//存放分数线system("cls");do{cout<<"分数,输入式子(示例:a/b+c/d):";cin>>c>>*ptemp>>d>>p>>e>>*(ptemp+1)>>f;cin.get();if(d==0||f==0)cout<<"分母不能为0,";}while(d==0||f==0);A.Setxy(c,d);B.Setxy(e,f);C=compute(A,p,B,pr,n);//计算if(pr==1){//个性化显示cout<<"结果为:"<<"r********n\n"<<"\t|";if(C.Gety()==1)//如果分母为1,则只输出分子cout<<setiosflags(ios_base::left)<<setw(8)<<C.Getx();elsecout<<setw(3)<<C.Getx()<<'/'<<setiosflags(ios_base::left)<<setw(4)<<C.Gety()<<resetiosflags(ios_base::left);cout<<resetiosflags(ios_base::left)<<"|\t";timeout(l);cout<<"\t」********」\n";〃输出到文件:计算器操作记录.logtimeout(2);outf<<A.Getx()<<'/'<<A.Gety()<<p<<B.Getx()<<'/'<<B.Gety()<<'=';if(C.Gety()==1)outf<<C.Getx()<<endl;elseoutf<<C.Getx()<<'/'<<C.Gety()<<endl;}cout<<"即将返回主菜单……";Sleep(5000);system("cls");returnn;}//查看记录intview(){chartemp;ifstream*inf=newifstream('计算器操作记录.log",ios_base::in);system("cls");if((temp=(*inf).get())==EOF)cout<<"\n我们没有找到相关记录!\n\t\t你是不是没有创建?\n";else{cout<<"记录如下:\n";for(inti=0;i<11;i++)//在屏幕上输出cout<<"1—";cout<<endl;while((temp=(*inf).get())!=EOF)cout.put(temp);//读取数据for(i=0;i<11;i++)cout<<"";(*inf).close();cout<<"\n\t要删除记录,请按“D”:(回车返回广;if((temp=cin.get())=='d'||temp=='D'){cout<<"请输入系统密码:";char*temp=newchar[11];cin>>temp;if(temp[0]=='0'&&temp[1]=='1'&&temp[2]=='2'){ofstreamtout("计算器操作记录.log",ios_base::out);tout.close();system("cls");cout<<"\n记录清除成功。\n\t即将返回主菜单\n";Sleep(1000);system("cls");return0;}else{cout<<"\n密码错误!\n\t即将返回主菜单……\n";/Sleep(1500);system("cls");return0;}}elsesystem("cls");return0;}cout<<"\n系统即将返回主菜单……";Sleep(1500);system("cls");return0;}〃计算器函数.h结束〃分数.h//该头文件用于定义分数类x/y#include<cmath>usingnamespacestd;//使用标准命名空间classFenShu{private:intx,y;intGongYueShu(intxx,intyy);〃求最大公约数public:FenShu(){};〃默认构造函数FenShu(intxx,intyy)〃带参数构造函数{x=xx;y=yy;}//计算,操作符重载FenShuoperator+(FenShup);FenShuoperator-(FenShup);FenShuoperator*(FenShup);FenShuoperator/(FenShup);//输出TOC\o"1-5"\h\zintGetx();〃提取xintGety();〃提取y//设置参数voidSetxy(intxx,intyy);〃更改xy};//实现intFenShu::GongYueShu(intxx,intyy)〃求最大公约数{inti=xx>yy?yy:xx;for(;i>0;i--)if(xx%i==0&&yy%i==0)returni;return0;}FenShuFenShu::operator+(FenShup){intm=y*p.y;〃分母in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论