2023年的高考已不足百天
#include <stdio.h>
#include <time.h>
#include <windows.h> // Windows系统下的延时函数头文件
int main() {
// 设置高考时间为2023年6月7日9时
struct tm examTime = {0};
examTime.tm_year = 2023 - 1900; // 年份要减去1900
examTime.tm_mon = 5; // 月份从0开始计数,即5表示6月
examTime.tm_mday = 7;
examTime.tm_hour = 9;
// 获取当前时间
time_t nowTime = time(NULL);
struct tm *pNow = localtime(&nowTime);
// 计算时间差
time_t examSecs = mktime(&examTime);
time_t nowSecs = mktime(pNow);
time_t diffSecs = examSecs - nowSecs;
// 输出倒计时信息
while (diffSecs >= 0) {
//清屏再显示
system("cls");
printf("距离2023年高考还有:\n");
printf("%ld天 ", diffSecs / (24 * 60 * 60));
diffSecs %= 24 * 60 * 60;
printf("%ld小时 ", diffSecs / (60 * 60));
diffSecs %= 60 * 60;
printf("%ld分钟 ", diffSecs / 60);
diffSecs %= 60;
printf("%ld秒\n", diffSecs);
Sleep(1000); // 暂停1秒钟,单位为毫秒
nowSecs += 1; // 当前时间加1秒
pNow = localtime(&nowSecs); // 更新当前时间
diffSecs = examSecs - nowSecs; // 重新计算时间差
}
printf("高考已经开始!加油!\n");
return 0;
}
这个控制台显示的好象有点闪烁,改一改。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h> // Windows系统下需要添加这个头文件
int main()
{
// 计算高考日期
struct tm examTime = {0};
examTime.tm_year = 123; // 从1900年开始算,2023年-1900=123
examTime.tm_mon = 6 - 1; // 月份从0开始算,6月需要减1
examTime.tm_mday = 7;
examTime.tm_hour = 9;
examTime.tm_min = 0;
examTime.tm_sec = 0;
// 计算距离高考的时间差
time_t examSecs = mktime(&examTime); // 高考的时间戳
time_t nowSecs = time(NULL); // 当前时间戳
struct tm* pNow = localtime(&nowSecs); // 将时间戳转换为本地时间
nowSecs = mktime(pNow); // 将本地时间转换为时间戳
long diffSecs = examSecs - nowSecs;
// 获取标准输出的句柄
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
// 将控制台的显示模式设置为无缓冲模式
DWORD prev_mode;
GetConsoleMode(hStdout, &prev_mode);
SetConsoleMode(hStdout, CONSOLE_FULLSCREEN_MODE);
// 输出倒计时信息
while (diffSecs >= 0)
{
//不显示光标样式
HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO info;
info.dwSize = 100;
info.bVisible = FALSE;
SetConsoleCursorInfo(consoleHandle, &info);
// 将光标移动到指定位置输出信息
COORD pos = {0, 0};
SetConsoleCursorPosition(hStdout, pos);
printf("距离2023年高考还有:\n");
printf("%ld天 ", diffSecs / (24 * 60 * 60));
diffSecs %= 24 * 60 * 60;
printf("%ld小时 ", diffSecs / (60 * 60));
diffSecs %= 60 * 60;
printf("%ld分钟 ", diffSecs / 60);
diffSecs %= 60;
printf("%ld秒 ", diffSecs);
// 等待1秒钟
Sleep(1000);
// 重新计算时间差
nowSecs = time(NULL);
pNow = localtime(&nowSecs);
nowSecs = mktime(pNow);
diffSecs = examSecs - nowSecs;
}
//还原控制台的显示模式
SetConsoleMode(hStdout, prev_mode);
printf("\n高考结束,加油!!!\n");
return 0;
}
顺便再来一个python版的随机点名器
学生名单放在studenname.txt文本文件里,每行一个姓名。
import random
# 读取学生姓名列表
with open('studentname.txt', 'r') as f:
student_list = f.readlines()
# 随机选取学生姓名
selected_student = random.choice(student_list)
# 输出点名结果
print(f"选中的学生是:{selected_student.strip()}")
加一个tkinter,加两个按钮。
import tkinter as tk
from tkinter import filedialog, messagebox
import random
class App(tk.Tk):
def __init__(self):
super().__init__()
self.title("我的点名器")
self.geometry("300x100")
# 创建选择文件的按钮
self.select_file_button = tk.Button(self, text="选择文件", command=self.select_file)
self.select_file_button.pack(pady=10)
# 创建点名按钮
self.pick_name_button = tk.Button(self, text="开始点名", command=self.pick_name, state="disabled")
self.pick_name_button.pack(pady=10)
# 文件路径
self.file_path = None
def select_file(self):
# 弹出文件选择对话框
self.file_path = filedialog.askopenfilename(filetypes=[("文本文件", "*.txt")])
# 如果选择了文件,则启用点名按钮
if self.file_path:
self.pick_name_button.config(state="normal")
def pick_name(self):
# 从文件中随机选择一行
with open(self.file_path, "r") as f:
lines = f.readlines()
if len(lines) > 0:
name = random.choice(lines).strip()
messagebox.showinfo("本次点名幸运学生:", f"恭喜:{name}")
if __name__ == "__main__":
app = App()
app.mainloop()
基本完工,大家再改改吧!