文档章节

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

逍遥蓝云
 逍遥蓝云
发布于 2016/03/04 15:05
字数 501
阅读 17
收藏 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
0
框架比较:Scrum vs Kanban vs Lean vs XP

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

it168网站
2017/11/22
0
0
2018 年,不要事后才想到代码安全问题

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

周其
2017/12/23
1K
2
甲骨文CSO批企业用户用逆向工程寻漏洞

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

cnbeta
2015/08/12
0
0
Base64系列第一篇 Base64介绍

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

morewindows
2013/10/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
2
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
8
3
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
4
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
2
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部