03-25實驗一、命令解釋程式的編寫

44.林集團發表於2016-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('\t');

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

                         putchar('\t');

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

                         putchar('\n');

                  }

                  putchar('\n');

           }

 

           //若輸入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('\t');

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

                                putchar('\t');

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

                                putchar('\n');

                                putchar('\n');

                                break;

                         }

                  }

 

                  //若沒有輸入自定義的提示符,則給出相關提示

                  if(i>=11)

                  {

                         printf("'%s'不是內部或外部命令,也不是可執行的程式或批處理檔案\n\n",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]\n");
    printf("(C) 版權所有 1985-2001 Microsoft Corp.\n\n");
}
//自行定義系統提示符
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('\t');
                printf("%s",c[i].command_type);
                putchar('\t');
                printf("%s",c[i].command_func);
                putchar('\n');
            }
            putchar('\n');
        }

        //若輸入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('\t');
                    printf("%s",c[i].command_type);
                    putchar('\t');
                    printf("%s",c[i].command_func);
                    putchar('\n');
                    putchar('\n');
                    break;
                }
            }

            //若沒有輸入自定義的提示符,則給出相關提示
            if(i>=11)
            {
                printf("'%s'不是內部或外部命令,也不是可執行的程式或批處理檔案\n\n",name);
            }
        }
    }
}
複製程式碼

 

 

相關文章