实验一、命令解释程序的编写
专业:商业软件工程一班 姓名:容杰龙 学号:201406114157
一、 实验目的
(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. 源程序名:压缩包文件中源程序名 MiniOS.cpp
可执行程序名:MiniOS.exe
2. 原理分析及流程图
采用读取文件的方式读取命令,用户输入的字符串与文件里面的命令比较,输出相应的作用功能。
主要用到以下一个结构体类型:
struct Cmd{
char cmd[30]; //命令名称
char function[500]; //命令功能解释
int post; //标志内、外部命令
char parameters[800]; //参数命令
};
3. 主要程序段及其解释:
1 void process(struct Cmd cm[Max]) 2 { 3 char str[10]; 4 printf("Microsoft Windows XP [版本 5.1.2600] "); 5 printf("(C) 版权所有 1985-2001 Microsoft Corp. "); 6 while(strcmp(str,"quit")!=0){ /*控制循环*/ 7 printf(" C:\Documents and Settings\hskd>"); 8 scanf("%s",str); 9 strlwr(str); /*大写变小写*/ 10 bool flag=false; 11 if(strcmp(str,"help")==0) 12 { 13 printf("有关某个命令的详细信息,请键入 HELP 命令名 "); 14 display(cm); 15 flag=true; 16 }else{ 17 for(int i=0;i<count;i++) 18 { 19 if(strcmp(str,cm[i].cmd)==0) /*比较用户输入的字符串与文件存储的关键字命令名称是否相等*/ 20 { 21 if(cm[i].post==1) 22 { 23 printf("'%s' 内部命令输入正确! 该命令作用是:%s ",str,cm[i].function); 24 printf("%s ",&cm[i].parameters); 25 } 26 else 27 { 28 printf("'%s' 外部命令输入正确! 该命令作用是:%s ",str,cm[i].function); 29 printf("%s",&cm[i].parameters); 30 } 31 flag=true; 32 break; 33 } 34 } 35 if(!flag){ 36 if(strcmp(str,"quit")!=0) 37 printf("'%s' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 ",str); 38 } 39 } 40 } 41 printf(" 程序结束! "); 42 }
4、运行结果及分析
实验结果与预期基本一致
四、 实验总结
通过本次实验,让自己回顾了C语言,运用到顺序、选择、循环三种基本结构,同时也用到了读取文件的方式读取数据,加深对操作系统的认识。这次实验在老师的代码的基础上,扩充了内容,修改了一小部分,该程序基本达到预期效果。