实验一、 DOS命令解释程序的编写
物联网工程 刘烨 201306104146
一、 实验目的
(1)认识DOS;
(2)掌握命令解释程序的原理;
(3)掌握简单的DOS调用方法;
(4)掌握C语言编程初步。
二、 实验内容和要求
内容:根据要求,完成设计、编码、测试工作。
要求: 编写类似于DOS,UNIX的命令行解释程序
(1)自行定义系统提示符
(2)自定义命令集(8-10个)
(3)用户输入HELP以查找命令的帮助
(4)列出命令的功能,区分内部还是外部命令
(5)用户输入QUIT退出
(6)内部命令有dir, cd, md,rd, cls, date, time, ren, copy等。
三、 实验方法、步骤及结果测试
1.源程序名:caozuo.c
可执行程序名:caozuo.exe
2.原理分析及流程图
主要算法:运用while(1)循环语句,在while(1)里面主要用if 与 else if的嵌套实现。在程序中,将数组把命令集存储起来,后用strcmp( )来将用户输入的字符串与数组的进行比较,若正确,则出现相关命令功能。若不正确,则会提醒用户输入错误,要求重新输入。
3.主要程序段及其解释:
#include<stdio.h>
#include<string.h>
main()
{
char com[30]={"dir","cd","md","rd","cls","date","time",
"ren","copy","help","arp","start","mem","winver","format","taskmgr","netsh","status","system","quit"};
char str1[30];
while (1)
{
printf("input the command:");
gets(str1);
if (strcmp(str1,com[0])==0)
printf("dir 表示无参数:查看当前所在目录的文件和文件夹\n");
else if (strcmp(str1,com[1])==0)
printf("cd 目录名:进入特定的目录\n");
else if (strcmp(str1,com[2])==0)
printf("md 目录名:建立特定的文件夹;dos下面习惯叫目录,win 下习惯叫文件夹\n");
else if (strcmp(str1,com[3])==0)
printf("rd 目录名:删除特定的文件夹;\n");
else if (strcmp(str1,com[4])==0)
printf("cls 目录名:表示清屏功能\n");
else if (strcmp(str1,com[5])==0)
printf("data 目录名:设置日期命令,功能是设置日期\n");
else if (strcmp(str1,com[6])==0)
printf("time 目录名:系统时钟设置命令,功能是设置或显示系统时间\n");
else if (strcmp(str1,com[7])==0)
printf("ren表示文件改个名字,ren命令的格式是:ren 源文件名 目的文件名\n");
else if (strcmp(str1,com[8])==0)
printf("copy 表示复制命令,它的功能是复制信息\n");
else if (strcmp(str1,com[9])==0)
{
printf("无参数:查看当前所在目录的 文件和文件夹\n");
printf("cd 目录名:进入特定的目录\n");
printf("md 目录名:建立特定的文件夹;dos下面习惯叫目录,win 下习惯叫文件夹\n");
printf("rd 目录名:删除特定的文件夹;\n");
printf("cls 目录名:表示清屏功能\n");
printf("data 目录名:设置日期命令,功能是设置日期\n");
printf("time 目录名:系统时钟设置命令,功能是设置或显示系统时间\n");
printf("ren表示文件改个名字,ren命令的格式是:ren 源文件名 目的文件名\n");
printf("copy 表示复制命令,它的功能是复制信息\n");
printf("arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息\n");
printf("start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令 \n");
printf("mem 查看cpu使用情况 ver 在DOS窗口下显示版本信息 \n");
printf("winver 弹出一个窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名)\n");
printf("format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS\n");
printf(" taskmgr 调出任务管理器 \n");
printf(" netsh 查看或更改本地网络配置情况 \n");
printf(" status 显示当前FTP的状态\n");
printf("system 显示远端主机系统类型 \n");
}
else if (strcmp(str1,com[10])==0)
printf("arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息\n");
else if (strcmp(str1,com[11])==0)
printf("start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令 \n");
else if (strcmp(str1,com[12])==0)
printf("mem 查看cpu使用情况 ver 在DOS窗口下显示版本信息 \n");
else if (strcmp(str1,com[13])==0)
printf("winver 弹出一个窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名)\n");
else if (strcmp(str1,com[14])==0)
printf("format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS\n");
else if (strcmp(str1,com[15])==0)
printf(" taskmgr 调出任务管理器 \n");
else if (strcmp(str1,com[16])==0)
printf(" netsh 查看或更改本地网络配置情况 \n");
else if (strcmp(str1,com[17])==0)
printf(" status 显示当前FTP的状态\n");
else if (strcmp(str1,com[18])==0)
printf("system 显示远端主机系统类型 \n");
else if (strcmp(str1,com[19])==0)
return ;
else
printf("你输入的信息错误!请重新输入:\n");
}
}
4.运行结果及分析
用户输入HELP以查找命令的帮助
用户输入其他命令
用户输入错误
用户输入quit则退出程序
四、 实验总结
在开始实验前,曾想过用while循环里嵌套else if语句来实现,但却忘记了如何比较字符串。查找了书籍后清楚了strcmp()的用法。在编写完成后,利用VC++编译,仍有些错误。虽然只是简单的C语言编写,但若不够仔细,依然完成不了工作。