学生信息管理系统(C语言)

{/*
这是一个学生信息管理系统的线性表
有名字:性别:学号:班级:QQ号:

测试数据:
张三 M 信1807-3 20183614 1123456789
李四 M 信1807-4 20183412 2355647897
赵天 M 信1807-1 20180001 4666886012
莉莉 F  信1807-3 20184552 4579231446
乐乐 M 信1802    20182346 1564623235
*/}
#include<stdio.h>
#include<malloc.h> 
typedef struct s
{
	char name[20];
	char sex[2];
	char h_class[20];
	int study_namber;
	unsigned int qq_namber;
	
	struct s *next;
	 
}STUDENT;
STUDENT *insert_student_last(STUDENT *head);//不传头 
STUDENT *order_student(STUDENT *head,int *student_list_length);//按学号小到大排序,不传带空头 [问题区] 
STUDENT *insert_student_order(STUDENT *head);//不传头 [问题区]
STUDENT *delete_student_table(STUDENT *head); //传带空头的 [问题区]
int print_student_table(STUDENT *head);//不传头 
int list_length(STUDENT *head);//不传头 
int search_in_studentlist(STUDENT *head);//不传头 --按学号查找 
int main()
{

	STUDENT *head=NULL;
	do
	{
		head = (STUDENT *)calloc(1,sizeof(STUDENT));
			
	}while(head==NULL);
	head->next = NULL;
	//创建一个头为空的单链表
	 
	int n,i,student_list_length;
	printf("请输入你要添加的人数:\n");
	scanf("%d",&n);
	
	for(i=0;i<n;i++)
	{
		head->next = insert_student_last(head->next);
	} 
	
	student_list_length = n;
	printf("总计有%d名学生\n",student_list_length);
	
	//head = order_student(head,&student_list_length);//正在测试中的函数 
	 
	 //search_in_studentlist(head);
	 
	if(!print_student_table(head->next)) 
	{
		printf("很抱歉,显示出錯了\n");
	}else
	{
		printf("(。^▽^)\n");
	} 

	//head->next = insert_student_order(head->next ); 
		
		head->next  = delete_student_table(head->next );
	 
	if(!print_student_table(head)) 
	{
		printf("很抱歉,显示出錯了\n");
	}

}

STUDENT *insert_student_last(STUDENT *head)
{
	STUDENT *p1=NULL,*p2=NULL;
	p2=head;
	do
	{
		p1 = (STUDENT *)calloc(1,sizeof(STUDENT));//创建一个节点 

	}while(p1==NULL);
	printf("姓名/性别/班级/学号/QQ号\n"); 
	scanf("%s%s%s%d%u",p1->name,p1->sex,
	       p1->h_class,&p1->study_namber ,&p1->qq_namber );
	 
	if(head==NULL)
	{
		head = p1;
		head->next = NULL;	
	}
	else
	{
		while(p2->next != NULL)
		{
			p2 =  p2->next;
		}
		p2->next = p1;
		p1->next = NULL;
	}
	
	return head;
}
int print_student_table(STUDENT *head)
{
//	printf("(>人<;)\n");
	STUDENT *p2;
	p2 = head;
	int flag=0;
	if(head == NULL)
	{
		printf("學生表是空的!");
	}
	else
	{
		while(p2 != NULL)
		{
			printf("姓名:%s\t性别:%s\t班级:%s\t学号:%d\tQQ号:%u\n",
		        	p2->name ,p2->sex ,p2->h_class ,p2->study_namber ,p2->qq_namber );
			p2 = p2->next;
		}
	}
	
	if(p2==NULL)
	{
		flag=1;
	}
	
	return flag;
}
STUDENT *order_student(STUDENT *head,int *student_list_length)
{
	//冒泡排序 
	STUDENT *temp,*p1,*p2,*p3;
	int i,j;
	
	if(head==NULL)
	{
		printf("已经有序了,没必要排了!"); 
	}
	else
	{
		for(i=0;i<*student_list_length-1;i++)
		{
			p3 = head;
 			p2 = p3->next ;
			p1 = p2->next ;
			//初始化 
			for(j=0;j<*student_list_length-i-1;j++)
			{
				if(p2->study_namber >p1->study_namber )
				{
					//大的往下沉 
					p3->next  = p1;
				    p2->next = p1->next ;
				    p1->next = p2;
				    
				}
				
				temp=p2;
				p2=p1;
				p1=temp; 
				
				p3=p3->next ;
				p2=p2->next ;
				p1=p1->next ;
				
			}
			p2 = head->next ;
			p1 = p2->next ; 
		} 	
	}
	
	return head;
}
STUDENT *delete_student_table(STUDENT *head)
{
	//传来的是一张有空头的表 
	STUDENT *p1,*p2;
		
	p1 = head;
	p2 = p1->next ;
	
	while(p1!= NULL)
	{
		free(p1);
		p1=p2;
		p2=p2->next;	
	 } 
	 if(p1==NULL)
	 {
	 	printf("学生表清除干净!\n"); 
	 }
	 else
	 {
	 	printf("清零失败!\n");
	 }
	 return head;
}
STUDENT *insert_student_order(STUDENT *head)
{
	
	//后来的数据插入我的有序表中
	STUDENT *p1=NULL,*p2=NULL;
	int i;
	do
	{
		p1 = (STUDENT *)calloc(1,sizeof(STUDENT));
		
	}while(p1==NULL);
	p1->next = NULL;
	printf("姓名/性别/班级/学号/QQ号\n"); 
	scanf("%s%s%s%d%u",p1->name,p1->sex,p1->h_class,&p1->study_namber ,&p1->qq_namber );
				//输入带插入学生的数据 
	p2=head;
	while(1)
	{
		if(p2->next->study_namber<p1->study_namber)
		{
			p2=p2->next;	
		}
		else
		{
			break;
		}
		
	}
	p1->next = p2->next;
	p2->next = p1;
	
	return head;	 
}
int list_length(STUDENT *head)
{
	int length = 0;
	STUDENT* p1 = NULL;
	
	p1=head;
	
	while( p1 != NULL)
	{
		length++;
		p1=p1->next ;
	}
	return length;
}
int search_in_studentlist(STUDENT *head)
{
		STUDENT *p2;
		p2=head;
		int flag=0,menber,n;
		 printf("请输入带查找的人数:");
		 scanf("%d",&n);
		 while(n)
		 {
		 	printf("\n请输入查找的学号:");
		 	scanf("%d",&menber);
		 	flag=0;
		 	p2=head;
		 	
			while(p2!=NULL)
			{
				if(p2->study_namber == menber)
				{
					printf("姓名:%s\t性别:%s\t班级:%s\t学号:%d\tQQ号:%u\n",
			        	p2->name ,p2->sex ,p2->h_class ,p2->study_namber ,p2->qq_namber );
					flag=1;
				}
				p2 = p2->next;	
			}
			if(flag==0)
			{
					printf("查无此人!");
			}
			n--;
		}
		return 0;
}		

猜你喜欢

转载自blog.csdn.net/qq_42580577/article/details/88087651