宿舍管理系统

利用C语言,数据结构实现简单的宿舍管理系统,可以录入学生信息,对学生信息进行排序,查询。

最简单的宿舍管理系统,觉得还行就点个赞吧!

#include<stdio.h>
#include<stdlib.h>
#include<string.h> 
#define N 10
//定义管理人员信息结构体 
typedef struct{
   int number;//定义学号 
   char name[20];//定义姓名 
   int room;//定义宿舍号 
}Student;
//定义存储顺序表 
typedef struct {
   Student s[20];
   int length;//定义长度 
}SqList;

void CreatStudent(SqList *L,int n)//输入学生信息 
{
//长度初始值为零
   for(int i=1;i<=n;i++)//for 循环 
   {
   printf("输入第%d个管理人员信息:",i);//输入 
   printf ("\n学号:");
   scanf("%d",&L->s[i].number);
   printf ("姓名:");
   scanf("%s",&L->s[i].name);
   printf ("宿舍号:");
   scanf("%d",&L->s[i].room);
   }
   L->length=n;
   FILE *fp;//定义一个指向文件的指针变量fp
   fp=fopen("room.txt","w+");//将fopen函数的返回值赋给指针变量fp,w可读可写 (fp指向了room文件)
   for(int i=1;i<=L->length;i++)
   {
      	fprintf(fp,"%d %s %d\n",L->s[i].number,L->s[i].name,L->s[i].room);//在文件中输入学号,姓名,房号 
	}
	printf("\n添加成功!");
	fclose(fp);//关闭文件 
}

void output(SqList *L)    //输出结果 
{
	int i;
	printf("\n=========================\n学号\t姓名\t宿舍号\n");
	for(i = 1; i<=L->length; i++)	
		printf("%d\t%s\t%d\n",L->s[i].number, L->s[i].name,L->s[i].room);
	printf("==========================\n");
}

void NumberSort(SqList *L)//按学号进行排序 
{
   int i;//定义整形变量并给予i赋值
   FILE *fp;//打开文件 
   int m,flag;   //学号冒泡排序 
   m=L->length-1;
   flag=1;
   while((m>0)&&(flag==1))
   {
   	flag=0;
	for(i=1;i<=m;i++)
		if(L->s[i].number>L->s[i+1].number)
		{ 
		flag=1;
		L->s[0]=L->s[i];
		L->s[i]=L->s[i+1];
		L->s[i+1]=L->s[0];
		}
	}
	printf("按学号排序后的结果为:\n");
	output(L); 
     
        
}


void NameSort(SqList *L)//按姓名进行排序 
{
int i=1,j;
FILE *fp;
int m,flag;   //姓名冒泡排序 (从小到大排序) 
 m=L->length-1;
flag=1;
while((m>0)&&(flag==1))
{
	flag=0;
	for(i=j;j<=m;j++)
	if(strcmp(L->s[j-1].name,L->s[j].name)>=0)
	{               
		flag=1;
    L->s[0]=L->s[j];
	L->s[j]=L->s[j+1];
	L->s[j+1]=L->s[0];
	}
}
printf("按姓名排序后的结果为:\n");
	output(L); 
}
void RoomSort(SqList *L)//按宿舍号进行排序 
{
    int i=1;
	FILE *fp;
	int m,flag;   //宿舍号冒泡排序 
	m=L->length-1;
	flag=1;
	while((m>0)&&(flag==1))
	{
	flag=0;
	for(i=0;i<=m;i++)
	if(L->s[i].room>L->s[i+1].room)
	{               
		flag=1;
    L->s[0]=L->s[i];L->s[i]=L->s[i+1];L->s[i+1]=L->s[0];
	}
}
     printf("按宿舍号后的结果为:\n");
	output(L);
}

void NumberSearch(SqList *L)//按学号进行查询
{
  int i=1,k;
  int num;
  FILE *fp;
  int flag=0;   
   printf("输入要查询管理人员的学号:");
   scanf("%d",&num);
   if((fp=fopen("room.txt","w+"))!=NULL)
   {
   FILE *fp1;
   if((fp1=fopen("shi.txt","a"))!=NULL)//写文件,原内容上增加内容
   for(i=1;i<=L->length;i++)
   {
     if(L->s[i].number==num)
     {
      k=i;
	  flag=1;
	  }
	}
   if(flag==1)
   {
    printf("学号:%d\n姓名:%s\n宿舍号:%d\n",L->s[k].number,L->s[k].name,L->s[k].room);
	fprintf(fp1,"学号:%d\n姓名:%s\n宿舍号:%d\n",L->s[k].number,L->s[k].name,L->s[k].room);
   }
   fclose (fp1);
  }
  else
    printf("没有找到该学生,查询失败!");
  fclose (fp);
}
void NameSearch(SqList *L)//按姓名进行查询 
{
int i=1,k,flag=0;
char xingming[5]; 
L->length=3;
FILE *fp;
printf("输入要查询学生的姓名:");
scanf("%s",xingming);
  if((fp=fopen("room.txt","w+"))!=NULL)
  {
 FILE *fp1;
if((fp1=fopen("shi.txt","a"))!=NULL)//写文件,原内容上增加内容
for(i=1;i<=L->length;i++)
{
if(strcmp(L->s[i].name,xingming)==0)
{
k=i;
//flag=1;
}
flag=1;
}
if(flag==0)
printf("没有找到该学生,查询失败!");
else
printf("学号:%d\n姓名:%s\n房间号:%d\n",L->s[k].number,L->s[k].name,L->s[k].room);
fprintf(fp1,"学号:%d\n姓名:%s\n宿舍号:%d\n",L->s[k].number,L->s[k].name,L->s[k].room);
fclose (fp1);
}
fclose(fp);
}
 void RoomSearch(SqList *L)//按宿舍号进行查询
{
  int i=1,k;int num;
//L.length=3;
FILE *fp;
int flag=0;   
//m=L.length-1;
//flag=1;
printf("输入要查询学生的宿舍号:");
scanf("%d",&num);
if((fp=fopen("room.txt","w+"))!=NULL)
{
FILE *fp1;
if((fp1=fopen("shi.txt","a"))!=NULL)//写文件,原内容上增加内容 
for(i=1;i<=L->length;i++)// 
{                           
if(L->s[i].room==num)       
{                              
k=i;
flag=1;
}
}
if(flag==1)//0
printf("学号:%d\n姓名:%s\n宿舍号:%d\n",L->s[k].number,L->s[k].name,L->s[k].room);
fprintf(fp1,"学号:%d\n姓名:%s\n宿舍号:%d\n",L->s[k].number,L->s[k].name,L->s[k].room);
fclose (fp1);
}
else
printf("没有找到该学生,查询失败!");

fclose (fp);
}
int main()
{
SqList L;
int n,option;
while(1)
{
      printf("****************************************\n");
      printf("1.创建                      2.按学号排序\n ");  
      printf("3.按姓名排序               4.按宿舍号排序\n");
      printf("5.按学号查询                 6.按姓名查询\n");  
      printf("7.按宿舍号查询                     8.退出\n");
      printf("*****************************************\n");
      printf("请选择输入的数字:"); 
      scanf("%d",&option);
      switch(option)
{
case 1:
printf("请输入学生个数:");
          scanf("%d",&n);
          CreatStudent(&L,n); 
          output(&L);
          break;
case 2:
NumberSort(&L);
break;
case 3:
NameSort(&L);
break;
case 4:
RoomSort(&L);
break;
case 5:
NumberSearch(&L);
break;
case 6:
NameSearch(&L);
break;
case 7:
RoomSearch(&L);
break;
case 8:
exit(0);
 break;
} 
}
return 0;
} 

测试数据:

1、新建

2、排序

 

3、查询 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学习的太阳花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值