项目管理系统的设计与实现
(哈希表实现存储)
一、项目背景
在一个大的项目中,会被分解成许多小项目,目前要对整体项目进行统计管理没有较好的工具,所以本项目的事实为了能够高效,简洁的管理大项目以及所分解的小项目。
二、项目概述
过输入被分解的最小项目,统一管理大项目的进度,简洁明了的显示项目信息,并实现项目的创建,查看,修改,删除,以及项目的存储与读取。
三、项目功能
1、创建项目:创建时需要输入项目名称、管理组号、组长姓名、项目日期、状态等2、查询项目:查询项目号对应的项目信息。
3、修改项目:修改项目号对应的项目中某一信息。
4、删除项目:删除项目信息。
5、保存信息:将所有子项目信息保存到本地存储(自动)
6、导入信息:将本地数据文件导入到程序中(自动)
四、项目流程图
![代码如下(示例):](https://img-blog.csdnimg.cn/direct/b1301d87b2cf4eba9f792009bd3d1caf.png)
五、项目相关函数调用关系
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f9f1526f7eb14a6b8b07e2ae5b123e7b.png)
六、函数概述
1、创建结点函数:
程序功能 | 创建一个结构体结点 |
---|
性能要求 | 无 |
限制条件 | 程序内部使用 |
输入 | 无 |
输出 | 创建成功返回结点地址,创建失败返回NULL |
算法逻辑 | 1.malloc分配结点空间 |
| 2.判断是否创建成功,成功返回结点地址,失败返回NULL |
相关对象及接口 | 调用LNode_Creat()函数。 |
备注 | 无 |
2、选项显示函数:
程序功能 | 在屏幕打印选项信息 |
---|
性能要求 | 无 |
限制条件 | 程序内部使用 |
输入 | 无 |
输出 | 显示各个选项以及选项功能。 |
算法逻辑 | printf输出打印信息 |
相关对象及接口 | 调用Menu()函数。 |
备注 | 无 |
3、插入结点函数:
程序功能 | 插入一个结构体结点 |
---|
性能要求 | 无 |
限制条件 | 操作人员使用 |
输入 | 1.表的地址 |
| 2.插入的数据信息 |
输出 | 插入成功返回OK,插入失败返回NULL |
算法逻辑 | 1.malloc分配结点空间,并判断是否创建成功,失败直接返回NULL |
| 2.将数据信息赋值给分配空间 |
| 3.遍历至表尾,插入结点,返回OK |
相关对象及接口 | 调用LNode_Insert(Link pList, type_data Data)函数。 |
备注 | 无 |
4、查询结点函数:
程序功能 | 查询结点信息 |
---|
性能要求 | 无 |
限制条件 | 操作人员使用 |
输入 | 1.表的地址 |
| 2.项目的编号信息 |
输出 | 查询结点存在,输出此结点所有信息并返回OK,结点不存在返回NULL |
算法逻辑 | 1.判断项目编号是否为-1 |
| 2.遍历整个链表进行查询,结点存在,输出此结点;编号信息为-1,输出所有结点信息,不存在,返回NULL。 |
相关对象及接口 | 调用LNode_Index(Link pList, int ID)函数。 |
备注 | 无 |
5、删除结点函数:
程序功能 | 删除一个结构体结点 |
---|
性能要求 | 无 |
限制条件 | 操作人员使用 |
输入 | 1.表的地址 |
| 2.删除项目编号 |
| 3.删除保存的数据信息 |
输出 | 删除成功返回OK,删除失败返回NULL |
算法逻辑 | 1.遍历查找结点 |
| 2.找到结点,将结点数据存入old_Data中并返回OK,找不到结点返回NULL |
| 3.链表保护,释放结点 |
相关对象及接口 | 调用LNode_Dele(Link pList, int ID, type_data *Data)函数。 |
备注 | 无 |
6、保存数据函数:
程序功能 | 将链表数据保存到数据文件中 |
---|
性能要求 | 无 |
限制条件 | 操作人员使用 |
输入 | 表的地址 |
输出 | 成功保存返回OK,失败返回NULL |
算法逻辑 | 1.判断文件是否存在,存在打开,不存在新建文件并打开 |
| 2.遍历链表,将数据域保存到文件中 |
| 3.判断是否保存成功,成功返回OK,失败返回NULL |
相关对象及接口 | 调用Link_Save(Link pList)函数。 |
备注 | 无 |
7、导入数据函数:
程序功能 | 将数据文件导入到链表中 |
---|
性能要求 | 无 |
限制条件 | 操作人员使用 |
输入 | 表的地址 |
输出 | 成功保存返回OK,失败返回NULL |
算法逻辑 | 1.判断文件是否存在,存在打开并读取,不存在返回NULL |
| 2.读取一个typede_data大小数据,调用插入函数插入到表尾 |
| 3.判断是否导入成功,成功返回OK,失败返回NULL |
相关对象及接口 | 调用Link_Inport(Link pList)函数。 |
备注 | 无 |
8、结点数据输入函数:
程序功能 | 输入数据保存到结构体结点中 |
---|
性能要求 | 无 |
限制条件 | 内部函数使用 |
输入 | 结构体地址 |
输出 | 成功输入返回OK,失败返回NULL |
算法逻辑 | 1.判断结构体地址是否存在 |
| 2.将结构体数据挨个输入其中 |
| 3.判断是否输入成功,成功返回OK,失败返回ERROR |
相关对象及接口 | 调用LNode_Data_Scanf(type_data *Data)函数。 |
备注 | 无 |
9、数据修改函数:
程序功能 | 修改结构体中某一数据 |
---|
性能要求 | 无 |
限制条件 | 内部函数使用 |
输入 | 1.结构体地址 |
| 2.修改位置 |
输出 | 成功输入返回OK,失败返回NULL |
算法逻辑 | 1.判断结构体地址是否存在 |
| 2.判断修改位置是否正确,正确则输入数据 |
| 3.判断输入是否合法,合法将结构体位置修改为新值返回OK,非法返回ERROR |
相关对象及接口 | 调用LNode_Data_Modify(type_data *Data, char *name)函数。 |
备注 | 无 |
10、哈希函数:
程序功能 | 计算哈希表存储位置 |
---|
性能要求 | 无 |
限制条件 | 内部函数使用 |
输入 | 结点ID |
输出 | 返回计算后位置数值 |
算法逻辑 | 对参数取余 |
相关对象及接口 | 调用Hash_Func(int key)函数。 |
备注 | 可以不用单独写此函数 |
11、哈希插入:
程序功能 | 在哈希表中插入数据 |
---|
性能要求 | 无 |
限制条件 | 内部函数使用 |
输入 | 1.哈希表地址 |
| 2.数据名称 |
| 3.插入数据ID |
输出 | 成功插入返回INSERT_DATA_SUCCESS,失败返回INSERT_DATA_FAILE |
算法逻辑 | 1.调用哈希函数计算插入位置 |
| 2.调用链表插入函数实现结点插入 |
相关对象及接口 | 调用Hash_Insert(List Arr[], type_data Data, int ID)函数。 |
备注 | 无 |
12、哈希查询:
程序功能 | 查询哈希表中指定ID数据 |
---|
性能要求 | 无 |
限制条件 | 内部函数使用 |
输入 | 1 哈希表地址 |
| 2 查询数据ID |
| 3 数据存储地址 |
输出 | 查询成功返回ID_FIND_SUCCESS,失败返回ID_FIND_NO |
算法逻辑 | 1调用哈希函数计算查询位置 |
| 2调用链表查询函数实现结点查询 |
相关对象及接口 | 调用Hash_Index(List Arr[],int ID,type_data *Data)函数。 |
备注 | 无 |
13、哈希查询s:
程序功能 | 查询哈希表中所有数据 |
---|
性能要求 | 无 |
限制条件 | 内部函数使用 |
输入 | 哈希表地址 |
输出 | 无 |
算法逻辑 | 1调用哈希函数计算查询位置 |
| 2循环调用链表查询函数实现结点查询 |
相关对象及接口 | 调用Hash_Indexs(List Arr[])函数。 |
备注 | 无 |
14、哈希表修改函数:
程序功能 | 修改哈希表中指定ID数据中指定数据 |
---|
性能要求 | 无 |
限制条件 | 内部函数使用 |
输入 | 1 哈希表地址 |
| 2 查询数据ID |
输出 | 无 |
算法逻辑 | 1调用哈希函数计算查询位置 |
| 2 调用链表修改函数实现结点修改 |
相关对象及接口 | 调用Hash_Modify(List Arr[],int ID)函数。 |
备注 | 无 |
七、完整程序代码
略
这篇文章主要讲述逻辑思维,所以代码可以自己尝试一下。
可以自行优化。
总结
数据结构实验包含:链表,哈希表,查找算法等的综合,是将理论转为实际的最有效方法。
切记:
1、定义变量一定要初始化!!!!
2、写完一个函数一定要验证一下是否有Bug!!!
3、更新一定要保存旧版!