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

商软1班   杨晶晶  201406114102

一、        实验目的

(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.      主要程序段及其解释:

 1 #include<stdio.h>
 2 #include<string.h> //在使用到字符数组时需要使用
 3 #include<stdlib.h>
 4 void main()
 5 {
 6     int system(const char *string);
 7     //定义数组中的值
 8     char cmd[20][20]={"dir","cd","md","rd","cls","date","time","ren","copy","help","quit"};
 9     char str[20];
10     //Init(str);
11     printf("Microsoft Windows [版本 10.0.10240]\n");//设置标题
12     printf("(C) 2015 Microsoft Corporation. All rights reserved.\n");
13     while(1)//进入函数循环
14     {
15         printf("\nC:\\Users\\yj>");
16         gets(str);
17         int i,date;
18         for(i=0; '\0' != str[i]; i++)//for循环遍历s串
19         {
20             if(str[i] >= 'A' && str[i] <= 'Z') //判断是不是大写字母
21                 str[i] += 32;  //转换成小写
22         }
23         if(strcmp(str,cmd[0])==0)//判断输入单词是否与cmd数组中的对应
24         {
25             //system(str);
26             printf("dir     内部命令:显示一个目录中的文件和子目录\n");
27             printf("\n驱动器 C 中的卷是 系统\n卷的序列号是 0E33-63F0\n\nC:\Users\yj 的目录\n\n2016/03/19  15:47    <DIR>         .\n2016/03/10  16:28    <DIR>          Music\n2016/03/12  17:20    <DIR>          OneDrive\n2016/03/10  16:28    <DIR>          Pictures\n2016/03/10  16:28    <DIR>          Saved Games\n2016/03/10  16:28    <DIR>          Searches\n2016/03/10  16:28    <DIR>          Videos\n              4 个文件          2,159 字节\n             19 个目录 33,779,773,440 可用字节\n");
28         }
29         else if(strcmp(str,cmd[1])==0)
30         {
31             printf("C:\\Users\\yj\n");
32             printf("cd     内部命令:显示当前目录的名称或将其更改\n");
33         }
34         else if(strcmp(str,cmd[2])==0)
35         {
36             system("md");
37             printf("md     内部命令:建立一个目录或文件夹.dos下面习惯叫目录,win下面习惯叫文件夹\n");
38         }
39         else if(strcmp(str,cmd[3])==0)
40         {
41             system("rd");
42             printf("rd     内部命令:删除目录\n");
43         }
44         else if(strcmp(str,cmd[4])==0)
45         {
46             system("cls");
47             printf("cls     内部命令:清除屏幕\n");
48         }
49         else if(strcmp(str,cmd[5])==0)
50         {
51             printf("date     内部命令:显示或设置日期\n");
52             printf("当前日期: 2016/03/24 周四\n输入新日期: (年月日):\n");
53         }
54         else if(strcmp(str,cmd[6])==0)
55         {
56             printf("当前时间: 21:45:07.86\n");
57             printf("time     内部命令:显示或设置系统时间\n");
58         }
59         else if(strcmp(str,cmd[7])==0)
60         {
61             printf("ren     内部命令:重新命名文件,ren命令的格式是:ren 源文件名目的文件名\n");
62         }
63         else if(strcmp(str,cmd[8])==0)
64         {
65             printf("copy     内部命令:将至少一个文件复制到另一个位置\n");
66         }
67         else if(strcmp(str,cmd[9])==0)
68         {
69             printf("dir    显示一个目录中的文件和子目录\n");
70             printf("cd     显示当前目录的名称或将其更改\n");
71             printf("md     建立一个目录或文件夹.dos下面习惯叫目录,win下面习惯叫文件夹\n");
72             printf("rd     删除目录\n");
73             printf("cls    清除屏幕\n");
74             printf("date   显示或设置日期\n");
75             printf("time   显示或设置系统时间\n");
76             printf("ren    重新命名文件,ren命令的格式是:ren 源文件名目的文件名\n");
77             printf("copy   将至少一个文件复制到另一个位置\n");
78             printf("help   提供Windows命令的帮助信息\n");
79             printf("quit   退出命令解释程序\n");
80             printf("\n有关工具的详细信息,请参阅联机帮助中的命令行参考。\n");
81         }
82         else if(strcmp(str,cmd[10])==0)
83             return;
84             else
85         {
86             printf("'%s' 不是内部或外部命令,也不是可运行的程序\n或批处理文件。\n",str);
87         }
88     }
89 }

4.      运行结果及分析

四、        实验总结

一开始觉得这个没什么,听老师说还以为挺简单的,就让用户输入命令符然后输出对应的文字就行啦,可是打代码才发现自己会漏了很多细节的地方,比如要考虑输入是否区分大小写、能否让自己做的也实现真的cmd的功能。因为能力有限,只能做比较简单的内容,实现显示处理命令符的内容是在cmd打相应的命令符把对应的内容复制过去,也尝试了用system(str)的方法直接调用。看了老师的代码发现用读取文档的方式修改会比较方便,而且看起来比较整洁,用结构体的方法更好存放数据,要多学习。

 

 

 

 

 

 

转载于:https://www.cnblogs.com/jjy520/p/5318519.html

实验一 MiniOS相关推荐

  1. 合肥工业大学—SQL Server数据库实验四:数据库的分离和附加

    数据库的分离和附加 1. 数据库分离 2. 数据库附加 1. 数据库分离 当SQL Server服务器运行时,该服务器上所有的数据库自动处于运行状态,而运行中的数据库文件是无法进行数据库文件的拷贝的. ...

  2. 解读模拟摇杆原理及实验

    解读模拟摇杆原理及实验 Interpreting Analog Sticks 当游戏支持控制器时,玩家可能会一直使用模拟摇杆.在整个体验过程中,钉住输入处理可能会对质量产生重大影响.让来看一些核心概念 ...

  3. legend位置 pyecharts_实验|pyecharts数据可视化分析-1

    1. 实验介绍 本实验主要介绍pyecharts基本特点与属性. 1.1. 实验目的 了解pyecharts功能.特点.与安装方式. 1.2. 知识点 pyecharts特点 pyecharts图表 ...

  4. 2019春第二次课程设计实验报告

    2019春第二次课程设计实验报告 一.实验项目名称: 贪吃蛇游戏编写: 二.实验项目功能描述: 这个实验主要是实现游戏的正常运行,实现的目标是对小蛇移动的控制, 同时对小蛇数据的保存,如何实现转弯的效 ...

  5. 汇编语言程序设计 实验九

    实验内容 实验一: 补全程序t1.asm,完成在屏幕上输出内存单元中的十进制两位数 ; 在屏幕上输出内存单元中的十进制两位数 assume cs:code, ds:data data segmentd ...

  6. 20172324 2018-2019-1《程序设计与数据结构》实验2报告

    20172324 2018-2019-1<程序设计与数据结构>实验2报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 曾程 学号:20172324 实验教师:王志强 ...

  7. JAVA第二次验证设计性实验报告

    [实验任务一]:素数输出 (3)实验报告中要求包括程序设计思想.程序流程图.源代码.运行结果截图.编译错误分析等内容. 1.   实验内容 (1)计算并输出3~100之间的素数. (2)编程满足下列要 ...

  8. 20172329 2017-2018-2 《程序设计与数据结构》实验五报告

    这是这学期最后一次实验了,也是学到了很多东西,希望自己可以可以善始善终,加油! 让我们开始这一篇博客吧! 20172329 2017-2018-2 <程序设计与数据结构>实验五报告 课程: ...

  9. 计算机网络实验报告建立校园网,计算机网络实验报告

    设计性实验报告 一.实验目的 通过对网络设备的连通和对拓扑的分析,加深对常见典型局域网拓扑的理解:通过路由建立起网络之间的连接,熟悉交换机.路由器的基本操作命令,了解网络路由的设计与配置. 二.背景描 ...

最新文章

  1. Attach Volume 操作(Part I) - 每天5分钟玩转 OpenStack(53)
  2. linux网络编程之怎么配置好unp.h文件
  3. 如何使用struts2对集合参数进行验证
  4. 自由职业半年,我又滚回职场了...
  5. e5cc温控仪通讯参数设定_产品介绍||DeltaWiFi通讯型多功能电表DPMC520W
  6. 结合 Mist 在本地测试网络上实现代币智能合约
  7. asp.net学习之SqlDataSource 2 select的四种参数赋予形式的解释
  8. linux端口零内存拷贝,Linux设备驱动之I/O端口与I/O内存
  9. cass地籍参数设置命令_想成为一名厉害的测绘员?南方Cass教程+插件+课件不可少!...
  10. 社交网站 分享 +button
  11. 数据结构 创建顺序栈
  12. 什么是罗技LogitechFlow技术
  13. linux支持ext2格式吗,linux正统标准文件系统ext2详解
  14. Goto是关键?思考
  15. 关于三极管处于临界饱和状态的分析
  16. Win To Go MacBook Pro (16-inch, 2019) Catalina 10.15.7 bootcamp 6.1.7748
  17. tkmybatis详细教程(一篇就明白)
  18. c语言递归打印99乘法表,递归与循环转换_九九乘法表打印_算法
  19. [lua]紫猫lua教程-命令宝典-L1-01-03. 数值数据
  20. Ins图片爬取(基于python,selenium)

热门文章

  1. Linux-基本使用
  2. Java8种Stream流相关操作——集合的筛选、归约、分组、聚合
  3. 【杂文随笔】2018年总结 送自己一个字
  4. java知识体系综合面试题
  5. VS集成Qt环境搭建
  6. 硬件笔记(2)---- 贴片电容材质NPO与X7R、X5R、Y5V、Z5U的区别
  7. python清华源的设置
  8. 电商 SPU和SKU 的区别
  9. Android:Fragment生命周期(结合Activity的生命周期进行分析)
  10. 转发: Feign报错feign.RetryableException: too many bytes written executing