前言今天,我同學(xué)問我這個(gè)程序怎么做:
于是,我用C給他寫了一個(gè)類似的控制臺程序:
我的這個(gè)控制臺程序有8個(gè)小功能,分別是:1、定時(shí)n秒后自動(dòng)關(guān)機(jī)2、定時(shí)到x點(diǎn)x分提醒

前言今天,我同學(xué)問我這個(gè)程序怎么做:

于是,我用C給他寫了一個(gè)類似的控制臺程序:

我的這個(gè)控制臺程序有8個(gè)小功能 , 分別是:1、定時(shí)n秒后自動(dòng)關(guān)機(jī)2、定時(shí)到x點(diǎn)x分提醒你是否要關(guān)機(jī),如果你沒確認(rèn)不關(guān)機(jī),則在60s后將自動(dòng)關(guān)機(jī)3、立即關(guān)機(jī)4、取消自動(dòng)關(guān)機(jī)5、注銷計(jì)算機(jī)6、打開計(jì)算器7、打開畫圖軟件 。
【關(guān)機(jī)命令代碼 關(guān)機(jī)命令萬萬沒想到】8、打開記事本在介紹各個(gè)功能之前 , 首先介紹一個(gè)函數(shù): system函數(shù)system函數(shù)system是C函數(shù)庫 stdlib.h中的一個(gè)函數(shù) , 用于發(fā)出一個(gè)DOS命令給系統(tǒng) , 函數(shù)原型為:int system。
(constchar* command);例如: system("pause"); 可以實(shí)現(xiàn)凍結(jié)屏幕在往期筆記【C語言筆記】你的黑窗口閃退?也有介紹,歡迎閱讀這里的8個(gè)功能,我們都是借用這個(gè)函數(shù)來實(shí)現(xiàn)的,然后再添加一些處理邏輯即可 。
對DOS命令有一些了解的同學(xué)可能覺得定時(shí)關(guān)機(jī)、取消關(guān)機(jī)之類的只要一行命令就可以了 , 干嘛要那么麻煩的確,不實(shí)用!但是,我們是本著練習(xí)C編程的原則來做的 , 看似簡單的功能,做起來也會遇到很多問題的,特別注意要理清楚一些邏輯關(guān)系及一些細(xì)節(jié) 。
下面分析各代碼塊:功能分析這幾個(gè)功能中,其中功能1和功能2的實(shí)現(xiàn)比較麻煩一點(diǎn) 。其他幾個(gè)功能都只是調(diào)用 system函數(shù)往發(fā)DOS命令給系統(tǒng) 。下面看各個(gè)功能的具體實(shí)現(xiàn):1、定時(shí)n秒后自動(dòng)關(guān)機(jī)功能演示

代碼// 菜單選擇1:定時(shí)n秒后自動(dòng)關(guān)機(jī)void choice_01(void){int sec_count;char cmd[30]; scanf("%*[^\n]");scanf("%*c");
// 清空緩沖區(qū) printf("請輸入您要定時(shí)關(guān)機(jī)的秒數(shù):"); scanf("%d",&sec_count);// 讀入定時(shí)的秒數(shù) sprintf((char*)cmd,"shutdown -s -t %d"
, sec_count);// cmd定時(shí)關(guān)機(jī)命令組包 system(cmd);// 執(zhí)行定時(shí)關(guān)機(jī)命令 printf("定時(shí)開始!\n");// 輸出倒計(jì)時(shí)的秒數(shù)while(sec_count
--){// 非阻塞式鍵盤監(jiān)聽,輸入緩沖區(qū)非空時(shí)則退出while循環(huán)if(kbhit())// kbhit函數(shù)包含在頭文件conio.h中 , 所以只適用于windows系統(tǒng){break;} printf
("您的電腦將在%d秒后自動(dòng)關(guān)機(jī)(輸入數(shù)字4并回車可取消自動(dòng)關(guān)機(jī))\n", sec_count);Sleep(1000);// 休眠1秒 system("cls");// 清屏操作}}2、定時(shí)到x點(diǎn)x分提醒你是否要關(guān)機(jī)
這個(gè)功能像我手機(jī)的自動(dòng)關(guān)機(jī)的操作:

我給我的手機(jī)定時(shí)每天0點(diǎn)0分自動(dòng)關(guān)機(jī),關(guān)機(jī)之前先倒計(jì)時(shí)一分鐘,看你是否要真的關(guān)機(jī) , 此時(shí)可以點(diǎn)擊立即關(guān)機(jī),也可以取消關(guān)機(jī) 。功能演示

代碼// 菜單選擇2:定時(shí)每天x點(diǎn)x分自動(dòng)關(guān)機(jī)void choice_02(void){struct timed_time shutdown_time;char*wday[]={"Sun","Mon",
"Tue","Wed","Thu","Fri","Sat"};time_t t;struct tm *time_date;int year =0, mon =0, mday =0;int hour =0
, min =0, sec =0;char*week = NULL;int count_down =60;int count_down_flag =0; scanf("%*[^\n]");scanf
("%*c");// 清空緩沖區(qū) printf("請輸入您要定時(shí)關(guān)機(jī)的時(shí)間(如23:59):"); scanf("%d:%d",&shutdown_time.timed_hour,&shutdown_time
.timed_min);// 讀入要定時(shí)關(guān)機(jī)的時(shí)間 printf("現(xiàn)在是:"); system("time /T");// 輸出此刻的時(shí)間 printf("您的電腦將在%.2d點(diǎn)%.2d分提醒您是否要關(guān)機(jī)\n"
, shutdown_time.timed_hour, shutdown_time.timed_min);while(1){ time(&t);// 返回1970年1月1日至今的秒數(shù) time_date
= localtime(&t);// 取得當(dāng)?shù)貢r(shí)間并保存在time_date中 year =1900time_date->tm_year;// 年(本程序中暫未用到) mon
=1time_date->tm_mon;// 月(本程序中暫未用到) mday = time_date->tm_mday;// 日(本程序中暫未用到) week
= wday[time_date->tm_wday];// 星期(本程序中暫未用到) hour = time_date->tm_hour;// 時(shí)(用到) min = time_date
->tm_min;// 分(用到) sec = time_date->tm_sec;// 秒(本程序中暫未用到)// 如果此時(shí)此刻的時(shí)、分等于設(shè)定值,則開始倒計(jì)時(shí)60秒if(hour ==
shutdown_time.timed_hour && min == shutdown_time.timed_min && sec ==0){ system
("shutdown -s -t 60");// 定時(shí)60秒自動(dòng)關(guān)機(jī) count_down_flag =1;// 倒計(jì)時(shí)標(biāo)志置一}// 開始倒計(jì)時(shí)if(1== count_down_flag
){ count_down--; printf("您的電腦將在%d秒后自動(dòng)關(guān)機(jī)(輸入數(shù)字4可取消自動(dòng)關(guān)機(jī))\n", count_down);Sleep(1000
); system("cls");}// 非阻塞式鍵盤監(jiān)聽,輸入緩沖區(qū)非空時(shí)則退出while循環(huán)if(kbhit()){ count_down_flag =0
;// 倒計(jì)時(shí)標(biāo)志清零break;}}}關(guān)于時(shí)間日期函數(shù) , 可以查看往期筆記:【C語言筆記】時(shí)間日期函數(shù)3、立即關(guān)機(jī)選擇該功能時(shí),先提示是否要關(guān)機(jī),預(yù)防誤操作代碼// 菜單選擇3:立即關(guān)機(jī)void choice_03 。
(void){char shutdown_affirm;// 確認(rèn)是否真的需要立即關(guān)機(jī) scanf("%*[^\n]");scanf("%*c");// 清空緩沖區(qū) printf("您確定要立即關(guān)閉您的計(jì)算機(jī)(y/n)?\n"
); scanf("%c",&shutdown_affirm);if(shutdown_affirm ==y){ printf("您的計(jì)算機(jī)即將關(guān)機(jī)!\n");Sleep(1000);
system("shutdown -p");}else{ system("cls"); printf_menu();}}4、取消自動(dòng)關(guān)機(jī)若此時(shí)沒有定時(shí)關(guān)機(jī)操作,則選擇取消自動(dòng)關(guān)機(jī)時(shí),會打印輸出:
因?yàn)闆]有任何進(jìn)行中的關(guān)機(jī)過程,所以無法終止系統(tǒng)關(guān)機(jī)(1116)代碼// 菜單選擇4:取消自動(dòng)關(guān)機(jī)void choice_04(void){ system("cls");// 清屏 printf 。
("您已取消自動(dòng)關(guān)機(jī)\n"); system("shutdown /a");// 取消自動(dòng)關(guān)機(jī) printf_menu();// 打印輸出菜單}5、注銷計(jì)算機(jī)代碼// 菜單選擇5:注銷void
choice_05(void){ system("cls");// 清屏 printf("當(dāng)前用戶即將被注銷\n"); system("shutdown -l");}6、打開計(jì)算器代碼
// 菜單選擇6:打開計(jì)算器void choice_06(void){ system("calc");// 打開計(jì)算器的命令 system("cls");// 清屏 printf_menu
();// 打印輸出菜單}7、打開畫圖軟件代碼// 菜單選擇7:打開畫圖軟件void choice_07(void){ system("mspaint");// 打開畫圖軟件的命令 system
("cls");// 清屏 printf_menu();// 打印輸出菜單}8、打開記事本代碼// 菜單選擇8:打開記事本void choice_08(void){ system("notepad"
);// 打開記事本的命令 system("cls");// 清屏 printf_menu();// 打印輸出菜單}本程序用到的DOS命令1、清屏操作:cls2、定時(shí)關(guān)機(jī):shutdown
-s -t sec (說明:sec為要定時(shí)的秒數(shù))3、取消定時(shí)關(guān)機(jī):shutdown /a4、輸出此刻的時(shí)間:time /T5、輸出今天的日期:date /T6、立即關(guān)機(jī):shutdown -p7、注銷計(jì)算機(jī):
shutdown -l8、設(shè)置cmd窗口標(biāo)題:title 正念君(設(shè)置標(biāo)題為“正念君”)9、設(shè)置窗口寬高:mode con cols=60 lines=3010、設(shè)置窗口前景色與背景色:color f0
11、打開計(jì)算器:calc12、打開畫圖軟件:mspaint13、打開記事本:notepad這些命令可以cmd窗口中運(yùn)行,如:

有些不需要依賴于cmd窗口的命令也可以直接在運(yùn)行窗口中輸入,如在運(yùn)行窗口中輸入 calc打開計(jì)算器:

其中,可通過組合鍵【win r】調(diào)出運(yùn)行窗口完整程序由于完整的代碼較長 , 就不貼出來了,有興趣的朋友可在后臺回復(fù)關(guān)鍵詞:定時(shí)關(guān)機(jī),獲取該 .c 文件溫馨提示:鏈接失效,可在后臺回復(fù),或添加小編微信(備注XX鏈接失效) 。
總結(jié)論實(shí)用性,除了功能二之外 , 其他功能都可以直接通過在cmd窗口中輸入命令就可以實(shí)現(xiàn)但多寫一些這些功能性的東西,可以很好的鍛煉我們的編程實(shí)踐能力及編程的邏輯思維,這對于提高我們嵌入式應(yīng)用的編寫能力有很大的幫助! 。
這次寫的是控制臺的定時(shí)關(guān)機(jī)程序,之后有時(shí)間有機(jī)會再把該定時(shí)關(guān)機(jī)程序做成圖形界面的形式,歡迎持續(xù)關(guān)注!轉(zhuǎn)發(fā)、點(diǎn)在看就是對小編最大的支持!猜你喜歡【Linux筆記】Linux下編譯C程序【Linux筆記】make工程管理工具(二)
【C語言筆記】關(guān)于數(shù)組的一個(gè)陷阱!【C語言筆記】操作位的技巧【RT-Thread筆記】裸機(jī)系統(tǒng)與多線程系統(tǒng)【RT-Thread筆記】關(guān)于RT-Thread的啟動(dòng)問題

猜你喜歡
- 鋒范p0301故障碼什么問題 鋒范故障碼p0301是什么故障代碼
- 北京汽車e系列p0303故障碼什么意思 北京汽車e系列故障碼p0303是什么故障代碼
- 關(guān)機(jī)命令行 關(guān)機(jī)命令學(xué)會了嗎
- 關(guān)機(jī)命令行 關(guān)機(jī)命令萬萬沒想到
- 違章代碼12110是什么意思
- 違章代碼13527是什么意思
- 小米手機(jī)電池修復(fù)指令代碼
- windows 10如何設(shè)置自動(dòng)關(guān)機(jī) windows10如何設(shè)置自動(dòng)關(guān)機(jī)時(shí)間
- 違章代碼10130是什么意思
- 違章代碼10102是什么意思
