需求:1、实现清屏功能

2、实现不区分大小写功能

3、添加功能能添加新的命令符

设计:1、使用system("cls")清屏。

2、使用strlwr()函数把大写都变成小写

3、(1)使用菜单做选择项,让用户进入添加命令功能

(2)写进文件,再从文件夹中读取

#include<stdio.h>//stdio 就是指 “standard input & output"(标准输入输出)
//所以,源代码中如用到标准输入输出函数时,就要包含这个头文件!
//例如c语言中的 printf("%d",i); scanf("%d",&i);等函数
#include<string.h>//在使用到字符数组时需要使用
#include<stdlib.h>
#define Max 500 struct Cmd{
char cmd[30];
char function[500];
int post;
};
int count=0;
struct Cmd cm[Max]; //定义结构体 void menu(){
printf("\t\t\t|--------------------------|\n");
printf("\t\t\t| 1、进入cmd |\n");
printf("\t\t\t| 2、添加命令 |\n");
printf("\t\t\t|--------------------------|\n");
} void menu2(){
printf("\t\t\t|--------------------------|\n");
printf("\t\t\t| 1、回到主界面 |\n");
printf("\t\t\t| 2、退出 |\n");
printf("\t\t\t|--------------------------|\n");
} void Init(struct Cmd cm[Max])
{
FILE *fp;
if((fp=fopen("cmd.txt","a+"))==NULL)
{
printf("File open error!\n");
exit(0);
}
while(!feof(fp)&&fgetc(fp)!=EOF)
{
fseek(fp,-1L,SEEK_CUR);
fscanf(fp,"%s%s%d",&cm[count].cmd,&cm[count].function,&cm[count].post);
count++;
}
if(fclose(fp))
{
printf("Can not close the file!\n");
exit(0);
}
} void display(struct Cmd cm[Max]) //读出文件
{
for(int i=0;i<count;i++)
{
printf("%-10s%s\n",strupr(cm[i].cmd),cm[i].function);
strlwr(cm[i].cmd);
}
} void Putout1(){
printf("Microsoft Windows XP [版本 5.1.2600]\n");
printf("(C) 版权所有 1985-2001 Microsoft Corp.\n");
} void Strcmp1(char str[10])
{
int i;
if(strcmp(str,"help")==0)
{
printf("有关某个命令的详细信息,请键入 HELP 命令名\n");
display(cm); }
else if(strcmp(str,"cd")==0)
printf("cd 内部命令 显示当前目录的名称或将其更改\n");
else if(strcmp(str,"md")==0)
printf("md 内部命令 创建一个目录\n");
else if(strcmp(str,"rd")==0)
printf("rd 内部命令 删除目录\n");
else if(strcmp(str,"cls")==0)
{ printf("cls 内部命令 清除屏幕\n");
system("cls");
}
else if(strcmp(str,"date")==0)
printf("date 内部命令 显示或设置日期\n");
else if(strcmp(str,"time")==0)
printf("time 内部命令 内部命令显示或设置系统时间\n");
else if(strcmp(str,"ren")==0)
printf("ren 内部命令 重新命名文件\n");
else if(strcmp(str,"cope")==0)
printf("cope 内部命令 将至少一个文件复制到另一个位置\n");
else if(strcmp(str,"quit")==0)
exit(0);
else if(strcmp(str,"dir")==0)
printf("dir 内部命令 显示一个目录的文件和子目录\n");
else
{
for(i=0;i<count;i++)
{
if(strcmp(str,cm[i].cmd)==0)
{
if(cm[i].post==1)
printf("'%s' 内部命令输入正确!\n该命令作用是:%s\n",str,cm[i].function);
else
printf("'%s' 外部命令输入正确!\n该命令作用是:%s\n",str,cm[i].function);
goto abc;
}
}
printf("'%s'不是内部或外部命令,也不是可运行的程序\n",str);
printf("或批处理文件。\n");
}
abc: printf("\n");
} void process(struct Cmd cm[Max])
{
char str[10];
Putout1();
while(1)
{
printf("\nC:\\Documents and Settings\\hskd>");
scanf("%s",str);
strlwr(str);
Strcmp1(str);
}
}
int main()
{
FILE *fp;
int i,j,k,f;
struct Cmd tempcm[Max];
bbc: menu();
scanf("%d",&i);
if(i==1)
{
Init(cm);
process(cm);
}
else if(i==2)
{
printf("请问需要输入多少个命令:\n");
scanf("%d",&j);
for(k=0;k<j;k++)
{
printf("请分别输入第%d个指令的符号、功能和属性:\n",k+1);
scanf("%s%s%d",&tempcm[k].cmd,&tempcm[k].function,&tempcm[k].post);
}
Init(cm);
for(k=0;k<j;k++)
{ cm[count+k+1]=tempcm[k];
}
count=count+j+1;
// display(cm);
if((fp=fopen("cmd.txt","w"))==NULL)
{
printf("打开失败");
exit(0);
}
fp=fopen("cmd.txt","w");
for(k=0;k<count;k++)
{
fprintf(fp,"%s%s%d\n",cm[k].cmd,cm[k].function,cm[k].post);
}
/* fwrite(cm,sizeof(Cmd),count,fp);*/
fclose(fp); }
else
{
printf("输入有误,请重新输入\n");
goto bbc;
}
bbd: menu2();
scanf("%d",&f);
if(f==1)
goto bbc;
else if(f==2)
exit(0);
else
{
printf("输入有误,请重新输入\n");
goto bbd;
} }

  

运行结果:

备注:对这次做的特别不满意,啊啊啊啊啊……可惜时间紧,虽然写代码不是本课程的重点,但反映出来C语言文件写入读出还不熟练,嗯,明日再战斗!!! 

0324操作系统cmd功能的扩展的更多相关文章

  1. js实现reqire中的amd,cmd功能

    js实现reqire中的amd,cmd功能 ,大概实现了 路径和模块 引入等重要功能. 本帖属于原创,转载请出名出处. <!DOCTYPE html PUBLIC "-//W3C//D ...

  2. Eclipse 插件开发 -- 深入理解菜单(Menu)功能及其扩展点( FROM IBM)

    Eclipse 插件开发 -- 深入理解菜单(Menu)功能及其扩展点 菜单是各种软件及开发平台会提供的必备功能,Eclipse 也不例外,提供了丰富的菜单,包括主菜单(Main Menu),视图 / ...

  3. 操作系统cmd算法

    实验一  命令解释程序的编写(两周内) 一.目的和要求 1. 实验目的 (1)掌握命令解释程序的原理: (2)*掌握简单的DOS调用方法: (3)掌握C语言编程初步. 2.实验要求 编写类似于DOS, ...

  4. 操作系统cmd

    实验一  命令解释程序的编写(两周内) 一.目的和要求 1. 实验目的 (1)掌握命令解释程序的原理: (2)*掌握简单的DOS调用方法: (3)掌握C语言编程初步. 2.实验要求 编写类似于DOS, ...

  5. HelloX操作系统网络功能简介及使用和开发指南

    HelloX网络功能简介及使用和开发指南 HelloX网络功能简介 作为物联网操作系统,网络功能是必备的核心功能之一.按照规划,HelloX实现了两个不同类型的TCP/IP协议栈,一个面向资源受限的嵌 ...

  6. 磁盘操作系统 cmd命令

    DOS CMD :磁盘操作系统 不区分大小写 **cd \ 根目录 cls 清空屏幕 dir 显示目录 d: 进入D盘 cd 进入目录命令 dir 查看当前目录的文件与目录 del 删除文件 del ...

  7. C#3.0新增功能04 扩展方法

    连载目录    [已更新最新开发文章,点击查看详细] 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型 ...

  8. 纯CSS焦点轮播效果-功能可扩展

    个人博客: http://mcchen.club 纯CSS3实现模拟焦点轮播效果,支持JQ等扩展各项功能.废话少说,直接贴代码. <!DOCTYPE html> <html> ...

  9. 任意文件夹下打开cmd功能的设置(win10)

    win10中打开cmd的方法: 1."运行"中输入CMD打开,也可以按住win+R 2.选择命令行工具中"开始-->>所有应用-->>Window ...

随机推荐

  1. linux 命令 uniq

    linux命令uniq去重 实例详细说明linux下去除重复行命令uniq 一,uniq干什么用的 文本中的重复行,基本上不是我们所要的,所以就要去除掉.linux下有其他命令可以去除重复行,但是我觉 ...

  2. 解决webview上移

    //解决webview上移 $(".webView").blur(function() { setTimeout(function() { var scrollHeight = d ...

  3. Python学习笔记十一:模块

    标准库(内置模块) time与datetime 模块 时间表示方式 1.时间戳 2.格式化的字符串 3.元组形式 时间戳就是一个秒数 x=time.time(),从1970年1月1日0时0分0秒到现在 ...

  4. 解决「matplotlib 图例中文乱码」问题

    在学习用 matplotlib 画图时遇到了中文显示乱码的问题,在网上找了很多需要修改配置的方法,个人还是喜欢在代码里修改. 解决方法如下: 在第2.3行代码中加上所示代码即可. import mat ...

  5. 使用ofstream输出unicode

    void saveWideFileHead(std::ofstream& out)// 写入文件内容前,先写入BOM { char const* const utf16head = " ...

  6. 在Linux Mint 19 / Linux Mint 18上安装VirtualBox 6.0 / 5.2

    如果你直接可以 sudo apt-get install virtualbox-6.0那就相安无事 否则参考https://www.itzgeek.com/how-tos/linux/linux-mi ...

  7. Mypwd 的解读与实现 20155202

    Mypwd 的解读与实现 20155202 linux下pwd命令的编写 实验要求: 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd ...

  8. 20155207王雪纯 《Java程序设计》实验一报告

    20155207王雪纯 <Java程序设计>实验一报告 课程:Java程序设计 班级:1552 指导教师:娄嘉鹏 实验日期:2017.04.07 实验名称:Java开发环境的熟悉(Linu ...

  9. 20145209 2016-2017-2 《Java程序设计》课程总结

    20145209 2016-2017-2 <Java程序设计>课程总结 每周作业链接汇总 预备作业01 http://www.cnblogs.com/liuyiyang/p/6194319 ...

  10. 【转载】从零实现3D图像引擎:(1)环境配置与项目框架

    原文:从零实现3D图像引擎:(1)环境配置与项目框架 0. 要学懂3D程序设计,必然要精通3D相关的线性代数.3D几何.复分析等相关知识,我也因为如此才开始这个博客系列的写作,不自己实现,就不是自己的 ...