实验一
一、 实验目的
(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等。
三、 实验方法、步骤及结果测试
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
int main()
{
char str[20];
char mini[20][20]={"?","cd","md","rd","cls","date","time","ren","copy","dir","quit","call",""};
printf("Microsoft Windows [版本 6.1.7601]\n版权所有 (c) 2013 Microsoft Corporation. 保留所有权利。\n\n");
while(1)
{
printf("C:\\Documents and Settings\\Users>");
gets(str);
strlwr(str);
if(strcmp(str,mini[0])==0)
{
printf("'?'\t外部命令输入正确!\n");
printf("该命令作用是:提供windows命令的帮助信息。\n\n");
printf("DIR\t内部命令 显示一个目录中的文件和子目录。\n");
printf("CD\t内部命令 显示当前目录的名称或将其更改。\n");
printf("MD\t内部命令 创建一个目录。\n");
printf("RD\t内部命令 删除目录。\n");
printf("CLS\t内部命令 清除屏幕。\n");
printf("DATE\t内部命令 显示或设置日期。\n");
printf("TIME\t内部命令 显示或设置系统时间。\n");
printf("REN\t内部命令 重新命名文件。\n");
printf("COPY\t内部命令 将至少一个文件复制到另一个位置。\n");
printf("CALL\t内部命令 从另一个批处理程序调用这一个。\n\n");
printf("QUIT\t外部命令 退出命令解释程序。\n");
printf("?\t外部命令 提供windows命令的帮助信息。\n");
}
else if(strcmp(str,mini[1])==0)
{
printf("'CD'\t内部命令输入正确!\n");
printf("该命令作用是:显示当前目录的名称或将其更改。\n");
}
else if(strcmp(str,mini[2])==0)
{
printf("'MD'\t内部命令输入正确!\n");
printf("该命令作用是:创建一个目录。\n");
}
else if(strcmp(str,mini[3])==0)
{
printf("RD\t内部命令输入正确!\n");
printf("该命令作用是:删除目录。\n");
}
else if(strcmp(str,mini[4])==0) //清屏
{
printf("'CLS'\t内部命令输入正确!\n");
printf("该命令作用是:清除屏幕。\n");
system("cls");
}
else if(strcmp(str,mini[5])==0) //显示日期
{
printf("'DATE'\t内部命令输入正确!\n");
printf("该命令作用是:显示或设置日期。\n\n");
time_t t = time(0);
char tmp[64];
strftime( tmp, sizeof(tmp), "当前日期:%Y/%m/%d ",localtime(&t) );
puts( tmp );
printf("输入新日期:<年/月>\n");
}
else if(strcmp(str,mini[6])==0) //显示时间
{
printf("'TIME'\t内部命令输入正确!\n");
printf("该命令作用是:显示或设置系统时间。\n\n");
time_t t = time(0);
char tmp[64];
strftime( tmp, sizeof(tmp), "当前时间: %X ",localtime(&t) );
puts( tmp );
printf("输入新的时间:\n");
}
else if(strcmp(str,mini[7])==0)
{
printf("'REN'\t内部命令输入正确!\n");
printf("该命令作用是:重新命名文件。\n");
}
else if(strcmp(str,mini[8])==0)
{
printf("'COPY'\t内部命令输入正确!\n");
printf("该命令作用是:将至少一个文件复制到另一个位置。\n");
}
else if(strcmp(str,mini[9])==0)
{
printf("'DIR'\t内部命令输入正确!\n");
printf("该命令作用是:显示一个目录中的文件和子目录。\n\n");
system("dir");
}
else if(strcmp(str,mini[10])==0) //退出
{
printf("'QUIT'\t外部命令输入正确!\n");
printf("该命令作用是:退出命令解释程序。\n");
printf("see you!\n\n");
exit(0);
}
else if(strcmp(str,mini[11])==0)
{
printf("'CALL'\t内部命令输入正确!\n");
printf("该命令作用是:从另一个批处理程序调用这一个。\n");
}
else if(strcmp(str,mini[12])==0)
{
printf("");
}
else
{
printf("命令输入错误!\n\'%s\'",str);
printf("不是内部或外部命令,也不是可运行的程序或批处理文件。\n");
}
}
return 0;
}

四、 实验总结
通过练习实践,编写cmd有利于我们了解系统内部程序应用,有利于我们今后对操作系统的熟悉与学习。