宿舍管理系统软件数据结构课程设计.docx
- 文档编号:5422915
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:17
- 大小:353.75KB
宿舍管理系统软件数据结构课程设计.docx
《宿舍管理系统软件数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《宿舍管理系统软件数据结构课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
宿舍管理系统软件数据结构课程设计
一、题目名称:
宿舍管理查询软件
二、设计目的:
进一步掌握和利用C语言进行课程设计的能力,理解和运用结构化程设计的思想和方法,熟练掌握条件语句、循环、数组、函数操作,初步掌握开发一个小型实用系统的基本方法,学会高度一个较长程序的基本方法和利用流程图或N-S图表示算法,将本课程所学的知识合理地运用于实践当中。
了解一些书上没有的函数及使用方法。
三、设计分析:
1、需求分析
为了实现提高高校宿舍管理部门的工作效率,充分利用资源,减少不必要的人力、物力和财力的支出,方便宿舍管理部门的工作人员全面地掌握学生住宿情况等目的,为宿舍管理部门开发设计专用系统——学生宿舍信息管理系统来进行管理学生宿舍信息,使学生宿舍信息实现标准化的管理和规范化的制度是十分必要的。
2、经济可行性分析
如今是信息化时代,信息化管理可以使学生宿舍管理更加系统化,全面化,快速化,这样可以为学校带来高效的工作效益和经济效益,开发出本系统可以减少宿舍管理人员人数,而且管理方便,各功能实现迅速,数据有效的管理。
这些效益和管理上的便捷远远超过了开发本系统的成本,所以在经济上具有完全的可行性。
四、总体设计:
根据系统要求,即本系统具有信息的录入,显示,查找,删除,从文件中读入数据、循环写入数据、结束程序等功能,先设计出详细的系统流程图,然后将源代码输入程序,进行编译调试即可。
程序总体分九个项目:
输入记录、显示记录、按房间号排序并显示、按学号排序并显示、插入一条记录并按学号排序并显示、按姓名查找、删除一条记录、查找并显示一个记录、从文件中读入数据、循环写入数据以及结束程序。
五、详细设计:
1、系统流程图如图5-1所示
图5-1系统流程图
2、根据流程图,将程序源代码输入到编译环境中,按照提示选择进行记录的输入,输入一个数据后提示是否继续输入,直到结束程序为止。
输入主菜单如下:
输出("\t\t★★★★★★学生宿舍管理系统★★★★★★\n");
输出("\t\t§1.输入记录§\n");
输出("\t\t§2.显示记录§\n");
输出("\t\t§4.按学号排序并显示§\n");
输出("\t\t§5.插入一条记录按学号排序并显示§\n");
输出("\t\t§6.按姓名查找,删除一条记录§\n");
输出("\t\t§7查找并显示一个记录§\n");
输出("\t\t§8.从文件中读入数据§\n");
输出("\t\t§9.循环写入数据§\n");
输出("\t\t§0.结束程序§\n");
输出("\t\t★★★★★★★★★★★★★★★★★★★★\n");
输出("\t\t请选择您要运行的选项按(0-9):
");
将程序编译生成“学生宿舍管理系统.exe”。
运行该文件如图5-2所示。
图5-2输出界面图
输入记录采用循环输入
while(sign!
='n'&&sign!
='N')
{
输出("\t\t房间号:
");
输入("\t\t%s"&,room[n+i].roomnum);
输出("\t\t床位号:
");
输入("\t\t%s",&room[n+i].bednum);
输出("\t\t学号:
");
输入("\t\t%s",&room[n+i].num);
输出("\t\t姓名:
");
输入("\t\t%s",&room[n+i].name);
gets(x);/*清除多余的输入*/
输出("\t\t是否继续输入?
(Y/N)");
输入("\t\t%c",&sign);
i++;
}
返回(n+i);
}
按照提示选择“1”进行记录的输入如图5-3所示:
图5-3输入记录显示图
按房间号排序采用冒泡排序法。
inti,j,*p,*q,s;
chart[10];
for(i=0;i for(j=0;j if(strcmp(room[j].roomnum,room[j+1].roomnum)>0) { 比较(t,room[j+1].roomnum); 比较(room[j+1].roomnum,room[j].roomnum); 比较(room[j].roomnum,t); 比较(t,room[j+1].bednum); 比较(room[j+1].bednum,room[j].bednum); 比较(room[j].bednum,t); 比较(t,room[j+1].num); 比较(room[j+1].num,room[j].num); 比较(room[j].num,t); 比较(t,room[j+1].name); 比较(room[j+1].name,room[j].name); 比较(room[j].name,t);} } 连续输入多组数据后,按“n”结束输入,提示按任意键继续,按任意键后选择“2”进行记录的显示如图5-4所示。 图5-4按房间号排序并显示图 按学号排序采用冒泡排序法 比较(t,room[j+1].bednum); 比较(room[j+1].bednum,room[j].bednum); 比较(room[j].bednum,t); 比较(t,room[j+1].num); 比较(room[j+1].num,room[j].num); 比较(room[j].num,t); 比较(t,room[j+1].name); 比较(room[j+1].name,room[j].name); 比较(room[j].name,t);} 显示后提示按任意键继续,选择“4”进行按学号排序并显示,如图5-5所示。 图5-5按学号排序显示图 插入记录采用交互式输入: 输出("\t\t输入他(她)的姓名: "); 输入("\t\t%s",&s); while(strcmp(room[i].name,s)! =0&&i 如果(i==n) {输出("\t\t对不起没找到该学生! \n"); return;} 输出("\t\t他(她)的房间号: %s\n",room[i].roomnum); 输出("\t\t他(她)的床位号: %s\n",room[i].bednum); 输出("\t\t他(她)的学号: %s\n",room[i].num); 显示后提示按任意键继续,选择“5”按提示步骤插入一条记录,如图5-6所示。 图5-6插入一条记录图 六、系统测试 将源代码输入至编译环境中,将程序编译连接后生成“学生宿舍管理系统.exe”运行该文件,则显示主菜单: 1、输入记录 2、显示记录 3、按房间号排序并显示 4、按学号排序并显示 5、插入一条记录并按学号排序显示 6、按姓名查找,删除一条记录 7、查找并显示一个记录 8、从文件中读入数据 9、循环写入数据 0、结束程序 请选择您要运行的选项按(0-9): 按照提示选择“1”进行记录的输入,则在主菜单下显示: 输入记录 房间号: 101 床位号: 1 学号: 21 姓名: xiaoning 是否继续输入? (Y/N)- 按N结束,按任意键后选择“2”进行记录的显示,则在主菜单下显示: 房间号床位号学号姓名 101121xiaoning 314212xiaozhang 203232xiaoli 417541xiaowang 请按任意键继续…… 选择“5”插入一条记录,则在主菜单下显示: 学生房间号: 513 学生床位号: 4 学生学号: 52 学生姓名: xiaoguan 插入记录成功! 房间号床位号学号姓名 101121xiaoning 314212xiaozhang 203232xiaoli 417541xiaowang 513452xiaoguan 请按任意键继续…… 七、结论 这次课程设计我做的还不是很完善,因为功能不是很多,如果以后有机会完善的话,应该对管理员和用户登录时做进一步完善。 学生的信息还不够完整,如学生的宿舍长,系别,一些费用以及学生的成绩等待相关详细信息。 如果使次系统再详细些,需添加更多的管理员以及管理员权限,还有学生的更多信息,如果有必要的话,添加一些有关教师的信息,以及教师登录的界面。 在这次课程设计的过程中,我们体会到要想开发一个系统软件,不仅需要相当的专业技术知识,还要有严谨缜密的思维能力。 只有思想上清晰了,编程才有意义,否则就是白费力气。 同时还要善于捕获细小的方面,因为那往往是这个程序的致命因素。 这次课程设计培养了我的细心和耐性,更树立了一种科学的态度。 附录: 源代码 #include #include #include #include typedefstruct/*定义结构体数组*/ { charroomnum[4];/*房间号*/ charbednum[2];/*床位号*/ charnum[10];/*学号*/ charname[20];/*姓名*/ } Student; Studentroom1[1000];/*结构体数组变量*/ intmenu_select()/*菜单函数*/ { charc; do{system("cls");/*运行前清屏*/ printf("\t\t★★★★★★学生宿舍管理系统★★★★★★\n");/*菜单选择*/ printf("\t\t§1.输入记录§\n"); printf("\t\t§2.显示记录§\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§0.结束程序§\n"); printf("\t\t★★★★★★★★★★★★★★★★★★★★\n"); printf("\t\t请选择您要运行的选项按(0-9): "); c=getchar();/*读入选择*/ } while(c<'0'||c>'9'); return(c-'0');}/*返回选择*/ intInput(Studentroom[],intn)/*输入若干条记录*/ { inti=0; charsign,x[10];/*x[10]为清除多余的数据所用*/ while(sign! ='n'&&sign! ='N')/*判断*/ { printf("\t\t房间号: ");/*交互输入*/ scanf("\t\t%s"&,room[n+i].roomnum); printf("\t\t床位号: "); scanf("\t\t%s",&room[n+i].bednum); printf("\t\t学号: "); scanf("\t\t%s",&room[n+i].num); printf("\t\t姓名: "); scanf("\t\t%s",&room[n+i].name); gets(x);/*清除多余的输入*/ printf("\t\t是否继续输入? (Y/N)"); scanf("\t\t%c",&sign);/*输入判断*/ i++; } return(n+i); } voidDisplay(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%-20s\n",room[i-1].roomnum,room[i-1].bednum,room[i-1].num,room[i-1].name); if(i>1&&i%10==0)/*每十个暂停*/ { printf("\t\t--------------------------------------------------\n");/*格式*/ printf("\t\t"); system("pause"); printf("\t\t--------------------------------------------------\n"); } } printf("\t\t"); system("pause"); } voidSort_by_num(Studentroom[],intn)/*按学号排序*/ { inti,j,*p,*q,s; 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].bednum); strcpy(room[j+1].bednum,room[j].bednum); strcpy(room[j].bednum,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,*p,*q,s; 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].roomnum); strcpy(room[j+1].roomnum,room[j].roomnum); strcpy(room[j].roomnum,t); strcpy(t,room[j+1].bednum); strcpy(room[j+1].bednum,room[j].bednum); strcpy(room[j].bednum,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);} } intInsert_a_record(Studentroom[],intn)/*插入一条记录*/ { charx[100];/*清除多余输入所用*/ printf("\t\t学生房间号: ");/*交互式输入*/ scanf("\t\t%s",&room[n].roomnum); printf("\t\t学生床位号: "); scanf("\t\t%s",&room[n].bednum); printf("\t\t学生学号: "); scanf("\t\t%s",&room[n].num); printf("\t\t学生姓名: "); scanf("\t\t%s",&room[n].name); gets(x); n++; Sort_by_num(room,n);/*调用排序函数*/ printf("\t\t插入记录成功! \n");/*返回成功信息*/ return(n); } intDelete_a_record(Studentroom[],intn)/*按姓名查找,删除一条记录*/ { chars[20]; inti=0,j; printf("\t\t输入他(她)的姓名: ");/*交互式问寻*/ scanf("%s",s); while(strcmp(room[i].name,s)! =0&&i if(i==n) { printf("\t\t对不起没找到该学生! \n");/*返回失败信息*/ return(n); } for(j=i;j { strcpy(room[j].roomnum,room[j+1].roomnum); strcpy(room[j].bednum,room[j+1].bednum); strcpy(room[j].num,room[j+1].num); strcpy(room[j].name,room[j+1].name); } printf("\t\t删除记录成功! \n");/*返回成功信息*/ return(n-1); } voidQuery_a_record(Studentroom[],intn)/*查找并显示一个记录*/ { chars[20]; inti=0; printf("\t\t输入他(她)的姓名: ");/*交互式输入*/ scanf("\t\t%s",&s); while(strcmp(room[i].name,s)! =0&&i if(i==n) {printf("\t\t对不起没找到该学生! \n");/*输入失败信息*/ return;} printf("\t\t他(她)的房间号: %s\n",room[i].roomnum);/*输出该学生信息*/ printf("\t\t他(她)的床位号: %s\n",room[i].bednum); printf("\t\t他(她)的学号: %s\n",room[i].num); } 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].bednum,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].bednum,room[i].num,room[i].name); i++; } fclose(fp);/*关闭文件*/ printf("写入成功! \n");/*返回成功信息*/ } voidmain()/*主函数*/ {intn=0; for(;;) {switch(menu_select())/*选择判断*/ {case1: printf("\t\t输入记录\n");/*输入若干条记录*/ n=Input(room1,n); break; case2: printf("\t\t显示记录\n");/*显示所有记录*/ Display(room1,n); break; case3: printf("\t\t按房间号排序并显示\n"); Sort_by_roomnum(room1,n);/*按房间号排序*/ printf("\t\t排序成功! \n"); Display(room1,n); printf("\t\t"); break; case4: printf("\t\t按学号排序并显示\n"); Sort_by_num(room1,n);/*按学号排序*/ printf("\t\t\t排序成功! \n"); Display(room1,n); printf("\t\
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 宿舍 管理 系统软件 数据结构 课程设计