C++模拟计算器系统 - 设计思路

  • 格式:docx
  • 大小:85.64 KB
  • 文档页数:13

下载文档原格式

  / 13
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
else
outf<<C.Getx()<<'/'<<C.Gety()<<endl;
}
cout<<"即将返回【主菜单】……";
Sleep(3000);//暂停3000毫秒
system("cls");//刷新屏幕
return n;
}
//查看记录
int view()
{
char temp;
ifstream *inf=new ifstream("计算器操作记录.log",ios_base::in);
模拟计算器系统
说明书
重庆工商大学派斯学院·计算机科学系
09计本一班
张黄江
2010/6/27
1、介绍
【程序简介】---------------------------------------------3
【主要功能】---------------------------------------------3
【异常处理】
1、如果被除数为0,则要求重新输入。
2、如果分母为0,则重新输入。
3、如果操作符有误,则重新输入。
4、输入字符过多,则抛弃后面的字符,防止进入死循环。
5、如果菜单选择有误,则重新选择。
1、
第二部分:设计
【设计思路】
图解如下:
【设计步骤】
对分数用类进行封装,通过函数调用使程序模块化,通过多文件结构使主文件更精简、更易读。
{
cout<<"结果为:"
<<"┏*************┓\n"
<<setiosflags(ios_base::left)//左对齐
<<"\t┃"<<setw(13)<<s<<"┃\t"//设置位宽
<<resetiosflags(ios_base::left);//恢复对齐方式的默认值
timeout(1);//写入时间到显示器
<<"欢迎使用!"<<endl;
}
//强制退出程序的函数
inline goout(int n)
{
system("cls");
cout<<'\a';
for(int i=0;i<=6;i++)
{
cout<<"\n\n\n\t\t\t系统退出中……"<<15*i<<"%";
if(i==100)
Sleep(500);
break;
}
return a;
}
//计算实数
int shishu(int n)
{
char p;//存放+,-,*,/
bool pr=1;//输出结果开关,如果没有计算则不输出
double a,b,s;
system("cls");//刷新屏幕
do
{
cout<<"\a【实数】输入式子(示例:a+b):";
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();
<<time.wMinute<<':'<<setw(2)<<time.wSecond<<'\n';
cout.fill(' ');
}
else if(x==2)//到文件
{
outf<<time.wYear<<"年"<<setw(2)<<time.wMonth<<"月"<<setw(2)
<<time.wDay<<"日"<<setw(2)<<time.wHour<<':'<<setw(2)
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;
break;
case '2'://数据分数型
n=fenshu(n);
break;
case '3'://查看记录
view();
break;
case '4'://退出程序
goout(n);//调用程序结束函数
default ://缺省
cout<<"你的选择无效。";
break;
}
}
return 0;//返回给操作系统
cout<<"┈";
cout<<"\n\a【主菜单】:1.实数2.分数3.看记录4.退出程序\n"
<<"输入1、2、3、4选择:";
cin>>temp;//选择类型
getchar();
//以下为整个程序的核心部分,以一个多分枝语句为主体
switch(*temp)
{
case '1'://浮点型数据
n=shishu(n);//参数n为统计计算次数
窗口中记录了每一次计算的时间,方便使用者查找记录。
并且文件记录里加入了日期,使用者可以方便的查找到确定日期的计算记录。
5、支持刷屏
当屏幕上显示的内容多了,调用一个刷新屏幕函数,使屏幕显得干净。
6、延迟退出程序
当手动打开exe文件进行计算,到结束程序时,会等到使用者敲下回车确认退出,这样做的目的是给使用者留出时间看退出时的计算统计信息。
//时间操作,内联函数
inline timeout(int x)//x有两个参数:1,2
{
SYSTEMTIME time;
GetLocalTime(&time);
if(x==1)//到显示器
{
cout.fill('0');
cout<<"计算于:"<<setw(2)<<time.wHour<<':'<<setw(2)
cout<<" \t┃(c)All Right张黄江┃"<<endl;
cout<<" \t┃E-mail:xaigb@163.com┃"<<endl;
cout<<" \t┃version 2010 build┃"<<endl;
cout<<" \t┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl
return n;//返回计算次数
}
//计算分数
int fenshu(int n)
{
char p;//存放+,-,*,/
bool pr=1;//输出结果开关
FenShu A,B,C;
int c,d,e,f;
char *ptemp=new char[2];//存放分数线
system("cls");
do
system("cls");
}
cout<<"\n\n共计算了"<<n<<"次,记录保存在“计算器操作记录.log”中\n"
<<"\n谢谢使用\n\t程序即将【退出】……";
Sleep(3700);//延迟退出
exit(0);//程序结束函数
}
//模板函数
template <class T>
T compute(T a,char p,T b,bool&pr,int&n)
cout<<"\t┗*************┛\n";
//输出到文件:计算器操作记录.log
timeout(2);//写入时间到文件记录
outf<<a<<p<<b<<'='<<s<<endl;
}
cout<<"即将返回【主菜单】……";
Sleep(3500);//暂停3500毫秒
system("cls");//刷新屏幕
函数概览:
1ห้องสมุดไป่ตู้显示欢迎函数
2、强制退出函数
3、记录时间函数
4、计算模板函数
5、计算实数函数
6、计算分数函数
7、查看记录函数
文件概览:
1、计算器.cpp
2、计算器函数.h
3、分数类.h。
更多内容请参见源代码:
【附源代码】
该程序分为3个文件:“计算器.cpp”、“计算器函数.h”和“分数类.h”。
//计算器.cpp
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)
system("cls");
if((temp=(*inf).get())==EOF)
cout<<"\n我们没有找到相关记录!\n\t\t你是不是没有创建?\n";
else
{
cout<<"\a记录如下:\n";
for(int i=0;i<11;i++)//在屏幕上输出
cout<<"┈┬┈";
cout<<endl;
【异常处理】---------------------------------------------3
2、设计
【设计思路】---------------------------------------------4
【设计步骤】---------------------------------------------5
#include"计算器函数.h"
int main()
{
int n=0;//统计计算次数
char *temp=new char[];//字符数组,屏蔽输入过多字符
welcome();//欢迎界面
//功能实现部分
while(1)//循环计算
{
if(n!=0)
system("cls");
for(int i=0;i<37;i++)//在屏幕上输出"┈"
}
cout<<"\n\n\n\t\t\t载入成功!!!\n";
Sleep(1000);//暂停1000毫秒
system("cls");
cout<<endl;
cout<<" \t┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
cout<<" \t┃模拟计算器系统┃"<<endl;
cout<<" \t┠───────────────────────┨"<<endl;
【附源代码】---------------------------------------------5
【技术统计】--------------------------------------------13
模拟计算器系统-—-说明书
第一部分:介绍
【程序简介】
该程序可以完成对实数的"+、—、×、/"运算,也可以完成对分数的"+、-、*、/"运算,是一个比较完善的模拟计算器。
{
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);
}//计算器.cpp结束
//计算器函数.h
#include<iostream>
#include<iomanip>
#include<fstream>//文件系统
#include<windows.h>
#include"分数类.h"
using namespace std;
//文件操作
ofstream outf("计算器操作记录.log",ios_base::app);
{n++;//计算次数
switch(p)
{
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
case '/':return a/b;
default :
cout<<"运算符错误!!!请检查输入是否有误?\n";
pr=0;//pr置零,输出语句关闭
else
cout<<setw(3)<<C.Getx()<<'/'<<setiosflags(ios_base::left)
<<setw(4)<<C.Gety()<<resetiosflags(ios_base::left);
cout<<resetiosflags(ios_base::left)<<"┃\t";
【主要功能】
1、支持多次计算。
计算完第一次后,还可以计算,直到在主菜单中选择“4.退出程序”才结束计算。
2、支持整数、小数及分数。
3、支持文件记录。
保存在磁盘上,日后可以调出记录查看,文件格式为“.log”,可以用记事本打开查看。如果要删除计算记录,则要求输入密码,防止恶意删除。改密码为012。
4、记录时间信息。
<<time.wMinute<<':'<<setw(2)<<time.wSecond<<" ";
}
}
//显示欢迎界面
void welcome()
{
//制作载入效果
for(int i=0;i<=10;i++)
{
cout<<"\n\n\n\t\t\t系统载入中……"<<i<<"0%";
system("cls");//刷新屏幕
while((temp=(*inf).get())!=EOF)
cout.put(temp);//读取数据