實驗一、指令解釋程式的編寫實驗
專業: 商業軟體工程2班 姓名 :許佳儀 學号 :201406114212
一、 實驗目的
(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. 源程式名:壓縮封包件中源程式名 text.c
可執行程式名:text.exe
- 2. 原理分析及流程圖
顯示程式提示資訊;
While(1)
{ 顯示提示符;
接收鍵盤的字元串;
判斷是否quit程式退出指令,是則退出;
判斷是否内部指令,并給出相應的資訊,否則給出錯誤資訊;
}
顯示退出程式資訊;
- 3. 主要程式段及其解釋:
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 #define N 100
5 main()
6 {
7 char cmd[N][N]={"dir","cd","md","rd","cls","date","time","ren", "copy",
8 "javac","java","erase","chkntfs","assoc","at","attrib","call","help","quit"};
9 char str[N];
10 int i;
11 printf("Microsoft Windows [版本 6.1.7601]\n");
12 printf("版權所有 (c)2009 Microsoft Corporation。保留所有權利。\n");
13 while(1)
14 {
15 printf("C:\\Users\\Administrator>");
16 gets(str);
17 for(i=0;i<N;i++)
18 {
19 if(strcmp(str,cmd[0])==0)
20 {
21 printf("'%s'内部指令輸入正确!\n",str);
22 printf("該指令的作用是:顯示一個目錄中的檔案和子目錄。\n\n");
23 break;
24 }
25 else if(strcmp(str,cmd[1])==0)
26 {
27 printf("'%s'内部指令輸入正确!\n",str);
28 printf("該指令的作用是:顯示目前目錄的名稱或将其更改。\n\n");
29 break;
30 }
31 else if(strcmp(str,cmd[2])==0)
32 {
33 printf("'%s'内部指令輸入正确!\n",str);
34 printf("該指令的作用是:建立目錄。\n\n");
35 break;
36 }
37 else if(strcmp(str,cmd[3])==0)
38 {
39 printf("'%s'内部指令輸入正确!\n",str);
40 printf("該指令的作用是:删除目錄。\n\n");
41 break;
42 }
43 else if(strcmp(str,cmd[4])==0)
44 {
45 printf("'%s'内部指令輸入正确!\n",str);
46 printf("該指令的作用是:清除螢幕。\n\n");
47 break;
48 }
49 else if(strcmp(str,cmd[5])==0)
50 {
51 printf("'%s'内部指令輸入正确!\n",str);
52 printf("該指令的作用是:顯示或設定日期。\n\n");
53 break;
54 }
55 else if(strcmp(str,cmd[6])==0)
56 {
57 printf("'%s'内部指令輸入正确!\n",str);
58 printf("該指令的作用是:顯示或設定系統時間。\n\n");
59 break;
60 }
61 else if(strcmp(str,cmd[7])==0)
62 {
63 printf("'%s'内部指令輸入正确!\n",str);
64 printf("該指令的作用是:重命名檔案。\n\n");
65 break;
66 }
67 else if(strcmp(str,cmd[8])==0)
68 {
69 printf("'%s'内部指令輸入正确!\n",str);
70 printf("該指令的作用是:将至少一個檔案複制到另一個位置。\n\n");
71 break;
72 }
73 else if(strcmp(str,cmd[9])==0)
74 {
75 printf("'%s'外部指令輸入正确!\n",str);
76 printf("該指令的作用是:将某一個java程式進行編譯。\n\n");
77 break;
78 }
79 else if(strcmp(str,cmd[10])==0)
80 {
81 printf("'%s'外部指令輸入正确!\n",str);
82 printf("該指令的作用是:運作某一個已編譯的java檔案。\n\n");
83 break;
84 }
85 else if(strcmp(str,cmd[11])==0)
86 {
87 printf("'%s'内部指令輸入正确!\n",str);
88 printf("該指令的作用是:删除至少一個檔案。\n\n");
89 break;
90 }
91 else if(strcmp(str,cmd[12])==0)
92 {
93 printf("'%s'内部指令輸入正确!\n",str);
94 printf("該指令的作用是:顯示或修改啟動時間磁盤檢查。\n\n");
95 break;
96 }
97 else if(strcmp(str,cmd[13])==0)
98 {
99 printf("'%s'内部指令輸入正确!\n",str);
100 printf("該指令的作用是:顯示或修改檔案擴充名關聯。\n\n");
101 break;
102 }
103 else if(strcmp(str,cmd[14])==0)
104 {
105 printf("'%s'内部指令輸入正确!\n",str);
106 printf("該指令的作用是:計劃在計算機上運作的指令和程式。\n\n");
107 break;
108 }
109 else if(strcmp(str,cmd[15])==0)
110 {
111 printf("'%s'内部指令輸入正确!\n",str);
112 printf("該指令的作用是:顯示或更改檔案屬性。\n\n");
113 break;
114 }
115 else if(strcmp(str,cmd[16])==0)
116 {
117 printf("'%s'内部指令輸入正确!\n",str);
118 printf("該指令的作用是:從另一個批處理程式調用這一個。\n\n");
119 break;
120 }
121
122 else if(strcmp(str,cmd[17])==0)
123 {
124 printf("有關某個指令的詳細資訊,請鍵入 HELP 指令名\n");
125 printf("dir\t内部指令 顯示一個目錄中的檔案和子目錄。\n");
126 printf("cd\t内部指令 顯示目前目錄的名稱或将其更改。\n");
127 printf("md\t内部指令 建立目錄。\n");
128 printf("rd\t内部指令 删除目錄。\n");
129 printf("cls\t内部指令 清除螢幕。\n");
130 printf("date\t内部指令 顯示或設定日期。\n");
131 printf("time\t内部指令 顯示或設定系統時間。\n");
132 printf("ren\t内部指令 重命名檔案。\n");
133 printf("cope\t内部指令 将至少一個檔案複制到另一個位置。\n");
134 printf("javac\t外部指令 将某一個java程式進行編譯。\n");
135 printf("java\t外部指令 運作某一個已編譯的java檔案。\n");
136 printf("erase\t内部指令 删除至少一個檔案。\n");
137 printf("chkntfs\t内部指令 顯示或修改啟動時間磁盤檢查。 \n");
138 printf("assoc\t内部指令 顯示或修改檔案擴充名關聯。 \n");
139 printf("at\t内部指令 計劃在計算機上運作的指令和程式。 \n");
140 printf("attrib\t内部指令 顯示或更改檔案屬性。 \n");
141 printf("call\t内部指令 從另一個批處理程式調用這一個。 \n");
142 printf("help\t外部指令 提供Windows指令的幫助資訊。\n");
143 printf("quit\t外部指令 退出指令解釋程式\n\n");
144 break;
145 }
146 else if(strcmp(str,cmd[18])==0)
147 {
148 printf("\n程式結束!\n");
149 return 0;
150 }
151 else if(strcmp(str,cmd[i])!=0)
152 {
153 printf("'%s'不是内部或外部指令,也不是可運作的程式或批處理檔案。\n\n",str);
154 break;
155 }
156 }
157 }
158 }
- 4. 運作結果及分析

二、 實驗總結
通過本次實驗我進一步加深了對數組的了解,遇到不懂的通過詢問同學和上網搜尋相關知識,最後還是成功地解決了問題。