链表存储员工信息

xiaoxiao2021-02-28  60

1、场景: HR需要做⼀个员工管理,每当新员工入职,他需要新建该员工的资料,将其添加到员工管理数据库中,随后老板向HR了解该员工详细信息时, HR要能从系统中调出资料供老板查阅。此外,如果有员工离职, HR为其办理离职⼿续后要将他的资料从系统中删除。 2、员工资料包括:工号(不超过16个字符)、姓名、性别、年龄、岗位名称。 3、实现上述场景。并支持按照工号或姓名查找员工信息。 4、本次作业主要考察队列的使用,无需实现外部动态添加、删除、查找员工。各位同学可在代码中使用全局变量定义一组员工数据,然后实现添加、查找和删除。请使用printf将每一步结果打印出来。 5、使用C语言编程,并在linux下编译和运行。请使用gdb调试你的程序。

6、给定以下结构定义:

typedefstruct __node__ NODE;

struct__node__

{

    NODE *next;

    NODE *prev;

}

Typedefstruct

{

    NODE head;

} DLIST; 代码如下:

#include <stdio.h> #include <string.h> #include <stdlib.h>  #define  POSITION_LEN       (int)64   #define  USER_NAME_LEN      (int)32 #define  WORK_NUMBER_LEN    (int)32 #define  SEX_LEN            (int)32 typedef struct __node__ NODE; struct __node__ { NODE *next; NODE *prev; }; typedef struct { NODE head; } DLIST; /*定义员工信息数据结构*/ typedef struct member_info { NODE *addr; char WorkNumber[WORK_NUMBER_LEN]; char Name[USER_NAME_LEN]; char Position[POSITION_LEN]; char Sex[SEX_LEN]; int  Age; }T_member_info; /*待录入员工信息*/ T_member_info g_CompanyMember1 = {NULL,"z110","Zhang","SoftWare_Engineer","MAN",25 }; T_member_info g_CompanyMember2 = {NULL,"z112","Zhao","SoftWare_Engineer","WOMAN",28 }; T_member_info g_CompanyMember3 = {NULL,"s115","Song","SoftWare_Engineer","Man",22 }; T_member_info g_CompanyMember4 = {NULL,"w113","Wang","SoftWare_Engineer","WOMAN",21 }; T_member_info g_CompanyMember5 = {NULL,"l111","Liu","SoftWare_Engineer","WOMAN",25 }; T_member_info g_CompanyMember6 = {NULL,"l117","Li","SoftWare_Engineer","Man",24 }; T_member_info g_CompanyMember7 = {NULL,"g116","Guo","SoftWare_Engineer","WOMAN",26 }; T_member_info g_CompanyMember8 = {NULL,"y114","Yang","SoftWare_Engineer","Man",27 }; DLIST CompanyMemList; void MemInfoPrintf(NODE *listPoint)   /*员工信息打印*/ { T_member_info *memInfo; memInfo = (T_member_info*)(listPoint); printf("%s ", memInfo->WorkNumber); printf("%s ", memInfo->Name); printf("%s ", memInfo->Position); printf("%s ", memInfo->Sex); printf("%d\n", memInfo->Age); } void MemListInit()  /*员工信息表初始化*/ { CompanyMemList.head.next = NULL;    CompanyMemList.head.prev = NULL; } T_member_info *nodeCreat(T_member_info *memAddr)  /*创建链表节点*/ { T_member_info *p; p = (T_member_info *)malloc(sizeof(T_member_info)); //p->addr = memAddr->addr; p->Age = memAddr->Age; strncpy(p->Name,memAddr->Name,(strlen(memAddr->Name)+1)); strncpy(p->WorkNumber,memAddr->WorkNumber,(strlen(memAddr->WorkNumber) + 1)); strncpy(p->Position, memAddr->Position, (strlen(memAddr->Position) + 1)); strncpy(p->Sex, memAddr->Sex, (strlen(memAddr->Sex) + 1)); return p; } void MemInfoAdd(T_member_info *memAddr)  /*添加员工信息*/ { NODE *p=NULL; p = CompanyMemList.head.next; /*链表为空则在表头添加成员*/ if (NULL==p)   { CompanyMemList.head.next =(NODE*)memAddr; p = CompanyMemList.head.next; p->next = NULL; } else { while (NULL!=p->next) { p = p->next;  } p->next = (NODE*)memAddr;   p = p->next;   p->next = NULL; } } void memInfoQuery(char*name, char*workNum) /*根据工号或姓名查询员工信息*/ { NODE *p = NULL; p = CompanyMemList.head.next; T_member_info *memInfo; int findFlag; findFlag = 0; while((NULL != p) && (0 == findFlag)) { memInfo = (T_member_info*)(p); if (NULL != name)  /* 姓名不为空则以名字进行查询*/ { if ((0 != strcmp(memInfo->Name, name))) {   p = p->next; } else printf("The Found MemInfo:"); printf("%s ", memInfo->Name); printf("%s ", memInfo->WorkNumber); printf("%s ", memInfo->Position); printf("%d\n", memInfo->Age); findFlag = 1; return; } } else if (NULL != workNum) /*姓名为空,工号不为空,则以工号进行查询*/ { if ((0 != strcmp(memInfo->WorkNumber, workNum))) { p = p->next; } else {                 printf("--------------------------------------------\n"); printf("The Found MemInfo:\n"); printf("%s ", memInfo->Name); printf("%s ", memInfo->WorkNumber); printf("%s ", memInfo->Position); printf("%s ", memInfo->Sex); printf("%d\n", memInfo->Age); findFlag = 1; return; } } } if ((NULL==p) &&(0==findFlag))  /*未查询到员工信息*/    {   printf("Not Find the Member!!\n");    } } void MemInfoDel(char*name, char*workNum) /*根据输入的工号或姓名删除员工信息*/ { NODE *p,*q; p = NULL; q = NULL; int delFlag=0; p = CompanyMemList.head.next; T_member_info *memInfo,*nextMeminfo; while ((NULL != p) && (0 == delFlag)) { q = p->next; memInfo = (T_member_info*)(p); nextMeminfo = (T_member_info*)(q); if (NULL!=q)  /*链表中有一个以上成员*/  {   if (NULL != name)  /* 姓名不为空则以名字进行查询*/     {                   if ((0 == strcmp(memInfo->Name, name)))  /*删除的成员为链表表头成员*/      {     CompanyMemList.head.next=p->next;     free(p);   /*删除的成员*/     p = CompanyMemList.head.next;                      delFlag = 1; /*将删除标志位置一*/                      printf("--------------------------------------------\n");                      printf("Have already delete the:%s\n",memInfo->Name);                      return;      }     else if ((0 != strcmp(memInfo->Name, name)) && (0 == strcmp(nextMeminfo->Name, name)))      {     p->next = q->next;     free(nextMeminfo);     delFlag = 1;                      printf("--------------------------------------------\n");                      printf("Have already delete the:%s\n",nextMeminfo->Name);     return;      } else  { p = p->next;  }        }  else if (NULL != workNum) /*姓名为空,工号不为空,则以工号进行查询*/     {                   if ((0 == strcmp(memInfo->WorkNumber, workNum)))         { CompanyMemList.head.next = p->next; free(p); p = CompanyMemList.head.next;         } else if ((0 != strcmp(memInfo->WorkNumber, workNum)) && (0 == strcmp(nextMeminfo->WorkNumber, workNum)))     { p->next = q->next; free(nextMeminfo); delFlag =1;                printf("--------------------------------------------\n");    printf("Have already delete the:%s\n",nextMeminfo->Name);                  return;     } else { p = p->next; }      }  }  else if ((NULL ==q) && (0 == delFlag))  /*链表中只有一个成员*/  {       if ((0 == strcmp(memInfo->Name, name)))  /*删除的成员为链表表头成员*/      {     CompanyMemList.head.next=p->next;     free(p);   /*删除的成员*/     p = CompanyMemList.head.next;                      delFlag = 1; /*将删除标志位置1*/                      printf("--------------------------------------------\n");                      printf("Have already delete the:%s\n",memInfo->Name);                      return;  }   else         {         printf("Have No This Member!!\n");          return;       }  } } } void main() { MemListInit(); T_member_info *memNode=NULL;       /*添加成员信息*/ memNode = nodeCreat(&g_CompanyMember1); MemInfoAdd(memNode); memNode = nodeCreat(&g_CompanyMember2);   MemInfoAdd(memNode); memNode = nodeCreat(&g_CompanyMember6); MemInfoAdd(memNode); memNode = nodeCreat(&g_CompanyMember7); MemInfoAdd(memNode); NODE *p = NULL; p = CompanyMemList.head.next;       /*打印当前员工信息列表*/ printf("--------------------------------------------\n"); printf("Current Member List:\n"); while (NULL != p)   {   MemInfoPrintf(p); p = p->next; }      memInfoQuery(NULL,"l117");/*用工号查询成员*/     /*删除成员Zhang*/ MemInfoDel("Zhang", NULL);     /*打印删除操作后员工信息列表*/ printf("-------------------------------------------\n"); printf("The Member List after Deleting Operation:\n"); p = CompanyMemList.head.next; while (NULL != p) { MemInfoPrintf(p); p = p->next; }      printf("--------------------------------------------\n"); }

转载请注明原文地址: https://www.6miu.com/read-57906.html

最新回复(0)