用C语言编写一个医院管理程序 20

要求能够录入,和显示医院病人的祝愿信息,包括姓名,性别,住院时间,病房号码等基本信息;并且插入,修改,删除,记录;所有信息应按姓名首写英文字母顺序排序。... 要求能够录入,和显示医院病人的祝愿信息,包括姓名,性别,住院时间,病房号码等基本信息;并且插入,修改,删除,记录;所有信息应按姓名首写英文字母顺序排序。 展开
 我来答
15238817035
2013-12-16
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
给你一个之前写过的,有些姓名,性别,住院时间,病房号码等基本信息,你自己应该会加入吧。程序的主体已经写好了,插入,删除,显示记录都有了。

/******** written by C_Shit_Hu ************/

////////////////采用循环队列实现///////////////

/****************************************************************************/
/* 
空队列:front == rear
满队列:q.rear + 1) % INIT_SQ_QUEUE_LEN == q.front
伪队头指针:pfront

非空队列中,front始终指向队列头元素,rear始终指向队列尾元素的下一个位置。
判断循环队列是否充满,有两种方法:
1. 设立一个标记,当front==rear时,用于标示队列是空还是满,比如当前队列元素个数等。
2. 少用一个空间,如果rear后一位置是front时则认为是满。
*/
/****************************************************************************/

#include <iostream>
#include <stdlib.h>
#include <malloc.h>
using namespace std;

#define INIT_SQ_QUEUE_LEN 100  
typedef int node_type;

typedef struct __sq_queue_st {
node_type *base;
node_type pfront;
int front;
int rear;
} sq_queue_st;

void init_sq_queue(sq_queue_st &q);   // 初始化循环链表函数
int en_queue(sq_queue_st &q);  // 插入元素调用函数
int de_queue(sq_queue_st &q); // 删除元素
int quene_lenght(sq_queue_st &q);    // 返回长度
int queue_empty(sq_queue_st &q);    // 判断是否为空
void quene_trvase(sq_queue_st &q);  // 链表遍历输出

// 初始化
void init_sq_queue(sq_queue_st &q)
{
q.base = (node_type *)malloc(sizeof(node_type) * INIT_SQ_QUEUE_LEN);
if(!q.base) exit(1);
q.front = q.rear = 0;
}

// 插入
int en_queue(sq_queue_st &q, node_type data)
{
int i, len;
if((q.rear + 1) % INIT_SQ_QUEUE_LEN == q.front)
return -1;
    len = quene_lenght(q);
q.pfront = q.front;
for (i=1; i<=len && (q.pfront) % INIT_SQ_QUEUE_LEN != (q.rear+1); i++, q.pfront++ )
{
if (q.base[q.pfront]  == data )
{
printf(">>病人%d已经在队列中,请不要重复排队!\n", data);
return -1;
exit(1);
}
}
q.base[q.rear] = data;
q.rear = (q.rear + 1) % INIT_SQ_QUEUE_LEN;
cout << ">>病人"<< data <<"排队成功。\n";
    len = quene_lenght(q);
printf(">>此时的循环队列长度为:%d.\n", len);
return 0;
}

// 删除
int de_queue(sq_queue_st &q)
{
//int data;
if(q.rear == q.front)
{
cout <<">>没有人排队哦。\n";
return -1;
}
//q.pfront = q.front;
//data = q.base[q.front];
cout << ">>病人" <<q.base[q.front]<< "正在就诊\n";
q.front = (q.front+1) % INIT_SQ_QUEUE_LEN;
return 0;
}
// 长度
int quene_lenght(sq_queue_st &q)
{
return (q.rear - q.front + INIT_SQ_QUEUE_LEN) % INIT_SQ_QUEUE_LEN;
}

// 判空
int queue_empty(sq_queue_st &q)
{
return q.front == q.rear;
}

// 遍历
void quene_trvase(sq_queue_st &q)
{
int i, len;
len = quene_lenght(q);
cout << ">>共有"<< len <<"个人正在排队,依次是:\n  >>病人: ";
q.pfront = q.front;

for (i=1; i<=len && (q.pfront) % INIT_SQ_QUEUE_LEN != (q.rear+1); i++, q.pfront++ )
     cout << q.base[q.pfront] << ' ';
cout << endl ;
}

// 初始化
void Sys_Init()
{
cout << "*************欢迎进入候诊系统*************" << endl;
cout << "1:病人排队       2:病人就诊 \n3:查看排队       4.排队结束,依次就诊 \n5.下班           6.清屏并初始化系统"<< endl;
cout << "**********本系统限定最大队列100人*********" << endl;
}

int main()
{
int sel, flag=1, num, i;
sq_queue_st q;
system("echo off");
system("color 2");
init_sq_queue(q);
Sys_Init();
while (flag==1)  /*循环执行*/
{
lb: cout << ">>>>>>请选择相应的功能继续(输入序号):" ;
cin >> sel;
if (sel>6 || sel <=0)
{
cout << "您输入选项不正确!" << endl;
goto lb;


switch(sel) 
{
case 1:{
cout << "  >>>>请输入病历号:";
cin >> num;
en_queue(q, num);

   }break;
case 2:{
de_queue(q);
   }break;
case 3:{
if (queue_empty(q))
cout << ">>没有人排队哦." << endl;
else
quene_trvase(q) ;
   }break;
case 4:{
cout << ">>排队结束,请按照先后顺序诊治!\n" << endl;
flag = 0;
quene_trvase(q);
   }break;
case 5:{
cout << ">>下班时间到咯。请余下的病人,明天再来!" << endl;
   }break;
case 6: {
system("cls");
Sys_Init(); 
if(!queue_empty(q))
de_queue(q);
}break;

}

}
/*
while(!queue_empty(&q)) 
{
de_queue(&q, &i);
printf("%d\n", i);
}*/

return 0;
}
追问
大哥,看你搞这么多字知道你不容易,我就是搞个应付考试,可是你这个我们就没学过,学的都是最基础的,我连指针神马的都搞不清楚
追答
结构体学过没?
盛夏小猫猫cB
2013-12-16
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
楼上的代码明显不符合题目要求,复制粘贴的吧,这个医院管理程序,我可以用C做出来,但是得用到结构体哦,如果这个没学,就没办法了
追问
结构体老师讲了,只是我没听。求大神给个可以运行的程序 。拜谢。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式