{/*
这是一个学生信息管理系统的线性表
有名字:性别:学号:班级: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;
}
学生信息管理系统(C语言)
猜你喜欢
转载自blog.csdn.net/qq_42580577/article/details/88087651
今日推荐
周排行