学生公寓管理系统


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
需求:
管理员的:
1.学生信息管理:录入,删除和修改学生基本信息
学生信息:学号,姓名,专业,年级,班级,楼号,房间号
2.维修管理:先查看学生的报修申请信息(可根据维修状态查询),然后完成
维修(改写维修状态、填写维修日期等)。
3.信息查询:学生信息查询:分别按专业,年级,班级查询并显示学生信息
报修信息查询:按报修日期,维修状态查询并显示保修信息

学生的:
1.报修申请:公寓设施出问题,填写维修信息
维修信息:楼号,房间号,报修人姓名,问题,报修日期,维修状态,维修日期。
注:维修状态、维修日期暂不输入。
(2)报修查询:查询并显示本人报修结果。


*/

//学生结构体
//将结构体的创建放入头文件
#define N 9 //之后修改等功能所用到的新的字符数组长度设定最好与结构体设定得一样
#define N1 100
typedef struct student
{
    char num[N];       //学号
    char name[N];      //姓名
    char dorm[N];      //专业
    char class[N];     //年级
    char bednum[N];    //班级
    char flo_num[N];   //楼号
    char housenum[N];  //房间号
    int Report_Repair; //报修,0无申请,1申请
} STU;

// 学生结构体数组
STU stuarr[N1];
int stu_num = 0;//学生目前数量

// 报修信息表
typedef struct bao_xui
{
    int flo;        //楼号
    int hou;        //房间号
    char name[N];   // 报修人姓名
    char ques[100]; //问题
    int wx;         //维修状态,-1未修,1已修
    //   维修日期
    int year;
    int month;
    int day;
} BX;
// 报修信息表
BX bx_arr[N1];
int sec=0;//报修信息表的计数器
// 输出学生信息不换行 并且每个字段有标识符
void print_stu(STU stu)
{
    printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", "学号", "姓名", "专业", "年级", "班级", "楼号", "房间号", "报修状态");
    printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\n", stu.num, stu.name, stu.dorm, stu.class, stu.bednum, stu.flo_num, stu.housenum, stu.Report_Repair);
}

// 判断学号是否存在
int is_stu_exist(char *num, int n) // n 表示跳过当前输入的学号,否则会永远出现重复学号
{
    int i;
    for (i = 0; i < N1; i++)
    {
        if (i == n)
            break;
        if (!strcmp(num, stuarr[i].num))
        {
            printf("判断学号函数:%s\t\tssss%s", num, stuarr[i].num);
            return 1;
        }
    }
    return 0;
}

// 录入学生信息
void luru_stu()
{
    int i1 = 0;
    printf("请输入录入学生人数(输入0退出录入状态):\n");
    scanf("%d", &i1);
    if (i1 == 0)
        return; // 0 退出录入状态
    for (int i = 0; i < i1; i++)
    {
        printf("请输入学生学号:\n");
        scanf("%s", &stuarr[i].num);
        if (is_stu_exist(stuarr[i].num, i) == 1)
        {
            printf("该学号已存在,请重新输入!\n");
            i--; //如果学号已存在,则重新输入计数器减一
            continue;
        }
        printf("请输入学生姓名:\n");
        scanf("%s", &stuarr[i].name);
        printf("请输入学生专业:\n");
        scanf("%s", &stuarr[i].dorm);
        printf("请输入学生年级:\n");
        scanf("%s", &stuarr[i].class);
        printf("请输入学生班级:\n");
        scanf("%s", &stuarr[i].bednum);
        printf("请输入学生楼号:\n");
        scanf("%s", &stuarr[i].flo_num);
        printf("请输入学生房间号:\n");
        scanf("%s", &stuarr[i].housenum);
        printf("请输入学生报修状态(报修状态,0无申请,1有申请):\n");
        scanf("%d", &stuarr[i].Report_Repair);
        printf("录入成功!\n");
        print_stu(stuarr[i]);
        stu_num++;//学生数量加一
        if(i==i1){
            printf("已经成功录入\t%d\t个学生!\n",i1);
        }
    }
}

// 查询学生信息
void chaxun_stu(int a)
{
        switch (a)
        {
        case 1: //按专业查询
        {
            char i1[N];
            printf("请输入查询学生专业(输入4返回):\n");
            scanf("%s", &i1);
            printf("按专业查询:\n");
            int flag = 0;
            for (int i = 0; i < N1; i++)
            {
                if (strcmp(i1, stuarr[i].dorm) == 0)
                {
                    print_stu(stuarr[i]);
                    flag = 1;
                }
            }
            if (flag == 0)
            {
                printf("没有该专业的学生!\n");
                
            }
        }

        break;

        case 2: //按年级查询
        {
            char i2[N];
            printf("请输入查询学生年级(输入4返回):\n");
            scanf("%s", &i2);
            printf("按年级查询:\n");
            int flag = 0;
            for (int i = 0; i < N1; i++)
            {
                if (strcmp(stuarr[i].class, i2) == 0)
                {
                    print_stu(stuarr[i]);
                }
            }
            if (flag == 0)
            {
                printf("没有该年级的学生!\n");
            }
        }

        break;

        case 3: //按班级查询
        {
            char i3[N];
            printf("请输入查询学生班级(输入4返回):\n");
            scanf("%s", &i3);
            printf("按班级查询:\n");
            int flag = 0;
            for (int i = 0; i < N1; i++)
            {
                if (strcmp(stuarr[i].bednum, i3) == 0)
                {
                    print_stu(stuarr[i]);
                }
            }
            if (flag == 0)
            {
                printf("没有该班级的学生!\n");
            }
       
        }
        break;
        case 4:
            return;
        }
  
}

// 修改学生信息
void xiugai_stu()
{
    // 请输入要修改的学生学号
    char i1[N];
    do
    {
        printf("请输入要修改的学生学号(输入0退出):\n");
        scanf("%s", &i1);
        int flag = 0;
        for (int i = 0; i < N1; i++)
        {
            if (strcmp(i1, stuarr[i].num) == 0)
            {
                printf("请输入要修改的学生姓名:\n");
                scanf("%s", &stuarr[i].name);
                printf("请输入要修改的学生专业:\n");
                scanf("%s", &stuarr[i].dorm);
                printf("请输入要修改的学生年级:\n");
                scanf("%s", &stuarr[i].class);
                printf("请输入要修改的学生班级:\n");
                scanf("%s", &stuarr[i].bednum);
                printf("请输入要修改的学生楼号:\n");
                scanf("%s", &stuarr[i].flo_num);
                printf("请输入要修改的学生房间号:\n");
                scanf("%s", &stuarr[i].housenum);
                printf("请输入要修改的学生报修状态(报修状态,0无申请,1有申请):\n");
                scanf("%d", &stuarr[i].Report_Repair);
                printf("修改成功!\n");
                print_stu(stuarr[i]);
                flag = 1;
            }
        }
        if (flag == 0)
        {
            printf("没有该学生!\n");
        }
    } while (strcmp(i1, "0") != 0);
}


// 把某个学生信息删除
void shanchu_stu()
{
    // 请输入要删除的学生学号
    char i1[N];
    do
    {
        printf("请输入要删除的学生学号(输入0退出):\n");
        scanf("%s", &i1);
        int flag = 0;
        for (int i = 0; i < N1; i++)
        {
            if (strcmp(i1, stuarr[i].num) == 0)
            {
                for (int j = i; j < N1; j++)
                {
                    stuarr[j] = stuarr[j + 1];
                }
                stu_num--;
                printf("删除成功!\n");
                flag = 1;
            }
        }
        if (flag == 0)
        {
            printf("没有该学生!\n");
        }
    } while (strcmp(i1, "0") != 0);
}




// // 删除学生信息
// void shanchu_stu()
// {
//     // 请输入要删除的学生学号
//     char i1[N];
//     do
//     {

//         printf("请输入要删除的学生学号(输入0退出):\n");
//         scanf("%s", &i1);
//         int flag = 0;
//         for (int i = 0; i < N1; i++)
//         {
//             if (strcmp(i1, stuarr[i].num) == 0)
//             {   
                
//                 printf("删除成功!\n");
//                 print_stu(stuarr[i]);
//                 flag = 1;
//             }
//         }
//         if (flag == 0)
//         {
//             printf("没有该学生!\n");
//         }
//     } while (strcmp(i1, "0") != 0);
// }

// 打印报修信息表不换行
void print_bx(BX bx)
{
    // printf("%s\t%s\t%s\t%s\t%s\t%s-%s-%s\n",
    // "楼号", "房间号", "姓名", "问题", "维修状态", "日期:年份", "月", "日");
    printf("%d\t%d\t%s\t%s\t%d\t%d-%d-%d\n",
           bx.flo, bx.hou, bx.name, bx.ques, bx.wx, bx.year, bx.month, bx.day);
}

// 查看报修信息表
void print_bx_all()
{
    printf("报修信息表:\n");
    printf("%s\t%s\t%s\t%s\t%s\t%s-%s-%s\n",
           "楼号", "房间号", "姓名", "问题", "维修状态", "日期:年份", "月", "日");
    for (int i = 0; i < N1; i++)
    {
        print_bx(bx_arr[i]);
    }
}

//根据维修状态查询报修信息表
void chaxun_bx_by_state()
{
    
    int i;
    do{
   printf("请输入要查询的维修状态(-1未修,1已修;输入0退出):\n");
    scanf("%d", &i);
    if(i==0) return;
    int falg = 0;
    for (int j = 0; j < N1; j++)
    {
        if (bx_arr[j].wx == i)
        {
            print_bx(bx_arr[j]);
        }
    }
    if (falg == 0)
    {
        printf("这个维修状态里面的信息表为空!\n");
    }
    }while(i!=0);
printf("退出成功!\n");
}

// 根据房间号修改报修信息状态表,并填写维修日期
void xiugai_bx_by_house()
{
    int i1;
    do
    {
        printf("请输入要修改的房间号:(输入0退出修改)\n");
        scanf("%d", &i1);
        int flag = 0;
        if (i1==0) return;
        for (int i = 0; i < N1; i++)
        {
            if (i1 == bx_arr[i].hou)
            {
                printf("请输入要修改的维修状态(-1未修,1已修):\n");
                scanf("%d", &bx_arr[i].wx);
                printf("请输入要修改的维修日期(年,月,日):\n");
                scanf("%d%d%d", &bx_arr[i].year, &bx_arr[i].month, &bx_arr[i].day);
                printf("修改成功!\n");
                print_bx(bx_arr[i]);
                flag = 1;
                break;
            }
        } 
           if (flag == 0)
            {
                printf("没有该房间号!\n");
            }
    }while (i1 != 0);
}
    // 根据日期查询报修信息表
    void chaxun_bx_by_date()
    {
        int i1, i2, i3;
        do
        {
            printf("请输入要查询的日期(年,月,日)(输入0退出):\n");
            scanf("%d", &i1);
              if (i1==0) return;
            scanf("%d%d%", &i2, &i3);
            int flag = 0;
            for (int i = 0; i < N1; i++)
            {
                if (bx_arr[i].year == i1 && bx_arr[i].month == i2 && bx_arr[i].day == i3)
                {
                    print_bx(bx_arr[i]);
                    flag = 1;
                }
            }
            if (flag == 0)
            {
                printf("%d-%d-%d内没有提交报修信息记录!\n", i1, i2, i3);
            }
        } while (i1 != 0);
    }



// 填写报修信息表
void tianjia_bx()
{
    do{
    printf("请输入报修申请信息表的信息(0退出申请):\n");
    printf("楼号:\n");
    scanf("%d", &bx_arr[sec].flo);
    printf("房间号:\n");   
    scanf("%d", &bx_arr[sec].hou);
    printf("姓名:\n");
    scanf("%s", bx_arr[sec].name);
    printf("问题:\n");
    scanf("%s", bx_arr[sec].ques);
    // 维修状态和维修日期暂时不填写
    bx_arr[sec].wx = -1;
    bx_arr[sec].year = 0;
    bx_arr[sec].month = 0;
    bx_arr[sec].day = 0;
    sec++;
    printf("申请成功!\n");
    }while(bx_arr[sec].flo!=0);
}

// 根据房间号和报修人姓名查询报修结果
void chaxun_bx_by_name()
{
    int i1;
    char name[20];
    do
    {
        printf("请输入要查询的房间号:(输入0退出查询)\n");
        scanf("%d", &i1);
        if (i1==0) return;
        printf("请输入要查询的报修人姓名:\n");
        scanf("%s", name);
        int flag = 0;
        for (int i = 0; i < N1; i++)
        {
            if (i1 == bx_arr[i].hou && strcmp(name, bx_arr[i].name) == 0)
            {
                print_bx(bx_arr[i]);
                flag = 1;
            }
        }
        if (flag == 0)
        {
            printf("没有该房间号和报修人姓名的报修信息!\n");
        }
    }while (i1 != 0);
}



    void PrimaryMenu()
    {
        printf("-----欢迎使用学生公寓管理系统-----\n");
        printf("------------您的身份--------------\n");
        printf("-------------1.宿管---------------\n");
        printf("-------------2.学生---------------\n");
        printf("-------------0.退出---------------\n");
        printf("---------请选择[1/2/0]-----------\n");
    };

    // 管理员界面
    void admMenu()
    {
        printf("----学生信息管理------\n");
        printf("---1.查询学生信息---\n");
        printf("---2.录入学生信息---\n");
        printf("---3.修改学生信息---\n");
        printf("---4.删除学生信息---\n");
        printf("---5.返回-----------\n");
        printf("--请选择[1/2/3/4/5]--\n");
    };

    // 学生界面
    void Stu_Menu()
    {
        printf("-------1.报修申请-------\n");
        printf("-------2.报修查询-------\n");
        printf("-------3.返回-------\n");
        printf("------请选择[1/2/3]------\n");
    }

    // 管理员查询学生信息
    void Rev_stu()
    {
        printf("------分类查询------\n");
        printf("-------1.专业-------\n");
        printf("------2.年级--------\n");
        printf("-------3.班级-------\n");
        printf("-------4.返回-------\n");
        printf("---请选择[1/2/3/4]----\n");
    }
    // 维修管理页面
    void Rev_baoxu()
    {
        printf("--------维修管理--------\n");
        printf("----1.查看报修申请信息--\n");
        printf("----2.完成维修----------\n");
        printf("----3.返回--------------\n");
        printf("----请选择[1/2/3]-------\n");
    }

    // 管理员界面
    void adm_vi()
    {
        printf("-----------管理员-----------\n");
        printf("------1.学生信息管理--------\n");
        printf("------2.维修管理------------\n");
        printf("------3.信息查询------------\n");
        printf("------4.返回----------------\n");
        printf("------请选择[1/2/3/4]---------\n");
    }

    // 维修信息查询
    void chaxun_bx()
    {
        printf("------维修查询(管理员)------\n");
        printf("-------1.报修日期-------------\n");
        printf("-------2.维修状态-------------\n");
        printf("-------3.返回-----------------\n");
        printf("-------请选择[1/2/3]----------\n");
    }

    // 主函数
    void main()
    {

        while (1)
        {
            PrimaryMenu(); //主页面
            int i = 0;
            scanf("%d", &i);
            switch (i)
            {
            case 1:
            {
                do
                {
                    adm_vi(); //管理员界面
                    scanf("%d", &i);
                    switch (i)
                    {
                    case 1:
                    {
                        do
                        {
                            admMenu(); //学生信息管理
                            scanf("%d", &i);
                            switch (i)
                            {
                            case 1: //查询学生信息
                           int a=0;
                            do{
                                Rev_stu();
                    
                                scanf("%d", &a);
                                switch (a)
                                {
                                case 1:
                                   chaxun_stu(1);
                                    break;
                                case 2:
                                      chaxun_stu(2);
                                    break;
                                case 3:
                                     chaxun_stu(3);
                                    break;
                                case 4:
                                    printf("返回成功!\n");
                                    break;
                                    default:
                                        printf("输入错误!请重新输入\n");
                                }
                        
                            }while(a!=4);
                                break;
                            case 2: //录入学生信息
                                luru_stu();
                                luru_stu();
                                break;
                            case 3: //修改学生信息
                                xiugai_stu();
                                break;
                            case 4: //删除学生信息
                                shanchu_stu();
                                break;
                            case 5: //返回
                                break;
                            default:
                                printf("输入错误!!!\n");
                                break;
                            }
                        } while (i != 5);
                    }
                    break;
                    case 2: //维修管理
                    {
                        do
                        {
                            Rev_baoxu();
                            scanf("%d", &i);
                            switch (i)
                            {
                            case 1: //查看报修申请信息根据维修状态
                                chaxun_bx_by_state();
                                break;
                            case 2: //完成维修修改维修状态
                                xiugai_bx_by_house();
                                break;
                            case 3:
                                break;
                            default:
                                printf("输入错误!!!\n");
                                break;
                            }
                        } while (i != 3);
                    }
                    break;
                    case 3: //信息查询
                    {
                        do
                        {
                            chaxun_bx(); //查询报修信息
                            scanf("%d", &i);
                            switch (i)
                            {
                            case 1: //报修日期
                                chaxun_bx_by_date();
                                break;
                            case 2: //维修状态
                                chaxun_bx_by_state();
                                break;
                            case 3: //返回
                                break;
                            default:
                                printf("输入错误!!!\n");
                                break;
                            }
                        } while (i != 3);
                    }
                    break;
                    case 4: //返回
                    {
                        break;
                    }
                    break;
                    default:
                    {
                        printf("输入错误!!!\n");
                        break;
                    }
                    }
                } while (i != 4);
            }
            break;
            case 2:
            {
                
                do{
                Stu_Menu(); //学生界面
                scanf("%d", &i);
                switch (i)
                {
                case 1:
                    // 报修申请
                    tianjia_bx();
                    break;

                case 2:
                    //   报修查询
                chaxun_bx_by_name();
                    break;
                case 3:
                    break;
                default:
                    break;
                }  
                }while(i!=3);
       
            }
            break;
            case 0:
                printf("程序结束!!!\n");
                exit(0);
            default:
                printf("输入错误,请重新输入\n");
                break;
            }
        }
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

syhk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值