资源描述
(完整word版)数据结构宿舍管理查询系统的实现课程设计
学号
2014-2015学年 第一学期
《数据结构》
课程设计报告
题目:
宿舍管理查询系统的实现
专业:
班级:
姓名:
学号:
指导教师:
成绩:
计算机与信息工程系
2014年 10 月25 日目 录
1设计任务 3
2总体设计 3
3系统流程图 3
4详细设计及测试...................................................................5
5心得体会 12
致谢...................................................................................13
参考文献.............................................................................14
附录:源代码 15
1设计任务
题目:宿舍管理查询软件
任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:
(1)建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)
(2)实现如下查询功能:
按姓名查询
按学号查询
按房号查询
(3) 打印任意查询结果(可以连续操作)
针对题目所要求的功能不太多,我特意添加了插入数据、读入文件数据以及将数据写入文件三个额外功能。
2总体设计
根据系统要求,即本系统具有信息的录入,显示,排序显示、查找,插入、从文件中读入数据、循环写入数据、结束程序等功能,先设计出详细的系统流程图,然后将源代码输入程序,进行编译调试即可。
程序总体分12个项目:输入记录、显示记录、按姓名排序并显示、按房间号排序并显示 、按学号排序并显示 、按姓名查找并显示 、按房间号查找并显示 、按学号查找并显示、插入一条记录按学号排序并显示、从文件中读入数据、循环写入数据以及结束程序。
3系统流程图
系统流程图下页图1所示
输出界面
开始
选择操作
输入记录
选择1
否 是
选择2
显示记录
否 是
按姓名排序并显示
否
选择3
是
选择4
按房间号排序并显示
否 是
按学号排序并显示
否
选择5
是
选择6
否
按姓名查找并显示
是
选择7
否
按房间号查找并显示
是
选择8
按学号查找并显示
否
是
插入一条记录显示
选择9
是
选择10
否
从文件中读入数据
是
选择11
循环写入数据
否 是
否
选择0
是
否
退出系统
是
结束
图1
图1系统流程图
4详细设计及测试
根据流程图,将程序源代码输入到编译环境中,按照提示选择进行记录的输入,输入一个数据后提示是否继续输入,直到结束程序为止。
将程序编译生成“学生宿舍管理系统.exe”。运行该文件如图2所示。
图2 输出界面图
输入记录采用循环输入
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”进行记录的输入如图3所示:
图3 输入记录显示图
连续输入多组数据后,按“n”结束输入,提示按任意键继续,按任意键后选择“2”进行记录的显示如图4所示。
图4 显示所有记录
按姓名排序采用冒泡排序法。
int i,j;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(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”进行按姓名排序并显示,如图5所示。
图5 按姓名排序显示图
按房间号排序采用 冒泡排序法
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(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”进行按房间号排序并显示,如图6所示。
图6 按房间号排序显示图
同样学号排序也是用的冒泡法排序。
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(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”进行按学号排序并显示,如图7所示。
图7按学号排序显示图
功能6-8为查找功能
按姓名查找并显示功能
printf("\t\t输入要查找的姓名:");
scanf("%s",s);
while(strcmp(room[i].name,s)!=0 && i<n) i++; /*查找判断*/
if(i==n)
{
printf("\t\t对不起没有找到该学生!\n"); /*返回失败信息*/
}
else
Display_a_record(room1,i); /*调用函数*/
显示后提示按任意键继续,选择“6”按提示步骤按学号查找一条记录并显示,如图8所示。
图8按姓名查找并显示图
按房间号查找和按学号查找的方法大同小异。分别输入“7”、“8”显示截图如下页
图9 按房间号查找并显示图
图10 按学号查找并显示图
功能9为插入一条记录按学号排序并显示。
int Insert_a_record(Student room[],int n) /*插入一条记录并按学号排序*/
{ 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”进行插入数据,如下页图11所示。
图11 插入一条记录按学号排序并显示图
5心得体会
这次课程设计我做的还不是很完善,因为功能不是很多,如果以后有机会完善的话,应该对管理员和用户登录时做进一步完善。学生的信息还不够完整,如学生的宿舍长,系别,一些费用以及学生的成绩等待相关详细信息。
如果使次系统再详细些,需添加更多的管理员以及管理员权限,还有学生的更多信息,如果有必要的话,添加一些有关教师的信息,以及教师登录的界面。
在这次课程设计的过程中,我们体会到要想开发一个系统软件,不仅需要相当的专业技术知识,还要有严谨缜密的思维能力。只有思想上清晰了,编程才有意义,否则就是白费力气。同时还要善于捕获细小的方面,因为那往往是这个程序的致命因素。这次课程设计培养了我的细心和耐性,更树立了一种科学的态度。
致谢
在这次数据结构课程设计中,我的老师和同学给了我及大的帮助。特别是我的指导老师王源老师,还有我的C 语言任课老师陈广宏老师。在此,我对他们表示感谢!感谢他们在我面对困难时给了我帮助和支持。也感谢那些给我帮助的所有同
学!
参考文献
[1]谭浩强著.C 程序设计(第二版).北京:清华大学出版社,1999
[2]谭浩强,张基温,唐永炎编著.C 语言程序设计.北京:高等教育出版社,1992
[3]谭浩强编著.QBASIC 语言教程.北京:电子工业出版社,1997
[4]谭浩强.C 程序设计[M].3 版.北京:清华大学出版社,2005
[5]Herbert Schildt 著.戴健鹏译.C 语言大全(第二版).北京:电子工业出版
社,1994
[6][美]SCHILDTH.C 语言大全[M].4 版.王子恢等译.北京:电子工业出版社,2001
附录:源代码
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct
{ char roomnum[4];
char num[10];
char name[20];
}Student;
Student room1[1000];
int menu()
{
char c;
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');
}
int Input(Student room[],int n)
{
int i=0;
char sign;
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);
}
void Display_all_record(Student room[],int n)
{
int i;
printf("\t\t----------------------------------------\n");
printf("\t\t房间号 学号 姓名 \n");
printf("\t\t----------------------------------------\n");
for(i=1;i<n+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");
}
void Display_a_record(Student room[],int n)
{
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");
}
void Sort_by_name(Student room[],int n)
{
int i,j;
char t[10];
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(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);
}
}
void Sort_by_num(Student room[],int n)
{
int i,j;
char t[10];
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(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);
}
}
void Sort_by_roomnum(Student room[],int n)
{
int i,j;
char t[10];
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(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);
}
}
void Find_record_name(Student room[],int n)
{
char s[10];
int i=0;
printf("\t\t输入要查找的姓名:");
scanf("%s",s);
while(strcmp(room[i].name,s)!=0 && i<n) i++;
if(i==n)
{
printf("\t\t对不起没有找到该学生!\n");
}
else
Display_a_record(room1,i);
}
void Find_record_rommnum(Student room[],int n)
{
char s[20];
int i=0;
printf("\t\t输入要查找的房间号:");
scanf("%s",s);
while(strcmp(room[i].roomnum,s)!=0 && i<n) i++;
if(i==n)
{
printf("\t\t对不起没有找到该学生!\n");
}
else
Display_a_record(room1,i);
}
void Find_record_num(Student room[],int n)
{
char s[20];
int i=0;
printf("\t\t输入要查找的学号:");
scanf("%s",s);
while(strcmp(room[i].num,s)!=0 && i<n) i++;
if(i==n)
{
printf("\t\t对不起没有找到该学生!\n");
}
else
Display_a_record(room1,i);
}
int Insert_a_record(Student room[],int n)
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);
}
int AddfromText(Student room[],int n)
{
int i=0,num;
FILE *fp;
char filename[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<num)
{ 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);
}
void WritetoText(Student room[],int n)
{
int i=0;
FILE *fp;
char filename[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<n)
{ fprintf(fp,"%-10s%-10s%-10s%-10s\n",room[i].roomnum,room[i].num,room[i].name);
i++;
}
fclose(fp);
printf("写入成功!\n");
}
int main()
{
int n=0;
for(;;)
{
switch(menu())
{
case 1:
printf("\t\t输入记录\n");
n=Input(room1,n);
break;
case 2:
printf("\t\t显示记录\n");
Display_all_record(room1,n);
break;
case 3:
printf("\t\t按姓名排序并显示\n");
Sort_by_name(room1,n);
printf("\t\t排序成功!\n");
Display_all_record(room1,n);
printf("\t\t");
case 4:
printf("\t\t按房间号排序并显示\n");
Sort_by_roomnum(room1,n);
printf("\t\t排序成功!\n");
Display_all_record(room1,n);
printf("\t\t");
break;
case 5:
printf("\t\t按学号排序并显示\n");
Sort_by_num(room1,n);
printf("\t\t\t排序成功!\n");
Display_all_record(room1,n);
printf("\t\t");
break;
case 6:
printf("\t\t按姓名查找\n");
Find_record_name(room1,n);
printf("\t\t");
system("pause");
break;
case 7:
printf("\t\t按房间号查找\n");
Find_record_rommnum(room1,n);
printf("\t\t");
system("pause");
break;
case 8:
printf("\t\t按学号查找\n");
Find_record_num(room1,n);
printf("\t\t");
system("pause");
break;
case 9:
printf("\t\t插入一条记录按学号排序并显示\n");
n=Insert_a_record(room1,n); Display_all_record(room1,n);
printf("\t\t");
break;
case 10:
printf("\t\t从文件中读入数据\n");
AddfromText(room1,n);
printf("\t\t");
system("pause");
break;
case 11:
printf("\t\t循环写入数据\n");
WritetoText(room1,n);
printf("\t\t");
system("pause");
break;
case 0:
printf("\t\t谢谢使用,祝您好运,再见!\n");
printf("\t\t");
system("pause");
exit(0);
}
}
return 0; }
展开阅读全文