利用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、查询