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);
        }
    }
}

修改完善如下,供参考:

//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);
        }
    }
}