资源描述
学号
- 第一学期
《数据结构》
课程设计汇报
题目:
宿舍管理查询系统实现
专业:
班级:
姓名:
学号:
指导老师:
成绩:
计算机和信息工程系
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 版.北京:清华大学出版社,
[5]Herbert Schildt 著.戴健鹏译.C 语言大全(第二版).北京:电子工业出版
社,1994
[6][美]SCHILDTH.C 语言大全[M].4 版.王子恢等译.北京:电子工业出版社,
附录:源代码
#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; }
展开阅读全文