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

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

       专业:商软一班      学号:201406114101     姓名:丘娟      

    一、实验目的

    (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.源程序名:压缩包文件(rarzip)中源程序名MiniOS.c

    可执行程序名:MiniOS.exe

    2.原理分析及流程图

    主要总体设计问题。

    (包括存储结构,主要算法,关键函数的实现等)

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

    实现主要功能的程序段,重要的是程序的注释解释。

    #include<stdio.h> 
    #include<string.h> 
    #include<stdlib.h>
    #define Max 500
    struct Cmd{
        char cmd[30];  //命令名
        char function[500];  //命令功能
        int post;  //是否是内部命令,是则为1否则为0
        int cs; //运行是否需要参数
        char parameter[1000];  //参数
    };
    int count=0;
    void Init(struct Cmd cm[Max])
    {
        FILE *fp;
        if((fp=fopen("cmd.txt","a+"))==NULL) //a+ 以附加方式打开可读写的文件
        {
            printf("File open error!
    ");
            exit(0);
        }
        while(!feof(fp)&&fgetc(fp)!=EOF)
        {
            fseek(fp,-1L,SEEK_CUR);
            fscanf(fp,"%s%s%d",&cm[count].cmd,&cm[count].function,&cm[count].post);
            count++;
        }
        if(fclose(fp))
        {
            printf("Can not close the file!
    ");
            exit(0);
        }
    }
    void display(struct Cmd cm[Max])
    {
        for(int i=0;i<count;i++)
        {
            printf("%-10s%s
    ",strupr(cm[i].cmd),cm[i].function);  //strupr()将字符串转换为大写
            strlwr(cm[i].cmd);  //strlwr()将字符串转换为小写
        }
    }
    void process(struct Cmd cm[Max])   //处理
    {
        char str[10];
        printf("Microsoft Windows [版本 10.0.10586]
    ");
        printf("(c) 2016 Microsoft Corporation.保留所有权利.
    ");
        while(strcmp(str,"quit")!=0){
            printf("
    C:\Documents and Settings\hskd>");
            scanf("%s",str);   //输入字符串
            strlwr(str);    //strlwr()将字符串转换为小写
            bool flag=false;
            if(strcmp(str,"help")==0)
            {
                printf("有关某个命令的详细信息,请键入 HELP 命令名
    ");
                display(cm);   //调用函数
                flag=true;
            }else{
                for(int i=0;i<count;i++)
                {
                    if(strcmp(str,cm[i].cmd)==0)    //比较输入的字符串是否等于记事本里面的命令名
                    {
                        if(cm[i].post==1)
                        {
                            if(cm[i].cs==1)
                            {
                                printf("'%s'是内部命令
    该命令作用是:%s
    该命令运行需要参数
    ",str,cm[i].function);
                                printf("参数是:%s
    ",&cm[i].parameter);
                            }else
                                printf("'%s'是内部命令
    该命令作用是:%s
    该命令运行不需要参数
    ",str,cm[i].function);
                        }
                        else
                        {
                            if(cm[i].cs==1)
                            {
                                printf("'%s'是外部命令
    该命令作用是:%s
    该命令运行需要参数
    ",str,cm[i].function);
                                printf("参数是:%s
    ",&cm[i].parameter);
                            }else
                                printf("'%s'是外部命令
    该命令作用是:%s
    该命令运行不需要参数
    ",str,cm[i].function);
                        }
                        flag=true;
                        break;
                    }
                }
                if(!flag){    //如果输入的字符串既不是help,也不是记事本里面的命令
                    if(strcmp(str,"quit")!=0)
                        printf("'%s' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    ",str);
                }
            }
        }
        printf("
    程序结束!
    
    ");
    }
    int main()
    {
        struct Cmd cm[Max];
        Init(cm);
        process(cm);
        return 0;
    }

    4.运行结果及分析

    一般必须配运行结果截图,结果是否符合预期及其分析。

       (截图需根据实际,截取有代表性的测试例子)

     

     

     

    四、实验总结

    有很多知识都忘记了,有些要找资料和问同学才能解决。

     

     

  • 相关阅读:
    [原创]在使用SDK 23(6.0)版本后org.apache.http相关的类找不到的解决办法
    [原创] Gradle DSL method not found: 'android()' 和 buildToolsVersion is not specified 的解决办法。
    [原创]Android Lollipop (5.0) 原生代码 Settings 首页加载逻辑分析
    访问https接口报错 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系
    js for循环中延迟 setTimeout
    ABP框架扩展AbpSession
    web在线查看PDF文件
    web在线预览office文件
    sql server游标读取excel文件数据,更新到指定表中
    echarts图形销毁重新绘制
  • 原文地址:https://www.cnblogs.com/queenjuan/p/5317601.html
Copyright © 2011-2022 走看看