概要

实现一个图形化界面的学生管理系统,能实现

  1. 增加学生信息
  2. 删除学生信息
  3. 修改学生信息
  4. 查询学生信息

代码

#include <stdio.h>
#include <string.h>
typedef struct student{
    int num;
    char name[20];
    char sex;
    int  age;
}Stu;

int addStu(Stu stu[],char *,char,int);
void delStu(Stu stu[],char *);
int alterStu(Stu stu[],char *,int);
int inquireStu(Stu stu[],char *);
void printAllstu(Stu stu[]);

int main(int argc, const char *argv[])
{
    Stu admin = {0,"admin",'b',0};
    char input_admin[20] = {0};
    char input_password[10] = {0};
    char *password = "admin";
    int item = 0;
    Stu stu[100]={[0]=admin};
    int input_num = 0;
    int num = 0;
    char input_name[20] = {0};
    char input_sex;
    int input_age = 0;
    char next;
    printf("||===================================||\n");
    printf("||-----------------------------------||\n");
    printf("||-----Student Management System-----||\n");
    printf("||-----------------------------------||\n");
    printf("||===================================||\n");
    printf(">>请输入管理账户------>>>");
ADMIN:
    gets(input_admin);
    if(strcmp(input_admin,admin.name)!=0){
        printf(">>输入账户错误,请重新输入---->>");
        goto ADMIN;
    }
    printf(">>请输入登录密码------>>>");
PASSWARD:
    gets(input_password);
    if(strcmp(input_password,password)!=0){
        printf(">>输入密码错误,请重新输入---->>");
        goto PASSWARD;
    }
    printf(">>登录成功!\n");
NEXT:
    printf(">>请选择你要进行的操作\n");
    printf(">>增加用户---> 1\n");
    printf(">>删除用户---> 2\n");
    printf(">>修改用户---> 3\n");
    printf(">>查询用户---> 4\n");
    printf(">>请输入你要操作的选项---->>");
ITEM:
    scanf("%d",&item);
    getchar();
    if(item != 1 && item != 2 && item != 3 && item != 4){
        printf(">>输入选项错误,请重新选择---->>");
        goto ITEM;
    }
    switch(item)
    {
    case 1:
        printf(">>增加用户信息\n");
        printf(">>请输入姓名--->>");
        gets(input_name);
        printf(">>请输入性别--->>");
        scanf("%c",&input_sex);
        getchar();
        printf(">>请输入年龄--->>");
        scanf("%d",&input_age);
        getchar();
        //printf("%s %c %d\n",input_name,input_sex,input_age);//test
        num = addStu(stu,input_name,input_sex,input_age);
        printf(">>增加成功!\n");
        printf(">>增加用户信息如下:\n");
        printf(">>stu[%d].num  = %d\n",num,stu[num].num);
        printf(">>stu[%d].name = %s\n",num,stu[num].name);
        printf(">>stu[%d].sex  = %c\n",num,stu[num].sex);
        printf(">>stu[%d].age  = %d\n",num,stu[num].age);
        break;
    case 2:
        printf(">>删除用户信息\n");
        printf(">>请输入姓名--->>");
        gets(input_name);
        delStu(stu,input_name);
        num = inquireStu(stu,input_name);
        if(num == 0){
            printf(">>删除成功!\n");
        }
        else
        {
            printf(">>删除失败,请检查是否存在该用户。\n");
        }
        break;
    case 3:
        printf(">>修改用户信息\n");
        printf(">>请输入姓名--->>");
        gets(input_name);
        printf(">>请更新年龄--->>");
        scanf("%d",&input_age);
        getchar();
        num = alterStu(stu,input_name,input_age);
        printf(">>更改后用户信息如下:\n");
        printf(">>stu[%d].num  = %d\n",num,stu[num].num);
        printf(">>stu[%d].name = %s\n",num,stu[num].name);
        printf(">>stu[%d].sex  = %c\n",num,stu[num].sex);
        printf(">>stu[%d].age  = %d\n",num,stu[num].age);
        break;
    case 4:
        printf(">>查找用户信息\n");
        printf(">>请输入姓名--->>");
        gets(input_name);
        num = inquireStu(stu,input_name);
        if(num != 0)
        {
            printf(">>找到了,详细信息如下:\n");
            printf(">>stu[%d].num  = %d\n",num,stu[num].num);
            printf(">>stu[%d].name = %s\n",num,stu[num].name);
            printf(">>stu[%d].sex  = %c\n",num,stu[num].sex);
            printf(">>stu[%d].age  = %d\n",num,stu[num].age);
        }
        else
        {
            printf(">>抱歉,没有这个用户。\n");
        }
        break;
    }
    //test
    printAllstu(stu);
    //endtest
    printf(">>继续操作请输入--->> c\n");
    printf(">>结束操作请输入--->> q\n");
    scanf("%c",&next);
    if(next == 'c'){
        goto NEXT;
    }
    else if(next == 'q'){
        return 0;
    }
}

int addStu(Stu stu[],char *input_name,char input_sex,int input_age)
{
    int num = 1;
    while(stu[num].num != 0){
        num++;
    }
    stu[num].num = num;
    strcpy(stu[num].name,input_name);
    stu[num].sex = input_sex;
    stu[num].age = input_age;
    return num;
}
void delStu(Stu stu[],char *input_name)
{
    int num = inquireStu(stu,input_name);
    if(stu[num+1].num == 0){
        stu[num].num = 0;
        memset(stu[num].name,0,sizeof(stu[num].name));
        stu[num].sex = 0;
        stu[num].age = 0;
    }
    else{
        while(stu[num+1].num != 0)
        {
            strcpy(stu[num].name,stu[num+1].name);
            stu[num].sex = stu[num+1].sex;
            stu[num].age = stu[num+1].age;
            num++;
        }
        stu[num].num = 0;
        memset(stu[num].name,0,sizeof(stu[num].name));
        stu[num].sex = 0;
        stu[num].age = 0;
    }
}
int alterStu(Stu stu[],char *input_name,int input_age)
{
    int num = inquireStu(stu,input_name);
    stu[num].age = input_age;
    return num;
}
int inquireStu(Stu stu[],char *input_name)
{
    int num = 1;
    while(stu[num].num != 0)
    {
        if(strcmp(input_name,stu[num].name) == 0){
            return num;
        }
        num++;
    }
    return 0;
}
void printAllstu(Stu stu[])
{
    int num = 1;
    printf("||---------------PRINT---------------||\n");
    printf("||-----------All-Students------------||\n");
    while(stu[num].num != 0)
    {
        printf(">>stu[%d].num  = %d\n",num,stu[num].num);
        printf(">>stu[%d].name = %s\n",num,stu[num].name);
        printf(">>stu[%d].sex  = %c\n",num,stu[num].sex);
        printf(">>stu[%d].age  = %d\n",num,stu[num].age);
        printf("||\n");
        num++;
    }
        //test delStu
        //printf(">>stu[%d].num  = %d\n",num,stu[num].num);
        //printf(">>stu[%d].name = %s\n",num,stu[num].name);
        //printf(">>stu[%d].sex  = %c\n",num,stu[num].sex);
        //printf(">>stu[%d].age  = %d\n",num,stu[num].age);
        //endtest
    printf("||-----------------------------------||\n");
}

结果

linux@linux:/mnt/hgfs/Share/hq$ ./a.out
||===================================||
||-----------------------------------||
||-----Student Management System-----||
||-----------------------------------||
||===================================||
>>请输入管理账户------>>>admin
>>请输入登录密码------>>>admin
>>登录成功!
>>请选择你要进行的操作
>>增加用户---> 1
>>删除用户---> 2
>>修改用户---> 3
>>查询用户---> 4
>>请输入你要操作的选项---->>1
>>增加用户信息
>>请输入姓名--->>sheng   
>>请输入性别--->>b
>>请输入年龄--->>23
>>增加成功!
>>增加用户信息如下:
>>stu[1].num  = 1
>>stu[1].name = sheng
>>stu[1].sex  = b
>>stu[1].age  = 23
||---------------PRINT---------------||
||-----------All-Students------------||
>>stu[1].num  = 1
>>stu[1].name = sheng
>>stu[1].sex  = b
>>stu[1].age  = 23
||
||-----------------------------------||
>>继续操作请输入--->> c
>>结束操作请输入--->> q
c
>>请选择你要进行的操作
>>增加用户---> 1
>>删除用户---> 2
>>修改用户---> 3
>>查询用户---> 4
>>请输入你要操作的选项---->>1
>>增加用户信息
>>请输入姓名--->>lou
>>请输入性别--->>b
>>请输入年龄--->>22
>>增加成功!
>>增加用户信息如下:
>>stu[2].num  = 2
>>stu[2].name = lou
>>stu[2].sex  = b
>>stu[2].age  = 22
||---------------PRINT---------------||
||-----------All-Students------------||
>>stu[1].num  = 1
>>stu[1].name = sheng
>>stu[1].sex  = b
>>stu[1].age  = 23
||
>>stu[2].num  = 2
>>stu[2].name = lou
>>stu[2].sex  = b
>>stu[2].age  = 22
||
||-----------------------------------||
>>继续操作请输入--->> c
>>结束操作请输入--->> q
c
>>请选择你要进行的操作
>>增加用户---> 1
>>删除用户---> 2
>>修改用户---> 3
>>查询用户---> 4
>>请输入你要操作的选项---->>1
>>增加用户信息
>>请输入姓名--->>rouseon
>>请输入性别--->>b
>>请输入年龄--->>23
>>增加成功!
>>增加用户信息如下:
>>stu[3].num  = 3
>>stu[3].name = rouseon
>>stu[3].sex  = b
>>stu[3].age  = 23
||---------------PRINT---------------||
||-----------All-Students------------||
>>stu[1].num  = 1
>>stu[1].name = sheng
>>stu[1].sex  = b
>>stu[1].age  = 23
||
>>stu[2].num  = 2
>>stu[2].name = lou
>>stu[2].sex  = b
>>stu[2].age  = 22
||
>>stu[3].num  = 3
>>stu[3].name = rouseon
>>stu[3].sex  = b
>>stu[3].age  = 23
||
||-----------------------------------||
>>继续操作请输入--->> c
>>结束操作请输入--->> q
c
>>请选择你要进行的操作
>>增加用户---> 1
>>删除用户---> 2
>>修改用户---> 3
>>查询用户---> 4
>>请输入你要操作的选项---->>3
>>修改用户信息
>>请输入姓名--->>lou
>>请更新年龄--->>23
>>更改后用户信息如下:
>>stu[2].num  = 2
>>stu[2].name = lou
>>stu[2].sex  = b
>>stu[2].age  = 23
||---------------PRINT---------------||
||-----------All-Students------------||
>>stu[1].num  = 1
>>stu[1].name = sheng
>>stu[1].sex  = b
>>stu[1].age  = 23
||
>>stu[2].num  = 2
>>stu[2].name = lou
>>stu[2].sex  = b
>>stu[2].age  = 23
||
>>stu[3].num  = 3
>>stu[3].name = rouseon
>>stu[3].sex  = b
>>stu[3].age  = 23
||
||-----------------------------------||
>>继续操作请输入--->> c
>>结束操作请输入--->> q
c
>>请选择你要进行的操作
>>增加用户---> 1
>>删除用户---> 2
>>修改用户---> 3
>>查询用户---> 4
>>请输入你要操作的选项---->>2
>>删除用户信息
>>请输入姓名--->>lou
>>删除成功!
||---------------PRINT---------------||
||-----------All-Students------------||
>>stu[1].num  = 1
>>stu[1].name = sheng
>>stu[1].sex  = b
>>stu[1].age  = 23
||
>>stu[2].num  = 2
>>stu[2].name = rouseon
>>stu[2].sex  = b
>>stu[2].age  = 23
||
||-----------------------------------||
>>继续操作请输入--->> c
>>结束操作请输入--->> q
c
>>请选择你要进行的操作
>>增加用户---> 1
>>删除用户---> 2
>>修改用户---> 3
>>查询用户---> 4
>>请输入你要操作的选项---->>4
>>查找用户信息
>>请输入姓名--->>lou
>>抱歉,没有这个用户。
||---------------PRINT---------------||
||-----------All-Students------------||
>>stu[1].num  = 1
>>stu[1].name = sheng
>>stu[1].sex  = b
>>stu[1].age  = 23
||
>>stu[2].num  = 2
>>stu[2].name = rouseon
>>stu[2].sex  = b
>>stu[2].age  = 23
||
||-----------------------------------||
>>继续操作请输入--->> c
>>结束操作请输入--->> q
q
linux@linux:/mnt/hgfs/Share/hq$

总结

1、晚上花了3小时多完成这个任务。

2、难点有2处:一是对各种类型数据的输入匹配问题;二是结构体数组的定义初始化以及访问方式。

3、写代码的过程还是较顺利的,思路清晰。

反思

1、代码能实现概要中叙述的4个功能。但对于一些不期望的输入数据,没有加入更多的条件限制,这是不足的一点。

2、函数的封装应该能用指针实现,但对结构体数组中的结构体对象访问还不熟练,有待掌握。

3、回想起大一下学C语言的结构体,那时好像就有学生管理系统这个题目,可惜我当时贪玩没有好好打过代码。认知总是后知后觉呀。

Last modification:2021 年 03 月 27 日 16 : 29 : 37