自己制作一个计时器、倒计时器

发布于:2021-07-20 04:34:39

计时器和倒计时器的设计与实现

摘 要
时间的观念在现在的时代越来越重要,考试要定时完成,炒菜做饭要计时完成,甚至连煮包泡面都要计时才能更加美味。制作计时器对我们越来越重要。


本计时器中的倒计时使用的for函数输出把时间用00:00:00这种格式输出,使用Sleep来让整个程序暂停一秒,来完成计时一秒的功能,然后用/r覆盖掉上一行输出一秒后的剩余倒计时,在倒计时变为00:00:00时,输出时间到并用/a响铃。计时器采用类似的计时方法,不一样的是这次使用system(“cls”)清屏,然后重新输出下一次时间,用函数kbhit确定是否有键盘敲击,如果有将其录入,当这个值和所确定的停止值相同时,将退出for函数,停止计时,并输出时间。


本程序的编写环境是VC++6.0,目前此程序实现了计时器和倒计时器的功能。每次只能执行一个功能。
关键词: vc6.0,C语言,函数,计时器,倒计时器。



1 引言
1.1关于工程实践

在我看来,整个工程实践中是让我们了解程序设计的整个流程,以及怎么实现这项功能,如何利用所学的c语言知识,来完成一个属于自己的小程序,小软件,在其中遇到的问题将其总结,最后将成为很好的学*笔记。


1.2 课题背景

经过一个学期的C语言课程学*,我们已经掌握了基本的C语言编程,而如何使用这些编程知识,让其变得有用十分重要。于是我们想到了开发一个计时倒计时的小程序。


在人们生活中,时间是很重要的一种东西。无论什么都离不开时间。倒计时和计时更是如此。通过倒计时计算考试时间,计算煮饭煮菜的时间,通过计时计算跑步时间,计算做题讲课的时间。时间观念对我们来说越来越重要,制作计时器对我们也越来越重要,所以让我们来看看如何制作一个计时装置,即一个计时器和一个倒计时器。


2 需求分析
2.1程序目标

完成一个简单的计时器和倒计时器,要求实现最基本的计时和倒计时程序,当用户打开程序后通过提示输入数字1 2 3进行三种操作。


(1)输入数字1进行倒计时操作,通过输入00:00:00这种格式的时间倒计时,在时间到的时候提示“时间到!”,同时响铃。
(2)输入数字2进行计时器操作,通过提示进入计时程序,并通过按Esc键停止计时,并输出计时时间。


2.2 开发环境及工具
2.2.1 运行环境

Windows10
也可以在一台内存大于800k内存的位系统电脑运行。


2.2.2 编程软件介绍

Microsoft Visual C++60.:调用系统文件#include 实现输入输出、#include 使用退出exit函数、#include 读取系统时间通过结构体time_t实现、#include


3 系统总体结构设计
3.1 基本简介

本程序分为四个模块,除了程序的main函数以外,分别分为面板,计时和倒计时三部分。其中面板模块就是呈现给用户的主界面,计时模块负责实现记录在给定时间之间的时间长度,以及开始计时和结束计时的输入输出,而倒计时则是专门负责在倒计时的时间录入和时间到时的提示以及响铃。
下面是程序流程图:


3.2 系统功能模块及设计
3.2.1 数据结构设计

主体程序中设计除了选择以外,输出“输入错误”的程序后可以重新输入选择。



3.2.2 面板模式介绍

进入程序后,输出:


“计时器&&倒计时器
本程序是由网络空间安全学院学生工程实践研发
==== 计时方式 ====
1. 倒计时器
2. 计时器
请输入你选择的代号:”


几行字样。


通过用户输入1 或 2来控*爰剖逼骰故堑辜剖逼鳎绻没Р恍⌒氖淙氪砦蠼崾尽安缓靡馑佳〈砜﹡”并在此进行选择,面板模块只是起到将其他模块链接起来的作用,在后期需要追加更多功能时也可以由面板模块连接。


3.2.3 倒计时器模块介绍

倒计时器将承担输入时间并进行倒计时的功能,用户将在此模块界面直接输入格式为“00:01:09”的时间进行倒计时,输入正确时间正确,将输出“倒计时开始!”,当时间变成“00:00:00”时,输出“时间到!”并响铃,之后按任意键退出程序。


3.2.4 计时器模块介绍

计时器将承担计算从用户输入开始标记到用户输入结束标记之间的时间的功能,用“计时时长为:00:00:05”的格式输出所计的时间。


4 系统详细设计与实现
4.1界面模块设计与实现

作为最简单的计时和倒计时程序,使用vc6.0的默认程序窗口。


4.2 模块设计与实现
4.2.1主体模块设计与实现

在主体之前定义其他模块的函数。通过while函数实现如果输入错误那么便接受用户的重新输入选择,通过switch函数选择进入计时器功能的函数还是倒计时器功能的函数。作为main函数,在之后追加函数或修改时更加容易。


4.2.2 面板模块设计与实现

进入程序后,由面板模块的函数通过printf函数输出边界图形字符以及欢迎界面,并介绍该程序选择方法(输入数字1 or 2)具体如下图。提示用户进行输入,之后通过while函数和switch函数进行选择。(while函数用于当输入错误时可以重新输入)


4.2.3 倒计时器模块的设计与实现

倒计时器的代码在面部模式的函数中,通过printf输出提示输入倒计时时间(格式:00:01:08),当输入正确后,输出“倒计时开始”并输出“00:01:08”格式一秒一秒减少的时间,当时间变为“00:00:00”时,响铃并输出“时间到!”三字。



4.2.4 计时器模块设计与实现

模块分为两部分,一部分在主体函数里通过输入选择计时模式开始计时,然后进入计时器函数,用Sleep和system(”cls”)和while循环通过(00:00:00)格式下秒数分钟数,进行计时,通过函数kbhit、if、getch停止计时跳出循环,完成计时。



5 系统测试与分析
5.1 测试

根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本或网络的参考下能够修改。主要是*时看书不仔细、不太注意而产生的。如没有注意具体数据使用。


5.2 调试过程中遇到的主要问题

if,while,switch三个循环中容易缺少括号,进行修改后括号更加容易出错。这直接导致在vc中编译时出现很多错误。
time_t结构体出现在#include 头文件里。
头文件用来 kbhit getch
头文件用来 sleep


结论

经过了四个星期的c语言程序设计终于在老师的细心指导和同学的热情帮助下基本完成了计时器和倒计时器的设计修改任务。
程序设计期间,学*到很多课堂上没有的知识,还积累了很多实践经验,增强了动手能力和解决实际问题的能力。我通过网上查找到很多成功的关于计时器倒计时器的程序,通过对那些已经成功的程序进行分析找到自己的设计思路,制定设计流程。通过对网现存的计时器倒计时器的比对,我发现我自己做的程序显得十分简陋,但是这个程序也是我通过完整的设计流程设计出的程序。
限于作者知识水*和经验有限,此程序还有许多有待完善和改正的地方,恳请各位老师和读者批评指正。


参考文献

[1] 黄明等.21世纪进阶辅导 C语言程序设计.大连理工大学出版社,2005
[2] 马靖善等.C语言程序设计.清华大学出版社,2005


附录:
程序下载:

程序下载地址(exe)


代码

#include

#include

#include

#include//kbhit getch

#include //用于sleep

int daojishi();

int jishiqi();

int main ()
{
int c;

printf("????????????????????????????
");
printf("? ?
");
printf("? ?
");
printf("? ?
");
printf("? 计时器&&倒计时器 ?
");
printf("? ?
");
printf("? ?
");
printf("? ?
");
printf("????????????????????????????
");


printf("本程序是由网络空间安全学院学生工程实践研发
");


printf("====计时方式====
");

printf("1. 倒计时器
");

printf("2. 计时器
");


printf("请输入你选择的代号:");

scanf("%d", &c);


while(c!=1&&c!=2){

printf("不好意思选错咯~
");

printf("====计时方式====
");

printf("1. 倒计时器
");

printf("2. 计时器
");

printf("请输入你选择的代号:");

scanf("%d", &c);
}


switch(c)
{
case 1:
daojishi();

break;

case 2:
jishiqi();

break;

}

return 0;

}




int daojishi()
{
int i,j,k;

int hour=0,min=0,sec=0;


printf("请输入倒计时时间(例如:01:26:30):");


scanf("%d:%d:%d", &hour, &min, &sec);


if(hour>24 || hour<0 || min>60 || min<0 || sec>60 || sec<0)
{

printf("输入有误!
");

return 0;

}

printf("倒计时开始!
");



for(i=hour; i>=0; i--)
{

for(j=min; j>=0; j--)
{

for(k=sec; k>=0; k--)
{

printf(" %02d:%02d:%02d", i, j, k);

Sleep(1000);

}

sec = 59;

}

min = 59;

}

printf("a
时间到!
");//倒计时结束后响铃

exit(0);

}



int jishiqi()
{

int hour = 0, min = 0, sec = 0,n;

while (n!=32)
{

if(kbhit()){//键盘敲击 检查当前是否有键盘输入,如果有则赋值给n

n=getch();

while(n==32){

exit(0);
}

}


Sleep(1000);//暂停1s

system("cls");//清屏


printf("????????????????????????????
");
printf("? ?
");
printf("? ?
");
printf("? ?
");
printf("? 计时器&&倒计时器 ?
");
printf("? ?
");
printf("? ?
");
printf("? ?
");
printf("????????????????????????????
");


printf("本程序是由网络空间安全学院学生工程实践研发
");


printf("====计时方式====
");

printf("1. 倒计时器");

printf("
");

printf("2. 计时器");

printf("
");

printf("请输入你选择的代号:2");

printf("
");

printf("按空格停止计时");

printf("
");


sec++;


if (sec == 60)
{

min++;

sec = 0;
}
if (min == 60)
{

hour++;

min = 0;
}
if (hour == 24)
{

hour = 0;
}

printf("%02d:%02d:%02d
", hour, min, sec); //%02d输出长度为2,不足2前面补0


if(kbhit()){//键盘敲击 检查当前是否有键盘输入,如果有则赋值给n

n=getch();

while(n==32){

exit(0);
}

}

}

return 0;
}

相关推荐

最新更新

猜你喜欢