命令解释程序-实验一

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

专业:商软2班   姓名:曾治业  学号:201406114235

一、实验目的

(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)中源程序名 miniOS.c

   可执行程序名:miniOS.exe

2. 原理分析及流程图

存储结构:结构体

主要算法:通过文件的保存与读取,把文件的内容保存到结构体数组中。

关键函数:void judge(char str[],int n)//判断命令的对错;

             int file()//文件的读取。

             void command_function(char str[],int n)//命令功能

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

void judge(char str[],int n)//判断命令的对错

{

    int i;

    for(i=0;i<=n;i++)

           {

                  if(strcmp(str,"help")==0)

                  {

                         for(i=0;i<=n;i++)

                         {

                                printf("%s %s ",os[i].command,os[i].commandstate);

                         }

                         break;

                  }

                 

                  if((strcmp(str,os[i].command)==0)&&(os[i].a==1))

                  {

                         printf(""%s"是内部命令,输入正确 ",os[i].command);

                         printf("该命令的作用是:%s ",os[i].commandstate);

                         break;

                  }

                  else if((strcmp(str,os[i].command)==0)&&(os[i].a==0))

                  {

                         printf(""%s"是外部命令,输入正确 ",os[i].command);

                         printf("该命令的作用是:%s ",os[i].commandstate);

                         break;

                  }

                  else if((strcmp(str,os[i].command)!=0)&&(i==n))

                  {

                         printf("'%s'不是内部或外部命令,也不是可运行的程序或批处理文件 ",str);

                  }

           }

}

int file()//文件的读取

{

    int i,n;

    FILE *fp;

    fp=fopen("cmd.txt","r+");

    for(i=0;!feof(fp);i++)

    {

           fscanf(fp,"%s%s%d",os[i].command,os[i].commandstate,&os[i].a);

           n=i;

    }

    fclose(fp);

    return n;

}

void command_function(char str[],int n)//命令功能

{

    int i;

    for(i=0;i<=n;i++)

    {

           if(stricmp(str,"cls")==0)

           {

                  system("cls");//清屏

           }

    }

}

4.运行结果及分析

 

四、实验总结

工具:VC++6.0,

语言:C语言

主要涉及知识点:文件读取功能,结构体数组存储

总结:

这次实验主要是要掌握熟练使用C语言的文件读取功能,结合结构体数组存储从文件中读到的数据,总体实验难度一般。

在做这个实验的过程中,我了解到了系统大概的运行过程,系统通过调用函数实现基本的功能。

 附录:

 

 1 #include<stdio.h>
 2 #include<conio.h>
 3 #include<string.h>
 4 #include<stdlib.h>
 5 #define N 80
 6 struct miniOS
 7 {
 8     int a;//记录是内部命令还是外部命令
 9     char command[10];//记录命令
10     char YON_parameter[20];//记录该命令是否需要参数
11     char commandstate[100];//陈述命令的功能
12 };
13 struct miniOS os[N];
14 void judge(char str[],int n)//判断命令的对错
15 {
16     int i;
17     for(i=0;i<=n;i++)
18         {
19             if(stricmp(str,"help")==0)
20             {
21                 for(i=0;i<=n;i++)
22                 {
23                     printf("%s	%-34s%-20s
",os[i].command,os[i].commandstate,os[i].YON_parameter);
24                 }
25                 break;
26             }
27             
28             if((stricmp(str,os[i].command)==0)&&(os[i].a==1))
29             {
30                 printf(""%s" "%s" 是内部命令,输入正确!
",os[i].command,os[i].YON_parameter);
31                 printf("该命令的作用是:%s
",os[i].commandstate);
32                 break;
33             }
34             else if((stricmp(str,os[i].command)==0)&&(os[i].a==0))
35             {
36                 printf(""%s" "%s" 是外部命令,输入正确!
",os[i].command,os[i].YON_parameter);
37                 printf("该命令的作用是:%s
",os[i].commandstate);
38                 break;
39             }
40             else if((stricmp(str,os[i].command)!=0)&&(i==n))
41             {
42                 printf("'%s'不是内部或外部命令,也不是可运行的程序
或批处理文件
",str);
43             }
44         }
45 }
46 void command_function(char str[],int n)//命令功能
47 {
48     int i;
49     for(i=0;i<=n;i++)
50     {
51         if(stricmp(str,"cls")==0)
52         {
53             system("cls");//清屏
54         }
55     }
56 }
57 
58 int file()//文件的读取
59 {
60     int i,n;
61     FILE *fp;
62     fp=fopen("cmd.txt","r+");
63     for(i=0;!feof(fp);i++)
64     {
65         fscanf(fp,"%s%s%s%d",os[i].command,os[i].commandstate,os[i].YON_parameter,&os[i].a);
66         n=i;
67     }
68     fclose(fp);
69     return n;
70 }
71 main()
72 { 
73     int n;
74     char str[N];
75     printf("Microsoft Windows [版本 6.1.7601 ]
");
76     printf("版本所有 <c> 2009 Microsoft Corporation。保留所有权利

");
77     n=file();
78     while(1){
79         printf("C:\Users\Administrator.USER-20151120JI>");
80         gets(str);
81         judge(str,n);
82         command_function(str,n);
83         printf("
");
84     }
85 }

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/zzy999/p/5315205.html