說明:通過調用函數來獲取系統當前時間,並制作一個數字式的時鍾,時鍾的顯示包括年、月、日、小時、分以及秒,通過系統屏幕的刷新來對不斷更新的時間進行屏幕的顯示。
一.對相關函數的學習
1.time_t time(time_t *second);
a.頭文件:<time.h>
b.該函數返回自紀元1970-01-01 00:00:00 起經過的秒數,這是一個很大的數,若 second 不為NULL,則返回值將自動存儲在該指針中。
注意:此處的 time_t 以及 __time32_t 都是 long 的別名,其實也就是long int 變量類型。
2.struct tm * localtime (const time_t * timer);
a.頭文件:<stdio.h>
b. 該函數的參數為從1990.1.1 00:00:00 到現在累積的秒數,即上個函數的返回值取地址,其返回值為一個結構體類型,其中包含了日期、小時等數據成員;具體見下表:
3.int kbhit(void);
a.頭文件:<conio.h>
b.該函數的功能在於檢測當前是否有鍵盤按鍵按下,如果有則返回一個非 0 值,否則返回0.
3.void sleep(unsigned second);
a.頭文件:<unistd.h>
b.該函數能把進程掛起一段時間,單位為秒,無返回值。
4.void usleep(int micro_second);
a.頭文件:<unistd.h>
b.把進程掛起一段時間,單位為微秒,無返回值。這個函數實測在 windows Qt編譯器下不准確。(網絡上解釋:該函數不能用在在windows系統下,只能用於 linux 的測試環境下面。)
注意:usleep() 與sleep() 類似,都用於將進程掛起一段時間。當需延遲時間數量級為秒的時候,盡量使用 sleep(),當為幾十毫秒或者更小時,使用 usleep() 更精確。
5.int system(char *command);
a.頭文件:<stdlib.h>
b.執行一個 windows 的 DOS 命令。這里主要講一個命令:清屏。用來定時的刷新顯示屏上的系統時間。在windows環境下,該函數為 system(“cls”);而在linux環境下,該函數為system(“clear”);並且,在linux環境下,也可以用如下語句來代替該語句:puts(“\033c”),printf(“\033c”)。兩種方式也存在一定的差別,system()函數在調用命令時會“占用 ”一定的進程時間,如果需要精確的定時會導致定時不准確。而puts(“\033c”)和printf(“\033c”)則相對來說占用系統進程時間較少,用於定時比較精確。
c.system 的一些其他常用命令
(1.)system(“Date /T”) 為獲取當前系統時間並顯示,顯示方式為 2018/10/17 周三,system(“Time /T”) 為獲取當前系統時間並顯示,顯示方式為 09:56;運行程序后時間不會自動刷新。
(2.)system(“title XX”) 設置命令台窗口的標題為XX。
(3.)system(“mode con cols = n lines = m”) 設置窗口的寬度和高度。
(4.)system(“color 0B”) 設置窗口的顏色,其中color后面的0是背景色代號,A是前景色代號。各顏色代碼如下:0=黑色 1=藍色 2=綠色 3=湖藍色 4=紅色 5=紫色 6=黃色 7=白色 8=灰色 9=淡藍色 A=淡綠色 B=淡淺綠色 C=淡紅色 D=淡紫色 E=淡黃色 F=亮白色。
(5.)system(“shutdown –p”) 為立即關閉計算機;system(“shutdown –l”) 為注銷計算機(不關閉);system(“shutdown -s“)關閉計算機(默認一分鍾關);system(“shutdown -s –t num“)定時num 秒后關閉計算機,system(“shutdown -r”) 為重啟計算機;system(“shutdown -r –t num“) 定時重啟計算機(默認一分鍾后重啟);system (“shutdown -a”) 取消定時任務。
(6.)system("pause") 可以實現凍結屏幕,便於觀察程序的執行結果。
(7.)system("del c::xxx.txt") 刪除文件。
(8.)system("dir C:\\Users\\YJ\\Desktop\\CPlusExample") 查看文件目錄的詳細信息。
(9.)system(“start C:\\xxx\\YYY.exe”);執行 YYY.exe,strat 可以省略。
以下程序用到了以上的大部分函數,實現功能:顯示當前程序運行的時間,實現關機管理。可以選擇定時關機、立即關機、注銷(不關機)以及退出此程序等選項,代碼如下:

1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 int print() 5 { 6 printf(" ======================= \n"); 7 printf(" ===C Turn Off Programa===\n"); 8 printf("1.Turn off after some minute\n"); 9 printf("2.Turn off at once\n"); 10 printf("3.Logout\n"); 11 printf("4.Exit\n"); 12 printf("========================\n"); 13 return 0; 14 } 15 int main() 16 { 17 system("title C Turn Off Program"); 18 system("mode con cols=48 lines=15"); 19 system("color 0B"); 20 system("DAte /T"); 21 system("TiME /T"); 22 char cmd[20]="shutdown -s -t "; 23 char t[5]="0"; 24 print(); 25 int c; 26 scanf("%d",&c); 27 getchar(); 28 switch(c) 29 { 30 case 1:printf("The Waiting Time for Turn Off (0~600)\n"); 31 scanf("%s",t); 32 system(strcat(cmd,t)); 33 int d = 0; 34 printf("\n\nYou can press 1 to end this off system!!\n"); 35 scanf("%d",&d); 36 getchar(); 37 if(d == 1) 38 system("shutdown -a"); 39 break; 40 case 2:system("shutdown -p");break; 41 case 3:system("shutdown -l");break; 42 case 4:break; 43 default:printf("Error!\n"); 44 } 45 system("pause"); 46 exit(0); 47 } 48 49
二.數字式時鍾的實現
代碼功能:獲取系統實時的時間(包括年、月、日、小時、分鍾以及秒)等,顯示在屏幕上,並刷新屏幕。
1 #include<time.h> 2 #include<iostream> 3 #include<unistd.h> 4 #include<conio.h> 5 using namespace std; 6 int main() 7 { 8 while(!kbhit()) 9 { 10 time_t t = time(NULL); 11 struct tm *localt = localtime(&t); 12 system("cls"); 13 cout<<'\n'<<"\t\t"; 14 cout<<localt->tm_year+1900<<'\\'; 15 cout<<localt->tm_mon+1<<'\\'; 16 cout<<localt->tm_mday<<'\t'; 17 cout<<localt->tm_hour<<':', 18 cout<<localt->tm_min<<':', 19 cout<<localt->tm_sec; 20 sleep(1); 21 } 22 return 0; 23 }
程序運行結果: