实验一、命令解释程序的编写实验
                        专业:商业软件工程 姓名:邹育萍 学号:201406114106
一、 实验目的
(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. 主要程序段及其解释:

char cmd[30][30]={"dir","cd","md","rd","cls","date","time","ren","copy",
"erase","chkntfs","assoc","at","attrib","call","javac","java","help","quit"};

while(1)
{
printf("\nC:\\Users\\ac>");
gets(str);
strlwr(str);    //把str字符串的大写字母转换成小写
if(strcmp(str,cmd[0])==0)
{
printf("dir 显示一个目录中的文件和子目录。\n内部命令\n");
}
else if(strcmp(str,cmd[1])==0)
{
printf("cd 显示当前目录的名称或将其更改。\n内部命令\n");
}
else if(strcmp(str,cmd[2])==0)
{
printf("md 创建目录。\n内部命令\n");
}
else if(strcmp(str,cmd[3])==0)
{
printf("rd 删除目录。\n内部命令\n");
}
else if(strcmp(str,cmd[4])==0)
{
printf("cls 清除屏幕。\n内部命令\n");
}
else if(strcmp(str,cmd[5])==0)
{
printf("data 显示或设置日期。\n内部命令\n");
}
else if(strcmp(str,cmd[6])==0) 
{
printf("time 显示或设置系统时间。\n内部命令\n");
}
else if(strcmp(str,cmd[7])==0)
{ 
printf("ren 重命名文件\n内部命令\n");
}
else if(strcmp(str,cmd[8])==0)
{
printf("copy 将至少一个文件复制到另一个位置。\n内部命令\n");
}
else if(strcmp(str,cmd[9])==0)
{ 
printf("erase 删除至少一个文件。\n内部命令\n");
}
else if(strcmp(str,cmd[10])==0)
{
printf("chkntfs 显示或修改启动时间磁盘检查。\n内部命令\n");
}
else if(strcmp(str,cmd[11])==0)
{ 
printf("assoc 显示或修改文件扩展名关联。\n内部命令\n");
}
else if(strcmp(str,cmd[12])==0)
{
printf("at 计划在计算机上运行的命令和程序。\n内部命令\n");
}
else if(strcmp(str,cmd[13])==0)
{ 
printf("attrib 显示或更改文件属性。\n内部命令\n");
}
else if(strcmp(str,cmd[14])==0)
{
printf("call 从另一个批处理程序调用这一个。\n内部命令\n");
}
else if(strcmp(str,cmd[15])==0)
{ 
printf("javac 将某一个java程序进行编译。\n外部命令\n");
}
else if(strcmp(str,cmd[16])==0)
{
printf("java 运行某一个已编译的java文件。\n外部命令\n");
}
else if(strcmp(str,cmd[17])==0)
{
printf("dir    显示一个目录中的文件和子目录。\n");
printf("cd    显示当前目录的名称或将其更改。\n");
printf("md    创建目录。\n");
printf("rd    删除目录。\n");
printf("cls    清除屏幕。\n");
printf("data    显示或设置日期。\n");
printf("time    显示或设置系统时间。\n");
printf("ren    重命名文件。\n");
printf("copy    将至少一个文件复制到另一个位置。\n");
printf("erase    删除至少一个文件。\n");
printf("chkntfs    显示或修改启动时间磁盘检查。\n");
printf("assoc    显示或修改文件扩展名关联。\n");
printf("at    计划在计算机上运行的命令和程序。\n");
printf("attrib    显示或更改文件属性。\n");
printf("call    从另一个批处理程序调用这一个。\n");
printf("javac    将某一个java程序进行编译。\n");
printf("java    运行某一个已编译的java文件。\n");
printf("help    提供Windows命令的帮助信息。\n");
printf("quit    退出命令解释程序。\n");
}
else if(strcmp(str,cmd[18])==0)
return;
else
{
printf("不是内部或外部命令,也不是可运行的程序\n或批处理文件。\n");
}
}
}

 

2. 运行结果及分析

四、 实验总结
打算用结构体来和打开文件来储存信息,参照老师的代码希望对日后理解操作系统的过程有所帮助。对英文字母的大小写转换除了可以用ASCII表还可以用Strlwr语句和strupr语句是对字符串字母进行大小写转换。