数据结构宿舍管理查询软件课程设计.docx
《数据结构宿舍管理查询软件课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构宿舍管理查询软件课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
数据结构宿舍管理查询软件课程设计
《数据结构课程设计》
宿舍管理查询软件
学院:
信息科学技术学院
班级:
信计082
学号:
********……
*****
指导教师:
并接
完成日期:
2010年12月
四、详细设计及测试
5
一、设计任务
题目:
宿舍管理查询软件
任务:
为宿舍管理人员编写一个宿舍管理查询软件,程序设计要求:
(1)建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)
(2)实现如下查询功能:
按姓名查询
按学号查询
按房号查询
(3)打印任意查询结果(可以连续操作)
针对题目所要求的功能不太多,我特意添加了插入数据、读入文件数据以及将数据写入文件三个额外功能。
二、总体设计
根据系统要求,即本系统具有信息的录入,显示,排序显示、查找,插入、从文件中读入数据、循环写入数据、结束程序等功能,先设计出详细的系统流程图,然后将源代码输入程序,进行编译调试即可。
程序总体分12个项目:
输入记录、显示记录、按姓名排序并显示、按房间号排序并显示、按学号排序并显示、按姓名查找并显示、按房间号查找并显示、按学号查找并显示、插入一条记录按学号排序并显示、从文件中读入数据、循环写入数据以及结束程序。
三、系统流程图
系统流程图下页图所示
四、详细设计及测试
根据流程图,将程序源代码输入到编译环境中,按照提示选择进行记录的输入,输入一个数据后提示是否继续输入,直到结束程序为止。
将程序编译生成“学生宿舍管理系统.exe”。
运行该文件如图1所示。
图1输出界面图
输入记录采用循环输入
while(sign!
='n'&&sign!
='N')/*判断*/
{
printf("\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("\t\t是否继续输入?
(Y/N)");
scanf("\t\t%c",&sign);/*输入判断*/
i++;
}
返回(n+i);
按照提示选择“1”进行记录的输入如图2所示:
图2输入记录显示图
连续输入多组数据后,按“n”结束输入,提示按任意键继续,按任意键后选择“2”进行记录的显示如图3所示。
图3显示所有记录
按姓名排序采用冒泡排序法。
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);}
显示后提示按任意键继续,选择“3”进行按姓名排序并显示,如图4所示。
图4按姓名排序显示图
按房间号排序采用冒泡排序法
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);
}
显示后提示按任意键继续,选择“4”进行按房间号排序并显示,如图5所示。
图5按房间号排序显示图
同样学号排序也是用的冒泡法排序。
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);}
显示后提示按任意键继续,选择“5”进行按学号排序并显示,如图6所示。
图6按学号排序显示图
功能6-8为查找功能
按姓名查找并显示功能
printf("\t\t输入要查找的姓名:
");
scanf("%s",s);
while(strcmp(room[i].name,s)!
=0&&iif(i==n)
{
printf("\t\t对不起没有找到该学生!
\n");/*返回失败信息*/
}
else
Display_a_record(room1,i);/*调用函数*/
显示后提示按任意键继续,选择“6”按提示步骤按学号查找一条记录并显示,如图7所示。
图7按姓名查找并显示图
按房间号查找和按学号查找的方法大同小异。
分别输入“7”、“8”显示截图如下页
图8按房间号查找并显示图图9按学号查找并显示图
功能9为插入一条记录按学号排序并显示。
intInsert_a_record(Studentroom[],intn)/*插入一条记录并按学号排序*/
{printf("\t\t学生姓名:
");
scanf("\t\t%s",&room[n].name);
printf("\t\t学生学号:
");
scanf("\t\t%s",&room[n].num);
printf("\t\t学生房间号:
");
scanf("\t\t%s",&room[n].roomnum);
n++;
Sort_by_num(room,n);/*调用排序函数*/
printf("\t\t插入记录成功!
\n");/*返回成功信息*/
return(n);}
显示后提示按任意键继续,选择“9”进行插入数据,如下页图10所示。
图10插入一条记录按学号排序并显示图
五、心得体会
这次课程设计我做的还不是很完善,因为功能不是很多,如果以后有机会完善的话,应该对管理员和用户登录时做进一步完善。
学生的信息还不够完整,如学生的宿舍长,系别,一些费用以及学生的成绩等待相关详细信息。
如果使次系统再详细些,需添加更多的管理员以及管理员权限,还有学生的更多信息,如果有必要的话,添加一些有关教师的信息,以及教师登录的界面。
在这次课程设计的过程中,我们体会到要想开发一个系统软件,不仅需要相当的专业技术知识,还要有严谨缜密的思维能力。
只有思想上清晰了,编程才有意义,否则就是白费力气。
同时还要善于捕获细小的方面,因为那往往是这个程序的致命因素。
这次课程设计培养了我的细心和耐性,更树立了一种科学的态度。
附录:
源代码
#include
#include
#include
#include
typedefstruct
{
charroomnum[4];
charnum[10];
charname[20];
}Student;
Studentroom1[1000];
intmenu()
{
charc;
do
{system("cls");
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§8.按学号查找并显示§\n");
printf("\t\t§9.插入一条记录按学号排序并显示§\n");
printf("\t\t§10.从文件中读入数据§\n");
printf("\t\t§11.循环写入数据§\n");
printf("\t\t§0.结束程序§\n");
printf("\t\t★★★★★★★★★★★★★★★★★★★★\n");
printf("\t\t请选择您要运行的选项按(0-11):
");
c=getchar();
}
while(c<'0'||c>'11');
return(c-'0');
}
intInput(Studentroom[],intn)
{
inti=0;
charsign;
while(sign!
='n'&&sign!
='N')
{
printf("\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("\t\t是否继续输入?
(Y/N)");
scanf("\t\t%c",&sign);
i++;
}
return(n+i);
}
voidDisplay_all_record(Studentroom[],intn)
{
inti;
printf("\t\t----------------------------------------\n");
printf("\t\t房间号学号姓名\n");
printf("\t\t----------------------------------------\n");
for(i=1;i{
printf("\t\t%-10s%-10s%-10s\n",room[i-1].roomnum,room[i-1].num,room[i-1].name);
}
printf("\t\t");
system("pause");
}
voidDisplay_a_record(Studentroom[],intn)
{
printf("\t\t----------------------------------------\n");
printf("\t\t房间号学号姓名\n");
printf("\t\t----------------------------------------\n");
printf("\t\t%-10s%-10s%-10s\n",room[n].roomnum,room[n].num,room[n].name);/*输出所查找的一条记录*/
printf("\n");
printf("\t\t");
}
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("\t\t输入要查找的姓名:
");
scanf("%s",s);
while(strcmp(room[i].name,s)!
=0&&iif(i==n)
{
printf("\t\t对不起没有找到该学生!
\n");
}
else
Display_a_record(room1,i);
}
voidFind_record_rommnum(Studentroom[],intn){
chars[20];
inti=0;
printf("\t\t输入要查找的房间号:
");
scanf("%s",s);
while(strcmp(room[i].roomnum,s)!
=0&&iif(i==n)
{
printf("\t\t对不起没有找到该学生!
\n");
}
else
Display_a_record(room1,i);
}
voidFind_record_num(Studentroom[],intn)
{
chars[20];
inti=0;
printf("\t\t输入要查找的学号:
");
scanf("%s",s);
while(strcmp(room[i].num,s)!
=0&&iif(i==n)
{
printf("\t\t对不起没有找到该学生!
\n");
}
else
Display_a_record(room1,i);
}
intInsert_a_record(Studentroom[],intn)
printf("\t\t学生姓名:
");
scanf("\t\t%s",&room[n].name);
printf("\t\t学生学号:
");
scanf("\t\t%s",&room[n].num);
printf("\t\t学生房间号:
");
scanf("\t\t%s",&room[n].roomnum);
n++;
Sort_by_num(room,n);
printf("\t\t插入记录成功!
\n");
return(n);
}
intAddfromText(Studentroom[],intn)
{
inti=0,num;
FILE*fp;
charfilename[20];
printf("\t\t输入文件名:
");
scanf("\t\t%s",&filename);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\t\t无法打开该文件\n");
printf("\t\t");
system("pause");
return(n);
}
fscanf(fp,"%d",&num);
while(i{fscanf(fp,"%s%s%s%s",room[n+i].roomnum,room[n+i].num,room[n+i].name);
i++;
}
n+=num;
fclose(fp);
printf("\t\t读入成功!
\n");
printf("\t\t");
system("pause");
return(n);
}
voidWritetoText(Studentroom[],intn)
{
inti=0;
FILE*fp;
charfilename[100];
printf("\t\t循环写入数据\n");
printf("\t\t输入文件名:
");
scanf("\t\t%s",&filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("\t\t无法打开该文件\n");
system("pause");
return;
}
fprintf(fp,"%d\n",n);
while(i{
fprintf(fp,"%-10s%-10s%-10s%-10s\n",room[i].roomnum,room[i].num,room[i].name);
i++;
}
fclose(fp);
printf("写入成功!
\n");
}
intmain()
{
intn=0;
for(;;)
{
switch(menu())
{
case1:
printf("\t\t输入记录\n");
n=Input(room1,n);
break;
case2:
printf("\t\t显示记录\n");
Display_all_record(room1,n);
break;
case3:
printf("\t\t按姓名排序并显示\n");
Sort_by_name(room1,n);
printf("\t\t排序成功!
\n");
Display_all_record(room1,n);
printf("\t\t");
break;
case4:
printf("\t\t按房间号排序并显示\n");
Sort_by_roomnum(room1,n);
printf("\t\t排序成功!
\n");
Display_all_record(room1,n);
printf("\t\t");
break;
case5:
printf("\t\t按学号排序并显示\n");
Sort_by_num(room1,n);
printf("\t\t\t排序成功!
\n");
Display_all_record(room1,n);