实验一

一、        实验目的

(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.c

可执行程序名:MiniOS.exe

2.      原理分析及流程图

1. 命令解释程序的原理:

命令解释程序的主要功能是:

接受和执行一条用户从键盘输入的命令,它通常保存一张命令名字(动词)表,其中记录着所有操作命令及其处理程序的入口地址或有关信息。

 

2. 命令解释程序实现的两种方式 :

1) 一种是它自身包含了命令的执行代码;

2) 另一种是由专门的“系统程序” 实现,自身不含命令处理代码,也不进行处理,仅仅把这条命令对应的命令文件装入内存执行。例如:在DOS操作系统中,dir、cd、cls等命令的执行代码包含在系统自身内核中,称为内部命令;format、help等命令的执行代码在外部文件中,称为外部命令。

 

3. 编程实现流程

显示程序提示信息;

While(1)

{ 显示提示符;

接收键盘的字符串;

判断是否quit程序退出指令,是则退出;

判断是否内部命令,并给出相应的信息,否则给出错误信息;

 

显示退出程序信息;

首先查了cmd有哪些命令指示符,分别有什么作用,在自己电脑的cmd输入一些字符看对应的结果。通过在自己电脑输入命令指示符复制到程序的显示输出中,使得用起来像真的一样。

#include<stdio.h> 
#include<string.h> //在使用到字符数组时需要使用
#include<stdlib.h>
void main() 
{ 
int system(const char *string);
//定义数组中的值
char cmd[20][20]={"dir","cd","md","rd","cls","date","time","ren","copy","help","quit"}; 
char str[20];
//Init(str);
printf("Microsoft Windows [版本 10.0.10240]\n");//设置标题
printf("(C) 2015 Microsoft Corporation. All rights reserved.\n");
while(1)//进入函数循环
{
printf("\nC:\\Users\\Carson>");
gets(str);
int i,date;
for(i=0; '\0' != str[i]; i++)//for循环遍历s串
{ 
if(str[i] >= 'A' && str[i] <= 'Z') //判断是不是大写字母
str[i] += 32; //转换成小写
}
if(strcmp(str,cmd[0])==0)//判断输入单词是否与cmd数组中的对应
{ 
//system(str);
printf("dir 内部命令:显示一个目录中的文件和子目录\n");
printf("\n驱动器 C 中的卷是 系统\n卷的序列号是 0E33-63F0\n\nC:\Users\Carson 的目录\n\n2016/03/15 09:00 <DIR> .\n2016/03/18 10:00 <DIR> Music\n2016/03/14 11:00 <DIR> Photo\n2016/03/13 12:00 <DIR> Video\n2016/03/19 13:00 <DIR> Games\n2016/03/12 14:00 <DIR> Searches\n2016/03/11 15:00 <DIR> homework\n 4 个文件 2,159 字节\n 19 个目录 66,666,666,666 可用字节\n");
}
else if(strcmp(str,cmd[1])==0)
{
printf("C:\\Users\\yj\n");
printf("cd 内部命令:显示当前目录的名称或将其更改\n");
}
else if(strcmp(str,cmd[2])==0)
{
system("md");
printf("md 内部命令:建立一个目录或文件夹.dos下面叫目录,win下面叫文件夹\n");
}
else if(strcmp(str,cmd[3])==0)
{
system("rd");
printf("rd 内部命令:删除目录\n");
}
else if(strcmp(str,cmd[4])==0)
{
system("cls");
printf("cls 内部命令:清除屏幕\n");
}
else if(strcmp(str,cmd[5])==0)
{
printf("date 内部命令:显示或设置日期\n");
printf("当前日期: 2016/03/24 周四\n输入新日期: (年月日):\n"); 
}
else if(strcmp(str,cmd[6])==0) 
{
printf("当前时间: 14:48:07.86\n");
printf("time 内部命令:显示或设置系统时间\n");
}
else if(strcmp(str,cmd[7])==0)
{ 
printf("ren 内部命令:重新命名文件,ren命令的格式是:ren 源文件名目的文件名\n");
}
else if(strcmp(str,cmd[8])==0)
{
printf("copy 内部命令:将至少一个文件复制到另一个位置\n");
}
else if(strcmp(str,cmd[9])==0)
{
printf("dir 显示一个目录中的文件和子目录\n");
printf("cd 显示当前目录的名称或将其更改\n");
printf("md 建立一个目录或文件夹.dos下面习惯叫目录,win下面习惯叫文件夹\n");
printf("rd 删除目录\n");
printf("cls 清除屏幕\n");
printf("date 显示或设置日期\n");
printf("time 显示或设置系统时间\n");
printf("ren 重新命名文件,ren命令的格式是:ren 源文件名目的文件名\n");
printf("copy 将至少一个文件复制到另一个位置\n");
printf("help 提供Windows命令的帮助信息\n");
printf("quit 退出命令解释程序\n");
printf("\n有关工具的详细信息,请参阅联机帮助中的命令行参考。\n");
}
else if(strcmp(str,cmd[10])==0)
return;
else
{
printf("'%s' 不是内部或外部命令,也不是可运行的程序\n或批处理文件。\n",str);
}
}
}

 

 

posted @ 2016-03-25 14:58  48彭宏亮  阅读(160)  评论(0编辑  收藏  举报