C语言课程设计之宿舍管理系统

C语言 同时被 2 个专栏收录
3 篇文章 0 订阅
2 篇文章 0 订阅

宿舍管理系统C语言源码

内容摘要

学生宿舍管理系统时应对学生宿舍管理的现代化、网络化,逐步摆脱学生宿舍管理的人工管理方式,提高学生宿舍管理效率而开发的,它包括了对学生宿舍基本信息管理,其功能包括对这些基本信息的增、删、改、查等基本功能,并将这些功能与文件读写相结合形成文档使管理者一目了然,也适合长时间的保存,数据不容易丢失;其中在输出时穿插着冒泡排序、希尔排序、折半拆入排序、二分查找等算法,按顺序输出学生信息等。综上,这无疑为信息的管理存储提供了一个方便、快捷的操作方式。

关键词

二分查找、排序算法及分析、文件操作

系统概览

在这里插入图片描述

开发工具

Visual C++ 6.0

函数功能

在这里插入图片描述

源码

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include "conio.h" 

#include "windows.h"

#define MAX 1000


  /*结构体类型*/

typedef struct  

{   
	int num;/*学号*/
	
	char name[20];/*姓名*/
	
	char sex[5];/*性别*/
	
	int age;/*年龄*/
	
	char studentclass[20];/*班级*/
	
	int dorm;/*宿舍号*/

}STUDENTS;

//查找指针 
typedef struct Points
{
   int a;
   struct Points *points;
}Points;

char xiugai[10]="修改";
char chaxun[10]="查询"; 
char xuehao[]="学号";
char xingming[]="姓名";
char xingbie[]="性别";
char nianling[]="年龄";
char banji[]="班级";
char sushe[]="宿舍";



/*共用的功能块 */


void pause(){
	int i;
	printf("\n\n按任意键加回车返回主菜单!");
    scanf("%d",&i);
    getchar();
} 

void print(STUDENTS stu[],int point){
	printf("\n\n\n学号:%d,姓名:%s,性别:%s,年龄:%d,班级:%s,宿舍号: %d\n",
			 stu[point].num,stu[point].name,stu[point].sex,stu[point].age,stu[point].studentclass,stu[point].dorm);
}

void printfNotFound(){
	printf("找不到该数据\n");
}

void printSearch(STUDENTS stu[],int i){
   printf("		     %7d%11s%10s%10d%12s%12d\n\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].dorm);
}

void printHead(){
		printf(" 		-------------------------------------------------------------------------------\n");
	    printf("		-------------------------------------------------------------------------------\n");
	    printf("			学号:     姓名:     性别:     年龄:     班级:     宿舍号:     \n"); 
	    printf(" 		-------------------------------------------------------------------------------\n");
		printf(" 		-------------------------------------------------------------------------------\n\n\n");

}

//默认继续 
int a=1;
void selectOperate(){
	
	button:
	    printf("继续操作请按1,返回主菜单请按0  ");
		scanf("%d",&a);
		if(!(a==1||a==0))	
	 	{		
	 		printf("请输入正确的指令"); 
	 		goto button;		 		
	 	}
}






//读取文件,返回的是总个数 
int read_file(STUDENTS stu[])
{
	FILE *fp;	
    int point=-1;
	fp=fopen("stu.txt","rt");
	if(fp==NULL)	
	{
		printf("\n\n*****库存文件不存在!请创建");	
		return 0;
	}
	while(!feof(fp))	
	{
		point++;
		fread(&stu[point],sizeof(STUDENTS),1,fp);	
	}	
	fclose(fp);	
	return point;

}

//存储数据到文件中 
void save_file(STUDENTS stu[],int sum)//sum是总个数 
{
	FILE *fp;	
	 int i;	
	 if((fp=fopen("temp.txt","w"))==NULL)	
	 {
	 	printf("写文件错误!\n");	
		return;	
	 }	
		for(i=0;i<sum;i++)	
			if(fwrite(&stu[i],sizeof(STUDENTS),1,fp)!=1)	
	  			printf("写文件错误!\n");
	
	fclose(fp);
	remove("stu.txt");
	rename("temp.txt","stu.txt");

}


/*创建学生信息*/
//返回的是总数 
int input(STUDENTS stu[],int sum)
{  
	int x;
   for(;sum<MAX;sum++)
  {
	system("cls");    
	
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▄        创建学生宿舍信息        ▄\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");

    printf("\n\n                 录入学生信息  (最多%d个)\n",MAX);
    printf("               ----------------------------\n");
    printf("\n                     第%d个学生\n",sum+1);
	printf("\n 请输入学生的学号:");
    scanf("%d",&stu[sum].num);
    printf("\n 请输入学生的姓名:");
    scanf("%s",stu[sum].name); 
	printf("\n 请输入学生的性别:");
    scanf("%s",stu[sum].sex);
    printf("\n 请输入学生的年龄:");   
    scanf("%d",&stu[sum].age);  
    printf("\n 请输入学生的班级:");
    scanf("%s",stu[sum].studentclass);        
    printf("\n 请输入学生的宿舍号:");
    scanf("%d",&stu[sum].dorm);
    printf("		创建成功!");

	//选择操作 
		selectOperate();
		if(a==0)
			return sum+1;	
   }
       return sum+1;

}


/*打印学生信息*/                                                                                                                                                                                                                                                        
void output(STUDENTS stu[],int sum)
{  
   int i;
   system("cls");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▄        打印学生宿舍信息        ▄\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");

   printHead(); 
   for(i=0;i<sum;i++)      
  	 printSearch(stu,i);
 	 		
   pause();

}


/*排序  */ 
 


/*复制student*/
//将排好的装在一个新的students数组里 ,不要存到文件中 
 void cpStu(STUDENTS stu0[],STUDENTS stu[],int sum) {
 	int i;
 	for(i=0;i<sum;i++){
 		stu[i].num=stu0[i].num;
 		strcpy(stu[i].name,stu0[i].name);
 		strcpy(stu[i].sex,stu0[i].sex);
 		stu[i].age=stu0[i].age;
 		strcpy(stu[i].studentclass,stu0[i].studentclass);
 		stu[i].dorm=stu0[i].dorm;
 	}	
 }

/*对数据元组排序*/
void exchangeData(STUDENTS *stu1,STUDENTS *stu2){
				stu1->num=stu2->num;
   				
   				stu1->dorm=stu2->dorm; 
					 
				stu1->age=stu2->age;
					 
				strcpy(stu1->name,stu2->name);
					  
				strcpy(stu1->sex,stu2->sex);
					  
				strcpy(stu1->studentclass,stu2->studentclass);	
}


int selectSort(){
	
	int choice;
		
	 printf("\n\n\n     ********请您选择条件进行排序********\n\n");
     printf("                1. 学号\n\n");
     printf("                2. 班级\n\n");
     printf("                3. 宿舍号\n\n");
     printf("                4. 姓名\n\n");
     printf("                0. 返回主菜单\n\n");
     printf("                 请选择(0-3):");
 	 scanf("%d",&choice);
 	 return choice; 
}


/*根据宿舍号从小到大排序   冒泡*/

void sortByDorm(STUDENTS stu0[],int sum,STUDENTS stup[])

  {  
  	STUDENTS stu1;  //中间变量 
  	int i,j;
    
	cpStu(stu0,stup,sum);
	
    for(i=0;i<sum-1;i++)
		for(j=0;j<sum-1-i;j++)
			if(stup[j].dorm>stup[j+1].dorm)
			  {
				exchangeData(&stu1,&stup[j]);	
				exchangeData(&stup[j],&stup[j+1]);	
				exchangeData(&stup[j+1],&stu1);	
			}

  }
 
  /*根据班级从小到大排序   选择*/
  
  void sortByClass(STUDENTS stu0[],int sum,STUDENTS stup[])

  {  
  	
  	STUDENTS stu1;			//中间变量 
  	int i,j,k;

	cpStu(stu0,stup,sum);
	
    for(i=0;i<sum-1;i++)
	{
		k=i;
		for(j=i+1;j<sum;j++)
			if(strcmp(stup[k].studentclass,stup[j].studentclass)>0)		
					k=j;

				
		if(k!=i)
		{
			exchangeData(&stu1,&stup[i]);	
			exchangeData(&stup[i],&stup[k]);	
			exchangeData(&stup[k],&stu1);
		}			
	}
	
	
  }
  
   /*根据姓名从大到小排序   折半插入排序*/
	//因为这里是从stu[1]开始操作的,所以得再创个中间变量 
  void sortByName(STUDENTS stu0[],int sum,STUDENTS stup[])

  {  
  	STUDENTS stu1;			//中间变量 
  	STUDENTS stu[1000];
  	int i,j,low,high,mid;

		for(i=0;i<sum;i++){
 		stu[i+1].num=stu0[i].num;
 		strcpy(stu[i+1].name,stu0[i].name);
 		strcpy(stu[i+1].sex,stu0[i].sex);
 		stu[i+1].age=stu0[i].age;
 		strcpy(stu[i+1].studentclass,stu0[i].studentclass);
 		stu[i+1].dorm=stu0[i].dorm;
 	}	
	
	
	for(i=2;i<sum+1;i++){
		exchangeData(&stu1,&stu[i]);    /*保存待插入元素到stu1*/
		 low=1;high=i-1;
		 while(low<=high)
		 {
		 	mid=(low+high)/2;
		 	if(strcmp(stu1.name,stu[mid].name)>0)
		 		low=mid+1;
		 	else
		 		high=mid-1;
		 	
		 }
		 for(j=i-1;j>=high+1;j--)
			 exchangeData(&stu[j+1],&stu[j]);//后移元素,留出插入空位 
		exchangeData(&stu[high+1],&stu1);		
	}
	
	for(i=0;i<sum;i++){
 		stup[i].num=stu[i+1].num;
 		strcpy(stup[i].name,stu[i+1].name);
 		strcpy(stup[i].sex,stu[i+1].sex);
 		stup[i].age=stu[i+1].age;
 		strcpy(stup[i].studentclass,stu[i+1].studentclass);
 		stup[i].dorm=stu[i+1].dorm;
 	}	
		
  }
  
  
  

   /*根据学号从大到小排序   插入的希尔排序*/
    
   void ShellInsert(STUDENTS stup[],int sum,int dk){   	
   	int i,j,k;
   	STUDENTS stu1;//中间变量 
   	for(k=0;k<dk;k++)
   		for(i=dk+k;i<sum;i=i+dk)
			if(stup[i].num<stup[i-dk].num)
   			{
   			
   				exchangeData(&stu1,&stup[i]); 
   			
   				for(j=i-dk;j>=0&&stu1.num<stup[j].num;j=j-dk)//记录向后移    			
					exchangeData(&stup[j+dk],&stup[j]); 
			
				exchangeData(&stup[j+dk],&stu1); 
			}
   }    
  void sortByNum(STUDENTS stu[],int sum,STUDENTS stup[])
  {  

  	int i,x;
    
	cpStu(stu,stup,sum);
	
  	int dlta[5]={5,4,3,2,1};  	
  	for(x=0;x<5;x++)
  		ShellInsert(stup,sum,dlta[x]);
  	
  	
  }
  
  //总的函数 
  void sortStudent(STUDENTS stu[],int sum){
  	STUDENTS stup[1000];//引用,把排好序的放在这里,不跟原来的混淆 
  	int choice,x,i;
  	do{	
	  	system("cls");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▄        学生宿舍信息排序        ▄\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
	  	
	  	select:
	  	choice=selectSort();
	  	
	  	system("cls");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▄        学生宿舍信息排序        ▄\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
		   
	  	switch(choice)
	    {	  
	      case 1: sortByNum(stu,sum,stup); break;/*学生学号信息顺序*/
	      case 2: sortByClass(stu,sum,stup);break;/*学生班级信息顺序*/     
		  case 3: sortByDorm(stu,sum,stup); break;/*学生宿舍信息顺序*/
		  case 4: sortByName(stu,sum,stup); break;/*学生姓名信息顺序*/
	      case 0: break;
    	}
    	//打印排好序的 
    	printHead();
    	 for(i=0;i<sum;i++)
			printSearch(stup,i);
    	
    	
    	if(choice==1||choice==2||choice==3||choice==4)
		{
	    	printf("\n\n");
		   	button:
			   printf("继续查询请按1,返回主菜单请按0  ");
			   scanf("%d",&x);
				if(x==1)	
					x=1;
				else if(x==0)
				 	continue;
				else
				 	{		
				 		printf("请输入正确的指令\n"); 
				 		goto button;		 		
				 	}
		}
		else if(choice==0)
			x=0;
		else
		{
			printf("\n\t\t请输入正确的指令\n"); 
			goto select;
		}
		  
	}while(x==1);
    
  } 
  
 






/* 根据条件查找指针point*/ 
///


//查询或者修改的选择; 
int selectChoice(char tiaojian[20]){
	
	int choice;
	
	
	 printf("\n\n\n     ********您想根据哪个条件%s********\n\n",tiaojian);
     printf("                1. 学号\n\n");
     printf("                2. 姓名\n\n");
	 printf("                3. 性别\n\n");
     printf("                4. 年龄\n\n");
     printf("                5. 班级\n\n");
     printf("                6. 宿舍号\n\n");
     printf("                0. 返回主菜单\n\n");
     printf("                 请选择(0-6):");
 	 scanf("%d",&choice);
 	 return choice; 
}


  ///????????????????????????????为什么这里的指针得返回菜可行,参数不是指针,操作的是地址的???? 
Points *connectPoint(Points *r,Points *p,int i){
  		p=(Points *)malloc(sizeof(Points));
		p->a=i;
		r->points=p;
		r=p;
		return r;
  }
  
  //choice是指主菜单中的功能选项,字符数组tiaojian为相应的字符,比如如果选择查询的话,
  //tiaojian传参进来的应该为 "查询",这里是为了提高函数的复用性。 
  Points *findPoint(STUDENTS stu[],int sum,int choice,char tiaojian[])
  {
  	int i,j=0; Points *p,*q,*r; q=(Points *)malloc(sizeof(Points));r=q;
   	int num,age,dorm;char classs[20],sex[5],name[20];

    printf("     \n\n请输入您要查找的学生的%s",tiaojian);
   	switch(choice)
	{
		case 1: scanf("%d",&num);
				for(i=0;i<sum;i++)
					if(num==stu[i].num)
						r=connectPoint(r,p,i);
				break;
		case 2: scanf("%s",name);for(i=0;i<sum;i++)if(strcmp(name,stu[i].name)==0)r=connectPoint(r,p,i);break;
		case 3: scanf("%s",sex);for(i=0;i<sum;i++)if(strcmp(sex,stu[i].sex)==0)r=connectPoint(r,p,i);break;
		case 4: scanf("%d",&age);for(i=0;i<sum;i++)if(age==stu[i].age)r=connectPoint(r,p,i);break;
		case 5: scanf("%s",classs);for(i=0;i<sum;i++)if(strcmp(classs,stu[i].studentclass)==0)r=connectPoint(r,p,i);break;
		case 6: scanf("%d",&dorm);for(i=0;i<sum;i++)if(dorm==stu[i].dorm)r=connectPoint(r,p,i);break;
	}
	  
	r->points=NULL;
	
 	return q;
  	
  } 
  
 

// 



/*查询学生信息*/
void inquire(STUDENTS stu[],int sum) {
	
	int choice;
	Points *p;
		
	do{
	system("cls");
	printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
    printf("                   ▄                                ▄\n");
    printf("                   ▄        查询学生宿舍信息        ▄\n");
    printf("                   ▄                                ▄\n");
    printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");

	button: 
	choice=selectChoice(chaxun);
	
	system("cls");
	
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▄        查询学生宿舍信息        ▄\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   
	
switch里面不能调用排序功能,为什么?????????	
	switch(choice)
	{
		case 1:p=findPoint(stu,sum,choice,xuehao);break;
		case 2:p=findPoint(stu,sum,choice,xingming);break;
		case 3:p=findPoint(stu,sum,choice,xingbie);break;
		case 4:p=findPoint(stu,sum,choice,nianling);break;
		case 5:p=findPoint(stu,sum,choice,banji);break;
		case 6:p=findPoint(stu,sum,choice,sushe);break;
		case 0:return; 
		default :printf("请输入正确的指令");goto button;//不断循环;	
	}
	
	if(p->points!=NULL)
	{
		p=p->points;
		
		printHead();
		
		while(p!=NULL)
		{
			printSearch(stu,p->a);
			p=p->points;
		}		
	}
	else
		printfNotFound();
	//选择操作 
		selectOperate();	
	}while(a);
	
}
 
  
  //二分法只适用于查找一个     目前只有学号,姓名,宿舍排序 
   Points *findPoint2(STUDENTS stu[],int sum,int choice,char tiaojian[])
  {
  	int i,j=0; Points *p,*q,*r; q=(Points *)malloc(sizeof(Points));r=q;
   	int num,age,dorm;char classs[20],sex[5],name[20];



    printf("     \n\n请输入您要查找的学生的%s",tiaojian);
    
    	switch(choice)
	{
		case 1: scanf("%d",&num);break;
		case 2: scanf("%s",name);break;
		case 3: scanf("%d",&dorm);break;
	}
	
	
	int flag=0;
  	int low=0,high=sum-1,mid;
  	while(low<=high){
  		mid=(low+high)/2;
  	
  	
  	switch(choice)
	{
		case 1:if(num==stu[mid].num){r=connectPoint(r,p,mid);printf("mid==%d",mid);flag=1;} 
				else if(stu[mid].num>num)high=mid-1;else low=mid+1;
				break;
		case 2: if(strcmp(name,stu[mid].name)==0){r=connectPoint(r,p,mid);flag=1;} if(strcmp(stu[mid].name,name)>0)high=mid-1;else low=mid+1;break;
		case 3: if(dorm==stu[mid].dorm){r=connectPoint(r,p,mid);flag=1;} if(stu[mid].dorm>dorm)high=mid-1;else low=mid+1;break;
	}
	//如果找到,就跳出循环 
  	if(flag)
  		break;
  		
  	}	
    	  
	r->points=NULL;
	
 	return q;
  	
  } 


/*二分法查询学生信息*/
void inquire2(STUDENTS stu[],int sum) {
	STUDENTS stup1[1000];//引用,把排好序的放在这里,不跟原来的混淆 
	STUDENTS stup2[1000];//引用,把排好序的放在这里,不跟原来的混淆 
	STUDENTS stup3[1000];//引用,把排好序的放在这里,不跟原来的混淆 
	//二分法得先排序 
	sortByNum(stu,sum,stup1);
	sortByName(stu,sum,stup2);
	sortByDorm(stu,sum,stup3);
	
	int choice;
	Points *p;
	
	
	do{
	system("cls");
	printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
    printf("                   ▄                                ▄\n");
    printf("                   ▄        查询学生宿舍信息        ▄\n");
    printf("                   ▄                                ▄\n");
    printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");

	button: 
	 printf("\n\n\n     ********您想根据哪个条件查询********\n\n");
     printf("                1. 学号\n\n");
     printf("                2. 姓名\n\n");
     printf("                3. 宿舍号\n\n");
     printf("                0. 返回主菜单\n\n");
     printf("                 请选择(0-3):");
    scanf("%d",&choice);
	
	system("cls");
	
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▄        查询学生宿舍信息        ▄\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   
	
switch里面不能调用排序功能,为什么?????????	
	switch(choice)
	{
		case 1:p=findPoint2(stup1,sum,choice,xuehao);break;//二分法查询 
		case 2:p=findPoint2(stup2,sum,choice,xingming);break;//二分法查询 
		case 3:p=findPoint2(stup3,sum,choice,sushe);break;//二分法查询 
		case 0:return; 
		default :printf("请输入正确的指令");goto button;//不断循环;	
	}
	
	if(p->points!=NULL)
	{
		p=p->points;
		
		printHead();
		
		while(p!=NULL)
		{
			if(choice==1) {
			printSearch(stup1,p->a);
			p=p->points;}
			if(choice==2) {
			printSearch(stup2,p->a);
			p=p->points;}
			if(choice==3) {
			printSearch(stup3,p->a);
			p=p->points;}
		}		
	}
	else
		printfNotFound();
	//选择操作 
		selectOperate();	
	}while(a);
	
}


//修改和删除判断输入学生个数 
int operateNum(int sum){
	int n;
	printf("请输入你要操作的学生的个数:");
   scanf("%d",&n);
   if(n>sum)
   {
	printf("\n\n	输入学生个数超过总量,操作失败\n");
	selectOperate();
	return 0;
   }
   else if(n<=0)
   	{ 
	printf("\n\n	输入学生个数不能小于或等于0,操作失败\n");
	selectOperate();
	return 0;
   }
   return n;
} 



/*只能根据学号删除学生信息*/

void exchangeData(STUDENTS *stu1,STUDENTS *stu2);

//返回总数 
int deletel(STUDENTS stu[],int sum)
  { 
  a=1;
    system("cls"); 
   int i,j=0,n=0,flag=1;
   Points *p;  
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▄        删除学生宿舍信息        ▄\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
     
   while(n==0)//这里接收到的两个数,n判断学生个数,a判断是否返回主菜单 
   {
   	n=operateNum(sum);
   	//选择操作 
	if(a==0)
		return sum;  //0就返回主菜单	
   }	 
     
   do{  
   
   if(flag){
   
   system("cls"); 
    Points *p;  
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▄        删除学生宿舍信息        ▄\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
	}
	
   //查一个删一个 
  	p=findPoint(stu,sum,1,xuehao); 
  	p=p->points;
	if(p!=NULL)   
	{	
		i=p->a;		
		//把后面的一次覆盖掉前面一个 
		for(;i<sum-1;i++)
			exchangeData(&stu[i],&stu[i+1]);

		printf("删除成功\n");
		flag=0;
		j++;
		if(j==n)
		{
			printf("\n\n删除操作已完成\n");
			//选择操作 
			selectOperate();
			if(a==0)
				return sum-n;
			else 
				deletel(stu,sum-n);
		}
	} 
	else{
		printf("输入的学号不存在,操作失败\n");
		
		//选择操作 
		selectOperate();
		if(a==0)
			return sum-j;	
	}
	}while(a==1&&j<n);

}



/*只能根据学号修改学生信息*/

void change(STUDENTS stu[],int sum)
  {  
	 int choice;
      Points *p;
      
    do{
      system("cls");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▄        修改学生宿舍信息        ▄\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
	  p=findPoint(stu,sum,1,xuehao);
		
	  p=p->points;
	  
    if(p!=NULL)
    {
    	system("cls");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▄        修改学生宿舍信息        ▄\n");
   printf("                   ▄                                ▄\n");
   printf("                   ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");
    	
    	int i=p->a;
    	
		print(stu,i);
		button:
		choice=selectChoice(xiugai);
		 
		 switch(choice)		
		 {
		  case 1:printf("\n   请输入你改的新学号");scanf("%d",&stu[i].num); break;
		  case 2:printf("\n   请输入你改的新姓名");scanf("%s",stu[i].name); break;
		  case 3:printf("\n   请输入你改的新性别");scanf("%s",stu[i].sex);  break;
		  case 4:printf("\n   请输入你改的新年龄");scanf("%d",&stu[i].age);  break;
		  case 5:printf("\n   请输入你改的新班级");scanf("%s",stu[i].studentclass); break;
		  case 6:printf("\n   请输入你改的新宿舍");scanf("%d",&stu[i].dorm); break;
		  case 0:return; 
		  default :printf("请输入正确的指令");goto button;		  
		 }
		  
		  printf("\n   修改成功:");
		  print(stu,i);					
	}
	else	
		printfNotFound();
		
	 //选择操作 
	selectOperate();
		if(a==0)
			return;
	}while(a);
}



void pagedis()
{
   printf(" \n\n\n            **********************************\n");
   printf("                   *                                *\n");
   printf("                   *                                *\n");
   printf("                   *                                *\n");
   printf("                   *  欢迎进入学生宿舍信息管理系统  *\n");
   printf("                   *                                *\n");
   printf("                   *                                *\n");
   printf("                   *                                *\n");
   printf("                   **********************************\n");
}
//欢迎 
void welcome(){
	
			char heart[30][150]={
        "                           ************                           ************",
        "                        ******************         	        ******************",
        "                    ******************#*******        	    **************************",		
        "                 **********************#*********       ********************************",
        "                **********************##########***   **************#********************  ",
        "               **********************#*********#**** **##********#************************   ",
        "               *********##########**#****#****#**********##****#**************************  ",
        "               **********#*******#*#*****#***#***************#********#########***********  ",
        "                **********#*****#********#***********#####***#********#*******#**********  ",
        "                 ***********#***#********#***************#***#******#*#****#**#*********  ",
        "                  ***********##**********#**************#*****#****#***#*****#*#*******   ",
        "                   **********##*********#*#************#*****####*****#*******#*******  ",
        "                    ********#**#*******#***#************#*************#**************    ",
        "                      *****#****#*****#*****#************#************#************    ",
        "                        **#**********#*******#******######************#**********     ",
        "                          **********#*********#*****###########################     ",
        "                            **************************************************      ",
        "                              **********************************************     ",
        "                                ******************************************     ",
        "                                  **************************************    ",
        "                                    **********************************      ",
        "                                      ******************************   ",
        "                                        **************************   ",
        "                                          **********************  ",
        "                                            ******************  ",
        "                                              **************      ",
        "                                                **********       ",
        "                                                  ******    ",
        "                                                    **  "
		};
		
    int i;
    for(i=0;i<29;i++)   //逐行打印
        printf("%s\n",heart[i]);
}



void bye(){
	system("cls");
			char heart[11][150]={
"\t\t  _____   _                        _             ",
"\t\t |_   _| | |_     __ _    _ _     | |__    ___     o O O   ",
"\t\t   | |   | ' \\   / _` |  | ' \\    | / /   (_-<    o        ",
"\t\t  _|_|_  |_||_|  \\__,_|  |_||_|   |_\\_\\   /__/_   TS__[O]  ",
"\t\t_|\"\"\"\"\"|_|\"\"\"\"\"|_|\"\"\"\"\"|_|\"\"\"\"\"|_|\"\"\"\"\"|_|\"\"\"\"\"| {======| ",
"\t\t\"`-0-0-\'\"`-0-0-\'\"`-0-0-\'\"`-0-0-\'\"`-0-0-\'\"`-0-0-\'./o--000'  "			
};
		
   int i;
   printf("\n\n");
    for(i=0;i<6;i++)   //逐行打印
        printf("%s\n",heart[i]);
}

void designer(){
        printf("\n\n\t\t☆☆☆☆☆☆☆☆★★设计者信息★★☆☆☆☆☆☆☆☆\n\n");
        printf("\t\t	●●	                         ●●\n\n");
        printf("\t\t	●●	姓名:             ●●\n\n");
        printf("\t\t	●●	                         ●●\n\n");
        printf("\t\t	●●	班级:        ●●\n\n");
        printf("\t\t	●●	                         ●●\n\n");
        printf("\t\t	●●	学号:   ●●\n\n");
        printf("\t\t	●●	                         ●●\n\n");
        printf("\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
}

void check()
{
   char userName[5];/*用户名*/

   char userPWD[5];/*密码*/

   int i;

   system("color 3C");

   for(i = 1; i < 4; i++)
   {
      /*用户名和密码均为123;*/
  	
        printf("\n       请输入您的用户名(123):");

        gets(userName);

        printf("\n       请输入您的密码(123):");

        gets(userPWD);

        if ((strcmp(userName,"123")==0) && (strcmp(userPWD,"123")==0))/*验证用户名和密码*/
        {
            
            system("cls");
            welcome();
             printf("\n      3秒后自动跳转");
            Sleep(3000); 
            return;
        }
        else
        {
            if (i < 3)
                printf("用户名或密码错误,请重新输入!");
            else
            {
                printf("您已连续3次将用户名或密码输错,系统将退出!");
                exit(1); 
            }
        }
   }

}


void menu()
{
		
	
  STUDENTS stu[20];
  int choice,sum;
  
  sum=read_file(stu);	
  	
  if(sum==0)
   {  
   	 printf("首先录入基本库存信息!按回车后进入*****\n");
     getch();
     
	 sum=input(stu,sum);
   }

	system("cls");

  do
  {  
    system("cls"); 
    
     button:	 	 
     printf("\n\n\n               ********学生宿舍信息管理系统********\n\n");
     printf("                      1. 创建学生宿舍信息\n\n");
     printf("                      2. 打印学生宿舍信息\n\n");
	 printf("                      3. 查询学生宿舍信息\n\n");
     printf("                      4. 修改学生宿舍信息\n\n");
     printf("                      5. 删除学生宿舍信息\n\n");
     printf("                      6. 学生宿舍信息排序\n\n");    
     printf("                      0. 退出系统\n\n");
     printf("                       请选择(0-6):");
     
     scanf("%d",&choice);  
  
	   
    switch(choice)
    {	  
      case 1: sum=input(stu,sum); break;/*创建学生信息*/
      case 2: output(stu,sum) ; break;/*打印学生信息*/
      case 3: inquire(stu,sum); break;/*查询学生信息*/
      case 4: change(stu,sum); break;/*修改学生信息*/
      case 5: sum=deletel(stu,sum);break;/*删除学生信息*/
      case 6: sortStudent(stu,sum); break;/*学生信息顺序*/    
      case 0:  bye();designer();break;
      default:system("cls"); printf("\n		请输入正确的指令!\n");
	  goto button;
    }

  }while(choice!=0);

  save_file(stu,sum);
}


int main()
{  
  	 pagedis();

	 check();

	 menu();   

  return 0;

}
  • 5
    点赞
  • 2
    评论
  • 48
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

Endless Road

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值