课题任务书
设计题目
宿舍管理软件 限定人数 3
问题描述 设某宿舍有n个房间,每个房间有6个床位,学生信息包括学号、班级编号、姓名、性别,为学生宿舍管理人员编写一个宿舍管理软件。
基本要求与说明
- 学生的入住处理,录入学生信息,随机分配床位。要求男女不能混住,原则上同班同学优先安排在一起。保证宿舍空间充分利用,尽量避免一两个人占用一个宿舍的情况。
- 学生退房处理;
- 输出学生入住信息(按房间号和床号有序);
- 修改入住信息;
- 学生调换宿舍或床位处理;
- 按给定学号、姓名、房号查询;
- 查询房间使用情况。
- 要求能够管理房间不少于40个,班级不少于30个,每个班级人数不少于30人。*
一、 前言
寝室管理系统对于一个学校来说是必不可少的组成部分。目前好多学校还停留在寝室管理人员手工记录数据的最初阶段,手工记录对于规模小的学校来说还勉强可以接受,但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的。而且当查找某条记录时,由于数据量庞大,还只能靠人工去一条条的查找,这样不但麻烦还浪费了许多时间,效率也比较低。当今社会是飞速进步的世界,原始的记录方式已经被社会所淘汰了,计算机化管理正是适应时代的产物。信息世界永远不会是一个平静的世界,当一种技术不能满足需求时,就会有新的技术诞生并取代旧技术。 21世纪的今天,信息社会占着主流地位,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。我们针对如此,设计了一套学生寝室管理系统。学生寝室管理系统采用的是计算机化管理,系统做的尽量人性化,使用者会感到操作非常方便,管理人员需要做的就是将数据输入到系统的数据库中去。由于数据库存储容量相当大,而且比较稳定,适合较长时间的保存,也不容易丢失。这无疑是为信息存储量比较大的学校提供了一个方便、快捷的操作方式。本系统具有运行速度快、安全性高、稳定性好的优点,并且具备修改功能,能够快速的查询学校所需的住宿信息。
二 、设计要求
1.要求
- 学生的入住处理,录入学生信息,随机分配床位。要求男女不能混住, 原则上同班同学优先安排在一起。保证宿舍空间充分利用,尽量避免一两个人占用一个宿舍的情况。
2).学生退房处理;
3).输出学生入住信息(按房间号和床号有序);
4).修改入住信息;
5).学生调换宿舍或床位处理;
6).按给定学号、姓名、房号查询;
7).查询房间使用情况。
8).要求能够管理房间不少于40个,班级不少于30个,每个班级人数不少于30人。
2.任务
- 定义各类头文件,变量及宏定义;
- 设计系统各个功能模块;
- 画出部分模块的流程图;
- 改进或增加功能模块;
- 编写代码;
- 程序分析与调试。
3.运行环境
- WINDOWS 7系统
- Visual C++6.0编译环境*
4.开发工具
- C语言
- C++
三、 概要设计
-
.系统的功能模块
-
.函数功能及参数说明、调用关系
此程序的运用使用了以下头文件:
#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 "文件位置"
//对储存文件进行重命名
四、 详细设计
- .主函数模块
五、改进或增加功能模块说明
- . 增加了排序显示模块
排序模块可以对学生学号,以及根据宿舍号的不同特征进行排序,方便使用者,查看各种数据,方便对系统信息管理。此时把三个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;
}
八、 致谢:
- 为期两周的课程设计即将结束,在开始设计的时候我们也参考了许多具体的实例,但是真正做起来却是非常难得的。在本次课程设计的过程中,我遇到了很多的困难的,但是在老师和同学的帮助之下,我完成了此次课程设计。我首先要感谢任课老师,是他让我们第一次接触了这门课程,虽然这次我并没有应用太多课上的知识,但从其他同学的课程设计中,我还是感觉到这门课的巨大用处。通过这次课程设计,使我得到了一次泳专业知识、专业技能分析和解决问题的全面系统的锻炼。
- 在指导老师以及同学的帮助下,基本完成了课程设计要求设计任务,在软件的设计方面也有了一定的提高,熟练掌握了c++命令和编程技巧。无论在理论上还是在实践中,都给与我们很大的帮助,使我得到很大的提高,这对于我以后的工作和学习都有很大的帮助,在此感谢他们耐心的辅导。
九、参考文献:
[1] 张福祥. C语言程序设计[M]. 辽宁大学出版社,2008.1
[2] 张福祥,王萌.C语言程序设计习题解答与实验实训[M].沈阳:辽宁大学出版社,2008.
[3] 牛莉,刘远军等.计算机等级考试辅导教程[M].北京:中国铁道出版社,2008.
[4] 陈志泊.ASP.NET数据库应用程序开发.北京:人民邮电出版社,2005
[5] 万科,覃剑.Visual C#.NET程序设计基础. 北京:清华大学出版社,2007