C++模拟计算器系统设计方案思路_第1页
C++模拟计算器系统设计方案思路_第2页
C++模拟计算器系统设计方案思路_第3页
C++模拟计算器系统设计方案思路_第4页
C++模拟计算器系统设计方案思路_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

13/13模拟计算器系统说明书重庆工商高校派斯学院·计算机科学系09计本一班张黄江2010/6/27

名目1、介绍【程序简介】-—-—--—-———-——--——--—-————-——————-——3【主要功能】—-——--————--———--—————--———-——-———--————-3【特别处理】—--——————-————-—————--—--———-32、设计【设计思路】——--——-———--—-——--——-—-————-———4【设计步骤】—-——-—--—--——-————--————-——-——5【附源代码】————————-—--———-—--——--—-——-—5【技术统计】—-————-——--—--———————13

模拟计算器系统-—-说明书第一部分:介绍【程序简介】该程序可以完成对实数的"+、—、×、/”运算,也可以完成对分数的”+、-、*、/”运算,是一个比较完善的模拟计算器。【主要功能】支持多次计算。计算完第一次后,还可以计算,直到在主菜单中选择“4。退出程序"才结束计算。支持整数、小数及分数。支持文件记录。保存在磁盘上,日后可以调出记录查看,文件格式为“.log",可以用记事本打开查看。如果要删除计算记录,则要求输入密码,防止恶意删除。改密码为012。记录时间信息。窗口中记录了每一次计算的时间,便利使用者查找记录.并且文件记录里加入了日期,使用者可以便利的查找到确定日期的计算记录。支持刷屏当屏幕上显示的内容多了,调用一个刷新屏幕函数,使屏幕显得干净。6、延迟退出程序当手动打开exe文件进行计算,到结束程序时,会等到使用者敲下回车确认退出,这样做的目的是给使用者留出时间看退出时的计算统计信息。【特别处理】1、如果被除数为0,则要求重新输入。2、如果分母为0,则重新输入。3、如果操作符有误,则重新输入.4、输入字符过多,则抛弃后面的字符,防止进入死循环。5、如果菜单选择有误,则重新选择.

其次部分:设计【设计思路】图解如下:

【设计步骤】对分数用类进行封装,通过函数调用使程序模块化,通过多文件结构使主文件更精简、更易读。函数概览:显示欢迎函数强制退出函数记录时间函数计算模板函数计算实数函数计算分数函数查看记录函数文件概览:计算器。cpp计算器函数.h分数类。h。更多内容请参见源代码:【附源代码】该程序分为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\a【主菜单】: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<〈”你的选择无效。"; 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%"; system("cls”);//刷新屏幕 } cout<〈”\n\n\n\t\t\t载入成功!!!\n"; Sleep(1000);//暂停1000毫秒system("cls"); cout<〈endl; cout〈〈”\t┏━━━━━━━━━━━━━━━━━━━━━━━┓”〈<endl; cout<〈”\t┃模拟计算器系统┃"〈〈endl; cout〈<”\t┠───────────────────────┨”〈<endl; cout<<"\t┃(c)AllRight张黄江┃"〈<endl; cout〈〈”\t┃E-mail:xaigb@163.com┃”<<endl; cout<〈”\t┃version2010build┃”<〈endl; cout<<"\t┗━━━━━━━━━━━━━━━━━━━━━━━┛”〈<endl 〈〈"欢迎使用!”<<endl;}//强制退出程序的函数inlinegoout(intn){ system("cls”); cout<<'\a’; 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程序即将【退出】……"; Sleep(3700);//延迟退出 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【实数】输入式子(示例: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<〈"结果为:" 〈〈"┏*************┓\n” <<setiosflags(ios_base::left) //左对齐 〈〈"\t┃”<〈setw(13)<<s<<”┃\t” //设置位宽 <<resetiosflags(ios_base::left); //恢复对齐方式的默认值 timeout(1);//写入时间到显示器 cout<<”\t┗*************┛\n"; //输出到文件:计算器操作记录.log timeout(2);//写入时间到文件记录 outf〈<a〈〈p〈〈b〈<'='〈<s<〈endl; } cout〈〈"即将返回【主菜单】……"; Sleep(3500);//暂停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【分数】输入式子(示例: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〈<”结果为:” <〈”┏********┓\n" 〈〈”\t┃”; if(C。Gety()==1)//如果分母为1,则只输出分子 cout<〈setiosflags(ios_base::left)〈〈setw(8)〈〈C.Getx(); else cout<〈setw(3)〈〈C.Getx()〈<’/'<〈setiosflags(ios_base::left) 〈<setw(4)<〈C。Gety()<<resetiosflags(ios_base::left); cout〈<resetiosflags(ios_base::left)<<”┃\t"; timeout(1); cout<<”\t┗********┛\n”; //输出到文件:计算器操作记录.log timeout(2); outf<<A.Getx()〈<’/’<〈A。Gety()<<p〈<B。Getx()〈〈'/’<〈B。Gety()<<'=’; if(C。Gety()==1) outf<〈C.Getx()〈<endl; else outf<<C。Getx()<〈’/'〈<C。Gety()〈〈endl; } cout〈<”即将返回【主菜单】……"; Sleep(3000);//暂停3000毫秒 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<<"\a记录如下:\n”; for(inti=0;i<11;i++)//在屏幕上输出 cout<<"┈┬┈”; 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; } } else system(”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);//输出 intGetx(); //提取x intGety(); //提取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; //分母 intn=x*p。y+p。x*y; //分子 ints=GongYueShu(n,m); returnFenShu(n/s,m/s); //建立一个临时无名分数对象}FenShuFenShu::operat

温馨提示

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

评论

0/150

提交评论