zoukankan      html  css  js  c++  java
  • 操作系统--命令解释程序_2

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

    专业:商业软件工程  姓名:蓝叶 学号:201406114201

    一、实验目的

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

        可执行程序名:×××.exe

      2.原理分析及流程图

        主要总体设计问题。

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

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

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

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define n 100
    typedef struct node{
        char name[20];
        char use[100];
        int pro;
        int ten;
    }DOS;
    
    int count=0;
    //读取文件
    void ReadField(DOS dos[])
    {
        FILE *fp;
        if((fp=fopen("cmd.txt","a+"))==NULL)
        {
            printf("File open error!
    ");
            exit(0);
        }
        while(!feof(fp)&&fgetc(fp)!=EOF)
        {
            fseek(fp,-1L,SEEK_CUR);
            fscanf(fp,"%s%s%d%d",&dos[count].name,&dos[count].use,&dos[count].pro,&dos[count].ten);
            count++;
        }
        if(fclose(fp))
        {
            printf("Can not close the file!
    ");
            exit(0);
        }
    }
    
    //help显示功能
    void display(DOS dos[])
    {
        int i;
        for(i=0;i<count;i++)
            printf("%s	%s
    ",dos[i].name,dos[i].use);
    }
    
    void Choose(DOS dos[])
    {    
        int i; 
        char str[11];
        bool flag=false;
        while(1)
        {
            printf("C:\Documents and Settings\hskd>");
            gets(str);
            strupr(str);    //小写转换成大写
            if(strcmp(str,"HELP")==0)
            {
                printf("有关某个命令的详细信息,请输入 HELP 命令名
    ");
                display(dos);
                flag=true;
                printf("
    有关工具的详细信息,请参阅联机帮助中的命令行参考。
    
    ");
            }
            else if(strcmp(str,"QUIT")==0)
                exit(0);
            else if(strcmp(str,"CLS")==0)
                 system("cls");  //引用系统cls功能进行清屏
            else
            {
                for(i=0;i<12;i++)
                {
                    if(strcmp(str,dos[i].name)==0)
                    {
                        if(dos[i].pro==1)
                        {
                            if(dos[i].ten==1)
                                printf("'%s' 内部命令输入正确!
    该命令的作用是:%s
    该命令运行需要参数支持
    
    ",str,dos[i].use);
                            else
                                printf("'%s' 内部命令输入正确!
    该命令的作用是:%s
    该命令运行并不需要参数支持
    
    ",str,dos[i].use);
                        }
                        else
                        {
                            if(dos[i].ten==1)
                                printf("'%s' 外部命令输入正确!
    该命令的作用是:%s
    该命令运行需要参数支持
    
    ",str,dos[i].use);
                            else
                                printf("'%s' 外部命令输入正确!
    该命令的作用是:%s
    该命令运行并不需要参数支持
    
    ",str,dos[i].use);    
                        }
                        flag=true;
                    }
                }
                if(!flag)
                {
                    if(strcmp(str,"quit")!=0)
                    {
                        strlwr(str); //大写转换成小写
                        printf("'%s' 不是内部或外部命令,也不是可运行的程序
    或批处理文件
    
    ",str);
                    }
                }
            }
        }
    }
    
    main()
    {
        DOS dos[n];
        printf("Microsoft Window XP [版本 5.1.2600]
    ");
        printf("<C> 版权所有 1985-2001 Microsoft Corp.
    
    ");
        ReadField(dos);
        Choose(dos);
    }

    4.运行结果及分析

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

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

    
    

    三、实验总结

      添加了参数标记来判断这个命令是否需要参数

      实现了cls清屏功能:system("cls");

          quit退出功能:exit(0);

         help功能

      实现了大小写之间的转换:大写转换成小写:strlwr(str)

                  小写转换成大写:strupr(str)

  • 相关阅读:
    SWOT分析模型
    如果度过迷茫,是多些挫折还是少一些好呢?
    Ext.Net动态构建树TreePanel使用详解
    Ext.Net动态加载菜单执行事件
    通过教练提升领导力了解行为教练在何时无法发挥作用
    Ext.Net\ExtJs弹出消息Alert、MessageBox、Confirm使用详解
    把领导力转化为结果结果导向型领导力
    自由职业,我的半年总结
    关于自由职业的一些想法(采访整理)
    Ext.net文本输入框:Ext.form.TextField属性汇总
  • 原文地址:https://www.cnblogs.com/blueYE00/p/5316468.html
Copyright © 2011-2022 走看看