我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言实现学生宿舍信息管理系统的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言实现学生宿舍信息管理系统的方法

这篇文章主要介绍“C语言实现学生宿舍信息管理系统的方法”,在日常操作中,相信很多人在C语言实现学生宿舍信息管理系统的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言实现学生宿舍信息管理系统的方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、问题陈述

宿舍对于大学生在校生活来说相当于家的存在,而宿舍管理又是学校后勤管理的重要环节,如何直观的了解宿舍的入住情况和每位同学的住宿位置是提高工作效率的重要课题,根据我们所学的C语言和数据结构课程中有关链表的内容,为宿舍管理人员编写宿舍管理查询软件,就可以轻松满足实现上述需求。

任务:

为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:
1)、采用交互工作方式
2)、可按关键字(姓名、学号、房号)进行排序

查询菜单: (用二分查找实现以下操作)
1)、按姓名查询
2)、按学号查询
3)、按房号查询

打印任一查询结果(可以连续操作)

二、概要设计

2.1 概要简述

根据系统要求,即本系统具有信息的录入,显示,排序显示、查找,插入、删除、结束程序等功能,先设计出详细的系统流程图,然后将源代码输入程序,进行编译调试即可。
程序总体分10个项目:输入记录、显示记录、按姓名排序并显示、按房间号排序并显示 、按学号排序并显示 、按姓名查找并显示 、按房间号查找并显示 、按学号查找并显示、插入一条记录按学号排序并显示以及结束程序。

2.2 线性表存储结构表示

typedef struct {    char name[20];    int num;            //学号和房号都为整型    int room;} stu;typedef struct {    int length; //当前长度    stu *elem;  //存储空间基址    int listsize;  //当前分配的存储容量} linklist;

2.3 详细设计

1 系统流程图

C语言实现学生宿舍信息管理系统的方法

2 三种排序方法及二分查找法

2.1 冒泡排序(按姓名排序)

//按姓名排序(采用冒泡排序)void sort1(linklist &L) {     int i, j;    stu temp;    for (i = 0; i<L.length - 1; i++)        for (j = 0; j<L.length-1-i; j++)            if (strcmp(L.elem[j].name, L.elem[j+1].name)>0) {                temp = L.elem[j];                L.elem[j] = L.elem[j+1];                L.elem[j+1] = temp;            }}

2.2 折半插入排序(按学号排序)

//按学号排序(采用折半插入排序)void sort2(linklist &L) {     int i, j, mid, low, high;    stu temp;    for (i = 1; i < L.length; i++) {        if(L.elem[i].num<L.elem[i-1].num) {            temp = L.elem[i];            low = 0;            high = i-1;            while (low <= high) {                mid = (low + high) / 2;                if (temp.num < L.elem[mid].num)                    high = mid - 1;                else                    low = mid + 1;            }            for (j = i - 1; j >= high+1; j--)                L.elem[j+1]=L.elem[j];            L.elem[high+1]=temp;        }    }}

2.3 简单选择排序(按房号排序)

//按房号排序(采用简单选择排序)void sort3(linklist &L) {     int i,j,k;    stu temp;    for(i=0; i<L.length-1; i++) {        k=i;        for(j=i+1; j<L.length; j++)            if(L.elem[j].room<L.elem[k].room)                k=j;        if(k!=i){            temp = L.elem[i];            L.elem[i] = L.elem[k];            L.elem[k] = temp;        }    }}

2.4 二分查找法(以按姓名查找为例)

//按姓名从小到大查找(采用二分查找)void search2(linklist &L) {     if (L.length == 0) {        printf("已无学生记录!\n");        Ret();        Menu();    } else {        int low = 0, high = L.length, mid, flag = 0;        printf("\n");        printf("按姓名查找-->请输入要查找的姓名:");        char a[15], ch;        scanf("%s", a);        while (low <= high) {            mid = (low + high) / 2;            if (strcmp(a, L.elem[mid].name) == 0) {                flag = 1;                break;            } else if (strcmp(a, L.elem[mid].name)>0)                low = mid + 1;            else                high = mid - 1;        }        if (flag == 1) {            printf("查找成功-->该学生信息为:\n");            printf("姓名       学号    房号\n");            printf("%-10s %-2d %-5d\n", L.elem[mid].name, L.elem[mid].num, L.elem[mid].room);            if (Select())                search2(L);            else {                system("cls");                Menu();            }        } else {            printf("该学生不存在!");            if (Select())    search2(L);            else {                system("cls");                Menu();            }        }    }}

三、测试与运行

1 系统界面

C语言实现学生宿舍信息管理系统的方法

2 新建宿舍名单

C语言实现学生宿舍信息管理系统的方法

3 排序(以姓名排序为例)

C语言实现学生宿舍信息管理系统的方法

4 查询(以学号查询为例)

C语言实现学生宿舍信息管理系统的方法

5 插入学生信息

C语言实现学生宿舍信息管理系统的方法

6 删除学生信息

C语言实现学生宿舍信息管理系统的方法

四、代码实现

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#define N 40 //线性表存储空间的初始分配量#define increase 10 //线性表存储空间的分配量增量int choice;  //定义全局变量typedef struct {    char name[20];    int num;            //学号和房号都为整型    int room;} stu;stu stud;typedef struct {    int length; //当前长度    stu *elem;  //存储空间基址    int listsize;  //当前分配的存储容量} linklist;//线性表初始化void Init(linklist &L) {     L.length = 0;    L.elem = (stu *)malloc(N * sizeof(stu));    L.listsize = N;}//操作菜单void Menu() {     printf( "**************************************\n" );    printf( "***       欢迎进入宿舍管理系统     ***\n" );    printf( "**************************************\n" );    printf( "*        1.  新建宿舍名单            *\n" );    printf( "*        2.  排序宿舍信息            *\n" );    printf( "*        3.  查询宿舍信息            *\n" );    printf( "*        4.  插入宿舍信息            *\n" );    printf( "*        5.  删除宿舍信息            *\n" );    printf( "*        0.  退出系统                *\n" );    printf( "**************************************\n" );    printf("请输入菜单(0-5):");    scanf("%d", &choice);    if (choice<0 || choice>5) {        system("cls");        printf("输入数字不对,请重新!\n");        printf("\n");        Menu();    }}//打印学生信息void Display(linklist &L) {     int i;    printf("姓名       学号    房号\n");    for (i = 0; i<L.length; i++)        printf("%-10s %-2d %5d\n", L.elem[i].name, L.elem[i].num, L.elem[i].room);}//返回主界面void Ret() {        char c;    fflush(stdin);    printf("\n");    printf("请按任意键进入主界面:");    scanf("%c", &c);    system("cls");}//创建学生信息表void Create(linklist &L) {     if (L.length >= L.listsize) { //判断学生的人数是否超过初值,如果超过,则重新分配        stu *newbase;        newbase = (stu*)realloc(L.elem, (N + increase) * sizeof(stu));        L.elem = newbase;        L.listsize += increase;    }    int i = 2;    char ch;    printf("********开始创建学生信息**********\n");    printf("\n");    printf("请输入第1个学生的信息\n");    printf("请输入姓名:");    fflush(stdin);      // 清空输入缓冲区,得到正确的输入数据    gets(stud.name);    //输入一行字符串(姓名)    printf("请输入学号:");    scanf("%d", &stud.num);    printf("请输入房号:");    scanf("%d", &stud.room);    ch = getchar();    strcpy(L.elem[L.length].name, stud.name);    L.elem[L.length].num = stud.num;    L.elem[L.length].room = stud.room;    L.length++;    printf("\n");    printf("是否继续输入?<y/n>:");    scanf("%c", &ch);    printf("\n");    while (ch == 'y') {        printf("请输入第%d个学生的信息\n", i);        printf("请输入姓名:");        fflush(stdin);      // 清空输入缓冲区,得到正确的输入数据        gets(stud.name);    //输入一行字符串(姓名)        printf("请输入学号:");        scanf("%d", &stud.num);        printf("请输入房号:");        scanf("%d", &stud.room);        strcpy(L.elem[L.length].name, stud.name);        L.elem[L.length].num = stud.num;        L.elem[L.length].room = stud.room;        i++;        L.length=i-1;        ch = getchar();        printf("\n");        printf("是否继续输入?<y/n>:");        scanf("%c", &ch);        printf("\n");    }    if (ch == 'n')        system("cls");}//按姓名排序(采用冒泡排序)void sort1(linklist &L) {     int i, j;    stu temp;    for (i = 0; i<L.length - 1; i++)        for (j = 0; j<L.length-1-i; j++)            if (strcmp(L.elem[j].name, L.elem[j+1].name)>0) {                temp = L.elem[j];                L.elem[j] = L.elem[j+1];                L.elem[j+1] = temp;            }}//按学号排序(采用折半插入排序)void sort2(linklist &L) {     int i, j, mid, low, high;    stu temp;    for (i = 1; i < L.length; i++) {        if(L.elem[i].num<L.elem[i-1].num) {            temp = L.elem[i];            low = 0;            high = i-1;            while (low <= high) {                mid = (low + high) / 2;                if (temp.num < L.elem[mid].num)                    high = mid - 1;                else                    low = mid + 1;            }            for (j = i - 1; j >= high+1; j--)                L.elem[j+1]=L.elem[j];            L.elem[high+1]=temp;        }    }}//按房号排序(采用简单选择排序)void sort3(linklist &L) {     int i,j,k;    stu temp;    for(i=0; i<L.length-1; i++) {        k=i;        for(j=i+1; j<L.length; j++)            if(L.elem[j].room<L.elem[k].room)                k=j;        if(k!=i){            temp = L.elem[i];            L.elem[i] = L.elem[k];            L.elem[k] = temp;        }    }}//排序函数void Sort(linklist &L) {     int c;    printf("请输入排序的方式(1:按名字排序,2:按学号排序,3:按房号排序):");    scanf("%d", &c);    switch (c) {        case 1:            sort1(L);            if (L.length == 0) {                printf("已无学生记录!\n");                Ret();                Menu();            } else {                printf("按姓名排序:\n");                Display(L);                Ret();  //调用返回主界面                Menu();            }            break;        case 2:            sort2(L);            if (L.length == 0) {                printf("已无学生记录!\n");                Ret();                Menu();            } else {                printf("按学号排序:\n");                Display(L);                Ret();  //调用返回主界面                Menu();            }            break;        case 3:            sort3(L);            if (L.length == 0) {                printf("已无学生记录!\n");                Ret();                Menu();            } else {                printf("按房号排序:\n");                Display(L);                Ret();  //调用返回主界面                Menu();            }            break;        default:            break;    }}//选择是否继续查找int Select() {     char ch;    scanf("%c", &ch);    printf("是否继续查找?<y/n>:");    fflush(stdin);    scanf("%c", &ch);    if (ch == 'y') {        system("cls");        return 1;    } else        return 0;}//按姓名从小到大查找(采用二分查找)void search2(linklist &L) {     if (L.length == 0) {        printf("已无学生记录!\n");        Ret();        Menu();    } else {        int low = 0, high = L.length, mid, flag = 0;        printf("\n");        printf("按姓名查找-->请输入要查找的姓名:");        char a[15], ch;        scanf("%s", a);        while (low <= high) {            mid = (low + high) / 2;            if (strcmp(a, L.elem[mid].name) == 0) {                flag = 1;                break;            } else if (strcmp(a, L.elem[mid].name)>0)                low = mid + 1;            else                high = mid - 1;        }        if (flag == 1) {            printf("查找成功-->该学生信息为:\n");            printf("姓名       学号    房号\n");            printf("%-10s %-2d %-5d\n", L.elem[mid].name, L.elem[mid].num, L.elem[mid].room);            if (Select())                search2(L);            else {                system("cls");                Menu();            }        } else {            printf("该学生不存在!");            if (Select())    search2(L);            else {                system("cls");                Menu();            }        }    }}//按学号从小到大查找(采用二分查找)void search3(linklist &L) {     if (L.length == 0) {        printf("\n");        printf("已无学生记录!\n");        Ret();        Menu();    } else {        int low = 0, high = L.length, mid, flag = 0;        int n;        char ch;        printf("\n");        printf("按学号查找-->请输入要查找的学号:");        scanf("%d", &n);        while (low <= high) {            mid = (low + high) / 2;            if (n == L.elem[mid].num) {                flag = 1;                break;            } else if (n>L.elem[mid].num)                low = mid + 1;            else                high = mid - 1;        }        if (flag == 1) {            printf("查找成功----->该学生信息为:\n");            printf("姓名       学号    房号\n");            printf("%-1s0 %-2d %-5d\n", L.elem[mid].name, L.elem[mid].num, L.elem[mid].room);            if (Select())                search3(L);            else {                system("cls");                Menu();            }        } else {            printf("该学生不存在!");            if (Select())                search3(L);            else {                system("cls");                Menu();            }        }    }}//按房号从小到大查找(采用二分查找)void search4(linklist &L) {     if (L.length == 0) { //此函数功能为:返回主界面        printf("\n");        printf("已无学生记录!\n");        Ret();        Menu();    } else {        int low = 0, high = L.length, mid, flag = 0;//flag作为标志符,为1则表示查找成功,否则没有所要查找的学生        int m;        char ch;        printf("\n");        printf("按房号查找-->请输入要查找的房号:");        scanf("%d", &m);        while (low <= high) {            mid = (low + high) / 2;            if (m == L.elem[mid].room) {                flag = 1;                break;            } else if (m>L.elem[mid].room)                low = mid + 1;            else                high = mid - 1;        }        if (flag == 1) {            printf("查找成功-->该学生信息为:\n");            printf("姓名       学号    房号\n");            printf("%-10s %-2d %-5d\n", L.elem[mid].name, L.elem[mid].num, L.elem[mid].room);            if (Select())    //调用判断函数1                search4(L);            else {                system("cls");                Menu();            }        } else {            printf("该学生不存在!");            if (Select())  //调用判断函数2                search4(L);            else {                system("cls");                Menu();            }        }    }}//查找函数void Search(linklist &L) {     int c;    printf("请输入查找的方式(1:按名字查找,2:按学号查找,3:按房号查找):");    scanf("%d", &c);    switch (c) {        case 1:            sort1(L);            search2(L);            break;//先进行二分查找排序        case 2:            sort2(L);            search3(L);            break;        case 3:            sort3(L);            search4(L);            break;        default:            break;    }}//按学号从小到大插入该学生void Insert(linklist &L) {     int i, j, k;    char ch;    printf("\n");    printf("插入的学生信息为:\n");    printf("姓名:");    fflush(stdin);// 清空输入缓冲区,得到正确的输入数据    gets(stud.name);    printf("学号:");    scanf("%d", &stud.num);    printf("房号:");    scanf("%d", &stud.room);    if (L.length == 0) {        strcpy(L.elem[L.length].name, stud.name);        L.elem[L.length].num = stud.num;        L.elem[L.length].room = stud.room;    }    for (i = 0; i<L.length; i++) {        if (stud.num<L.elem[i].num) {            k = i;            for (j = L.length; j>k; j--)                L.elem[j] = L.elem[j - 1];            strcpy(L.elem[k].name, stud.name);            L.elem[k].num = stud.num;            L.elem[k].room = stud.room;            break;        } else {            strcpy(L.elem[L.length].name, stud.name);            L.elem[L.length].num = stud.num;            L.elem[L.length].room = stud.room;        }    }    L.length++;    fflush(stdin);    printf("\n");    printf("是否继续插入?<y/n>:");    scanf("%c", &ch);    if (ch == 'y') Insert(L);    else system("cls");}//按学号删除该学生void Delete(linklist &L) {     int i, j, k = -1;    char ch;    printf("\n");    printf("\n");    printf("请输入要删除学生的学号:");    scanf("%d", &stud.num);    for (i = 0; i<L.length; i++) {        if (stud.num == L.elem[i].num) {            printf("该学生的信息为:\n");            printf("姓名:%s \n学号:%d \n房号:%d\n", L.elem[i].name, L.elem[i].num, L.elem[i].room);            k = i;            for (j = k; j<L.length - 1; j++)                L.elem[j] = L.elem[j + 1];            printf("已成功删除\n");            break;        }    }    if (i >= L.length) printf("该学生不存在\n");    if (k >= 0)L.length--;    fflush(stdin);    printf("\n");    printf("是否继续删除操作?<y/n>:");    scanf("%c", &ch);    system("cls");    if (ch == 'y') Delete(L);    else system("cls");}//主函数int main() {      linklist L;    //定义线性表 L    Init(L);    Menu();        //调用主菜单函数    while (choice != 0) {        system("cls");        switch (choice) {            case 1:                Create(L);    //调用线性表创建函数                Menu();                break;            case 2:                Sort(L);                break;//调用排序函数            case 3:                Search(L);                break;//调用查找函数进行(二分)查找            case 4:                sort2(L);      //调用学号排序函数                Insert(L);        //按学号序列插入                system("cls");                printf("插入后的学生信息:\n");                Display(L);                Ret();                Menu();                break;            case 5:                Delete(L);    //调用删除函数                if (L.length == 0) {                    printf("\n");                    printf("学生记录已被删除完!\n");                    Ret();                    Menu();                } else {                    printf("显示删除后的学生信息:\n");                    Display(L);                    Ret();                    Menu();                }                break;        }    }}

到此,关于“C语言实现学生宿舍信息管理系统的方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言实现学生宿舍信息管理系统的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言实现学生宿舍信息管理系统的方法

这篇文章主要介绍“C语言实现学生宿舍信息管理系统的方法”,在日常操作中,相信很多人在C语言实现学生宿舍信息管理系统的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言实现学生宿舍信息管理系统的方法”的疑
2023-06-29

C语言如何实现学生宿舍信息管理系统

这篇文章主要讲解了“C语言如何实现学生宿舍信息管理系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言如何实现学生宿舍信息管理系统”吧!功能描述该学生宿舍信息管理系统主要实现的功能有:创
2023-06-29

怎么用C语言实现学生宿舍管理系统

这篇文章主要讲解了“怎么用C语言实现学生宿舍管理系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C语言实现学生宿舍管理系统”吧!实现简单的学生宿舍基本信息管理,宿舍的基本信息包括楼号
2023-06-29

如何使用C++实现学生宿舍管理系统

这篇文章给大家分享的是有关如何使用C++实现学生宿舍管理系统的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下非常简易,完成个作业够用,仅供初学者参考,不喜勿喷。#include#inc
2023-06-29

C语言实现学生信息管理系统开发

这篇文章主要为大家详细介绍了C语言实现学生信息管理系统开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录