你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

C语言 宿舍管理系统

2021/12/20 3:26:39

 

李四    10001    1-10-1001
李三一    10012    1-10-1002
赵三四    10009    1-10-1003
钱三四    10008    1-10-1004
孙三四    10007    1-10-1005
李三四    10006    1-10-1006
西门四    10005    1-10-1008
诸葛天四    10004    1-10-1009
李二四    10003    1-10-1010 

#include <stdio.h>
#include <string.h>
#define MAX 1000

struct student//学生结果
{
	char xm[10];//姓名
	char xh[10];//学号
	char fh[10];//房号
};

struct data
{
	int count;//当前学生数组中学生的个数
	struct student stu[MAX];//学生数组
}dd;

// 显示主菜单
void menu()
{
    
    printf("\n\n\n");
    printf("\t\t\t *******************************\n");
    printf("\t\t\t        \n");
    printf("\t\t\t      宿舍管理系统  \n");
    printf("\t\t\t        \n");
    printf("\t\t\t [1] 学号排序(冒泡法)  \n");
    printf("\t\t\t [2] 按姓名查询(二分法)  \n");
    printf("\t\t\t [3] 按学号查询(二分法)   \n");
    printf("\t\t\t [4] 按房号查询(二分法)  \n"); 
	printf("\t\t\t [5] 显示所有记录  \n"); 
    printf("\t\t\t [0] 退出     \n");
	printf("\t\t\t *******************************\n");
    printf("\t\t\t        \n");
}

// 查看所有学生信息
void view_data()
{
    int i;
    printf("姓名\t学号\t房号");
    printf("\n-------------------------------------------------------------------\n");
    for (i = 0; i < dd.count; i++)
	{
		printf("%s\t%s\t%s\n",dd.stu[i].xm , dd.stu[i].xh , dd.stu[i].fh);        
	}
	printf("\n");
}

void read(){
	FILE *fp;
	if((fp=fopen(".\\data.txt","rb"))==NULL)			// 打开文件并且让fp指向 文件 
	{
		printf("Can not open 'data.txt' file\n");
		return ;
	}
	
	
	while(!feof(fp))                     //读取一组数据后指针指向下一组数据,并且判断是否指向最后一行 
	{ 
		
		char xm[10];//姓名
		char xh[10];//学号
		char fh[10];//房号

		fscanf(fp,"%s %s %s",xm,xh,fh);//读文件记录给变量

		strcpy(dd.stu[dd.count].xm,xm);//赋值
		strcpy(dd.stu[dd.count].xh,xh);
		strcpy(dd.stu[dd.count].fh,fh);
		
		dd.count++;//前面加了记录,这里计数
	}  
	fclose(fp);				//关闭文件; 	
	
}

void sort()//学号排序
{
int i,j;/*计数变量*/
    struct student temp;/*中间变量 类型为结构体*/
    for(i=0;i<dd.count;i++) /*运用冒泡排序对结构体数组进行排序*/
    for (j=i+1;j<dd.count;j++)
    {
       if(strcmp(dd.stu[i].xh,dd.stu[j].xh)<0) /*实现从大到小排序*/
       {
           temp=dd.stu[i];
           dd.stu[i]=dd.stu[j];
           dd.stu[j]=temp;
       }

    }
}

 

void  search_xm()//找到则返回对应行号,找不到返回-1
{
	char xm[10];
	int n=-1;
	printf("请输入要查询的姓名:");
	scanf("%s",xm);
	getchar();

	int low = 1;
    int high = dd.count;
    int mid;

    while (low <= high)
    {
        mid = (low + high) / 2;
        if (strcmp(dd.stu[mid].xm , xm)==0)
        {
			printf("姓名\t学号\t房号");
			printf("\n-------------------------------------------------------------------\n");    
			printf("%s\t%s\t%s\n",dd.stu[mid].xm , dd.stu[mid].xh , dd.stu[mid].fh);        	
		    printf("\n");
            return ;
        }
        else if (strcmp(dd.stu[mid].xm , xm)>0)
        {
            high = mid - 1;
        }        
        else
        {
            low = mid + 1;
        }
    }    
	   printf("没有此记录~!");
       return;

}

int main()
{
	int k;//选择菜单值

	dd.count=0;//数组中学生的个数初始0
	read();//从文件导入数据
	view_data();//显示记录
	
	do
	{
		menu();//菜单

		scanf("%d",&k);//接收选择
		getchar();
   		switch(k)
   		{
   		  case 1:sort();break;//排序
   		  case 2:			  
			  search_xm();			  
			  break;
   		  case 3:break;
   		  case 4:break;
   		  case 5:view_data();break;
		  case 0:return 0;
   		  default:printf("\t\t\t\t\t无此功能,请重新输入!\n");break;
   		}


	}while(1);
	
	return 0;
}