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

39賴文亮1發表於2016-03-25

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

一、目的和要求

  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 }

 

相關文章