宿舍查询软件.docx
《宿舍查询软件.docx》由会员分享,可在线阅读,更多相关《宿舍查询软件.docx(27页珍藏版)》请在冰豆网上搜索。
宿舍查询软件
华北科技学院
课程设计说明书
班级:
计科B10-3姓名:
杨小龙学号16
设计题目:
宿舍管理查询软件
设计时间:
2012-06-25至2012-07-06
指导教师:
刘春梅
评语:
_________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:
____评阅教师:
_____
一、设计题目与要求
1、设计目的:
编写一个学生宿舍查询软件,实现对学生宿舍信息的基本管理。
把所学数据结构知识应用到实际软件开发中去。
设计内容:
本软件应完成以下几个功能:
(1)实现学生信息的输入(可连续输入)、
(2)实现学生信息的写入和读取
(3)显示输入的学生信息
(4)实现如下排序功能:
按姓名排序
按学号排序
按房号排序
(5)实现如下查询功能:
按姓名查询
按学号查询
按房号查询
(6)打印任意查询结果
2、设计要求:
为宿舍管理人员编写一个宿舍管理查询软件,程序设计要求:
A.采用交互工作方式
B.建立数据文件,数据文件按关键字(姓名、学号、房号)进行排
C.查询菜单:
(分别按姓名、学号、房号查询)
D.打印任一查询结果(可以连续操作)
二、概要设计
1.功能需求分析
宿舍管理查询软件
应该包括学生信息的录入、写入文件、读入文件、显示、排序、查找,其中学生信息应该包括学生的学号、姓名和房号。
此软件应该包括以下功能:
1.系统以菜单方式工作
2.录入新的学生信息
3.写入读取学生信息
4.显示学生信息
5.对学生信息排序
6.查找某学号的学生信息
2.总体设计
功能结构图设计
依据程序的功能需求,描述该系统功能的结构图如下:
图1系统功能结构图
3.模块简介
依据程序的功能模块的划分,各模块定义如下:
(1)输入学生信息
模块名:
intInput(Studentroom[],intn)
模块描述:
通过此模块可以根据文字提示依次输入学生信息。
(2)写入学生信息
模块名:
intAddfromText(Student*room,intn)//循环写入
模块描述:
将录入的学生信息写入文件,以便以后读取和查询。
(3)读取学生信息
模块名:
voidWritetoText(Studentroom[],intn)//循环读取
模块描述:
从文件中读取以前所写入的信息,以便以后直接进行查询等。
(4)显示学生信息
模块名:
voidDisplay_all_record(Studentroom[],intn);
模块描述:
此模块可以显示出所输入学生的信息,并已初步按学号排序。
(5)按姓名、房间号、学号排序
模块名:
voidSort_by_name(Studentroom[],intn)//姓名排序
voidSort_by_roomnum(Studentroom[],intn)//房号排序
voidSort_by_num(Studentroom[],intn)//学号排序
模块描述:
在排序子菜单中,根据提示分别按姓名、学号、房间号排序。
(6)按姓名、房间号、学号查找
模块名:
voidFind_record_name(Studentroom[],intn)
voidFind_record_rommnum(Studentroom[],intn)
voidFind_record_num(Studentroom[],intn)
模块描述:
在查找子菜单中,根据提示分别按姓名、房间号、学号查找。
三、详细设计
1数据结构
1、定义数据结构
typedefstruct
{
charroomnum[10];
charnum[10];
charname[20];
}Student;
Studentroom1[1000];
};
2算法说明
(1)、主函数的算法设计:
清屏、显示菜单及运用选择操作(运用swith语句),调用各个子函数,最后退出程序。
整个程序流程图如下:
图2系统流程图
(2)、各个子程序的算法设计
1)学生信息的输入:
该子函数的程序流程图如图3所示。
图3模块1输入子流程图
2)学生信息的写入和读取:
该子函数运用fprintf函数和fscanf函数实现学生信息的写入和读取,流程图分别如下图4
(1)和图4
(2)所示。
图4
(1)子模块2文件写入图4
(2)子模块3文件读入
3)学生信息的排序和查找:
排序子函数运用冒泡排序法,分别对学生信息按姓名、房号、学号进行排序,流程图如图5,查找运用顺序查找,分别对学生信息进行查找,特别的:
按房号查找,一个房号可以查找号几个学生,该函数流程图如下图6(其他查找流程图略)。
图5排序流程图图6按房号查找
四、运行结果和调试分析
1.程序运行结果如图5所示。
图7主菜单界面
2.在主菜单下输入选项“1”,根据提示语进行输入,测试实例如下图。
图8模块1输入界面
完成学生信息输入后,程序显示出所输入的全部信息。
输入结束后按任意键,程序回到主菜单。
3.在主菜单下输入“2”,根据提示,键盘输入要写入文件名,若写入成功,显示如下界面。
图9模块2写入
4.在主菜单下输入“3”,根据提示,键盘输入已写入的文件名,若读取成功,则显示图6
(1)界面,若读取失败,则显示图6
(2)。
图10
(1)读取成功图10
(2)读取失败
5.在主菜单下输入“4”,显示所读取的学生信息。
图11学生信息显示
6.在主菜单下输入“5”,显示排序子菜单。
图12排序子菜单
7.在排序子菜单界面下,分别选择输入“1”、“2”、“3”,系统将分别按姓名、房号、学号排序并显示排序结果,(姓名、房号排序结果显示如图,学号排名略)按任意键返回排序子菜单,在排序子菜单界面下按“4”退出子菜单,返回主菜单。
图13
(1)姓名排序图13
(2)房号排序
8.在主菜单界面下,选择输入“6”,显示查找子菜单。
图14查找子菜单
9.在排序子菜单下,选择输入“1”、“2”、“3”,根据提示,输入要查找的姓名、房号、学号进行查找,查找结果如下图15
(1)
(2)(3),若查找的信息不存在,在显示没有找到,效果截图15(4),按任意键返回查找子菜单,在子菜单界面下,按“4”返回主菜界面。
图15
(1)姓名查找图15
(2)房号查找
图15(3)学号查找图15(4)查找失败
整个程序运行效果,如上图所示。
五、总结体会
这次课程设计完成还不是很完善,虽然功能不是很多,但是由于链表和查找这块掌握不够好,查找没有用二分查找,所以在时间复杂度方面不是很满意,总体程序而言基本功能都能实现,界面设计这方面自认为还是比较满意的。
如果以后有机会话我觉得我应该在学生的信息详细度方面,如每个寝室的宿舍长,系别,专业班级,性别等加以完善。
还有就是多考虑时间复杂度方面的问题,选择合适的数据结构来实现功能。
在编程过程中,也离不开同学的帮忙,遇到好多问题都是同学帮忙解决的,比如说:
在子菜单中实现功能之后,要返回主菜单,这里运用好多方法,都得不到满意的效果,要么选择退出,退出之后不能再运行,要么每运行一次他就自动退出,后来经同学帮忙,运用goto语句解决这问题。
还有就是一些小的细节也会引起很大错误,比如,我遇到录入信息,再次打开,读取文件之后,虽然读取成功,但是不能用,想了好长时间没有结果,最后同学帮忙找问题,才发现时由于疏忽,没有返回n值。
在这次课程设计的过程中,我们体会到要想开发一个系统软件,不仅需要相当的专业技术知识,还要有严谨缜密的思维能力。
只有思想上清晰了,编程才有意义,否则就是白费力气。
同时还要善于捕获细小的方面,因为那往往是这个程序的致命因素。
这次课程设计培养了我的细心和耐性,更树立了一种科学的态度,
也增长了以后编程的信心。
源代码:
#include
#include
#include
#include
typedefstruct
{
charroomnum[10];
charnum[10];
charname[20];
}Student;
Studentroom1[1000];
intmenu()//主菜单显示
{
charc;
do
{system("cls");
printf("\t\t*****************************************\n\n");
printf("\t\t学生宿舍管理系统\n\n");
printf("\t\t*****************************************\n\n\n");
printf("\t\t*********主菜单**********\n\n");
printf("\t\t1.录入学生信息\n\n");
printf("\t\t2.写入学生信息\n\n");
printf("\t\t3.读取学生信息\n\n");
printf("\t\t4.显示学生信息\n\n");
printf("\t\t5.学生信息排序\n\n");
printf("\t\t6.查找学生信息\n\n");
printf("\t\t7.结束程序\n\n");
printf("\t\t***************************\n\n");
printf("\t\t⊙请选择您要运行的选项按(1-7):
");
c=getchar();
}
while(c<'1'||c>'7');
return(c-'0');
}
intmenu1()//排序菜单显示
{
charc;
do
{system("cls");//清屏
while(c<'1'||c>'4')
{
system("cls");
printf("\n\t\t***********学生信息排序***********\n\n");
printf("\t\t\t1>按姓名排序显示\n\n");
printf("\t\t\t2>按房号排序显示\n\n");
printf("\t\t\t3>按学号排序显示\n\n");
printf("\t\t\t4>退出子菜单\n\n");
printf("\t\t*********************************\n\n");
printf("\t\t⊙请选择您要运行的选项按(1-4):
");
c=getchar();
}
}
while(c<'1'||c>'4');
return(c-'0');
}
intmenu2()//查找菜单显示
{
charc;
do
{system("cls");
while(c<'1'||c>'4')
{
system("cls");
printf("\n\t\t***********学生信息查找***********\n\n");
printf("\t\t\t1>按姓名查找显示\n\n");
printf("\t\t\t2>按房号查找显示\n\n");
printf("\t\t\t3>按学号查找显示\n\n");
printf("\t\t\t4>退出子菜单\n\n");
printf("\t\t*********************************\n\n");
printf("\t\t⊙请选择您要运行的选项按(1-4):
");
c=getchar();
}
}
while(c<'1'||c>'4');
return(c-'0');
}
intInput(Studentroom[],intn)//输入显示
{
inti=0;
charsign;
while(sign!
='n'&&sign!
='N')
{
printf("\n\t\t☉姓名:
");
scanf("\t\t%s",&room[n+i].name);
printf("\t\t☉学号:
");
scanf("\t\t%s",&room[n+i].num);
printf("\t\t☉房间号:
");
scanf("\t\t%s",&room[n+i].roomnum);
printf("\n\t\t☉是否继续输入?
(Y/N)");
scanf("\t\t%c",&sign);
i++;
}
printf("\n\n\t\t");
system("pause");
return(n+i);
}
voidWritetoText(Studentroom[],intn)//循环写入
{
inti=0;
FILE*fp;
charfilename[100];
scanf("\t\t%s",&filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\n\t\t无法打开该文件\n\n");
printf("\n\t\t");
system("pause");
return;
}
fprintf(fp,"%d\n",n);
while(i{
fprintf(fp,"%-17s%-17s%-17s\n",room[i].roomnum,room[i].num,room[i].name);
i++;
}
fclose(fp);
printf("\n\t\t恭喜您,写入成功!
\n\n");
printf("\n\t\t");
system("pause");
return;
}
intAddfromText(Student*room,intn)//循环读入
{
inti=0,num;
FILE*fp;
charfilename[20];
scanf("\t\t%s",&filename);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n\t\t无法打开该文件\n");
printf("\n\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num);
printf("\t\t");
printf("\n\t\t*****************************************\n");
printf("\t\t*房间号学号姓名*\n");
printf("\t\t*****************************************\n");
while(i{
fscanf(fp,"%s%s%s",room1[i].roomnum,room1[i].num,room1[i].name);
printf("\t\t");
printf("%-17s%-17s%-17s\n",room1[i].roomnum,room1[i].num,room1[i].name);
i++;
n++;
}
fclose(fp);
printf("\n\t\t恭喜您,读入成功!
\n");
printf("\n\t\t");
system("pause");
return(n);
}
voidDisplay_all_record(Studentroom[],intn)//显示
{
inti;
printf("\n\t\t*****************************************\n");
printf("\t\t*房间号学号姓名*\n");
printf("\t\t*****************************************\n");
for(i=1;i{
printf("\t\t%-17s%-17s%-17s\n",room[i-1].roomnum,room[i-1].num,room[i-1].name);
}
printf("\t\t");
system("pause");
}
voidDisplay_a_record(Studentroom[],intn)
{
printf("\n\t\t*****************************************\n");
printf("\t\t*房间号学号姓名*\n");
printf("\t\t*****************************************\n");
printf("\t\t%-17s%-17s%-16s\n",room[n].roomnum,room[n].num,room[n].name);
printf("\n");
}
voidSort_by_name(Studentroom[],intn)//按姓名排序
{
inti,j;
chart[10];
for(i=0;ifor(j=0;jif(strcmp(room[j].name,room[j+1].name)>0)
{
strcpy(t,room[j+1].name);
strcpy(room[j+1].name,room[j].name);
strcpy(room[j].name,t);
strcpy(t,room[j+1].num);
strcpy(room[j+1].num,room[j].num);
strcpy(room[j].num,t);
strcpy(t,room[j+1].roomnum);
strcpy(room[j+1].roomnum,room[j].roomnum);
strcpy(room[j].roomnum,t);
}
}
voidSort_by_num(Studentroom[],intn)//用冒泡排序法按学号排序
{
inti,j;
chart[10];
for(i=0;ifor(j=0;jif(strcmp(room[j].num,room[j+1].num)>0)
{
strcpy(t,room[j+1].roomnum);
strcpy(room[j+1].roomnum,room[j].roomnum);
strcpy(room[j].roomnum,t);
strcpy(t,room[j+1].num);
strcpy(room[j+1].num,room[j].num);
strcpy(room[j].num,t);
strcpy(t,room[j+1].name);
strcpy(room[j+1].name,room[j].name);
strcpy(room[j].name,t);
}
}
voidSort_by_roomnum(Studentroom[],intn)//按房间号排序
{
inti,j;
chart[10];
for(i=0;ifor(j=0;jif(strcmp(room[j].roomnum,room[j+1].roomnum)>0)
{
strcpy(t,room[j+1].num);
strcpy(room[j+1].num,room[j].num);
strcpy(room[j].num,t);
strcpy(t,room[j+1].roomnum);
strcpy(room[j+1].roomnum,room[j].roomnum);
strcpy(room[j].roomnum,t);
strcpy(t,room[j+1].name);
strcpy(room[j+1].name,room[j].name);
strcpy(room[j].name,t);
}
}
voidFind_record_name(Studentroom[],intn)//按姓名查找
{
chars[10];
inti=0;
printf("\n\t\t☉输入要查找的姓名:
");
scanf("%s",s);
while(strcmp(room[i].name,s)!
=0&&iif(i==n)
{
printf("\n\t\t对不起没有该学生记录!
\n\n");
}
else
Display_a_record(room1,i);//调用显示
}
voidFind_record_rommnum(Studentroom[],intn)//按房间号查找
{
chars[20];
inti=0;
intflag=0;
printf("\n\t\t☉输入要查找的房间号:
");
scanf("%s",s);
printf("\n\t\t*****************************************\n");
printf("\t\t*房间号学号姓名*\n");
printf("\t\t*****************************************\n");
if(i