命令解释程序的编写实验

实验一、命令解释程序的编写实验

商软1班   谭宇森  201406114139

一、        实验目的

(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输入一些字符看对应的结果。通过在自己电脑输入命令指示符复制到程序的显示输出中,使得用起来像真的一样。

3.      主要程序段及其解释:

#include<stdio.h>
#include <string.h>
void header();
void Input();
void Output();
struct Cmd{
char cmd[30];
char function[500];
int post;
};
main()
{
header();
Input();

}
void header()
{
printf("Microsoft Windows XP [版本 5.1.2600]\n");
printf("<C> 版权所有 1985-2001 Microsoft Corp\n");
}
void Input()
{
printf("\n");
char cmd[100];
printf("Document and Setting\Administrator>:");
scanf("%s",&cmd);
if(strcmp(cmd,"dir")==0)
printf("显示一个目录中的文件和子目录。");
else if(strcmp(cmd,"cd")==0)
printf("显示当前目录的名称或将其更改");
else if(strcmp(cmd,"md")==0)
printf("创建目录。");
else if(strcmp(cmd,"rd")==0)
printf("删除目录。");
else if(strcmp(cmd,"cls")==0)
printf("创建目录。");
else if(strcmp(cmd,"date")==0)
printf("显示或设置日期。");
else if(strcmp(cmd,"time")==0)
printf("显示或设置系统时间。");
else if(strcmp(cmd,"ren")==0)
printf("重命名文件。");
else if(strcmp(cmd,"copy")==0)
printf("将至少一个文件复制到另一个位置。");
else if(strcmp(cmd,"javac ")==0)
printf("将某一个java程序进行编译。");
else if(strcmp(cmd,"java")==0)
printf("运行某一个已编译的java文件。");
else if(strcmp(cmd,"erase")==0)
printf("删除至少一个文件。");
else if(strcmp(cmd,"chkntfs")==0)
printf("显示或修改启动时间磁盘检查。");
else if(strcmp(cmd,"assoc")==0)
printf("显示或修改文件扩展名关联。");
else if(strcmp(cmd,"at")==0)
printf("计划在计算机上运行的命令和程序.");
else if(strcmp(cmd,"attrib")==0)
printf("显示或更改文件属性。");
else if(strcmp(cmd,"call")==0)
printf("从另一个批处理程序调用这一个。");
else if(strcmp(cmd,"help")==0)
{
printf("命令指示符有以下命令");
printf("\ndir 显示一个目录中的文件和子目录。");
printf("\ncd 显示当前目录的名称或将其更改。") ;
printf("\nmd 创建目录。") ;
printf("\nrd 删除目录。") ;
printf("\ncls 清除屏幕。") ;
printf("\ndate 显示或设置日期。") ;
printf("\ntime 显示或设置系统时间。") ;
printf("\nren 重命名文件。") ;
printf("\ncopy 将至少一个文件复制到另一个位置。") ;
printf("\njavac 将某一个java程序进行编译。") ;
printf("\njava 运行某一个已编译的java文件。") ;
printf("\nerase 删除至少一个文件。") ;
printf("\nchkntfs 显示或修改启动时间磁盘检查。") ;
printf("\nassoc 显示或修改文件扩展名关联。") ;
printf("\nat 计划在计算机上运行的命令和程序。") ;
printf("\nattrib 显示或更改文件属性。") ;
printf("\ncall 从另一个批处理程序调用这一个。") ;
}
else
printf("输入错误,没有这命令,可输入help查看指令。");
//Output(cmd);
printf("\n");
Input();
}

4.      运行结果及分析

四、        实验总结

虽然方法有点蠢,但是已经有进步了,继续加油

原文地址:https://www.cnblogs.com/dalaotan/p/5319556.html