文档章节

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

逍遥蓝云
 逍遥蓝云
发布于 2016/03/04 15:18
字数 313
阅读 11
收藏 0
点赞 1
评论 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
2018 年,不要事后才想到代码安全问题

年复一年,企业都会在安全方面面临挑战,2017年也不例外。与其向业界宣传安全的重要性,还不如试着找一种新方式让安全重回中心。 “问题是,根据CA Veracode和DevOps.com的2017年DevSecOps全...

周其
2017/12/23
1K
2
框架比较:Scrum vs Kanban vs Lean vs XP

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

it168网站
2017/11/22
0
0
嵌入式项目管理 嵌入式项目讲解

通过建立一个嵌入式项目管理,能够使产品完成效率更高,少该bug,提高产品质量,综合各大家指导和本人经验,将嵌入式研发项目的一般流程总结如下 嵌入式项目管理 嵌入式项目讲解 一. 高层设计...

创客学院
04/19
0
0
西工大-云创大数据联合实验室签约暨揭牌仪式隆重举行

  2017年12月19日,西工大-云创大数据联合实验室签约仪式暨揭牌仪式在西北工业大学长安校区计算机学院隆重举行。西北工业大学工业和信息化部大数据存储与管理重点实验室主任李战怀教授、教...

大数据头条
2017/12/21
0
0
甲骨文CSO批企业用户用逆向工程寻漏洞

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

cnbeta
2015/08/12
0
0
图书在线购买地址

图书在线购买地址 《虚拟化技术实践指南 面向中小企业的高效、低成本解决方案》 《深入学习VMware vSphere 6》购买链接 《VMware虚拟化与云计算应用案例详解第2版》购买链接 《Windows组网与...

王春海
2010/11/21
0
0
2015 年 SES 全球软件专家高峰会议在北京举行

(国际电子电器工程师协会)软件每年举办一次全球软件专家高峰会议 (IEEE Software Experts Summit, SES),邀请软件各个领域的杰出思想家和实践者,分享讨论软件工程领域近年来最重要的成果、...

oschina
2015/09/09
913
1
大数据早报:Uber推出机器学习平台Michelangelo 天猫发布酒水消费大数据(9.7)

     数据早知道,上36dsj看早报!   来源36大数据,作者:奥兰多   『机器学习』Uber推出机器学习平台Michelangelo:全面处理工作流程推动AI民主化      Uber Engineering 致力...

36大数据
2017/09/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

回想过往,分析当下,着眼未来

好久没有真正的在纸质笔记本上写过东西了,感觉都快不会写字了,笔画都不知道怎么写了。接下来就说说咱们的正事。 2018年7月22日,我做了一个决定,那就是去参加安全培训(可能是我职业生涯中...

yeahlife
42分钟前
4
0
关于工作中的人际交往

关于工作中的人际交往 Intro 写了篇发泄情绪的博客,但不会发布出来。 大概就是,要么忍,要么滚。 以及一些不那么符合社会主义核心价值观,不满于大资本家与小资本家剥削的废话。

uniqptr
47分钟前
0
0
springMVC的流程

1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(...

JavaSon712
今天
0
0
大数据教程(3.2):Linux系统软件安装之自动化脚本

博主前面文章有介绍过软件的安装,可以帮助IT人员顺利的完成功能软件安装;但是,对于我们运维人员或者需要管理软件安装的项目经理来说,有些应用一次行需要搭建很多台相同的软件环境(如tom...

em_aaron
今天
0
1
Spring Boot 2.0.3 JDBC整合Oracle 12

整合步骤 1. Oracle驱动引入 Oracle驱动一般不能通过maven仓库直接下载得到,需自行下载并导入到项目的lib目录下,建议通过如下pom依赖引入下载的Oracle驱动 <!-- Oracle 驱动 -->...

OSC_fly
今天
0
0
java 8 并行流 - 1

下面创建一个并行流,与顺序流 //顺序流Stream.iterate(0L, i -> i + 1) .limit(Integer.MAX_VALUE) .reduce(0L, Long::sum);//并行流Stream.iterate(0L, i -> i......

Canaan_
今天
0
0
数据结构与算法5

二分法采用向下取整的方法 使用有序数组的好处是查找的速度比无序数组快的多,不好的方面是因为要将所有靠后的数据移开,所以速度较慢,有序数组和无序数组的删除操作都很慢。 有序数组在查找...

沉迷于编程的小菜菜
昨天
1
1
SpringBoot | 第十一章:Redis的集成和简单使用

前言 上几节讲了利用Mybatis-Plus这个第三方的ORM框架进行数据库访问,在实际工作中,在存储一些非结构化或者缓存一些临时数据及热点数据时,一般上都会用上mongodb和redis进行这方面的需求。...

oKong
昨天
5
0
对基于深度神经网络的Auto Encoder用于异常检测的一些思考

一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景。举几个场景:网络流量是正常流量还是攻击流量、视频中的人的...

冷血狂魔
昨天
0
0
并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部