文档章节

“软件工程(C编码实践篇)”实验报告(六)

逍遥蓝云
 逍遥蓝云
发布于 2016/03/04 15:18
字数 313
阅读 12
收藏 0

实验过程

(注释:mkfile 和mkdir 命令可以带-hXXX/-lXXX 例如 mkfile -hppp 意思就是调用mkfile函数 执行-h命令参数值为ppp )

1 为menu子系统设计接口。

menu.h

int MenuConfig(char *cmd, char *desc, int (*handler)());int ExcuteMenu();

将menu.c里的main函数改成ExcuteMenu()函数,讲重写InitMenuData(),用MenuConfig()函数实现原来InitMenuData()的功能。参考老师的代码实现。

2 完成Makefile

CC_PTHREAD_FLAGS   = -lpthread 
CC_FLAGS           = -cCC_OUTPUT_FLAGS    = -o
CC                 = gcc
RM                 = rm
RM_FLAGS           = -f
TARGET             = m
OBJS               = link_table.o link_list.o business_logic_layer.o menu.o 
all:    $(OBJS)    $(CC) $(CC_OUTPUT_FLAGS) $(TARGET) $(OBJS)
.c.o:
    $(CC) $(CC_FLAGS) $<
clean:
    $(RM) $(RM_FLAGS) $(OBJS) $(TARGET) *.bak

3 使menu子系统支持带参数的命令,使用getopt函数

int executeMenu()
    {
    printf("Ctrl c to exit\n");
    while(1)
        {
            int argc=0;
            char *argv[CMD_MAX_ARGV_NUM];
            char cmd[CMD_LEN];
            char *pcmd=NULL;  
            printf("please input cmd >");
            pcmd=fgets(cmd,CMD_LEN,stdin);
            if(pcmd==NULL)
            {
                continue;
            }
            pcmd=strtok(pcmd," ");
            while(pcmd!=NULL&&argc<CMD_MAX_ARGV_NUM)
            {
                argv[argc]=pcmd;
                argc++;
                pcmd=strtok(NULL," ");
            }
            if(argc==1)
            {
                int len=strlen(argv[0]);
                *(argv[0]+len-1)='\0';
            }
            int i=business_find_cmd(argc,argv);
            if(i==FAIL)
            {
                continue;
            }
        }
    }

mygetopt函数

int myGetopt(int argc,char* argv[])
    {
        int ch;
        while((ch=getopt(argc,argv,"h:l:"))!=-1)
        {
            switch(ch)
            {
                case 'h':
                    printf("option h,name:%s",optarg);
                    strcpy(argv[1],optarg);
                    break;
                case 'l':
                    printf("option l,name:%s",optarg);
                    strcpy(argv[1],optarg);
                    break;
            }
            return SUCCESS;
        }    
        printf("wrong cmd\n");
        executeMenu();
    }
     实验代码

© 著作权归作者所有

共有 人打赏支持
逍遥蓝云
粉丝 2
博文 23
码字总数 17574
作品 0
合肥
高级程序员
软件工程(C编码实践篇)学习总结

真实姓名(姬祥) + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006 整体概括: 这学期学习了中国科学技术大学孟宁老师的...

神迹难觅
2017/11/11
0
0
下面简要介绍软件工程的七条原理

软件工程介绍 自从1968年提出“软件工程”这一术语以来,研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则或信条。美国著名的软件工程专家巴利·玻姆(Barry Boehm)综合这些专...

Amamatthew
2014/09/11
0
0
甲骨文CSO批企业用户用逆向工程寻漏洞

  【IT168 资讯】周一,甲骨文(Oracle)公司的首席安全官Mary Ann Davidson在其博客上发表了一篇颇具争议的博文,题为《不,这样不行(No,You Really Can't)》 。大致为批评使用甲骨文软件的...

cnbeta
2015/08/12
0
0
编程更像写作

本文是从 Programmers Are Writers 这篇文章翻译而来。 早在2009年,Bruce Eckel 写了一篇文章,道出了我的想法。 “我终于给软件开发找到了一个好的类比,” Bruce 写到。“可是,我的读者们...

红薯
2012/01/12
2K
18
框架比较:Scrum vs Kanban vs Lean vs XP

  【IT168 资讯】在这篇文章中, Alesia Krush将对四种最流行的敏捷开发方法进行比较,给出了每种方法的优缺点。   市场上有各种各样的面向实践的敏捷框架,其中最受欢迎的是Scrum、Kan...

it168网站
2017/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java动态代理之InvocationHandler最简单的入门教程

网上关于Java的动态代理,Proxy和InvocationHandler这些概念有讲解得非常高深的文章。其实这些概念没有那么复杂。现在咱们通过一个最简单的例子认识什么是InvocationHandler。值得一提的是,...

JerryWang_SAP
1分钟前
0
0
oracle 在 MyBatis 中使用 like

两种使用方法 使用oracle自带 || 拼凑的方式 <if test="userName!=null and userName!=''"> AND u.USER_NAME like '%' || #{userName} || '%' </if> 使用MyBatis的$符号的方式 <if test="us......

karma123
7分钟前
0
0
带接口的webservice方式发布

package cn.it.ws.e;import javax.jws.WebService;/** * 面向接口的webservice发布方式 * @author Administrator * */@WebServicepublic interface JobService {publi...

江戸川
22分钟前
0
0
day122-20181020-英语流利阅读-待学习

蜘蛛侠新片《毒液》来袭!导演灵感来自哪? Roxy 2018-10-20 1.今日导读 你还记得漫威宇宙中飞檐走壁的蜘蛛侠小可爱吗?在刚过去的国庆黄金周里,索尼影业发行的漫威超级英雄蜘蛛侠系列大片《...

飞鱼说编程
33分钟前
2
0
美团点评Docker容器管理平台

美团点评容器平台简介 本文介绍美团点评的Docker容器集群管理平台(以下简称“容器平台”)。该平台始于2015年,是基于美团云的基础架构和组件而开发的Docker容器集群管理平台。目前该平台为...

Skqing
39分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部