员工信息管理系统项目

一、项目概述

1.项目背景

        在现代企业中,人力资源管理是确保业务顺利运作和实现战略目标的关键。然而,传统的人力资源管理方式往往依赖于纸质记录或不集成的电子表格,这导致信息难以检索、更新和共享。在当今快速发展的商业环境中,企业需要一个高效且可靠的系统来管理员工信息、薪资、考勤和绩效,以提高管理效率并支持决策。

2.项目概述

       本项目旨在设计和实现一个人力资源管理系统(HRMS),以帮助企业更有效地管理其人力资源。该系统将采用哈希链表来加速员工信息的查询,并提供功能丰富的界面,用于处理员工信息、薪资管理、考勤记录和绩效管理。系统将具备以下特征:
        1.使用哈希链表实现查询:系统将采用哈希链表的数据结构来存储和查询员工信息,以确保快速、高效的数据检索
        2.数据持久化:系统将支持数据的本地保存与读取,以确保员工数据的持久性和可恢复性。
        3.数据操作:系统将提供一系列操作功能,包括查询、添加、删除和修改员工信息,满足不同的管理需求。
        4.员工信息管理:包括员工的个人信息、薪资、职位等。
本项目的目标是通过提供全面且易用的功能,帮助企业更有效地管理其人力资源,提升工作效率,增强员工满意度,并为企业的持续发展提供坚实的基础。

二、项目流程图

三、函数关系调用图

四、代码实现

head.h

/*1.xxxx管理系统的设计与实现
要求:1.要使用哈希链表实现查询;
2.能够将数据保存到本地;
3.能够从本地读取数据;
4.能够对系统进行数据的操作(查询、添加、删除、修改)。
人力资源管理系统(HRMS):处理员工信息、薪资管理、考勤管理、绩效管理等。*/

#ifndef _HEAD_H
#define _HEAD_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


#define SIZE 50

//定义职工信息结构体
typedef struct staff
{
    char name[20];  //姓名
    int age;        //年龄
    int id;         //职工号
    char sex[5];    //性别
    char job[20];    //职位
    int salary;     //薪资
    char status[20];  //状态
    struct staff *next;  //指向下一个职工信息的指针
}staff;

//定义链表结构体
typedef struct linknood
{
    staff data;  //数据域
    struct linknood *next;  //指向下一个职工信息的指针
}Link;


//定义哈希表结构体
typedef struct hash_list
{
    Link *arr[SIZE];  //哈希表
    int count;  //统计员工数量
    int lastID; //记录最后一个职工的ID
}hash;

enum res
{
    HASH_NULL,
    MALLOC_ERROR,
    ERROR,
    POS_ERROR,
    OK
};

//函数声明
void menu();    //菜单
hash *HashCreat(void);   //创建哈希表
int Hashfunc(int key);   //哈希函数
int insertStaff(hash *pHash, staff item);  //添加职工信息
int showStaff(hash *pHash);   //显示职工信息
int deleteStaff(hash *pHash, int id);   //删除职工信息
int alterStaff(hash *pHash, staff New);  //修改职工信息
int searchStaff(hash *pHash, int id, staff *pData); //查询职工信息
int importStaff(hash *pHash);   //从文件中导入职工信息
int updateStaff(hash *pHash);   //更新职工信息到文件
#endif

创建哈希表、构造哈希函数

creat.c

//创建哈希表
#include "../include/head.h"

hash  *HashCreat(void)
{
    hash *pHash = (hash *)malloc(sizeof(hash));
    if(pHash == NULL)   return NULL;
    memset(pHash, 0, sizeof(hash));
    return pHash;
}

int Hashfunc(int key)
{
    return key - 1;
}

添加员工信息

insert.c

//添加员工信息
#include "../include/head.h"

int insertStaff(hash *pHash, staff item)
{
    //入参判断
    if(pHash == NULL)   return HASH_NULL;
    int index = Hashfunc(item.id);
    Link *pNew = (Link *)malloc(sizeof(Link));
    if(pNew == NULL)   return MALLOC_ERROR;
    memset(pNew, 0, sizeof(Link));
    pNew->data = item;  //赋值
    pNew->next = pHash->arr[index];    //保护后面元素
    pHash->arr[index] = pNew;    //插入新结点
    pHash->count++;
    return OK;
}

删除员工信息

delete.c

#include "../include/head.h"
//删除员工信息
int deleteStaff(hash *pHash, int id)
{
    //入参判断
    if(pHash == NULL)  return HASH_NULL;
    if(id < 0 || id >pHash->lastID)  return POS_ERROR;
    int pos = Hashfunc(id); //获得存储数据下标
    Link *pHead = pHash->arr[pos];
    if(pHead == NULL)  return POS_ERROR;
    while(pHead != NULL)
    {
        if(id == pHead->data.id)
        {
            pHash->count--;
            strcpy(pHead->data.status,"离职");
            break;
        }
        pHead = pHead->next;
    }  
    return OK;
}

显示员工信息

show.c

#include "../include/head.h"
//显示员工信息
int showStaff(hash *pHash)
{
    if(pHash == NULL)  return HASH_NULL;
    Link *pTmp = NULL;
    for(int i = 0; i < pHash->lastID; i++)
    {
        pTmp = pHash->arr[i];
        while(pTmp != NULL)
        {
            printf("************************************\n");
            printf("姓名:%s\n",pTmp->data.name);
            printf("工号:%d\n",pTmp->data.id);
            printf("年龄:%d\n",pTmp->data.age);
            printf("性别:%s\n",pTmp->data.sex);
            printf("职位:%s\n",pTmp->data.job);
            printf("薪资:%d\n",pTmp->data.salary);
            printf("状态:%s\n",pTmp->data.status);
            printf("************************************\n");
            pTmp = pTmp->next;
        }
    }
    return OK;
}

修改员工信息

alter.c

#include "../include/head.h"
//修改员工信息

int alterStaff(hash *pHash, staff New)
{
    //入参判断
    if(pHash == NULL)  return HASH_NULL;
    int pos = Hashfunc(New.id);
    Link *pHead = pHash->arr[pos];
    if(pHead == NULL)  return POS_ERROR;
    while(pHead != NULL)
    {
        if(New.id == pHead->data.id)
        {
            pHead->data = New;
        }
        pHead = pHead->next;
    }
    return OK;
}

查找员工信息

search.c

#include "../include/head.h"
//查找员工信息
int searchStaff(hash *pHash, int id, staff *pData)
{
    //入参判断
    if(pHash == NULL)  return HASH_NULL;
    if(id < 0 || id > pHash->lastID)  return POS_ERROR;
    int pos = Hashfunc(id);
    Link *pHead = pHash->arr[pos];
    while(pHead != NULL)
    {
        if(id == pHead->data.id)
        {
            if(pData == NULL)
            {
                printf("************************************\n");
                printf("姓名:%s\n",pHead->data.name);
                printf("工号:%d\n",pHead->data.id);
                printf("年龄:%d\n",pHead->data.age);
                printf("性别:%s\n",pHead->data.sex);
                printf("职位:%s\n",pHead->data.job);
                printf("薪资:%d\n",pHead->data.salary);
                printf("状态:%s\n",pHead->data.status);
            }
            else
            {
                *pData = pHead->data;
            }
        }
        pHead = pHead->next;
    }
    return OK;
}

导入员工信息

import.c

#include "../include/head.h"
int importStaff(hash *pHash)
{
    staff message;
    int fr = open("data.txt", O_RDONLY);
    if(fr < 0)
    {
        perror("open\n");
    }
    else
    {
        printf("打开成功!\n");
        while(read(fr, &message, sizeof(staff)) > 0)
        {
            insertStaff(pHash, message);
            pHash->lastID++;
        }
        printf("导入成功!\n");
        close(fr);
    }
    return OK;
}

更新员工信息

update.c

#include"../include/head.h"
int updateStaff(hash *pHash)
{
    int fw  = open("data.txt", O_RDWR | O_CREAT | O_TRUNC, 0666);
    if(fw < 0)
    {
        printf("打开文件失败!\n");
    }
    else
    {
        //更新信息
        for(int i = 0; i < pHash->lastID; i++)
        {
            Link *pTmp = pHash->arr[i];
            while(pTmp != NULL)
            {
                write(fw, &pTmp->data, sizeof(staff));
                pTmp = pTmp->next;
            }
        }
        printf("更新成功!\n");
    }
    close(fw);
    return OK;
}

菜单函数

menu.c

//菜单函数
#include"../include/head.h"
void menu()
{
        printf("请输入选项:\n");
        printf("*************员工管理系统*****************\n");
        printf("1---------------添加员工信息-------------------\n");
        printf("2---------------显示员工信息-------------------\n");
        printf("3---------------删除员工信息-------------------\n");
        printf("4---------------修改员工信息-------------------\n");
        printf("5---------------查找员工信息-------------------\n");
        printf("-1------------------退出----------------------\n");
        printf("*************www.hqyj.com****************\n");
}

主函数

main.c

#include"../include/head.h"
int main()
{
    int op; //操作
    staff item; //员工信息
    staff message;//保存文件中读到的员工信息
    staff staffdata;//保存查看到的员工信息
    int id = 0;
    hash *pHash = HashCreat();   //创建哈希表
    //导入文件中的信息到哈希表中
    importStaff(pHash);
    while(1)
    {
        menu(); //打印菜单
        printf("请输入操作:");
        scanf("%d", &op);
        if(op == -1)
        {
            break;
        }
        switch (op)
        {
            case 1:
                printf("请输入员工信息:\n");
                printf("姓名:");
                scanf("%s", item.name);
                item.id = pHash->lastID + 1;
                pHash->lastID++;
                printf("性别:");
                scanf("%s", item.sex);
                printf("年龄:");
                scanf("%d", &item.age);
                printf("职位:");
                scanf("%s", item.job);
                printf("薪资:");
                scanf("%d", &item.salary);
                printf("状态:");
                scanf("%s", item.status);
                insertStaff(pHash, item);
                printf("添加成功!\n");
                break;
            case 2:
                showStaff(pHash);
                break;
            case 3:
                printf("请输入要删除的员工ID:");
                scanf("%d", &id);
                deleteStaff(pHash, id);
                printf("删除成功!\n");
                break;
            case 4:
                printf("请输入要修改的员工ID:");
                scanf("%d", &id);
                searchStaff(pHash, id, &staffdata);
                //处理哪些结构体成员
                int opt = 0;  //修改哪里
                printf("请输入要调整的岗位:");
                scanf("%s", staffdata.job);
                printf("请输入要调整的薪资:");
                scanf("%d", &staffdata.salary);
                alterStaff(pHash, staffdata);
                break;
            case 5:
                printf("请输入要查找的员工ID:");
                scanf("%d", &id);
                searchStaff(pHash, id, NULL);
                break;
        }
    }
    updateStaff(pHash);
    return 0;

}

五、效果展示

互相分享 与君共勉~~~

大家有什么资源也可以互相分享 ,有什么问题也可以互相讨论~~~

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值