[C] 結構體測試程序 -- 學生信息管理系統


1. 菜單功能

2. 添加學生信息功能

3. 學生姓名列表

4. 所有學生詳細列表功能

5. 按姓名查找功能

6. 按年齡查找功能

7. 按姓別查找功能

8. 按身高查找功能

9. 刪除學生信息功能

10. 退出功能


/*
 *1. 菜單功能
 *2. 添加學生信息功能
 *3. 學生姓名列表
 *4. 所有學生詳細列表功能
 *5. 按姓名查找功能
 *6. 按年齡查找功能
 *7. 按姓別查找功能
 *8. 按身高查找功能
 *9. 刪除學生信息功能
 *10. 退出功能
 *
 * */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/*定義一個學生信息結構體*/
struct student
{
    char name[20];
    int age;
    int sex;
    int height;
};

/*定義全局變量*/
int i;
struct student stu[100];


/*添加用戶*/
struct student addstu(void)
{
    struct student stu;
    char name[20];
    
    printf("\n");
    printf("Add a student:\n");
    
    printf("------------------------------\n");

    printf("input name:\n");
    scanf("%s", name);
    strcpy(stu.name, name);
    
    printf("input age:\n");
    scanf("%d", &stu.age);

    printf("input sex(0:male;1:female)\n");
    scanf("%d", &stu.sex);

    printf("input height:\n");
    scanf("%d", &stu.height);

    printf("------------------------------\n\n");
    
    return stu;
}

/*顯示用戶信息*/
void showstu(struct student stu)
{
    printf("------------------------------\n");

    printf("Name: %s\n", stu.name);
    printf("Age: %d\n", stu.age);
    printf("Sex(0:male;1:female): %d\n:", stu.sex);
    printf("Height: %d\n", stu.height);
    
    printf("------------------------------\n\n");

}


/*刪除用戶
 *
 *說明:
 *依用戶名來查找需要刪除的用戶,
 *找到相對應的用戶信息後,
 *將它後面一位學生的信息賦值給它,
 *依次將後面的的學生信息都向前移一位,
 *這樣就算是刪掉了一位用戶
 * */
void delstu()
{
    char name[20];
    int j,k,t;
    t=0;
   

    printf("please input a name:\n");
    scanf("%s", name);

    for(j=0;j<i;j++)
    {
        if(!strcmp(stu[j].name, name))
        {
            if(j==i) //如果刪除的是最後一次,直接將i減一就行
            {
                i--;
                t++;
            }
            else
            {
                for(k=j;k<i-1;k++)
                {
                    stu[k] = stu[k+1]; /*如果刪除的不是最後一次,依次將後面用戶賦值給前一次用戶*/  
                }
            t++;
            i--;
            }
        }
    }
    if(t==0)
    {
        printf("------------------------------\n");
        printf("There is not such student!\n\n");
        printf("------------------------------\n]n");
    }
    else
    {
        printf("------------------------------\n");
        printf("刪除成功!\n");
        printf("------------------------------\n\n");
    }
}


/*依姓名查找學生信息*/
void selbyname()
{
    char name[20];
    int j,t;
    t=0;

    printf("please input a name:\n");
    scanf("%s", name);

    for(j=0;j<i;j++)
    {
        if(!strcmp(stu[j].name, name))/*strcmp()比較後,如果相同返回0,而我們需要的是1,所以取反*/
        {
            showstu(stu[j]);
            t++;
        }
    }

    if(t==0)
    {
        printf("------------------------------\n");
        printf("There is no such student!\n");
        printf("------------------------------\n\n");
    }
}

/*依年齡查找學生信息*/
void selbyage()
{
    int j,k,t,n;
    n=0;

    printf("input a top age:\n");
    scanf("%d", &j);

    printf("input a bottom age:\n");
    scanf("%d", &k);

    for(t=0;t<i;t++)
    {
        if(stu[t].age > k && stu[t].age < j)
        {
            showstu(stu[t]);
            n++;
        }
    }

    if(n==0)
    {
        printf("------------------------------\n");
        printf("There is no such student!\n\n");
        printf("------------------------------\n\n");
    }
}


/*依姓別查找學生信息*/
void selbysex()
{
    int j,k,n;
    n=0;
    printf("input sex:\n");
    scanf("%d", &j);

    for(k=0;k<i;k++)
    {
        if(stu[k].sex == j)
        {
            showstu(stu[k]);
            n++;
        }
    }

    if(n==0)
    {
        printf("------------------------------\n");
        printf("There is no such student!\n\n");
        printf("------------------------------\n\n");
    }
}


/*依身高查找學生信息*/
void selbyheight()
{
    int j,k,m,n;
    n=0;
    
    printf("input a top height:\n");
    scanf("%d", &j);

    printf("input a bottom height:\n");
    scanf("%d", &k);

    for(m=0;m<i;m++)
    {
        if(stu[m].height < j && stu[m].height > k)
        {
            showstu(stu[m]);
            n++;
        }
    }

    if(n==0)
    {
        printf("------------------------------\n");
        printf("There is no such a student!\n\n");
        printf("------------------------------\n\n");

    }
}

/*菜單功能,供用戶選擇*/
int menu()
{
    int m;

    printf("Please select a menu:\n");
    printf("    1. Add a student.\n");
    printf("    2. List all studnet name.\n");
    printf("    3. List all informations of students.\n");
    printf("    4. Select a student by name.\n");
    printf("    5. Select students by age.\n");
    printf("    6. Select students by sex.\n");
    printf("    7. Select sutdnets by height.\n");
    printf("    8. Delete a student.\n");
    printf("    9. Exit.\n");
    
    scanf("%d", &m);

    if(m==9)
    {
        printf("------------------------------\n");
        printf("Beybey!\n");
        printf("------------------------------\n\n");

        exit(1);
    }
    if(m<1 || m>9)
    {
        printf("------------------------------\n");
        printf("error, input again!\n");
        printf("------------------------------\n\n");
        return;
    }
    else
    {
        return m;
    }    
}


/*主程序*/
main()
{
    int j,k;
    i=0;
    
    while(1)
    {
        j = menu();

        if(j==1)
        {
           stu[i] = addstu();
           i++;
        }

        if(j==2)
        {
            printf("\n");
            for(k=0;k<i;k++)
            {
                printf("%d. %s\n", k, stu[k].name);
            }
        }

        if(j==3)
        {
            printf("\n");
            
            for(k=0;k<i;k++)
            {
                showstu(stu[k]);
            }
        }

        if(j==4)
        {
            selbyname();
        }
        
        if(j==5)
        {
            selbyage();
        }

        if(j==6)
        {
            selbysex();
        }

        if(j==7)
        {
            selbyheight();
        }

        if(j==8)
        {
            delstu();
        }

    }
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章