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

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

一、目的和要求

  1. 掌握命令解释程序的原理;
  2. 掌握简单的DOS调用方法;
  3. 掌握C语言编程初步。

二、实验要求

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

  1. 自行定义系统提示符
  2. 自定义命令集
  3. 用户输入HELP以查找命令的帮助
  4. 列出命令的功能,区分内部还是外部命令
  5. 用户输入QUIT退出
  6. 内部命令有dir,cd,md,rd,cls,date,time,ren,copy等

 三、编程实现流程

显示程序提示信息;

While(1)

{ 显示提示符;

接收键盘的字符串;

判断是否quit程序退出指令,是则退出;

判断是否内部命令,并给出相应的信息,否则给出错误信息;

 }

显示退出程序信息;

具体实现:

  1. 整体体现

    本程序利用C语言文件存储的方式实现cmd命令相关信息的存储,相关代码片段为:

FILE *fp;

fp=fopen("E:\caozuo.txt","a+");打开文件,采用可写入方式,原文件夹的文件不会覆盖,将会在文件最后面加上。

fclose(fp);关闭文件。

     2.显示提示符

        显示界面输入,界面如下:

        

       3.接收键盘的字符串;

          接受键盘输入的字符串,输入的字符串采用结构体的方法实现,存储到TXT文件中,可以方便一直使用。具体实现代码如下:

 1 void input()
 2 {   FILE *fp; 
 3 fp=fopen("E:\caozuo.txt","a+");
 4     int i;
 5     int n;
 6     printf("请输入你要录入的个数n
:");
 7     scanf("%d",&n);
 8     for(i=0;i<n;i++)
 9     {
10    printf("输入cmd命令符
:");
11    scanf("%s",cmd[i].name);
12    printf("输入cmd命令符类型
:");
13    scanf("%s",cmd[i].type);
14    printf("输入cmd命令符功能
:");
15    scanf("%s",cmd[i].function);
16    fwrite(&cmd[i],sizeof(struct cmd),1,fp);
17       }

    上面这段是录入信息的代码片段。

    接受键盘输入命令符进行判断则定义一个数组search[]和已有的存储的信息进行判断,例如:

char search[5];

scanf("%s",search);

判断语句(部分):if(strcmp(search,other[i])==0)

     4.判断是否quit程序退出指令,是则退出;并显示退出程序信息

实现代码:

 1 for(i=0;i<2;i++)
 2 {
 3   if(strcmp(search,another[i])==0)
 4         {    printf(" quit 外部命令  将退出命令解释程序 
");
 5   printf("
");          
 6   printf("程序结束
 ");
 7   printf("
"); 
 8 
 9   exit (0);
10   }

      

      实现结果如图:

      

     

     5.判断是否内部命令,并给出相应的信息,否则给出错误信息;

判断(随机):

     

     

     四、实验拓展

     实现大小写的输入:

本程序主要是实现大写转为小写即可,小写能实现:

实现具体代码为:

     

1 for( i=0;i<strlen(search);i++)
2 {
3 search[i] = tolower(search[i]);
4 
5 }

     实现此功能需要加上头文件#include <string.h>和#include <ctype.h>

实现结果为:

     

    五:实验总结

    了解了cmd的运行与实现,和最基础的命令相关信息。

    六、源程序为:

    

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 #include <ctype.h>
  5 #define N 10
  6 
  7 typedef struct cmd
  8 {
  9     char name[5];
 10     char type[10];
 11     char function[30];
 12 }CMD;
 13 CMD cmd[N];
 14 
 15 void input()
 16 {   FILE *fp; 
 17 fp=fopen("E:\caozuo.txt","a+");
 18     int i;
 19     int n;
 20     printf("请输入你要录入的个数n
:");
 21     scanf("%d",&n);
 22     for(i=0;i<n;i++)
 23     {
 24    printf("输入cmd命令符
:");
 25    scanf("%s",cmd[i].name);
 26    printf("输入cmd命令符类型
:");
 27    scanf("%s",cmd[i].type);
 28    printf("输入cmd命令符功能
:");
 29    scanf("%s",cmd[i].function);
 30    fwrite(&cmd[i],sizeof(struct cmd),1,fp);
 31       }
 32     fclose(fp);
 33 }
 34 
 35 /*void convert()
 36 {
 37     char search[5];
 38 for(int i=0;i<strlen(search);i++)
 39 {
 40 search[i] = tolower(search[i]);
 41 
 42 }
 43 }*/
 44 void searchone()
 45 {   int i;
 46     char other[6][6]={"help"};
 47     char another[6][6]={"quit"};
 48    char a[]="C:\Users\Administrator>";
 49     FILE *fp; 
 50 fp=fopen("E:\caozuo.txt","rb");
 51 
 52     char search[5];
 53 
 54     printf("%s:",a);
 55 
 56 scanf("%s",search);
 57 
 58 for( i=0;i<strlen(search);i++)
 59 {
 60 search[i] = tolower(search[i]);
 61 
 62 }
 63 for(i=0;i<2;i++)
 64 {
 65   if(strcmp(search,another[i])==0)
 66         {    printf(" quit 外部命令  将退出命令解释程序 
");
 67   printf("
");          
 68   printf("程序结束
 ");
 69   printf("
"); 
 70 
 71   exit (0);
 72   }
 73 else 
 74 if(strcmp(search,other[i])==0)
 75     { 
 76         printf("help 外部命令  提供Windows命令的帮助信息
");
 77         printf("有关某个命令的详细信息,请键入 help 命令名
");
 78         printf("
");
 79     for(i=0;fread(&cmd[i],sizeof(struct cmd),1,fp)==1;i++)
 80     {
 81     
 82         printf("  %s  %s  %s 
",cmd[i].name,cmd[i].type,cmd
 83 
 84 [i].function);
 85 
 86     }
 87     fclose(fp);
 88     
 89     }
 90 
 91     else 
 92         
 93         for(i=0;i<20;i++)
 94     {
 95         fread(&cmd[i],sizeof(struct cmd),1,fp);
 96     if(strcmp(search, cmd[i].name)==0)
 97         printf("  %s  %s  %s 
",cmd[i].name,cmd[i].type,cmd
 98 
 99 [i].function);
100 
101     }
102 
103     
104     fclose(fp);
105  
106     }
107 }
108 
109 
110 
111 main()
112 {
113 int j=1;int i;
114 
115     printf("Microsoft Windows [版本 6.1.7601]
");
116     printf("版权所有 (c) 2009 Microsoft Corporation。 保留所有权利。
");
117     printf(" 
");
118    //input ();
119 
120     while(j==1)  {  searchone();  }
121 
122 }
原文地址:https://www.cnblogs.com/Ranjer/p/5317626.html