系统学习过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