操做系統之實驗一 命令解釋程序的編寫

實驗1、命令解釋程序的編寫算法

                                                            專業:商業軟件工程     班級:商軟2班     姓名:甘佳萍     學號:201406114207編程

1、        實驗目的數組

(1)掌握命令解釋程序的原理;函數

(2)掌握簡單的DOS調用方法;測試

(3)掌握C語言編程初步。ui

 

2、        實驗內容和要求編碼

實驗內容:根據教師指定的實驗課題,完成設計、編碼、測試工做。spa

實驗要求:編寫相似於DOS,UNIX的命令行解釋程序命令行

(1)自行定義系統提示符設計

(2)自定義命令集(8-10個)

(3)用戶輸入HELP以查找命令的幫助

(4)列出命令的功能,區份內部仍是外部命令

(5)用戶輸入QUIT退出

(6)內部命令有dir, cd, md, rd, cls, date, time, ren, copy等。

 

3、        實驗方法、步驟及結果測試

 1.      源程序名:壓縮包文件(rarzip)中源程序名yy.c

可執行程序名:yy.exe

 2.      原理分析及流程圖

主要整體設計問題。

(包括存儲結構,主要算法,關鍵函數的實現等)

存儲結構:

    char cmd[30][30]={"dir","cd","md","rd","cls","date","time","ren", "copy","quit","help"};  
    char cmd2[30][30]={"DIR","CD","MD","RD","CLS","DATE","TIME","REN","COPY","QUIT","HELP"}; char str[10]; 

主要算法:

if(strcmp(str,cmd[i])==0)

或else if(strcmp(str,cmd[i])!=0)

關鍵函數:

main()

 3.      主要程序段及其解釋:

實現主要功能的程序段,重要的是程序的註釋解釋。

源程序:

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
main() 
{     

    /*存放命令提示符的數組*/
    char cmd[30][30]={"dir","cd","md","rd","cls","date","time","ren", "copy","quit","help"};  
    char cmd2[30][30]={"DIR","CD","MD","RD","CLS","DATE","TIME","REN","COPY","QUIT","HELP"};
    char str[10];  
    int i;  

     /*仿照cmd開頭輸出*/
    printf("Microsoft Windows XP [版本 5.1.2600]\n<c>版權全部 1985-2001 Microsoft Corp.\n");

   /*判斷命令的類型及功能*/
    while(1)
    {    

        printf("\nC:\\Documents and Settings\\hskd:>"); 
        gets(str);    //從鍵盤輸入        
        for(i=0;i<20;i++){       
        {            
            if(strcmp(str,cmd[0])==0||strcmp(str,cmd2[0])==0)       
            {   
                system("dir");     //dir命令
                break;       
            }    
            else if(strcmp(str,cmd[1])==0||strcmp(str,cmd2[1])==0)       
            {    
                printf("%s",cmd[1]);
                printf("\t類型:內部命令\n");       
                printf("\t顯示當前目錄的名稱或將其更改\n");    
                printf("\n");             
                break;       
            }    
            else if(strcmp(str,cmd[2])==0||strcmp(str,cmd2[2])==0)       
            {  
                printf("%s",cmd[2]);
                printf("\t類型:內部命令\n");       
                printf("\t建立目錄。\n");   
                printf("\n");       
                break;       
            }    
            else if(strcmp(str,cmd[3])==0||strcmp(str,cmd2[3])==0)       
            {    
                printf("%s",cmd[3]);
                printf("\t類型:內部命令\n");       
                printf("\t刪除目錄。\n");   
                printf("\n");           
                break;       
            }    
            else if(strcmp(str,cmd[4])==0||strcmp(str,cmd2[4])==0)       
            {   
                system("cls"); //清屏      
                break;      
            }    
            else if(strcmp(str,cmd[5])==0||strcmp(str,cmd2[5])==0)      
            {   
                printf("%s",cmd[5]);
                printf("\t類型:內部命令\n");       
                printf("\t顯示或設置日期。\n");    
                printf("\n");           
                break;       
            }    
            else if(strcmp(str,cmd[6])==0||strcmp(str,cmd2[6])==0) 
            {    
                printf("%s",cmd[6]);
                printf("\t類型:內部命令\n");       
                printf("\t顯示或設置系統時間。\n");   
                printf("\n");           
                break;       
            }    
            else if(strcmp(str,cmd[7])==0||strcmp(str,cmd2[7])==0)       
            {  
                printf("%s",cmd[7]);
                printf("\t類型:內部命令\n");       
                printf("\t重命名文件。\n");    
                printf("\n");          
                break;       
            }    
            else if(strcmp(str,cmd[8])==0||strcmp(str,cmd2[8])==0)       
            {    
                printf("%s",cmd[8]);
                printf("\t類型:內部命令\n");       
                printf("\t將至少一個文件複製到另外一個位置。\n");   
                printf("\n");           
                break;      
            }          
            else if(strcmp(str,cmd[9])==0||strcmp(str,cmd2[9])==0)      
            {     
                return 0; 
            }   
            else if(strcmp(str,cmd[10])==0||strcmp(str,cmd2[10])==0)      
            {       
            printf("類型:外部命令\n");     
            printf("dir\t內部命令 顯示一個目錄中的文件和子目錄。\n");     
            printf("cd\t內部命令 顯示當前目錄的名稱或將其更改。\n");     
            printf("md\t內部命令 建立目錄。\n");    
            printf("rd\t內部命令 刪除目錄。\n");     
            printf("cls\t內部命令 清除屏幕。\n");     
            printf("date\t內部命令 顯示或設置日期。\n");      
            printf("time\t內部命令 顯示或設置系統時間。\n");      
            printf("ren\t內部命令 從新命名文件。\n");      
            printf("copy\t內部命令 將至少一個文件複製到另外一個位置。\n");   
            printf("help\t外部命令 提供Windows命令的幫助信息。\n");    
            printf("quit\t外部命令 退出命令解釋程序\n");      
            printf("\n");          
      
            break;              
            }
               else if(strcmp(str,cmd[i])!=0)
               {     
                     printf("此命令不是內部或外部命令,也不是可運行的程序或批處理文件\n");     
                    printf("\n");     
                    break;
               }       
           }     
       }     
    }    
}

 4.      運行結果及分析

通常必須配運行結果截圖,結果是否符合預期及其分析。

   (截圖需根據實際,截取有表明性的測試例子)

運行結果:

輸入大寫或小寫的DIR,dir後的運行結果即查看目錄

輸入cls後的運行結果即清屏

 

   

                

4、        實驗總結

編寫命令解釋程序的過程有(如解決實際問題)。從解決實際問題的角度,咱們能夠這樣來看:首先要了解這個問題的基本要求,即輸入、輸出、完成從輸入到輸出的要求是什麼;其次,從問題的要害入手,從前到後的解決問題的每一個方面,即從輸入開始入手,着重考慮如何從輸入導出輸出。在這個過程當中,可肯定所需的變量、數組、函數,而後肯定處理的過程--算法。可得出最後的結論,進而完成程序的編寫。通過此次實驗,我對c語言有了深一步的瞭解,同時也初步瞭解了DOS的調用原理,命令解釋程序的工做原理。總的來講這個實驗不是很難,還有這個實驗頗有趣。

相關文章
相關標籤/搜索