03-25实验一、命令解释程序的编写

 

实验一、命令解释程序的编写

专业:商软二班  姓名:颜文生  学号:201406114256

一、        实验目的

(1)掌握命令解释程序的原理;

(2)*掌握简单的DOS调用方法;

(3)掌握C语言编程初步。

 

二、        实验内容和要求

 编写类似于DOS,UNIX的命令行解释程序

(1)自行定义系统提示符

(2)自定义命令集(8-10个)

(3)用户输入HELP以查找命令的帮助

(4)列出命令的功能,区分内部还是外部命令

(5)用户输入QUIT退出

(6)内部命令有dir, cd, md, rd, cls, date, time, ren, copy等。

 

三、        实验方法、步骤及结果测试

 

  1. 1.      源程序名:压缩包文件(rarzip)中源程序名×××.c

可执行程序名:×××.exe

  1. 2.      原理分析及流程图

主要总体设计问题。

(包括存储结构,主要算法,关键函数的实现等)

  1. 3.      主要程序段及其解释:

//自行定义系统提示符

void Define(CMD c[20])

{

   

    int i=0;

    char *name[11]={"dir","cd","md","rd","cls","date","time","ren","cope","help","quit"};

    char *type[11]={"内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","外部命令","外部命令"};

    char *func[11]={"显示一个目录中的文件和子目录","显示当前目录的名称或将其更改","创建一个目录","删除目录","清除屏幕","显示或设置日期",

           "内部命令显示或设置系统时间","重新命名文件","将至少一个文件复制到另一个位置","提供Windows命令的帮助信息","退出命令解释程序"};

   

    //将已定义好的提示符依次赋值给数组c

    for(i=0;i<11;i++)

    {

           strcpy(c[i].command_name,name[i]);

           strcpy(c[i].command_type,type[i]);

           strcpy(c[i].command_func,func[i]);

    }

}

 

//从键盘输入命令提示符,并输出相关结果

void Input(CMD c[20])

{

    char name[20];

    int i;

    while(1)

    {

           printf("C:\\Documents and Settings\\Administrator>");

           gets(name);

 

           //若输入help或HELP,则输出全部提示符信息

           if(strcmp("HELP",name)==0 || strcmp("help",name)==0)

           {    

                  for(i=0;i<11;i++)

                  {

                         printf("%s",c[i].command_name);

                         putchar('\t');

                printf("%s",c[i].command_type);

                         putchar('\t');

                printf("%s",c[i].command_func);

                         putchar('\n');

                  }

                  putchar('\n');

           }

 

           //若输入quit,则退出程序

           else if(strcmp("quit",name)==0)

           {

                  return;

           }

           else

           {

                  for(i=0;i<11;i++)

                  {

                         if(strcmp(c[i].command_name,name)==0)

                         {

                                printf("%s",c[i].command_name);

                                putchar('\t');

                                printf("%s",c[i].command_type);

                                putchar('\t');

                                printf("%s",c[i].command_func);

                                putchar('\n');

                                putchar('\n');

                                break;

                         }

                  }

 

                  //若没有输入自定义的提示符,则给出相关提示

                  if(i>=11)

                  {

                         printf("'%s'不是内部或外部命令,也不是可运行的程序或批处理文件\n\n",name);

                  }

           }

    }

}

  1. 4.      运行结果及分析

 

     

     

四、        实验总结

难点:没有具体完成命令提示符的现实功能。以及没有其他命令提示符的主要功能介绍,如ASSOC,CALL等。

自身程序缺点:简单地完成各个命令提示符的相关介绍,并没有像系统提供的那样全面。不过这让我了解了程序运行原理。

 

源代码:

#include<stdio.h>
#include<string.h>
struct cmd
{
    char command_name[10];  //提示符名字
    char command_type[10];  //提示符命令类型
    char command_func[100]; //提示符功能
};
typedef struct cmd CMD;
void Head();
void Define(CMD c[20]);
void Input(CMD c[20]);
main()
{
    CMD c[20];
    Head();    
    Define(c);
    Input(c);
}

//设置控制台头部
void Head()
{
    printf("Microsoft Windows XP  [版本 5.1.2600]\n");
    printf("(C) 版权所有 1985-2001 Microsoft Corp.\n\n");
}
//自行定义系统提示符
void Define(CMD c[20])
{
    
    int i=0;
    char *name[11]={"dir","cd","md","rd","cls","date","time","ren","cope","help","quit"};
    char *type[11]={"内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","外部命令","外部命令"};
    char *func[11]={"显示一个目录中的文件和子目录","显示当前目录的名称或将其更改","创建一个目录","删除目录","清除屏幕","显示或设置日期",
        "内部命令显示或设置系统时间","重新命名文件","将至少一个文件复制到另一个位置","提供Windows命令的帮助信息","退出命令解释程序"};
    
    //将已定义好的提示符依次赋值给数组c
    for(i=0;i<11;i++)
    {
        strcpy(c[i].command_name,name[i]);
        strcpy(c[i].command_type,type[i]);
        strcpy(c[i].command_func,func[i]);
    }
}

//从键盘输入命令提示符,并输出相关结果
void Input(CMD c[20])
{
    char name[20];
    int i;
    while(1)
    {
        printf("C:\\Documents and Settings\\Administrator>");
        gets(name);

        //若输入help或HELP,则输出全部提示符信息
        if(strcmp("HELP",name)==0 || strcmp("help",name)==0)
        {    
            for(i=0;i<11;i++)
            {
                printf("%s",c[i].command_name);
                putchar('\t');
                printf("%s",c[i].command_type);
                putchar('\t');
                printf("%s",c[i].command_func);
                putchar('\n');
            }
            putchar('\n');
        }

        //若输入quit,则退出程序
        else if(strcmp("quit",name)==0)
        {
            return;
        }
        else
        {
            for(i=0;i<11;i++)
            {
                if(strcmp(c[i].command_name,name)==0)
                {
                    printf("%s",c[i].command_name);
                    putchar('\t');
                    printf("%s",c[i].command_type);
                    putchar('\t');
                    printf("%s",c[i].command_func);
                    putchar('\n');
                    putchar('\n');
                    break;
                }
            }

            //若没有输入自定义的提示符,则给出相关提示
            if(i>=11)
            {
                printf("'%s'不是内部或外部命令,也不是可运行的程序或批处理文件\n\n",name);
            }
        }
    }
}

 

 

 

 

 

 

 

 

posted @ 2016-03-25 12:20  56颜文生  阅读(236)  评论(0编辑  收藏  举报