c语言课设作业 计算器,C语言课程设计-计算器设计

C语言课程设计-计算器设计

C语言课程设计-计算器设计|c语言程序代码编程小程序设计|c语言课程设计报告课程案例#include    /*DOS接口函数*/

#include    /*数学函数的定义*/

#include   /*屏幕操作函数*/

#include   /*I/O函数*/

#include   /*库函数*/

#include   /*变量长度参数表*/

#include   /*图形函数*/

#include   /*字符串函数*/

#include   /*字符操作函数*/

#define UP 0x48    /*光标上移键*/

#define DOWN 0x50  /*光标下移键*/

#define LEFT 0x4b  /*光标左移键*/

#define RIGHT 0x4d  /*光标右移键*/

#define ENTER 0x0d  /*回车键*/

void *rar;       /*全局变量,保存光标图象*/

struct palettetype palette; /*使用调色板信息*/

int  GraphDriver; /* 图形设备驱动*/

int  GraphMode; /* 图形模式值*/

int  ErrorCode;  /* 错误代码*/

int  MaxColors;  /* 可用颜色的最大数值*/

int  MaxX, MaxY; /* 屏幕的最大分辨率*/

double  AspectRatio; /* 屏幕的像素比*/

void drawboder(void); /*画边框函数*/

void initialize(void);  /*初始化函数*/

void computer(void);  /*计算器计算函数*/

void changetextstyle(int font, int direction, int charsize);  /*改变文本样式函数*/

void mwindow(char *header);  /*窗口函数*/

int specialkey(void) ;   /*获取特殊键函数*/

int arrow();     /*设置箭头光标函数*/

/*主函数*/

int main()

{

initialize();/* 设置系统进入图形模式 */

computer(); /*运行计算器 */

closegraph();/*系统关闭图形模式返回文本模式*/

return(0);   /*结束程序*/

}

/* 设置系统进入图形模式 */

void initialize(void)

{

int xasp, yasp; /* 用于读x和y方向纵横比*/

GraphDriver = DETECT; /* 自动检测显示器*/

initgraph( &GraphDriver, &GraphMode, "" );

/*初始化图形系统*/

ErrorCode = graphresult();  /*读初始化结果*/

if( ErrorCode != grOk )  /*如果初始化时出现错误*/

{

printf("Graphics System Error: %s\n",

grapherrormsg( ErrorCode ) ); /*显示错误代码*/

exit( 1 );  /*退出*/

}

getpalette( &palette );  /* 读面板信息*/

MaxColors = getmaxcolor() + 1; /* 读取颜色的最大值*/

MaxX = getmaxx();    /* 读屏幕尺寸 */

MaxY = getmaxy();  /* 读屏幕尺寸 */

getaspectratio( &xasp, &yasp ); /* 拷贝纵横比到变量中*/

AspectRatio = (double)xasp/(double)yasp;/* 计算纵横比值*/

}

/*计算器函数*/

void computer(void)

{

struct viewporttype vp;  /*定义视口类型变量*/

int color, height, width;

int x, y,x0,y0, i, j,v,m,n,act,flag=1;

float num1=0,num2=0,result;  /*操作数和计算结果变量*/

char cnum[5],str2[20]={""},c,temp[20]={""};

char str1[]="1230.456+-789*/Qc=^%";/* 定义字符串在按钮图形上显示的符号 */

mwindow( "Calculator" );  /* 显示主窗口 */

color = 7;     /*设置灰颜色值*/

getviewsettings( &vp );    /* 读取当前窗口的大小*/

width=(vp.right+1)/10;    /* 设置按钮宽度  */

height=(vp.bottom-10)/10 ;  /*设置按钮高度  */

x = width /2;   /*设置x的坐标值*/

y = height/2; /*设置y的坐标值*/

setfillstyle(SOLID_FILL, color+3);

bar( x+width*2, y, x+7*width, y+height );

/*画一个二维矩形条显示运算数和结果*/

setcolor( color+3 );  /*设置淡绿颜色边框线*/

rectangle( x+width*2, y, x+7*width, y+height );

/*画一个矩形边框线*/

setcolor(RED);  /*设置颜色为红色*/

outtextxy(x+3*width,y+height/2,"0."); /*输出字符串"0."*/

x =2*width-width/2;   /*设置x的坐标值*/

y =2*height+height/2;  /*设置y的坐标值*/

for( j=0 ; j<4 ; ++j ) /*画按钮*/

{

for( i=0 ; i<5 ; ++i )

{

setfillstyle(SOLID_FILL, color);

setcolor(RED);

bar( x, y, x+width, y+height ); /*画一个矩形条*/

rectangle( x, y, x+width, y+height );

sprintf(str2,"%c",str1[j*5+i]);

/*将字符保存到str2中*/

outtextxy( x+(width/2), y+height/2, str2);

x =x+width+ (width / 2) ; /*移动列坐标*/

}

y +=(height/2)*3; /* 移动行坐标*/

x =2*width-width/2;  /*复位列坐标*/

}

x0=2*width;

y0=3*height;

x=x0;

y=y0;

gotoxy(x,y); /*移动光标到x,y位置*/

arrow();  /*显示光标*/

putimage(x,y,rar,XOR_PUT);

m=0;

n=0;

strcpy(str2,"");  /*设置str2为空串*/

while((v=specialkey())!=45)  /*当压下Alt+x键结束程序,否则执行下面的循环*/

{

while((v=specialkey())!=ENTER)  /*当压下键不是回车时*/

{

putimage(x,y,rar,XOR_PUT); /*显示光标图象*/

if(v==RIGHT)   /*右移箭头时新位置计算*/

if(x>=x0+6*width)

/*如果右移,移到尾,则移动到最左边字符位置*/

{

x=x0;

m=0;

}

else

{

x=x+width+width/2;

m++;

} /*否则,右移到下一个字符位置*/

if(v==LEFT) /*左移箭头时新位置计算*/

if(x<=x0)

{

x=x0+6*width;

m=4;

} /*如果移到头,再左移,则移动到最右边字符位置*/

else

{

x=x-width-width/2;

m--;

} /*否则,左移到前一个字符位置*/

if(v==UP) /*上移箭头时新位置计算*/

if(y<=y0)

{

y=y0+4*height+height/2;

n=3;

} /*如果移到头,再上移,则移动到最下边字符位置*/

else

{

y=y-height-height/2;

n--;

} /*否则,移到上边一个字符位置*/

if(v==DOWN) /*下移箭头时新位置计算*/

if(y>=7*height)

{

y=y0;

n=0;

} /*如果移到尾,再下移,则移动到最上边字符位置*/

else

{

y=y+height+height/2;

n++;

} /*否则,移到下边一个字符位置*/

putimage(x,y,rar,XOR_PUT);  /*在新的位置显示光标箭头*/

}

c=str1[n*5+m];  /*将字符保存到变量c中*/

if(isdigit(c)||c=='.')  /*判断是否是数字或小数点*/

{

if(flag==-1)  /*如果标志为-1,表明为负数*/

{

strcpy(str2,"-"); /*将负号连接到字符串中*/

flag=1;

} /*将标志值恢复为1*/

sprintf(temp,"%c",c); /*将字符保存到字符串变量temp中*/

strcat(str2,temp); /*将temp中的字符串连接到str2中*/

setfillstyle(SOLID_FILL,color+3);

bar(2*width+width/2,height/2,15*width/2,3*height/2);

outtextxy(5*width,height,str2);  /*显示字符串*/

}

if(c=='+')

{

num1=atof(str2);  /*将第一个操作数转换为浮点数*/

strcpy(str2,""); /*将str2清空*/

act=1;  /*做计算加法标志值*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值