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

专业:商软(2)班   姓名:列志华  学号:201406114254

一、        实验目的

(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.cpp

                 可执行程序名:MiniOS.exe

        2.      原理分析及流程图

本次实验主要是把命令放到记事本里面,最后通过程序来读取文档,这样的做法主要是方便更改数据。

在程序里建一个命令结构体,里面包含了命令名、命令功能、判断内部或外部命令的编号、参数,如:

      

 typedef struct node
{
char order[];
char exp[];
int post;
int arg;
struct node *next;
}ORDER;

最后通过用户输入的字符串,比较是否与记事本里面的命令名一样,相同则输出该命令的所有信息,

若不同则输出该命令不是内部命令或外部命令。如果用户输入exit,则程序结束。

        3.      主要程序段及其解释

 /*
  完成时间:  3.22 22:30 pm
  首次发表时间:3.22 22:53 pm
  修改时间:  3.24 22:09 pm
*/ #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<cstdlib> typedef struct node
{
char order[];
char exp[];
int post;
int arg;
struct node *next;
}ORDER;
int saveflag = ; void initInfo(ORDER *head)
{
ORDER *p,*z;
FILE *fp1;
int i;
z = head;
if((fp1 = fopen("cmd_1.txt", "a+")) == NULL)
{ //打开命令文件
printf("cmd_1.txt is NULL!!!");
return;
} for(i = ; !feof(fp1)&&fgetc(fp1)!=EOF ; i++)
{
p=(ORDER*)malloc(sizeof(ORDER));
fseek(fp1,-1L,SEEK_CUR);
fscanf(fp1,"%s%s%d%d",&p->order,&p->exp,&p->post,&p->arg);
p->next=NULL ;
z->next=p;/*构造链表*/
z=p;
}
fclose(fp1);
} //用于把大写字母转为小写字母
char toDownCase(char ch)
{
if(( 'A' <= ch) &&(ch <= 'Z'))
{
return (ch + );
}
return ch;
} //对用户的输入进行识别。
void discern(ORDER *head)
{
ORDER *p;
char user[];
int i = ,flag = ;
while()
{
printf("C:\\Users\\Administrator>");
scanf("%s",&user);
for(i= ; user[i] != '\0' ; i++)
user[i] = toDownCase(user[i]);
if(strcmp(user,"exit") == )
{ flag = ;
exit();
}
else if(strcmp(user,"help") == )
{
printf("有关某个命令的详细信息,请键入 HELP 命令名\n");
p = head->next;
while(p != NULL)
{ printf("%-9s%s\n",p->order,p->exp);
p = p->next;
}
flag = ;
printf("\n");
}
else if((strcmp(user,"\n") == ))
{
continue;
flag = ;
}
else
{
p = head->next;
flag = ;
while(p != NULL)
{
if(strcmp(user,p->order) == )
{
if(p->post == && p->arg == )
{
printf("‘%s’内部命令输入正确!\n",p->order);
printf("作用是:%s\n\n",p->exp);
}
else if(p->post == && p->arg == )
{
printf("'%s' 不是内部或外部命令,也不是可运行的程序或批处理文件。\n",p->order);
}
else
{
printf("命令语法不正确。没有参数!!!\n");
}
flag = ; }
p=p->next;
}
}
if(flag == )
{
printf("'%s' 不是内部或外部命令,也不是可运行的程序或批处理文件。\n",user);
} }
} void main()
{
ORDER *head,*p,*z; //系统的命令集合,和解析。
char user[]; //用户的输入。 head = (ORDER*)malloc(sizeof(ORDER));
head->next =NULL; printf("Microsoft Windows XP [版本 5.1.2600]\n");
printf("(C) 版权所有 1985-2001 Microsoft Corp.\n\n"); initInfo(head);
discern(head); }

测试结果与预期结果一样。

四、        实验总结

通过本次实验我进一步加深了对结构体和数组的了解,也学会了如何通过C语言读取记事本里面的数据内容。

通过询问同学和上网搜索相关知识,最后还是成功地解决了问题。

操作系统模仿CMD的更多相关文章

  1. 实验一 操作系统模仿cmd

    实验一.命令解释程序的编写 专业:商软(2)班   姓名:王俊杰  学号:201406114252 一.        实验目的 (1)掌握命令解释程序的原理: (2)掌握简单的DOS调用方法: (3 ...

  2. cmd:WIN7操作系统下cmd窗口下的复制粘贴

    1.右击cmd的顶部栏,点开属性 2.在 选项 下,勾选"快速编辑模式" 3.按住鼠标左键标注需要复制的区域 再点击一下右键,则上文的标记区域就已经被复制了,可以通过ctrl+v进 ...

  3. windows10操作系统中cmd窗口下telnet功能失效的解决方案

    查找windows自带功能,在window10中相当方便.打开windows10的设置面板,在搜索栏中搜索“windows功能”,弹出以下界面: 根据弹出的提示“启动或停用windows功能”即可弹出 ...

  4. [Java] cmd命令行如何切换目录

    cmd.exe是微软Windows系统基于WINDOWS上的命令解释程序,类似于微软的DOS操作系统.cmd.exe是一个32位的命令行程序,运行在Windows NT/2000/XP/2003/vi ...

  5. SQL Server代理(2/12):作业步骤和子系统

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. SQL Server代理作业有一系列的一个 ...

  6. SQL Server代理(1/12):配置和概况

    SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. SQL Server代理是SQL Serv ...

  7. windows注册表学习笔记

    注册表,想起来了就学学,方便操作.无需把它当成重要学问,今日就学一波,作为了解. 一.注册表清理脚本 主要是删除临时文件,旧文件.并不能够删除无效的键 @echo off del/f/s/q %sys ...

  8. 关于oracle数据库(1)

    兼容性的设置 cmd.exe是微软Windows系统的命令行程序,类似于微软的DOS操作系统.cmd.exe是一个16/32位的命令行程序,运行在Windows NT/2000/XP/2003/Vis ...

  9. ODI 创建Java EE Agent

    Configuring the Domain for the Java EE Agent 一 创建数据库 Schema 配置 Java EE agent,之前,必须保证在数据中创建了相应的scheme ...

随机推荐

  1. RN项目搭建

    一.安装JDK 由安装包引起,你可以尝试一下新包 注意安装路径要不同 或者重新安装Windows Installer 运行CMD 1.输入 sfc /SCANNOW 回车 2.完成后输入 msiexe ...

  2. PHP框架 Laravel Eloquent ORM 批量插入数据 && 批量更新目前没有

    foreach ($products as $v=>$a) { $count[] = array('product_name' => $a['name'], 'product_weight ...

  3. Python标准库02 时间与日期 (time, datetime包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python具有良好的时间和日期管理功能.实际上,计算机只会维护一个挂钟时间(wa ...

  4. 采访ServiceStack的项目领导Demis Bellot——第1部分(转)

    ServiceStack是一个开源的.支持.NET与Mono平台的REST Web Services框架.InfoQ有幸与Demis Bellot深入地讨论了这个项目.在这篇两部分报道的第1部分中,我 ...

  5. JDK环境变量中dt.jar、tools.jar等变量值的作用

    变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; tools.jar: 工具类 库,它跟我们程序中用到的 基础 ...

  6. webstrom插件:如何设置才能让webstrom能提示bootstrap的语法

    <link href="bootstrap.min.css" rel="stylesheet"> <link href="boots ...

  7. crm 4 注释与上传附件权限

    文档注释权限及上传附件是与实体的”追加到”权限有关. 文档注释权限及上传附件是与核心记录中”注释”的”追加”权限有关. 追加及追加到的权限,我的理解是与本实体有关联的实体的权限,比如你引用了其它表的字 ...

  8. 算法库:基础线性代数子程序库(Basic Linear Algebra Subprograms,BLAS)介绍

    调试DeepFlow光流算法,由于作者给出的算法是基于Linux系统的,所以要在Windows上运行,不得不做大量的修改工作.移植到Windows平台,除了一些头文件找不到外,还有一些函数也找不到.这 ...

  9. [SQL]公交新路问题

    --解答一 CREATE TABLE T_Line( ID nvarchar(), --公交线路号 Station nvarchar(), --站点名称 Orders int) --行车方向(通过它反 ...

  10. [HDU 5074] Hatsune Miku (动态规划)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5074 题目大意是给你m个note,n个数,得分是v[a[i]][a[i+1]]的总和,如果说a[i]是 ...