文档章节

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

逍遥蓝云
 逍遥蓝云
发布于 2016/03/04 15:05
字数 501
阅读 18
收藏 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
甲骨文CSO批企业用户用逆向工程寻漏洞

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

cnbeta
2015/08/12
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
[课程复习] 软件工程导论之经典题目回顾 (一)选择题、填空题1

版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步~ https://blog.csdn.net/Eastmount/article/details/86694888 作者最近在复习考博,乘此机会分享一些计算机科...

Eastmount
01/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Httpd 整合 Tomcat 步骤

环境:Tomcat8 + Httpd2.4 工作原理:借助于Tomcat的AJP连接器实现Apache与Tomcat的通信 配置步骤: 1. 配置httpd.conf 新增: Include conf/extra/mod_jk.conf 修改:添加 index.jsp <IfM...

ZeroneLove
昨天
1
0
Docker笔记3——容器命令(未写完,明天整理接着写)

未写完,明天整理接着写 新建并启动容器 docker run docker run [OPTIONS] IMAGE [COMMEND] [ARG...] OPTIONS: --name=[容器新名字] :为容器指定一个名称 -d:后台运行容器,并返回容器ID,...

HappyBKs
昨天
1
0
2018个人年终总结

感谢领导的信任和指导,新的一年获得了很多成长和提高,改掉了很多不好的习惯。 在这一年里,我在领导的帮助下,主要完成了以下功能: 1、完成上海银行版本投资营销相关功能的开发。 2、完成车...

万山红遍
昨天
9
0
保密工作与linux系统的发展

保密工作从性质上可以分成商业方面的保密和国家安全方面的保密。由于自己从事的是IT方面的工作,工作中必然会接触涉及到计算机信息方面的相关文件。加上单位已近通过武器装备科研生产单位二级...

linux-tao
昨天
2
0
Spark共享变量

概述 Spark程序的大部分操作都是RDD操作,通过传入函数给RDD操作函数来计算。这些函数在不同的节点上并发执行,但每个内部的变量有不同的作用域,不能相互访问,所以有时会不太方便,Spark提...

仟昭
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部