天天看點

實驗一 指令解釋程式的編寫

實驗一  指令解釋程式的編寫

一、目的和要求

  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\n:");
 7     scanf("%d",&n);
 8     for(i=0;i<n;i++)
 9     {
10    printf("輸入cmd指令符\n:");
11    scanf("%s",cmd[i].name);
12    printf("輸入cmd指令符類型\n:");
13    scanf("%s",cmd[i].type);
14    printf("輸入cmd指令符功能\n:");
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 外部指令  将退出指令解釋程式 \n");
 5   printf("\n");          
 6   printf("程式結束\n ");
 7   printf("\n"); 
 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\n:");
 21     scanf("%d",&n);
 22     for(i=0;i<n;i++)
 23     {
 24    printf("輸入cmd指令符\n:");
 25    scanf("%s",cmd[i].name);
 26    printf("輸入cmd指令符類型\n:");
 27    scanf("%s",cmd[i].type);
 28    printf("輸入cmd指令符功能\n:");
 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 外部指令  将退出指令解釋程式 \n");
 67   printf("\n");          
 68   printf("程式結束\n ");
 69   printf("\n"); 
 70 
 71   exit (0);
 72   }
 73 else 
 74 if(strcmp(search,other[i])==0)
 75     { 
 76         printf("help 外部指令  提供Windows指令的幫助資訊\n");
 77         printf("有關某個指令的詳細資訊,請鍵入 help 指令名\n");
 78         printf("\n");
 79     for(i=0;fread(&cmd[i],sizeof(struct cmd),1,fp)==1;i++)
 80     {
 81     
 82         printf("  %s  %s  %s \n",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 \n",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]\n");
116     printf("版權所有 (c) 2009 Microsoft Corporation。 保留所有權利。\n");
117     printf(" \n");
118    //input ();
119 
120     while(j==1)  {  searchone();  }
121 
122 }