c語言數(shù)據(jù)結(jié)構(gòu)項(xiàng)目——基于Hash表的人員管理系統(tǒng)-創(chuàng)新互聯(lián)

目錄

網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制網(wǎng)站建設(shè)服務(wù),專注于成都企業(yè)網(wǎng)站建設(shè),高端網(wǎng)頁制作,對成都邊坡防護(hù)網(wǎng)等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計(jì),網(wǎng)站優(yōu)化推廣哪家好,專業(yè)seo優(yōu)化優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。

功能目錄?

主函數(shù)

.h文件

功能實(shí)現(xiàn)

1.創(chuàng)建hash表

2.定義hash函數(shù)

3.添加功能

4.根據(jù)ID查找

5.顯示所有人員

6.根據(jù)ID刪除人員

7.根據(jù)ID修改人員信息

8.銷毀hash表

9.從txt文件加載人員信息

10.將人員信息保存到txt文件中

功能演示

1.添加

2.顯示

3.根據(jù)ID查找

4.根據(jù)ID刪除

5.根據(jù)ID修改人員信息

功能目錄?

主函數(shù)
#include "../include/info.h"

int main()
{
    int op = 0;
    data_type item;
    Hash *pHash = createHash();
	load(pHash,"info.txt");
    while (1)
    {
        menu();
		int res=0;
        scanf("%d", &op);
        if (op == 0)
            break;
        switch (op)
        {
        case 1:
            printf("請輸入人員ID:\n");
            scanf("%d", &item.id);
            printf("請輸入人員姓名:\n");
            scanf("%s", item.name);
            printf("請輸入人員年齡:\n");
            scanf("%d", &item.age);
            printf("請輸入人員職位:\n");
            scanf("%s", item.status);
            res=add(pHash, item);
			if(res==OK)
			{
				printf("-----------------------------------------\n");
				printf("添加成功!\n");
				printf("-----------------------------------------\n");
			}
            break;
        case 2:
            show(pHash);
            break;
		case 3:
			printf("請輸入要查找人員的ID:\n");
			scanf("%d",&item.id);
		    res=find(pHash,item);
			if(res!=OK)
			{
				printf("-----------------------------------------\n");
				printf("沒有ID為%d的人員!\n",item.id);
				printf("-----------------------------------------\n");
			}
			break;
		case 4:
			printf("請輸入要刪除人員的ID:\n");
			scanf("%d",&item.id);
			del(pHash,item);
			break;
		case 5:
			printf("請輸入要修改人員的ID:\n");
			scanf("%d",&item.id);
			res=change(pHash,item);
			if(res==OK)
			{
				printf("-----------------------------------------\n");
				printf("ID為%d的人員修改信息成功!\n",item.id);
				printf("-----------------------------------------\n");
			}
			break;
		case 6:
			res=Destroy(&pHash);
			if(res==OK)
			{
				printf("-----------------------------------------\n");
				printf("銷毀成功!\n");
				printf("-----------------------------------------\n");
			}
			break;
		case 7:
			res=save(pHash,"info.txt");
			if(res==OK)
			{
				printf("-----------------------------------------\n");
				printf("保存成功!\n");
				printf("-----------------------------------------\n");
			}
			break;
        }
    }
}
.h文件
#ifndef _INFO_H
#define _INFO_H

#include#include#include#include#include#include#include#define SIZE 30


typedef struct info
{
    int id; // key
    char name[SIZE];
    int age;
    char status[SIZE];
} data_type;

typedef struct node
{
    data_type data;
    struct node *next;
} Node;

typedef struct hash
{
    Node *pArr[SIZE];
    int count;
} Hash;
enum opt
{
    OPENERROR = -7,
	ERROR,
    DOWNLOADERROR,
    UPLOOADERROR,
    EXIST,
    NOEXIST,
    MALLOCERROR,
    OK
};
void menu();
Hash *createHash();
int HashFunc(int key);
int show(Hash *pHash);
int add(Hash *pHash, data_type pData);
int find(Hash *pHash, data_type pData);
int del(Hash *pHash, data_type pData);
int change(Hash *pHash,data_type pData);
int Destroy(Hash **pHash);
int namefind(Hash *pHash,data_type pData);
int save(Hash *pHash,char *filename);
int load(Hash *pHash,char *filename);
#endif
功能實(shí)現(xiàn) 1.創(chuàng)建hash表
//創(chuàng)建一個hash表
Hash *createHash()
{
    Hash *pHash = NULL;
    pHash = (Hash *)malloc(sizeof(Hash));
    if (NULL == pHash)
    {
        perror("malloc error");
        return NULL;
    }
    memset(pHash, 0, sizeof(Hash));
    return pHash;
}
2.定義hash函數(shù)
//hash函數(shù)
int HashFunc(int key)
{
		int pos;
		pos=key%13;
		return pos;
}
3.添加功能
//添加
int add(Hash *pHash, data_type pData)
{
    if (pHash == NULL)
    {
		perror("malloc error");
        return NOEXIST;
    }
	int res=0;
	res=find(pHash,pData);
    //當(dāng)前數(shù)據(jù)元素是否已經(jīng)存在
	if ( res==OK )
    {
		printf("-----------------------------------------\n");
  	  	printf("該ID對應(yīng)人員已存在!\n");
		printf("-----------------------------------------\n");
        return EXIST;
    }
    //創(chuàng)建一個新結(jié)點(diǎn)
    Node *pNew = NULL;
    pNew = (Node *)malloc(sizeof(Node));
    if (NULL == pNew)
    {
        perror("malloc error");
        return MALLOCERROR;
    }
    //memset(pNew, 0, sizeof(Node));
    pNew->data = pData;
    int pos = HashFunc(pData.id);
    //保護(hù)好后面的結(jié)點(diǎn)
    pNew->next = pHash->pArr[pos];
    pHash->pArr[pos] = pNew;
    
    return OK;
}
4.根據(jù)ID查找
int find(Hash *pHash, data_type pData)
{
	if (NULL == pHash)
	{
		perror("malloc error");
		return NOEXIST;
	}
	int pos = HashFunc(pData.id);
	Node *pTmp = NULL;
	pTmp = pHash->pArr[pos];
	if (NULL == pTmp)
	{
		return NOEXIST;
	}
	while (pTmp != NULL)
	{
		if (pData.id == pTmp->data.id)
		{
			printf("ID為%d的人員信息如下:\n", pData.id);
			printf("-----------------------------------------\n");
			printf("ID:%d    ", pTmp->data.id);
			printf("姓名:%s    ", pTmp->data.name);
			printf("年齡:%d    ", pTmp->data.age);
			printf("職位:%s\n", pTmp->data.status);
			printf("-----------------------------------------\n");
			return OK;
		}
	}
}
5.顯示所有人員
int show(Hash *pHash)
{
	if (NULL == pHash)
	{
		perror("malloc error");
		return MALLOCERROR;
	}
	//遍歷輸出
	int i = 0;
	Node *pTmp = NULL;
	for (i = 0; i< SIZE; i++)
	{
		//結(jié)構(gòu)體指針指向鏈表首地址
		pTmp = pHash->pArr[i];
		while (pTmp != NULL)
		{
			printf("-----------------------------------------\n");
			printf("ID:%d    ", pTmp->data.id);
			printf("姓名:%s    ", pTmp->data.name);
			printf("年齡:%d    ", pTmp->data.age);
			printf("職位:%s\n", pTmp->data.status);
			printf("-----------------------------------------\n");
			pTmp = pTmp->next;
		}
	}
	return OK;
}
6.根據(jù)ID刪除人員
int del(Hash *pHash, data_type pData)
{
	if (NULL == pHash)
	{
		perror("malloc error");
		return MALLOCERROR;
	}
	int res = 0;
	res = find(pHash, pData);
	if (res != OK)
	{

		printf("-----------------------------------------\n");
		printf("沒有該ID為%d的人員!\n", pData.id);
		printf("-----------------------------------------\n");
		return ERROR;
	}
	if (pData.id< 0)
	{
		return ERROR;
	}
	int pos = HashFunc(pData.id);
	Node *pTmp = NULL;
	pTmp = pHash->pArr[pos];
	Node *pPre = pTmp;
	Node *pDel = pTmp->next;
	if (pData.id = pPre->data.id)
	{
		pDel = pPre;
		pHash->pArr[pos] = pPre->next;
		printf("-----------------------------------------\n");
		printf("刪除成功!\n");
		printf("-----------------------------------------\n");
		free(pDel);
		pHash->count--;
		return OK;
	}
	else
	{
		while (NULL != pDel)
			if (pData.id == pDel->data.id)
			{
				pPre->next = pDel->next;
				printf("-----------------------------------------\n");
				printf("刪除成功!刪除人員信息如下:\n");
				printf("ID:%d    ", pTmp->data.id);
				printf("姓名:%s    ", pTmp->data.name);
				printf("年齡:%d    ", pTmp->data.age);
				printf("職位:%s\n", pTmp->data.status);
				printf("-----------------------------------------\n");
				free(pDel);
				return OK;
			}
			else
			{
				pPre = pDel;
				pDel = pDel->next;
			}
	}
	if (NULL == pDel)
	{
		printf("-----------------------------------------\n");
		printf("此ID對應(yīng)人員信息不存在\n");
		printf("-----------------------------------------\n");
	}
	return OK;
}
7.根據(jù)ID修改人員信息
int change(Hash *pHash, data_type pData)
{
	if (NULL == pHash)
	{
		perror("malloc error");
		return MALLOCERROR;
	}
	if (pData.id< 0)
	{
		return ERROR;
	}
	int res = 0;
	res = find(pHash, pData);
	if (res != OK)
	{
		printf("-----------------------------------------\n");
		printf("沒有該ID為%d的人員!\n", pData.id);
		printf("-----------------------------------------\n");
		return ERROR;
	}
	int pos = HashFunc(pData.id);
	Node *pTmp = NULL;
	pTmp = pHash->pArr[pos];
	while (pTmp->data.id != pData.id)
	{
		pTmp = pTmp->next;
	}
	printf("請輸入ID為%d的人員修改后的名字:\n", pData.id);
	scanf("%s", pTmp->data.name);
	printf("請輸入ID為%d的人員修改后的年齡:\n", pData.id);
	scanf("%d", &pTmp->data.age);
	printf("請輸入ID為%d的人員修改后的職位:\n", pData.id);
	scanf("%s", pTmp->data.status);
	return OK;
}
8.銷毀hash表
int Destroy(Hash **pHash)
{
	if (NULL == pHash)
	{
		return ERROR;
		printf("-----------------------------------------\n");
		printf("銷毀成功!\n");
		printf("-----------------------------------------\n");
	}
	int i;
	Node *pDel = NULL;
	Node *pTmp = NULL;
	for (i = 0; i< SIZE; i++)
	{
		pTmp = (*pHash)->pArr[i];
		while (pTmp != NULL)
		{
			//頭刪法
			pDel = pTmp;
			pTmp = pTmp->next;
			free(pDel);
			pDel = NULL;
		}
	}
	free(*pHash);
	*pHash = NULL;
	return OK;
}
9.從txt文件加載人員信息
int load(Hash *pHash, char *filename)
{
	data_type infodata;
	if (pHash == NULL)
	{
		perror("malloc error");
		return ERROR;
	}
	int fp = open(filename, O_RDONLY);
	if (fp< 0)
	{
		perror("open error");
		return ERROR;
	}
	while (1)
	{
		int res = read(fp, &infodata, sizeof(data_type));
		if (0 == res)
		{
			printf("信息已導(dǎo)入!\n");
			break;
		}
		else if (res< 0)
		{
			printf("導(dǎo)入失敗!\n");
			return ERROR;
		}
		else
		{
			add(pHash, infodata);
			pHash->count++;
		}
	}
	close(fp);
	return OK;
}
10.將人員信息保存到txt文件中
int save(Hash *pHash, char *filename)
{
	int fw = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0777);
	if (fw< 0)
	{
		perror("open error");
		return ERROR;
	}
	int i;
	for (i = 0; i< SIZE; i++)
	{
		Node *pTmp = pHash->pArr[i];
		while (pTmp != NULL)
		{
			// memset(&pTmp->data,0,sizeof(data_type));
			//寫入
			int res = write(fw, &pTmp->data, sizeof(data_type));
			if (res< 0)
			{
				printf("save error");
			}
			else if (0 == res)
			{
				printf("save error");
				break;
			}
			pTmp = pTmp->next;
		}
	}
	close(fw);
	return OK;
}
功能演示 1.添加

2.顯示

3.根據(jù)ID查找

4.根據(jù)ID刪除

5.根據(jù)ID修改人員信息

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

新聞名稱:c語言數(shù)據(jù)結(jié)構(gòu)項(xiàng)目——基于Hash表的人員管理系統(tǒng)-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://muchs.cn/article30/eiipo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、建站公司網(wǎng)站排名、ChatGPT、網(wǎng)站制作、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站