io数据结构 利用哈希函数做一个快递管理系统

        系统学习过io以及数据集结构之后,尝试去写一个快递管理系统,将学习的知识串联起来,加深对所学知识的理解,更好的去消化吸收。以下是我个人所写的快递管理系统,用到了哈希函数、文件读写等,还加了密码锁,现将代码分享给大家。

 .h文件

#ifndef _MAIN_H
#define _HASH_H

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#define SIZE 100
#define PRICE 3

enum value
{
    ERROR = -6,
    HASHNULL,
    POSSERROR,
    NOEXPRESS,
    MALLOCERROR,
    EXIST,
    OK,
};
//定义数据元素的类型
typedef struct staff
{
    //姓名
    char name[50];
    //快递单号
    int id;
    //重量
    float weight;
    //日期
    int data;
    //配送地址
    char address[50];
    //配送状态
    char status[50];
}EXP;
//定义链表结点的数据类型
typedef struct linknode
{
    EXP data;
    struct linknode *pnext;
}Link;
//定义哈希表的数据类型

typedef struct hash
{
    Link *parr[SIZE];
    int count; //快递单号的数量
    int lastid;//最后一个快递单号
}Hash;

//创建一个hash表
//参数:void
//返回值:成功返回hash表的首地址,失败返回null
Hash *createhash(void);
//创建一个hash函数
//参数:要查找的数据
//返回值:返回要查找数据的下标
int hashfun(int key);
//插入
//参数1:hash表的首地址
//参数2:要插入的数据
//返回值:成功返回OK,失败返回null
int inserthash(Hash *phash,EXP item);
//显示hash表中的数据
//参数:hash表的首地址
//返回值:成功返回OK,失败返回失败原因
int showhash(Hash *phash);
//删除快递信息
//参数1:hash表的首地址
//参数2:要删除的单号
//返回值:成功返回OK,失败返回null
int deletehash(Hash *phash,int id);
//查找
//参数1:hash表的首地址
//参数2:要查找的快递单号
//返回值:成功返回OK,失败返回失败原因
int searchhash(Hash *phash,int id);
//保存
//参数1:hash表的首地址
//参数2:要存储的快递单号
//返回值:成功返回OK,失败返回
int savehash(Hash *phash,int id,EXP *pdata);
//修改快递信息
//参数1:hash表的首地址
//参数2:要修改快递的信息
//返回值:成功返回OK,失败返回原因
int alterhash(Hash *phash,EXP newdata);
//计算快递运送
//价格
//参数1:hash表的首地址
//参数2:要计算价格的快递单号
//返回值:成功返回OK,失败返回原因
float pricehash(Hash *phash,int id);
//销毁
//参数:hash表首地址的地址
//返回值:成功返回OK,失败返回失败原因
int destoryhash(Hash **phead);
#endif
子函数

#include "../include/staff.h"
Hash *createhash(void)
{
    Hash *phash = NULL;
    phash = (Hash *)malloc(sizeof(Hash));
    if(NULL ==phash)
    {
        perror("malloc eroor!\n");
        return NULL;
    }
    memset(phash,0,sizeof(Hash));

    return phash;
}

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

int inserthash(Hash *phash,EXP item)
{
    if(NULL == phash)
    {
        return HASHNULL;
    }
    Link *pnew = (Link *)malloc(sizeof(Link));
    if(NULL ==pnew)
    {
        perror("malloc error\n");
        return MALLOCERROR;
    }
    mem

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值