基于动态顺序表实现病历存储项目

news2024/9/20 8:09:06

  基于动态顺序表实现通讯录项目icon-default.png?t=O83Ahttps://blog.csdn.net/Eristic0618/article/details/135718230?spm=1001.2014.3001.5506

原文在这里嗷,我进行了小小修改,快去关注这位佬阿瑾0618icon-default.png?t=O83Ahttps://blog.csdn.net/Eristic0618?type=blog

(1)Seqlist.h

#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<string.h>
#include<Windows.h>
#include<assert.h>
#include "Contact.h"

typedef Info SLDataType;
typedef struct SeqList
{
	SLDataType* a;
	size_t size;
	size_t capicity;
}patient;

void SeqListInit(patient* psl);

void CheckCapacity(patient* psl);

void SeqListPushBack(patient* ps1, SLDataType x);

void SeqListErase(patient* psl, size_t pos);

void SeqListDestory(patient* psl);

 (2)Seqlist.c

#include"SeqList.h"

void SeqListDestory(patient* psl)
{
	assert(psl);
	free(psl->a);
	psl->a = NULL;
	psl->capicity=0;
	psl->size = 0;
}

void SeqListInit(patient* psl)
{
	assert(psl);
	psl->a = (SLDataType*)malloc(sizeof(SLDataType) * 4);
	if (psl->a == NULL)
	{
		perror("malloc fail");
		return;
	}
	psl->size = 0;
	psl->capicity = 4;
}

void CheckCapacity(patient* psl)
{
	assert(psl);
	if (psl->size == psl->capicity)
	{
		SLDataType* tmp = (SLDataType*)realloc(psl->a, sizeof(SLDataType) * psl->capicity * 2);
		if (tmp == NULL)
		{
			perror("malloc fail");
			return;
		}
		psl->a = tmp;
		psl->capicity *= 2  ;
	}
} 

void SeqListPushBack(patient* psl, SLDataType x)
{
	assert(psl);
	CheckCapacity(psl);
	psl->a[psl->size++] = x;
}

void SeqListErase(patient *psl, size_t pos)
{
	assert(psl);
	assert(0 <= pos && pos < psl->size);
	while (pos < psl->size - 1)
	{
		psl->a[pos] = psl->a[pos + 1];
		pos++;
	}
	psl->size--;
}

(3)Contact.h

#pragma once
#define NAME_MAX 100
#define SYMPTOM_MAX 10


struct SeqList ;
typedef struct SeqList Case_History;

typedef struct PersonInfo
{
	int num;
	char name[NAME_MAX];
	char symtop[SYMPTOM_MAX];
}Info;

void InitCase_History(Case_History* pch);//初始化病历

void DestoryCase_History(Case_History* pch);//销毁病历

int FindByName(Case_History* pch, char* name);//通过姓名找病人

void AddCase_History(Case_History*pch);//添加病人

void DeleteCase_History(Case_History*pch);//删除病人

void ModifyCase_History(Case_History* pch);//修改病人信息

void FindCase_History(Case_History*pch);//查找病人

void ShowCase_History(Case_History* pch); //展示病人列表

void ClearCase_History(Case_History* pch);//清空病历

void SaveCase_History(Case_History* pch);//保存病历

void LoadCase_History(Case_History* pch);//载入历史病历

(4)Contact.c

#include "SeqList.h"

void InitCase_History(Case_History* pch)//初始化病历
{
	SeqListInit(pch);
}

void DestoryCase_History(Case_History* pch)//销毁病历
{
	SeqListDestory(pch);
}

int FindByName(Case_History *pch, char* name)//通过姓名找病人
{
	 for(size_t i=0;i<pch->size;i++)
		 if (strcmp(name, pch->a[i].name)==0)
		 {
			 return i;
		 }
	 return -1;
}

void AddCase_History(Case_History* pch)//添加病人
{
	CheckCapacity(pch);
	printf("请输入姓名:\n");
	scanf("%s", pch->a[pch->size].name);
	printf("请输入病历号:\n");
	scanf("%d", &(pch->a[pch->size].num));
	printf("请输入症状:\n");
	scanf("%s", pch->a[pch->size].symtop);

	pch->size++;
	system("cls");
	printf("添加成功!\n");
}

void DeleteCase_History(Case_History* pch)//删除病人
{
	char name[100];
	printf("请输入要删除的病人:\n");
	scanf("%s", name);

	int index = FindByName(pch, name);
	if (index == -1)
	{
		printf("要删除的病人不存在!\n");
		return;
	}
	SeqListErase(pch, index);
	system("cls");
	printf("删除成功!\n");
}

void ModifyCase_History(Case_History* pch)//修改病人信息
{
	char name[100];
	printf("请输入要修改的病人:\n");
	scanf("%s", name);
	int index = FindByName(pch, name);
	if (index == -1)
	{
		printf("要删除的病人不存在!\n");
		return;
	}
	printf("请输入修改后的姓名:\n");
	scanf("%s", pch->a[index].name);
	printf("请输入修改后的病历号:\n");
	scanf("%d", &(pch->a[index].num));
	printf("请输入修改后的症状:\n");
	scanf("%s", pch->a[index].symtop);
	system("cls");
	printf("修改成功!\n");
}

void FindCase_History(Case_History* pch)//查找病人
{
	char name[100];
	printf("请输入要寻找的病人:\n");
	scanf("%s", name);

	int index = FindByName(pch, name);
	if (index == -1)
	{
		printf("要寻找的病人不存在\n");
		return;
	}

	system("cls");

	printf("查找成功!\n");
	printf("姓名:%s\n", pch->a[index].name);
	printf("病历号:%d\n", pch->a[index].num);
	printf("症状:%s\n", pch->a[index].symtop);

}

void ShowCase_History(Case_History* pch) //展示病人列表
{
	if (pch->size == 0)
	{
		printf("系统为空!\n");
		return;
	}
	printf("姓名 病历号 症状\n");
	for (size_t i = 0; i < pch->size; i++)
	{
		printf("%s %d %s\n",
			pch->a[i].name,
			pch->a[i].num,
			pch->a[i].symtop);
	}
}

void ClearCase_History(Case_History* pch)//清空病历
{
	pch->size = 0;
	printf("系统清空成功!\n");
}

void SaveCase_History(Case_History* pch)//保存病历
{
	FILE* pf = fopen("Case_History.txt", "wb");
	if (pf == NULL)
	{
		perror("fopen fail");
		return;
	}
	for (size_t i = 0; i < pch->size; i++)
	{
		fwrite(pch->a + i, sizeof(Info), 1, pf);
	}
	printf("病历数据保存成功!\n");
	fclose(pf);
}

void LoadCase_History(Case_History* pch)//载入历史病历
{
	FILE* pf = fopen("Case_History.txt", "rb");
	if (pf == NULL)
	{
		perror("fopen fail");
		return;
	}
	Info info;
	while (fread(&info, sizeof(Info), 1, pf))
	{
		SeqListPushBack(pch, info);
	}
	printf("病历数据载入成功!\n");
	fclose(pf);
}

(5)text.c

#include "SeqList.h"

void Menu()
{
	printf("**********病人病历信息系统**********\n");
	printf("****** 1.添加病人   2.删除病人******\n");
	printf("****** 3.修改病人   4.查找病人******\n");
	printf("****** 5.查看系统   6.清空系统******\n");
	printf("****** 0.退出系统             ******\n");
	printf("************************************\n");
}
int main()
{
	Case_History ch;
	InitCase_History(&ch);
	LoadCase_History(&ch);
	int option = -1;
	do {
		Menu();
		printf("请选择:\n");
		scanf("%d", &option);
		system("cls");
		switch (option)
		{
		case 1://添加病人信息
			AddCase_History(&ch);
			break;

		case 2://删除病人信息
			DeleteCase_History(&ch);
				break;

		case 3://修改病人信息
			ModifyCase_History(&ch);
			break;

		case 4://查找病人
			FindCase_History(&ch);
			break;

		case 5://查看病人信息
			ShowCase_History(&ch);
			break;
		case 6://清空病历
			ClearCase_History(&ch);
			break;
		case 0://退出
			printf("系统退出中……\n");
			break;

		default:
			printf("输入错误,请重新输入\n");
			break;
		}

	} while (option);
	SaveCase_History(&ch);
	DestoryCase_History(&ch);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2145743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百度Android IM SDK组件能力建设及应用

作者 | 星途 导读 移动互联网时代&#xff0c;随着社交媒体、移动支付、线上购物等行业的快速发展&#xff0c;对即时通讯功能的需求不断增加。对于各APP而言&#xff0c;接入IM SDK&#xff08;即时通讯软件开发工具包&#xff09;能够大大降低开发成本、提高开发效率&#…

rocky9.2的lvs的NAT模式下的基本使用的详细示例

文章目录 前言什么是LVS?&#xff08;Linux Virtual Server&#xff09;LVS的组成1. 负载均衡器&#xff08;Load Balancer&#xff09;2. 后端服务器池&#xff08;Real Servers&#xff09;3. IPVS&#xff08;IP Virtual Server&#xff09;4. 调度算法&#xff08;Schedul…

Windows 常用的键盘快捷键总结

在日常工作或学习中&#xff0c;使用键盘快捷键不仅能够显著提高操作速度&#xff0c;还可以减少对鼠标的依赖&#xff0c;提升整体工作效率。Windows 操作系统为用户提供了众多功能强大的键盘快捷键&#xff0c;覆盖了不同方面&#xff0c;下面就给大家总结了常用的键盘快捷键…

15. 三数之和(左右指针)

算法分析&#xff1a; 数组排序&#xff1a;先将数组排序&#xff0c;时间复杂度 O(NlogN)。 固定一个数&#xff0c;双指针查找&#xff1a; 用一个循环固定第一个数 nums[i]。在剩余的部分&#xff0c;使用双指针 left 和 right 来寻找符合条件的三元组。 跳过重复元素(注意…

javascript-原型和原型链

原型 每个函数都有一个默认的原型对象 - prototype ,通过 prototype 我们可以扩展 js 的内置对象。一个函数和它创建的实例共享这个函数的原型属性和方法。实例对象的 constructor 会指向构造函数 原型链 每个实例对象都会有一个隐式原型属性 __proto__,通过 __proto__ 指…

单细胞BCR的分析Dandelion重注释的安装以及用法----11111

今天来学习下这个新的方法&#xff0c;主要是针对单细胞BCR 首先安装singularity Singularity 是一种容器化技术&#xff0c;类似于 Docker&#xff0c;专为高性能计算&#xff08;HPC&#xff09;和科学研究领域的需求设计。它允许用户在不同环境中运行和移植应用程序&#x…

【Canvas与诗词】《登科后》唐.孟郊

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>昔日龌龊不足夸</title><style type"text/css"&g…

线程 - 线程优缺点、线程自有和共享的数据、多线程使用公共空间、线程分离、线程库对线程的管理

文章目录 一、线程的优点1. 创建的代价2. 切换的代价缓存和进程/线程切换3. 占用的资源4. 效率二、线程的缺点1. 性能损失2. 健壮性降低3. 缺乏访问控制4. 编程难度高三、线程分离1. 线程分离2. pthread_detach ()① 函数细节② 函数使用四、线程自有和共享的数据1. 线程自有的…

[数据集][目标检测]无人机飞鸟检测数据集VOC+YOLO格式6647张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;6647 标注数量(xml文件个数)&#xff1a;6647 标注数量(txt文件个数)&#xff1a;6647 标注…

酒店布草洗涤-酒店分层管理编程实现--———未来之窗行业应用跨平台架构

一、添加楼层代码 未来之窗_人工智能_传送阵(添加楼层,客户信息,300,200) CyberWin_Dialog.layer(未来之窗传送,{type:"url",title:title,move:true,width:阵眼宽度"px",height:阵眼高度"px",id:未来之窗app_通用ID,mask:false,align:59,hidecl…

css 样式简单学习(一)

目录 1. css 介绍 1.1 css 样式 1.2 css代码风格 1.2.1 书写格式 1.2.2 样式大小写​编辑 1.2.3 空格规范 2. 基础选择器 2.1 选择器的作用​编辑 2.2 选择器的分类 2.3 基础选择器 2.3.1 标签选择器​编辑 2.3.2 类选择器​编辑 2.3.3 类选择器-多类名​编辑 2.…

Linux硬连接、软连接和复制的区别

‌硬连接、软连接和复制在Linux系统中的主要区别体现在以下三点&#xff1a; 文件链接的方式文件独立性文件系统的操作上。‌ 一、硬连接 1. 硬连接是通过ln命令创建的&#xff0c;它为文件创建别名&#xff0c;与源文件共享同一inode号码&#xff0c;因此硬连接和源文件实际…

松散绑定是什么?

概念 比如我的yml中写的last-name,这个和lastName是一样的&#xff0c;-后面跟着的字母默认是大写的&#xff0c;这就是松散绑定 示例 类代码&#xff1a; public class Person {private String lastName;private Integer age;private Boolean happy;private Date birth;pr…

c++与cmake:完整的C++项目构建注意事项

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 最近常常使用cmake构建c项目有感,从创建项目到打包发布总结一下需要注意的事情. 项目组织方式 具体的项目组织方式因人而异,这里推荐一种,在src目录中创建模块目录,再在include目录中常见对应的同名目录包含头文件,…

【Binlog实战】:基于Spring监听Binlog日志

【Binlog实战】&#xff1a;基于Spring监听Binlog日志 binlog的三种模式 MySQL 的二进制日志&#xff08;binlog&#xff09;有三种不同的格式&#xff0c;通常被称为 binlog 模式。这三种模式分别是 Statement 模式、Row 模式和Mixed 模式。 Statement 模式&#xff1a; 在 …

Redis存储原理

前言 我们从redis服务谈起&#xff0c;redis是单reactor&#xff0c;命令在redis-server线程处理。还有若干读写IO线程负责IO操作&#xff08;redis6.0之后&#xff0c;Redis之pipeline与事务&#xff09;。此外还有一个内存池线程负责内存管理、一个后台文件线程负责大文件的关…

信息安全数学基础(17)Wilson定理

前言 Wilson定理&#xff08;Wilsons Theorem&#xff09;是数论中的一个基本定理&#xff0c;它揭示了素数与其阶乘之间的一个重要关系。 一、表述 对于任意素数p&#xff0c;有(p−1)!≡−1(modp)&#xff0c;其中(p−1)!表示p−1的阶乘&#xff0c;即123⋯(p−1)。 这个定理…

C++STL~~priority_queue

文章目录 容器适配器一、priority_queue的概念二、priority_queue的使用三、priority_queue的练习四、仿函数五、总结 容器适配器 什么是适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff0c;该种模式是将…

python画图|3D bar进阶探索

前述学习过程只能怪&#xff0c;已经探究了3D直方图的基础教程&#xff0c;详见下述链接&#xff1a; python画图|3D直方图基础教程-CSDN博客 实际上&#xff0c;基础文章直接进入了堆叠教程&#xff0c;相对来说基础的程度不够&#xff0c;因此有必要再次探索。 【1】官网教…

spug项目实现代码本地启动步骤

一、spug代码仓库地址: spug: 开源运维平台&#xff1a;面向中小型企业设计的无 Agent的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件在线上传下载、应用发布、任务计划、配置中心、监控、报警等一系列功能。 - Gitee.com 注意&#xff1a;如…