C语言实现学生宿舍信息管理系统的方法(c语言,开发技术)

时间:2024-05-08 08:19:05 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

一、问题陈述

宿舍对于大学生在校生活来说相当于家的存在,而宿舍管理又是学校后勤管理的重要环节,如何直观的了解宿舍的入住情况和每位同学的住宿位置是提高工作效率的重要课题,根据我们所学的C语言和数据结构课程中有关链表的内容,为宿舍管理人员编写宿舍管理查询软件,就可以轻松满足实现上述需求。

任务:

1、为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:
1)、采用交互工作方式
2)、可按关键字(姓名、学号、房号)进行排序

2、查询菜单: (用二分查找实现以下操作)
1)、按姓名查询
2)、按学号查询
3)、按房号查询

3、打印任一查询结果(可以连续操作)

二、概要设计

2.1 概要简述

根据系统要求,即本系统具有信息的录入,显示,排序显示、查找,插入、删除、结束程序等功能,先设计出详细的系统流程图,然后将源代码输入程序,进行编译调试即可。
程序总体分10个项目:输入记录、显示记录、按姓名排序并显示、按房间号排序并显示 、按学号排序并显示 、按姓名查找并显示 、按房间号查找并显示 、按学号查找并显示、插入一条记录按学号排序并显示以及结束程序。

2.2 线性表存储结构表示

typedefstruct{charname[20];intnum;//学号和房号都为整型introom;}stu;typedefstruct{intlength;//当前长度stu*elem;//存储空间基址intlistsize;//当前分配的存储容量}linklist;

2.3 详细设计

2.3.1 系统流程图

C语言实现学生宿舍信息管理系统的方法

2.3.2 三种排序方法及二分查找法

2.3.2.1 冒泡排序(按姓名排序)

//按姓名排序(采用冒泡排序)voidsort1(linklist&L){inti,j;stutemp;for(i=0;i<L.length-1;i++)for(j=0;j<L.length-1-i;j++)if(strcmp(L.elem[j].name,L.elem[j+1].name)>0){temp=L.elem[j];L.elem[j]=L.elem[j+1];L.elem[j+1]=temp;}}

2.3.2.2 折半插入排序(按学号排序)

//按学号排序(采用折半插入排序)voidsort2(linklist&L){inti,j,mid,low,high;stutemp;for(i=1;i<L.length;i++){if(L.elem[i].num<L.elem[i-1].num){temp=L.elem[i];low=0;high=i-1;while(low<=high){mid=(low+high)/2;if(temp.num<L.elem[mid].num)high=mid-1;elselow=mid+1;}for(j=i-1;j>=high+1;j--)L.elem[j+1]=L.elem[j];L.elem[high+1]=temp;}}}

2.3.2.3 简单选择排序(按房号排序)

//按房号排序(采用简单选择排序)voidsort3(linklist&L){inti,j,k;stutemp;for(i=0;i<L.length-1;i++){k=i;for(j=i+1;j<L.length;j++)if(L.elem[j].room<L.elem[k].room)k=j;if(k!=i){temp=L.elem[i];L.elem[i]=L.elem[k];L.elem[k]=temp;}}}

2.3.2.4 二分查找法(以按姓名查找为例)

//按姓名从小到大查找(采用二分查找)voidsearch2(linklist&L){if(L.length==0){printf("已无学生记录!\n");Ret();Menu();}else{intlow=0,high=L.length,mid,flag=0;printf("\n");printf("按姓名查找-->请输入要查找的姓名:");chara[15],ch;scanf("%s",a);while(low<=high){mid=(low+high)/2;if(strcmp(a,L.elem[mid].name)==0){flag=1;break;}elseif(strcmp(a,L.elem[mid].name)>0)low=mid+1;elsehigh=mid-1;}if(flag==1){printf("查找成功-->该学生信息为:\n");printf("姓名学号房号\n");printf("%-10s%-2d%-5d\n",L.elem[mid].name,L.elem[mid].num,L.elem[mid].room);if(Select())search2(L);else{system("cls");Menu();}}else{printf("该学生不存在!");if(Select())search2(L);else{system("cls");Menu();}}}}

三、测试与运行

3.1 系统界面

C语言实现学生宿舍信息管理系统的方法

3.2 新建宿舍名单

C语言实现学生宿舍信息管理系统的方法

3.3 排序(以姓名排序为例)

C语言实现学生宿舍信息管理系统的方法

3.4 查询(以学号查询为例)

C语言实现学生宿舍信息管理系统的方法

3.5 插入学生信息

C语言实现学生宿舍信息管理系统的方法

3.6 删除学生信息

C语言实现学生宿舍信息管理系统的方法

四、代码实现

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#defineN40//线性表存储空间的初始分配量#defineincrease10//线性表存储空间的分配量增量intchoice;//定义全局变量typedefstruct{charname[20];intnum;//学号和房号都为整型introom;}stu;stustud;typedefstruct{intlength;//当前长度stu*elem;//存储空间基址intlistsize;//当前分配的存储容量}linklist;//线性表初始化voidInit(linklist&L){L.length=0;L.elem=(stu*)malloc(N*sizeof(stu));L.listsize=N;}//操作菜单voidMenu(){printf("**************************************\n");printf("***欢迎进入宿舍管理系统***\n");printf("**************************************\n");printf("*1.新建宿舍名单*\n");printf("*2.排序宿舍信息*\n");printf("*3.查询宿舍信息*\n");printf("*4.插入宿舍信息*\n");printf("*5.删除宿舍信息*\n");printf("*0.退出系统*\n");printf("**************************************\n");printf("请输入菜单(0-5):");scanf("%d",&choice);if(choice<0||choice>5){system("cls");printf("输入数字不对,请重新!\n");printf("\n");Menu();}}//打印学生信息voidDisplay(linklist&L){inti;printf("姓名学号房号\n");for(i=0;i<L.length;i++)printf("%-10s%-2d%5d\n",L.elem[i].name,L.elem[i].num,L.elem[i].room);}//返回主界面voidRet(){charc;fflush(stdin);printf("\n");printf("请按任意键进入主界面:");scanf("%c",&c);system("cls");}//创建学生信息表voidCreate(linklist&L){if(L.length>=L.listsize){//判断学生的人数是否超过初值,如果超过,则重新分配stu*newbase;newbase=(stu*)realloc(L.elem,(N+increase)*sizeof(stu));L.elem=newbase;L.listsize+=increase;}inti=2;charch;printf("********开始创建学生信息**********\n");printf("\n");printf("请输入第1个学生的信息\n");printf("请输入姓名:");fflush(stdin);//清空输入缓冲区,得到正确的输入数据gets(stud.name);//输入一行字符串(姓名)printf("请输入学号:");scanf("%d",&stud.num);printf("请输入房号:");scanf("%d",&stud.room);ch=getchar();strcpy(L.elem[L.length].name,stud.name);L.elem[L.length].num=stud.num;L.elem[L.length].room=stud.room;L.length++;printf("\n");printf("是否继续输入?<y/n>:");scanf("%c",&ch);printf("\n");while(ch=='y'){printf("请输入第%d个学生的信息\n",i);printf("请输入姓名:");fflush(stdin);//清空输入缓冲区,得到正确的输入数据gets(stud.name);//输入一行字符串(姓名)printf("请输入学号:");scanf("%d",&stud.num);printf("请输入房号:");scanf("%d",&stud.room);strcpy(L.elem[L.length].name,stud.name);L.elem[L.length].num=stud.num;L.elem[L.length].room=stud.room;i++;L.length=i-1;ch=getchar();printf("\n");printf("是否继续输入?<y/n>:");scanf("%c",&ch);printf("\n");}if(ch=='n')system("cls");}//按姓名排序(采用冒泡排序)voidsort1(linklist&L){inti,j;stutemp;for(i=0;i<L.length-1;i++)for(j=0;j<L.length-1-i;j++)if(strcmp(L.elem[j].name,L.elem[j+1].name)>0){temp=L.elem[j];L.elem[j]=L.elem[j+1];L.elem[j+1]=temp;}}//按学号排序(采用折半插入排序)voidsort2(linklist&L){inti,j,mid,low,high;stutemp;for(i=1;i<L.length;i++){if(L.elem[i].num<L.elem[i-1].num){temp=L.elem[i];low=0;high=i-1;while(low<=high){mid=(low+high)/2;if(temp.num<L.elem[mid].num)high=mid-1;elselow=mid+1;}for(j=i-1;j>=high+1;j--)L.elem[j+1]=L.elem[j];L.elem[high+1]=temp;}}}//按房号排序(采用简单选择排序)voidsort3(linklist&L){inti,j,k;stutemp;for(i=0;i<L.length-1;i++){k=i;for(j=i+1;j<L.length;j++)if(L.elem[j].room<L.elem[k].room)k=j;if(k!=i){temp=L.elem[i];L.elem[i]=L.elem[k];L.elem[k]=temp;}}}//排序函数voidSort(linklist&L){intc;printf("请输入排序的方式(1:按名字排序,2:按学号排序,3:按房号排序):");scanf("%d",&c);switch(c){case1:sort1(L);if(L.length==0){printf("已无学生记录!\n");Ret();Menu();}else{printf("按姓名排序:\n");Display(L);Ret();//调用返回主界面Menu();}break;case2:sort2(L);if(L.length==0){printf("已无学生记录!\n");Ret();Menu();}else{printf("按学号排序:\n");Display(L);Ret();//调用返回主界面Menu();}break;case3:sort3(L);if(L.length==0){printf("已无学生记录!\n");Ret();Menu();}else{printf("按房号排序:\n");Display(L);Ret();//调用返回主界面Menu();}break;default:break;}}//选择是否继续查找intSelect(){charch;scanf("%c",&ch);printf("是否继续查找?<y/n>:");fflush(stdin);scanf("%c",&ch);if(ch=='y'){system("cls");return1;}elsereturn0;}//按姓名从小到大查找(采用二分查找)voidsearch2(linklist&L){if(L.length==0){printf("已无学生记录!\n");Ret();Menu();}else{intlow=0,high=L.length,mid,flag=0;printf("\n");printf("按姓名查找-->请输入要查找的姓名:");chara[15],ch;scanf("%s",a);while(low<=high){mid=(low+high)/2;if(strcmp(a,L.elem[mid].name)==0){flag=1;break;}elseif(strcmp(a,L.elem[mid].name)>0)low=mid+1;elsehigh=mid-1;}if(flag==1){printf("查找成功-->该学生信息为:\n");printf("姓名学号房号\n");printf("%-10s%-2d%-5d\n",L.elem[mid].name,L.elem[mid].num,L.elem[mid].room);if(Select())search2(L);else{system("cls");Menu();}}else{printf("该学生不存在!");if(Select())search2(L);else{system("cls");Menu();}}}}//按学号从小到大查找(采用二分查找)voidsearch3(linklist&L){if(L.length==0){printf("\n");printf("已无学生记录!\n");Ret();Menu();}else{intlow=0,high=L.length,mid,flag=0;intn;charch;printf("\n");printf("按学号查找-->请输入要查找的学号:");scanf("%d",&n);while(low<=high){mid=(low+high)/2;if(n==L.elem[mid].num){flag=1;break;}elseif(n>L.elem[mid].num)low=mid+1;elsehigh=mid-1;}if(flag==1){printf("查找成功----->该学生信息为:\n");printf("姓名学号房号\n");printf("%-1s0%-2d%-5d\n",L.elem[mid].name,L.elem[mid].num,L.elem[mid].room);if(Select())search3(L);else{system("cls");Menu();}}else{printf("该学生不存在!");if(Select())search3(L);else{system("cls");Menu();}}}}//按房号从小到大查找(采用二分查找)voidsearch4(linklist&L){if(L.length==0){//此函数功能为:返回主界面printf("\n");printf("已无学生记录!\n");Ret();Menu();}else{intlow=0,high=L.length,mid,flag=0;//flag作为标志符,为1则表示查找成功,否则没有所要查找的学生intm;charch;printf("\n");printf("按房号查找-->请输入要查找的房号:");scanf("%d",&m);while(low<=high){mid=(low+high)/2;if(m==L.elem[mid].room){flag=1;break;}elseif(m>L.elem[mid].room)low=mid+1;elsehigh=mid-1;}if(flag==1){printf("查找成功-->该学生信息为:\n");printf("姓名学号房号\n");printf("%-10s%-2d%-5d\n",L.elem[mid].name,L.elem[mid].num,L.elem[mid].room);if(Select())//调用判断函数1search4(L);else{system("cls");Menu();}}else{printf("该学生不存在!");if(Select())//调用判断函数2search4(L);else{system("cls");Menu();}}}}//查找函数voidSearch(linklist&L){intc;printf("请输入查找的方式(1:按名字查找,2:按学号查找,3:按房号查找):");scanf("%d",&c);switch(c){case1:sort1(L);search2(L);break;//先进行二分查找排序case2:sort2(L);search3(L);break;case3:sort3(L);search4(L);break;default:break;}}//按学号从小到大插入该学生voidInsert(linklist&L){inti,j,k;charch;printf("\n");printf("插入的学生信息为:\n");printf("姓名:");fflush(stdin);//清空输入缓冲区,得到正确的输入数据gets(stud.name);printf("学号:");scanf("%d",&stud.num);printf("房号:");scanf("%d",&stud.room);if(L.length==0){strcpy(L.elem[L.length].name,stud.name);L.elem[L.length].num=stud.num;L.elem[L.length].room=stud.room;}for(i=0;i<L.length;i++){if(stud.num<L.elem[i].num){k=i;for(j=L.length;j>k;j--)L.elem[j]=L.elem[j-1];strcpy(L.elem[k].name,stud.name);L.elem[k].num=stud.num;L.elem[k].room=stud.room;break;}else{strcpy(L.elem[L.length].name,stud.name);L.elem[L.length].num=stud.num;L.elem[L.length].room=stud.room;}}L.length++;fflush(stdin);printf("\n");printf("是否继续插入?<y/n>:");scanf("%c",&ch);if(ch=='y')Insert(L);elsesystem("cls");}//按学号删除该学生voidDelete(linklist&L){inti,j,k=-1;charch;printf("\n");printf("\n");printf("请输入要删除学生的学号:");scanf("%d",&stud.num);for(i=0;i<L.length;i++){if(stud.num==L.elem[i].num){printf("该学生的信息为:\n");printf("姓名:%s\n学号:%d\n房号:%d\n",L.elem[i].name,L.elem[i].num,L.elem[i].room);k=i;for(j=k;j<L.length-1;j++)L.elem[j]=L.elem[j+1];printf("已成功删除\n");break;}}if(i>=L.length)printf("该学生不存在\n");if(k>=0)L.length--;fflush(stdin);printf("\n");printf("是否继续删除操作?<y/n>:");scanf("%c",&ch);system("cls");if(ch=='y')Delete(L);elsesystem("cls");}//主函数intmain(){linklistL;//定义线性表LInit(L);Menu();//调用主菜单函数while(choice!=0){system("cls");switch(choice){case1:Create(L);//调用线性表创建函数Menu();break;case2:Sort(L);break;//调用排序函数case3:Search(L);break;//调用查找函数进行(二分)查找case4:sort2(L);//调用学号排序函数Insert(L);//按学号序列插入system("cls");printf("插入后的学生信息:\n");Display(L);Ret();Menu();break;case5:Delete(L);//调用删除函数if(L.length==0){printf("\n");printf("学生记录已被删除完!\n");Ret();Menu();}else{printf("显示删除后的学生信息:\n");Display(L);Ret();Menu();}break;}}}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:C语言实现学生宿舍信息管理系统的方法的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:go xorm生成mysql的结构体实例分析下一篇:

10 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18