数据结构宿舍管理查询软件课程设计.docx
- 文档编号:30356605
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:26
- 大小:412.32KB
数据结构宿舍管理查询软件课程设计.docx
《数据结构宿舍管理查询软件课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构宿舍管理查询软件课程设计.docx(26页珍藏版)》请在冰豆网上搜索。
数据结构宿舍管理查询软件课程设计
《数据结构课程设计》
宿舍管理查询软件
学院:
信息科学技术学院
班级:
信计082
学号:
08411100……
姓名:
余鹏
指导教师:
并接
完成日期:
2010年12月
目录
一、设计任务3
二、总体设计3
三、系统流程图3
4、详细设计及测试
5
五、心得体会12
附录:
源代码13
一、设计任务
题目:
宿舍管理查询软件
任务:
为宿舍管理人员编写一个宿舍管理查询软件,程序设计要求:
(1)建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种)
(2)实现如下查询功能:
按姓名查询
按学号查询
按房号查询
(3)打印任意查询结果(可以连续操作)
针对题目所要求的功能不太多,我特意添加了插入数据、读入文件数据以及将数据写入文件三个额外功能。
二、总体设计
根据系统要求,即本系统具有信息的录入,显示,排序显示、查找,插入、从文件中读入数据、循环写入数据、结束程序等功能,先设计出详细的系统流程图,然后将源代码输入程序,进行编译调试即可。
程序总体分12个项目:
输入记录、显示记录、按姓名排序并显示、按房间号排序并显示、按学号排序并显示、按姓名查找并显示、按房间号查找并显示、按学号查找并显示、插入一条记录按学号排序并显示、从文件中读入数据、循环写入数据以及结束程序。
3、系统流程图
系统流程图下页图所示
4、详细设计及测试
根据流程图,将程序源代码输入到编译环境中,按照提示选择进行记录的输入,输入一个数据后提示是否继续输入,直到结束程序为止。
将程序编译生成“学生宿舍管理系统.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;i for(j=0;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”进行按姓名排序并显示,如图4所示。 图4按姓名排序显示图 按房间号排序采用冒泡排序法 for(i=0;i for(j=0;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”进行按房间号排序并显示,如图5所示。 图5按房间号排序显示图 同样学号排序也是用的冒泡法排序。 for(i=0;i for(j=0;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”进行按学号排序并显示,如图6所示。 图6按学号排序显示图 功能6-8为查找功能 按姓名查找并显示功能 printf("\t\t输入要查找的姓名: "); scanf("%s",s); while(strcmp(room[i].name,s)! =0&&i if(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;i for(j=0;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); } } voidSort_by_num(Studentroom[],intn) { inti,j; chart[10]; for(i=0;i for(j=0;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); } } voidSort_by_roomnum(Studentroom[],intn) { inti,j; chart[10]; for(i=0;i for(j=0;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); } } voidFind_record_name(Studentroom[],intn) { chars[10]; inti=0; printf("\t\t输入要查找的姓名: "); scanf("%s",s); while(strcmp(room[i].name,s)! =0&&i if(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&&i if(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&&i if(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); prin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 宿舍 管理 查询 软件 课程设计