宿舍管理系统报告.docx
《宿舍管理系统报告.docx》由会员分享,可在线阅读,更多相关《宿舍管理系统报告.docx(29页珍藏版)》请在冰豆网上搜索。
宿舍管理系统报告
学生宿舍管理系统
一、实验目的
1.熟练掌握线性表的基本操作在顺序存储和链式存储上的实现。
、;
2.以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点;
3.掌握线性表的动态分配顺序存储结构的定义和基本操作的实现;
4.通过实验帮助学生加深对C语言的使用(特别是函数的参数调用、指针类型的应用和链表的建立等各种基本操作)。
二、实验内容
我组设计的是“学生宿舍管理系统”,主要是针对住宿学生个人信息的管理,适用对象主要是学校,以方便学校对住宿学生的管理。
包括学生的姓名、学号、性别、专业、班级等等。
在编写过程中主要运用C语言的基本知识有:
数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的调用与使用)等。
三、实验环境
台式计算机每人一台;
软件:
VisualC++6。
0;
四、需求分析
该程序是由C语言编写的一个宿舍管理查询软件,本程序在MicrosoftVisualC++6.0下运行,其主要功能是实现对学生信息的录入、添加、删除、修改、查询、统计.其中查询可以分别以姓名、学号、宿舍号为关键字查询学生信息。
统计可以分别以学号、宿舍号、性别、班级、专业为关键字进行统计,并且输出信息按学号大小从小到大输出。
五、概要设计
1、方案设计
2、数据结构说明
程序中数据主要是学生信息和宿舍信息,具体属于类型如下:
structstu
{
charname[20];
intnum;
charsex;
intage;
intgrade;
intnclass;
charzhuanye[30];
};
structdom
{
intbui_num;
intfloor_num;
introom_num;
intbed_num;
structstust;
}s[MAX],p;
3、模块功能说明
第一密码模块:
调用cipher(),进行管理者的注册与登录操作。
第二录入模块:
调用input_message(),对住宿学生信息进行录入。
第三添加模块:
调用append_message(),对新来学生信息进行添加录入.
第四修改模块:
调用revise_message(),对需修改学生的信息进行修改。
第五删除模块:
调用delete_message(),对某一学生信息进行删除操作.
第六查询模块:
调用find_message(),分别以姓名、学号、宿舍号对学生信息进行查询。
第七统计模块:
调用census_message(),分别以学号、宿舍号、性别、班级、专业方式对学生信息进行统计,并按学号由小到大输出.
六、详细设计及运行结果
1、登陆界面
2、主界面
3、录入模块
4、录入界面
5、打印学生信息界面
6、更新学生信息界面
7、查询宿舍信息界面
8、统计宿舍信息界面
9、学生宿舍排序
七、源程序
#include〈stdio.h>
#include”string。
h"
#defineMAX10
#definePRINT1printf("-——--—---————-—--—--------—---—--————-----———--———-————————--———---———----—\n")
#definePRINT2printf("学号-—学生姓名--性别——年龄--年级—-班级--专业—-楼号——楼层号--房间号--床号\n\n”)
intsum;
structstu
{
charname[20];
intnum;
charsex;
intage;
intgrade;
intnclass;
charzhuanye[30];
};
structdom
{
intbui_num;
intfloor_num;
introom_num;
intbed_num;
structstust;
}s[MAX],p;
/*保存信息*/
save_message()
{FILE*fp;
inti;
if((fp=fopen("dom。
txt”,”wt”))==NULL)
{
printf(”读文件错误!
\n");
return0;
}
for(i=0;iif(fwrite(&s[i],sizeof(structdom),1,fp)!
=1)
printf("写文件错误!
\n");
fclose(fp);
}
/*输入模块*/
input_message()
{inti=0;
//clrscr();
printf("\n\n录入学生信息(最多%d个)\n”,MAX);
printf(”——-———-——————---———--——-—-——\n");
do
{
printf(”\n第%d个学生\n\n”,i+1);
printf("\n学号:
");
scanf("%d",&s[i].st.num);
if(s[i].st。
num==0)break;
printf("\n学生姓名:
”);
scanf(”%s”,s[i]。
st。
name);
printf("\n学生性别(男生用M表示,女生用F表示):
”);
getchar();
scanf(”%c",&s[i].st.sex);
printf("\n学生年龄:
”);
scanf(”%d",&s[i]。
st。
age);
printf(”\n学生年级:
");
scanf(”%d”,&s[i]。
st。
grade);
printf("\n学生班级:
”);
scanf("%d”,&s[i].st。
nclass);
printf("\n学生专业:
”);
scanf("%s",&s[i].st。
zhuanye);
printf("\n宿舍楼号:
");
scanf("%d”,&s[i].bui_num);
printf(”\n宿舍楼层号:
”);
scanf(”%d”,&s[i].floor_num);
printf("\n宿舍房间号:
”);
scanf(”%d",&s[i]。
room_num);
printf("\n宿舍床号:
”);
scanf(”%d”,&s[i].bed_num);
i++;
}while(iprintf("\n——%d个学生的信息输入完毕!
—-\n",i);
sum=i;
printf(”\n按任意键返回主菜单!
”);
getchar();
//bioskey(0);
return0;
}
/*读取信息*/
intread_message()
{
FILE*fp;
inti=0;
if((fp=fopen(”dom.txt",”rt”))==NULL)
{
printf(”\n\n*****暂时还没有任何信息,按任意键进入主菜单选择基本信息的录入!
*****\n");
return0;
}
while(!
feof(fp))
{
fread(&s[i],sizeof(structdom),1,fp);
i++;
}
fclose(fp);
return(i);
}
/*输出模块*/
output_message()
{inti=0;
//clrscr();
printf(”\n\n—-学生信息表—-\n\n");
PRINT2;
PRINT1;
for(i=0;i〈sum;i++)
if(s[i]。
st。
num!
=0)
{
printf(”%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i]。
st.num,s[i].st。
name,s[i].st。
sex,s[i]。
st.age,
s[i].st。
grade,s[i]。
st。
nclass,s[i]。
st。
zhuanye,s[i].bui_num,s[i].floor_num,s[i].room_num,s[i].bed_num);
printf(”\n”);
//bioskey(0);
}
return0;///
}
/*添加学生信息*/
insert_message()
{inti=sum,flag=0;
charchoice;
printf(”\n\n添加一个新同学\n”);
printf("-——-—-—--—-———-\n");
do
{
printf("\n新学号:
”);
scanf(”%d",&s[i].st.num);
printf("\n学生姓名:
”);
scanf("%s”,s[i]。
st.name);
printf("\n学生性别(男生用M表示,女生用F表示):
");
getchar();
scanf("%c”,&s[i]。
st.sex);
printf(”\n学生年龄:
”);
scanf("%d”,&s[i]。
st。
age);
printf("\n学生年级:
");
scanf(”%d”,&s[i]。
st.grade);
printf(”\n学生班级:
");
scanf(”%d”,&s[i].st。
nclass);
printf(”\n学生专业:
");
scanf(”%s”,s[i]。
st.zhuanye);
printf(”\n宿舍楼号:
”);
scanf("%d",&s[i].bui_num);
printf(”\n宿舍楼层号:
");
scanf("%d”,&s[i]。
floor_num);
printf(”\n宿舍房间号:
");
scanf("%d",&s[i].room_num);
printf(”\n宿舍床号:
");
scanf("%d",&s[i].bed_num);
sum++;
printf("\n要继续吗?
(Y/N)”);
getchar();
scanf("%c",&choice);
if(choice==’y’||choice==’Y')
{
flag=1;
i++;
printf(”\n继续!
\n");
}
elseflag=0;
}while(flag==1);
printf(”\n按任意键返回主菜单!
");
return0;
}
/*删除模块*/
del_message()
{intflag,del_num,i,k;
charchoice;
do
{printf("\n输入要删除的学生学号:
”);
scanf("%d”,&del_num);
for(i=0;iif(del_num==s[i]。
st.num)
for(k=i;ks[k]=s[k+1];
sum——;
printf("\n\n继续吗?
(Y/N)");
getchar();
scanf(”%c",&choice);
if(choice==’y’||choice==’Y’)
{
flag=1;
printf("\n继续!
\n”);
}
elseflag=0;
}while(flag==1);
printf("\n\n按任意键返回主菜单!
”);
getchar();
return0;
}
/*修改模块*/
revise_message()
{inti=0,choices,revise_num,flag=0;charchoice;
do
{
printf("\n输入要修改的学生号:
");
scanf(”%d",&revise_num);
for(i=0;i〈sum;i++)
if(s[i]。
st。
num==revise_num)
{
printf("\n-—学生信息——\n”);
PRINT1;
PRINT2;
printf(”%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i].st.num,s[i]。
st。
name,s[i]。
st。
sex,s[i]。
st.age,s[i].st。
grade,s[i]。
st。
nclass,s[i].st。
zhuanye,s[i].bui_num,s[i].floor_num,s[i]。
room_num,s[i].bed_num);
printf(”\n您要修改哪一项?
\n");
printf("\n1。
学号\n");
printf("\n2.性别\n”);
printf("\n3.姓名\n”);
printf(”\n4。
年龄\n”);
printf(”\n5。
年级\n”);
printf("\n6。
班级\n”);
printf("\n7.专业\n");
printf(”\n8。
楼号\n");
printf(”\n9.楼层号\n");
printf("\n10.房间号\n");
printf(”\n11.床号\n”);
printf(”\n请选择(1-11):
");
scanf("%d”,&choices);
switch(choices)
{
case1:
printf(”\n输入修改后的学号”);
scanf("%d”,&s[i].st.num);break;
case2:
printf(”\n输入修改后的姓名”);
scanf(”%s”,s[i].st.name);break;
case3:
printf(”\n输入修改后的性别”);
scanf("%s”,s[i]。
st.sex);break;
case4:
printf(”\n输入修改后的年龄”);
scanf("%d",&s[i]。
st。
age);break;
case5:
printf(”\n输入修改后的年级");
scanf("%d",&s[i]。
st.grade);break;
case6:
printf(”\n输入修改后的班级”);
scanf(”%d”,&s[i]。
st。
nclass);break;
case7:
printf("\n输入修改后的专业”);
scanf("%s”,&s[i]。
st.zhuanye);break;
case8:
printf(”\n输入修改后的楼号");
scanf("%d”,&s[i]。
bui_num);break;
case9:
printf("\n输入修改后的楼层号");
scanf(”%d”,&s[i]。
floor_num);break;
case10:
printf("\n输入修改后的房间号");
scanf(”%d”,&s[i].room_num);break;
case11:
printf("\n输入修改后的床号”);
scanf(”%d",&s[i].bed_num);break;
}
PRINT1;
PRINT2;
printf("%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n”,s[i]。
st.num,s[i]。
st。
name,s[i].st。
sex,s[i].st。
age,s[i]。
st.grade,s[i].st。
nclass,s[i]。
st.zhuanye,s[i]。
bui_num,s[i]。
floor_num,s[i].room_num,s[i]。
bed_num);
break;
}
if(i==sum)
printf(”\n该学生不存在!
");
//bioskey(0);
return0;
/*printf("\n\n继续修改吗?
(Y/N)”);
getchar();
scanf(”%c",&choice);
if(choice==’y’||choice==’Y’)
{
flag=1;
printf("\n继续!
\n”);
}
elseflag=0;*/
}while(flag==1);
getchar();
printf("\n按任意键返回主菜单!
”);
return0;
}
/*更新模块*/
renew_message()
{
intchoice;
do
{
printf("\n\n\n*****更新学生信息*****\n\n”);
printf("1.添加学生信息\n\n”);
printf(”2.删除学生信息\n\n”);
printf(”3。
修改学生信息\n\n");
printf(”0.返回主菜单\n\n");
printf(”请选择(0—3):
”);
scanf(”%d",&choice);
switch(choice)
{
case1:
insert_message();break;
case2:
del_message();break;
case3:
revise_message();break;
case0:
break;
}
}while(choice!
=0);
return0;
}
inquire_name()/*按姓名查询*/
{
inti,j=0;
charinquire_name[10];
printf(”\n输入要查询的学生姓名:
");
scanf("%s”,inquire_name);
for(i=0;iif(strcmp(s[i]。
st。
name,inquire_name)==0&&s[i]。
st.num!
=0)
{
printf("\n--学生信息-—\n”);
PRINT1;
PRINT2;
printf(”%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i]。
st。
num,s[i].st.name,s[i].st.sex,s[i]。
st.age,
s[i]。
st。
grade,s[i].st.nclass,s[i].st。
zhuanye,s[i]。
bui_num,s[i]。
floor_num,s[i]。
room_num,s[i].bed_num);
}
elsej++;
if(j==sum)
printf("\n该学生不存在!
”);
return0;
}
intinquire_num()/*按学号查询*/
{
inti,j=0,inquire_num;
printf("\n输入要查询的学生学号:
");
scanf(”%d",&inquire_num);
for(i=0;i〈sum;i++)
if(inquire_num==s[i]。
st。
num)
{
printf(”\n-—学生信息--\n");
PRINT1;
PRINT2;
printf(”%2d%10s%6c%7d%6d%5d%8s%5d%6d%8d%9d\n\n",s[i].st.num,s[i].st。
name,s[i].st。
sex,s[i]。
st。
age,
s[i].st.grade,s[i].st。
nclass,s[i].st.zhuanye,s[i]。
bui_num,s[i]。
floor_num,s[i]。
room_num,s[i].bed_num);
}
elsej++;
if(j==sum)
printf(”\n该学生不存在!
”);
return0;
}
/*查询模块*/
inquire_message()
{intchoice;
do
{
printf("\n\n*****查询学生信息*****\n\n”);
printf(”1.按学生姓名查询\n");
printf(”2。
按学生学号查询\n”);
printf(”0。
回主菜单\n”);
printf("请选择(0—2):
”);
scanf(”%d",&choice);
switch(choice)
{
case1:
inquire_name();break;
case2:
inquire_num();break;
case0:
break;
}
}while(choice!
=0);
return0;
}
count_person()/*学生住宿情况统计*/
{
inti,j=0,count_grade,count_nclass;
charcount_zhuanye[20];
printf(”\n输入要统计的学生专业,年级,班级:
”);
scanf(”%10s%8d%8d",&count_zhuanye,&count_grade,&count_nclass);
printf("\n住宿情况”);
printf(”\n-———————---—-—---—-—-—-———-——--\n");
printf(”\n姓名学号楼号楼层号房间号床号\n");
for(i=0;iif(s[i].st.grade==count_grade&&s[i].st。
nclass==count_nclass&&strcmp(s[i]。
st。
zhuanye,count_zhuanye)==0)
printf(”\n%10s%8d%8d%8d%8d%8d\n”,s[i]。
st。
name,s[i]。
st.num,s[i].bui_num,s[i].floor_num,
s[i].room_num,s[i]。
bed_num);
elsej++;
if(j==sum)
printf("\n该学生不存在!
");
return0;
}
/*统计模块*/
count_message()
{
intchoice;
do
{
printf(”\n\n*****统计住宿信息*****\n”);
printf("1。
学生住宿情况统计\n”);
printf("0。
返回主菜单\n”);
printf("请选择(0-1):
”);
scanf("%d”,&choice);
switch(choice)
{
case1:
count_person();break;
case0:
break;
}
}while(choice!
=0);
return0;
}
sort_domitry()/*学生宿舍