病人信息管理
- 实验内容
- 病人信息
- 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");
}