0324操作系统cmd功能的扩展

需求:1、实现清屏功能

        2、实现不区分大小写功能

        3、添加功能能添加新的命令符

设计:1、使用system("cls")清屏。

        2、使用strlwr()函数把大写都变成小写

        3、(1)使用菜单做选择项,让用户进入添加命令功能

            (2)写进文件,再从文件夹中读取

#include<stdio.h>//stdio 就是指 “standard input & output"(标准输入输出)
				//所以,源代码中如用到标准输入输出函数时,就要包含这个头文件!
				//例如c语言中的 printf("%d",i); scanf("%d",&i);等函数
#include<string.h>//在使用到字符数组时需要使用
#include<stdlib.h>
#define Max 500

struct Cmd{
	char cmd[30];
	char function[500];
	int post;
};
int count=0;
struct Cmd cm[Max];      //定义结构体



void menu(){
	printf("			|--------------------------|
");
	printf("			|        1、进入cmd        |
");
	printf("			|        2、添加命令       |
");
	printf("			|--------------------------|
");
}



void menu2(){
	printf("			|--------------------------|
");
	printf("			|        1、回到主界面     |
");
	printf("			|        2、退出           |
");
	printf("			|--------------------------|
");
}


void Init(struct Cmd cm[Max])
{
	FILE *fp;
	if((fp=fopen("cmd.txt","a+"))==NULL)
	{
		printf("File open error!
");
		exit(0);
	}
	while(!feof(fp)&&fgetc(fp)!=EOF)
	{
		fseek(fp,-1L,SEEK_CUR);
		fscanf(fp,"%s%s%d",&cm[count].cmd,&cm[count].function,&cm[count].post);
		count++;
	}
	if(fclose(fp))
	{
		printf("Can not close the file!
");
		exit(0);
	}
}



void display(struct Cmd cm[Max])             //读出文件
{
	for(int i=0;i<count;i++)
	{
		printf("%-10s%s
",strupr(cm[i].cmd),cm[i].function);
		strlwr(cm[i].cmd);
	}
}




void Putout1(){
	printf("Microsoft Windows XP [版本 5.1.2600]
");
	printf("(C) 版权所有 1985-2001 Microsoft Corp.
");
}



void Strcmp1(char str[10])
{
	int i;
	if(strcmp(str,"help")==0)
		{
			printf("有关某个命令的详细信息,请键入 HELP 命令名
");
			display(cm);
			
		}
		else if(strcmp(str,"cd")==0)
                printf("cd  内部命令 显示当前目录的名称或将其更改
");
		else if(strcmp(str,"md")==0)
                printf("md  内部命令 创建一个目录
");
		else if(strcmp(str,"rd")==0)
                printf("rd  内部命令 删除目录
");
		else if(strcmp(str,"cls")==0)
		{      printf("cls 内部命令 清除屏幕
");
                system("cls");
		}
		else if(strcmp(str,"date")==0)
                printf("date 内部命令 显示或设置日期
");
		else if(strcmp(str,"time")==0)
                printf("time 内部命令 内部命令显示或设置系统时间
");
		else if(strcmp(str,"ren")==0)
                printf("ren 内部命令 重新命名文件
");
		else if(strcmp(str,"cope")==0)
                printf("cope 内部命令 将至少一个文件复制到另一个位置
");
		else if(strcmp(str,"quit")==0)
			exit(0);
		else if(strcmp(str,"dir")==0)
                printf("dir 内部命令 显示一个目录的文件和子目录
"); 
		else
		{	
			for(i=0;i<count;i++)
			{
				if(strcmp(str,cm[i].cmd)==0)
				{
					if(cm[i].post==1)
						printf("'%s' 内部命令输入正确!
该命令作用是:%s
",str,cm[i].function);
					else
						printf("'%s' 外部命令输入正确!
该命令作用是:%s
",str,cm[i].function);
					goto abc;
				}
			}
		     printf("'%s'不是内部或外部命令,也不是可运行的程序
",str);
	         printf("或批处理文件。
");
		}
abc:	printf("
");
}


void process(struct Cmd cm[Max])
{
	char str[10];
	Putout1();
	while(1)
	{
		printf("
C:\Documents and Settings\hskd>");
		scanf("%s",str);
		strlwr(str);
		Strcmp1(str);	
	}
}
int main()
{
	FILE *fp;
	int i,j,k,f;
	struct Cmd tempcm[Max];
bbc:	menu();
	scanf("%d",&i);
	if(i==1)
	{
	    Init(cm);                 
	    process(cm);
	}
	else if(i==2)
	{
		printf("请问需要输入多少个命令:
");
		scanf("%d",&j);
		for(k=0;k<j;k++)
		{
		printf("请分别输入第%d个指令的符号、功能和属性:
",k+1);
		scanf("%s%s%d",&tempcm[k].cmd,&tempcm[k].function,&tempcm[k].post);
		}
		Init(cm);
		for(k=0;k<j;k++)
		{
			
			cm[count+k+1]=tempcm[k];
		}
		count=count+j+1;
	//	display(cm);
		if((fp=fopen("cmd.txt","w"))==NULL)
		{
			printf("打开失败");
			exit(0);
		}
		fp=fopen("cmd.txt","w");
		for(k=0;k<count;k++)
		{
			fprintf(fp,"%s%s%d
",cm[k].cmd,cm[k].function,cm[k].post);
		}           
	/*	fwrite(cm,sizeof(Cmd),count,fp);*/
		fclose(fp);

	}
	else
	{
		printf("输入有误,请重新输入
");
		goto bbc;
	}
bbd:	menu2();
	scanf("%d",&f);
	if(f==1)
		goto bbc;
	else if(f==2)
		exit(0);
	else
	{
		printf("输入有误,请重新输入
");
		goto bbd;
	}


}

  

运行结果:

备注:对这次做的特别不满意,啊啊啊啊啊……可惜时间紧,虽然写代码不是本课程的重点,但反映出来C语言文件写入读出还不熟练,嗯,明日再战斗!!! 

原文地址:https://www.cnblogs.com/15linzhijie/p/5317356.html