實驗一
一、 實驗目的
(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等。
三、 實驗方法、步驟及結果測試
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
int main()
{
char str[20];
char mini[20][20]={"?","cd","md","rd","cls","date","time","ren","copy","dir","quit","call",""};
printf("Microsoft Windows [版本 6.1.7601]\n版權所有 (c) 2013 Microsoft Corporation. 保留所有權利。\n\n");
while(1)
{
printf("C:\\Documents and Settings\\Users>");
gets(str);
strlwr(str);
if(strcmp(str,mini[0])==0)
{
printf("'?'\t外部指令輸入正确!\n");
printf("該指令作用是:提供windows指令的幫助資訊。\n\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("CALL\t内部指令 從另一個批處理程式調用這一個。\n\n");
printf("QUIT\t外部指令 退出指令解釋程式。\n");
printf("?\t外部指令 提供windows指令的幫助資訊。\n");
}
else if(strcmp(str,mini[1])==0)
{
printf("'CD'\t内部指令輸入正确!\n");
printf("該指令作用是:顯示目前目錄的名稱或将其更改。\n");
}
else if(strcmp(str,mini[2])==0)
{
printf("'MD'\t内部指令輸入正确!\n");
printf("該指令作用是:建立一個目錄。\n");
}
else if(strcmp(str,mini[3])==0)
{
printf("RD\t内部指令輸入正确!\n");
printf("該指令作用是:删除目錄。\n");
}
else if(strcmp(str,mini[4])==0) //清屏
{
printf("'CLS'\t内部指令輸入正确!\n");
printf("該指令作用是:清除螢幕。\n");
system("cls");
}
else if(strcmp(str,mini[5])==0) //顯示日期
{
printf("'DATE'\t内部指令輸入正确!\n");
printf("該指令作用是:顯示或設定日期。\n\n");
time_t t = time(0);
char tmp[64];
strftime( tmp, sizeof(tmp), "目前日期:%Y/%m/%d ",localtime(&t) );
puts( tmp );
printf("輸入新日期:<年/月>\n");
}
else if(strcmp(str,mini[6])==0) //顯示時間
{
printf("'TIME'\t内部指令輸入正确!\n");
printf("該指令作用是:顯示或設定系統時間。\n\n");
time_t t = time(0);
char tmp[64];
strftime( tmp, sizeof(tmp), "目前時間: %X ",localtime(&t) );
puts( tmp );
printf("輸入新的時間:\n");
}
else if(strcmp(str,mini[7])==0)
{
printf("'REN'\t内部指令輸入正确!\n");
printf("該指令作用是:重新命名檔案。\n");
}
else if(strcmp(str,mini[8])==0)
{
printf("'COPY'\t内部指令輸入正确!\n");
printf("該指令作用是:将至少一個檔案複制到另一個位置。\n");
}
else if(strcmp(str,mini[9])==0)
{
printf("'DIR'\t内部指令輸入正确!\n");
printf("該指令作用是:顯示一個目錄中的檔案和子目錄。\n\n");
system("dir");
}
else if(strcmp(str,mini[10])==0) //退出
{
printf("'QUIT'\t外部指令輸入正确!\n");
printf("該指令作用是:退出指令解釋程式。\n");
printf("see you!\n\n");
exit(0);
}
else if(strcmp(str,mini[11])==0)
{
printf("'CALL'\t内部指令輸入正确!\n");
printf("該指令作用是:從另一個批處理程式調用這一個。\n");
}
else if(strcmp(str,mini[12])==0)
{
printf("");
}
else
{
printf("指令輸入錯誤!\n\'%s\'",str);
printf("不是内部或外部指令,也不是可運作的程式或批處理檔案。\n");
}
}
return 0;
}

四、 實驗總結
通過練習實踐,編寫cmd有利于我們了解系統内部程式應用,有利于我們今後對作業系統的熟悉與學習。