zoukankan      html  css  js  c++  java
  • 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语言文件写入读出还不熟练,嗯,明日再战斗!!! 

  • 相关阅读:
    [Java IO]04_系统标准IO
    [Java IO]03_字符流
    [Java IO]02_字节流
    [Java IO]01_File类和RandomAccessFile类
    [Java 安全]加密算法
    [Java 安全]消息摘要与数字签名
    Java正则速成秘籍(三)之见招拆招篇
    Java正则速成秘籍(一)之招式篇
    Java 枚举
    redis 系列13 集合对象
  • 原文地址:https://www.cnblogs.com/15linzhijie/p/5317356.html
Copyright © 2011-2022 走看看