基于链队列的病人就医管理系统(数据结构实训)

这篇具有很好参考价值的文章主要介绍了基于链队列的病人就医管理系统(数据结构实训)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  病人就医管理设计要求如下:

        数据结构病人就医管理系统,数据结构,c语言

 以下是代码的实现,基于C语言。

设计的结构是采用链队列作为主要的存储结构,以及一些结构体作辅助;其中添加一些功能,一些防范用户输入的设计。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define MAXSIZE 100 //规定每天每个科室最大接诊量 

//链队列的结构 FIFO
typedef struct linkedQueue {
	int number;//预诊号 
	struct linkedQueue *next;//指向下一个数据的指针 
}Queue;

//队列的指针结构 
typedef struct{
	struct linkedQueue *front,*rear;//rear -> end ; front -> frist
}Pionter;

//将挂号时产生的数据抽象出来成为一个结构图 
typedef struct {
	int department[MAXSIZE];//存入挂号时,所产生的诊号(用数组保存) 
	int count;//当前挂号总人数 
	int number;//排队人数 
}List;

//设置结构体的全局变量 
Queue *queueA,*queueB,*queueC;//A- 儿科 & B-外科 & C-内科 
Pionter *piontA,*piontB,*piontC;//指针结构体 
List *A,*B,*C;//存储挂号数据的结构体 

/*
*获取预诊号
*@return int 
*/
int getRegisteredNumber(List *list) 
{	
	list->department[list->count] = ++(list->count);
	++(list->number); 
	return list->count;
}

/*
*挂号 
*@return void
*/
void registered()
{
/*就诊后不清除患者挂号信息,患者当天无需二次挂号,仅需用就诊号直接排队就诊。 
*结合实际生活,例如:当我们挂号;排队后;就诊时,医生无法立即判断患者病情,需要医学 
*影像等检查,由于检查无法第一时间出结果,患者需要转场取得检查结果后,再次前往就诊。 
*/ 
	//挂号,需要根据所输入诊室,来确定编号
	char department;
	printf("请输入你需要挂号的诊室(A-儿科/B-外科/C内科)\n");

	scanf("%c",&department);
	getchar();	
	department = toupper(department);//将输入chose转换成大写 
	if(department == 'A') {
		printf("你的就诊号是:[A%d],",getRegisteredNumber(A));
		printf("当前挂号人数为%d\n",A->number);
	} else if(department == 'B') {
		printf("你的就诊号是:[B%d],",getRegisteredNumber(B));
		printf("当前挂号人数为%d\n",B->number);
	} else if(department == 'C') {
		printf("你的就诊号是:[C%d],",getRegisteredNumber(C));
		printf("当前挂号人数为%d\n",C->number);	
	} else {
		printf("输入有误\n");
		return;
	}
	
}

/*
添加病人进队列的具体操作 
*/
void addSickDetail(Queue *queue,Pionter *piont,int number)
{
	 //输入预诊号,将其加入队列当中 
	 queue = (Queue*)malloc(sizeof(Queue));
 	 //如果rear为NULL时,代表队列为空  
 	 if(piont->rear == NULL && piont->front == NULL) {
 	 	queue->number = number;//为第一个添加的数据赋值
		piont->rear = queue;//将rear指向第一个添加的数据
		piont->front = queue;//将front也指向第一个添加的数据
		queue->next = NULL;
	  }else {
	  	queue->number = number;
	  	piont->rear->next = queue; 
		piont->rear = queue;	
		queue->next = NULL;
	  }
 } 
 bool isExit(Queue *queue,Pionter *piont,int number) 
 {
 	Queue *head = piont->front;//指向队列头的指针 
 	if(head == NULL) {
		return 0; 
	 }
	while(head != NULL) {
		if(number == head->number) {
			return 1;
		}
		head = head->next;
		
	}
 }
 
 /*
 *添加病人进队列 
 */
 void addSick()
 {
 	char department;//科室 
 	char word[5];
 	int number;
 	printf("请输入您的诊室(A-儿科/B-外科/C内科)\n"); 
 	scanf("%c",&department);
 	getchar();//缓冲区
 	//通过toupper函数实现无论用户输入大小写都可以自动转换成大写,防止用户输入性错误 
 	department = toupper(department);
 	if(department == 'A') {
 		 printf("请输入您的预诊号\n");
 	 	 scanf("%s",&word);
 	 	 word[0] = toupper(word[0]);
 	 	 char *d = strtok(word,"A");
 	 	 number = atoi(d);
 	 	 if(number > 0 && number <= A->count) {
 	 	 	  if(isExit(queueA,piontA,number) ) {
		        	printf("您输入的预诊号已存在\n");
				} else {
					addSickDetail(queueA,piontA,number);
 	 	 			printf("添加成功\n");	 
				} 
 	 	 		   
		   }    	
		   else {
			   	printf("您输入的预诊号不存在\n");
			   	return;
		   }
	 }else if(department == 'B') {
	 	 printf("请输入您的预诊号\n");
 	 	 scanf("%s",&word);
 	 	 word[0] = toupper(word[0]);
 	 	 char *d = strtok(word,"B");
 	 	 number = atoi(d);
 	 	 if(number > 0 && number <= B->count) {
 	 	 	  if(isExit(queueB,piontB,number) ) {
		        	printf("您输入的预诊号已存在\n");
				} else {
					addSickDetail(queueB,piontB,number);
 	 	 			printf("添加成功\n");	 
				}
	       }
		   else {
			   	printf("您输入的预诊号不存在\n");
			   	return;
		   }
	 } else if(department == 'C') {
	 	 printf("请输入您的预诊号\n");
 	 	 scanf("%s",&word);
 	 	 word[0] = toupper(word[0]);
 	 	 char *d = strtok(word,"C");
 	 	 number = atoi(d);
 	 	 if(number > 0 && number <= C->count) {
 	 	 	  if(isExit(queueC,piontC,number) ) {
		        	printf("您输入的预诊号已存在\n");
				} else {
					addSickDetail(queueC,piontC,number);
 	 	 			printf("添加成功\n");	 
				} 
 	 	 		   
		   }    
		   else {
			   	printf("您输入的预诊号不存在\n");
			   	return;
		   }
	 }else {
	 	printf("您输入的有误,请重新输入\n"); 
	 	return;
	 }
 }
 /*
 *弹出病人出队列的具体操作 
 */
 int popSickDetail(Queue *queue,Pionter *piont,List *list) 
 {
 	Queue *head = piont->front;//指向队列头的指针 
 	Queue *foot = piont->rear;//指向队列尾的指针 
 	int number;
 	//如果front和rear的地址一样说明队列中只有一个元素 
 	if(head == NULL) {
 		printf("排队为空,无法就诊\n");
 		return 0;
	 }
	 //说明队列中只有一个元素 
 	if(foot == head) {
 		number = foot->number;
		piont->front = piont->rear = NULL;
		free(head);	
		list->number--;	
	 } else {
	 	number = piont->front->number;
	 	piont->front = piont->front->next;
		free(head);	
		list->number--;	
	 }	
	 return number;
 }
 
 /*
 *就诊-弹出队列最前面的元素
 *@return 
 */ 
 void popSick()
 {
 	char department;
 	int sickNumber;
 	printf("请输入您的诊室(A-儿科/B-外科/C内科)\n");	
 	scanf("%c",&department);
 	getchar();
 	department = toupper(department);
 	if(department == 'A') {
 		sickNumber = popSickDetail(queueA,piontA,A);
 		if(sickNumber != 0) {
 			printf("请A%d号患者就诊\n",sickNumber);
		 }
 			
	 } else if(department == 'B') {
	 	sickNumber = popSickDetail(queueB,piontB,A);
	 	if(sickNumber != 0) {
 			printf("请B%d号患者就诊\n",sickNumber);
		 }
	 		
	 } else if(department == 'C') {
	 	sickNumber = popSickDetail(queueC,piontC,A);
	 	if(sickNumber != 0) {
 			printf("请C%d号患者就诊\n",sickNumber);
		 }
	 } else {
			printf("您输入的有误,请重新输入\n"); 
	 		return;	
	 }
 	
 }
 /*
 *打印队列的具体操作 
 */
 void printQueueDetail(Pionter *piont,char department) 
 {
 	//通过Pionter结构体,通过front&rear可以遍历链队列
 	Queue *head = piont->front;
 	if(head == NULL) {
 		printf("排队为空,无法查看排队\n");
		return; 
	 }
	printf("%c诊室的排队为\n",department);
	while(head != NULL) {
		
		printf("%c%d\t",department,head->number);
		head = head->next;
	}
	printf("\n");
 }
 
 /*
 *查看排队-打印队列
 *@return void 
 */
 void printQueue()
 {
 	char department;
 	int number;
 	printf("请输入您的诊室(A-儿科/B-外科/C内科)\n");
 	scanf("%c",&department);
 	getchar();
 	department = toupper(department);
 	if(department == 'A') {
 		printQueueDetail(piontA,department);
	 } else if(department == 'B') {
	 	printQueueDetail(piontB,department);
	 } else if(department == 'C') {
	 	printQueueDetail(piontC,department);	
	 } else {
	 	printf("您输入的有误,请重新输入\n"); 
	 	return;	
	 }
 	
 }
 
 /*
 *初始化链队列 
 @return void
 */
void initQueue()
{
	//初始化指向队列头和尾的指针 
	piontA = (Pionter*)malloc(sizeof(Pionter));
	piontA->front = NULL;
	piontA->rear = NULL;
	piontB = (Pionter*)malloc(sizeof(Pionter));
	piontB->front = NULL;
	piontB->rear = NULL;
	piontC = (Pionter*)malloc(sizeof(Pionter));
	piontC->front = NULL;
	piontC->rear = NULL;
	//初始化list结构体 
	A = (List*)malloc(sizeof(List));
	B = (List*)malloc(sizeof(List));
	C = (List*)malloc(sizeof(List));
	A->count = 0;
	A->number = 0;
	B->count = 0;
	B->number = 0;
	C->count = 0;
	C->number = 0;
}

 /*
 *视窗函数
 *@return void 
 */ 
void view()
{ 
	initQueue();//初始化操作 
	while(true)
	{
		printf("---------------------------------------\n");
		printf("|	欢迎来到病人就医管理系统      |\n");
		printf("---------------------------------------\n");
		printf("|	1.挂号			      |\n");
		printf("|	2.排队			      |\n");
		printf("|	3.就诊			      |\n");
		printf("|	4.查看排队		      |\n");
		printf("|	5.下班			      |\n");
		printf("|	请选择(1,2,3,4,5)	      |\n");
		printf("---------------------------------------\n");
		int choice;
		char *scanner;
		printf("请输入:\n");
		fflush(stdin);//清除缓冲区字符 
		scanf("%c",scanner);
		getchar();//缓冲区		
		choice = atoi(scanner);
		if(!(choice >= 1 && choice <= 5)) {
			printf("您的输入有误\n");
			continue;
		}
		switch(choice){
			//挂号-initQueue 
			case 1: 
				registered(); 
				break;
			//排队-addSick 
			case 2:
			 	addSick();
				break;
			//就诊-popSick 
			case 3: 
				popSick();
				break;
			//查看排队-printQueue
			case 4: 
				printQueue();			
				break;
			//下班-退出程序 
			case 5:
			exit(0); 
			break;
			default:
				printf("输入有误,请重新输入\n");
				break;
		} 
	}
}


//主函数 
int main()
{
	view();	
 }

 程序运行结果如下:

Sept1:病人进入医院挂号

数据结构病人就医管理系统,数据结构,c语言

数据结构病人就医管理系统,数据结构,c语言

 Sept2:病人挂号后,排队。

数据结构病人就医管理系统,数据结构,c语言

 Sept3:病人排队时观看排队情况

数据结构病人就医管理系统,数据结构,c语言

Sept4:病人就诊

数据结构病人就医管理系统,数据结构,c语言文章来源地址https://www.toymoban.com/news/detail-758162.html

到了这里,关于基于链队列的病人就医管理系统(数据结构实训)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构——图书管理系统

    1.深入理解数据结构的基本理论,掌握数据结构的设计方法训练基础知识和基本方法的综合运用。 2.熟悉和重新掌握c++语言,独立编制一个具有解决实际应用问题的应用程序。 3.制作一个图书管理系统,使他实现查找、删除、插入、输出、取值等这些基础操作。 4.掌握数据结

    2024年02月13日
    浏览(36)
  • 数据结构项目:图书管理系统

    随着科技的不断进步,图书的种类也随之日益增多。图书馆所需要处理的图书管理问题从而突出,而读者也许需要能够更方便的查找和查看图书馆的书籍。为解决以上问题,本系统设计时主要针对图书管理人员需求做出对图书信息的录入、删除、修改、导出等功能。 (1)用

    2024年02月04日
    浏览(38)
  • 数据结构课程设计 仓储管理系统

    【基本功能】 把货品信息表抽象成一个线性表,货品信息(包括ID、货品名、定价、数量等)作为线性表的一个元素,实现:按ID、货品名分别查找某货品信息(包括ID、货品名、定价、数量等);收录货品(如果货品在帐中已有,则只将总库存量增加。否则插入新增信息);

    2024年01月23日
    浏览(45)
  • 数据结构停车场管理系统设计

    数据结构与算法分析课程设计之数据结构停车场管理系统设计。主要应用到数据结构中的栈与队列。运用到的编程语言为C++。 目录 一  设计要求  二 思路分析 三 设计流程 先附上完整代码: 运行结果图: 1.1 问题描述 :设停车场是一个可停放n辆车的狭长通道,且只有一个

    2024年02月04日
    浏览(30)
  • 数据结构--学生通讯录管理系统

    文章目录 一、问题描述 二、系统功能设计 三、各个代码部分 四、整体代码及其运行 五、总结 学生通讯录管理系统--C语言实现 在现实中,用学号和姓名来记录学生需要花费大量的纸质材料,并且出现容易丢失、查找困难等问题。 “学生通讯管理系统”是为了帮助老师、同

    2024年02月11日
    浏览(39)
  • 数据结构课程设计:学生成绩管理系统

    目  录 第一章   需求分析 第二章 概要设计 第三章 详细设计 第四章 测试报告 第五章 安装及使用 第六章 项目总结 第七章 源码 一.需求分析        学生成绩管理是一个学校不可缺少的部分,它的内容对于学校的管理者和学生以及学生家长来说都至关重要,所以一个良好

    2024年02月02日
    浏览(55)
  • 数据结构设计--学生信息管理系统

    目录 1.环境 2.知识图 3.程序的功能 4.程序的源代码 vs code 快排+哈希 (1)程序中的数据存储到文件中。 (2) 录入学生成绩,格式如下: (学号(12位) 、姓名、性别、专业、班级、课程成绩(5门课程),总分)其中,总分通过程序计算求得。 (3)输出所有学生成绩。 (a)按某门课程成绩降序

    2024年02月04日
    浏览(35)
  • 数据结构课设--图书管理系统(含泪版)

    设计一个计算机管理系统完成图书管理基本业务。 【基本要求】 (1)每种书的登记内容包括书号、书名、著作者、现存量和库存量; (2)对书号建立索引表(线性表)以提高查找效率; (3)采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只

    2024年02月08日
    浏览(35)
  • 数据结构 C语言 树形结构 简单目录管理系统

    在图书、操作系统文件夹、学生等管理系统中,目录管理是必要环节,如何高效搜寻与低复杂度存储是实现这一环节的关键性问题。本课程设计需完成一种基于多叉树结构简单目录管理系统,该系统能以交互式界面进行创建目录、删除目录、查找目录、修改目录、层次遍历目

    2024年02月07日
    浏览(40)
  • 数据结构 C语言 树形结构 简单目录管理系统

    在图书、操作系统文件夹、学生等管理系统中,目录管理是必要环节,如何高效搜寻与低复杂度存储是实现这一环节的关键性问题。本课程设计需完成一种基于多叉树结构简单目录管理系统,该系统能以交互式界面进行创建目录、删除目录、查找目录、修改目录、层次遍历目

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包