怪兽不乖佩奇不爱 2021-06-30 12:14 采纳率: 87.5%
浏览 589
已结题

c语言学生宿舍管理系统

1.添加两个学生信息以上就只可以显示最后一个学生的信息 2.删除两个学生信息以上时就全部删除了,显示出来是什么信息都没有


```#include<stdio.h>
#include <conio.h>
#include<string.h>
#include <stdlib.h>
#include<windows.h>
typedef int datatype;
typedef struct s1                         //为struct s1取一个别名为STUDENT
{
    char       no[15] ;                      //学号
    char       name[15] ;                   //学生姓名
    char      score[20];                   //联系方式
    char      sushe[15];                   //宿舍 
    char      xingbei[10];                 //学生性别 
    char       hom[20] ;                 //学生家庭住址 
    struct s1  *next ;                    //指向后继结点的指针
    int          n;                       //添加学生信息的数量 
}changfa,*linklist;
 
void InputData(linklist &H){            //添加学生信息
    linklist r,p;
    H=(linklist)malloc(sizeof(changfa));//生成新结点
    r=H;
    p=(linklist)malloc(sizeof(changfa));
    int i;
    printf("输入学号:");
     scanf("%s",p->no);
    printf("输入姓名:");
     scanf("%s",p->name);
    printf("输入性别(男或女):");
     scanf("%s",p->xingbei); 
    printf("输入宿舍:");
     scanf("%s",p->sushe);
    printf("输入联系方式:");
     scanf("%s",p->score);
    printf("输入家庭住址:"); 
     scanf("%s",p->hom);
    r->next=p;
    r=p;
    printf("添加成功\n");
    getch();
    r->next=NULL;
}
void PrintMenu( )
{
    printf("\n\n");
    printf("***********************************************\n");
    printf("*                学生宿舍管理系统             *\n");
    printf("*   1. 添加学生信息                           *\n");
    printf("*   2. 查询学生信息(学号或姓名)             *\n");
    printf("*   3. 删除指定学生的记录                     *\n");
    printf("*   4. 修改指定学生的记录                     *\n");
    printf("*   5. 打印学生信息                           *\n");
    printf("*   6. 保存退出                               *\n");
    printf("***********************************************\n");
    printf("\n输入要进行的操作(1-6):");
}

int MenuSelect( )
{
    int key;
    PrintMenu();
    scanf("%d",&key);
    return(key);
}


void find(linklist &H)
{   
    linklist p;                                  
    char no[15]; char name[15];                   //定义一个字符数组no,name和str
    int choose;
    int i;
    p=H;
    printf("要查询的方式(1是学号,0是姓名):");  //查询方式(姓名或学号)
    scanf("%d",&choose);
    if(choose==1)
    { printf("输入要查询学生的学号:");
      scanf("%s",no);                          //用输入语句输入一个学号存储到no中
    }
    else if(choose==0)
    {  printf("输入要查询学生的姓名:");
       scanf("%s",name);                      //用输入语句输入一个姓名存储到name中
    }

    while(p!=NULL)
    {                   
        if (strcmp(p->no,no)==0||strcmp(p->name,name)==0)              //找到了要查询的数据
        {
            break;

                 
        }else{
            p=p->next;
        }
    }
    if(p!=NULL){
        printf("|----------------------------TUTE-------------------------|\n");
        printf("|    学号  |     姓名   | 性别| 宿舍 | 联系方式  |家庭住址| \n");
        printf("|%s|    %s    |  %s | %s  |%s|  %s  |\n",p->no,p->name,p->xingbei,p->sushe,p->score,p->hom); 
        printf("|----------------------------TUTE-------------------------|\n"); 
        

    }else{
        printf("没有此人");
    }
    
    getch();
}

void Delete( linklist &H)   
{
    linklist q,p;
    q=H;
    char no[15]; char name[15];                   //定义一个整数no(用来存储输入的学号)
    int choose;
    int i,j;
    printf("要删除的方式(1是学号,0是姓名):");  //删除方式(姓名或学号)
    scanf("%d",&choose);
    if(choose!=0)
    { printf("输入要删除学生的学号:");
      scanf("%s",no);                          //用输入语句输入一个学号存储到no中
    }
    else
    {  printf("输入要删除学生的姓名:");
       scanf("%s",name);                      //用输入语句输入一个姓名存储到name中
    }     
    while(q->next!=NULL)
    {                   
        if (strcmp(q->next->no,no)==0||strcmp(q->next->name,name)==0)              //找到了要查询的数据
        {
            break;
        
        }else{
            p=p->next;
        }
    }
    if(q->next!=NULL){
        p=q->next;
        q->next=p->next;
        p->next=p->next;
        free(p);
        printf("删除成功!\n");
        getch();
    }
}

void change(linklist &H )   
{
    linklist p;                                  
    char no[15];                 //定义一个字符数组no
    int i;
    p=H;

    printf("输入要修改学生的学号:");
    scanf("%s",no);                          //用输入语句输入一个学号存储到no中
    
    

    while(p!=NULL)
    {                   
        if (strcmp(p->no,no)==0)              //找到了要查询的数据
        {
            break;

                 
        }else{
            p=p->next;
        }
    }
    if(p!=NULL){
        
        printf("修改后姓名:");
         scanf("%s",p->name);
             printf("修改后性别:");
                  scanf("%s",p->xingbei);
        printf("修改后宿舍:");
         scanf("%s",p->sushe);
         printf("修改后联系方式:");
            scanf("%s",p->score);
        printf("修改后地址:");
      scanf("%s",p->hom);
          printf("修该成功!\n");
    }else{
        printf("修改失败");
    }
    
    getch();



    

    
    

}

void print(linklist &H)  
{        
    linklist p;
    p=H->next;
    printf("\n");
    printf("|----------------------------TUTE-------------------------|\n");
    printf("|    学号  |     姓名   | 性别| 宿舍 | 联系方式  |家庭住址|\n");
    printf("|----------|------------|-----|------|-----------|--------|\n");  
    while(p!=NULL)
    {
        {
        printf("|%s|    %s    |  %s |  %s |%s|  %s  |\n",p->no,p->name,p->xingbei,p->sushe,p->score,p->hom); 
        p=p->next;}
    }

    printf("|----------------------------TUTE-------------------------|\n");
    getch();
}





int main()
{
    linklist H;
    int key;
    system("color 0A");                  //改变执行窗口的背景色和字体色字体为绿色 
    while(1)                             //死循环
    {
        system("cls");
        key=MenuSelect();
        switch(key)
        {
            case 1:
                InputData(H);                //增加    
                break;
            case 2:
                find(H);                  //查询学生信息(学号或姓名)
                break;
            case 3:
                Delete(H);                 //删除一个指定学生的记录数据
                break;
            case 4:                        //修改一个指定学生的记录数据
                change(H);
                break;
            case 5:                        //打印所有记录数据
                print(H);
                break;
            case 6:                        //退出程序
                exit(0);
        }
    }
}
  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-07-01 09:12
    关注

    修改完善如下,供参考:

    //c语言学生宿舍管理系统
    
    
    #include<stdio.h>
    #include <conio.h>
    #include<string.h>
    #include <stdlib.h>
    #include<windows.h>
    typedef int datatype;
    typedef struct s1                         //为struct s1取一个别名为STUDENT
    {
        char       no[15] ;                      //学号
        char       name[15] ;                   //学生姓名
        char      score[20];                   //联系方式
        char      sushe[15];                   //宿舍 
        char      xingbei[10];                 //学生性别 
        char       hom[20] ;                 //学生家庭住址 
        struct s1  *next ;                    //指向后继结点的指针
        int          n;                       //添加学生信息的数量 
    }changfa,*linklist;
    
    void InputData(linklist &H){            //添加学生信息
        linklist r,p;
        r=H;
        p=(linklist)malloc(sizeof(changfa));
        int i;
        printf("输入学号:");
         scanf("%s",p->no);
        printf("输入姓名:");
         scanf("%s",p->name);
        printf("输入性别(男或女):");
         scanf("%s",p->xingbei);
        printf("输入宿舍:");
         scanf("%s",p->sushe);
        printf("输入联系方式:");
         scanf("%s",p->score);
        printf("输入家庭住址:");
         scanf("%s",p->hom);
        p->next = r->next;
        r->next = p;
        printf("添加成功\n");
        getch();
    }
    void PrintMenu( )
    {
        printf("\n\n");
        printf("***********************************************\n");
        printf("*                学生宿舍管理系统             *\n");
        printf("*   1. 添加学生信息                           *\n");
        printf("*   2. 查询学生信息(学号或姓名)             *\n");
        printf("*   3. 删除指定学生的记录                     *\n");
        printf("*   4. 修改指定学生的记录                     *\n");
        printf("*   5. 打印学生信息                           *\n");
        printf("*   6. 保存退出                               *\n");
        printf("***********************************************\n");
        printf("\n输入要进行的操作(1-6):");
    }
    int MenuSelect( )
    {
        int key;
        PrintMenu();
        scanf("%d",&key);
        return(key);
    }
    
    void find(linklist H)
    {
        linklist p;
        char no[15]; //char name[15];                   //定义一个字符数组no,name和str
        int choose;
        int i;
        p=H;
        printf("要查询的方式(1是学号,0是姓名):");  //查询方式(姓名或学号)
        scanf("%d",&choose);
        if(choose==1)
        { printf("输入要查询学生的学号:");
          scanf("%s",no);                          //用输入语句输入一个学号存储到no中
        }
        else if(choose==0)
        {  printf("输入要查询学生的姓名:");
           scanf("%s",no);                      //用输入语句输入一个姓名存储到name中
        }
        while(p!=NULL)
        {
            if (strcmp(p->no,no)==0||strcmp(p->name,no)==0)              //找到了要查询的数据
            {
                break;
                     
            }else{
                p=p->next;
            }
        }
        if(p!=NULL){
            printf("|----------------------------TUTE-------------------------|\n");
            printf("|    学号  |     姓名   | 性别| 宿舍 | 联系方式  |家庭住址| \n");
            printf("|%s|    %s    |  %s | %s  |%s|  %s  |\n",p->no,p->name,p->xingbei,p->sushe,p->score,p->hom);
            printf("|----------------------------TUTE-------------------------|\n"); 
     
        }else{
            printf("没有此人");
        }
        getch();
    }
    void Delete( linklist &H)
    {
        linklist q,p;
        p = H;
        q = H->next;
        char no[15]; //char name[15];                   //定义一个整数no(用来存储输入的学号)
        int choose;
        int flg=0;
        printf("要删除的方式(1是学号,0是姓名):");  //删除方式(姓名或学号)
        scanf("%d",&choose);
        if(choose!=0)
        { printf("输入要删除学生的学号:");
          scanf("%s",no);                          //用输入语句输入一个学号存储到no中
        }
        else
        {  printf("输入要删除学生的姓名:");
           scanf("%s",no);                      //用输入语句输入一个姓名存储到name中
        }
        while(q!=NULL)
        {
            if (strcmp(q->no,no)==0||strcmp(q->name,no)==0)//找到了要查询的数据
            {
                flg = 1;
                p->next = q->next;
                free(q);
                printf("删除成功!\n");
                break;
            }else{
                p = q;
                q = q->next;
            }
        }
        if(flg==0) printf("未找到想删除的记录!\n");
        getch();
    }
    void change(linklist &H )   
    {
        linklist p;                                  
        char no[15];  //定义一个字符数组no
        int i;
        p=H;
        printf("输入要修改学生的学号:");
        scanf("%s",no);  //用输入语句输入一个学号存储到no中
        
        while(p!=NULL)
        {                   
            if (strcmp(p->no,no)==0) //找到了要查询的数据
            {
                break;
                     
            }else{
                p=p->next;
            }
        }
        if(p!=NULL){
            printf("修改后姓名:");
            scanf("%s",p->name);
    
            printf("修改后性别:");
            scanf("%s",p->xingbei);
    
            printf("修改后宿舍:");
            scanf("%s",p->sushe);
    
            printf("修改后联系方式:");
            scanf("%s",p->score);
    
            printf("修改后地址:");
            scanf("%s",p->hom);
    
            printf("修该成功!\n");
        }else{
            printf("未找到需修改的记录!\n");
        }
        getch();
    }
    void print(linklist H)
    {        
        linklist p;
        p=H->next;
        printf("\n");
        printf("|----------------------------TUTE-------------------------|\n");
        printf("|    学号  |     姓名   | 性别| 宿舍 | 联系方式  |家庭住址|\n");
        printf("|----------|------------|-----|------|-----------|--------|\n");  
        while(p!=NULL)
        {
            printf("|%s|    %s    |  %s |  %s |%s|  %s  |\n",p->no,
                       p->name,p->xingbei,p->sushe,p->score,p->hom);
            p=p->next;
        }
        printf("|----------------------------TUTE-------------------------|\n");
        getch();
    }
     
     
    int main()
    {
        linklist H=NULL;
        H=(linklist)malloc(sizeof(changfa));//生成新结点
        H->next = NULL;
        int key;
        system("color 0A");                  //改变执行窗口的背景色和字体色字体为绿色
        while(1)                             //死循环
        {
            system("cls");
            key=MenuSelect();
            switch(key)
            {
                case 1:
                    InputData(H);                //增加
                    break;
                case 2:
                    find(H);                  //查询学生信息(学号或姓名)
                    break;
                case 3:
                    Delete(H);                 //删除一个指定学生的记录数据
                    break;
                case 4:                        //修改一个指定学生的记录数据
                    change(H);
                    break;
                case 5:                        //打印所有记录数据
                    print(H);
                    break;
                case 6:                        //退出程序
                    exit(0);
            }
        }
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月20日

悬赏问题

  • ¥30 自适应 LMS 算法实现 FIR 最佳维纳滤波器matlab方案
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像