zoukankan      html  css  js  c++  java
  • 命令解释程序-实验一

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

    专业:商软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 }

     

     

     

     

     

     

  • 相关阅读:
    JSP自定义标签_用简单标签控制标签体执行10次
    JSP自定义标签_用简单标签实现控制标签体是否执行
    eclipse 使用lombok 精简java bean
    转 :关于springmvc使用拦截器
    转: spring静态注入
    spring 4.0+quartz2.2 实现持久化
    排除maven jar冲突 maven tomcat插件启动报错 filter转换异常
    转 Quartz将Job持久化所需表的说明
    转 maven jetty 插件
    ORA-14300: 分区关键字映射到超出允许的最大分区数的分区
  • 原文地址:https://www.cnblogs.com/zzy999/p/5315205.html
Copyright © 2011-2022 走看看