
用C语言编写一个医院管理程序 20
要求能够录入,和显示医院病人的祝愿信息,包括姓名,性别,住院时间,病房号码等基本信息;并且插入,修改,删除,记录;所有信息应按姓名首写英文字母顺序排序。...
要求能够录入,和显示医院病人的祝愿信息,包括姓名,性别,住院时间,病房号码等基本信息;并且插入,修改,删除,记录;所有信息应按姓名首写英文字母顺序排序。
展开
展开全部
给你一个之前写过的,有些姓名,性别,住院时间,病房号码等基本信息,你自己应该会加入吧。程序的主体已经写好了,插入,删除,显示记录都有了。
/******** 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;
}
追问
大哥,看你搞这么多字知道你不容易,我就是搞个应付考试,可是你这个我们就没学过,学的都是最基础的,我连指针神马的都搞不清楚
追答
结构体学过没?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询