C语言-信息管理系统(大作业)

新冠疫情病人信息管理系统,用到了结构体和链表实现了增删改查。

#include<stdio.h>
#include<stdlib.h> 
#include<string.h>

#define KESOU 2//咳嗽的权重
#define FARE 3//发热的权重
#define GANMAO 1//感冒的权重

//时间点结构体
typedef struct datepoint
{
	int year;
	int month;
	int day; 
}datepoint;
datepoint date2;

//病人结构体
struct patient
{
	int num; 
	char name[20];
	char sex[4];
	int age;
	char zhengzhuang[3];
    datepoint date1;
	int time;
	float chengdu; 
};
	
//链表节点	
struct Node
{
	struct patient data;//数据域
	struct Node* next;//指针域 
}; 


//创建链表
struct Node* createList()
{
	struct Node* headNode=(struct Node*)malloc(sizeof(struct Node));//headnode成为了结构体变量 
	headNode->next=NULL;
	return headNode; 
}

//增加新结点 
struct Node* createNode(struct patient data)
{
	struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
	newNode->data=data;
	newNode->next=NULL;
	return newNode;
}

    int TIME(); //计算时间
	void INPUT_INF();//输入
	void OUTPUT_INF();//输出
	void CALC();//计算
	void DELETE();//删除
	void PSORT();//排序
	void EXIT();//退出
	int DAY(int n1,int y1,int r1,int n2,int y2,int r2);
	int run_or_ping(int x);//判断闰年平年
	inline int yue_r(int n,int y);//内联函数
	void insertNodeByHead(struct Node* headNode, struct patient data);
	void printList(struct Node* headNode);
	void deleteNodeByAppoinnum(struct Node* headNode, int num) ;
	int chengdu(float a);

struct Node* list=createList();
struct patient info[3];
//主函数
int main()
{
	int n;
	while(n!=6)//打印菜单
	{	printf("*********************新冠肺炎病人基础信息管理*************************\n");
		printf("1:输入病人信息\n");
		printf("2:显示所有病人信息\n");
		printf("3:计算并输出目前病人平均年龄和平均住院时长\n");
		printf("4:病人治疗紧急程度排序\n");
		printf("5:删除出院病人\n");
		printf("6:结果存入文件patient information.txt\n");
		printf("7:退出系统\n");
		printf("***********************************************************************\n");
		printf("病毒无情,人间有爱;勇毅笃定,战无不胜。病毒无情,人间有爱;勇毅笃定,战无不胜。\n");
		printf("***********************************************************************\n");
		printf("输入选项代码:");
		scanf("%d",&n);
		switch(n)
		{
			case 1:INPUT_INF();break;
			case 2:OUTPUT_INF();break;
			case 3:CALC();break;
			case 4:PSORT();break;
			case 5:DELETE();break; 
			case 6:EXIT();break;
			case 7:printf("\n*******************谢谢使用!*******************\n");break;
			break;    
		}	
	}
getchar();
}


//插入结点(插入哪个链表,插入的数据)
void insertNodeByHead(struct Node* headNode, struct patient data)
{
	//创建插入的结点
	struct Node* newNode=createNode(data);
	newNode->next=headNode->next;
	headNode->next=newNode; 
}
//打印链表
void printList(struct Node* headNode)
{
	struct Node* pMove=headNode->next;
	printf("编号\t姓名\t性别\t年龄\t症状\t入院时间\t住院时长\n");
	while(pMove)
	{
		printf("%d\t%s\t%s\t%d\t%s\t%d年%d月%d日\t%d\n",pMove->data.num,pMove->data.name,pMove->data.sex,pMove->data.age,pMove->data.zhengzhuang,pMove->data.date1.year,pMove->data.date1.month,pMove->data.date1.day,pMove->data.time);
		pMove=pMove->next;
	}
	printf("\n");
}
//删除结点(删除哪个链表,删除的数据)
void deleteNodeByAppoinnum(struct Node* headNode, int num) 
{
	struct Node* postNode=headNode->next;
	struct Node* postNodeFront=headNode;
	if(postNode==NULL)
	{
		printf("无法删除,列表为空\n"); 
	}
	else
	{
		while(postNode->data.num!=num)
	    {
		postNodeFront=postNode;
		postNode=postNodeFront->next;
		if(postNode==NULL)
		{
			printf("未找到指定数据,无法删除\n");
			break;
		}
	    }
	    postNodeFront->next=postNode->next;
		free(postNode);
	}
}

void INPUT_INF() /* 输入一组病人的信息*/
{
	int i; 
	for(i=0;i<3;i++)
	{   
		printf("请输入病号、姓名、性别、年龄、症状、入院时间: ");
		scanf("%d%s%s%d%s%d%d%d",&info[i].num,&info[i].name,&info[i].sex,&info[i].age,&info[i].zhengzhuang,&info[i].date1.year,&info[i].date1.month ,&info[i].date1.day);
        insertNodeByHead(list, info[i]);
	}
}

void OUTPUT_INF()/* 显示所有记录*/
{
	int i;
	struct Node* p;
	p=list->next;
	printf("请输入当前日期\n");
	scanf("%d%d%d",&date2.year,&date2.month ,&date2.day );
	for(i=0;i<3;i++)
	{
      info[i].time =DAY(info[i].date1.year,info[i].date1.month,info[i].date1.day,date2.year,date2.month,date2.day);
      p->data=info[i];
      p=p->next;
	}
	printList(list);
}

void CALC()/*计算平均年纪和平均住院时长 */ 
{  
	int a[3]={0,1,2};
    int i,j;
    double total1=0,total2=0,ave_age=0,ave_time=0;
    double ave;
  
    for(i=0;i<3;i++)
	{
		total1=total1+info[i].age;
	}
    ave_age=total1/3.0;
    printf("病人平均年纪为%f\n",ave_age);
    
    printf("请输入当前日期");
	scanf("%d%d%d",&date2.year,&date2.month ,&date2.day );
	
	for(i=0;i<3;i++)
	{
      info[i].time =DAY(info[i].date1.year,info[i].date1.month,info[i].date1.day,date2.year,date2.month,date2.day);
	}
	for(i=0;i<3;i++)
	{
		total2=total2+info[i].time;
	}
	ave_time=total2/3.0;
	printf("病人平均住院时长为%f\n",ave_time);
}
//时间计算函数 
int DAY(int n1,int y1,int r1,int n2,int y2,int r2)
{
	int i,j,z,sum=0,flag=0,sum1=0; 
	
	for(i=n1;i!=n2;i++)
	{
		if(run_or_ping(i)==1)
			sum=sum+366;
		else sum=sum+365;
	}
	if(y1<y2) 
		for(j=y1;j!=y2;j++)
		{
			sum=sum+yue_r(n2,j);
		}
	else
	{
		for(j=y2;j!=y1;j++)
			sum1=sum1+yue_r(n2,j);
		sum=sum-sum1;
	}

	sum=sum+r2-r1;
	return sum;
}
int run_or_ping(int x)
{
	if(x%4==0)
		{
			if(x%100==0)
				if(x%400!=0)
					return 0;
			return 1;	
		}
	else return 0;
}
int yue_r(int n,int y)
{
	if(y==2)
	{
		if(run_or_ping(n)==1)
			return 29;
		else return 28;		
	}
	else if(y==4||y==6||y==9||y==11)
		return 30;
	else return 31;
}

//删除数据函数
void DELETE() 
{
	int num;
	printf("请输入出院病人编号\n");
	scanf("%d",&num);
	deleteNodeByAppoinnum(list, num);
	printList(list);
}

//病人紧急程度 
void PSORT()
{
	struct Node* p;
	p=list->next;
	int a[3]={0,1,2 };
	int i,j,temp;
	for(j=0;j<2;j++)
	{
		for(i=0;i<2-j;i++)
		if(info[a[i]].time>info[a[i+1]].time)
		{	
			temp=a[i];a[i]=a[i+1];
			a[i+1]=temp;
		}
	}
    printf("请输入当前日期");
	scanf("%d%d%d",&date2.year,&date2.month ,&date2.day );
	
	for(i=0;i<3;i++)
	{
      info[i].time =DAY(info[i].date1.year,info[i].date1.month,info[i].date1.day,date2.year,date2.month,date2.day);
      info[i].chengdu=info[i].time*0.3+chengdu(info[i].chengdu);
      p->data=info[i];
      p=p->next;
	}
	printf("顺序为:\n");
	printf("病号\t姓名\t总住院时长(天)\t紧急程度\n");
	for(i=0;i<3;i++)
		printf("%d\t%s\t%d\t%f\n",info[a[i]].num,info[a[i]].name,info[a[i]].time,info[a[i]].chengdu);
	printf("\n");
 
}
 
void EXIT()
{int i;
FILE *fp;
fp=fopen("patient information.txt","w");
 
	fprintf(fp,"病号\t姓名\t性别\t年龄\t症状\t入院日期\t住院时长\n");
 
	for(i=0;i<3;i++)
 
		fprintf(fp,"%d\t%s\t%f\t%f\t%f\t%f\n",info[i].num,info[i].name,info[i].sex,info[i].age,info[i].date1,info[i].time);
 
printf("\n\n*******************恭喜,保存完成!*******************\n\n");
}

int chengdu(float a)
{
	if(a==KESOU)
	return 2*0.15;
	else if(a==FARE)
	return 3*0.3;
	else
	return 1*0.15;
}
给别人编的。。。留着也没多大用处要做一个学生信息管理系统1.系统管理员进入(请输入密码)2.一级菜单(1.信息维护,2.信息检索,3.信息统计,4.退出)3.二级菜单(信息维护(1.建立学生成绩文件,2.添加学生记录,3.删除学生记录,4.修改学生记录,5.返回上级菜单)) 信息检索(1.按班级查找2.返回上级菜单)信息统计(1.成绩统计2.返回上级菜单)说明1。用口令(密码)形式严整管理员身份(可输入三次),合法者进入,否则程序结束。2.有关功能说明1)建立学生成绩表(模块A)建立新的学生成绩文件输入若干学生记录,包括姓名,学号,班级,课程编号,成绩。2)添加学生记录(模块B)在已存在的学生成绩文件中添加新记录。3)删除学生记录(模块C)在学生成绩文件中删除有三门课程不及格的学生记录。删除前,逐条显示符合删除条件的学生姓名,成绩,确认后再删除。4)修改学生信息(模块D)输入学生学号,在学生成绩文件中找出该学生记录。在屏幕上逐条显示该学生的各条记录。每显示一条,询问是否修改,如果”Y“输入修改后的数据,将文件原记录删除,保存新的记录。5)按姓名和班级查找(模块E)输入姓名显示相应信息。6)信息统计(模块F)同时按照班级和课程统计每门课程,每个班级的平均成绩,最高分,最低分。在屏幕上先依次显示各门课程,对应的各个班级的统计数据。7)退出信息管理系统,返回操作系统
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值