宿舍管理软件

课题任务书

设计题目

宿舍管理软件 限定人数 3
问题描述 设某宿舍有n个房间,每个房间有6个床位,学生信息包括学号、班级编号、姓名、性别,为学生宿舍管理人员编写一个宿舍管理软件。

基本要求与说明

  1. 学生的入住处理,录入学生信息,随机分配床位。要求男女不能混住,原则上同班同学优先安排在一起。保证宿舍空间充分利用,尽量避免一两个人占用一个宿舍的情况。
  2. 学生退房处理;
  3. 输出学生入住信息(按房间号和床号有序);
  4. 修改入住信息;
  5. 学生调换宿舍或床位处理;
  6. 按给定学号、姓名、房号查询;
  7. 查询房间使用情况。
  8. 要求能够管理房间不少于40个,班级不少于30个,每个班级人数不少于30人。*

一、 前言

寝室管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在寝室管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工去一条条的查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社会是飞速进步的世界,原始的记录方式已经被社会所淘汰了,计算机化管理正是适应时代的产物。信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。 21世纪的今天,信息社会占着主流地位,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。我们针对如此,设计了一套学生寝室管理系统。学生寝室管理系统采用的是计算机化管理,系统做的尽量人性化,使用者会感到操作非常方便,管理人员需要做的就是将数据输入到系统的数据库中去。由于数据库存储容量相当大,而且比较稳定,适合较长时间的保存,也不容易丢失。这无疑是为信息存储量比较大的学校提供了一个方便、快捷的操作方式。本系统具有运行速度快、安全性高、稳定性好的优点,并且具备修改功能,能够快速的查询学校所需的住宿信息。

二 、设计要求

1.要求

  1. 学生的入住处理,录入学生信息,随机分配床位。要求男女不能混住, 原则上同班同学优先安排在一起。保证宿舍空间充分利用,尽量避免一两个人占用一个宿舍的情况。
    2).学生退房处理;
    3).输出学生入住信息(按房间号和床号有序);
    4).修改入住信息;
    5).学生调换宿舍或床位处理;
    6).按给定学号、姓名、房号查询;
    7).查询房间使用情况。
    8).要求能够管理房间不少于40个,班级不少于30个,每个班级人数不少于30人。

2.任务

  1. 定义各类头文件,变量及宏定义;
  2. 设计系统各个功能模块;
  3. 画出部分模块的流程图;
  4. 改进或增加功能模块;
  5. 编写代码;
  6. 程序分析与调试。

3.运行环境

  1. WINDOWS 7系统
  2. Visual C++6.0编译环境*

4.开发工具

  1. C语言
  2. C++

三、 概要设计

  1. .系统的功能模块
    在这里插入图片描述

  2. .函数功能及参数说明、调用关系
    此程序的运用使用了以下头文件:

#include<cstdio>
#include<map>
#include<cstring>
#include<string>
#include<stdlib.h>
#include<algorithm>

定义了以下函数:
void stu_read()              // 从文件中读取学生信息

void stu_write()                //把学生信息写入文件中

struct node {…………
…………
……………
……..}stu[50]                  //定义学生详细信息

int Menu()                  //显示菜单栏和以及查询等操作操作

void shu_ru()                 //添加新学生学生信息

void tui_chu()                   //删除已离开学生的信息

void cha_kan()               //查看每个房间的入住情况

void xiu_gai()                //修改某位学生的信息

void tiao_huan()              //对两位学生的床位进行调换

void pai_xu()                 //按照指定方式排序

void cha_xun()               //查询宿舍中已经入住人数和姓名

3.各变量的定义和作用

struct node
{
   char name[10];
   char sex[5];
   char number[10];
   int room;
   char clas[30];
   int berth;
} stu[50];

…………………………………//定义了一个stu结构体包括学生的基本信息:学号,姓名,房间号,班级,床位号,性别;

#define dzh1 "文件位置"        
                           //对储存文件进行重命名

四、 详细设计

  1. .主函数模块

在这里插入图片描述
五、改进或增加功能模块说明

  1. . 增加了排序显示模块
    排序模块可以对学生学号,以及根据宿舍号的不同特征进行排序,方便使用者,查看各种数据,方便对系统信息管理。此时把三个bool形函数和算法中的快速排序(sort排序)相结合运用到程序中;*
bool fjian(node a,node b)
{
    return a.room<b.room;
}
bool fjia(node a,node b)
{
    return a.room>b.room;
}
bool xing(node a,node b)
{
    if(strcmp(a.name,b.name)>=0)
        return b.name;
    return a.name;
}

六 程序测试

需要自己测试哦(嘿嘿嘿!!!);

七、源程序如下:

#include<cstdio>
#include<map>
#include<cstring>
#include<string>
#include<stdlib.h>
#include<algorithm>
#define dzh1 "C:\\Users\\Desktop\\新建文本文档.txt"//文件地址
using namespace std;
map<int,string>mp;
map<int,int>mp1;
map<string,int>bpl;
map<int,int>bp2;
bool book[1001][1010];
int num=0;
struct node
{
    char name[10];
    char sex[5];
    char number[10];
    int room;
    char clas[30];
    int berth;
} stu[50];
bool cmp(node a,node b)
{
    if(a.room==b.room)
        return a.berth<b.berth;
    return a.room<b.room;
}
void stu_read()
{
    FILE *fp;
    if((fp=fopen(dzh1,"rb"))==NULL)
    {
        printf("\t\t不能打开文件!\n");
        return;
    }
    while(fread(&stu[num],sizeof(struct node),1,fp))
    {
        mp[stu[num].room]=stu[num].sex;
        num++;
    }
    printf("\t\t文件读取成功\n");
    fclose(fp);
}
void stu_write()
{
    int tt=0;
    FILE *fp;
    if((fp=fopen(dzh1,"wb"))==NULL)
    {
        printf("\t\t不能打开文件!\n");
        return;
    }
    while(tt<num&&fwrite(&stu[tt],sizeof(struct node),1,fp))
        tt++;
    fclose(fp);
}
int menu()
{
    char a;
    do
    {
        system("cls");
        printf("\n");
        printf("\t\t&~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&\n");
        printf("\t\t $****************宿舍管理系统********************$\n");
        printf("\t\t $1:录入新成员进入宿舍家庭                        $\n");
        printf("\t\t $2:学生退出宿舍离开宿舍家庭                      $\n");
        printf("\t\t $3:查看宿舍家庭信息                              $\n");
        printf("\t\t $4:修改某位宿舍成员的信息                        $\n");
        printf("\t\t $5:学生调换宿舍或者是床位调换                    $\n");
        printf("\t\t $6:按照指定方式进行成员排序                      $\n");
        printf("\t\t $7:查询房间使用情况                              $\n");
        printf("\t\t $0:结束使用                                      $\n");
        printf("\t\t&~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~&\n");
        printf("\t\t请选择您要选择的一项(0~7)>>>");
        a=getchar();
    }
    while(a<'0'||a>'9');
    return a-'0';
}
void shu_ru()
{
    char t='Y';
    while(t=='Y'||t!='N')
    {
        system("cls");
        printf("\t\t请输入学生姓名:");
        scanf("%s",stu[num].name);
        printf("\t\t性别:");
        scanf("%s",stu[num].sex);
        printf("\t\t学号:");
        {
            scanf("%s",stu[num].number);
            if(bpl[stu[num].number])
            {
                printf("\t\t此学生已经入住,请重新输入信息\n\t\t");
                system("pause");
                continue;
            }
            bpl[stu[num].number]++;
        }
        printf("\t\t班级:");
        scanf("%s",stu[num].clas);
        printf("\n");
        printf("\t\t请输入所要安排的房间号:");
        scanf("%d",&stu[num].room);
        while(mp1[stu[num].room]>=6)
        {
            printf("\n\t\t此宿舍人数已满,请换个房间:");
            scanf("%d",&stu[num].room);
            printf("\n");
        }
        mp1[stu[num].room]++;
        while(mp[stu[num].room]!=stu[num].sex&&mp[stu[num].room]!="")
        {
            printf("\n\t\t男女不能混寝,折磨简单的道理都不懂?\n");
            printf("\t\t请重新输入房间号:");
            scanf("%d",&stu[num].room);
        }
        mp[stu[num].room]=stu[num].sex;
        printf("\t\t床位号:");
        scanf("%d",&stu[num].berth);
        if(book[stu[num].room][stu[num].berth])
        {
            while(book[stu[num].room][stu[num].berth])
            {
                printf("\t\t此床位已经有人居住,请换一个床位试试\n\t\t");
                scanf("%d",&stu[num].berth);
            }
        }
        while(stu[num].berth>6||stu[num].berth<1)
        {
            printf("\t\t床位号只能从1到6,重新输入\n\t\t");
            scanf("%d",&stu[num].berth);
        }
        book[stu[num].room][stu[num].berth]=1;
        printf("\n");
        printf("\t\t是否继续输入(Y/N):");
        num++;
        getchar();
        scanf("%c",&t);
    }
}
void tui_chu()
{
    char id[20];
    char t='Y';
    if(!num)
    {
        printf("\t\t您的宿舍楼还没有人来住,请先收集一些人才吧!\n\t\t");
        system("pause");
        return;
    }
    while(t=='Y'||t!='N')
    {
        system("cls");
        printf("\t\t请输入退出学生的姓名或者是学生的学号:");
        scanf("%s",id);
        printf("\n");
        int flag=0;
        for(int i=0; i<num; i++)
        {
            if(!strcmp(id,stu[i].name)||!strcmp(id,stu[i].number))
            {
                flag=1;
                bpl[stu[i].number]=0;
                book[stu[i].room][stu[i].berth]=0;
                for(int j=i; j<num-1; j++)
                {
                    strcpy(stu[j].name,stu[j+1].name);
                    stu[j].berth=stu[j+1].berth;
                    stu[j].room=stu[j+1].room;
                    strcpy(stu[j].clas,stu[j+1].clas);
                    strcpy(stu[j].number,stu[j+1].number);
                    strcpy(stu[j].sex,stu[j+1].sex);
                }
                num--;
                break;
            }
        }
        printf("\t\t学生退出成功\n");
        if(!flag)
            printf("\t\t>>宿舍楼内没有这位同学<<\n");
        printf("\t\t是否继续执行操作(Y/N):");
        getchar();
        scanf("%c",&t);
        printf("\n");
    }
}
void cha_kan()
{
    int t=0;
    if(num==0)
    {
        printf("\t\t您的宿舍楼还没有人来住,请先收集一些人才吧!\n");
        printf("\t\t");
        system("pause");
        return;
    }
    sort(stu,stu+num,cmp);
    printf("\t\t房间号    姓名    学号     床号   性别\n");
    for(int i=0; i<num; i++)
        printf("\t\t%03d %10s %8s    %01d %10s\n",stu[i].room,stu[i].name,stu[i].number,stu[i].berth,stu[i].sex);
    printf("\t\t");
    system("pause");
    return;
}
int xiu()
{
    char z;
    do
    {
        system("cls");
        printf("\t\t请输入需要修改的内容所对应的选项\n");
        printf("\t\t$1:修改姓名\n  \t\t$2:修改学号\n  \t\t$3:修改床位号\n  \t\t$4:修改班级\n  \t\t$5:修改性别\n  \t\t$6:修改房间号\n\t\t");
        z=getchar();
    }
    while(z<'1'||z>'6');
    return z-'0';
}
void xiu_gai()
{
    int t='Y';
    if(num==0)
    {
        printf("\t\t您的宿舍楼还没有人来住,请先收集一些人才吧!\n");
        printf("\t\t");
        system("pause");
        return;
    }
    char a[10];
    while(t=='Y'||t!='N')
    {
        system("cls");
        printf("\t\t请输入修改学生的名字:\n\t\t");
        scanf("%s",a);
        printf("\n");
        int flag=0;
        for(int i=0; i<num; i++)
            if(!strcmp(a,stu[i].name))
            {
                flag=1;
                char z[30];
                int k;
                char T='Y';
                while(T=='Y'||T!='N')
                {
                    switch(xiu())
                    {
                    case 1:
                        printf("\t\t请输入新的名字:\n\t\t");
                        scanf("%s",z);
                        strcpy(stu[i].name,z);
                        break;
                    case 2:
                        printf("\t\t请输入新的学号:\n\t\t");
                        scanf("%s",z);
                        while(bpl[z])
                        {
                            printf("\t\t此学生已经入住,请重新输入信息\n\t\t");
                            system("pause");
                        }
                        bpl[z]++;
                        strcpy(stu[i].number,z);
                        break;
                    case 3:
                        printf("\t\t请输入新的床位:\n\t\t");
                        scanf("%d",&k);
                        stu[i].berth=k;
                        break;
                    case 4:
                        printf("\t\t请输入新的班级:\n\t\t");
                        scanf("%s",z);
                        strcpy(stu[i].clas,z);
                        break;
                    case 5:
                        printf("\t\t请输入新的性别:\n\t\t");
                        scanf("%s",z);
                        strcpy(stu[i].sex,z);
                        break;
                    case 6:
                        printf("\t\t请输入新的房间号:\n\t\t");
                        scanf("%d",&k);
                        stu[i].room=k;
                        break;
                    }
                    printf("\t\t是否继续修改本学生的其他信息(Y/N)\n\t\t>>");
                    getchar();
                    scanf("%c",&T);
                }
                break;
            }
        if(!flag)
            printf("\t\t>>宿舍楼内没有这位同学<<\n");
        printf("\t\t是否继续执行操作(Y/N)\n\t\t>>");
        getchar();
        scanf("%s",&t);
    }

}
void swp(char a[],char b[])
{
    char x[20];
    strcpy(x,a);
    strcpy(a,b);
    strcpy(b,x);
}
void tiao_huan()
{
    char a[110],b[110];
    char t='Y';
    if(!num)
    {
        printf("\t\t您的宿舍楼还没有人来住,请先收集一些人才吧!\n\t\t");
        system("pause");
        return;
    }
    while(t=='Y'||t!='N')
    {
        system("cls");
        printf("\t\t请输入所要调换床位的两位的姓名或学号\n");
        printf("\t\t输入成员1:\n\t\t");
        scanf("%s",a);
        printf("\t\t输入成员2:\n\t\t");
        scanf("%s",b);
        int x=0,y=0;
        for(int i=0; i<num; i++)
        {
            if(!strcmp(a,stu[i].name)||!strcmp(a,stu[i].number))
                x=i;
            if(!strcmp(b,stu[i].name)||!strcmp(b,stu[i].number))
                y=i;
            if(x&&y)
                break;
        }
        if(!x&&!y)
        {
            printf("\t\t宿舍中没有所匹配的对象,输入错误!\n\t\t");
            system("pause");
            continue;
        }
        swap(stu[x].room,stu[y].room);
        swap(stu[x].berth,stu[y].berth);
        printf("\t\t床位互换完毕\n");
        printf("\t\t是否继续输入(Y/N):");
        getchar();
        scanf("%c",&t);
    }
}
int xun_hu()
{
    char ch;
    do
    {
        system("cls");
        printf("\t\t请输入按照$1:按照房间号从小到大\n");
        printf("\t\t          $2:按照房间号从大到小\n");
        printf("\t\t          $3:按照字典序进行姓名排序\n");
        printf("\t\t          $4:按照倒字典进行姓名排序\n");
        printf("\t\t请输入相对应的数字\n\t\t");
        ch=getchar();
    }
    while(ch>'3'||ch<'0');
    return ch-'0';
}
bool fjian(node a,node b)
{
    return a.room<b.room;
}
bool fjia(node a,node b)
{
    return a.room>b.room;
}
bool xing(node a,node b)
{
    if(strcmp(a.name,b.name)>=0)
        return b.name;
    return a.name;
}
bool xing1(node a,node b)
{
    if(strcmp(a.name,b.name)>=0)
        return a.name;
    return b.name;
}
void pai_xu()
{
    if(!num)
    {
        printf("\t\t你还没有存入学生信息,请存入一些信息\n\t\t");
        system("pause");
        return;
    }
    char t='Y';
    while(t=='Y'||t!='N')
    {
        switch(xun_hu())
        {
        case 1:
            sort(stu,stu+num,fjian);
            break;
        case 2:
            sort(stu,stu+num,fjia);
            break;
        case 3:
            sort(stu,stu+num,xing);
            break;
        case 4:
            sort(stu,stu+num,xing1);
            break;
        }
        printf("\t\t房间号    姓名    学号     床号   性别\n");
        for(int i=0; i<num; i++)
            printf("\t\t%03d %10s %8s    %01d %10s\n",stu[i].room,stu[i].name,stu[i].number,stu[i].berth,stu[i].sex);
        printf("\t\t是否进行其他排序(Y/N):");
        getchar();
        scanf("%c",&t);
    }
}
void cha_xun()
{
    char t='Y';
    char a[110][110];
    if(!num)
    {
        printf("\t\t你还未提供宿舍信息,请输入一部分再进行查询!!!\n\t\t");
        system("pause");
        return;
    }
    while(t=='Y'||t!='N')
    {
        int f;
        printf("\t\t请输入所要查询的房间号:");
        scanf("%d",&f);
        int sum=0;
        for(int i=0; i<num; i++)
        {
            if(f==stu[i].room)
            {
                strcpy(a[sum],stu[i].name);
                sum++;
            }
        }
        printf("\t\t此房间已经住下%d人",sum);
        if(sum)
            printf("其姓名为:\n\t\t");
        for(int i=0; i<sum; i++)
            printf(" %s",a[i]);
        getchar();
        printf("\n");
        printf("\t\t是否继续查询其他宿舍(Y/N):");
        t=getchar();
    }
}
int main()
{
    mp.clear();
    mp1.clear();
    bpl.clear();
    int t=1;
    memset(book,0,sizeof(book));
    stu_read();
    while(t)
    {
        switch(menu())
        {
        case 1:
            shu_ru();
            break;
        case 2:
            tui_chu();
            break;
        case 3:
            cha_kan();
            break;
        case 4:
            xiu_gai();
            break;
        case 5:
            tiao_huan();
            break;
        case 6:
            pai_xu();
            break;
        case 7:
            cha_xun();
            break;
        case 0:
            t=0;
            break;
        }
    }
    stu_write();
    return 0;
}

八、 致谢:

  1. 为期两周的课程设计即将结束,在开始设计的时候我们也参考了许多具体的实例,但是真正做起来却是非常难得的。在本次课程设计的过程中,我遇到了很多的困难的,但是在老师和同学的帮助之下,我完成了此次课程设计。我首先要感谢任课老师,是他让我们第一次接触了这门课程,虽然这次我并没有应用太多课上的知识,但从其他同学的课程设计中,我还是感觉到这门课的巨大用处。通过这次课程设计,使我得到了一次泳专业知识、专业技能分析和解决问题的全面系统的锻炼。
  2. 在指导老师以及同学的帮助下,基本完成了课程设计要求设计任务,在软件的设计方面也有了一定的提高,熟练掌握了c++命令和编程技巧。无论在理论上还是在实践中,都给与我们很大的帮助,使我得到很大的提高,这对于我以后的工作和学习都有很大的帮助,在此感谢他们耐心的辅导。

九、参考文献

[1] 张福祥. C语言程序设计[M]. 辽宁大学出版社,2008.1
[2] 张福祥,王萌.C语言程序设计习题解答与实验实训[M].沈阳:辽宁大学出版社,2008.
[3] 牛莉,刘远军等.计算机等级考试辅导教程[M].北京:中国铁道出版社,2008.
[4] 陈志泊.ASP.NET数据库应用程序开发.北京:人民邮电出版社,2005
[5] 万科,覃剑.Visual C#.NET程序设计基础. 北京:清华大学出版社,2007

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值