急 求篮球计数器设计报告
目 录
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"
#define normbut_bor 0x80
#define presbut_but 0xb8
#define normnum_but 0x8e
#define presnum_but 0xb9
#define spebut_char 0x2c
#define win_color 0xf2
#define win_char 0xfb
struct s_button /*按键的结构体*/
{ int sx,sy,ex,ey;
char *head;
int press;
}button[17]; /*图表按键数*/
struct stack /*结构体栈*/
{ char s[20];
int tos,top;
}stack;
char tag;
{
if(stack.tos>0)
stack.s[--stack.tos]='\0';
}
draw_win() /*边框画线窗口*/
{
int i;
char far *t;
char *s="This is a simple calculator!"; /*顶端边框输出的字符*/
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(int sx,int sy,int ex,int ey,int attrib) /*边界线函数*/
{
char far *t,far *v;
int i;
t=vid_mem;
for(i=sx+1;i<ex;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<ey;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(int x,int y,char ch,int attrib) /*字符输入函数*/
{ char far *v;
v=vid_mem;
v+=x*2+160*y;
*v++=ch;
*v=attrib;
}
active_button()/*图表按钮设定函数*/
{ int i;
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(int x1,int y,int x2,char *s,int attrib)
{
char far *v,far *t;
int i;
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() /*计算机运算函数*/
{ float result;
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(int x,int y) /*选择按钮*/
{ int num;
if(y>2)
if(x<2)num=15;
else num=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(int x,int y,char ch) /*计算窗口的输入确定函数*/
{
char far *v;
v=vid_mem;
v+=x*2+y*160; /*光标的位置*/
*v++=ch; /*输入字符随光标的推进*/
*v=0xf0; /*输入数字的颜色*/
window_xy(x,y); /*光标在窗口坐标*/
}
calculator() /*计算器构成的函数*/
{
int a,b;
key_choice(); /*键选择函数*/
}
menu() /*左边窗口函数*/
{ char *j="This is a calculator!
Conductor Teacher:
Cheng YaHui
Student:Chen ChunLin
Number:0841330197
School:ShaoYang College” "
char *s="Use Guide:
Input the number from
the keyborde"
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=(char far *)0xb8000000;
if(!form_win())
{
printf("can't form the device,press any key to leave!...");/*如果不能显示见面窗口,按任意退出。*/
getch();
exit();
}
menu();
calculator();
}
main()
{
init_stack();
vid_mem=(char far *)0xb8000000;
if(!form_win())
{
printf("can't form the device,press any key to leave!...");/*如果不能显示见面窗口,按任意退出。*/
getch();
exit();
} menu();
calculator();
}
4.3程序运行结果
5 课程设计总结
本次C语言课程设计我是完全按照任务书上的要求来完成的,虽然还存在比较多的瑕疵,但我都是一饱满的热情、认真的态度去对待本次课程设计的。通过这次课程设计我对C语言的神奇功能更加佩服(只是一个程序运行后却可以显示出一个计算器来,并且画面比较唯美,且能进行计算),我默默在心里发誓一定要把C语言学好,而且将来我还要想学习C++语言,熟练的掌握编程的方法。本次课程设计,我设计的是一个算术计算器,本程序若完全靠现有的知识,是很难编写出来的,幸亏有我的指导老师成娅辉老师的耐心指导,我才能顺利完成。
参考文献
[1]张福祥. C语言程序设计[M]. 辽宁大学出版社,2008.1
[2] 张福祥,王萌.C语言程序设计习题解答与实验实沈阳:辽宁大学出版社,2008.
[3] 牛莉,刘远军等.计算机等级考试辅导教程[M].北京:中国铁道出版社,2008.
致 谢
这次C语言课程设计让我学到了很多,从编程中可以看出编写一个程序的是一件很难的事。要想成为一名优秀的程序员,需要持久的耐心和深厚的专业知识。虽然这次我这组的课程设计题目不是很难,但要做好也不是一件很容易的事情。我努力使我的设计更加完美,我也有幸得到成娅辉老师的指导,使我能够顺利完成我的课程设计,我同时也要感谢其他给予我帮助的同学,他们使我认识到团队的力量。再一次感谢所有帮助我完成这次课程设计的人。
篮球比赛计时器设计
设计要求:
1.篮球比赛上下半场各24分钟,要求能随时暂停,启动后继续计时,一场比赛结束后应可清零重新开始比赛。
2.计时器由分、秒计数器完成,秒计数器为模60,分计数器应能计至48分钟。
3. “分”、“秒”显示用电子极光管。
4.手动拨动开关来控制计时器的启动/暂停。
半场、全场到自动会有相应的提示就可以了。
国钧醋酸: 1、用Protel软件绘制出本设计任务的电路原理图,并设计印制电路板图及制作印制电路板. 2、连接仿真器,将本设计任务的程序输入计算机,并进行仿真调试及运行. 3、连接编程器,将仿真通过的程序代码下载到单片机中,脱机运行并观察电路运行情况. 4、如把按键去抖动程序删除,即删除LCALL DELAY指令,仿真运行,观察运行情况. 5、如把等待按键释放的程序段删除,即删除“WAIT:MOV A,P0”、“ANL A,#0FH”、“CJNE A,#0FH,WAIT”三条指令,仿真运行,观察运行情况. 6、如按S1键加2分,按S2键加4分,按S3键加6分,按S4键减2分则程序应如何修改,修改后仿真运行,观察运行情况
崇左市14763172686: 急求一个multisim文件:篮球比赛计分显示器的设计1:电路具有加1分,2分,3分功能2:电路具有减分功能3:显示总分功能,用3位LED显示,最高可实现9994:可清零5:24秒倒计时,另外是2只队伍的比赛?
国钧醋酸: 是篮球计分器课业论文吗? 如果是篮球计分器课业论文,网站是 http://www.doc88.com/p-3794781095548.html希望可以帮到你
崇左市14763172686: 设计篮球竞赛30秒计时器 - ?
国钧醋酸: 三、单元译码显示电路——可以用74LS48和共阴极七段LED显示器组成.四、控制电路——完成计数器的直接清零、启动计数、暂停/继续计数、译码显示电路的显示与灭灯、定时时间到报警等功能.五、电路报警电路——可以用发光二极管组...
崇左市14763172686: 单片机篮球比赛计时器课程设计 要求 24秒到计时,计两队得分 - ?
国钧醋酸: 篮球比赛24秒倒计时器的设计 设计制作一个篮球竞赛计时系统,具有进攻方24秒倒计时功能,具体设计要求如下: 1、具有显示 24s 倒计时功能:用两个共阴数码管显示,其计时间隔为1s. 2、设置启暂停/继续键,控制两个计时器的计数,暂...
崇左市14763172686: 数电高手来看下!速求篮球比赛计分牌的电路设计 - ?
国钧醋酸: 我的加1加2加3用的是与非逻辑门实现的,然后用两个74LS283加法器和一个74LS161(用它的预置功能)以及逻辑门组成个位十进制加法器,然后还要用到两个74LS161分别作十位和百位的累加计数,将译码显示器分别接入芯片的输出端即可.
崇左市14763172686: 单片机设计篮球比赛计数器,要求如下 - ?
国钧醋酸: LCD1602的 你可以修改下 以前写的 供你参考#include "at89x51.h"#include "lcd1602.c"#include "timer.c" int m=12,s=0,ss=0; // m:分 s:秒 ss:毫秒 unsigned char j=1,a,b,flag; // j:场次,a:A队得分 ,b:B队得分,flag: 时间开关标志位 ...
崇左市14763172686: 篮球比分计数器怎样设计? - ?
国钧醋酸: 选择TCLS290两个计数器 接减法器 用脉冲控制 很简单啊
崇左市14763172686: 关于篮球的计时计分器的设计论文? - ?
国钧醋酸: 摘 要 本文利用数字电路的知识设计了篮球竞赛30秒计时器,该计时器可通过启动和暂停/连续拨动开关实现断点计时功能,计时器递减到零时,发出光电报警信号.该计时器的设计采用模块化结构,有3个模块即计时模块、控制模块、以及显示...
崇左市14763172686: 设计一个甲,乙两队用的篮球比赛计分器. - ?
国钧醋酸: int X=0 int Y=0 甲乙两个设为常量 设立for循环 当X,Y进去就开始+1 for(X=0 X>0 X++ ){} for(Y=0 Y>0 Y++ ){} 加两个判断语句判断是一分、两分还是三分 if(x=3){ 结果 }else(X=2){ 结果 }else(X=1){ 结果 } if(Y=3){ 结果 }else(Y=2){ 结果 }else(Y=1){ 结果 } 最后 system.out.println(输出)led结果 以上程序是大体路子!!! 才5分不值当出详细过程
崇左市14763172686: 关于篮球计时计分器的设计论文? - ?
国钧醋酸: 应用MDS图的逻辑电路级设计——篮球30秒定时计时器的设计中文摘要】 介绍了用方法直观方便、规范和有章可循的 MDS图方法设计小型数字系统“篮球 3 0秒定时计时器”的具体过程【英文摘要】 This paper introduces a small digital ...