用队列实现医院管理系统(链表)

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define OK 1
#define ERROR -1
typedef int status;
typedef struct{
    int number;
    char name[100];
}ElemType;
typedef struct Qnode{
    ElemType data;
    struct Qnode *next;
}Qnode,*QuenePtr;
typedef struct{
    QuenePtr front;
    QuenePtr rear;
}LinkQuene;
status CreateQuene(LinkQuene &Q);
status EnQuene(LinkQuene &Q,int n);
status DeQuene(LinkQuene &Q);
status SortQuene(LinkQuene Q,int e);
status Sort2Quene(LinkQuene Q);
status Sort3Quene(LinkQuene Q);
status CompareQuene(LinkQuene Q,QuenePtr p);
int main()
{
    int a,m,n,e,j;
    LinkQuene Q;
    Q.front=NULL;
    QuenePtr q;
    while(1)
    {
        cout<<"1,上班              "<<"2,候诊              "<<"3,就诊"<<endl;
        cout<<"4,查看排队          "<<"5,查看看诊          "<<"6,下班"<<endl;
        cout<<"请输入想要执行操作序号:"; 
        cin>>a;
        switch(a)
        {
            case 1:
            {
                m=CreateQuene(Q);
                if(m==-1)
                {
                    cout<<"上班失败!请重新上班"<<endl; 
                }
                else
                {
                    cout<<"上班成功!"<<endl;
                }
                break;
            }
            case 2:
            {
                if(Q.front==NULL)
                {
                    cout<<"请先上班再输入候诊病人的信息!"<<endl;
                    break; 
                }
                cout<<"请输入候诊病人的个数:";
                cin>>n;
                m=EnQuene(Q,n);
                if(m==1)
                {
                    cout<<"候诊病人输入成功!"<<endl;
                }
                break;
            }
            case 3:
            {
                m=DeQuene(Q);
                if(m==1)
                {
                    cout<<"排在最前面的病人已就诊!"<<endl;
                }
                else
                {
                    cout<<"已无病人候诊,无法就诊!"<<endl; 
                }
                break;
            }
            case 4:
            {
                q=Q.front->next;
                cout<<"请输入查看人的病历号:";
                cin>>e;
                m=SortQuene(Q,e);
                if(m==-1)
                {
                    cout<<"此病历号不存在!查看失败!"<<endl;
                }
                else if(m==0)
                {
                    cout<<"此病人是第一个,前面无病人!"<<endl; 
                }
                else
                {
                    cout<<"此病人前面有"<<m<<"个病人"<<endl;
                    cout<<"其病历号和姓名以此为:"<<endl; 
                    for(j=0;j<m;j++)
                    {
                        cout<<q->data.number<<" "<<q->data.name<<endl;
                        q=q->next;
                    }
                }
                break;
            }
            case 5:
            {
                m=Sort2Quene(Q);
                if(m==-1)
                {
                    cout<<"已无病人候诊!"<<endl;
                }
                else
                {
                    cout<<"候诊人数为:"<<m<<endl;
                    cout<<"候诊人的病历号和姓名以此为:"<<endl;
                    Sort3Quene(Q);
                }
                break;
            }
            case 6:
            {
                m=Sort2Quene(Q);
                if(m==-1)
                {
                    cout<<"已无病人候诊,可以下班,欢迎下次上班!";
                    exit(0);
                }
                else
                {
                    cout<<"还有病人等待候诊,无法下班!"<<endl;
                }
                break;
            }
        }
        system("pause");
        system("cls");
    }
}
status CreateQuene(LinkQuene &Q)
{
    Q.front=new Qnode;
    if(!Q.front)
    return ERROR;
    Q.front->next=NULL;
    Q.rear=Q.front;
    return OK;
}
status EnQuene(LinkQuene &Q,int n)
{
    QuenePtr p;
    int i=0,j;
    p=new Qnode;
    printf("请输入第%d个病人的病历号和姓名:",i+1);
    scanf("%d%s",&p->data.number,p->data.name);
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
    for(i=1;i<n;i++)
    {
        p=new Qnode;
        printf("请输入第%d个病人的病历号和姓名:",i+1);
        scanf("%d%s",&p->data.number,p->data.name);
        j=CompareQuene(Q,p);
        while(j==-1)
        {
            cout<<"此病历号前面已存在,请重新输入病历号!"<<endl;
            printf("请输入第%d个病人的病历号和姓名:",i+1);
            scanf("%d%s",&p->data.number,p->data.name);
            j=CompareQuene(Q,p);
        }
        p->next=NULL;
        Q.rear->next=p;
        Q.rear=p;
    }
    return OK;
}
status DeQuene(LinkQuene &Q)
{
    if(Q.front==Q.rear)
    return ERROR;
    QuenePtr p;
    p=Q.front->next;
    Q.front->next=p->next;
    if(Q.rear==p)
    Q.rear=Q.front;
    delete p;
    return OK;
}
status SortQuene(LinkQuene Q,int e)
{
    QuenePtr p;
    int i=0;
    p=Q.front->next;
    while(p!=NULL)
    {
        if(p->data.number==e)
        {
            break;
        }
        else
        {
            i++;
            p=p->next;
        }
    }
    if(p==NULL)
    return ERROR;
    else
    return i;
}
status Sort2Quene(LinkQuene Q)
{
    int i=0;
    if(Q.front==Q.rear)
    return ERROR;
    QuenePtr p;
    p=Q.front->next;
    while(p!=NULL)
    {
        i++;
        p=p->next;
    }
    return i;
}
status Sort3Quene(LinkQuene Q)
{
    QuenePtr p;
    p=Q.front->next;
    while(p!=NULL)
    {
        cout<<p->data.number<<" "<<p->data.name<<endl;
        p=p->next;
    }
}
status CompareQuene(LinkQuene Q,QuenePtr p)
{
    QuenePtr q;
    q=Q.front->next;
    while(q!=NULL)
    {
        if(q->data.number==p->data.number)
        {
            return ERROR;
        }
        q=q->next; 
    }
    return OK;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用链表实现一个简单的图书管理系统。每本书可以表示为一个节点,节点包含图书的相关信息,并且通过链表的方式链接起来。 首先,我们可以定义一个图书类,该类包含以下属性: - 书名 - 作者 - 出版社 - ISBN号 - 是否借出 然后,我们定义一个链表类,该类包含以下属性和方法: - 头节点:指向第一个图书节点 - 尾节点:指向最后一个图书节点 - 添加图书:在链表末尾添加一个新的图书节点 - 删除图书:根据ISBN号找到并删除对应的图书节点 - 查找图书:根据书名或作者查找对应的图书节点 - 借出图书:根据ISBN号将对应的图书节点的借出状态设置为已借出 - 归还图书:根据ISBN号将对应的图书节点的借出状态设置为未借出 - 展示所有图书:遍历链表并打印所有图书的信息 下面是一个示例的代码实现: ```python class Book: def __init__(self, title, author, publisher, isbn): self.title = title self.author = author self.publisher = publisher self.isbn = isbn self.borrowed = False class LinkedList: def __init__(self): self.head = None self.tail = None def add_book(self, book): if not self.head: self.head = book self.tail = book else: self.tail.next = book self.tail = book def remove_book(self, isbn): current = self.head previous = None while current: if current.isbn == isbn: if current == self.head: self.head = current.next else: previous.next = current.next if current == self.tail: self.tail = previous break previous = current current = current.next def find_book(self, keyword): matches = [] current = self.head while current: if keyword in [current.title, current.author]: matches.append(current) current = current.next return matches def borrow_book(self, isbn): current = self.head while current: if current.isbn == isbn: current.borrowed = True break current = current.next def return_book(self, isbn): current = self.head while current: if current.isbn == isbn: current.borrowed = False break current = current.next def display_books(self): current = self.head while current: print(f'Title: {current.title}') print(f'Author: {current.author}') print(f'Publisher: {current.publisher}') print(f'ISBN: {current.isbn}') print(f'Borrowed: {"Yes" if current.borrowed else "No"}') print('---------------') current = current.next ``` 使用这个链表实现的图书管理系统,你可以按需添加、删除、查找、借出、归还和展示图书。你可以根据需要自定义其他方法或功能来满足你的具体需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值