OS实验一实验报告
實驗一、命令解釋程序的編寫實驗
專業:商業軟件工程?? 姓名:王澤鍇? 學號:201406114113
一、實驗目的
(1)掌握命令解釋程序的原理;
(2)*掌握簡單的DOS調用方法;
(3)掌握C語言編程初步。
二、實驗內容和要求
根據教師指定的實驗課題,完成設計、編碼、測試工作。
?2.?實驗要求:
編寫類似于DOS,UNIX的命令行解釋程序
(1)自行定義系統提示符
(2)自定義命令集(8-10個)
(3)用戶輸入HELP以查找命令的幫助
(4)列出命令的功能,區分內部還是外部命令
(5)用戶輸入QUIT退出
(6)內部命令有dir, cd, md, rd, cls, date, time, ren, copy等。
三、實驗方法、步驟及結果測試
1.源程序名:MiniOS.cpp
可執行程序名:MiniOS.exe
2.原理分析及流程圖
進入程序操作頁面,輸入命令后,判斷是否存在相應的命令,如果不存在則提示說命令錯誤。如果存在則輸入該命令是內部命令或者外部命令,并解釋該命令的作用。
3.主要程序段及其解釋:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 30
main()
{
??? char str[N];
??? int i,j;
??? char cmd[N][N] = {"dir","cd","md","rd","cls","date","time","ren","copy","quit","help"};
??? printf("Microsoft Windows XP [版本 5.1.2600]\n");
??? printf("<C> 版權所有 1985-2001 Microsoft Crop.\n");
??? while(1)
??? {
?????????? printf("\nC:\\Documents and Settings\Administrator>");
?????????? gets(str);
?????????? for(i=0;i<20;i++)
?????????? {??????
????????????????? {??
???????????????????????? if(strcmp(str,cmd[0])==0)?
???????????????????????? {???
??????????????????????????????? printf("類型:內部命令\n");?
??????????????????????????????? printf("顯示一個目錄中的文件和子目錄。\n");???????
??????????????????????????????? break;?????
???????????????????????? }?
???????????????????????? else if(strcmp(str,cmd[1])==0)
???????????????????????? {???
??????????????????????????????? printf("類型:內部命令\n");???
??????????????????????????????? printf("顯示當前目錄的名稱或將其更改。\n");???????
??????????????????????????????? break;????
???????????????????????? }???
???????????????????????? else if(strcmp(str,cmd[2])==0)??
???????????????????????? {??
??????????????????????????????? printf("類型:內部命令\n");??
??????????????????????????????? printf("創建一個目錄。\n");?????
??????????????????????????????? break;??
???????????????????????? }? ??
???????????????????????? else if(strcmp(str,cmd[3])==0)???
???????????????????????? {?
??????????????????????????????? printf("類型:內部命令\n");???
??????????????????????????????? printf("刪除目錄。\n");???
??????????????????????????????? break;?????
???????????????????????? }???
???????????????????????? else if(strcmp(str,cmd[4])==0)???
???????????????????????? {?????????
??????????????????????????????? printf("類型:內部命令\n");??
??????????????????????????????? printf("清除屏幕。\n");
??????????????????????????????? break;????
???????????????????????? }??
???????????????????????? else if(strcmp(str,cmd[5])==0)??
???????????????????????? {???
??????????????????????????????? printf("類型:內部命令\n");
??????????????????????????????? printf("顯示或設置日期。\n");????
??????????????????????????????? break;?????
???????????????????????? }??
???????????????????????? else if(strcmp(str,cmd[6])==0)?
???????????????????????? {??
??????????????????????????????? printf("類型:內部命令\n");????
??????????????????????????????? printf("內部命令顯示或設置系統時間。\n");??????
??????????????????????????????? break;???
???????????????????????? }?
???????????????????????? else if(strcmp(str,cmd[7])==0)?
???????????????????????? {??
??????????????????????????????? printf("類型:內部命令\n");???
??????????????????????????????? printf("重新命名文件。\n");?????
??????????????????????????????? break;???
???????????????????????? }???
???????????????????????? else if(strcmp(str,cmd[8])==0)?????
???????????????????????? {????
??????????????????????????????? printf("類型:內部命令\n");??
??????????????????????????????? printf("將至少一個文件復制到另一個位置。\n");????
??????????????????????????????? break;???
???????????????????????? }??????
???????????????????????? else if(strcmp(str,cmd[9])==0)??
???????????????????????? {???
??????????????????????????????? exit(0);
???????????????????????? }??
???????????????????????? else if(strcmp(str,cmd[10])==0)???
???????????????????????? {
??????????????????????????????? printf("類型:外部命令\n");
??????????????????????????????? printf("有關某個命令的詳細信息,請鍵入 HELP 命令名\n");
??????????????????????????????? printf("dir 內部命令 顯示一個目錄中的文件和子目錄。\n");?
??????????????????????????????? printf("cd 內部命令 顯示當前目錄的名稱或將其更改。\n");
??????????????????????????????? printf("md 內部命令 創建一個目錄。\n");?
??????????????????????????????? printf("rd 內部命令 刪除目錄。.\n");??
??????????????????????????????? printf("cls 內部命令 清除屏幕。\n");??
??????????????????????????????? printf("date 內部命令 顯示或設置日期。\n"); ?
??????????????????????????????? printf("time 內部命令 內部命令顯示或設置系統時間。\n");?
??????????????????????????????? printf("ren 內部命令 重新命名文件。\n");???
??????????????????????????????? printf("copy 內部命令 將至少一個文件復制到另一個位置。\n");
??????????????????????????????? printf("help 外部命令 提供Windows命令的幫助信息。\n");
??????????????????????????????? printf("quit 外部命令 退出命令解釋程序\n");????
??????????????????????????????? /* printf("CALL\t從一個批處理程序調用這一個。\n");
??????????????????????????????? printf("CMD\t打開另一個Windows命令解釋窗口。\n");
??????????????????????????????? printf("COLOR\t設置默認控制臺前景和背景顏色。\n");
??????????????????????????????? printf("DEL\t刪除至少一個文件。\n");??
??????????????????????????????? printf("EXIT\t退出命令解釋程序。\n");?
??????????????????????????????? printf("FIND\t在一個或多個文件中搜索一個文本字符串。\n");??
??????????????????????????????? printf("MKDIR\t創建一個目錄。\n");???
??????????????????????????????? printf("MODE\t配置系統設備。\n");??
??????????????????????????????? printf("PRINT\t打印一個文本文件。\n");???
??????????????????????????????? printf("REPLACE\t替換文件。\n");
??????????????????????????????? printf("RENAME\t重新命名文件。\n");*/?
??????????????????????????????? printf("\n有關工具的詳細信息,請參閱聯機幫助中的命令行參考。\n");
??????????????????????????????? break;??????????
???????????????????????? }
???????????????????????? else if(strcmp(str,cmd[i])!=0)
???????????????????????? {? ???
??????????????????????????????? printf("此命令不是內部或外部命令,也不是可運行的程序或批處理文件\n");?
??????????????????????????????? printf("\n");???
??????????????????????????????? break;
???????????????????????? }
????????????????? }
?????????? }
??? }????
}
4.運行結果及分析
實驗結果與預期的一致。
四、實驗總結
命令解釋程序總體來說還是比較簡單的,主要的難度在于讀取文件,還有作比較的地方,由于一開始采用讀取文檔的方法,但問題沒得到解決,之后采用了直接存儲在數組中。
轉載于:https://www.cnblogs.com/wangzekai/p/5289113.html
總結
- 上一篇: 晚上做梦梦到猪和牛好不好
- 下一篇: 【iCore3 双核心板_FPGA】例程