嵌入式开发----------数据结构项目[宠物诊所管理系统]

一、需求分析

1.设计目的

据统计自2010年至今养宠物的人员越来越多,宠物诊所每天的顾客流量也越来越大,传统的宠物诊所保存顾客信息的方式为用纸笔保存顾客信息,但面临越来越多的顾客,这种保存顾客信息的方式在保存和查询信息方面越来越繁杂,会给诊所带来不便。

因此为了大幅度方便宠物诊所对顾客信息的保存和查询,本次设计了宠物诊所管理系统。店家可通过该管理系统快速对顾客的信息作出增删改查的操作,并且顾客信息也会同步保存在文件之中。

2.程序所能达到的功能

(1)用户可以通过键盘输入顾客名字为关键字建表。

(2)从键盘输入要插入的的记录,以链地址法来解决冲突。

(3)用户通过输入顾客名字查找,可以给出该顾客的所有信息。

(4)展示表中所有的顾客信息。

(5)通过顾客姓名删除管理系统中的顾客信息

(6)通过顾客姓名修改管理系统中的顾客信息

(7)将我们管理系统中所有的顾客详细信心保存到文件中

(8)将文件中保存的顾客信息加载到Hash表

(9)销毁保存顾客信息的文件


二、概要设计

本系统旨在通过建立哈希表实现顾客信息录入、查询顾客、展示所有顾客信息等功能,帮助用户方便处理顾客信息
简单思路:

图 1 概要总体设计

图 2 概要功能设计


三、详细设计

3.1建立哈希表(实例)的存储结构

将每个顾客的信息作为一条记录,包括顾客名,电话号码,宠物类型,日期,然后哈希表由记录数组、表中现存量、表容量组成,具体数据类型见下:

图 3 hash表存储结构

3.2定义枚举返回值类型

图 4 枚举类型

FOPEN_ERROR:代表文件打开失败。

UPDATEFALSE:代表数据更新失败。

DELETEFALSE:代表数据删除失败。

HASHNOEXIST:代表未找到hash表。

DATAEXIST:代表数据已经存在。

MALERR:代表通过malloc创建空间失败。

OK:代表功能正常执行。

3.3菜单函数

功能:通过菜单函数,显示可进行的操作,提示用户输入对应的操作数进入对应的功能其中,所有操作数所对应的功能如下:

1——插入顾客数据功能。

2——显示所有顾客信息功能。

3——删除指定顾客信息功能。

4——更新指定顾客信息功能。

5——查找指定顾客信息功能。

6——将所有顾客信息保存在文件中。

7——读取信息文件,加载文件中所有的顾客信息。

-1——退出系统。

参数:无

返回值:无

代码实现:

图 5 菜单函数

3.4 hash函数

功能:输入字符串,获得其在hash表的所在位置。

参数:1.代表顾客姓名的字符串

返回值:该字符串在hash表的所在位置。

代码实现:

图 6 hash函数

3.5 创建hash表函数

功能:创建一个hash表并进行初始化。

参数:1.hash的大小

返回值:返回hash表的首地址

代码实现:

图 7 创建hash表函数

3.6查询hash表函数

功能:用户输入要查找的姓名,通过hash存储获得姓名的hash值,然后进入hash表进行查询,若查询成功,则显示该顾客的所有信息。

参数:1.hash表的首地址  2.您要查找的姓名

返回值:返回结点的首地址  失败返回NULL

代码实现:

 图 8 查询数据函数

3.7插入函数

功能:向系统中插入顾客信息,用户输入顾客的姓名,电话,宠物类型,日期,通过hash存储方式将该信息作为一个节点存储在hash表中,如果系统中已经有该顾客的信息,则显示该顾客已存在

参数:1.hash表的首地址 参数2:要插入的数据

返回值:int 成功返回OK,失败返回失败原因

代码实现:

图 9 插入数据函数

3.8显示hash表内容函数

功能:通过遍历hash表中的每一个节点,将每一个节点的数据域(顾客所有信息)打印出来。

参数:1.hash表首地址   2.hash表长

返回值:int 成功返回OK,失败返回失败原因。

代码实现:

 

 图 10 显示数据函数

 

3.9删除数据函数

功能:用户输入需要删除的顾客姓名,若找到则将该顾客所在的节点在hash表内删除,然后将被删除的顾客信息保存并输出。

参数:1.hash表的首地址  2.你要删除的顾客姓名  3.保存被删除的顾客信息

返回值:int  成功返回OK,失败返回失败原因

代码实现:

 

 图 11 删除数据函数

 

3.10更新数据函数

功能:用户输入顾客姓名,在hash表内查找对应的结点,先显示顾客原来的所有信息,再提示用户输入新的信息,在用户输入完新的顾客信息后(顾客电话,宠物类型,日期)保存在原来的hash表内节点中。

参数:1.hash表的首地址  2.用于查询的顾客姓名   3.新的顾客信息

返回值:int  成功返回OK,失败返回失败原因

代码实现:

 

 图 12 更新数据函数

3.11保存数据函数

功能:通过循环遍历hash表内的所有节点,将里面的数据域(顾客所有信息)一一保存在一个文件中。

参数:1.hash表的首地址  2.hash表长

返回值:int  成功返回OK,失败返回失败原因

代码实现:

 图 13 保存数据函数

3.12读取数据函数

功能:从信息文件中,循环读取所有的顾客所有信息直到文件末尾,将每一次读取到的顾客信息插入到hash表中,直到所有顾客信息插入完毕。

参数:1.hash表的首地址

返回值:int 成功返回OK,失败返回失败原因

代码实现:

 图 14读取数据函数

3.13 main函数设计

代码实现:

 图 15-1 main.c

 图 15-2 main.c


四、调试分析

4.1测试数据

测试插入顾客信息并查询,输入1,输入 feng 1566666666 jinmao 2022/2/2,并输入5查询feng顾客的信息,显示顾客姓名:feng,顾客电话:156666666,宠物类型:jinmao,日期:2022/2/2,结果正确。

测试插入姓名相同的数据,输入1,输入feng 199999999 haha 2077/7/7,显示表中已经存在该顾客的数据,插入失败,结果正确。

图 16测试插入

测试保存文件信息并读取,输入6,显示保存成功,结果正确,退出系统,再次进入输入7,显示读取成功,结果正确,输入2,显示所有的顾客信息,结果正确

图 17-1测试保存读取

图 17-2测试保存读取

 测试销毁文件,输入8,数据文件被删除,结果正确

图 18-1测试销毁

图 18-2测试销毁

图 18-3测试销毁


五、运行结果

 图 19-1运行结果

图 19-2运行结果

图 19-3运行结果

 图 19-4运行结果


六、遇到的问题以及未来的想法

本系统未实现排序功能,比如hash表实现从a到z姓名的大小依次进行排序,但因为排序会进行很复杂的插入删除操作,需要考虑到的因素十分的多,因此排序功能未能实现,未来若能力以及技术达到实现的要求,将进行hash表排序的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值