图形鼠标输入界面计算器.docx

上传人:b****1 文档编号:23214744 上传时间:2023-05-15 格式:DOCX 页数:19 大小:467.95KB
下载 相关 举报
图形鼠标输入界面计算器.docx_第1页
第1页 / 共19页
图形鼠标输入界面计算器.docx_第2页
第2页 / 共19页
图形鼠标输入界面计算器.docx_第3页
第3页 / 共19页
图形鼠标输入界面计算器.docx_第4页
第4页 / 共19页
图形鼠标输入界面计算器.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

图形鼠标输入界面计算器.docx

《图形鼠标输入界面计算器.docx》由会员分享,可在线阅读,更多相关《图形鼠标输入界面计算器.docx(19页珍藏版)》请在冰豆网上搜索。

图形鼠标输入界面计算器.docx

图形鼠标输入界面计算器

图形界面鼠标操作计算器

计算器功能:

1.单步的加减乘除运算

2.连续的加减运算或者乘除运算

3.乘除在前,加减在后的混合运算

设计思路:

用鼠标点击图片中的数字或符号区域,输入的字符。

输入的字符以字符串的形式存储。

在输入=后,整个对整个字符串进行判断,将字符串中的数字以运算符号或者=为区分点,将其转化为数字,之后按照顺序进行运算显示图片,用Switch进行判断输出,数字和符号录入及运算结果的动态输出运用循环控制位置和顺序。

本计算器只能进行简单单步计算或者顺序多步计算,并不能按运算优先级控制运算顺序,由于未将图片以资源文件的形式添加到程序中,故exe文件无法单独运行,须在解决方案中打开。

 

完整程序:

 

#include

#include

#include//包括函数getch()、exit()

#include//包括各类数学计算的函数

#include//包括图片窗口及显示函数loadimage()、initgraph()、putimage()、puttextxy()

#include"windows.h"//包括控制主板蜂鸣器的函数Beep()

#include"string.h"//包括字符串的输入、转换、输出等函数

#include"iostream"//包括定义逻辑变量bool函数

IMAGEimg,img0,img1,img2,img3,img4,img5,img6,img7,img8,img9,

imgplus,imgcut,imgdivide,imgmultiply,imganswer;

MOUSEMSGmou;//定义全局变量有利于调用图片和鼠标参数

voidDisplay()//主界面显示

{

printf("\t\t\t\tC语言大作业\n\n\t\t\t\t简单计算器\n\n\n功能介绍:

\n");

printf("1.单步的加减乘除运算\n2.连续的加减运算或者乘除运算\n3.乘除在前,加减在后的混合运算\n");

printf("\n\n制作人:

\n\t通信一班\n\t\t408宿舍\n\t\t\tLMZBJZLTYZYL\n");

printf("\n\n\n\t\t\t\t按任意键启动计算器...\n\n\n");

getchar();

}

voidWindow()//打开图形窗口,载入图片

{

initgraph(470,420);//打开图形窗口,设定大小

loadimage(&img,"ck.jpg");//载入图片

loadimage(&img0,"ck0.jpg");

loadimage(&img1,"ck1.jpg");

loadimage(&img2,"ck2.jpg");

loadimage(&img3,"ck3.jpg");

loadimage(&img4,"ck4.jpg");

loadimage(&img5,"ck5.jpg");

loadimage(&img6,"ck6.jpg");

loadimage(&img7,"ck7.jpg");

loadimage(&img8,"ck8.jpg");

loadimage(&img9,"ck9.jpg");

loadimage(&imgplus,"ckplus.jpg");

loadimage(&imgcut,"ckcut.jpg");

loadimage(&imgdivide,"ckdivide.jpg");

loadimage(&imgmultiply,"ckmultiply.jpg");

loadimage(&imganswer,"ckanswer.jpg");

putimage(0,0,&img);//显示初始界面

}

voidPic(charg)//输入过程中的按键显示

{

switch(g)//判断输入值,控制按键显示变化

{

case'0':

putimage(0,0,&img0);Sleep(150);putimage(0,0,&img);break;

case'1':

putimage(0,0,&img1);Sleep(150);putimage(0,0,&img);break;

case'2':

putimage(0,0,&img2);Sleep(150);putimage(0,0,&img);break;

case'3':

putimage(0,0,&img3);Sleep(150);putimage(0,0,&img);break;

case'4':

putimage(0,0,&img4);Sleep(150);putimage(0,0,&img);break;

case'5':

putimage(0,0,&img5);Sleep(150);putimage(0,0,&img);break;

case'6':

putimage(0,0,&img6);Sleep(150);putimage(0,0,&img);break;

case'7':

putimage(0,0,&img7);Sleep(150);putimage(0,0,&img);break;

case'8':

putimage(0,0,&img8);Sleep(150);putimage(0,0,&img);break;

case'9':

putimage(0,0,&img9);Sleep(150);putimage(0,0,&img);break;

case'+':

putimage(0,0,&imgplus);Sleep(150);putimage(0,0,&img);break;

case'-':

putimage(0,0,&imgcut);Sleep(150);putimage(0,0,&img);break;

case'*':

putimage(0,0,&imgmultiply);Sleep(150);putimage(0,0,&img);break;

case'/':

putimage(0,0,&imgdivide);Sleep(150);putimage(0,0,&img);break;

default:

break;

}

}

voidPog(char*num,inti)//输入过程中的数字及符号显示

{

intii;

setfont(30,0,"Arial");//设置显示字体、大小

for(ii=i;ii>=0;ii--)//控制显示位置

outtextxy(400-(ii-1)*13,80,num[i-ii]);

}

voidPoa(char*ans,char*num,intnumber)//答案的显示

{

intjj,p,q;

p=strlen(ans);

q=strlen(num);//获取各字符串长度,用于下一步的显示控制

putimage(0,0,&img);

for(jj=number;jj>=0;jj--)//控制原算式的显示

outtextxy((35+number*13)-13*jj,30,num[number-jj]);

for(jj=p;jj>0;jj--)//控制运算结果的显示

outtextxy(400-(jj-3)*13,80,ans[p-jj]);

}

charMouseget()//鼠标控制函数

{

intx,y;

charm;

x=0;

y=0;

next:

mou=GetMouseMsg();//获取鼠标信息

x=mou.x;

y=mou.y;

switch(mou.uMsg)

{

caseWM_LBUTTONDOWN:

//判断左键是否按下

if(x>0&&x<79&&y>284&&y<350)//根据左键按下的位置确定返回值m

m='1';

if(x>79&&x<155&&y>284&&y<350)

m='2';

if(x>155&&x<233&&y>284&&y<350)

m='3';

if(x>0&&x<79&&y>210&&y<284)

m='4';

if(x>79&&x<155&&y>210&&y<284)

m='5';

if(x>155&&x<233&&y>210&&y<284)

m='6';

if(x>0&&x<79&&y>144&&y<210)

m='7';

if(x>79&&x<155&&y>144&&y<210)

m='8';

if(x>155&&x<233&&y>144&&y<210)

m='9';

if(x>0&&x<233&&y>350&&y<420)

m='0';

if(x>233&&x<345&&y>144&&y<248)

m='+';

if(x>345&&x<470&&y>144&&y<248)

m='-';

if(x>233&&x<345&&y>248&&y<350)

m='*';

if(x>345&&x<470&&y>248&&y<350)

m='/';

if(x>233&&x<470&&y>350&&y<420)

m='=';

break;

default:

gotonext;break;//若左键没有按下,重复以上循环

}

returnm;

}

voidCaculator()//控制输入、数值转化、计算

{

inti,j,l,k=0,n,c,d,y=0,g,m[100]={0},number;

doublea[100],so,b[100]={0};

charnum[100],gt;

charans[100];//声明用到的变量

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

a[i]=10;

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

{

gt=Mouseget();//调用鼠标控制函数,用鼠标进行输入

num[i]=gt;

Beep(1500,100);//控制按键声音

Pic(gt);//调用函数控制输入阶段按键变化

Pog(num,i);//调用函数控制输入阶段字符的动态显示

if(num[i]=='=')//如果输入=,将已输入字符串进行运算

{

number=i;

break;

}

}

for(i=0;i<100;i++)//此阶段控制输入的字符串转化为数字,以运算符号为区分点

{

switch(num[i])

{

case'1':

a[i]=1;break;

case'2':

a[i]=2;break;

case'3':

a[i]=3;break;

case'4':

a[i]=4;break;

case'5':

a[i]=5;break;

case'6':

a[i]=6;break;

case'7':

a[i]=7;break;

case'8':

a[i]=8;break;

case'9':

a[i]=9;break;

case'0':

a[i]=0;break;

default:

break;

}

if(num[i]=='\0')break;

}

for(n=1;n<100;n++)

{

c=0;

for(d=k;d

{

if(a[d]!

=10)

c++;

elsebreak;

}

k=k+c+1;

m[n]=c-1;

if(m[n]==-1)break;

}

for(j=0;j<100;j++)

{

for(k=y;k

{

if(a[k]!

=10)

b[j]=a[k]*pow(10.0,m[j+1]-k+y)+b[j];

elsebreak;

}

y=y+m[j+1]+2;

if(b[j]==0)break;

}//至此,转化阶段结束

so=b[0];

l=1;

for(g=0;g

{

switch(num[g])

{

case'+':

so+=b[l],l++;break;

case'-':

so=so-b[l],l++;break;

case'*':

so=so*b[l],l++;break;

case'/':

so=so/b[l],l++;break;

default:

break;

}

if(b[l]==0.0)

break;

}

gcvt(so,15,ans);//将运算结果转化为字符串,用于下一步的显示

Poa(ans,num,number);//调用函数控制运算结果及原算式的显示

}

intmain()//主程序

{

Display();//开始界面

Window();//打开图形窗口,载入图片

while

(1)//控制程序可以多次运行

{

Caculator();//调用控制输入、数值转化及计算的函数

}

return0;

}

 

图片部分:

ck.jpg

ck0.jpg

ck1.jpg

ck2.jpg

ck3.jpg

ck4.jpg

ck5.jpg

ck6.jpg

ck7.jpg

ck8.jpg

ck9.jpg

ckcut.jpg

ckdivide.jpg

ckmultiply.jpg

ckadd.jpg

将图片保存到解决方案中的Caculator文件夹中,并按照图片后面的标注进行命名,可以对图片进行调用。

程序必须在安装easyx的电脑上进行执行,并按照以下方法进行命名。

而且,应注意此项设置,否则无法运行。

 

程序功能不全,还有不少Bug,有待改进。

程序的亮点是,可以用鼠标点击对应区域输入值,同时图形窗口中可以进行按键和字符的动态输出,而且会有按键声音。

山东大学(威海)

机电与信息工程学院

2011级通信一班

408宿舍

ELESSAR

C语言期末作业作品

谢谢

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1