需求:1、实现清屏功能

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

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

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

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

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

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

  1. #include<stdio.h>//stdio 就是指 “standard input & output"(标准输入输出)
  2. //所以,源代码中如用到标准输入输出函数时,就要包含这个头文件!
  3. //例如c语言中的 printf("%d",i); scanf("%d",&i);等函数
  4. #include<string.h>//在使用到字符数组时需要使用
  5. #include<stdlib.h>
  6. #define Max 500
  7.  
  8. struct Cmd{
  9. char cmd[30];
  10. char function[500];
  11. int post;
  12. };
  13. int count=0;
  14. struct Cmd cm[Max]; //定义结构体
  15.  
  16. void menu(){
  17. printf("\t\t\t|--------------------------|\n");
  18. printf("\t\t\t| 1、进入cmd |\n");
  19. printf("\t\t\t| 2、添加命令 |\n");
  20. printf("\t\t\t|--------------------------|\n");
  21. }
  22.  
  23. void menu2(){
  24. printf("\t\t\t|--------------------------|\n");
  25. printf("\t\t\t| 1、回到主界面 |\n");
  26. printf("\t\t\t| 2、退出 |\n");
  27. printf("\t\t\t|--------------------------|\n");
  28. }
  29.  
  30. void Init(struct Cmd cm[Max])
  31. {
  32. FILE *fp;
  33. if((fp=fopen("cmd.txt","a+"))==NULL)
  34. {
  35. printf("File open error!\n");
  36. exit(0);
  37. }
  38. while(!feof(fp)&&fgetc(fp)!=EOF)
  39. {
  40. fseek(fp,-1L,SEEK_CUR);
  41. fscanf(fp,"%s%s%d",&cm[count].cmd,&cm[count].function,&cm[count].post);
  42. count++;
  43. }
  44. if(fclose(fp))
  45. {
  46. printf("Can not close the file!\n");
  47. exit(0);
  48. }
  49. }
  50.  
  51. void display(struct Cmd cm[Max]) //读出文件
  52. {
  53. for(int i=0;i<count;i++)
  54. {
  55. printf("%-10s%s\n",strupr(cm[i].cmd),cm[i].function);
  56. strlwr(cm[i].cmd);
  57. }
  58. }
  59.  
  60. void Putout1(){
  61. printf("Microsoft Windows XP [版本 5.1.2600]\n");
  62. printf("(C) 版权所有 1985-2001 Microsoft Corp.\n");
  63. }
  64.  
  65. void Strcmp1(char str[10])
  66. {
  67. int i;
  68. if(strcmp(str,"help")==0)
  69. {
  70. printf("有关某个命令的详细信息,请键入 HELP 命令名\n");
  71. display(cm);
  72.  
  73. }
  74. else if(strcmp(str,"cd")==0)
  75. printf("cd 内部命令 显示当前目录的名称或将其更改\n");
  76. else if(strcmp(str,"md")==0)
  77. printf("md 内部命令 创建一个目录\n");
  78. else if(strcmp(str,"rd")==0)
  79. printf("rd 内部命令 删除目录\n");
  80. else if(strcmp(str,"cls")==0)
  81. { printf("cls 内部命令 清除屏幕\n");
  82. system("cls");
  83. }
  84. else if(strcmp(str,"date")==0)
  85. printf("date 内部命令 显示或设置日期\n");
  86. else if(strcmp(str,"time")==0)
  87. printf("time 内部命令 内部命令显示或设置系统时间\n");
  88. else if(strcmp(str,"ren")==0)
  89. printf("ren 内部命令 重新命名文件\n");
  90. else if(strcmp(str,"cope")==0)
  91. printf("cope 内部命令 将至少一个文件复制到另一个位置\n");
  92. else if(strcmp(str,"quit")==0)
  93. exit(0);
  94. else if(strcmp(str,"dir")==0)
  95. printf("dir 内部命令 显示一个目录的文件和子目录\n");
  96. else
  97. {
  98. for(i=0;i<count;i++)
  99. {
  100. if(strcmp(str,cm[i].cmd)==0)
  101. {
  102. if(cm[i].post==1)
  103. printf("'%s' 内部命令输入正确!\n该命令作用是:%s\n",str,cm[i].function);
  104. else
  105. printf("'%s' 外部命令输入正确!\n该命令作用是:%s\n",str,cm[i].function);
  106. goto abc;
  107. }
  108. }
  109. printf("'%s'不是内部或外部命令,也不是可运行的程序\n",str);
  110. printf("或批处理文件。\n");
  111. }
  112. abc: printf("\n");
  113. }
  114.  
  115. void process(struct Cmd cm[Max])
  116. {
  117. char str[10];
  118. Putout1();
  119. while(1)
  120. {
  121. printf("\nC:\\Documents and Settings\\hskd>");
  122. scanf("%s",str);
  123. strlwr(str);
  124. Strcmp1(str);
  125. }
  126. }
  127. int main()
  128. {
  129. FILE *fp;
  130. int i,j,k,f;
  131. struct Cmd tempcm[Max];
  132. bbc: menu();
  133. scanf("%d",&i);
  134. if(i==1)
  135. {
  136. Init(cm);
  137. process(cm);
  138. }
  139. else if(i==2)
  140. {
  141. printf("请问需要输入多少个命令:\n");
  142. scanf("%d",&j);
  143. for(k=0;k<j;k++)
  144. {
  145. printf("请分别输入第%d个指令的符号、功能和属性:\n",k+1);
  146. scanf("%s%s%d",&tempcm[k].cmd,&tempcm[k].function,&tempcm[k].post);
  147. }
  148. Init(cm);
  149. for(k=0;k<j;k++)
  150. {
  151.  
  152. cm[count+k+1]=tempcm[k];
  153. }
  154. count=count+j+1;
  155. // display(cm);
  156. if((fp=fopen("cmd.txt","w"))==NULL)
  157. {
  158. printf("打开失败");
  159. exit(0);
  160. }
  161. fp=fopen("cmd.txt","w");
  162. for(k=0;k<count;k++)
  163. {
  164. fprintf(fp,"%s%s%d\n",cm[k].cmd,cm[k].function,cm[k].post);
  165. }
  166. /* fwrite(cm,sizeof(Cmd),count,fp);*/
  167. fclose(fp);
  168.  
  169. }
  170. else
  171. {
  172. printf("输入有误,请重新输入\n");
  173. goto bbc;
  174. }
  175. bbd: menu2();
  176. scanf("%d",&f);
  177. if(f==1)
  178. goto bbc;
  179. else if(f==2)
  180. exit(0);
  181. else
  182. {
  183. printf("输入有误,请重新输入\n");
  184. goto bbd;
  185. }
  186.  
  187. }

  

运行结果:

备注:对这次做的特别不满意,啊啊啊啊啊……可惜时间紧,虽然写代码不是本课程的重点,但反映出来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. 弹性布局解决ios输入框遮挡input

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. HIVE基本语法以及HIVE分区

    HIVE小结 HIVE基本语法 HIVE和Mysql十分类似 建表规则 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name da ...

  3. CAP通俗解释

    CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),这三个基本需求,最多只 ...

  4. CTF-安恒19年二月月赛部分writeup

    CTF-安恒19年二月月赛部分writeup MISC1-来玩个游戏吧 题目: 第一关,一眼可以看出是盲文,之前做过类似题目 拿到在线网站解一下 ??41402abc4b2a76b9719d91101 ...

  5. A.Activity planning

    题目描述There is a collection of n activities E={1,2,..,n}, each of which requires the same resource, su ...

  6. C语言简易三子棋

    这是本人依据现学知识写的简易三子棋,也不是那么简洁明了,望大佬指点 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include&l ...

  7. 探秘GO语言《比较C#与GO的性能--XML序列化》

    今天对GO和NET的XML字符串序列化成对象列表做了一个性能比较,得出一些结论. GO的代码: package main import ( "encoding/xml" " ...

  8. 20155239 2016-2017-2 《Java程序设计》第10周学习总(2017-04-22 16:26

    教材学习 1.基本概念划分 OIS的七层协议: 应用层.表示层.会话层.运输层.网络层.数据链路层.物理层. OIS的五层协议: 应用层.运输层.网络层.数据链路层.物理层. 由下往上介绍如下: 2. ...

  9. c++ 参数个数可变的函数

    #include <stdio.h> #include <string.h> #include <stdarg.h> int addnum(int i,...) { ...

  10. 查看Linux系统版本的命令

    1.lsb_release -a,即可列出所有版本信息: [root@S-CentOS ~]# lsb_release -a LSB Version: :base-4.0-amd64:base-4.0 ...