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


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

    专业:商软二班  姓名:林集团  学号:201406114244

    一、        实验目的

    (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(' ');

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

                             putchar(' ');

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

                             putchar(' ');

                      }

                      putchar(' ');

               }

               //若输入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(' ');

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

                                    putchar(' ');

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

                                    putchar(' ');

                                    putchar(' ');

                                    break;

                             }

                      }

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

                      if(i>=11)

                      {

                             printf("'%s'不是内部或外部命令,也不是可运行的程序或批处理文件 ",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]
    ");
        printf("(C) 版权所有 1985-2001 Microsoft Corp.
    
    ");
    }
    //自行定义系统提示符
    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('	');
                    printf("%s",c[i].command_type);
                    putchar('	');
                    printf("%s",c[i].command_func);
                    putchar('
    ');
                }
                putchar('
    ');
            }
    
            //若输入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('	');
                        printf("%s",c[i].command_type);
                        putchar('	');
                        printf("%s",c[i].command_func);
                        putchar('
    ');
                        putchar('
    ');
                        break;
                    }
                }
    
                //若没有输入自定义的提示符,则给出相关提示
                if(i>=11)
                {
                    printf("'%s'不是内部或外部命令,也不是可运行的程序或批处理文件
    
    ",name);
                }
            }
        }
    }
    复制代码

     

  • 相关阅读:
    Lucas 定理
    C语言II博客作业04
    C语言II博客作业03
    C语言II博客作业02
    C语言II博客作业01
    学期总结
    First project
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
  • 原文地址:https://www.cnblogs.com/linjituan/p/5319673.html
Copyright © 2020-2023  润新知