//C语言关机小程序
#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<time.h>
void shut_down(char name[20], char save[100]); //函数调用关机键入
void Cancel_shut_down(char Cancel[2]);//用于取消关机,并重新设置秒数
void New_function(void); //用于汇总函数体
int main(void){
system("cls");//清屏
system("COLOR A"); //变色龙 绿色
system("MODE CON COLS=50 LINES=25");//窗口宽度和高度
printf("=====当前时间=====\n");
system("DATE /T");//日期
system("TIME /T");//时间
printf("\n");
New_function();//函数调用
return 0;
}
void New_function(void){
//调用两个函数结构,void shut_down 和 Cancel_shut_down 功能是让用户手动设置关机倒计时
char name[20] = {"shutdown -s -t "};
char save[100];//用于保存关机秒数
char Cancel[2]; //重新设置关机秒数,判断 "YES" 或 "NO"
char eliminate[5]; //消除
int i=0; //作为while循环条件
printf("===============C语言 关机程序===============\n");
printf("== 1、1分钟关机 ==\n");
printf("== 2、10分钟关机 ==\n");
printf("== 3、自行设置关机 ==\n");
printf("== 4、立即关机 ==\n");
printf("== 5、exit ==\n");
printf("============================================\n");
int option; //Switch选项
printf("请输入以上5个选项的其中一条: ");
scanf("%d", &option);
switch(option){
case 1:
system("shutdown -s -t 60");
printf("是否需要取消关机程序(YES and NO): ");
scanf("%s", eliminate);
strlwr(eliminate);
if(strcmp(eliminate,"yes")==0){
//如果两个优先级同样的括号,那么程序就从左往右执行
system("shutdown -a");
printf("以取消...\n");
}else printf("正常执行...\n");
getch();//等待用户键入任意键
break;
case 2:
system("shutdown -s -t 600");
printf("是否需要取消关机程序(YES and NO): ");
scanf("%s", eliminate);
strlwr(eliminate);
if(strcmp(eliminate,"yes")==0){
//如果两个优先级同样的括号,那么程序就从左往右执行
system("shutdown -a");
printf("已取消...\n");
}else printf("正常执行...\n");
getch();
break;
case 3:
shut_down(name,save); //使用switch调用用户自行设置关机秒数
Cancel_shut_down(Cancel); //函数调用 shutdown -s -t 用于字符串链接
break;
case 4:
system("shutdown -s -t 0"); //立即关机
break;
case 5:
printf("正在退出程序中");
while(++i<=5){
printf("。");
Sleep(1000);
}
system("exit");
break;
default: printf("输入错误--请重启程序 !\n");
getch();//用于等待用户键入任意键
}//switch
//把多个语句用括号{}括起来组成的一个语句称复合语句。 在程序中应把复合语句看成是单条语句,而不是多条语句
}
void shut_down(char name[20], char save[100]){
int redo = 1;//作为while循环条件判断
int i;
do{
printf("你要多少秒关机: ");
if(scanf("%s", save)!=0) //因为是字符串连接,所以输入的也是字符串关机秒数
//首先保证有输入
{
redo = 0; //假定数据正确
for(i=0; i<strlen(save); i++)//获取长度
{
if(save[i] < '0' || save[i] > '9')
//save[i] 判断是否有 非数字字符
{
redo = 1; //要求重输
printf("输入错误,请重新输入\n");
break;
}
}//for
//printf("%d\n", i); 循环检测
}//if
else printf("无输入数据,请重新输入\n");
}while(redo==1);
strcat(name,save); //字符串连接
//用户输入name1,把name1的值连接到name上,实现了用户输入关机秒数,关机
system(name);
}
void Cancel_shut_down(char Cancel[2]){ //重新设置关机秒数
int i = 0; //用于死循环,使用户输入 “YES” 或 “NO”
int test = 0; //判断数据是否正确
char again[100];//重新设计时间
char name2[20] = {"shutdown -s -t "}; //用于字符串链接
do{
printf("\"YES\"--\"NO\"需要重新设置关机秒数: "); //输入 "YES" 或 "NO" 程序判断执行
scanf("%s", Cancel);
strlwr(Cancel); //把输入的数,都转变成小写字符
if(strcmp(Cancel,"yes")==0){ //字符串比较
system("shutdown -a"); //重新设置关机秒数的瞬间,取消关机
do{
printf("请输入新的设计时: ");
if(scanf("%s", again)!=0){
test = 0;//假的数据正确
for(i=0; i<strlen(again); i++){
if(again[i] < '0' || again[i] > '9'){
test = 1; //要求重输
printf("输入错误。。。");
break;
}//判断用户输入的是否是 数字类型
}//获取字符串长度。用于判断数组中的值。
}//保证有输入
}while(test==1);//循环条件是 test = 1 一直循环下去
strcat(name2,again); //字符串链接,从新计时
system(name2);
break;
}else if(strcmp(Cancel,"no")==0){ //如果输入否,则程序正常执行
printf("程序正常运行。。。");
getch();//卡线程在break跳出
break;
}
}while(i < 1);//如果用户乱输入,程序就一直死循环询问
}