精华内容
下载资源
问答
  • 自己制作一个计时器、倒计时器

    千次阅读 2020-11-30 10:12:00
    时间的观念在现在的时代越来越重要,考试要定时完成,炒菜做饭要计时完成,甚至连煮包泡面都要计时才能更加美味。...本程序的编写环境是VC++6.0,目前此程序实现了计时器和倒计时器的功能。每次只能执行一个功能。

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

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

    本计时器中的倒计时使用的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 <stdio.h>实现输入输出、#include <stdlib.h>使用退出exit函数、#include <time.h>读取系统时间通过结构体time_t实现、#include <Windows.h>

    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 <time.h>头文件里。
    <conio.h>头文件用来 kbhit getch
    <Windows.h>头文件用来 sleep

    结论

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

    参考文献

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

    附录:

    程序下载:

    程序下载地址(exe)

    代码

    #include <stdio.h>
    
    #include <stdlib.h>
    
    #include <time.h>
    
    #include<conio.h>//kbhit getch
    
    #include <Windows.h>//用于sleep
    
    int daojishi();
    
    int jishiqi();
    
    int main ()
    {  
        int c;
    
    	printf("╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗\n");
    	printf("╠                          ╣\n");
    	printf("╠                          ╣\n");
    	printf("╠                          ╣\n");
    	printf("╠     计时器&&倒计时器     ╣\n");
    	printf("╠                          ╣\n");
    	printf("╠                          ╣\n");
    	printf("╠                          ╣\n");
    	printf("╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝\n");
    
    	
    	printf("本程序是由网络空间安全学院学生工程实践研发\n");
    
        
    	printf("====计时方式====\n");  
        
    	printf("1. 倒计时器\n");  
        
    	printf("2. 计时器\n");  
    
        
    	printf("请输入你选择的代号:");  
        
    	scanf("%d", &c);  
    
    
        while(c!=1&&c!=2){
    	
    	printf("不好意思选错咯~\n");
    	
    	printf("====计时方式====\n");  
        
    	printf("1. 倒计时器\n");  
    
        printf("2. 计时器\n"); 
    	
        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("输入有误!\n");
    
    		return 0;
    
    	}	
    
    	printf("倒计时开始!\n");
    
    
    
    	for(i=hour; i>=0; i--)
    	 {
    
    		for(j=min; j>=0; j--)
    		{
    	
    			for(k=sec; k>=0; k--)
    			{
    
    				printf("\r%02d:%02d:%02d", i, j, k);
    
    				Sleep(1000);
    
    			}
    
    			sec = 59;
    
    		}	
    
    			min = 59;
    
    	}
    
    	printf("\a\n时间到!\n");//倒计时结束后响铃
    
    	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("╔╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╦╗\n");
    		printf("╠                          ╣\n");
    		printf("╠                          ╣\n");
    		printf("╠                          ╣\n");
    		printf("╠     计时器&&倒计时器     ╣\n");
    		printf("╠                          ╣\n");
    		printf("╠                          ╣\n");
    		printf("╠                          ╣\n");
    		printf("╚╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╩╝\n");
    	
    		
    		printf("本程序是由网络空间安全学院学生工程实践研发\n");
    		
    		
    		printf("====计时方式====\n");  
    	    
    		printf("1. 倒计时器");
    
    		printf("\n");
    	    
    		printf("2. 计时器");  
    
    		printf("\n");
    		
    		printf("请输入你选择的代号:2");
    
    		printf("\n");
    		
    		printf("按空格停止计时");
    
    		printf("\n");
    
    
    	    sec++;      
    
    
    	    if (sec == 60)
    		{            
    		
    			min++;            
    		   
    			sec = 0;       
    		}        
    	    if (min == 60)
    		{            
    	
    			hour++;            
    		   
    			min = 0;        
    		}        
    	    if (hour == 24)
    		{            
    		   
    			hour = 0;        
    		}        
    	    
    		printf("%02d:%02d:%02d\n", hour, min, sec); //%02d输出长度为2,不足2前面补0    
    		
    		
    		if(kbhit()){//键盘敲击 检查当前是否有键盘输入,如果有则赋值给n
    			
    			n=getch();
    			
    			while(n==32){
    			
    				exit(0);	
    			}
    		
    		}
    
    	}
    
        return 0;
    }
    
    
    展开全文
  • 实用主义计时器

    2013-04-29 19:50:39
    实用的小工具 办公室,学生软件 参加考试的考生很实用的小工具,希望能帮到你
  • 延时器和计时器

    2020-03-08 16:08:15
    延时器和计时器延时器计时器3.判断某一天是星期几 延时器 setTimeout(回调函数,毫秒数) 功能:延迟指定的毫秒数,只执行一次回调函数 清除延时器:clearTimeout(延时器的返回值) <script type="text/javascript...

    延时器

    setTimeout(回调函数,毫秒数)
    功能:延迟指定的毫秒数,只执行一次回调函数
    清除延时器:clearTimeout(延时器的返回值)

    <script type="text/javascript">
    	setTimeout(function(){
    	    console.log(1s后);
    	},1000)
    </script>
    

    计时器

    setInterval(回调函数,毫秒数)
    功能:每隔指定的毫秒数,执行一次回调函数
    清除计时器:clearInterval(计时器的返回值)

    //body
    <div id="box">10</div>
    
    //js
    <script type="text/javascript">
    	var num = document.getElementById("box")
    	var n = num.innerHTML;
    	var t;
    	t = setInterval(function(){
    	  if(n<=5){
    	    clearInterval(t)
    	  }else{
    	    n --;
    	    num.innerHTML=n;
    	  }
    	},1000) 
    </script>
    

    案例

    1.倒计时功能,点击开始,开始后可随时按暂停,数字到0后会自动重置

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <style>
        #box{width:200px;height:200px;border: solid 1px black;margin: 30px auto;font:80px/200px "";text-align: center}
        #btn{display: block;margin: 0 auto;width: 100px;height:40px;}
      </style>
    </head>
    <body>
      <div id="box">10</div>
        <input type="button" value="开始" id="btn">
      </body>
    <script>
    
    // 1.获取元素
    var box = document.getElementById("box")
    var btn = document.getElementById("btn")
    
    // 用来保存计时器的返回值,用作将来清除用
    var t1;
    
    // 2.获取两次初始值:n用作运算,num用作重置
    var n = box.innerHTML;
    var num = box.innerHTML;
    
    // 点击按钮的状态:true表示开始,false表示暂停,到0自动重置
    var count = true;
    
    // 3.点击事件
    btn.onclick = function(){
      // 4.判断状态,决定执行什么功能,初始状态是true,表示开始功能
      if(count){
          // 开始1.清除上一次计时器
          clearInterval(t1)
          // 开始2.开启计时器
          t1 = setInterval(function(){
              // 开始3.判断数字是否到终点
              if(n <= 0){
                  // 到终点要清除计时器
                  clearInterval(t1);
                  
                  // 判断状态是否为重置
                  // 重置1.重置按钮文字
                  btn.value = "开始2";
                  // 重置2.重置显示的数字
                  box.innerHTML = num;
                  // 重置3.重置计算的数字
                  n = num;
                  // 重置4.重置按钮的状态为初始的开始状态
                  count = true;
              }else{
                  // 没有到终点,正常减1
                  n--;
                  // 设置显示数字
                  box.innerHTML = n;
              }
          },1000)
          // 正常点击开始之后,下次的功能应该是暂停,所以修改按钮的显示文字为重置
          btn.value = "暂停";
          // 修改按钮的下次点击状态为false,表示暂停
          count = false;
    
      }else if(count == false){       //5.判断状态是否为暂停
          // 暂停1.清除计时器
          clearInterval(t1)
          // 暂停2.设置下次按钮的文字为继续
          btn.value = "继续";
          // 暂停3.设置按钮的下次被点击的状态为true,表示开始
          count = true;
      }
    }
    </script>
    </html>
    

    2.倒计时功能,与上面例子差不多,不同的是需要手动重置

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <style>
        #box{width:200px;height:200px;border: solid 1px black;margin: 30px auto;font:80px/200px "";text-align: center}
        #btn{display: block;margin: 0 auto;width: 100px;height:40px;}
      </style>
    </head>
    <body>
      <div id="box">10</div>
        <input type="button" value="开始" id="btn">
      </body>
    <script>
    
    
    // 1.获取元素
    var box = document.getElementById("box")
    var btn = document.getElementById("btn")
    
    // 用来保存计时器的返回值,用作将来清除用
    var t1;
    
    // 2.获取两次初始值:n用作运算,num用作重置
    var n = box.innerHTML;
    var num = box.innerHTML;
    
    // 点击按钮的状态:0表示开始,1表示暂停,2表示重置
    var count = 0;
    
    // 3.点击事件
    btn.onclick = function(){
      // 4.判断状态,决定执行什么功能,初始状态是0,表示开始功能
      if(count == 0){
          // 开始1.清除上一次计时器
          clearInterval(t1)
          // 开始2.开启计时器
          t1 = setInterval(function(){
              // 开始3.判断数字是否到终点
              if(n <= 1){
                  // 到终点要清除计时器
                  clearInterval(t1);
                  // 设置显示数字为0
                  box.innerHTML = 0;
                  // 修改按钮的显示文件
                  btn.value = "重置";
                  // 修改按钮的下次点击状态为2,因为已经结束了,所以下次状态是:重置
                  count = 2;
              }else{
                  // 没有到终点,正常减1
                  n--;
                  // 设置显示数字
                  box.innerHTML = n;
              }
          },1000)
          // 正常点击开始之后,下次的功能应该是暂停,所以修改按钮的显示文字为重置
          btn.value = "暂停";
          // 修改按钮的下次点击状态为1,表示暂停
          count = 1;
    
      }else if(count == 1){       //5.判断状态是否为暂停
          // 暂停1.清除计时器
          clearInterval(t1)
          // 暂停2.设置下次按钮的文字为继续
          btn.value = "继续";
          // 暂停3.设置按钮的下次被点击的状态为0,表示开始
          count = 0;
    
      }else if(count == 2){       //6.判断状态是否为重置
          // 重置1.重置按钮文字
          btn.value = "开始2";
          // 重置2.重置显示的数字
          box.innerHTML = num;
          // 重置3.重置计算的数字
          n = num;
          // 重置4.重置按钮的状态为初始的开始状态
          count = 0;
      }
    }
    </script>
    </html>
    

    3.抽奖系统

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>抽奖系统</title>
        <style type="text/css">
            #cont{font:60px/200px "";text-align: center;height: 200px;}
            #btn{width:200px;height: 60px;font-size: 30px;display: block;margin: 20px auto;}
        </style>
    </head>
    <body>
      <div id="cont">请点击开始按钮,开始抽奖</div>
      <input type="button" name="btn" id="btn" value="开始" />
    </body>
    <script>
    //目标:实现抽奖系统
     //准备:给button标签绑定onclick事件
     var btnObj = document.getElementById('btn');
     var conObj = document.getElementById('cont');
     // 定时器返回值
     var times;
     // 设一个状态值
     var btnStatus=true;
         btnObj.onclick=function(){
        // 判断是否是第一次点击
        if(btnStatus){  // 点击开始
           //  console.log(111);
            // 1 准备班级学生姓名字符串
          var str = "张三,李四,王五,小明,小红,小雪";
             // 2 分割字符串为数组
          var studentArr = str.split(',');
            // console.log(studentArr);
             // 3 生成随机数,当做索引,获取一个数组元素
             // 获取数组长度
             var len = studentArr.length;
           // 4 使用定时器,多次生成随机数,获取人员姓名,并且追加到页面中
             times = setInterval(function(){
                       // 直接取整
                   var num = parseInt(Math.random()*len);
                   var studentName = studentArr[num];
                   //console.log(studentName);
                   // 5 将人员姓名追加到页面中
                   conObj.innerHTML = studentName;
             },100);
             // 更改开始按钮的字
             btnObj.value='就你了'
             // 修改点击的状态
             btnStatus = false;
           }else{  // 第二次点击,停止定时器
                 // 清除定时器
                 clearInterval(times);
                 // 修改点击的状态
                 btnStatus = true;
                 // 更换按钮的字
                 btnObj.value='再次抽奖'
           }
         }
    </script>
    </html>
    

    4.右下角的倒计时小广告

    //css
     #box{width: 200px;height: 250px;border:1px solid #000;position: fixed;right: 0;bottom: 0;}
     #close{width: 35px;height: 25px;font: 12px/2 "";color: gray;position: absolute;left: 0;top: 0;text-align: center;background-color: white;border: none;outline: none;}
     #adv{font: 12px/2 "";color: #fff;position:absolute;right: 0;top: 0;background: rgba(115, 115, 115);padding: 0 10px;}
     
     //body
    <div id="box">
      <input type="button" value="X" id="close">
      <span id="adv">广告还有<b id="num">10</b></span>
    </div> 
      
    
    <script type="text/javascript">
    	window.onload=function(){
    		var box = document.getElementById("box");
    		var num = document.getElementById("num");
    		var close = document.getElementById("close");
    		
    		var t;
    		var n=num.innerHTML;
    		
    		close.onclick = function(){
    		 // 重新定向网址,流氓软件做法
             // location.href = 'www.baidu.com';
    		  box.style.display = "none"
    		}
    		
    		t = setInterval(function(){
    		  if(n<=1){
    		    box.style.display = "none"
    		  }else{
    		    n--;
    		    num.innerHTML = n;
    		  }
    		  },1000)
    	}
    </script>
    
    展开全文
  • python3 做一个计时器和点名软件

    千次阅读 2018-07-15 22:42:42
    突然同学要我帮忙做一个点名软件,我以为是他的大作业就答应了,结果。。。不多说了开始了 写的比较累赘,主要是打算给和我一样的萌新看的。 首先我们要一个UI # 包含一个tk的模块,画UI需要用到 import ...

    突然同学要我帮忙做一个点名软件,我以为是他的大作业就答应了,结果。。。不多说了开始了
    写的比较累赘,主要是打算给和我一样的萌新看的。
    这里写图片描述

    首先我们要一个UI

    # 包含一个tk的模块,画UI需要用到
    import tkinter as tk
    
    # 创建一个应用类,继承了基础的tkinter,也就可以用到一些预先写好的组件。
    class Application(tk.Frame):
        # 这个类初始化的方法
        def __init__(self, master=None):
            super().__init__(master)
            # 设置UI窗口大小
            root.geometry("250x320")
            # 设置UI窗口的标题
            root.title("点名系统")
    
    # 利用上面写的类,创建一个应用。
    root = tk.Tk()
    app = Application(master=root)
    app.mainloop()
    
    

    这就搭出来了一个界面了,开始往里面填写内容。
    稍微思考一下,要一个倒计时的功能的话,需要记录总时间,还要不断的递减时间。
    记录总时间用一个变量就好了,递减时间的话,需要有一个线程不断读取剩余时间数,并按时减小时间数。

    # 要用到多线程
    import threading
    
    # variable,创建一些变量,sum_time用来计时的,dec_flag就是用来实现倒计时的暂停功能。
    # 对这个标记进行判断,来决定是否要继续递减时间。
    sum_time = 0
    dec_flag = True
    
    # 预先设计一个线程需要实现的功能
    def time_dec():
        # 获取到倒计时的数,即全局变量sum_time
        global sum_time
        # 死循环,线程按时将时间递减。
        while True:
            if int(sum_time) > 0 and dec_flag is True:
                sum_time = int(sum_time) - 1
                time.sleep(0.1)
    
    # threading, 在这里创建线程
    thrd = threading.Thread(target=time_dec)
    # 将子线程设置为守护线程,一旦父线程被结束了,子线程也马上跟着结束。
    thrd.setDaemon(True) 
    # 开始这个线程
    thrd.start()

    把这一块和上面那块按规则放在一起应该就可以了。
    倒计时的线程也做好了,就要开始做交互了。
    交互的话,按钮和标签对于我们来说足够了。
    大概也就长这样吧~
    这里写图片描述
    不能忘记还要抽学生点名呀!!!

    # 先引用一个可以读excel的模块
    import xlrd
    
    # document,先打开一个excel文件
    path = "./students.xlsx"
    workbook = xlrd.open_workbook(path)
    # 打开他的第一个表格,也就是sheet1
    Data_sheet = workbook.sheets()[0]
    # 我们只需要用到第一列,excel的第一列记录学生的姓名就好了。
    # 所以这里读取一下总共共有多少行,就可以知道有多少学生了。然后生成一个随机数,抽取一个学生。
    rowNum = Data_sheet.nrows

    一大波代码即将来袭!!!
    这一段建议只看代码注释

    # 先完善一下我们的应用类,向这个里面添加上图的各种按钮。
    class Application(tk.Frame):
        # 应用的初始化方法,在实例化这个类的时候被执行。
        def __init__(self, master=None):
            # super,大概也就是继承吧。
            super().__init__(master)
            root.geometry("250x320")
            root.title("点名系统")
            # 下面一长串全部是在添加按钮和标签,都具有text这个属性
            # text属性就是按钮和标签上面要显示的字
            # 按钮的话,还有一个属性叫command,也就是命令。
            # 当你点击这个按钮的时候,command绑定的方法就会被执行,方法在下面一点都有定义。
            self.get_rand_name = tk.Button(self, text="点名", command=self.choose_one)
            self.name_label = tk.Label(self, text="")
            self.get_rand_15 = tk.Button(self, text="获取随机数", command=self.get_int)
            self.show_rand = tk.Label(self, text="")
            self.cnt_1 = tk.Button(self, text="倒计时1分钟", command=self.set_time_1)
            self.cnt_2 = tk.Button(self, text="倒计时5分钟", command=self.set_time_5)
            self.pause_cnt = tk.Button(self, text="暂停/开始", command=self.rev_flag)
            self.stop_cnt = tk.Button(self, text="停止计时", command=self.reset_time)
            self.cnt_time = tk.Label(self, text=sum_time)
            # 这边command用的root.destroy就是退出程序了
            self.quit = tk.Button(self, text="QUIT", fg="red", command=root.destroy)
            # 这里的pack可以认为时将物品放到界面上,这里就是将大窗体显示在屏幕上。
            self.pack()
            # 下面的create_widgets也是一个方法,定义在后面。
            # 标签按钮创建好了,但是我们并没有将他放到我们的UI界面上。
            # 在这个create_widgets方法中,我们将决定每个小组件放的位置。
            self.create_widgets()
            # 又启动一个线程,这个线程的职责是刷新显示时间的label
            self.thrd = threading.Thread(target=self.time_dec)
            self.thrd.setDaemon(True)
            self.thrd.start()
    
        # 开始摆放各个小组件,我就随便放了。随意一点好^.^
        def create_widgets(self):
            self.get_rand_name.pack(side="top")
            self.name_label.pack(side="top")
            self.get_rand_15.pack(side="top")
            self.show_rand.pack(side="top")
            self.cnt_1.pack(side="top")
            self.cnt_2.pack(side="top")
            self.pause_cnt.pack(side="top")
            self.stop_cnt.pack(side="top")
            self.quit.pack(side="bottom")
            self.cnt_time.pack(side="bottom")
    
        # 刷新显示时间的label的线程所要用到的方法。就是获取一下剩余倒计时的时间并显示出来。
        # 事实证明,写在这个类里面的线程,会卡UI,窗口拖动都会有明显的卡顿感
        def time_dec(self):
            global sum_time
            global dec_flag
            while True:
                if dec_flag is False:
                    ch = "*"
                else:
                    ch = ""
                self.cnt_time["text"] = ch + str(int(sum_time / 10 / 60)) + ":" + str(int(sum_time / 10 % 60)) + "." + str(int(sum_time % 10)) + ch
    
        # 随机从excel文件里面抽取出一个学生点名。
        def choose_one(self):
            # 这里用到random模块生成了一个0~n-1的随机数来抽取学生。
            one_name = Data_sheet.cell_value(random.randint(0, rowNum - 1), 0)
            # 将中奖嘉宾的姓名显示在label上面^.^
            self.name_label["text"] = one_name
    
        # 获取一个随机数并且显示在label上面
        def get_int(self):
            self.show_rand["text"] = random.randint(1, 5)
    
        # 反转一下flag,减时间的线程会检查这个flag,通过这个可以实现倒计时的暂停和开始。
        @staticmethod
        def rev_flag():
            global dec_flag
            dec_flag = not dec_flag
    
        # 设置一个倒计时,时长为1分钟。
        @staticmethod
        def set_time_1():
            global sum_time
            sum_time = 600
    
        # 设置一个倒计时,时长为5分钟。
        @staticmethod
        def set_time_5():
            global sum_time
            sum_time = 3000
    
        # 停止计时,也相当于设置了一个倒计时,时长为0。
        @staticmethod
        def reset_time():
            global sum_time
            sum_time = 0

    然后就突然发现写完了!!!
    完整代码见GitHub
    https://github.com/Sth32/python-dianming

    顺便记录一下py文件打包成exe文件的流程

    pip3 install pyinstaller
    pyinstaller -F -w a.py
    这样就可以将a.py这个文件打包成一个可执行的exe文件了,-F参数的作用是将各种依赖都打包在一起,在./list/文件夹下生成一个完整的可执行文件。
    -w参数的作用是设置只是用窗口启动程序,不打开控制台。这样就没有黑窗了,当然程序里面用来debug的print的输出也看不到了。


    好吧就是这样吧,暑假就该多写写无聊的代码打发打发时间。
    这里写图片描述

    展开全文
  • 计时软件

    2019-03-18 09:01:23
    简洁的倒计时功能,可以供课堂小组活动倒计时使用。可以前置于课件前
  • 计时软件.exe

    2019-10-06 22:06:09
    倒计时软件,可以用来放在ppt上面控制时间,倒计时器是一款小巧免费的倒计时软件。倒计时器适用于学校学生比赛或者参加竞赛等活动,还可以在企业中使用倒计时等,大小可以随心所欲的改变,全屏、只显示数字和自定义...
  • 计时器是数字电路的重要组成部分,本文基于Multisim仿真软件以及数字电路相关理论知识,完成了24秒计时器的设计与仿真,实现了直接清零、启动、暂停、断点计时、自动报警等功能,大大提高了学生的综合实践能力。
  • 在许多领域中计时器均得到普遍应用,诸如在体育比赛,定时报警器、游戏中的倒计时,交通信号灯、红绿灯、行人灯、交通信号控制机、还可以用来做为各种药丸,药片,胶囊在指定时间提醒用药等等,由此可见计时器在现代...
  • 2012高考倒计时软件

    2012-02-12 12:03:41
    计时器参数】 标题=高考倒计时 内容=2012年高考 班级=河北武邑中学 0905班 时间=2012/6/7 08:00:00 徽标= 显示日期和时间=是 显示节日和节气=是 显示生肖图标=是 显示励志标语=是 励志语时间间隔=30 显示精确倒...
  • 单片机课程设计的目的在于让学生综合利用所学单片机知识,完成一个单片机应用系统设计并仿真实现,从而加深对单片机软硬知识的理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下基础。 1.3 课程...
  • 先简单一下这个计时器背景 大学时期打了几年的辩论赛。一直有这个情怀在。看到那些孩子们孩子用很多年前的计时软件。就考虑闲暇时做一个新的计时器。但首先存在一个问题。实现多功能的方法要不做成微信小程序。或者...

    先简单一下这个计时器背景

    大学时期打了几年的辩论赛。一直有这个情怀在。看到那些孩子们孩子用很多年前的计时软件。就考虑闲暇时做一个新的计时器。但首先存在一个问题。实现多功能的方法要不做成微信小程序。或者是做成web项目上传云服务器。但是考虑成本和维护。就先做一个不带数据库和后台的页面。赛制和环节通过点击之页面上的button组合需要的赛制环节模式。

    需要说明的是

    首先 这不是我的原生开发。这是我在gitee上拿到一个开源的项目 进行加工。优化了一下页面效果和逻辑。添加了一些逻辑。本来想用vue再加工一下。但是还要上班工作量大了点。下次周末再来优化。

    先上几张截图

    主界面
    信息配置的模态框
    普通模式界面
    计时效果
    自由模式界面

    时间到提示

    这里感谢下原作者

    在这里插入图片描述
    首先作者是一名高中学生。这一点我真的佩服。虽然原作者只是用了jq 原生js 和bootstrap 。没用框架。但是作为一名还未读大学的孩子。确实能写到这种程度还是很佩服的。(我高中那会就会C语言的if和for)。当然这也不是这个孩子的原生开发。还有之前的作者MrAMS。一个github上的做作者。

    还需要改进的地方

    那确实太多了,比如计时的动画提示,还有赛制信息没做。准备加个后台存数据。之前原来版本用了perl更新数据。我觉得麻烦了点,改成了本地存储。但未来还是要用到数据库和后台的。等有空用vue改写一下。然后价格后台啥的,之前看到一个自带ai评分的一个项目。准备拿来一起试试。既然是为了情怀改写的代码,那当然有空要继续做下去

    源码地址

    有空会一直更新代码的 也欢迎曾经是辩手的程序员们一起加入进来。为了热爱 也为了情怀
    gitee源码地址,可以直接克隆下载
    或者复制该地址:https://gitee.com/beck0514001/my-demo-project/tree/debateTimer/

    展开全文
  • HTML5_制作点名器-math-date-计时器

    千次阅读 2017-08-08 09:49:40
    5倒计时写法代码和结果如下图。 关于善知教育(官网: 善知教育(点击进入) 微信公众号:善知技术) 地址:北京东燕郊经济技术开发区文化大厦 咨询老师郑老师 电话/微信:13315631002 QQ:...
  • 还记得上周的计时器分享吗?当时承诺有100+在看就写...点击图片可以跳转至计时器获取页面有拿到计时器源文件的老师应该发现了,即使资源在手,也没办法随心所欲的运用,还是得知道原理,这也是本篇教程的意义。由...
  • 设计题目: 简易计时器...不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路摘要:此计时器为一学生实践小制作,功能设计相对简单,主要基于单片机控制实现。本设计主要采用元器件有89c52单片机、74h...
  • 小学生算数训练软件开发

    千次阅读 2018-05-29 16:12:54
    软件名称为Arithmetic,为小学生提供自定制算术训练。 主页面如下:     上方有菜单栏和工具栏以及相应快捷键以供选择,用户可以利用他们生成随机算式、回顾错题、保存错题、查看历史成绩以及退出应用...
  • 或许有很多小伙伴都用 ...今天01就整理了一波学生必备的 Mac 软件。 1、「 Ulysses 」—最好用的写作工具 下载地址:https://ulysses.app/ 这是很好用的写作生活工具,是世界上最好的文本编辑。简单直观的工作空间...
  • 计时器代码: 1 class shishi3 extends Thread { 2 private long noww = 0l ; 3 private long start = System.currentTimeMillis(); // 程序启动时间的毫秒值 4 private long time...
  • 在《实验二 软件工程个人项目》中,同学们实现了一个命令行四则运算出题小程序,本次实验采用结对编程方式,设计开发一个小学生四则运算练习软件,使之具有以下功能: (1)由计算机从题库文件中随机选择20道加减...
  • CareUEyes Pro 是一款非常实用的电脑防蓝光软件,内置有8种预定义模式的电脑光滤光片,用户可以根据需要自由自定义屏幕的色温和亮度,通过调整色温来过滤掉能量高波长短且会降低视觉对比度并影响清晰度导致眼睛疲劳...
  • 一分钟倒计时软件,用于课堂教学可以调动学生的学习气氛!
  • "四则运算练习软件" ); //面板 private JPanel selectPanel = new JPanel(); private JPanel mainPanel = new JPanel(); private JPanel commandP = new JPanel(); private JButton JBRedo =...
  • 二、软件功能设计及实现  a、流程图      b、类图   三、程序运行截图  a、 主界面:可以选择简单算式运算和复杂(带括号)算式运算,也可以查看所有答题学生的得分情况    b、学生信息...
  • Arduino数码管计时

    千次阅读 2019-10-21 18:28:53
    Arduino数码管计时 数码管计时功能实现 1、IDE      米思齐(Mixly)官网:http://maker.bnu.edu.cn/ http://mixly.org/创客教育不断普及,以Arduino为基础的创意电子类创客教育课程正...
  • 如果家庭希望学生使用电脑或者家庭自己使用电脑,他们可以使用家庭密码解除锁定并可以自由使用电脑,但在申请时再次重置计时器又开始了。 迄今为止开发的版本一直准备让学生多点击一下。 它从 3.0 版本到 11.0 版本...
  • UWB跑步计时系统

    2020-10-09 11:08:47
     基于此,采用UWB技术的学生体能训练考核系统解决了1000米、800米、200米、100米、50米跑步科目的多人同时训练、计圈、考核计时、计数的难题。 当训练考核人员携带的运动计时芯片标签在跑步时,UWB定位基站将接收到...
  • 一个称作时钟的计时器准确地发出定时电信号,该信号为处理器工作提供有规律的脉冲。测量计算机速度的术语引自电子工程领域,称作兆赫(MHz),兆赫意指每秒百万个周期。例如:普通时钟每秒一个滴答,而在8MHz的处理器...
  • 结队项目——四则运算生成欢迎使用Markdown编辑新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、...
  • 编辑推荐时间管理倒计时 v1.3.0大小:13.7MB更新时间:21-04-14下载时间管理倒计时,一款专为小伙伴打造的手机时间规划工具,为小伙伴提供更强大的规划服务,在这里小伙伴可以自由规划自己的时间,为小伙伴提供更多...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,795
精华内容 1,118
关键字:

学生计时器软件