文档章节

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

逍遥蓝云
 逍遥蓝云
发布于 2016/03/04 15:05
字数 501
阅读 17
收藏 0
点赞 1
评论 0

实验思路以及过程

根据老师的演示,修改自己上次实验的代码。完成链表link table模块,并通过三层架构的方式完成实验。

三层架构

  1. 用户层 (包括 menu.c文件)

  2. 业务逻辑层 (包括 business_logic_layer.h,business_logic_layer.c 文件)

  3. 数据访问层 (包括 link_table.h link_table.c link_list.h link_list.c 文件)

使用时要注意的使用规则是只能是下层向上层提供服务,不能下层访问上层,而且不能隔层访问。

static的使用

static 加在函数声明前时,表示此函数是内部函数,其他文件不能调用该函数,可以用来隐藏函数。

实验总结

通过这次实验降低了客户端程序与命令行小程序的耦合度,使得客户端程序仅仅只需要调用两个命令行小程序暴露的接口就可以直接使用命令行小程序,同时不需要对命令行小程序进行修改,初步实现了命令行小程序的可重用性,

链表模块设计

link_table.h

#ifndef _LINK_TABLE_H 
#define _LINK_TABLE_H
#define FAIL -1
#define SUCCESS 0
typedef struct link_table_node
{
    struct link_table_node *p_next;
}linkTableNode;
typedef struct link_table
{
    linkTableNode *p_head;
    linkTableNode *p_end;    int len;
}linkTable;
linkTable *create_link_table();
int del_link_table(linkTable *p_link); 
int add_link_node(linkTable *p_link,linkTableNode *p); 
int del_link_node(linkTable *p_link,linkTableNode *p); 
linkTableNode get_link_head(linkTable *p_link); 
linkTableNode get_link_end(linkTable *p_link); 
linkTableNode get_next_node(linkTable *p_link,linkTableNode *p); 
#endif

link_table.c

#include "link_table.h"
#include <stdio.h>
#include <stdlib.h>
linkTable *create_link_table()
{
    linkTable *p_link=(linkTable*)malloc(sizeof(linkTable*));
    if(p_link==NULL)
    {
        return NULL;
    }
    p_link->p_head=NULL;
    p_link->p_end=NULL;
    p_link->len=0;
    return p_link;
}
int del_link_table(linkTable *p_link)
{
    if(p_link==NULL)
    {
         return FAIL;
    }
    while(p_link->p_head!=NULL)
    {
        linkTableNode *p=p_link->p_head;
        p_link->p_head=p_link->p_head->p_next;
        free(p);
        p_link->len-=1;
    }
    p_link->p_head=NULL;
    p_link->p_end=NULL;
    free(p_link);
    return SUCCESS;
}
int add_link_node(linkTable *p_link,linkTableNode *p )
{
    if(p_link==NULL||p==NULL)
    {
        return FAIL;
    }
    p->p_next=NULL;
    if(p_link->p_head==NULL)
    {
        p_link->p_head=p;
    }
    if(p_link->p_end==NULL)
    {
        p_link->p_end=p;
    }
    else
    {
        p_link->p_end->p_next=p;
         p_link->p_end=p;
    }
    p_link->len+=1;
    return SUCCESS;
}
int del_link_node(linkTable *p_link,linkTableNode *p)
{
    if(p_link==NULL||p==NULL)
    {
        return FAIL;
    }
}
   实验代码

© 著作权归作者所有

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

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

神迹难觅 ⋅ 2017/11/11 ⋅ 0

2018 年,不要事后才想到代码安全问题

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

周其 ⋅ 2017/12/23 ⋅ 2

框架比较:Scrum vs Kanban vs Lean vs XP

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

it168网站 ⋅ 2017/11/22 ⋅ 0

下面简要介绍软件工程的七条原理

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

Amamatthew ⋅ 2014/09/11 ⋅ 0

甲骨文CSO批企业用户用逆向工程寻漏洞

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

cnbeta ⋅ 2015/08/12 ⋅ 0

西工大-云创大数据联合实验室签约暨揭牌仪式隆重举行

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

大数据头条 ⋅ 2017/12/21 ⋅ 0

2015 年 SES 全球软件专家高峰会议在北京举行

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

oschina ⋅ 2015/09/09 ⋅ 1

Base64系列第一篇 Base64介绍

本文地址:http://blog.csdn.net/morewindows/article/details/11871429转载请标明出处,谢谢。 欢迎关注微博:http://weibo.com/MoreWindows 本系列一共四篇: 1. 《Base64系列第一篇 Base...

morewindows ⋅ 2013/10/29 ⋅ 0

图书在线购买地址

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

王春海 ⋅ 2010/11/21 ⋅ 0

嵌入式项目管理 嵌入式项目讲解

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

创客学院 ⋅ 04/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

NFS介绍 NFS服务端安装配置 NFS配置选项

NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导...

lyy549745 ⋅ 32分钟前 ⋅ 0

Spring AOP 源码分析 - 筛选合适的通知器

1.简介 从本篇文章开始,我将会对 Spring AOP 部分的源码进行分析。本文是 Spring AOP 源码分析系列文章的第二篇,本文主要分析 Spring AOP 是如何为目标 bean 筛选出合适的通知器(Advisor...

java高级架构牛人 ⋅ 55分钟前 ⋅ 0

HTML-标签手册

标签 描述 <!--...--> 定义注释。 <!DOCTYPE> 定义文档类型。 <a> 定义锚。超链接 <abbr> 定义缩写。 <acronym> 定义只取首字母的缩写。 <address> 定义文档作者或拥有者的联系信息。 <apple......

ZHAO_JH ⋅ 56分钟前 ⋅ 0

SylixOS在t_main中使用硬浮点方法

问题描述 在某些使用场景中,应用程序不使用动态加载的方式执行,而是跟随BSP在 t_main 线程中启动,此时应用代码是跟随 BSP 进行编译的。由于 BSP 默认使用软浮点,所以会导致应用代码中的浮...

zhywxyy ⋅ 今天 ⋅ 0

JsBridge原理分析

看了这个Github代码 https://github.com/lzyzsd/JsBridge,想起N年前比较火的Hybrid方案,想看看现在跨平台调用实现有什么新的实现方式。代码看下来之后发现确实有点独特之处,这里先把核心的...

Kingguary ⋅ 今天 ⋅ 0

Intellij IDEA神器常用技巧五-真正常用快捷键(收藏级)

如果你觉得前面几篇博文太啰嗦,下面是博主多年使用Intellij IDEA真正常用快捷键,建议收藏!!! sout,System.out.println()快捷键 fori,for循环快捷键 psvm,main方法快捷键 Alt+Home,导...

Mkeeper ⋅ 今天 ⋅ 0

Java 静态代码分析工具简要分析与使用

本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能、特性等方面对它们进行分析和比较,...

Oo若离oO ⋅ 今天 ⋅ 0

SpringBoot自动配置小记

spring-boot项目的特色就在于它的自动配置,自动配置就是开箱即用的本源。 不过支持一个子项目的自动配置,往往比较复杂,无论是sping自己的项目,还是第三方的,都是如此。刚接触会有点乱乱...

大_于 ⋅ 今天 ⋅ 0

React jsx 中写更优雅、直观的条件运算符

在这篇文字中我学到了很多知识,同时结合工作中的一些经验也在思考一些东西。比如条件运算符 Conditional Operator condition ? expr_if_true : expr_if_false 在jsx中书写条件语句我们经常都...

开源中国最帅没有之一 ⋅ 今天 ⋅ 0

vim编辑模式与命令模式

5.5 进入编辑模式 从编辑模式返回一般模式“Esc” 5.6 vim命令模式 命令 :“nohl”=no high light 无高亮,取消内容中高亮标记 "x":保存退出,和wq的区别是,当进入一个文件未进行编辑时,使...

弓正 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部