宿舍管理查询软件
写的很简单,有疑问提问
//宿舍管理系统
#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;
}
// 查找和排序的先后顺序