一、数据结构

(1)数据结构类型:链式队列
(2)分析:病人排队,医生看诊要先来排队的优先看病,满足数据结构中的“先进先出”原则,所以要选用队列。但由于人数不定,所以不适合用顺序存储队列,而链式队列较合适。
(3)数据结构类型定义:
struct patient {
char name[20];
char sex[10];
int age;
char address[20];
char telephone[12];
};
typedef struct node {
struct patient pat;
struct node *next;
}Node,*queNode;
typedef struct queue {
queNode font; // 链队列的头指针
queNode rear; // 指向队列的最后一个元素
}linkQue,*linkQueue;

二、主要函数

linkQueue initQueue() /创建一个空队列/
int emptyQueue(linkQueue q) /判断队列是否为空/
void regist() /登记病人的信息/
void enterQueue(linkQueue q,struct patient pa,int priority) /病人 入队/
int outQueue(linkQueue q) /医生看诊 出队/
void deletePatient(linkQueue q,char name[]) /根据病人的姓名在队列中删除他/
void searchPatient() /查询挂号的病人信息/
void searchKeshi() /查询科室信息/
void getOrder(linkQueue q,char name[]) /根据病人的姓名查询在队列中的次序/
void printShengyu() /显示剩余排队人数/
void printJiuzhen() /显示当天就诊人数/
void sort() /降序显示不同科室当天门诊病人数/
void income() /统计当天挂号收费情况/
void menu() /主菜单函数/

三、源代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
struct patient {char name[20];char sex[10];int age;char address[20];char telephone[12];
};
typedef struct node {struct patient pat;struct node *next;
}Node,*queNode;
typedef struct queue {queNode font; // 链队列的头指针 queNode rear; // 指向队列的最后一个元素
}linkQue,*linkQueue;/*诊室信息 */
struct zhenshi {char bks[20];int num;char ysm[20];
};
/*医师信息*/
struct doctor {char nam[20];char statu[20];int fare;
};
/*为了查询病人信息 */
struct person {char name[20];char sex[10];int age;char address[20];char telephone[12];char keshi[20];char type[20];
};
int surgerySum1 = 0; //外科普通号 挂号人数 ,为了统计挂号费
int surgerySum2 = 0; //外科专家号 挂号人数
int neikeSum1 = 0; //内科普通号 挂号人数
int neikeSum2 = 0; //内科专家号 挂号人数int surgery1 = 0; //外科普通号 就诊人数
int surgery2 = 0; //外科专家号 就诊人数
int neike3 = 0; //内科普通号 就诊人数
int neike4 = 0; //内科专家号 就诊人数int sur1 = 0; //外科普通号 放弃人数
int sur2 = 0; //外科专家号 放弃人数
int nei3 = 0; //内科普通号 放弃人数
int nei4 = 0; //内科专家号 放弃人数
/*创建一个空队列*/
linkQueue initQueue()
{linkQueue q = (linkQueue)malloc(sizeof(linkQue));q->font = (queNode)malloc(sizeof(Node));q->font->next = NULL;q->rear = q->font;return q;
}
linkQueue surgeryQue1; //外科普通号队列
linkQueue surgeryQue2; //外科专家号队列
linkQueue neikeQue3; //内科普通号队列
linkQueue neikeQue4; //内科专家号队列
/*判断队列是否为空*/
int emptyQueue(linkQueue q)
{if(q->rear == q->font) {return 0;  // 队空 } else {return 1;}
}
/*根据病人的姓名查询在队列中的次序*/
void getOrder(linkQueue q,char name[])
{int no=0,flag=0;queNode temp = q->font->next;while(temp != NULL){no++;if(strcmp(temp->pat.name,name) != 0){temp = temp->next;} else {flag = 1;printf("      病人目前在队列中的位置是:");printf("%d\n",no);break;}}if(flag == 0){printf("\n     该病人已经离队!\n");}Sleep(3000); }
/*根据病人的姓名在队列中删除他*/
void deletePatient(linkQueue q,char name[])
{ queNode temp = q->font;while(temp->next != NULL){if(strcmp(temp->next->pat.name,name) == 0) {queNode p = temp->next;temp->next = p->next;free(p);break; } else {temp = temp->next;}}}
/*查询挂号的病人信息*/
void searchPatient()
{int sum = surgerySum1 + surgerySum2 + neikeSum1 + neikeSum2;struct person p[sum]; FILE *fp;if((fp=fopen("E:\\Codefield\\C-code\\C-single\\patients.txt","r")) == NULL) {printf("      文件打开失败!\n");return;} int i;for(i=0; i<sum; i++){fscanf(fp,"%s %s %d %s %s %s %s\n",p[i].name,p[i].sex,&p[i].age,p[i].address,p[i].telephone,p[i].keshi,p[i].type);}fclose(fp); int flag = 0;char xm[20];printf("\n");printf("       请输入要查询的病人姓名:");scanf("%s",xm);for(i=0; i<sum; i++){if(strcmp(p[i].name,xm) == 0) {printf("\n     ===================================================================================\n");printf("       姓名     性别    年龄  家庭住址  电话    科室  挂号类型\n");printf("    -------------------------------------------------------------------------------\n");printf("      %s    %s   %d     %s    %s   %s  %s\n",p[i].name,p[i].sex,p[i].age,p[i].address,p[i].telephone,p[i].keshi,p[i].type );flag = 1;break;}}if(flag == 0){printf("      查无此人!\n");}Sleep(4000);
}
/*查询科室信息*/
void searchKeshi()
{FILE *fp;if((fp=fopen("E:\\Codefield\\C-code\\C-single\\keshi.txt","r")) == NULL){printf("    文件打开失败!\n");return;}char ksm[20],zsm1[20],zsm2[20],ysm1[20],ysm2[20]; int i;printf("\n     =============================================\n");for(i=0; i<2; i++){fscanf(fp,"%s %s %s %s %s\n",ksm,zsm1,zsm2,ysm1,ysm2);printf("      科室名:");printf("%s\n\n",ksm);printf("     诊室名:");printf("%s         %s\n\n",zsm1,zsm2);printf("    医师名:");printf("%s         %s\n",ysm1,ysm2);}printf("     =============================================\n");fclose(fp);struct doctor  d[4];if((fp=fopen("E:\\Codefield\\C-code\\C-single\\yisheng.txt","r")) == NULL){printf("      文件打开失败!\n");return;}for(i=0; i<4; i++)fscanf(fp,"%s %s %d\n",d[i].nam,d[i].statu,&d[i].fare);fclose(fp);printf("\n     =============================================\n");printf("        医师      职称      挂号费\n");printf("     ---------------------------------------------\n");for(i=0; i<4; i++)printf("     %s      %s  %d\n\n",d[i].nam,d[i].statu,d[i].fare);printf("      =============================================\n");Sleep(5000);}
/*病人 入队*/
void enterQueue(linkQueue q,struct patient pa,int priority)
{queNode temp = (queNode)malloc(sizeof(Node));temp->pat = pa;if(priority == 1) {temp->next = q->font->next;q->font->next = temp;if(emptyQueue(q) == 0){q->rear = temp;            }} else {temp->next = NULL;q->rear->next = temp;q->rear = temp;}}
/*医生看诊 出队*/
int outQueue(linkQueue q)
{if(emptyQueue(q) == 0){printf("    当前没有人排队,无须看诊!\n");Sleep(2000);return 0;}queNode temp = q->font->next;q->font->next = temp->next;printf("       病人看诊中.......\n");Sleep(3000);if(temp == q->rear){q->rear = q->font;}free(temp);printf("       该病人就诊完毕!\n");Sleep(2000);return 1;}
/*登记病人的信息*/
void regist()
{FILE *fp;if((fp=fopen("E:\\Codefield\\C-code\\C-single\\patients.txt","a")) == NULL) {printf("    文件打开失败!\n");return;} struct patient per;printf("\n");printf("    请登记病人的基本信息:\n\n");printf("     姓名、性别、年龄、家庭地址、电话\n\n");printf("       姓名:"); scanf("%s",per.name);printf("\n");printf("      性别:");scanf("%s",per.sex);printf("\n");printf("            年龄:");scanf("%d",&per.age);printf("\n");printf("       家庭地址:");scanf("%s",per.address);printf("\n");printf("      电话:");scanf("%s",per.telephone);fprintf(fp,"%s %s %d %s %s ",per.name,per.sex,per.age,per.address,per.telephone);printf("      =======================================================\n");printf("       1.外科     2.内科            \n\n");int keshi,zhenshi,pri;printf("    请选择科室:");scanf("%d",&keshi);switch(keshi) {case 1:printf("       =======================================================\n");printf("       普通号诊室:1       专家号诊室:2  \n\n");printf("      请选择诊室:");scanf("%d",&zhenshi);printf("       =======================================================\n");printf("       1.急诊         2.普通门诊      \n\n");printf("      请选择病情状况:");scanf("%d",&pri);if(zhenshi == 1) {surgerySum1++; enterQueue(surgeryQue1,per,pri);fprintf(fp,"%s %s\n","外科","普通号");} else {surgerySum2++;enterQueue(surgeryQue2,per,pri);fprintf(fp,"%s %s\n","外科","专家号");}break;case 2:printf("    =======================================================\n");printf("       普通号诊室:3       专家号诊室:4  \n\n");printf("      请选择诊室:");scanf("%d",&zhenshi);printf("       =======================================================\n");printf("       1.急诊         2.普通门诊      \n\n");printf("      请选择病情状况:");scanf("%d",&pri);if(zhenshi == 3) {neikeSum1++;enterQueue(neikeQue3,per,pri);fprintf(fp,"%s %s\n","内科","普通号");} else {neikeSum2++;enterQueue(neikeQue4,per,pri);fprintf(fp,"%s %s\n","内科","专家号");}break;} fclose(fp); printf("\n    登记成功!\n");Sleep(3000);return;
}
/*显示剩余排队人数*/
void printShengyu()
{printf("\n       =======================================\n");printf("       外科普通号诊室1 剩余排队人数: %d\n\n",surgerySum1-surgery1-sur1);printf("       外科专家号诊室2 剩余排队人数: %d\n\n",surgerySum2-surgery2-sur2);printf("       内科普通号诊室3 剩余排队人数: %d\n\n",neikeSum1-neike3-nei3);printf("       内科专家号诊室4 剩余排队人数: %d\n\n",neikeSum2-neike4-nei4);printf("       ======================================\n");Sleep(3000); }
/*显示当天就诊人数*/
void printJiuzhen()
{printf("\n       ========================================\n");printf("              外科      内科\n");printf("      ----------------------------------------\n");printf("     就诊人数 %d      %d\n",surgery1+surgery2,neike3+neike4); printf("\n     ========================================\n");Sleep(3000);}
/*统计当天挂号收费情况*/
void income()
{struct zhenshi zs[4];struct doctor  dt[4];FILE *fp;if((fp=fopen("E:\\Codefield\\C-code\\C-single\\zhenshi.txt","r")) == NULL){printf("    文件打开失败!\n");return;}int i,j;for(i=0; i<4; i++){fscanf(fp,"%s %d %s\n",zs[i].bks,&zs[i].num,zs[i].ysm);}fclose(fp);if((fp=fopen("E:\\Codefield\\C-code\\C-single\\yisheng.txt","r")) == NULL){printf("       文件打开失败!\n");return;}for(i=0; i<4; i++){fscanf(fp,"%s %s %d\n",dt[i].nam,dt[i].statu,&dt[i].fare);}fclose(fp);int fei[4];for(i=0; i<4; i++){for(j=0; j<4; j++){if(strcmp(zs[i].ysm,dt[j].nam) == 0){fei[i] = dt[j].fare;break;}}}printf("\n      ======================================\n");printf("        科室        挂号收费\n");printf("    --------------------------------------\n");printf("        外科普通号          %d\n\n",surgerySum1*fei[0]);printf("       外科专家号          %d\n\n",surgerySum2*fei[1]);printf("       内科普通号          %d\n\n",neikeSum1*fei[2]);printf("     内科专家号          %d",neikeSum2*fei[3]);printf("\n      ======================================\n");Sleep(3000);
}
/*降序显示不同科室当天门诊病人数*/
void sort()
{struct mz {char mzm[20];int rens;};struct mz arr[4] = {{"外科普通号",surgerySum1},{"外科专家号",surgerySum2},{"内科普通号",neikeSum1},{"内科专家号",neikeSum2}};int i,j,k;struct mz t;for(i=0; i<4; i++){k=i;for(j=i+1; j<4; j++){if(arr[j].rens > arr[k].rens)k = j;}if(k!=i){t = arr[i];arr[i] = arr[k];arr[k] = t;}}printf("\n     =========================================\n");printf("         科室         门诊人数\n");printf("    -----------------------------------------\n");printf("    %s             %d\n\n",arr[0].mzm,arr[0].rens);printf("       %s             %d\n\n",arr[1].mzm,arr[1].rens);printf("       %s             %d\n\n",arr[2].mzm,arr[2].rens);printf("       %s             %d",arr[3].mzm,arr[3].rens);  printf("\n       =========================================\n");Sleep(3000);
}
void menu() /*主菜单函数*/
{char menu[] = {"\n\n" "       ---------------------------------------------------------------------------------\n""       **********************************************************************************\n""       **                      欢迎使用××医院挂号系统                                **\n""\n""       **                      1. 登记病人信息                                         **\n""\n""       **                      2. 医生为病人进行诊治                                   **\n""\n""       **                      3. 病人放弃看病,从队列中删除                           **\n""\n"  "       **                      4. 查询病人信息                             **\n""\n"  "       **                      5. 查询科室信息                                    **\n""\n" "       **                      6. 查询某一病人在队列中的次序                           **\n""\n""       **                      7. 各诊室的剩余排队人数                                 **\n""\n"     "       **                      8. 显示各科室当天就诊人数                               **\n""\n"     "       **                      9. 统计各科室当天的挂号收费情况                         **\n""\n"     "       **                      10. 降序显示各诊室当天门诊人数                          **\n""\n"     "       **                      0. 退出系统                                             **\n""       **********************************************************************************\n""       ---------------------------------------------------------------------------------\n\n"};int select;do { printf("%s",menu);printf("      请按编号选择相应的操作: ");scanf("%d",&select);switch(select) {case 1:regist();break;case 2:printf("\n");int z;printf("       请选择要看诊的诊室号:1、2、3、4、 \n"); printf("     诊室号:");scanf("%d",&z);switch(z){case 1:surgery1 += outQueue(surgeryQue1);break;case 2:surgery2 += outQueue(surgeryQue2);break;case 3:neike3 += outQueue(neikeQue3);break;case 4:neike4 += outQueue(neikeQue4);break;}break;case 3:printf("\n");int zsh;char mingzi[20];printf("    请选择要放弃排队病人的诊室号:1、2、3、4、 \n"); printf("     诊室号:");scanf("%d",&zsh);printf("     请输入病人的姓名:");scanf("%s",mingzi);switch(zsh){case 1:deletePatient(surgeryQue1,mingzi);sur1++;break;case 2:deletePatient(surgeryQue2,mingzi);sur2++;break;case 3:deletePatient(neikeQue3,mingzi);nei3++;break;case 4:deletePatient(neikeQue4,mingzi);nei4++;break;}printf("     该病人放弃看病,成功离队!\n");Sleep(2000);break;case 4:searchPatient();break;case 5:searchKeshi();break;case 6:printf("\n");int zs;char ming[20];printf("     请选择要查询病人次序的诊室号:1、2、3、4、 \n"); printf("     诊室号:");scanf("%d",&zs);printf("      请输入病人的姓名:");scanf("%s",ming);switch(zs){case 1:getOrder(surgeryQue1,ming);break;case 2:getOrder(surgeryQue2,ming);break;case 3:getOrder(neikeQue3,ming);break;case 4:getOrder(neikeQue4,ming);break;}break;case 7:printShengyu();break;case 8:printJiuzhen();break;case 9:income();break;case 10:sort();break;}}while(select!=0);
}
int main()
{system("title xxx医院挂号系统");system("color FD");//设置系统背景色和前景色system("mode 100,30");surgeryQue1 = initQueue();surgeryQue2 = initQueue();neikeQue3 = initQueue();neikeQue4 = initQueue();menu();return 0; } 

大型医院挂号系统(数据结构课设)相关推荐

  1. 《数据结构课设》弗洛伊德算法设计校园导游系统

    大二上学期的数据结构课设分享一下,具体题目如下: 题目27:"校园导游系统"的设计与实现 1.问题描述 设计一个校园导游系统,为来访的客人提供信息查询服务. 2.基本要求 (1)从 ...

  2. 数据结构课设航班订票系统(C语言版)

    数据结构课设航班订票系统(C语言版) 课设要求 (1) 航班管理.每条航线设计出合理的信息,包括:起点和终点站名,航班号,成员额定,飞行周期.飞机型号.余票量.航班票价等 (2) 客户管理.订票的客户 ...

  3. 数据结构课设城市公交查询系统(C语言)

    公交线路图 一. 设计要求: 1.需要用到多个文件,例如文本文件,文件名stations.txt,保存站点信息,格式可以自行设计,例如:编号 站名.等等 2.设计公交线路所需的存储结构,将文件中的数据 ...

  4. 飞机订票系统 python实现(大二上数据结构课设)

    说明: 本博客是从课设报告中截取的重要部分.这个飞机订票系统是本人大二上的数据结构课设,功能相对完善,界面相对美观.图形界面,本来想用Qt5(python中一个图形界面的类库,风格偏向于win10)去 ...

  5. 数据结构课设_网页形式的景区导游

    一.前言 欢迎大家来到这里~~ 1.这次数据结构课设,笔者的题目是网页形式的导航系统. 2.数据结构方面应用了链表存储商品信息.图来存储景点和路径信息.在图的广度优先中还用到了队列: 3.具体的算法有 ...

  6. 医院挂号系统代码_基于SSH的医院在线挂号系统设计与实现

    医院挂号系统主要用于实现医院的挂号,前台基本功能包括:用户注册.用户登录.医院查询.挂号.取消挂号.修改个人信息.退出等. 后台基本功能包括:系统管理员登录.医院管理.科室管理.公告管理.退出系统等. ...

  7. 数据结构课设+校园导航系统+西安邮电大学

    数据结构课设+校园导航系统+西安邮电大学 设计目的:在校园建设不断完善的现在,为在校学生提供合适的行走路径,为来访的客人提供各种服务的信息:对于这些问题,可用图结构来表示校园交通网络,编写程序完成校园 ...

  8. 地大c语言课程设计题目,中国地质大学数据结构课设-全国铁路运输网最佳经由问题课程设计报告精选.doc...

    中国地质大学数据结构课设-全国铁路运输网最佳经由问题课程设计报告精选 数据结构 上机实习报告 实验题目:全国铁路运输网最佳经由问题 班级: 姓名: 学号: 完成日期:2017年4月25日 目录 课程设 ...

  9. springboot医院挂号系统的设计与实现毕业设计源码211633

    Springboot医院挂号系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克 ...

  10. (附源码)ssm医院挂号系统 毕业设计 250858

    医院挂号系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题. ...

最新文章

  1. boost::detail模块实现boost::blank的测试程序
  2. nginx配置文件中,location字段里面的root字段和别名alias
  3. C#.NET里面抽象类和接口有什么区别
  4. 开源 | CVPR 2021无需向量监督的矢量图生成算法
  5. linux编程基础黑马要点总结,黑马《linux基础编程》学习笔记(从6到10)
  6. Q82:三角形网格[Triangle Mesh]图形的平滑着色[Smooth Shading]
  7. 文件夹加密软件排行榜
  8. CRM原型、协同办公APP高保真原型/审批管理、办公申请、工单管理、任务管理、日程管理、工作报告、签到考勤、客户管理、销售线索、商机管理、订单管理、账务管理、统计报表、回款管理、发票管理、报销管理
  9. java单点登录需求分析与代码实现
  10. java调用快捷支付接口_Android客户端集成支付宝快捷支付
  11. 信息安全等级合规测评
  12. Qt 之 QDateEdit 和 QTimeEdit
  13. web开发第三方登陆之google+登陆
  14. 关于海关179公共的加签数据上报海关 的{code:20005,message:验签失败,total:0,serviceTime:} 解决办法
  15. 【二层网络和三层网络是什么?有什么区别?】
  16. 网站流量UV是什么意思?什么是流量UV?
  17. 开通微信零钱通的方法微信免手续费提现
  18. 前方高能!吹爆这份HTTP顶级教程
  19. 安卓开发环境搭建和手动打包总结
  20. XDOC云服务API(七)

热门文章

  1. 5分钟,教你创建在线聊天营销机器人
  2. Nginx配置域名重定向/域名跳转
  3. 威联通212-P 安装远程迅雷,docker安装远程迅雷
  4. Softmax和关于它的交叉熵损失函数详细求导过程
  5. 滴滴裁员赔偿方案,这才是好聚好散!
  6. 饥饿游戏[The Hunger Games]
  7. JDK-8274609 JEP 421: Deprecate Finalization for Removal
  8. 如何使用swagger的API接口获取数据并且封装
  9. C#WinForm中的太空侵略者
  10. 戴建业老师对李白和杜甫的讨论