宿舍管理查询软件

本文介绍了一个简单的宿舍管理查询系统,使用C语言实现。系统包括学生信息的录入、显示、按学号、姓名和楼号的查找,以及对学生信息进行学号、姓名和楼号排序的功能。通过直接插入排序、冒泡排序和简单选择排序算法实现了信息的排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

宿舍管理查询软件

写的很简单,有疑问提问

//宿舍管理系统 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 20
typedef struct host{
 	int score;  //学号 
 	char name[MAX];   
	char college[MAX];	//学院	
	int build;	//楼号 
	int room;  //房间号 
}ho;
typedef struct{
	ho r[MAX];
	int length;
}List;
void Insert(List &l){
	FILE *fp;
	if((fp=fopen("hostel","w"))==NULL){
		printf("打开失败!\n");
		exit(0);
	}
	printf("请输入要保存的学生的人数:\n");
	scanf("%d",&l.length);
	for(int i=1;i<=l.length;i++){   //从下标为1开始存储 
		printf("请输入学生学号,姓名,学院,楼号,房间号:\n");
		scanf("%d %s %s %d %d",&l.r[i].score,l.r[i].name,l.r[i].college,&l.r[i].build,&l.r[i].room);
		fprintf(fp,"%d %s %s %d %d\n",l.r[i].score,l.r[i].name,l.r[i].college,l.r[i].build,l.r[i].room);//把信息写入到文件中。 
		getchar();// 
	}
	fclose(fp);
}
//遍历
void Out(List l){
	FILE *fp;
	if((fp=fopen("hostel","r"))==NULL){
		printf("无法打开文件!\n");
		exit(0);
	}
	printf("学号	名字	学院	  楼号 	   房间号");
	for(int i=1;i<=l.length;i++){
		printf("\n");
		fscanf(fp,"%d %s %s %d %d",&l.r[i].score,l.r[i].name,l.r[i].college,&l.r[i].build,&l.r[i].room); //从studata文件中把信息读出来
		fprintf(stdout,"%d%9s%9s%7d%10d\n",l.r[i].score,l.r[i].name,l.r[i].college,l.r[i].build,l.r[i].room);// 把读出来的信息输出到显示器上
	}
	fclose(fp);
}
//直接插入排序 学号 
void Sortscore(List &l){
	int i,j;
	for(i=2;i<=l.length;i++){
		if((l.r[i].score)<(l.r[i-1].score)){
	 		l.r[0]=l.r[i];
	 		l.r[i]=l.r[i-1];
	 		for(j=i-2;l.r[0].score<l.r[j].score;j--){
	 			l.r[j+1]=l.r[j];
			}
			l.r[j+1]=l.r[0];
		}
	}	
	printf("====================学生学号直接插入排序为:======================\n");
	for(int i=1;i<=l.length;i++){
		printf("%d ",l.r[i].score); 
	}
	printf("\n");
}
//冒泡排序   学生姓名排序 
void Sortname(List &l){
	int flag=1;
	for(int i=1;i<l.length&&flag;i++){
		flag=0;
		for(int j=1;j<=l.length-i;j++){
			if(strcmp(l.r[j].name,l.r[j+1].name)>=0){
//				strcpy(l.r[0].name,l.r[j].name);
				l.r[0]=l.r[j];
//				strcpy(l.r[j].name,l.r[j+1].name);
				l.r[j]=l.r[j+1];
//				strcpy(l.r[j+1].name,l.r[0].name);
				l.r[j+1]=l.r[0];
				flag=1;
			}
		}
	}
	printf("====================学生姓名冒泡排序为:=======================\n");
	for(int i=1;i<=l.length;i++){
		printf("%s ",l.r[i].name); 
	}
	printf("\n");
}
//简单选择排序 楼号 
void Sortbuild(List &l){
	for(int i=1;i<l.length;i++){
		int k=i;
		for(int j=i+1;j<=l.length;j++){
			if(l.r[k].build>l.r[j].build)
				k=j;
		}
		if(i!=k){
			l.r[0]=l.r[i];
			l.r[i]=l.r[k];
			l.r[k]=l.r[0];
		}
	}
	printf("====================学生楼号简单选择排序为:======================\n");
	for(int i=1;i<=l.length;i++){
		printf("%d ",l.r[i].build); 
	}
	printf("\n");
}
//按学号查找 
void Findscore(List &l){
	char ch;
	do{
		int key;
		int n;
		int i;
		printf("请输入要查找的学生的学号:\n");
		scanf("%d",&key);
		for(i=l.length;i>=1;i--){ 
			if(l.r[i].score==key){
				n=i;
				break; 
			}
		}
		if(i==0){
			printf("不存在该学号,查找失败!\n");
		} 
		printf("查找成功,该学生的信息为:\n"); 
		printf("%d %s %s %d %d\n",l.r[n].score,l.r[n].name,l.r[n].college,l.r[n].build,l.r[n].room);
		printf("是否继续用学号查找学生信息?按'Y'则继续查找,输'N'则换下一种查询方式!\n"); \
		getchar();
		scanf("%c",&ch);
	}while(ch=='Y');
}
//顺序查找  按姓名查找 
void Findname(List &l){
	char ch;
	do{
		char key[MAX];
		int n; //要查找名字的下标 
		int i;
		printf("请输入要查找的学生的名字:\n");
		scanf("%s",&key);
		for(i=l.length;i>=1;i--){ 
			if(strcmp(l.r[i].name,key)==0){
				n=i;
				break; 
			}
		}
		if(i==0){
			printf("不存在该名字,查找失败!\n");
		} 
		printf("查找成功,该学生的信息为:\n"); 
		printf("%d %s %s %d %d\n",l.r[n].score,l.r[n].name,l.r[n].college,l.r[n].build,l.r[n].room);
		printf("是否继续用姓名查找学生信息?按'Y'则继续查找,输'N'则换下一种查询方式!\n"); \
		getchar();
		scanf("%c",&ch);
	}while(ch=='Y');
}
//按楼号查找
void Finebuild(List &l){
	char ch;
	do{
		int key;
		int n; //要查找名字的下标 
		int i;
		printf("请输入要查找的学生的楼号:\n");
		scanf("%d",&key);
		for(i=l.length;i>=1;i--){ 
			if(l.r[i].build==key){
				n=i;
				break; 
			}
		}
		if(i==0){
			printf("不存在该楼号,查找失败!\n");
		} 
		printf("查找成功,该学生的信息为:\n"); 
		printf("%d %s %s %d %d\n",l.r[n].score,l.r[n].name,l.r[n].college,l.r[n].build,l.r[n].room);
		printf("是否继续用楼号查找学生信息?按'Y'则继续查找,输'N'则退出查找!\n"); 
		getchar();
		scanf("%c",&ch);
	}while(ch=='Y');
} 
int main(){
	List l;
	Insert(l);
	Out(l);
	Sortscore(l);
	Sortbuild(l);
	Sortname(l);
	Findscore(l); 
	Findname(l);
	Finebuild(l); 
	return 0;
}

// 查找和排序的先后顺序  
摘 要:本系统是为方便宿舍管理人员实现宿舍管理查询而开发的,具有信息录入、显示、查询、排序、插入和删除功能,能实现信息修改和通过别的途径导入大量数据,但不能实现信息存盘,使用简单方便,点击“宿舍管理查询系统.exe”即可运行。(使用详解见“说明.txt”) 宿舍管理查询软件 1) 任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: A. 采用交互工作方式 B. 建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种) 2) 查询菜单: (用二分查找实现以下操作) A. 按姓名查询 B. 按学号查询 C. 按房号查询 3) 打印任一查询结果(可以连续操作) 根据上述要求,我们开始考虑系统应具备的功能: (1)要实现交互工作方式,各项操作结束后均应返回主菜单; (2)系统本无任何信息数据,要建立数据文件,需开发一个信息录入功能,即首先创建一个学员线性表,同时我们可以将数据暂时保存在内存中,所以我们未开发信息存盘功能; (3)信息录入后都保存在内存中,用户看不到,需要设计一个信息显示功能,信息的显示应该便于查阅,所以需具备按各种关键字显示的功能; (4)本系统按关键字(姓名、学号、房号)进行冒泡排序,采用二分查找方式分别实现按关键字(姓名、学号、房号)查询功能; (5)由于有些同学因为不同原因而离校,所以设计了删除功能; (6)由于有新同学入校,所以设计了插入功能; (7)当用户操作完毕需要退出时,我们提供了退出选项,便于使用者退出交互式工作
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值