您的位置:首页 > 移动开发 > 微信开发

文章标题 实验三:内部模块化的命令行菜单小程序V2.0

2017-10-03 21:33 363 查看
【rainingsunning + 《软件工程(C编码实践篇)》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006

版本库地址https://github.com/blackcatting/Test.git

在版本库根目录下新创建一个目录lab3完成实验。

1、实验要求(参照视频中的具体实验过程)

注意代码的业务逻辑和数据存储之间的分离,即将系统抽象为两个层级:菜单业务逻辑和菜单数据存储

要求:1)遵守代码风格规范,参考借鉴代码设计规范的一些方法;2)代码的业务逻辑和数据存储使用不同的源文件实现,即应该有2个.c和一个.h作为接口文件。

2、实验步骤

新建lab3



进入menu.c 、linklist.c和 linklist.h 中写代码



linklist.h的代码截图(menu.c和linklist.c代码过长,以文本形式展示)



编译代码、执行可执行程序以及运行结果



上传到库



3、代码

menu.c的代码:

#include <stdio.h>
#include <stdlib.h>
#include "linklist.h"

int Help();

#define CMD_MAX_LEN 128
#define DESC_LEN 1024
#define CMD_NUM 10

/* menu program */

static tDataNode head[]=
{
{"help","this is help cmd!",Help,&head[1]},
{"version","menu program v1.0",NULL,NULL}
};

int main()
{
/* cmd line begins */
while(1)
{
char cmd[CMD_MAX_LEN];
printf("Input a cmd number : ");
scanf("%s",cmd);
tDataNode *p = FindCmd(head,cmd);
if( p == NULL)
{
printf("this is a wrong cmd!\n ");
continue;
}
printf("%s -%s\n",p->cmd,p->desc);
if(p->handler != NULL)
{
p->handler();
}
}
}

int Help()
{
ShowAllCmd(head);
return 0;
}


linklist.c 的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "linklist.h"

tDataNode* FindCmd(tDataNode * head,char * cmd)
{
if(head == NULL||cmd == NULL)
{
return NULL;
}
tDataNode *p = head;
while(p != NULL)
{
if(strcmp(p->cmd, cmd) == 0)
{
return p;
}
p = p->next;
}
return NULL;
}

int ShowAllCmd(tDataNode * head)
{
printf("Menu List:\n");
tDataNode *p=head;
while(p != NULL)
{
printf("%s - %s\n",p->cmd,p->desc);
p = p->next;
}
return 0;
}


4、实验总结

代码编译过程中出现一些错误,很多是大意导致的问题,终端中会提示错误在代码段中的具体位置以及是何种错误,这可以帮助较快的解决问题。



通过本次实验,将一段冗长的代码段,分割精简形成几个模块,使代码更加清楚明了,也为后续的修改工作,提供很大的便利,从中可以体会到内部模块化的优点,为今后书写代码带来了一个很好的方法,并且有利于形成一个很好的框架。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: