你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

综合作业 C语言病人信息管理

2021/12/20 3:04:56

病人信息管理

  • 实验内容
  • 病人信息
    • patient.h
    • patient.cpp
  • 界面
    • menu.h
    • menu.cpp
  • homework


实验内容

实验内容:病人信查询与管理系统(可能涉及线性表,检索,排序等)


病人信息

patient.h

#define MaxSize 100

typedef struct					//病人信息
{
	char number[5];
	char name[10];
	char age[5];
	char sex[5];
	char symptom[50];
}Patient;

typedef Patient ElemType;

typedef struct					//病人表
{
	ElemType List[MaxSize];
	int size;
}PatientList;

void ListInitialize(PatientList *L);		//初始化操作
int ListLength(PatientList *L);			//获得线性表长度
int ListInsert(PatientList *L,int i,ElemType x);		//线性表插入元素
int ListGet(PatientList *L,int i,ElemType *x);		//输出第i个元素
int ListDelete(PatientList *L,char num[5],ElemType *x);		//线性表删除元素


void Bubble(PatientList *L);		//冒泡排序(按病历号)
int SeqSearch(PatientList *L, char kval[5], int *pos);		//顺序检索,用pos返回检索的病人信息存放的位置

int equal(char kval[5],char match[5]);		//匹配字段
int compare(char a[5],char b[5]);		//比较字段

patient.cpp

#include "stdio.h"
#include "stdlib.h"		//#include "malloc.h"

#include "patient.h"

void ListInitialize(PatientList *L)		//初始化操作
{
	L->size = 1;
}

int ListLength(PatientList *L)			//获得线性表长度
{
	return L->size;
}

int ListInsert(PatientList *L,int i,ElemType x)		//线性表在第i的位置插入元素
{
	int j;
	if(L->size >= MaxSize)
	{
		printf("Already full,can't insert! 1\n");
		//线性表已满,无法插入
		return 0;
	}
	else if(i<0 || i > L->size)
	{
		printf("Invalid parameter! 2\n");
		//插入位置参数错误
		return 0;
	}
	else
	{
		for(j=L->size ; j>i ; j--)
			L->List[j] = L->List[j-1];
		L->List[i] = x;
		L->size++;
		return 1;
	}
}

int ListGet(PatientList *L,int i,ElemType *x)		//取出第i个位置的元素给x
{
	if(i<0 || i > L->size-1)
	{
		printf("Invalid parameter! 3\n");
		//位置参数错误
		return 0;
	}
	else
	{
		*x = L->List[i];
		return 1;
	}
}

/*
int ListDelete(PatientList *L,int i,ElemType *x)		//线性表删除第i个元素
{
	int j;
	if(L->size <= 0)
	{
		printf("Already empty,can't delete!  4\n");
		//线性表已空,无法删除
		return 0;
	}
	else if(i<0 || i > L->size-1)
	{
		printf("Invalid parameter!  5\n");
		//删除位置参数错误
		return 0;
	}
	else
	{
		*x = L->List[i];
		for(j=i+1 ; j<L->size ; j++)
			L->List[j-1] = L->List[j];
		L->size--;
		return 1;
	}
}
*/

int ListDelete(PatientList *L,char num[5],ElemType *x)		//删除病历号位num的病人信息
{
	int j=1; 
	for( ; j<L->size-1 ; j++)
	{
		if(equal(num,L->List[j].number)==0)
			break;
	}
	if(j<L->size)
	{
		*x = L->List[j];
		for(int i = j+1 ; i<L->size ; i++)
			L->List[i-1] = L->List[i];
		L->size--;
		return 1;
	}
	else
		return 0;
}

/*
void Bubble(PatientList *L)					// 冒泡排序(按病历号排序)优化版
{
	int exchange = L->size;
	int max;
	while(exchange)
	{
		max = exchange;
		exchange = 0;
		for(int j=0; j<max-1 ; j++)
		{
			if(compare(L->List[j].number,L->List[j+1].number)==1)
			{
				Patient temp = L->List[j];
				L->List[j] = L->List[j+1];
				L->List[j+1] = temp;
				exchange = j;
			}
		}
	}
}
*/

void Bubble(PatientList *L)					// 冒泡排序(按病历号排序)遍历版
{
	for(int i=1 ; i<L->size-1 ; i++)
		for(int j=1 ; j<L->size-i ; j++)
		{
			if(compare(L->List[j].number,L->List[j+1].number)==1)
			{
				Patient temp = L->List[j];
				L->List[j] = L->List[j+1];
				L->List[j+1] = temp;
			}
		}
}

int compare(char a[5], char b[5])
{
	int flag = 0;
	for(int i=4 ; i>=0 ; i--)
	{
		if(a[i]>b[i])
		{
			flag = 1;
			break;
		}
		if(a[i]<b[i])
		{
			flag = -1;
			break;
		}
	}
	return flag;
}

int SeqSearch(PatientList *L, char kval[5], int *pos)			//顺序检索,用pos返回检索的病人信息存放的位置
{
	int i=0;
	while(i<=L->size && equal(kval,L->List[i].number)==0)
		i++;
	if(i<=L->size)
	{
		*pos = i;
		return true;
	}
	*pos = i;
	return false;
}

int equal(char kval[5],char search[5])
{
	int flag = 1;
	for(int i=0 ; i<5 ; i++)
	{	
		if(kval[i] != search[i])
		{
			flag = 0;
			break;
		}
	}
	return flag;
}



界面

menu.h

void Menu(PatientList *L);
void PrintList(PatientList *L);		//输出全体病人信息
void ScanfPatient(PatientList *L);	//输入病人信息
void NumberSort(PatientList *L);		//按病历号从小到大排序输出
void DeletePatient(PatientList *L);		//删除指定病历号的病人信息
void NumberSearch(PatientList *L);		//病历号检索病人信息

menu.cpp

#include "stdio.h"
#include "stdlib.h"		//#include "malloc.h"

#include "patient.h"
#include "menu.h"

void Menu(PatientList *L)
{
	int m;
	printf("*****************************************\n");
	printf("*          病人信查询与管理系统         *\n");
	printf("*                                       *\n");
	printf("*         1:打印当前病人信息表         *\n");
	printf("*         2:录入新病人信息             *\n");
	printf("*         3:病历号排序打印输出         *\n");
	printf("*         4:病历号检索信息             *\n");
	printf("*         5:删除病人信息               *\n");
	printf("*         6:退出系统                   *\n");
	printf("*                                       *\n");
	printf("*                第6小组                *\n");
	printf("*                                       *\n");
	printf("*****************************************\n");
	printf("选择功能:");
	scanf("%d",&m);	
	putchar(10);
	switch(m)
	{
	case 1:PrintList(L);
		break;
	case 2:ScanfPatient(L);
		break;
	case 3:NumberSort(L);
		break;
	case 4:NumberSearch(L);
		break;
	case 5:DeletePatient(L);
		break;
	case 6:printf("程序结束\n");
		exit(0);
	}
}


void PrintList(PatientList *L)
{	
	Patient *p;
	p = (Patient *) malloc (sizeof(Patient));
	printf("************************当前病人信息**********************\n");
	printf("*--------------------------------------------------------*\n");
	for(int i=1 ; i<L->size ; i++)
	{
		ListGet(L,i,p);
		printf("*病历号:%s\n", p->number);
		printf("*姓名:%s  年龄:%s  性别:%s\n", p->name, p->age, p->sex);
		printf("*症状:%s\n",p->symptom);
		printf("*--------------------------------------------------------*\n");
	}
	printf("**********************************************************\n");
	putchar(10);
	printf("press anything to continue\n");
	char a;
	scanf("%c",&a);
	getchar();
	putchar(10);
	Menu(L);
}


void ScanfPatient(PatientList *L)
{
	Patient *p;
	p = (Patient *) malloc (sizeof(Patient));
	Patient *q;
	q = (Patient *) malloc (sizeof(Patient));
	
	printf("****************************************\n");
	printf("                个人信息                \n");
	
	printf("请输入病历号(4位数字):");
	scanf("%s",p->number);
	
	printf("请输入姓名:");
	scanf("%s",p->name);
	
	printf("请输入年龄:");
	scanf("%s",p->age);
	
	printf("请输入性别:");
	scanf("%s",p->sex);
	
	printf("请输入症状:");
	scanf("%s",p->symptom);
	
	ListInsert(L,1,*p);
	ListGet(L,1,q);
	printf("----------------------------------------\n");
	printf("                录入成功                \n");
	printf("病历号:%s\n", p->number);
	printf("姓名:%s  年龄:%s  性别:%s\n", p->name, p->age, p->sex);
	printf("症状:%s\n",p->symptom);
	printf("****************************************\n");
	putchar(10);
	printf("press anything to continue\n");
	char i;
	scanf("%c",&i);
	getchar();
	putchar(10);
	Menu(L);
}

void NumberSort(PatientList *L)		//按病历号从小到大排序输出
{
	Bubble(L);
	printf("排序中\n");
	PrintList(L);
}

void NumberSearch(PatientList *L)		//病历号检索病人信息
{
	char kval[5];
	int pos;
	Patient *p;
	p = (Patient *) malloc (sizeof(Patient));
		printf("****************************************\n");

	printf("请输入病历号(4位数字):");
	scanf("%s",&kval);
	if(SeqSearch(L,kval,&pos))
	{
		printf("++++++++++++++++检索成功++++++++++++++++\n");
		*p = L->List[pos];
		printf("----------------------------------------\n");
		printf("病历号:%s\n", p->number);
		printf("姓名:%s  年龄:%s  性别:%s\n", p->name, p->age, p->sex);
		printf("症状:%s\n",p->symptom);
		printf("----------------------------------------\n");
	}
	else
		printf("未找到病人信息\n");
		printf("****************************************\n");

	putchar(10);
	printf("press anything to continue\n");
	char i;
	scanf("%c",&i);
	getchar();
	putchar(10);
	Menu(L);
}

void DeletePatient(PatientList *L)		//删除指定病历号的病人信息
{
	char num[5];
	Patient *p;
	p = (Patient *) malloc (sizeof(Patient));
		printf("****************************************\n");

	printf("请输入要删除病人的病历号:\n");
	scanf("%s",&num);
	if(ListDelete(L,num,p))
	{
		printf("++++++++++++++++删除成功++++++++++++++++\n");
		printf("----------------------------------------\n");
		printf("病历号:%s\n", p->number);
		printf("姓名:%s  年龄:%s  性别:%s\n", p->name, p->age, p->sex);
		printf("症状:%s\n",p->symptom);
		printf("----------------------------------------\n");
	}
	else
		printf("病人不存在\n");
		printf("****************************************\n");

	putchar(10);
	printf("press anything to continue\n");
	char i;
	scanf("%c",&i);
	getchar();
	putchar(10);
	Menu(L);
}

homework

#include<stdio.h>
#include "patient.h"
#include "menu.h"
void main(){	
	PatientList L;
	ListInitialize(&L);
	Menu(&L);
	printf("hello\n");
}