要求实现: 计算加、减、乘、除、乘方计算器在线计算、开方。在用户界面上设置两个编辑框,分别用于输入左操作数和右操

c语言设计袖珍计算器,不要太复杂的,我是个新手 爱说篇
c语言设计袖珍计算器,不要太复杂的,我是个新手
来源:网络收集 & 发布时间: &
要求实现: 计算加、减、乘、除、乘方、开方。在用户界面上设置两个编辑框,分别用于输入左操作数和右操作数,两个静态文本分别用于显示“=”号和运算结果,其中用六个单选按钮用于选择运算符。 能够存储操作数、操作码和结果;执行算术操作;实现控制功能,如清除、全部清除和改变符号;根据需要产生在计算引擎中存储的量;对外报告错误时,保存内部状态。 实现扩展1:接收键盘输入;识别操作和数字操作数;从用户输入产生下一个操作和操作数;显示操作码、操作数、结果、错误;限制错误的输入。 实现扩展2:建立合适大小的模拟LCD窗口;在LCD窗口中显示给定的字符串;显示给定的单一字符操作码;清除LCD窗口。
/*DOS接口函数*/
/*数学函数的定义*/
/*屏幕操作函数*/
/*I/O函数*/
/*库函数*/
/*变量长度参数表*/
/*图形函数*/
/*字符串函数*/
/*字符操作函数*/
#define UP 0x48 /*光标上移键*/
#define DOWN 0x50 /*光标下移键*/
#define LEFT 0x4b /*光标左移键*/
#define RIGHT 0x4d /*光标右移键*/
#define ENTER 0x0d /*回车键*/ /全局变量,保存光标图象*/
struct /*使用调色板信息*/
int GraphD /* 图形设备驱动*/
int GraphM /* 图形模式值*/
int ErrorC /* 错误代码*/
int MaxC /* 可用颜色的最大数值*/
int MaxX, MaxY; /* 屏幕的最大分辨率*/
double AspectR /* 屏幕的像素比*/
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, / 用于读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)/* 计算纵横比值*/
/*计算器函数*/
void computer(void)
st /*定义视口类型变量*/
int color, height,
int x, y,x0,y0, i, j,v,m,n,act,flag=1;
float num1=0,num2=0, /*操作数和计算结果变量*/
char cnum[5],str2[20]={""},c,temp[20]={""};
char str1[]="9*/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 {
for( i=0 ; 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; /*复位列坐标*/
gotoxy(x,y); /*移动光标到x,y位置*/
arrow(); /*显示光标*/
putimage(x,y,rar,XOR_PUT);
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=x+width+width/2;
} /*否则,右移到下一个字符位置*/
if(v==LEFT) /*左移箭头时新位置计算*/
} /*如果移到头,再左移,则移动到最右边字符位置*/
x=x-width-width/2;
} /*否则,左移到前一个字符位置*/
if(v==UP) /*上移箭头时新位置计算*/
if(y=7*height)
} /*如果移到尾,再下移,则移动到最上边字符位置*/
y=y+height+height/2;
} /*否则,移到下边一个字符位置*/
putimage(x,y,rar,XOR_PUT); /*在新的位置显示光标箭头*/
c=str1[n*5+m]; /*将字符保存到变量c中*/
if(isdigit(c)||c=='.') /*判断是否是数字或小数点*/
if(flag==-1) /*如果标志为-1,表明为负数*/
strcpy(str2,"-"); /*将负号连接到字符串中*/
} /*将标志值恢复为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; /*做计算加法标志值*/
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='-')
if(strcmp(str2,"")==0) /*如果str2为空,说明是负号,而不是减号*/
flag=-1; /*设置负数标志*/
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=2; /*做计算减法标志值*/
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*画矩形*/
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='*')
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=3; /*做计算乘法标志值*/
setfillstyle(SOLID_FILL,color+3); bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='/')
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=4; /*做计算除法标志值*/
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='^')
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=5; /*做计算乘方标志值*/
setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*画矩形*/
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='%')
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=6; /*做计算模运算乘方标志值*/
setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*画矩形*/
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='=')
num2=atof(str2); /*将第二个操作数转换为浮点数*/
switch(act) /*根据运算符号计算*/
case 1:result=num1+num2; /*做加法*/
case 2:result=num1-num2; /*做减法*/
case 3:result=num1*num2; /*做乘法*/
case 4:result=num1/num2; /*做除法*/
case 5:result=pow(num1,num2); /*做x的y次方*/
case 6:result=fmod(num1,num2); /*做模运算*/
setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*覆盖结果区*/
sprintf(temp,"%f",result); /*将结果保存到temp中*/
outtextxy(5*width,height,temp); /*显示结果*/
if(c=='c')
num1=0; /*将两个操作数复位0,符号标志为1*/
strcpy(str2,""); /*将str2清空*/
setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*覆盖结果区*/
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='Q')exit(0); /*如果选择了q回车,结束计算程序*/
putimage(x,y,rar,XOR_PUT); /*在退出之前消去光标箭头*/ /*返回*/
/*窗口函数*/
void mwindow( char header )
cleardevice(); / 清除图形屏幕 /
setcolor( MaxColors - 1 ); / 设置当前颜色为白色*/
setviewport( 20, 20, MaxX/2, MaxY/2, 1 ); /* 设置视口大小 /
height = textheight( "H" ); / 读取基本文本大小 /
settextstyle( DEFAULT_FONT, HORIZ_DIR, 1 );/设置文本样式*/
settextjustify( CENTER_TEXT, TOP_TEXT );/*设置字符排列方式*/
outtextxy( MaxX/4, 2, header ); /*输出标题*/
setviewport( 20,20+height+4, MaxX/2+4, MaxY/2+20, 1 ); /*设置视口大小*/
drawboder(); /*画边框*/
void drawboder(void) /*画边框*/
st /*定义视口类型变量*/
setcolor( MaxColors - 1 ); /*设置当前颜色为白色 /
setlinestyle( SOLID_LINE, 0, NORM_WIDTH );/设置画线方式*/
getviewsettings( &vp );/*将当前视口信息装入vp所指的结构中*/
rectangle( 0, 0, vp.right-vp.left, vp.bottom-vp.top ); /*画矩形边框*/
/*设计鼠标图形函数*/
int arrow()
int raw[]={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4}; /*定义多边形坐标*/
setfillstyle(SOLID_FILL,2); /*设置填充模式*/
fillpoly(8,raw); /*画出一光标箭头*/
size=imagesize(4,4,16,16); /*测试图象大小*/
rar=malloc(size); /*分配内存区域*/
getimage(4,4,16,16,rar); /*存放光标箭头图象*/
putimage(4,4,rar,XOR_PUT); /*消去光标箭头图象*/
/*按键函数*/
int specialkey(void)
while(bioskey(1)==0); /*等待键盘输入*/
key=bioskey(0); /*键盘输入*/
key=key&0xff? key&0xff:key>>8; /*只取特殊键的扫描值,其余为0*/
return(key); /*返回键值*/
} 08-12-26 | 添加评论 0
expper #include
/*DOS接口函数*/
/*数学函数的定义*/
/*屏幕操作函数*/
/*I/O函数*/
/*库函数*/
/*变量长度参数表*/
/*图形函数*/
/*字符串函数*/
/*字符操作函数*/
#define UP 0x48 /*光标上移键*/
#define DOWN 0x50 /*光标下移键*/
#define LEFT 0x4b /*光标左移键*/
#define RIGHT 0x4d /*光标右移键*/
#define ENTER 0x0d /*回车键*/ /全局变量,保存光标图象*/
struct /*使用调色板信息*/
int GraphD /* 图形设备驱动*/
int GraphM /* 图形模式值*/
int ErrorC /* 错误代码*/
int MaxC /* 可用颜色的最大数值*/
int MaxX, MaxY; /* 屏幕的最大分辨率*/
double AspectR /* 屏幕的像素比*/
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, / 用于读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)/* 计算纵横比值*/
/*计算器函数*/
void computer(void)
st /*定义视口类型变量*/
int color, height,
int x, y,x0,y0, i, j,v,m,n,act,flag=1;
float num1=0,num2=0, /*操作数和计算结果变量*/
char cnum[5],str2[20]={""},c,temp[20]={""};
char str1[]="9*/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 {
for( i=0 ; 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; /*复位列坐标*/
gotoxy(x,y); /*移动光标到x,y位置*/
arrow(); /*显示光标*/
putimage(x,y,rar,XOR_PUT);
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=x+width+width/2;
} /*否则,右移到下一个字符位置*/
if(v==LEFT) /*左移箭头时新位置计算*/
} /*如果移到头,再左移,则移动到最右边字符位置*/
x=x-width-width/2;
} /*否则,左移到前一个字符位置*/
if(v==UP) /*上移箭头时新位置计算*/
if(y=7*height)
} /*如果移到尾,再下移,则移动到最上边字符位置*/
y=y+height+height/2;
} /*否则,移到下边一个字符位置*/
putimage(x,y,rar,XOR_PUT); /*在新的位置显示光标箭头*/
c=str1[n*5+m]; /*将字符保存到变量c中*/
if(isdigit(c)||c=='.') /*判断是否是数字或小数点*/
if(flag==-1) /*如果标志为-1,表明为负数*/
strcpy(str2,"-"); /*将负号连接到字符串中*/
} /*将标志值恢复为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; /*做计算加法标志值*/
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='-')
if(strcmp(str2,"")==0) /*如果str2为空,说明是负号,而不是减号*/
flag=-1; /*设置负数标志*/
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=2; /*做计算减法标志值*/
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*画矩形*/
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='*')
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=3; /*做计算乘法标志值*/
setfillstyle(SOLID_FILL,color+3); bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='/')
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=4; /*做计算除法标志值*/
setfillstyle(SOLID_FILL,color+3);
bar(2*width+width/2,height/2,15*width/2,3*height/2);
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='^')
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=5; /*做计算乘方标志值*/
setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*画矩形*/
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='%')
num1=atof(str2); /*将第二个操作数转换为浮点数*/
strcpy(str2,""); /*将str2清空*/
act=6; /*做计算模运算乘方标志值*/
setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*画矩形*/
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='=')
num2=atof(str2); /*将第二个操作数转换为浮点数*/
switch(act) /*根据运算符号计算*/
case 1:result=num1+num2; /*做加法*/
case 2:result=num1-num2; /*做减法*/
case 3:result=num1*num2; /*做乘法*/
case 4:result=num1/num2; /*做除法*/
case 5:result=pow(num1,num2); /*做x的y次方*/
case 6:result=fmod(num1,num2); /*做模运算*/
setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*覆盖结果区*/
sprintf(temp,"%f",result); /*将结果保存到temp中*/
outtextxy(5*width,height,temp); /*显示结果*/
if(c=='c')
num1=0; /*将两个操作数复位0,符号标志为1*/
strcpy(str2,""); /*将str2清空*/
setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/
bar(2*width+width/2,height/2,15*width/2,3*height/2); /*覆盖结果区*/
outtextxy(5*width,height,"0."); /*显示字符串*/
if(c=='Q')exit(0); /*如果选择了q回车,结束计算程序*/
putimage(x,y,rar,XOR_PUT); /*在退出之前消去光标箭头*/ /*返回*/
/*窗口函数*/
void mwindow( char header )
cleardevice(); / 清除图形屏幕 /
setcolor( MaxColors - 1 ); / 设置当前颜色为白色*/
setviewport( 20, 20, MaxX/2, MaxY/2, 1 ); /* 设置视口大小 /
height = textheight( "H" ); / 读取基本文本大小 /
settextstyle( DEFAULT_FONT, HORIZ_DIR, 1 );/设置文本样式*/
settextjustify( CENTER_TEXT, TOP_TEXT );/*设置字符排列方式*/
outtextxy( MaxX/4, 2, header ); /*输出标题*/
setviewport( 20,20+height+4, MaxX/2+4, MaxY/2+20, 1 ); /*设置视口大小*/
drawboder(); /*画边框*/
void drawboder(void) /*画边框*/
st /*定义视口类型变量*/
setcolor( MaxColors - 1 ); /*设置当前颜色为白色 /
setlinestyle( SOLID_LINE, 0, NORM_WIDTH );/设置画线方式*/
getviewsettings( &vp );/*将当前视口信息装入vp所指的结构中*/
rectangle( 0, 0, vp.right-vp.left, vp.bottom-vp.top ); /*画矩形边框*/
/*设计鼠标图形函数*/
int arrow()
int raw[]={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4}; /*定义多边形坐标*/
setfillstyle(SOLID_FILL,2); /*设置填充模式*/
fillpoly(8,raw); /*画出一光标箭头*/
size=imagesize(4,4,16,16); /*测试图象大小*/
rar=malloc(size); /*分配内存区域*/
getimage(4,4,16,16,rar); /*存放光标箭头图象*/
putimage(4,4,rar,XOR_PUT); /*消去光标箭头图象*/
/*按键函数*/
int specialkey(void)
while(bioskey(1)==0); /*等待键盘输入*/
key=bioskey(0); /*键盘输入*/
key=key&0xff? key&0xff:key>>8; /*只取特殊键的扫描值,其余为0*/
return(key); /*返回键值*/
本文地址:https://www.chinawjzx.com/4797.html
所有问题分类MFC可视化程序设计_中华文本库
第1页/共15页
广州大学学生实验报告
开课学院及实验室:计算机科学与工程实验室
2011 年12月28日
学院计算机科学于
教育软件学院
姓名杨华奇学号
程序设计课程设计成绩
实验项目名称MFC可视化程序设计指导老师
(***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***)
一、实验目的
通过本课程的教学实践,使学生达到加深对计算机高级语言程序设计特点、结构化程序设计方法和面向对象程序设计的理解、提高学生对可视化编程的动手能力之目的实验内容
每个学生可任选下列问题1-8中的不少于六个小问题,或问题7-10不少于三个小问题,
用MFC 类库方法编程设计(指导教师也可以要求选取其他组合的问题):
问题1:“球体积和球表面积计算设计”。设计一个对话框,可以输入球的半径,输出球
体积和球表面积。
问题2:“长方体体积和表面积计算设计”。设计一个对话框,可以输入长方体的长、宽
和高,输出长方体的体积和表面积。
问题3:“袖珍计算器设计”。计算加、减、乘、除、乘方、开方。在用户界面上设置两
个编辑框,分别用于输入左操作数和右操作数,两个静态文本分别用于显示“=”号和运算
结果,其中用六个单选按钮用于选择运算符。
要求能够存储操作数、操作码和结果;执行算术操作;实现控制功能,如清除、全部清
除和改变符号;根据需要产生在计算引擎中存储的量;对外报告错误时,保存内部状态。
扩展1:接收键盘输入;识别操作和数字操作数;从用户输入产生下一个操作和操作数;
显示操作码、操作数、结果、错误;限制错误的输入。
扩展2:建立合适大小的模拟LCD窗口;在LCD窗口中显示给定的字符串;显示给定
的单一字符操作码;清除LCD窗口;恢复对用户的正常I/O。
问题4:“数据记录框设计”。编写一个列表框应用程序,可以进行添加和删除数据记录:
姓名、性别、年龄、电话号码、单位、住址、邮政编码,列表框用于显示对应某数据记录的
问题5:“调色板设计”。三原色红色、绿色、蓝色参数分别可用四个单选按钮选取为:
第1页/共15页
寻找更多 ""C语言课程设计题目及相关要求-海文库
您现在的位置:&>&&>&IT认证
C语言课程设计题目及相关要求
C语言课程设计综合设计题目及相关要求说明1、选题考虑到时间比较紧张,同时也锻炼同学之间的团结协作能力,采用2人一组或1人一组选作一题。课程设计题目见附2。分组可采用自由组合或按学号顺序安排,分组名单及各小组选题名单,请学习委员于18周星期一晚交给任课教师,同一个题目不超过2个小组。2、设计时间本学期17-18周,18周周五上交报告(电子版)及机房检查(运行演示及说明),并同时提交各小组开发系统源代码。3、课程设计要求①完成相应课程设计题目的基本功能;②撰写课程设计报告(每人一份)③报告封面及内容要求见附1;④报告格式要求:(一)标题(二)目录(三)正文1.报告正文部分主要内容见正文参考2.报告正文排版要求第一层次题序和标题用小三号黑体字;第二层次题序和标题用四号黑体字;第三层次题序和标题用小四号黑体字;1
正文用宋体小四号(英文用新罗马体12号);参考文献宋体五号。3.报告页面设置:报告一律用A4打印,页码一律用小5号字标明;正文采用18磅行距,标准字符间距,上边距25mm,下边距25mm,左边距28mm,右边距20mm。4、综合课程设计评分标准
附:1、课程设计学期成绩评定方式:平时(考勤)20%+平时实验(30%)+综合课程设计(50%)2、每人一份,本小组成员均围绕自己所承担的工作展开(即写自己完成的工作)。综合设计报告出现完全一致或雷同度高,则所有涉及者成绩评定为0分。2
信息学院课程设计Ⅰ报告
课程名称___C语言程序设计_
__ 题目名称_____________________ 学生学院_
信息学院_ __ __ 专业班级_
号______________________ 学生姓名______________________ 指导教师_______马瑜____
目录参考1. 设计目的与要求????????????????X1.1 题目与设计要求……………………………………X1.2 本程序涉及的知识点………………………………X2.功能设计………………………………………………X2.1总体设计……………………………………………X2.2详细设计……………………………………………X3. 程序实现……………………………………………X3.1程序实现时应考虑的问题…………………………X3.2 XX模块核心代码…………………………………X4.测试分析?????????????????X4.1 测试结果及分析…………………………………X 5. 总结…………………………………………………X 参考文献………………………………………………X
正文具体内容参考1
设计目的与要求1.1 题目与设计要求题目:设计要求:例如主要实现功能,注意:在此标识出自己的主要工作1.2 本程序设计的知识点陈述开发过程中用到的知识点,如结构体、数组、指针等。2
功能设计2.1 总体设计描述包含几大功能模块2.2 详细设计描述各功能模块的具体实现算法-流程图3
程序实现3.1 程序实现时应考虑的问题描述实现时应考虑的各种问题及函数调用关系图3.2 XX模块源代码及说明(注意:XX模块指自己所承担的模块)源代码(加注释)4 测试分析4.1 测试结果及分析描述自己所负责模块的测试用例,及测试结果5 总结总结系统的优缺点,课程设计完成了哪些功能,有没有什么扩展功能 还有哪些地方需要改进,课程设计有何收获,调试程序的体会等。参考文献参考文献必须是在课程设计中真正阅读过和运用过的,文献按照在正文中的出现顺序排列。例如:[1] 严蔚敏. 数据结构. 清华大学. 2004.11[2] http://
语言课程设计参考题目
信息学院二零一三年十二月6 附2 C
一、工资管理系统1、 需求分析工资信息存放在文件中,提供文件的输入、输出等操作;要实现浏览功能,提供显示、排序操作;而查询功能要求实现查找操作;另外还应该提供键盘式选择菜单以实现功能选择。2、总体设计整个系统可以分为信息输入、信息添加、信息浏览、信息排序、信息查询和信息统计模块。3、详细设计工资信息采用结构体数组:Struct Salary_Info{int Card_No;
//工资卡号Char name[20];
//月份float Init_S
//应发工资float Water_R
//水费float Electric_R
//税金float Final_S
//实发工资}SI[MAX];
//SI[MAX]中每个数组元素对应一个职工工资信息(1)主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。(2)输入模块按照工资卡号、姓名、月份、应发工资、水费、电费的顺序输入信息,税金和实发工资根据输入的信息进行计算得到,这些信息被录入到文件中。文件操作函数:fopen,fwrite,fclose.税金的计算:if(应发工资&=800)税金=0;else if (应发工资&800&&应发工资&=1400)税金=(应发工资-800)*5%;else if (应发工资&1400)税金=(应发工资-1400)*10%;实发工资=应发工资-水费-电费-税金。(3)添加模块增加新的职工工资信息,从键盘输入并逐条写到原来的输入文件中,采用追加而不是覆盖的方式(以”ab”方式打开文件)。(4)浏览模块分屏显示职工工资信息,可以指定10个1屏,按任意键显示下一屏。通过菜单选择按照工资卡号还是姓名浏览。如果按照卡号浏览,则显示的记录按照卡号升序输出;按照姓名浏览则按照字典序输出(调用排序模块的排序功能)。(5)排序模块排序模块提供菜单选择,实现按照工资卡号升序、实发工资降序以及姓名字典序排序。排序方法可以选择冒泡排序、插入排序、选择排序等。(6)查询模块7
实现按照工资卡号和姓名的查询,采用基本的查找方法即可。(7)统计模块输入起止月份,按照职工卡号和月份查询记录,把起止月份之间的实发工资金额累加。附加:思考在数据输入及添加模块尾部添加排序功能,使得文件中的数据按照卡号排序。这样在查询模块和统计模块可以采用二分查找以提高效率。
二、校际运动会管理系统1、需求分析要记录比赛结果,可以查看参赛学校的信息和比赛项目信息,因而要实现文件的输入和输出功能;用户可以查询各个学校的比赛成绩,查看参赛学校信息和比赛项目信息等,因而要提供查找和显示功能;另外还应该提供键盘式选择菜单以实现功能选择。2、总体设计系统被设计为信息输入模块、比赛结果录入模块和查询模块三个模块。3、详细设计数据结构采用结构体数组,包括学校、项目、运动员三个结构体。Struct athlete{Char name[20];
//年龄Char From[20];
//来自学校}A
//运动员结构体Struct item{Char name[20];
//项目名Int*
//在运行时根据用户的输入动态分配空间(各项目名次取法不同,weight所指空间依次存放第一名得分、第二名得分等)Athlete*
//指向获奖运动员信息的指针}I
//项目结构体Struct university{Char name[20];
//学校名Item *
//竞赛项目指针,根据用户输入动态分配空间I
//学校得分}U
//学校结构体Item TotalItem[ItemNum];
//项目结构体数组Uni AllUni[UniNum];
//学校结构体数组(1)主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。(2)信息输入模块输入参赛学校总数,M-男子参赛项目数,W-女子参赛项目数。把参赛学校信息和项目信息以及运动员信息录入文件(fwrite),建立三个文件。例如第i个项目:Scanf(“%s”,TotalItem[i].name);
//输入项目名Ch=Getchar();
//通过输入1,2,3来选择项目名次取法8
Switch(ch){Case ?1?: n=5;Case ?2?: n=3;Case ?3?: printf(“取前几名?”,&n);Default:}TotalItem[i].weight=new int[n];TotalItem[i].athlete=NULL;
//指向获奖运动员信息,初始化为空然后写入文件:fp=fopen(“item.txt”,”wb”);fwrite(&TotalItem[i],sizeof(Item),1,fp);学校信息和运动员信息的录入与此类似。(2)比赛结果录入模块通过菜单选择进入比赛结果录入模块,更改TotalItem[i].athlete的值,并把获奖名单保存到项目文件中。项目文件格式为:项目名
项目权值(按照第一名、第二名…给出权值) 获奖运动员信息(按照第一名、第二名…给出)(3)查找模块查找学校信息文件,生成团体总分报表;用基本查找算法查询参赛学校信息(按照校名查找)或者比赛项目信息(按照项目名)。
三、学生学籍信息管理系统设计1、需求分析学生基本信息、学生成绩基本信息要存入文件当中,因而要提供文件的输入输出操作;查询功能要求提供查找和显示操作;删除功能要求实现删除操作;排序功能要求实现排序操作;另外还应该提供键盘式选择菜单以实现功能选择。2、总体设计整个系统可以设计为数据录入模块、数据查询模块、数据删除模块和数据排序模块。3、详细设计设计学生基本信息和学生成绩基本信息结构体数组。Struct{int stuNo;
//学号char name[20];
//姓名char sex[2];
//电话号码}StuI
//学生基本信息结构体Struct{int stuNo;
//学号char courseNo;
//课程编号char courseN //课程名称int creditH //学分Int triG //平时成绩9
Int experiG //实验成绩Int examG //卷面成绩Float totalG //综合成绩Float finalCreH //实得学分}StuGraI //学生成绩基本信息结构体(1)数据录入模块学生基本信息文件可以在磁盘建立,采用写文件方式录入学生成绩基本信息。综合成绩和实得学分通过计算得到。(2)查询模块通过菜单选择查询功能,再选择学生基本情况查询和成绩查询,若选择前者,再通过菜单选择学号、姓名或宿舍号码,按照基本查找算法查找A.TXT,然后把查找结果输出若选择后者,则先在A.TXT中查找学号对应的姓名,再在B.TXT中查找该学生的课程情况,并统计科目和实得总学分,输出结果。(fread和查找算法的应用)(3)删除模块通过菜单选择删除学生的功能,输入要删除学生的学号,则分别在A.TXT和B.TXT中查找该生信息,删除之;或者输入学生的姓名,先在A.TXT中得到该生的学号,删除该生信息,再在B.TXT中删除该学号对应的信息。注意:C语言中没有直接删除信息的函数,需要自己实现,可以采取读出数据,判断数据(如果不删除,则进入缓冲区,否则删除),写入数据(把缓冲区中的数据写入文件)的步骤进行。(4)排序模块通过菜单选择排序依据,采用排序算法(冒泡、插入、选择等)对数据进行排序并输出结果。首先要读文件(fread)。
四、通讯录管理系统1、需求分析信息记录要存放到文件中去,因而要实现文件的输入输出操作;要实现数据的插入、删除、修改和显示功能,因而要实现插入、删除、修改和显示操作;要实现按人名或电话号码进行查询的功能,因而要提供查找操作;另外还应该提供键盘式选择菜单以实现功能选择。2、总体设计整个系统可以设计为数据插入模块、数据修改模块、数据删除模块、数据显示模块和数据查询模块。3、详细设计采用结构体数组。Struct{Char name[20];
//人名Char post[20];
//工作单位I
//电话号码Char email[20];
//email地址}TelI
//电话簿信息结构体TelInfo telInfo[N];
//电话簿信息结构体数组(1)数据插入模块输入数据,然后采用追加方式写文件(以”wb”方式打开文件,再用fwrite写入)。10
(2)数据修改模块通过菜单选择修改姓名、电话号码。可以把要修改的姓名或电话号码存储在临时变量里面,然后读文件,找到要修改的记录,把该记录重新以新的值写入。(3)数据删除模块删除一条记录,则输入要删除的人名,然后读文件,把文件中读出来的记录的人名与待删除的人名比较,如果不匹配,则重新写入文件;否则舍弃不再写入文件。(4)数据显示模块采用分屏显示,每屏10条记录。用fread或fscanf读文件,输出结果。(5)数据查询模块用基本查找算法对电话簿实现按人名或电话号码的查询(读文件,把读出记录得相应字段与输入的查询字段比较),并把结果输出。
五、投票程序1、需求分析实现键盘输入投票人数和投票结果,进行统计时实现排序功能,输出结果。2、总体设计该程序可以分为数据输入部分和统计部分。3、详细设计采用结构体:Struct{C
//得分}Candidates[N];
//候选人结构体数组这里#define N 3;采用二维数组,则行方向对应一张投票,列方向对应各候选人得分。Candidate[M][N];(1)输入部分Char tmp[3];
//存放投票的中间变量输入投票人数n;For(i=0;i&n;++i)
//投票{Scanf(“%s”,tmp);If(tmp[0]==tmp[1]||tmp[1]==tmp[2]||tmp[0]==tmp[2])Printf(”该票无效!”);Else{Tmp[0]号候选人加5分;Tmp[1]号候选人加3分;Tmp[2]号候选人加2分;}}(2)统计部分对候选人按照他们的得分排序(冒泡、插入、选择等),然后比较前两名得分是否相同。如果相 11
同,则显示“重新投票”;否则显示三个候选者得分并输出“祝贺X当选冠军”,X为最高分候选者。
六、学生选修课程系统设计1、需求分析系统以菜单方式工作,因而要提供键盘式选择菜单以实现功能选择;由于课程信息要用文件保存,因而要提供文件的输入输出操作;由于要浏览信息,所以要提供显示功能;要实现查询功能,故要提供查找操作。2、总体设计整个系统可以设计为信息输入模块、信息查询模块以及信息浏览模块。3、详细设计数据结构采用结构体,这里采用课程信息结构体和学生选课信息结构体。Struct{Char courseCode[10];
//课程编号Char courseName[20];
//课程名称Char courseType[10];
//课程类别Int
//总学时Int
//授课学时Int
//上机学时Float creditH
//开课学期}CourseInfo[N];
//课程信息结构体Struct{Int stuNo;
//学号;Char courseCode[10];
//课程编号}StuCourInfo[N]; //学生选课信息结构体(1) 信息输入模块从键盘输入课程信息和学生选课信息,写入文件。(fwrite, fprintf)(2)信息浏览模块分屏显示课程信息,每屏10条课程记录,按任意键继续。从文件中读数据(fread,fscanf),然后再显示。(3)信息查询模块通过菜单选择查询字段,可以按照课程编号、课程名称、课程性质、开课学期、学分对课程信息文件进行查找,查找算法可以选择基本查找、二分查找等算法。可以通过菜单选择课程编号,在学生选课信息文件中查询该课程学生选修情况。
七、飞机订票系统设计1、需求分析航班信息用文件保存,因而要提供文件的输入输出操作;航班信息浏览功能需要提供显示操作;要查询航线需要提供查找功能;另外要提供键盘式选择菜单以实现功能选择。2、总体设计该系统设计为航班信息输入模块、航班信息浏览模块和航线查询模块。3、详细设计12
数据结构采用结构体数组,设计航班结构体如下:Struct{Char flightNo[10];
//航班号Char start[10];
//起始站Char end[10];
//飞行时间Int
//预售票总数Int
//已售票总数}Flight[N];
//航班结构体(1)航班信息输入模块采用fwrite或fprintf把航班信息写入航班信息文件。(2)航班信息浏览模块分屏显示航班信息,每屏10条记录,按任意键显示下一屏。读文件(采用fread或fscanf)然后显示即可。(3)航线查询模块通过菜单选择查询方式,提供按照航班号、起点站、终点站和飞行时间查询。采用基本查找算法即可。
八、职工信息管理系统设计1、 需求分析系统要以菜单方式工作,因而要提供键盘式选择菜单以实现功能选择;职工信息采用文件保存,因而要提供文件的输入输出操作;要实现职工信息的浏览功能,则要提供信息显示操作;要实现职工信息查询功能,则要提供查找操作(按学历查询和按职工号查询两种查询方式);要实现职工信息删除、修改功能则要提供文件记录的删除、修改操作。2、 总体设计整个系统被设计为职工信息输入模块、职工信息浏览模块、职工信息查询模块和职工信息删除与修改模块。3、 详细设计数据结构采用结构体,设计职工信息结构体:Struct employeeInfo{Char jobNo[10];
//职工号Char name[20];
//年龄Char eduLevel[10];
//地址Char tel[11];
//电话}EmpI
//职工信息结构体(1)职工信息输入模块采用fwrite或fprintf把职工信息写入航班信息文件。(2)职工信息浏览模块13
分屏显示职工信息,每屏10条记录,按任意键显示下一屏。读文件(采用fread或fscanf)然后显示即可。(3)职工信息查询模块通过菜单选择查询方式,提供按学历查询和按职工号查询两种查询方式。采用基本查找算法即可。(4)职工信息删除与修改模块通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。修改操作于删除操作类似,只是判断是否是要修改的记录,如果是,则把修改后的记录写入文件,否则直接写入文件。
九、图书信息管理系统设计1、 需求分析系统以菜单方式工作,提供键盘式选择菜单以实现功能选择;图书信息采用文件保存,因而要提供文件的输入输出操作;要实现图书信息的浏览功能,则要提供信息显示操作;要实现图书信息查询功能,则要提供查找操作(提供按书名、作者名查询两种查询方式);要实现图书信息删除、修改功能则要提供文件记录的删除、修改操作。2、 总体设计整个系统被设计为图书信息输入模块、图书信息浏览模块、图书信息查询模块和图书信息删除与修改模块。3、 详细设计数据结构采用结构体,设计图书信息结构体:Struct{Char loginNo[10];
//登录号Char name[20];
//书名Char author[20];
//作者名Char classNo[10];
//分类号Char publisher[10];
//出版单位Char pubTime[20];
//出版时间F
//价格}bookI
//图书信息结构体(1)图书信息输入模块采用fwrite或fprintf把图书信息写入图书信息文件。(2)图书信息浏览模块分屏显示图书信息,每屏10条记录,按任意键显示下一屏。读文件(采用fread或fscanf)然后显示即可。(3)图书信息查询模块通过菜单选择查询方式,提供按书名查询和按作者名查询两种查询方式。采用基本查找算法即可。(4)图书信息删除与修改模块通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。修改操作于删除操作类似,只是判断是否是要修改的记录,如果是,则把修改后的记录写入文件,否则直接写入文件。
十、实验设备管理系统设计1、 需求分析实验室设备信息用文件存储,故要提供文件的输入输出操作;要能够完成设备的录入和修改,需要提供设备添加和修改操作;实现对设备进行分类统计,需要提供排序操作;实现对设备的查询需要提供查找操作;另外还要提供键盘式选择菜单以实现功能选择。2、 总体设计整个系统被设计为实验设备信息输入模块、实验设备信息添加模块、实验设备信息修改模块、实验设备分类统计模块和实验设备查询模块。3、 详细设计数据结构采用结构体,设计实验设备信息结构体:Struct equipmentInfo{Char equipCode[10];
//设备编号Char equipType[20];
//设备总类Char equipName[20]; //设备名称float equipP
//设备价格char buyDate[20];
//设备购入日期
//是否报废,0表示没有报废,1表示报废char scrapDate[20];
//报废日期}EquI(1) 实验设备信息输入模块采用fwrite或fprintf把实验设备基本信息写入实验设备信息文件。(2) 实验设备信息添加模块添加设备时,采用fwrite或fprintf把添加的设备基本信息采用追加的方式写入设备信息文件。(3) 实验设备信息修改模块修改设备信息,则需要读文件,判断信息是否是要修改的设备的信息,如果是,修改,重新写入文件;否则直接重新写入文件。(4) 实验设备分类统计模块根据给定的分类标准(设备种类、设备名、设备购入日期)对文件的记录进行排序,排序方法可以选择冒泡、插入、选择等方法。然后采用查找算法查找同类设备,采用基本的数学运算即可统计同类设备的相关信息,比如数量、价钱等。(5) 实验设备查询模块通过菜单选择查询方式,提供按设备编号、设备种类、设备名称、设备购入日期和设备状态为正常(scrap字段值为0)这些查询方式查询。采用基本查找算法即可。
十一、手机通信录管理系统设计1、 需求分析手机通信录采用文件存储,因而要提供文件的输入输出操作;查看功能要提供显示操作;增加新数据的过程要检查是否有重复,存储空间是否已满,且录入的新数据能按递增的顺序自动进行条目编号,因而要提供查找、统计和排序操作;要提供修改与删除和自动调整编号功能;另外还要提供键盘式选择菜单以实现功能选择。2、 总体设计整个系统可以设计为数据查看模块、数据添加模块、数据修改模块、数据删除模块。15
3、 详细设计数据结构采用结构体,设计通信录结构体:Struct communicationMethod{Char name[20];
//姓名Char tel[12];
//电话号码I
//分类:0表示办公类,1表示个人类,2表示商务类Char email[20];
//电子邮件地址I
//条目编号}ComM(1)数据查看模块通过菜单选择查看信息,然后选择办公类、个人类或者商务类,则显示所选类信息列表。这是一个查找与显示的过程,在手机通信录文件中查找type类型符合的记录,输出。(2)数据添加模块首先,查看信息条数是否超过15,如果超过,则提示“通信录已满!”,返回上级菜单;否则,提示输入一条记录,将对通信录执行查找操作,查找姓名和电话号码字段,如不存在相同的记录,则用fwrite以追加方式写入文件,并给记录的条目字段赋值(在检查有无重复的过程中启动计数),否则提示“数据已经存在,请重新输入或者取消!”。(3)数据修改模块修改通信录信息,则需要读文件,判断信息是否是要修改的信息,如果是,修改,重新写入文件;否则直接重新写入文件。(4)数据删除模块通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。
十二、简单的行编辑器(1人)问题分析:采用二维数组处理,设立二维数组edit[M][N]。M行,每行可存N个字符。用getchar()输入,单词之间用空格隔开(空格也会作为字符存入),当捕获回车字符(‘\n’)时则换行即M++。采用文本形式存储,只需要提供写文件操作即可(fprintf,fwrite的用法)。查找、替换、修改操作对文件进行。文件的查找、替换和修改操作可以参考前面的介绍。
十三、组数游戏(1人)问题分析16
(1)输入正整数的个数n,输出n个数连接成的最大的多位数。找出n个数中最大数字的位数,然后将所有的数字通过后面补零的方式扩展成为最大位数。把变换后的n位数从大到小排序,然后把添加上的零去掉,按顺序输出的序列即为所求的最大数字。(2)数据结构采用结构体,由于正整数的位数不确定,可能非常大,所以数据类型采用字符数组。 Struct{char data[20];
//数据char ext_data[20];
//扩展数据}Elem[N];
//结构体数组N可以在宏定义中定义:#define N 20(3)算法流程输入正整数个数n;Max=0;
//Max存储最大位数//输入正整数并计算最大位数For (i=0;i&n;++i){输入Elem[i].Strcpy(Elem[i].ext_data,Elem[i].data);Tmp=strlen(Elem[i].data);
//计算输入数字的位数If(Tmp&Max)Max=T}//计算扩展数字For (i=0;i&n;++i){tmp=strlen(Elem[i].data);
//计算输入数字的位数m=Max-
//m为需要补0的个数定义一个m个?0?的字符串tmp_str;Strcat(Elem[i].ext_data,tmp_str);}//排序任选一中排序算法(冒泡、插入、选择等)对数字结构体数组按照ext_data从大到小排序。
//输出按序输出结构体数组中data数据。
十四、机房机位预约模拟1、数据结构顾客信息结构体:Struct CusInfo{Char name[20];//顾客姓名I
//性别Char tel[11];
}CI机位信息结构体:Struct{Int
//机位状态,每2个小时为一个时间段,08:00-20:00共6个时间段。0表示有空机位,1表示没有空机位CInfo waitlist[6];
//各个时间段的运行客户III
//日期}PCIPCInfo
info[100];
//存放100天的机位信息2、具体实现(1)查询输入时间,则遍历info数组,查看日期(year/month/day),如果日期匹配,则把机位信息输出。(2)机位预订输入日期(或时间段)查询机位信息文件,如果日期符合,再查看状态字段,若相应字段为0,则预约(即把该用户信息加入写入机位waitlist相应时间段中);若相应字段为1,则查看本天其他时间段,寻找最近空时间段。如果用户要求在非空时间上机,则查找info数组中该时间段为空的元素,把该时间段的状态字段设为1,把用户信息加入机位当天waitlist相应时间段中。(3)退出预订根据预订日期和客户信息找到预订信息,把客户信息删除,并把该时间段的状态置为0。(4)查询输入日期和时间段,查看该时间段的状态,如为1,则把相应时间段的运行客户信息打印输出。如为0,则显示“该时间段空闲!”。
十五、学生成绩管理程序(难)1、 需求分析学生纪录用文件存储,因而要提供文件的输入输出操作;要实现插入一个新的学生纪录,因而要提供文件的插入操作;要实现学生纪录得修改和删除,以及登记成绩和修改成绩,因而要提供文件纪录的修改和删除操作;要浏览全班成绩,故要提供显示操作;计算学生总成绩需要提供简单的统计操作;要按学号排序输出全班成绩表,因而要提供排序操作;另外要提供键盘式选择菜单以实现功能选择。2、 总体设计整个成绩管理系统设计为数据插入模块、数据修改模块、数据删除模块、成绩登记模块、成绩修改模块、数据浏览模块、成绩统计模块、成绩表查看模块。3、 详细设计数据结构采用结构体,设计学生纪录结构体:Struct studentRecord{Char stuNo[10];
//学号Char name[20];
//数学Float E
//物理}SR;(1)主函数输出提示菜单:插入学生纪录
修改学生纪录
删除学生纪录
登记成绩修改成绩
浏览学生纪录
查看总成绩
查看成绩表(2)数据插入模块采用追加的方式用fwrite或fprintf把学生成绩信息写入学生成绩信息文件。(3)数据修改模块通过菜单选择修改学生纪录,用fopen打开该文件,从文件中读一条记录,判断是否要修改,如果是,则修改后重新写入文件;否则直接重新写入文件,读下一条记录。(4)数据删除模块通过菜单选择删除学生纪录,用fopen打开该文件,从文件中读一条记录,判断是否要删除,如果是,则舍弃;否则重新写入文件,读下一条记录。(5)成绩登记模块类似数据修改模块,只是修改字段为各个科目的成绩。(6)成绩修改模块参考数据修改模块。(7)数据浏览模块用fscanf或fread读取学生成绩信息文件,分屏输出,每屏10条纪录。(8)成绩统计模块用fscanf或fread从学生成绩信息文件中读取一个学生纪录,计算该学生的总成绩(简单的成绩相加),输出,然后读取下一条纪录。(9)成绩表查看模块建立结构体数组Struct{SR
//学生纪录F
//总成绩}stu[N];从学生成绩信息文件中读取各个纪录,total中存放计算得到的总成绩。然后采用排序算法(冒泡、插入、选择等)对数组按照总成绩进行排序。最后顺序输出。
十六、服装销售系统(难)1、需求分析用户与商品信息要采用文件存储,因而要提供文件的输入输出操作;实现用户的添加、修改、删除,商品信息的添加、修改、删除、查找等需要提供信息的添加、删除、修改与查找操作;实现商品浏览功能的实现需要实现显示操作;另外还要提供键盘式选择菜单以实现功能选择。2、总体设计整个服装销售系统被设计为管理员模块、店长模块、销售员模块、商品模块等,如下图所示:另外还要实现各用户自身信息的管理。19
3、详细设计数据结构采用结构体,构造结构体如下:Struct goods
//商品{Char name[10];
//商品名Char code[10];
//商品代码Char producer[10];
Struct administrator
//管理员{Char ID[10];Char password[10];…
//其他信息
Struct shopkeeper
//店长{Char ID[10];Char password[10];…
//其他信息}S
Struct seller
//销售员{Char ID[10];
//营业ID号Char name[10];
//姓名Char ID[10];
//所属店长ID号Goods *
//指向该销售员销售的商品信息…
//其他信息}S
Struct goods_report
//商品报表{G
//营业员Char sell_data[20]; //出售日期}先建立文登录系统时,通过菜单选择登录身份,然后提示输入用户ID和密码。如果以管理员身份登录,则在Admin.txt文件中查找(采用基本的查找算法)输入的用户ID和密码是否存在,如果存在,则允许进入,显示选择菜单:修改密码
商品信息;否则,显示“输入的用户名或密码错误!”,返回上级菜单。店长与销售员登录系统与此类似,店长登录成功后显示选择菜单为:修改密码
修改个人信息
商品储备信息。销售员登录成功后显示选择菜单为:商品浏览
本月报表密码修改与个人信息修改既是写入新的密码、个人信息,覆盖掉原来的,就是文件的读写操作。在登录成功后,就标志出登录人员的纪录位置,这样修改信息时,可以直接定位到修改记录的位置。管理员添加用户,就是执行文件写操作,采用追加的方式把用户信息写入用户信息文件(根据添加的用户身份选择写入Shopkeeper.txt还是Seller.txt)。删除用户操作,读取用户信息文件,如果读出的用户不是要删除的用户,则直接重新写入文件,否则,舍弃。管理员选择用户信息,将进入用户信息修改和用户信息统计的选择。用户信息修改操作,即查找要修改的用户信息文件,找到要修改的用户,写入修改后的信息覆盖掉原始信息。用户信息统计操作,读用户信息文件,比较统计信息字段,符合统计要求则计数加1,最后输出符合条件的记录数(也可以把符合条件的记录信息完全输出)。管理员选择商品信息,则可以选择商品信息添加、修改、删除、查找、统计,商品信息的添加、修改、删除、统计操作与用户信息的相应操作类似。查找操作只需采用基本的查找算法查找商品信息文件即可。店长修改密码和修改个人信息操作与管理员相应操作类似。店长的商品信息可以选择商品信息修改和商品信息统计,此类操作与管理员的相应操作相同。 店长选择查看报表,则显示选择菜单:日报表
商品销售量报表
营业员业绩报表。查看日报表,根据输入的日期在商品报表文件中查找,把出售日期与输入日期符合的记录输出。查看月报表操作类似,查找商品报表文件中商品出售日期在输入月份之间的记录输出。商品销售量报表,这是一个统计的过程,查找商品报表,统计同一商品的销售量(月销售量、年销售量)。查看营业员业绩报表,则读销售员信息文件,把信息打印输出即可。21
店长查找浏览修改商品储备信息,查找与修改操作可以参考管理员对商品的查找与修改操作,浏览操作就是把商品储备信息分屏输出,每屏10条记录,按任意键继续。这些操作在该店长对应的商品储备信息文件中执行。[注:每个店长对应一个商品储备信息文件,里面存放该店储备的商品信息。文件格式:店长ID商品名
价格?]销售员可以选择商品浏览、查找、出售商品、察看自己本日报表、本月报表。商品浏览、查找以及查看自己本日报表、本月报表可以参考前面相关操作。出售商品操作执行的动作是:在本店的商品储备文件中查找要出售的商品,如果存在,则出售,在商品报表文件和销售员销售文件中添加该商品信息,并把该商品信息从商品储备文件中删除。
十七、电影俱乐部(难)1、 需求分析DVD信息和俱乐部会员信息用文件存储,因而要提供文件的输入输出操作;要注册新会员,因而要提供文件的添加操作;实现按月缴纳费用,因而要提供文件的修改操作;要浏览信息因而要提供显示操作;要实现查询则要提供文件的查找操作;另外要提供键盘式选择菜单以实现功能选择。2、 总体设计整体设计为会员注册模块、会员交费模块、会员租用DVD模块、会员归还DVD模块、信息浏览模块和信息查询模块。3、 详细设计采用文件管理信息,建立两个文件:DVD信息文件和会员信息文件。数据结构采用结构体://DVD信息结构体Struct DVDInfo{Char No[10];
//DVD编号Char name[10]; //DVD名字I
//DVD状态:0表示已借出,1表示可出借}DI;//会员信息结构体Struct MemberInfo{Char No[10];
//会员编号Char name[10]; //会员姓名Char password[20]; //会员密码F
//账户余额DI
borrowDVD[3];
//所借DVD信息;I
//表示租用DVD的数目,取值为0-3}MI;分析:建立DVD文件和会员信息文件,输出菜单:新用户注册[N]
直接登录[Enter]。如果是新用户注册,则进入用户注册模块。如果直接登录,则提示输入用户名和密码。普通会员正确登录后显示:租用DVD[H]
归还DVD[R]
缴纳费用[P]
账户信息[D]。按相应的提示键将进入相应的模块。管理员 22
登录则显示:DVD信息[D]
会员信息[M]
交易信息[T]。DVD信息查看就是分屏输出DVD文件中的记录,会员信息就是分屏输出会员信息文件中的记录,交易信息则输出租用DVD数不为0的会员信息。(1)会员注册模块提示输入用户信息:会员编号(昵称),会员姓名,密码。将把新的会员信息添加到会员信息文件中,并把账户余额初始化为0,所借DVD信息初始化为空。然后系统显示提示信息:缴纳费用?[Y/N]。按Y键将进入会员交费模块,N则返回系统初始界面。(2)会员交费模块提示输入交费金额,则在会员信息文件中修改其账户余额。(3)会员租用DVD模块可以通过菜单选择浏览DVD信息或者租用。浏览DVD信息调用信息浏览模块,租用则首先查看自己的余额,如果&0,则查看状态,如果state&3,则允许出借,提示输入租用的DVD编号,在会员信息文件中加入该DVD信息,state++。并在DVD信息文件中把该DVD状态改为已借出。(4)会员归还DVD模块提示用户输入要归还的DVD编号,把该用户记录的该DVD信息初始化为空,state--。同时在DVD信息文件中把其状态改为可供出借。(5)信息浏览模块浏览DVD信息,则采用fread或fscanf从DVD信息文件中读记录,分屏输出。浏览会员信息文件,则读会员信息文件,输出。(6)信息查询模块会员对自己账户状况的查询,则输出其账户信息即可(登录时在会员信息文件中找到自身信息,事先读到临时变量中)。管理员对所有交易情况的查看,则查找用户信息文件,如果用户的staet!=0,则输出用户信息。十八、编制一个五子棋游戏(难)编程模拟完成五子棋游戏。1. 初始化功能,初始化屏幕,画出一个围棋棋盘,其中player1先行。2. 实现下棋操作,用上下左右键在围棋盘上移动,按确认键后确定落棋。3. 程序可以对双方下棋的结果做出判断,并显示获胜信息。4. 可以提示轮到哪方下棋(player1或player2)。注意该程序需要用到图形功能,需自学图形系统函数和键盘输入。
十九、文件移位加密与解密(1人)要求实现1)文件加密;2)文件解密。备注:将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥(用户从键盘输入)将对应字符进行移位操作即可,解密时移动相反。例如:加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后移动5们(注:z后接a)可得到密文(乱码)fghijkl;对该文件解密:文件内容为fghijk1,密钥为5,则有fghijk1每个字母向前移动5位(注a后接z),可得到原文abcdef。
二十、“袖珍计算器设计”。(1人)要求实现:计算加、减、乘、除、乘方、开方。在用户界面上设置两个编辑框,分别用于输入左操作数和右操作数,两个静态文本分别用于显示“=”号和运算结果,其中用六个单选按钮用于选择运算符。能够存储操作数、操作码和结果;执行算术操作;实现控制功能,如清除、全部清除和改变符号;根据需要产生在计算引擎中存储的量;对外报告错误时,保存内部状态。实现扩展1:接收键盘输入;识别操作和数字操作数;从用户输入产生下一个操作和操作数;显示操作码、操作数、结果、错误;限制错误的输入。实现扩展2:建立合适大小的模拟LCD窗口;在LCD窗口中显示给定的字符串;显示给定的单一字符操作码;清除LCD窗口。24
上一篇: 下一篇:
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 幂的乘方计算题 的文章

 

随机推荐