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


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

    一、目的和要求

    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 }
  • 相关阅读:
    zipkin启动报错(Caused by: java.lang.ClassNotFoundException: zipkin.Component)的解决方法
    Java中的long与double的区别
    redis使用笔记
    解决node编程频繁修改代码,需要重启服务器问题
    远程连接mysql要点 虚拟主机定义与分类
    详析静态网站与动态网站区别(服务器ip dns 端口)
    JavaEE-实验四 HTML与JSP基础编程
    JavaEE-实验三 Java数据库高级编程
    JavaEE-实验二 Java集合框架实验
    mysql中文乱码 常见编码问题解决方法分享
  • 原文地址:https://www.cnblogs.com/Ranjer/p/5317626.html
Copyright © 2020-2023  润新知