c语言课程设计含运行截图.docx
《c语言课程设计含运行截图.docx》由会员分享,可在线阅读,更多相关《c语言课程设计含运行截图.docx(15页珍藏版)》请在冰豆网上搜索。
c语言课程设计含运行截图
目录
1前言2
2需求分析2
2.1要求2
2.2任务2
2.3运行环境2
2.4开发工具2
3概要设计2
3.1系统流程图3
3.2查询函数流程图4
4详细设计6
4.1分析和设计6
4.2具体代码实现6
4.3程序运行结果14
5课程设计总结14
参考文献15
致谢15
1前言
编写一个程序来实现算术计算器。
通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、--、*、等运算符号),然后将其信息存入文件中。
输入一个算术计算式,就在屏幕上显示结果。
2需求分析
2.1要求
(1)用C语言实现程序设计;
(2)利用结构体、共用体进行相关信息处理;
(3)画出查询模块的流程图;
(4)系统的各个功能模块要求用函数的形式实现;
(5)界面友好(良好的人机互交),程序要有注释。
2.2任务
(1)定义一个结构体类型数组,输入0~9及+、--、*等符号的信息,将其信息存入文件中;
(2)输入简单的加减乘除算术计算式,并在屏幕上显示计算结果;
(3)画出部分模块的流程图;
(4)编写代码;
(5)程序分析与调试。
2.3运行环境
(1)WINDOWS2000/XP系统
(2)TurboC2.0编译环境
2.4开发工具
C语言
3概要设计
3.1系统流程图
如图3.1所示。
w
图3.1系统流程图
3.2查询函数流程图
(1)边界画线函数流程图
(2)图标按钮设置函数流程图
4详细设计
4.1分析和设计
(1)在程序的开头部分定义了结构体类型,用来存放按钮信息,使数据能够从键盘上输入。
用输入函数input()来输入按键放在button[]数组中。
再定义结构体栈:
struct_stack()用于数据的输入和存放。
(2)进而定义了表格窗口函数,窗口画线函数draw_win()和边界线函数draw_border(),定义out_text_win()输出文本窗口,定义window_xy(32,3);计算结果窗口。
通过这些为形成整个界面提供了大的前提。
(3)接着通过“write_char()”,“active_button()”,“write_top()”,“out_text_win()”,“get_key()”,“window_xy()”等一系列的函数,使得计算器的整个外型呈现了出来。
再定义了文本光标函数:
text_clo()文本光标函数,通过光标移动选定数字并按空格键确定,通过mian()函数来调用各个子函数,最终得到结果。
4.2具体代码实现
源程序代码:
#include"dos.h"
#include"conio.h"
#include"string.h"
#include"stdio.h"
#definenormbut_bor0x80
#definepresbut_but0xb8
#definenormnum_but0x8e
#definepresnum_but0xb9
#definespebut_char0x2c
#definewin_color0xf2
#definewin_char0xfb
structs_button/*按键的结构体*/
{intsx,sy,ex,ey;
char*head;
intpress;
}button[17];/*图表按键数*/
structstack/*结构体栈*/
{chars[20];
inttos,top;
}stack;
chartag;
{
if(stack.tos>0)
stack.s[--stack.tos]='\0';
}
draw_win()/*边框画线窗口*/
inti;
charfar*t;
char*s="Thisisasimplecalculator!
";/*顶端边框输出的字符*/
draw_border(30,0,79,24,win_color);/*边框的位置和颜色*/
i=(79-30-strlen(s))/2+30;
t=vid_mem+i*2;
for(;*s;)
*t++=*s++;
*t++=win_color;/*顶端字体颜色*/
draw_border(intsx,intsy,intex,intey,intattrib)/*边界线函数*/
charfar*t,far*v;
t=vid_mem;
for(i=sx+1;i{v=t+sy*160+i*2;*v++=196;/*每一行上画线确定为直线*/*v=attrib;v=t+ey*160+i*2;*v++=196;/*每一行下画线确定为直线*/*v=attrib;}for(i=sy+1;i{v=t+i*160+sx*2;*v++=179;/*每一列左画线确定为直线*/*v=attrib;v=t+i*160+ex*2;*v++=179;/*每一列由画线确定为直线*/*v=attrib;}write_char(sx,sy,218,attrib);write_char(ex,sy,191,attrib);write_char(sx,ey,192,attrib);write_char(ex,ey,217,attrib);}write_char(intx,inty,charch,intattrib)/*字符输入函数*/{charfar*v;v=vid_mem;v+=x*2+160*y;*v++=ch;*v=attrib;}active_button()/*图表按钮设定函数*/{inti;make_button(0,32,9,38,11,"1");/*每个键对应的位置和数值*/make_button(1,42,9,48,11,"2");make_button(2,52,9,58,11,"3");make_button(3,62,9,67,11,"+");make_button(4,71,9,76,11,"-");make_button(5,32,12,38,14,"4");make_button(6,42,12,48,14,"5");make_button(7,52,12,58,14,"6");make_button(8,62,12,67,14,"*");make_button(9,71,12,76,14,"/");/*“/”的位置*/make_button(10,32,15,38,17,"7");make_button(11,42,15,48,17,"8");make_button(12,52,15,58,17,"9");make_button(13,62,15,67,17,"=");make_button(14,71,15,76,17,"<-");make_button(15,32,18,38,20,"0");/*“0”的位置*/make_button(16,71,18,76,20,"End");for(i=0;i<17;i++){draw_border(button[i].sx,button[i].sy,button[i].ex,button[i].ey,normbut_bor);}for(i=0;i<17;i++){write_top(button[i].sx+1,button[i].sy+1,button[i].ex-1,button[i].head,normnum_but);}}write_top(intx1,inty,intx2,char*s,intattrib){charfar*v,far*t;inti;v=vid_mem;for(i=x1;i<=x2;i++){t=v+y*160+i*2;*t++='';*t=attrib;}i=(x2-x1-strlen(s)+1)/2+x1;t=v+160*y+i*2;for(;*s;){*t++=*s++;*t++=attrib;}}text_clo()/*文本光标*/{tx--;/*光标向左移*/if(tx<32)tx++;/*backspace时X不能小于32*/put_char(tx,ty,'');}put_string()/*计算机运算函数*/{floatresult;tx=32;switch(tag)/*根据运算符号计算*/{case'+':result=v1+v2;break;/*做加法*/case'-':result=v1-v2;break;/*做减法*/case'*':result=v1*v2;break;/*做乘法*/case'/':result=v1/v2;break;/*做除法*/default:result=v1;/*若不计算输出0*/}sprintf(stack.s,"%.3f",result);/*输出结果保留小数点后三位*/while(stack.s[stack.top]){put_char(tx,ty,stack.s[stack.top++]);tx++;}}send1()/*向服务器发送请求*/{sscanf(stack.s,"%f",&v1);/*输入并储存在V1中*/clear_stack();/*清除栈*/}send2()/*向服务器发送信息*/{sscanf(stack.s,"%f",&v2);clear_stack();/*清除栈*/}select_but(intx,inty)/*选择按钮*/{intnum;if(y>2)if(x<2)num=15;elsenum=x+5*y;draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,presbut_but);write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,presnum_but);}write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,normnum_but);}else{draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,normbut_bor);write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,spebut_char);}}put_char(intx,inty,charch)/*计算窗口的输入确定函数*/{charfar*v;v=vid_mem;v+=x*2+y*160;/*光标的位置*/*v++=ch;/*输入字符随光标的推进*/*v=0xf0;/*输入数字的颜色*/window_xy(x,y);/*光标在窗口坐标*/}calculator()/*计算器构成的函数*/{inta,b;key_choice();/*键选择函数*/}menu()/*左边窗口函数*/{char*j="Thisisacalculator!\nConductorTeacher:\nChengYaHui\n\nStudent:ChenChunLin\nNumber:0841330197\nSchool:ShaoYangCollege”"char*s="UseGuide:\nInputthenumberfrom\nthekeyborde"draw_border(0,0,29,24,win_color);/*左边框的位置和颜色*/write_top(1,2,28,"Introduction",0xf9);/*INTRODCTION的位置和颜色*/write_text(2,5,j,0x79);/*输入字符的位置和颜色*/write_text(2,17,s,0x79);/*输入字符的位置和颜色*/}main(){init_stack();vid_mem=(charfar*)0xb8000000;if(!form_win()){printf("can'tformthedevice,pressanykeytoleave!...");/*如果不能显示见面窗口,按任意退出。*/getch();exit();}menu();calculator();}main(){init_stack();vid_mem=(charfar*)0xb8000000;if(!form_win()){printf("can'tformthedevice,pressanykeytoleave!...");/*如果不能显示见面窗口,按任意退出。*/getch();exit();}menu();calculator();}4.3程序运行结果5课程设计总结本次C语言课程设计我是完全按照任务书上的要求来完成的,虽然还存在比较多的瑕疵,但我都是一饱满的热情、认真的态度去对待本次课程设计的。通过这次课程设计我对C语言的神奇功能更加佩服(只是一个程序运行后却可以显示出一个计算器来,并且画面比较唯美,且能进行计算),我默默在心里发誓一定要把C语言学好,而且将来我还要想学习C++语言,熟练的掌握编程的方法。本次课程设计,我设计的是一个算术计算器,本程序若完全靠现有的知识,是很难编写出来的,幸亏有我的指导老师成娅辉老师的耐心指导,我才能顺利完成。参考文献[1]张福祥.C语言程序设计[M].辽宁大学出版社,2008.1[2]张福祥,王萌.C语言程序设计习题解答与实验实沈阳:辽宁大学出版社,2008.[3]牛莉,刘远军等.计算机等级考试辅导教程[M].北京:中国铁道出版社,2008.致谢这次课程设计让我学到了很多,从编程中可以看出编写一个程序的是一件很难的事。虽然这次我这组的课程设计题目不是很难,但要做好也不是一件很容易的事情。我努力使我的设计更加完美,我也有幸得到成娅辉老师的指导,使我能够顺利完成我的课程设计,我同时也要感谢其他给予我帮助的同学,他们使我认识到团队的力量。再一次感谢所有帮助我完成这次课程设计的人。
v=t+sy*160+i*2;
*v++=196;/*每一行上画线确定为直线*/
*v=attrib;
v=t+ey*160+i*2;
*v++=196;/*每一行下画线确定为直线*/
for(i=sy+1;i{v=t+i*160+sx*2;*v++=179;/*每一列左画线确定为直线*/*v=attrib;v=t+i*160+ex*2;*v++=179;/*每一列由画线确定为直线*/*v=attrib;}write_char(sx,sy,218,attrib);write_char(ex,sy,191,attrib);write_char(sx,ey,192,attrib);write_char(ex,ey,217,attrib);}write_char(intx,inty,charch,intattrib)/*字符输入函数*/{charfar*v;v=vid_mem;v+=x*2+160*y;*v++=ch;*v=attrib;}active_button()/*图表按钮设定函数*/{inti;make_button(0,32,9,38,11,"1");/*每个键对应的位置和数值*/make_button(1,42,9,48,11,"2");make_button(2,52,9,58,11,"3");make_button(3,62,9,67,11,"+");make_button(4,71,9,76,11,"-");make_button(5,32,12,38,14,"4");make_button(6,42,12,48,14,"5");make_button(7,52,12,58,14,"6");make_button(8,62,12,67,14,"*");make_button(9,71,12,76,14,"/");/*“/”的位置*/make_button(10,32,15,38,17,"7");make_button(11,42,15,48,17,"8");make_button(12,52,15,58,17,"9");make_button(13,62,15,67,17,"=");make_button(14,71,15,76,17,"<-");make_button(15,32,18,38,20,"0");/*“0”的位置*/make_button(16,71,18,76,20,"End");for(i=0;i<17;i++){draw_border(button[i].sx,button[i].sy,button[i].ex,button[i].ey,normbut_bor);}for(i=0;i<17;i++){write_top(button[i].sx+1,button[i].sy+1,button[i].ex-1,button[i].head,normnum_but);}}write_top(intx1,inty,intx2,char*s,intattrib){charfar*v,far*t;inti;v=vid_mem;for(i=x1;i<=x2;i++){t=v+y*160+i*2;*t++='';*t=attrib;}i=(x2-x1-strlen(s)+1)/2+x1;t=v+160*y+i*2;for(;*s;){*t++=*s++;*t++=attrib;}}text_clo()/*文本光标*/{tx--;/*光标向左移*/if(tx<32)tx++;/*backspace时X不能小于32*/put_char(tx,ty,'');}put_string()/*计算机运算函数*/{floatresult;tx=32;switch(tag)/*根据运算符号计算*/{case'+':result=v1+v2;break;/*做加法*/case'-':result=v1-v2;break;/*做减法*/case'*':result=v1*v2;break;/*做乘法*/case'/':result=v1/v2;break;/*做除法*/default:result=v1;/*若不计算输出0*/}sprintf(stack.s,"%.3f",result);/*输出结果保留小数点后三位*/while(stack.s[stack.top]){put_char(tx,ty,stack.s[stack.top++]);tx++;}}send1()/*向服务器发送请求*/{sscanf(stack.s,"%f",&v1);/*输入并储存在V1中*/clear_stack();/*清除栈*/}send2()/*向服务器发送信息*/{sscanf(stack.s,"%f",&v2);clear_stack();/*清除栈*/}select_but(intx,inty)/*选择按钮*/{intnum;if(y>2)if(x<2)num=15;elsenum=x+5*y;draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,presbut_but);write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,presnum_but);}write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,normnum_but);}else{draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,normbut_bor);write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,spebut_char);}}put_char(intx,inty,charch)/*计算窗口的输入确定函数*/{charfar*v;v=vid_mem;v+=x*2+y*160;/*光标的位置*/*v++=ch;/*输入字符随光标的推进*/*v=0xf0;/*输入数字的颜色*/window_xy(x,y);/*光标在窗口坐标*/}calculator()/*计算器构成的函数*/{inta,b;key_choice();/*键选择函数*/}menu()/*左边窗口函数*/{char*j="Thisisacalculator!\nConductorTeacher:\nChengYaHui\n\nStudent:ChenChunLin\nNumber:0841330197\nSchool:ShaoYangCollege”"char*s="UseGuide:\nInputthenumberfrom\nthekeyborde"draw_border(0,0,29,24,win_color);/*左边框的位置和颜色*/write_top(1,2,28,"Introduction",0xf9);/*INTRODCTION的位置和颜色*/write_text(2,5,j,0x79);/*输入字符的位置和颜色*/write_text(2,17,s,0x79);/*输入字符的位置和颜色*/}main(){init_stack();vid_mem=(charfar*)0xb8000000;if(!form_win()){printf("can'tformthedevice,pressanykeytoleave!...");/*如果不能显示见面窗口,按任意退出。*/getch();exit();}menu();calculator();}main(){init_stack();vid_mem=(charfar*)0xb8000000;if(!form_win()){printf("can'tformthedevice,pressanykeytoleave!...");/*如果不能显示见面窗口,按任意退出。*/getch();exit();}menu();calculator();}4.3程序运行结果5课程设计总结本次C语言课程设计我是完全按照任务书上的要求来完成的,虽然还存在比较多的瑕疵,但我都是一饱满的热情、认真的态度去对待本次课程设计的。通过这次课程设计我对C语言的神奇功能更加佩服(只是一个程序运行后却可以显示出一个计算器来,并且画面比较唯美,且能进行计算),我默默在心里发誓一定要把C语言学好,而且将来我还要想学习C++语言,熟练的掌握编程的方法。本次课程设计,我设计的是一个算术计算器,本程序若完全靠现有的知识,是很难编写出来的,幸亏有我的指导老师成娅辉老师的耐心指导,我才能顺利完成。参考文献[1]张福祥.C语言程序设计[M].辽宁大学出版社,2008.1[2]张福祥,王萌.C语言程序设计习题解答与实验实沈阳:辽宁大学出版社,2008.[3]牛莉,刘远军等.计算机等级考试辅导教程[M].北京:中国铁道出版社,2008.致谢这次课程设计让我学到了很多,从编程中可以看出编写一个程序的是一件很难的事。虽然这次我这组的课程设计题目不是很难,但要做好也不是一件很容易的事情。我努力使我的设计更加完美,我也有幸得到成娅辉老师的指导,使我能够顺利完成我的课程设计,我同时也要感谢其他给予我帮助的同学,他们使我认识到团队的力量。再一次感谢所有帮助我完成这次课程设计的人。
{v=t+i*160+sx*2;
*v++=179;/*每一列左画线确定为直线*/
v=t+i*160+ex*2;
*v++=179;/*每一列由画线确定为直线*/
write_char(sx,sy,218,attrib);
write_char(ex,sy,191,attrib);
write_char(sx,ey,192,attrib);
write_char(ex,ey,217,attrib);
write_char(intx,inty,charch,intattrib)/*字符输入函数*/
{charfar*v;
v=vid_mem;
v+=x*2+160*y;
*v++=ch;
active_button()/*图表按钮设定函数*/
{inti;
make_button(0,32,9,38,11,"1");/*每个键对应的位置和数值*/
make_button(1,42,9,48,11,"2");
make_button(2,52,9,58,11,"3");
make_button(3,62,9,67,11,"+");
make_button(4,71,9,76,11,"-");
make_button(5,32,12,38,14,"4");
make_button(6,42,12,48,14,"5");
make_button(7,52,12,58,14,"6");
make_button(8,62,12,67,14,"*");
make_button(9,71,12,76,14,"/");/*“/”的位置*/
make_button(10,32,15,38,17,"7");
make_button(11,42,15,48,17,"8");
make_button(12,52,15,58,17,"9");
make_button(13,62,15,67,17,"=");
make_button(14,71,15,76,17,"<-");
make_button(15,32,18,38,20,"0");/*“0”的位置*/
make_button(16,71,18,76,20,"End");
for(i=0;i<17;i++)
draw_border(button[i].sx,button[i].sy,button[i].ex,button[i].ey,normbut_bor);
write_top(button[i].sx+1,button[i].sy+1,button[i].ex-1,button[i].head,normnum_but);
write_top(intx1,inty,intx2,char*s,intattrib)
charfar*v,far*t;
for(i=x1;i<=x2;i++)
{t=v+y*160+i*2;
*t++='';
*t=attrib;
i=(x2-x1-strlen(s)+1)/2+x1;
t=v+160*y+i*2;
{*t++=*s++;
*t++=attrib;
text_clo()/*文本光标*/
{tx--;/*光标向左移*/
if(tx<32)tx++;/*backspace时X不能小于32*/
put_char(tx,ty,'');
put_string()/*计算机运算函数*/
{floatresult;
tx=32;
switch(tag)/*根据运算符号计算*/
case'+':
result=v1+v2;break;/*做加法*/
case'-':
result=v1-v2;break;/*做减法*/
case'*':
result=v1*v2;break;/*做乘法*/
case'/':
result=v1/v2;break;/*做除法*/
default:
result=v1;/*若不计算输出0*/
sprintf(stack.s,"%.3f",result);/*输出结果保留小数点后三位*/
while(stack.s[stack.top])
{put_char(tx,ty,stack.s[stack.top++]);
tx++;
send1()/*向服务器发送请求*/
{sscanf(stack.s,"%f",&v1);/*输入并储存在V1中*/
clear_stack();/*清除栈*/
send2()/*向服务器发送信息*/
{sscanf(stack.s,"%f",&v2);
select_but(intx,inty)/*选择按钮*/
{intnum;
if(y>2)
if(x<2)num=15;
elsenum=x+5*y;
draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,presbut_but);
write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,presnum_but);
write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,normnum_but);
else
draw_border(button[num].sx,button[num].sy,button[num].ex,button[num].ey,normbut_bor);
write_top(button[num].sx+1,button[num].sy+1,button[num].ex-1,button[num].head,spebut_char);
put_char(intx,inty,charch)/*计算窗口的输入确定函数*/
charfar*v;
v+=x*2+y*160;/*光标的位置*/
*v++=ch;/*输入字符随光标的推进*/
*v=0xf0;/*输入数字的颜色*/
window_xy(x,y);/*光标在窗口坐标*/
calculator()/*计算器构成的函数*/
inta,b;
key_choice();/*键选择函数*/
menu()/*左边窗口函数*/
{char*j="Thisisacalculator!
\nConductorTeacher:
\nChengYaHui\n\nStudent:
ChenChunLin\nNumber:
0841330197\nSchool:
ShaoYangCollege”"
char*s="UseGuide:
\nInputthenumberfrom\nthekeyborde"
draw_border(0,0,29,24,win_color);/*左边框的位置和颜色*/
write_top(1,2,28,"Introduction",0xf9);/*INTRODCTION的位置和颜色*/
write_text(2,5,j,0x79);/*输入字符的位置和颜色*/
write_text(2,17,s,0x79);/*输入字符的位置和颜色*/
main()
init_stack();
vid_mem=(charfar*)0xb8000000;
if(!
form_win())
printf("can'tformthedevice,pressanykeytoleave!
...");/*如果不能显示见面窗口,按任意退出。
*/
getch();
exit();
menu();
calculator();
}menu();
4.3程序运行结果
5课程设计总结
本次C语言课程设计我是完全按照任务书上的要求来完成的,虽然还存在比较多的瑕疵,但我都是一饱满的热情、认真的态度去对待本次课程设计的。
通过这次课程设计我对C语言的神奇功能更加佩服(只是一个程序运行后却可以显示出一个计算器来,并且画面比较唯美,且能进行计算),我默默在心里发誓一定要把C语言学好,而且将来我还要想学习C++语言,熟练的掌握编程的方法。
本次课程设计,我设计的是一个算术计算器,本程序若完全靠现有的知识,是很难编写出来的,幸亏有我的指导老师成娅辉老师的耐心指导,我才能顺利完成。
参考文献
[1]张福祥.C语言程序设计[M].辽宁大学出版社,2008.1
[2]张福祥,王萌.C语言程序设计习题解答与实验实沈阳:
辽宁大学出版社,2008.
[3]牛莉,刘远军等.计算机等级考试辅导教程[M].北京:
中国铁道出版社,2008.
致谢
这次课程设计让我学到了很多,从编程中可以看出编写一个程序的是一件很难的事。
虽然这次我这组的课程设计题目不是很难,但要做好也不是一件很容易的事情。
我努力使我的设计更加完美,我也有幸得到成娅辉老师的指导,使我能够顺利完成我的课程设计,我同时也要感谢其他给予我帮助的同学,他们使我认识到团队的力量。
再一次感谢所有帮助我完成这次课程设计的人。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1