0325 实验一操作系统模拟cmd
实验一、命令解释程序的编写
专业:商软(2)班 姓名:韩麒麟 学号:201406114253
一、 实验目的
(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.原理分析及流程图
本次实验主要是把命令放到记事本里面,最后通过程序来读取文档,这样的做法主要是方便更改数据。在程序里建一个命令结构体,里面包含了命令名、命令功能、判断内部或外部命令的编号、参数,如 最后通过用户输入的字符串,比较是否与记事本里面的命令名一样,相同则输出该命令的所有信息,若不同则输出该命令不是内部命令或外部命令。如果用户输入exit,则程序结束。
3.主要程序段及其解释
#include<stdio.h>
#include<stdlib.h>
#include<string.h> typedef struct node
{
char order[];
char exp[];
struct node *next;
}ORDER;
int saveflag = ; void InputInfo(ORDER *head)
{
ORDER *p,*r,*s;
int i;
char ord[];
s=head;
while(s->next!=NULL)
s=s->next;
while()
{
BB:
r=head->next; printf("\n\n\n请输入命令:(0为退出)");
scanf(" %s",ord);
if(strcmp(ord,"")==)
break; while(r!=NULL)
{
if(strcmp(r->order,ord)==)
{
printf("\n信息已存在,输入无效,请重新输入:");
goto BB;
}
r=r->next;
}
p=(ORDER*)malloc(sizeof(ORDER));
strcpy(p->order,ord);
printf("请输入解释:\n");
scanf("%s",p->exp);
p->next=NULL;
s->next=p;
s=p;
saveflag=; }
} void Open(){
char order[];
char c[];
int i;
FILE *p1=fopen("MiniOS.txt","r");
if(!p1)
printf("打开失败\n"); for(i=;i<;i++)
{
fscanf(p1,"%c",&c[i]);
printf("%c",c[i]);
}
fclose(p1);
printf("\n\n");
if(strcmp(order,"exit")==){
return ;
}
} void Save(ORDER *l)
{
FILE *f;
ORDER *p;
int count=,flag=;
f=fopen("cmd_1.txt","wb");
if(f==NULL)
{
printf("the file can't be opened!");
return ;
}
p=l->next;
while(p->next != NULL)
{
if(fwrite(p,sizeof(ORDER),,f)==)
{
p=p->next;
count++;
}
else
{
flag=;
break;
}
}
if(flag)
{
printf("\n保存\n");
saveflag=;
}
fclose(f);
} void main()
{
ORDER *osOrder,*head,*p,*z; //系统的命令集合,和解析。
char user[],ch1; //用户的输入。
int i;
FILE *fp1;
head = (ORDER*)malloc(sizeof(ORDER));
head->next =NULL;
z = head; if((fp1 = fopen("cmd_1.txt", "ab+")) == NULL)
{
printf("cmd_1.txt is NULL!!!");
return;
}
printf("Microsoft Windows XP [版本 5.1.2600]\n");
printf("(C) 版权所有 1985-2001 Microsoft Corp.\n\n");
for(i = ; !feof(fp1) ; i++)
{
p=(ORDER*)malloc(sizeof(ORDER));
if(fread(p,sizeof(ORDER),,fp1) == )
{ p->next=NULL ;
z->next=p;
z=p;
}
}
fclose(fp1); p = head->next; while()
{ printf("C:\\Users\\Administrator>");
scanf("%s",&user); if(strcmp(user,"exit") == )
{
if(saveflag==)
{
getchar();
printf("\n文档信息发生改变,是否进行保存(y/n)?\n");
scanf("%c",&ch1);
if(ch1=='y' || ch1=='Y')
{
Save(head);
printf("\n保存成功!\n");
}
}
exit();
}
else if(strcmp(user,"editor") == )
{
InputInfo(head); }
else if(strcmp(user,"help") == )
{
Open();
/* p = head->next;
while(p != NULL)
{
printf("%-9s%s\n",p->order,p->exp);
p = p->next;
}*/ }
else if(strcmp(user,"\n")==)
{
system("dir");
} else
{
p = head->next;
while(p != NULL)
{
if(strcmp(user,p->order) == )
{ printf("内部命令!\n");
printf("作用为:");
printf("%s\n\n",p->exp);
}
p=p->next;
}
}
}
}
0325 实验一操作系统模拟cmd的更多相关文章
- 实验一 操作系统模仿cmd
实验一.命令解释程序的编写 专业:商软(2)班 姓名:王俊杰 学号:201406114252 一. 实验目的 (1)掌握命令解释程序的原理: (2)掌握简单的DOS调用方法: (3 ...
- 【iCore3 双核心板】例程十四:FATFS实验——文件操作
实验指导书及代码包下载: http://pan.baidu.com/s/1dEpechF iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- 【GMT43智能液晶模块】例程十三:FATFS实验——文件操作
实验原理: STM32F429上带有SDIO控制器,GMT43液晶模块上将SDIO连接到TF卡座.本实验 将Micro SD卡插入TF卡座上即可.通过FATFS创建test.txt文件,并且写入数据0 ...
- 【iCore4 双核心板_ARM】例程十四:FATFS实验——文件操作
实验现象: 核心代码: int main(void) { int i,j; FIL file; FATFS fatfs; static FRESULT res; unsigned ]; unsigne ...
- 实验一 命令解释程序cmd的编写
#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 30main(){ char str[ ...
- <JAVA图像学习笔记>十字路口交通模拟--操作系统模拟课后小项目
项目的要求很简单: 模拟出十字路口的交通控制情况: 秒. 当东西(或南北)方向红灯时,所有车辆(除了消防车.救护车.警车)均排队等待,当东西(或南北)方向绿灯时,所有车辆按序行驶(不准超车). 制作这 ...
- 操作系统实验——PV操作实现生产者消费者模型
操作系统PV操作之--生产者消费者模型 个人博客主页 参考资料: Java实现PV操作 | 生产者与消费者 浙大公开课 在操作系统的多进程.多线程操作中经常会有因为同步.互斥等等问题引发出的一系列问题 ...
- Windows常用批处理命令 CMD BAT (CMD目录操作等dir)
Windows常用批处理 CMD BAT CMD获取文件夹下所有文件的名称并打印(输出)到指定目录 dir C:\Users\\Desktop\png\*.*/s >c:\.txt //cmd ...
- Oracle11g R2学习系列 之四Maven+Struts+Spring实验
今天试一下Java调用Oracle来看一下.会不会也如昨天实验的一样坑呢?由于我对于Java也接触的不多,所以不打算直接使用该收提供的实验文档,而是自己利用Maven+Struts+Spring来自己 ...
随机推荐
- python 运算符与分支结构
运算符与分支结构 运算符 赋值运算符 用'='表示,左边只能是变量 算术运算符 +.-.*:加.减.乘 /:除法运算,结果是浮点型 //:除法运算,结果是整型 %:求余 **:求幂 复合运算符 +=. ...
- spark 例子count(distinct 字段)
spark 例子count(distinct 字段) 例子描述: 有个网站访问日志,有4个字段:(用户id,用户名,访问次数,访问网站) 需要统计: 1.用户的访问总次数去重 2.用户一共访问了多少种 ...
- 4.28-python学习笔记(转义符&input函数)
参考书目:<Learn Python The Hard Way> ##练习10 print("i am 6'2\"tall.")#将双引号转义 print(' ...
- 【 C 】高级字符串查找之 strspn 和 strcspn 的思考
我的CSDN博客 strspn 这个库函数是真的很难理解,看了很多中文描述,反正都是不知所云,给出一系列的例子,结果也是让我瞠目结舌,荒唐.荒谬.荒诞! 特此记录理解过程,最后竟然是百度百科让我明白了 ...
- 138. Subarray Sum【Lintcode,by java】
Description Given an integer array, find a subarray where the sum of numbers is zero. Your code shou ...
- leetcode-744-Find Smallest Letter Greater Than Target(改进的二分查找)
题目描述: Given a list of sorted characters letters containing only lowercase letters, and given a targe ...
- python2.7入门---GUI编程(Tkinter)
Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 . ...
- Shrio第一天——入门与基本概述
一.Shiro是什么 Apache Shiro是Java的一个安全框架.(希罗:/笑哭) Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境. sh ...
- C语言第三周
一. 字符串常量 只要有一对双引号括起来的字符序列就是字符串常量.列如"hello"接"123" 注意:"a"是字符串常量'a'是字符常量. ...
- 20155338 2016-2017-2《Java程序设计》实验四Android程序开发实验报告
2016-2017-2 20155338 <Java程序设计>实验四Android程序开发实验报告 实验过程及成果展示 1.修改res目录下的layout文件夹中的activity_mai ...
