教师信息管理系统

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
typedef struct teacher
{
    int num;//工号 
	char name[10];//姓名 
	char sex[10];//性别 
	char edu[10];//学历 
	char pos[10];//职称 
	char aca[10];//学院 
	char date[10];//入职年月 
	struct teacher *next;
}tea;

int num;//工号 
char name[10];//姓名 
char sex[10];//性别 
char edu[10];//学历 
char pos[10];//职称 
char aca[10];//学院 
char date[10];//入职年月 

tea *head=NULL,*p;
int size = sizeof(tea);

void welocome()//登陆界面  
{  
    system("color 0a");
	printf("````````````````````````````````````````````````````````````\n");  
    printf("\n"); 
    printf("\n");  
    printf("\n");  
    printf("**************  欢迎使用教师信息管理系统 ******************\n");  
    printf("\n");  
    printf("\n"); 
	printf("                制作人:184804140梁丁方\n                       184804151易玉龙\n                       184804178时凯峰\n"); 
	printf("                班  级:   软工三班\n");
	printf("                日  期: 2019年3月23日\n");  
    printf("````````````````````````````````````````````````````````````\n");  
}

void menu()//功能菜单  
{  
    printf("     ________________________________________________ \n");  
    printf("    |                                                |\n");  
    printf("    |                教师信息管理系统                |\n");  
    printf("    |                                                |\n");  
    printf("    |               0、退出系统                      |\n");  
    printf("    |               1、录入教师信息                  |\n");  
    printf("    |               2、遍历                          |\n");  
    printf("    |               3、按工号查询                    |\n");  
    printf("    |               4、按学历查询                    |\n");  
    printf("    |               5、插入教师信息                  |\n");  
    printf("    |               6、删除教师信息                  |\n");  
    printf("    |               7、职称晋升                      |\n");
	printf("    |               8、计算各学历的人数比例          |\n");    
    printf("    |               9、从文件读入数据                |\n");
    printf("    |               10、保存数据到文件               |\n");
    printf("    |                                                |\n");  
    printf("    |________________________________________________|\n");   
}

tea *Create()//录入教师信息
{ 
    int size = sizeof(tea);
    head = NULL;
    printf("提示:当录入工号0时结束录入\n");
    printf("请输入教师信息:\n");  
    printf("工号:");  
    scanf("%d",&num);
    if(num==0)
	{
		printf("教师信息录入成功!\n") ;
		return head;
	 } 
    printf("姓名:") ;  
    scanf("%s",name) ;  
    printf("性别:");  
    scanf("%s",sex); 
    printf("学历:");  
    scanf("%s",edu);  
    printf("职称:");   
    scanf("%s",pos);  
    printf("学院:");   
    scanf("%s",aca);  
    printf("入职年月:");   
    scanf("%s",date);  
    while(num!=0){	/* 工号0表示输入结束 */ 
       p = (tea *) malloc(size);
       p->num=num; 
       strcpy(p->name,name); 
       strcpy(p->sex,sex); 
       strcpy(p->edu,edu);
       strcpy(p->pos,pos);
       strcpy(p->aca,aca);
       strcpy(p->date,date);
       tea *ptr ,*ptr1, *ptr2;
       ptr2 = head; 
       ptr = p;
       if(head == NULL){
        head = ptr;
        head->next = NULL;
       }
       else{
        while((ptr->num > ptr2->num) && (ptr2->next != NULL)){
            ptr1 = ptr2;
            ptr2 = ptr2->next;
        }
        if(ptr->num <= ptr2->num){ 	
            if(head == ptr2)  head = ptr;
            else ptr1->next = ptr;
            ptr->next = ptr2;
        }
        else{
            ptr2->next = ptr;
            ptr->next = NULL; 
        } 
       }    /* 调用插入函数 */
       printf("请输入教师工号:\n");  
       printf("工号:");  
       scanf("%d",&num);
       if(num==0)
	   {
		  printf("教师信息录入成功!\n") ;
		  return head;
	   } 
       printf("姓名:") ;  
       scanf("%s",name) ;  
       printf("性别:");  
       scanf("%s",sex);  
       printf("学历:");  
       scanf("%s",edu);  
       printf("职称:");   
       scanf("%s",pos);  
       printf("学院:");   
       scanf("%s",aca);  
       printf("入职年月:");   
       scanf("%s",date);
   }
}

void Print()//遍历 
{   
	tea *ptr;
    if(head == NULL){
        printf("\n无信息\n");
        return;
    }
    printf("\n**********************************************教师信息***********************************************\n");
    printf("\n");
    for(ptr = head; ptr != NULL; ptr = ptr->next)
      	printf("工号:%-10d姓名:%-10s性别:%-10s学历:%-10s职称:%-10s学院:%-10s入职年月:%-10s\n",ptr->num,ptr->name,ptr->sex,ptr->edu,ptr->pos,ptr->aca,ptr->date); 
    printf("\n*****************************************************************************************************\n");
}

void Find1()//按工号查询 
{
	printf("请输入您想要查找的教师工号:");
    scanf("%d",&num);
	tea *ptr=NULL;
	if(head==NULL)
	printf("请录入教师信息!\n");
	else
	{
		for(ptr=head;ptr!=NULL;ptr=ptr->next)
			if(ptr->num==num)
				break;				
	if(ptr!=NULL)
	{
		printf("\n**********************************************教师信息***********************************************\n");
		printf("\n");
        printf("工号:%-10d姓名:%-10s性别:%-10s学历:%-10s职称:%-10s学院:%-10s入职年月:%-10s\n",ptr->num,ptr->name,ptr->sex,ptr->edu,ptr->pos,ptr->aca,ptr->date);
        printf("\n*****************************************************************************************************\n");
	}
	else
		printf("该教师信息未录入本系统!\n",num);
	}
}

void Find2()//按学历查询 
{
	printf("请输入您想要查找的学历:");
    scanf("%s",edu);
	tea *ptr;
	if(head==NULL)
		printf("请录入教师信息!\n");
	else
	{
		printf("\n**********************************************教师信息***********************************************\n");
		printf("\n");
		for(ptr=head;ptr!=NULL;ptr=ptr->next){
			if(strcmp(ptr->edu,edu)==0)
			printf("工号:%-10d姓名:%-10s性别:%-10s学历:%-10s职称:%-10s学院:%-10s入职年月:%-10s\n",ptr->num,ptr->name,ptr->sex,ptr->edu,ptr->pos,ptr->aca,ptr->date);                                                                                            
	  }     printf("\n*****************************************************************************************************\n");
	}
}

void Insert()//插入教师信息  
{  
    printf("请输入教师信息:\n");
	printf("工号:");  
    scanf("%d",&p->num);
    printf("姓名:") ;  
    scanf("%s",p->name) ;  
    printf("性别:");  
    scanf("%s",p->sex); 
    printf("学历:");  
    scanf("%s",p->edu);  
    printf("职称:");   
    scanf("%s",p->pos);  
    printf("学院:");   
    scanf("%s",p->aca);  
    printf("入职年月:");   
    scanf("%s",p->date);  
	tea *ptr ,*ptr1, *ptr2;
    ptr2 = head; 
    ptr = p;
    if(head == NULL){
        head = ptr;
        head->next = NULL;
    }
    else{
        while((ptr->num > ptr2->num) && (ptr2->next != NULL)){
            ptr1 = ptr2;
            ptr2 = ptr2->next;
        }
        if(ptr->num <= ptr2->num){ 	
            if(head == ptr2)  head = ptr;
            else ptr1->next = ptr;
            ptr->next = ptr2;
        }
        else{
            ptr2->next = ptr;
            ptr->next = NULL; 
        } 
        printf("插入成功!\n");
    }
}

void Delete()//删除教师信息  
{ 
    printf("请输入您想要删除的教师工号:");
    scanf("%d", &num);
	tea *ptr1,*ptr2; 
    if(head == NULL)
    printf("请录入教师信息!\n");
    else if(head->num == num){
	    while(head != NULL && head->num == num){  
	        ptr2 = head;
	        head = head->next;
	        free(ptr2);
	    }
		printf("删除成功!\n");
	}
	else{
	    ptr1 = head;
	    ptr2 = head->next;
	    while(ptr2 != NULL){
	        if(ptr2->num == num){ 
	            ptr1->next = ptr2->next;
	            free(ptr2); 
	        }
	        else 
	            ptr1 = ptr2;
	        ptr2 = ptr1->next;
	    }
	    printf("删除成功!\n");
	}
}

void Up()//职称晋升 
{
	printf("请输入您想要晋升的教师工号:");
    scanf("%d", &num);
    printf("该教师将晋升为:\n");
    scanf("%s", pos);
	tea *ptr;	
	if(head==NULL)
	printf("请录入教师信息!\n");
	else
	{
		for(ptr=head;ptr!=NULL;ptr=ptr->next)
			if(ptr->num==num)
			{
				strcpy(ptr->pos,pos);
				break;
			}	
		printf("晋升成功!\n");					
	}
}

void rate()
{
	char x[4][10]={"本科","硕士","博士","博士后"};
	int a=0,b=0,c=0,d=0,e=0,num=0;
	tea *p;
	if(head==NULL)
	printf("请录入教师信息!\n");
	else
	{
		for(p=head;p!=NULL;p=p->next)
		{
			num++;
			if(strcmp(p->edu,x[0])==0)
			  a++;
			else if(strcmp(p->edu,x[1])==0)
			  b++;
			else if(strcmp(p->edu,x[2])==0)
			  c++;
			else if(strcmp(p->edu,x[3])==0)
			  d++;
			else
			  e++;    
		}
		printf("各学历的教师比例如下:\n历本科:%.2f%% 硕士:%.2f%% 博士:%.2f%% 博士后:%.2f%% 本科及以下:%.2f%%\n",a*1.00/num*100,b*1.00/num*100,c*1.00/num*100,d*1.00/num*100,e*1.00/num*100);
	}	 
}

void Read()//从文件读入数据
{
	FILE *fp;
	if((fp=fopen("teacher.txt","r")) == NULL){	 
   	     printf("读入错误!\n"); 
         exit(0);
	 }	 
	tea *tail,*p;
    head = tail=NULL;
    while(!feof(fp)){
       p = (tea *) malloc(size);
       fscanf(fp,"%d %s %s %s %s %s %s",&p->num,p->name,p->sex,p->edu,p->pos,p->aca,p->date);
       p->next = NULL;
    	if(head == NULL) 
        	head = p;
		else  
        	tail->next = p;
    	tail = p;  
   }
	if(fclose(fp)){
    	printf( "读入错误!\n" );
    	exit(0);
	}
	  printf("教师信息读入成功!\n");	
}

void Save()//保存数据到文件 
{
	FILE *fp;
	if((fp=fopen("teacher.txt","w")) == NULL){	 
   	     printf("保存失败!\n"); 
         exit(0);
	 }
	tea *ptr;	
    if(head == NULL){
        return;
    }
    for(ptr=head;ptr->next!=NULL;ptr=ptr->next)
      	fprintf(fp,"%d %s %s %s %s %s %s\n",ptr->num,ptr->name,ptr->sex,ptr->edu,ptr->pos,ptr->aca,ptr->date);
    fprintf(fp,"%d %s %s %s %s %s %s",ptr->num,ptr->name,ptr->sex,ptr->edu,ptr->pos,ptr->aca,ptr->date);  
	if( fclose(fp) ){
    	printf( "保存失败!\n" );
    	exit(0);
	}
	printf("教师信息保存成功!\n");	
}

int main(void)
{
  int choice;
  welocome();
  do{
       menu();
       printf("请选择功能:");
       scanf("%d", &choice);
       switch(choice){
	     case 1: 
            Create();
            break;
         case 2: 
            Print();
            break; 
		 case 3:
         	Find1();
            break;
		 case 4: 
         	Find2();
            break;
	     case 5: 
            Insert();
            break;
	     case 6: 
            Delete();
            break;
         case 7:
            Up(); 
            break;
         case 8:
		    rate();
		    break;
		 case 9:
         	Read();
         	break;
		 case 10:
         	Save();
         	break;
	   }
  }while(choice!=0);
  return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43723935/article/details/89043938