实验一、命令解释程序的编写
专业:商软二班 姓名:林集团 学号:201406114244
一、 实验目的
(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. 源程序名:压缩包文件(rar或zip)中源程序名×××.c
可执行程序名:×××.exe
- 2. 原理分析及流程图
主要总体设计问题。
(包括存储结构,主要算法,关键函数的实现等)
- 3. 主要程序段及其解释:
//自行定义系统提示符
void Define(CMD c[20])
{
int i=0;
char *name[11]={"dir","cd","md","rd","cls","date","time","ren","cope","help","quit"};
char *type[11]={"内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","外部命令","外部命令"};
char *func[11]={"显示一个目录中的文件和子目录","显示当前目录的名称或将其更改","创建一个目录","删除目录","清除屏幕","显示或设置日期",
"内部命令显示或设置系统时间","重新命名文件","将至少一个文件复制到另一个位置","提供Windows命令的帮助信息","退出命令解释程序"};
//将已定义好的提示符依次赋值给数组c
for(i=0;i<11;i++)
{
strcpy(c[i].command_name,name[i]);
strcpy(c[i].command_type,type[i]);
strcpy(c[i].command_func,func[i]);
}
}
//从键盘输入命令提示符,并输出相关结果
void Input(CMD c[20])
{
char name[20];
int i;
while(1)
{
printf("C:\Documents and Settings\Administrator>");
gets(name);
//若输入help或HELP,则输出全部提示符信息
if(strcmp("HELP",name)==0 || strcmp("help",name)==0)
{
for(i=0;i<11;i++)
{
printf("%s",c[i].command_name);
putchar(' ');
printf("%s",c[i].command_type);
putchar(' ');
printf("%s",c[i].command_func);
putchar(' ');
}
putchar(' ');
}
//若输入quit,则退出程序
else if(strcmp("quit",name)==0)
{
return;
}
else
{
for(i=0;i<11;i++)
{
if(strcmp(c[i].command_name,name)==0)
{
printf("%s",c[i].command_name);
putchar(' ');
printf("%s",c[i].command_type);
putchar(' ');
printf("%s",c[i].command_func);
putchar(' ');
putchar(' ');
break;
}
}
//若没有输入自定义的提示符,则给出相关提示
if(i>=11)
{
printf("'%s'不是内部或外部命令,也不是可运行的程序或批处理文件 ",name);
}
}
}
}
- 4. 运行结果及分析


四、 实验总结
难点:没有具体完成命令提示符的现实功能。以及没有其他命令提示符的主要功能介绍,如ASSOC,CALL等。
自身程序缺点:简单地完成各个命令提示符的相关介绍,并没有像系统提供的那样全面。不过这让我了解了程序运行原理。
源代码:
#include<stdio.h>
#include<string.h>
struct cmd
{
char command_name[10]; //提示符名字
char command_type[10]; //提示符命令类型
char command_func[100]; //提示符功能
};
typedef struct cmd CMD;
void Head();
void Define(CMD c[20]);
void Input(CMD c[20]);
main()
{
CMD c[20];
Head();
Define(c);
Input(c);
}
//设置控制台头部
void Head()
{
printf("Microsoft Windows XP [版本 5.1.2600]
");
printf("(C) 版权所有 1985-2001 Microsoft Corp.
");
}
//自行定义系统提示符
void Define(CMD c[20])
{
int i=0;
char *name[11]={"dir","cd","md","rd","cls","date","time","ren","cope","help","quit"};
char *type[11]={"内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","内部命令","外部命令","外部命令"};
char *func[11]={"显示一个目录中的文件和子目录","显示当前目录的名称或将其更改","创建一个目录","删除目录","清除屏幕","显示或设置日期",
"内部命令显示或设置系统时间","重新命名文件","将至少一个文件复制到另一个位置","提供Windows命令的帮助信息","退出命令解释程序"};
//将已定义好的提示符依次赋值给数组c
for(i=0;i<11;i++)
{
strcpy(c[i].command_name,name[i]);
strcpy(c[i].command_type,type[i]);
strcpy(c[i].command_func,func[i]);
}
}
//从键盘输入命令提示符,并输出相关结果
void Input(CMD c[20])
{
char name[20];
int i;
while(1)
{
printf("C:\Documents and Settings\Administrator>");
gets(name);
//若输入help或HELP,则输出全部提示符信息
if(strcmp("HELP",name)==0 || strcmp("help",name)==0)
{
for(i=0;i<11;i++)
{
printf("%s",c[i].command_name);
putchar(' ');
printf("%s",c[i].command_type);
putchar(' ');
printf("%s",c[i].command_func);
putchar('
');
}
putchar('
');
}
//若输入quit,则退出程序
else if(strcmp("quit",name)==0)
{
return;
}
else
{
for(i=0;i<11;i++)
{
if(strcmp(c[i].command_name,name)==0)
{
printf("%s",c[i].command_name);
putchar(' ');
printf("%s",c[i].command_type);
putchar(' ');
printf("%s",c[i].command_func);
putchar('
');
putchar('
');
break;
}
}
//若没有输入自定义的提示符,则给出相关提示
if(i>=11)
{
printf("'%s'不是内部或外部命令,也不是可运行的程序或批处理文件
",name);
}
}
}
}
