部门人员管理系统

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define CHAR   char
#define BYTE   unsigned char
#define UINT16 unsigned short
#define UINT32 unsigned int
#define VOID   void

#define RTN_OK               (0U)
#define RTN_ERR              (1U)
#define AP_NAME_MAX_SIZE     (50U)  /* ap名字最大长度 */
#define APO_NAME_MAX_SIZE    (50U)  /* apo名字最大长度 */
#define COP_NAME_MAX_SIZE    (50U)  /* cop名字最大长度 */
#define BU_NAME_MAX_SIZE         (50U)
#define MINISTER_NAME_MAX_SIZE   (50U)

#define ERR_CODE_RTN_ERR       (1U)
#define ERR_CORE_NULL_POINTER  (0x10000U)  /* 错误码--空指针 */

typedef struct ap_mgr_t
{
    CHAR ap_name[AP_NAME_MAX_SIZE];
    CHAR cop_name[COP_NAME_MAX_SIZE];
    BYTE ap_age;
    UINT32 ap_no;
    struct ap_mgr_t *p_next;
}AP_MGR_T;

typedef struct cop_mgr_t
{
    CHAR cop_name[COP_NAME_MAX_SIZE];
    CHAR apo_name[APO_NAME_MAX_SIZE];
    UINT16 ap_num;
    AP_MGR_T *p_ap;
    struct cop_mgr_t *p_next;
}COP_MGR_T;

UINT32 mgr_init(AP_MGR_T **p_ap, COP_MGR_T **p_cop)
{
    *p_ap = (AP_MGR_T *)malloc(sizeof(AP_MGR_T));
    if (NULL == *p_ap)
    {
        return ERR_CORE_NULL_POINTER;
    }

    *p_cop = (COP_MGR_T *)malloc(sizeof(COP_MGR_T));
    if (NULL == *p_cop)
    {
        return ERR_CORE_NULL_POINTER;
    }

    memset((*p_ap), 0, sizeof(AP_MGR_T));
    memset((*p_cop), 0, sizeof(COP_MGR_T));
    (*p_ap)->p_next = NULL;
    (*p_cop)->p_next = NULL;
    return RTN_OK;
}

UINT32 ap_is_in_cop(AP_MGR_T *p_node, COP_MGR_T *p_cop)
{
    while (p_node)
    {
        if (0 == strcmp(p_cop->cop_name, p_node->cop_name))
        {
            return RTN_OK;
        }
        p_cop = p_cop->p_next;
    }
    return RTN_ERR;
}

UINT32 cop_is_exist(COP_MGR_T **p_head, CHAR *p_cop_name)
{
    COP_MGR_T *p_new = NULL;

    p_new = *p_head;
    while (p_new)
    {
        if (0 == strcmp(p_new->cop_name, p_cop_name))
        {
            *p_head = p_new;
            return RTN_OK;
        }
        p_new = p_new->p_next;
    }

    return RTN_ERR;
}

UINT32 ap_is_exist(AP_MGR_T *p_head, UINT32 ap_no)
{
    while (p_head)
    {
        if (p_head->ap_no == ap_no)
        {
            return RTN_OK;
        }
        p_head = p_head->p_next;
    }

    return RTN_ERR;
}

UINT32 ap_add(AP_MGR_T *p_ap, COP_MGR_T *p_cop)
{
    AP_MGR_T *p_ap_new = NULL;
    UINT32 rtn = 0;

    p_ap_new = (AP_MGR_T *)malloc(sizeof(AP_MGR_T));
    if (NULL == p_ap_new)
    {
        return ERR_CORE_NULL_POINTER;
    }
    memset(p_ap_new, 0, sizeof(AP_MGR_T));

    printf("please input the ap cop_name:");
    scanf("%s", p_ap_new->cop_name);
    rtn = cop_is_exist(&p_cop, p_ap_new->cop_name);
    if (0 != rtn)
    {
    	printf("The cop '%s' is not exist!\n", p_ap_new->cop_name);
        free(p_ap_new);
        p_ap_new = NULL;
        return ERR_CODE_RTN_ERR;
    }

    p_ap_new->p_next = p_ap->p_next;
    p_ap->p_next = p_ap_new;
    printf("please input ap_name:");
    scanf("%s", p_ap_new->ap_name);
    printf("please input ap_age:");
    scanf("%hhu", &p_ap_new->ap_age);
    printf("please input ap_no:");
    scanf("%u", &p_ap_new->ap_no);

    ++p_cop->ap_num;
    p_cop->p_ap->p_next = p_ap_new;

    return RTN_OK;
}

UINT32 cop_add(COP_MGR_T *p_head)
{
    COP_MGR_T *p_cop_node = NULL;
    AP_MGR_T *p_ap_node = NULL;
    UINT32 rtn = 0;

    p_cop_node = (COP_MGR_T *)malloc(sizeof(COP_MGR_T));
    if (NULL == p_cop_node)
    {
        return ERR_CORE_NULL_POINTER;
    }
    memset(p_cop_node, 0, sizeof(COP_MGR_T));

    printf("please input cop name:");
    scanf("%s", p_cop_node->cop_name);
    printf("p_new->cop_name:          %s\n", p_cop_node->cop_name);
    printf("p_head->cop_name:         %s\n", p_head->cop_name);
    rtn = cop_is_exist(&(p_head), p_cop_node->cop_name);
    if (RTN_OK == rtn)
    {
        printf("The cop '%s' is exist!\n", p_cop_node->cop_name);
        return RTN_OK;
    }

    p_ap_node = (AP_MGR_T *)malloc(sizeof(AP_MGR_T));
    if (NULL == p_ap_node)
    {
        return ERR_CORE_NULL_POINTER;
    }
    memset(p_ap_node, 0, sizeof(AP_MGR_T));

    printf("please input cop apo_name:");
    scanf("%s", p_cop_node->apo_name);
    p_cop_node->p_next = p_head->p_next;
    p_head->p_next = p_cop_node;
    p_cop_node->p_ap = p_ap_node;
    p_ap_node->p_next = NULL;

    return RTN_OK;
}

UINT32 cop_apo_update(COP_MGR_T *p_head)
{
    CHAR cop_name[COP_NAME_MAX_SIZE] = {0};
    UINT32 rtn = 0;

    printf("please input update cop name:");
    scanf("%s", cop_name);
    rtn = cop_is_exist(&p_head, cop_name);
    if (rtn)
    {
        printf("The cop '%s' is not exist!\n", cop_name);
        return RTN_ERR;
    }

    printf("please input cop '%s' new apo_name:", p_head->cop_name);
    scanf("%s", p_head->apo_name);
    return RTN_OK;
}

void ap_info_show(AP_MGR_T *p_node)
{
    while (p_node)
    {
        printf("ap_name:   %s\n", p_node->ap_name);
        printf("ap_age:    %hhu\n", p_node->ap_age);
        printf("ap_no:     %u\n", p_node->ap_no);
        p_node = p_node->p_next;
    }
}

void cop_info_show(COP_MGR_T *p_node)
{
    while (p_node)
    {
        printf("cop name:       %s\n", p_node->cop_name);
        printf("cop apo name:   %s\n", p_node->apo_name);
        printf("cop ap num:     %hu\n", p_node->ap_num);
        p_node = p_node->p_next;
    }
}

VOID cop_ap_info_show(COP_MGR_T *p_head)
{
    AP_MGR_T *p_ap_pre = NULL;
    AP_MGR_T *p_ap_node = NULL;
    CHAR cop_name[] = {0};
    UINT32 rtn = 0;

    printf("please input cop name:");
    scanf("%s", cop_name);

    rtn = cop_is_exist(&p_head, cop_name);
    if (RTN_OK != rtn)
    {
        printf("cop '%s' is not exist!\n", cop_name);
        return RTN_OK;
    }

    p_ap_node = p_head->p_ap->p_next;
    printf("%s: p_ap_node:0x%p\n", __FUNCTION__, p_ap_node);
    while (p_ap_node)
    {
        printf("ap name:      %s\n", p_ap_node->ap_name);
        printf("ap age:       %u\n", p_ap_node->ap_age);
        printf("ap no:        %u\n", p_ap_node->ap_no);
        printf("ap apo name:  %s\n", p_head->apo_name);
        p_ap_pre = p_ap_node;
        printf("%s: p_ap_node->p_next:0x%p\n", __FUNCTION__, p_ap_node->p_next);
        p_ap_node = p_ap_node->p_next;
    }
}

UINT32 main(VOID)
{
    AP_MGR_T *p_ap = NULL;
    COP_MGR_T *p_cop = NULL;
    UINT32 rtn = 0;
    UINT32 i = 0;

    rtn = mgr_init(&p_ap, &p_cop);
    if (RTN_OK != rtn)
    {
        printf("init fail!\n");
        return RTN_ERR;
    }

    for (i = 0; i < 3; i++)
    {
        rtn = cop_add(p_cop);
        if (RTN_OK != rtn)
        {
            return RTN_ERR;
        }

        rtn = ap_add(p_ap, p_cop);
        if (RTN_OK != rtn)
        {
            return RTN_ERR;
        }
    }

    cop_apo_update(p_cop);
    ap_info_show(p_ap->p_next);
    cop_info_show(p_cop->p_next);
    cop_ap_info_show(p_cop);

    return RTN_OK;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值