噫吁汐 2022-03-02 15:37 采纳率: 95%
浏览 62
已结题

c语言,医院管理系统,无法返回菜单


#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct patients
{
    char name[20];
    char id_number[20];
    char disease[20];
    char bed_number[5];
    int q;
    struct patients* pnext;
};
struct patients* create(int *n)
{
    struct patients *pnew,*pend,*phead;
    char space[10]={"********"};
    char a[4];
    phead=pnew=pend=(struct patients*)malloc(sizeof(struct patients));
    if(*n==0)
    {
        phead->pnext=NULL;
    }
    printf("请输入患者的姓名:");
    scanf("%s",&pnew->name);
    printf("请输入患者的证件号:");
    scanf("%s",&pnew->id_number);
    printf("请输入患者所属的科室:");
    scanf("%s",&pnew->disease);
    printf("请输入患者的病床号:");
    scanf("%s",&pnew->bed_number);
    printf("输入99结束注册");
    scanf("%d",&pnew->q);
    *n++;
    
    FILE *fp;
    fp=fopen("病人信息.txt","w");
    fputs(pnew->name,fp);
    fputs(space,fp);
    fputs(pnew->id_number,fp);
    fputs(space,fp);
    fputs(pnew->disease,fp);
    fputs(space,fp);
    fputs(pnew->bed_number,fp);
    fputc('\n',fp);
    fclose(fp);
    
    
    for(;;)
    {
        if(pend->q==99)
        {
            break;
        }
        pnew=(struct patients*)malloc(sizeof(struct patients));
        printf("请输入患者的姓名:");
        scanf("%s",&pnew->name);
        printf("请输入患者的证件号:");
        scanf("%s",&pnew->id_number);
        printf("请输入患者所属的科室:");
        scanf("%s",&pnew->disease);
        printf("请输入患者的病床号:");
        scanf("%s",&pnew->bed_number);
        printf("输入99结束注册");
        scanf("%d",&pnew->q);
        *n++;
        pend->pnext=pnew;
        pend=pnew;
        if(*n==19)
        {
            printf("床位已满,自动退出循环\n");
            return phead;
            
        }
        
        fp=fopen("病人信息.txt","a");
        fputs(pnew->name,fp);
        fputs(space,fp);
        fputs(pnew->id_number,fp);
        fputs(space,fp);
        fputs(pnew->disease,fp);
        fputs(space,fp);
        fputs(pnew->bed_number,fp);
        fputc('\n',fp);
        fclose(fp);
        
    }
    return phead;
    
    
}
void welcome(void)
{
     printf("-------------------------------------\n");
     printf("                                     \n");
     printf("                                     \n");
     printf("                                     \n");
     printf("        欢迎来到住院部管理界面       \n");
     printf("                                     \n");
     printf("        输入1进入病床管理界面        \n");
     printf("        输入2进入患者管理界面        \n");
     printf("                                     \n");
     printf("-------------------------------------\n");
}
void bed(void)
{
     printf("-------------------------------------\n");
     printf("                                     \n");
     printf("       输入1查看病床情况             \n");
     printf("       输入2修改病床信息             \n");
     printf("       输入3进入保修页面             \n");
     printf("       输入0返回住院部管理界面       \n");
     printf("                                     \n");
     printf("                                     \n");
     printf("                                     \n");
     printf("-------------------------------------\n");
}
void see(int* p)
{
    int j;
    printf("0表示空闲,1表示有人,2表示损坏");
    for(j=0;j<20;j++)
    {
        if(j%5==0)
        {
            printf("\n");
        }
        printf("%d  ",*(p+j));
    }
}
void change(int *p)
{
    int j,k;
    printf("请输入床号的位置:\n先输入行,后输入列,中间用逗号隔开\n");
    scanf("%d,%d",&j,&k);
    int t=5*(j-1)+k-1;
    printf("该床为第%d号床,请输入它的状态:\n0表示空闲,1表示有人\n",(t+1));
    scanf("%d",(p+t));
    system("cls");
    printf("修改成功\n");
    see(p);
    
}
void repair(int *p)
{
    int j,k;
    printf("请输入床号的位置:\n先输入行,后输入列,中间用逗号隔开\n");
    scanf("%d,%d",&j,&k);
    int t=5*(j-1)+k-1;
    printf("该床为第%d号床,已记录他的损坏信息,我们会尽快维修。",(t+1));
    *(p+t)=2; 
    
    FILE *fp;
    fp=fopen("维修信息.txt","w");
    fputs("有设备损坏,请登录住院部界面查看。",fp);
    fclose(fp);
    
}
void person(void)
{
     printf("-------------------------------------\n");
     printf("                                     \n");
     printf("        输入1注册所有病人的信息      \n");
     printf("        输入2查看病人信息            \n");
     printf("        输入3修改病人信息            \n");
     printf("                                     \n");
     printf("                                     \n");
     printf("        输入0返回住院部管理界面      \n");
     printf("                                     \n");
     printf("-------------------------------------\n");
} 
struct patients* re(int *n)
{
    struct patients *phead;
    phead=create(n);
    return phead;

}
void see_patients(struct patients *phead)
{
    struct patients *pend;
    pend=phead;
    for(;;)
    {
        printf("%s******",pend->name);
        printf("%s******",pend->id_number);
        printf("%s******",pend->disease);
        printf("%s******",pend->bed_number);
        printf("\n");
        pend=pend->pnext;
        if(pend==NULL)
        {
            break;
        }
    }
    
}
struct patients *change_patients(int b,struct patients *phead)
{
    int i=0;
    struct patients *pend,*pnew,*p,*q;
    pend=phead;
    
    
    for(i;i<b-1;i++)
    {
        q=pend;//one
        pend=pend->pnext;//two
        p=pend->pnext;//three
    }
    
    pnew=(struct patients*)malloc(sizeof(struct patients));
    printf("请输入患者的姓名:");
    scanf("%s",&pnew->name);
    printf("请输入患者的证件号:");
    scanf("%s",&pnew->id_number);
    printf("请输入患者所属的科室:");
    scanf("%s",&pnew->disease);
    printf("请输入患者的病床号:");
    scanf("%s",&pnew->bed_number);
    pnew->pnext=p;
    q->pnext=pnew;
    
    
    
    return phead;
    
}
void main()
{
    
    int a[20],i,j,k;
    i=0;
    int icount=0;
    struct patients *phead;
    for(i=0;i<20;i++)
    {
        a[i]=0;
    }
    
    
    
    
    menu:
    welcome();
    printf("请输入:");
    scanf("%d",&i); 
    
    if(i==1)
    {
        system("cls");
        bed();
        printf("请输入:");
        scanf("%d",&j); 
        system("cls");
        if(j==1)
        {
            see(a);
            getchar();
            getchar();
            system("cls");
            goto menu;
        }
        else if(j==2)
        {
            change(a);
            getchar();
            getchar();
            system("cls");
            goto menu;
            
        }
        else if(j==3)
        {
            repair(a);
            getchar();
            getchar();
            system("cls");
            goto menu;
        }
        else if(j==0)
        {
            goto menu;
        }
        else
        {
            printf("输入有误,请重新输入\n");
            goto menu;
        }
    }
    
    else if(i==2)
    {
        system("cls");
        person();
        printf("请输入:");
        scanf("%d",&k); 
        if(k==1)
        {
            system("cls");
            phead=re(&icount);
            getchar();
            system("cls");
            goto menu;
        }
        else if(k==2)
        {
            system("cls");
            see_patients(phead);
            system("cls");
            goto menu;
        }
        else if(k==0)
        {
            goto menu;
        }
        else if(k==3)
        {
            int l;
            printf("请输入想修改的编号:");
            scanf("%d",&l);
            change_patients(l,phead);
            getchar();
            getchar();
            system("cls");
            goto menu;
        } 
        
    }
    
    else
    {
        system("cls");
        printf("请输入有效信息");
        goto menu;
    }
    
    
}

上面是代码
问题是:进入患者管理界面,查看病人信息后无法回到主菜单,程序会直接结束,我不太清楚为什么

  • 写回答

1条回答 默认 最新

  • 噫吁汐 2022-03-02 15:50
    关注

    一个链表查看时不会直接结束,只要链表长度大于等于两个,程序就没有办法执行后面的goto

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月10日
  • 已采纳回答 3月2日
  • 创建了问题 3月2日

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证