C语言也能干大事编程项目开发计算器编程.docx
- 文档编号:9462336
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:50
- 大小:28.16KB
C语言也能干大事编程项目开发计算器编程.docx
《C语言也能干大事编程项目开发计算器编程.docx》由会员分享,可在线阅读,更多相关《C语言也能干大事编程项目开发计算器编程.docx(50页珍藏版)》请在冰豆网上搜索。
C语言也能干大事编程项目开发计算器编程
C语言也能干大事
附注:
本文档里的代码都是本人学习编程之后自己所写,请不要随便的改写或删除,如在学习过程中有什么不懂的地方,可以提出来共同探讨学习!
第一部分
C语言也能干大事
第一节:
题目:
自己动手写恶搞坑爹程序
要求:
运行以后弹出询问对话框(有【是】、【否】两个按钮以及问号图标)“你是好人吗?
”,如果点击【是】,则弹出对话框(只有一个【确定】按钮以及一个警告图标)“一看你就不像好人,点击【确定】开始格式化C盘!
”;如果点击【否】,则弹出对话框(有【重试】、【取消】两个按钮)“尝试把你变成好人失败,是否重试?
”。
代码:
(部分重要程序)
#include"stdafx.h"
intAPIENTRYWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
intret1=MessageBox(NULL,TEXT("你是好人吗?
"),TEXT("人品鉴定系统"),MB_YESNO|MB_ICONASTERISK);
/*“MB”是“MessageBox”的简写,MB_YESNO是可在窗口中显示的按钮,像这样的按钮还有:
#defineMB_OK(确定)0x00000000L
#defineMB_OKCANCEL(确定和取消)0x00000001L
#defineMB_ABORTRETRYIGNORE(终止、重试和忽略)0x00000002L
#defineMB_YESNOCANCEL(是、否和取消)0x00000003L
#defineMB_YESNO(是和否)0x00000004L
#defineMB_RETRYCANCEL(重试和取消)0x00000005L
定义了一个int型变量,说明“MB_YESNO|MB_ICONASTERISK”运算(是或运算)之后的结果是一个整型数据。
“MessageBox()”括号里面有四个参数,第一个参数:
hWnd:
标识将被创建的消息框的拥有窗口。
如果此参数为NULL,则消息框没有拥有窗口;第二个参数:
用“TEXT”包起来的字符串,表示框内的内容。
第三个参数:
用“TEXT”包起来的字符串,表示框的标题;第四个参数:
设置希望在对话框中显示的按钮或图标,“MB_ICONASTERISK”就是表示“警告”的图标,像这样的图标的还有:
#defineMB_ICONHAND(错误“X”状图标)0x00000010L
#defineMB_ICONQUESTION(问号图标)0x00000020L
#defineMB_ICONEXCLAMATION(感叹号警告图标)0x00000030L
#defineMB_ICONASTERISK(感叹号图标)0x00000040L
*/
if(IDYES==ret1)
{
MessageBox(NULL,TEXT("哼哼,一看就知道你不是好人"),TEXT("鉴定结果"),MB_OK|MB_ICONASTERISK);
}
elseif(IDNO==ret1)
{
intret2=MessageBox(NULL,TEXT("哈哈,算你有自知之明。
你想变成一个好人吗?
"),TEXT("鉴定结果"),MB_OK);
if(IDOK==ret2)
{
MessageBox(NULL,TEXT("sorry!
尝试把你变成好人失败..."),TEXT("无力回天"),MB_OK|MB_ICONEXCLAMATION);
MessageBox(NULL,TEXT("由于你的人品问题,现在开始格式化C盘..."),TEXT("处理办法"),MB_OK);
}
}
return0;
}
/*if语句里面的IDYES是返回值,返回值为用户点击的按钮:
(注意:
以后我们在判断条件时,把变量写在等号的右边,这样做的目的就是能够在把等号“==”写成赋值号“=”情况下不能通过编译,快速发现错误。
如果把变量写在等号的左边,就变成赋值表达式了,赋值表达式如果是真,就通过了编译,导致不知道错误在哪儿。
)像这样的返回值还有:
#defineIDOK1
#defineIDCANCEL2
#defineIDABORT3
#defineIDRETRY4
#defineIDIGNORE5
#defineIDYES6
#defineIDNO7
*/
第二节:
题目:
开发一个注册界面
本节没有代码,讲一下一些控件的使用:
第三节:
题目:
制作一个能计算加减乘除的计算器(V1.0版)和一个十进制转二进制的小工具。
要求:
当用户输入非数字或给除数输入0时,要给出错误提示信息。
代码:
(部分重要程序)
#include"stdafx.h"
#include
#include
#include"resource.h"
#include"MainDlg.h"
BOOLWINAPIMain_Proc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd,WM_INITDIALOG,Main_OnInitDialog);
HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE,Main_OnClose);
}
returnFALSE;
}
BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam)
{
returnTRUE;
}
BOOLIsInt(TCHAR*str)
{
inti=atoi(str);
TCHARstemp[256];
wsprintf(stemp,"%i",i);
if(strcmp(str,stemp)!
=0)
{
returnFALSE;
}
else
{
returnTRUE;
}
}
/*在这儿定义了一个类型为BOLL的被掉函数IsInt(),返回值是BOOL型,bool为布尔型,只有一个字节,取值false和true,是0和1的区别。
函数的参数是一个字符型指针,接受实参传过来的地址(这里是字符型数组的首地址)。
函数atoi()的功能是将字符串转化为整型数。
函数说明:
参数字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符\0)字符时停止转换,返回整型数。
要有头文件:
#include
函数wsprintf()的作用:
将一系列的字符和数值输入到缓冲区;输出缓冲区里的的值取决于格式说明符(即"%");如果写入的是文字,此函数给写入的文字的末尾追加一个'\0';函数的返回值是写入的长度,但不包括最后的'\0'。
wsprintf()包含在头文件windows.h中。
我们可以这样来理解:
wsprintf(缓冲区,格式,要格式化的值);
第一个参数是字符缓冲区,后面是格式字符串,wsprintf不是将格式化结果写到标准输出,而是将其写入缓冲区中,该函数返回该字符串的长度。
Strcmp()函数:
原型:
externintstrcmp(char*s1,char*s2);
用法:
#include
功能:
比较字符串s1和s2。
说明:
当s1 当s1=s2时,返回值=0 当s1>s2时,返回值>0 */ voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify) { /*按钮被按下的时候Main_OnCommand方法被调用,hwnd是对话框句柄(什么是句柄后面讲,通俗的说就是通过它能够操纵对话框),id是控件的id,后两个参数暂时不关心。 Main_OnCommand方法中根据id,也就是被点击按钮的名字来决定不同的动作,从而和匹配case匹配。 Hwnd是当前窗口的句柄,句柄就是把柄! 操作一个东西,要先抓住他的把柄! 通过句柄就可以操作这个对象。 */ switch(id) { caseIDC_OK: { MessageBox(hwnd,TEXT("嘿嘿...同志,你走错门了! "),TEXT("嘿嘿"),MB_OK|MB_ICONASTERISK); } break; caseIDC_BUTTON1: //如果按下该按钮执行 { TCHARstr1[256],str2[256]; GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1)); /*GetDlgItemText就是“得到对话框项目文本”的意思(暂时可以这样理解) Hwnd就是控件的句柄,IDC_EDIT1就是编辑框1, 参数说明: 调用这个函数以获得与对话框中的控件相关的标题或文本。 GetDlgItemText成员函数将文本拷贝到str1指向的位置并返回拷贝的字节的数目。 */ GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2)); if(FALSE==IsInt(str1)) { MessageBox(hwnd,TEXT("sorry,你的第一个数输入有误! "),TEXT("错误! "),MB_OK|MB_ICONHAND); return;//注意: 不要掉了,不然会在错误的情况下得到结果 } if(FALSE==IsInt(str2)) { MessageBox(hwnd,TEXT("sorry,你的第二个数输入有误! "),TEXT("错误! "),MB_OK|MB_ICONHAND); return; } inti1=atoi(str1);inti2=atoi(str2); inti3=i1+i2; TCHARstr3[256]; wsprintf(str3,"%i",i3); SetDlgItemText(hwnd,IDC_EDIT3,str3); //可以理解为: 把str3指定的内容拷贝到得到句柄的编辑框内 } break; caseIDC_BUTTON2: { TCHARstr1[256],str2[256]; GetDlgItemText(hwnd,IDC_EDIT4,str1,sizeof(str1)); GetDlgItemText(hwnd,IDC_EDIT5,str2,sizeof(str2)); if(FALSE==IsInt(str1)) { MessageBox(hwnd,TEXT("sorry,你的第一个数输入有误! "),TEXT("错误! "),MB_OK|MB_ICONHAND); return; } if(FALSE==IsInt(str2)) { MessageBox(hwnd,TEXT("sorry,你的第二个数输入有误! "),TEXT("错误! "),MB_OK|MB_ICONHAND); return; } inti1=atoi(str1);inti2=atoi(str2); inti3=i1-i2; TCHARstr3[256]; wsprintf(str3,"%i",i3); SetDlgItemText(hwnd,IDC_EDIT6,str3); } break; caseIDC_BUTTON3: { TCHARstr1[256],str2[256]; GetDlgItemText(hwnd,IDC_EDIT7,str1,sizeof(str1)); GetDlgItemText(hwnd,IDC_EDIT8,str2,sizeof(str2)); if(FALSE==IsInt(str1)) { MessageBox(hwnd,TEXT("sorry,你的第一个数输入有误! "),TEXT("错误! "),MB_OK|MB_ICONHAND); return; } if(FALSE==IsInt(str2)) { MessageBox(hwnd,TEXT("sorry,你的第二个数输入有误! "),TEXT("错误! "),MB_OK|MB_ICONHAND); return; } inti1=atoi(str1);inti2=atoi(str2); inti3=i1*i2; TCHARstr3[256]; wsprintf(str3,"%i",i3); SetDlgItemText(hwnd,IDC_EDIT9,str3); } break; caseIDC_BUTTON4: { TCHARstr1[256],str2[256]; GetDlgItemText(hwnd,IDC_EDIT10,str1,sizeof(str1)); GetDlgItemText(hwnd,IDC_EDIT11,str2,sizeof(str2)); if(FALSE==IsInt(str1)) { MessageBox(hwnd,TEXT("sorry,你的第一个数输入有误! "),TEXT("错误! "),MB_OK|MB_ICONHAND); return; } if(FALSE==IsInt(str2)) { MessageBox(hwnd,TEXT("sorry,你的第二个数输入有误! "),TEXT("错误! "),MB_OK|MB_ICONHAND); return; } inti1=atoi(str1);inti2=atoi(str2); if(i2==0) { MessageBox(hwnd,TEXT("笨蛋! 除数不能为零! "),TEXT("错误! "),MB_OK|MB_ICONHAND); return; } inti3=i1/i2; TCHARstr3[256]; wsprintf(str3,"%i",i3); SetDlgItemText(hwnd,IDC_EDIT12,str3); } break; caseIDC_BUTTON5: { TCHARstr1[256]; GetDlgItemText(hwnd,IDC_EDIT13,str1,sizeof(str1)); if(FALSE==IsInt(str1)) { MessageBox(hwnd,TEXT("sorry,你的输入有误! "),TEXT("错误! "),MB_OK|MB_ICONHAND); return; } inti1=atoi(str1); TCHARstr2[256]; itoa(i1,str2,2); /*函数itoa(参数1,参数2,参数3); 功能: 把一整数转换为字符串 用法: itoa(i,num,10); i----需要转换成字符串的数字 num----转换后保存字符串的变量 10----转换数字的基数(即进制)。 10就是说按10进制转换数字。 还可以是2,8,16等等你喜欢的进制类型 返回值: 指向num这个字符串的指针 */ SetDlgItemText(hwnd,IDC_EDIT14,str2); } break; } } voidMain_OnClose(HWNDhwnd) { EndDialog(hwnd,0); } 第四节: 题目: 开发一个计算器(V2.0版)和一个小工具(功能: 用户任意输入年月日后显示这一年是平年还是闰年,并且告诉用户这一天是星期几)。 要求: 1.上述两个工具在一个界面上实现。 2.如果用户输入的年月日不符合实际(比如: 在平年的2月输入29日...)、除数为零等都要报错。 代码: (部分重要程序) #include"stdafx.h" #include #include #include"resource.h" #include"MainDlg.h" BOOLWINAPIMain_Proc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam) { switch(uMsg) { HANDLE_MSG(hWnd,WM_INITDIALOG,Main_OnInitDialog); HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE,Main_OnClose); } returnFALSE; } BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam) { HWNDhwndcombo1=GetDlgItem(hwnd,IDC_COMBO1); ComboBox_InsertString(hwndcombo1,-1,TEXT("加")); ComboBox_InsertString(hwndcombo1,-1,TEXT("减")); ComboBox_InsertString(hwndcombo1,-1,TEXT("乘")); ComboBox_InsertString(hwndcombo1,-1,TEXT("除以")); returnTRUE; } /*当对话框接收到WM_INITDIALOG消息时,就会执行函数BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam),一般一些初始化的变量之类的都写这个函数内进行初始化。 HWNDhwndcombo1=GetDlgItem(hwnd,IDC_COMBO1);是定义一个HWND类型的量,通过函数GetDlgItem()来获取控件“IDC_COMBO1"的句柄,并赋值给hwndcombo1.而ComboBox_InsertString(hwndcombo1,-1,TEXT("加"));是将得到的控件内加入内容,其中参数: hwndcombo1是得到的控件的句柄,关于参数-1的说明请看“Thezero-basedindexatwhichtoinsertthestring,or–1toaddittotheendofthelist.”我的翻译——“从0开始以什么样的指标插入字符串,或1到把它添加到列表的末尾”,呵呵,还差强人意吧,用这个“函数”为了使添加内容的顺序按照自己意图实现,如果用“函数”(因为不是真正的函数,其实是宏)ComboBox_AddString()进行添加内容会出现乱序的现象,就不会是“加减乘除”的顺序了*/ intIsInt(TCHAR*str) { inti=atoi(str); TCHARstr1[256]; itoa(i,str1,10); if(strcmp(str,str1)! =0) { returnFALSE; } else { returnTRUE; } } intfun(inta,intb,intc) { intp,q,p1=28,p2=29; if(a%400==0||a%4==0&&a%100! =0) { p=p2; } elseif(a%4! =0) { p=p1; } switch(b) { case1: q=c;break; case2: q=31+c;break; case3: q=31+p+c;break; case4: q=31+p+31+c;break; case5: q=31+p+31+30+c;break; case6: q=31+p+31+30+31+c;break; case7: q=31+p+31+30+31+30+c;break; case8: q=31+p+31+30+31+30+31+c;break; case9: q=31+p+31+30+31+30+31+31+c;break; case10: q=31+p+31+30+31+30+31+31+30+c;break; case11: q=31+p+31+30+31+30+31+31+30+31+c;break; case12: q=31+p+31+30+31+30+31+31+30+31+30+c;break; } returnq; } voidMain_OnCommand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify) { switch(id) { caseIDC_OK: { MessageBox(hwnd,TEXT("Sorry! 由于你的人品出现了问题,系统不允许你退出...嘿嘿^-^"),TEXT("嘿嘿^-^"),MB_OK|MB_ICONHAND); } break; caseIDC_BUTTON1: { TCHARstr1[256],str2[256]; GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1)); GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2)); inti1=atoi(str1);inti2=atoi(str2);inti3=0; HWNDhwndcombo1=GetDlgItem(hwnd,IDC_COMBO1); intcurIndex=ComboBox_GetCurSel(hwndcombo1); /*定义了一个整型变量来表示添加内容的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言也能干大事 编程 项目开发 计算器编程 语言 能干 大事 项目 开发 计算器
![提示](https://static.bdocx.com/images/bang_tan.gif)