用单链表实现学生信息管理系统

用单链表实现学生信息管理系统

问题描述

定义一个包含学生信息(学号,姓名,成绩)的的顺序表,使其具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息;
(2) 逐个显示学生表中所有学生的相关信息;
(3) 根据姓名进行查找,返回此学生的学号和成绩;
(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩);
(5) 给定一个学生信息,插入到表中指定的位置;
(6) 删除指定位置的学生记录;
(7) 统计表中学生个数。

话不多说,直接上代码!

#include "stdio.h"
#include "stdlib.h"  //malloc
#include "string.h"

//学生信息的定义:
typedef struct {
    char no[8];   //8位学号
    char name[20]; //姓名
    int score;     //成绩
}Student;


//链表结点的定义:
typedef struct LNode{
     Student   data;       //数据域
     struct LNode  *next;   //指针域
}LNode,*LinkList;   
//输入学生信息
void in(LNode *head)
{
	LinkList p,r;  //p指向新结点; r指向当前链表的尾结点
    int i,n;  //n表示学生的人数
    r=head;
    printf("请输入学生的人数:");
    scanf("%d",&n);
    printf("请输入学生的信息:\n");
    for(i=1;i<=n;i++)
    { 
        p=(LinkList)malloc(sizeof(LNode));
        p->next=NULL;
		printf("学号:");
		scanf("%s",p->data.no); 
		printf("姓名:");
		scanf("%s",p->data.name);
		printf("成绩:");
		scanf("%d",&p->data.score);
		r->next=p;
		r=r->next;
		printf("-----------------------------------------\n");
	}
	printf("********************************************************\n");
}



//输出学生信息
void out(LNode *head)
{
    LinkList p; 
	p=head;
	printf("请输出学生的信息:\n\n");
	printf("学号\t姓名\t成绩\n");
	while(p->next!=NULL)
	{
	  p=p->next;
	  printf("%s\t%s\t%d\n",p->data.no,p->data.name,p->data.score);
	}
}

void research_1(LNode *head,Student e)
{
	LinkList p;
	p=head;
	printf("请输入查找的姓名:\n");
	scanf("%s",e.name);
	while((p->next!=NULL)&&strcmp(e.name,p->data.name))
	{
		p=p->next;
	}
	printf("学号 %s\t 成绩  %d\n",p->data.no,p->data.score);
}


void research_2(LNode *head,int i)
{
	int k;
	LinkList p;
	printf("请输入你要查询的位置:");
	scanf("%d",&i);
	if(i<0)
	{
		printf("查找失败!\n"); 
	}
	p=head;k=0;
	while(p->next!=NULL&&k<i)
	{
		p=p->next;
		k=k+1;
	}
	if(i==k)
	printf("学号:%s\t 姓名: %s\t成绩: %d\n",p->data.no,p->data.name,p->data.score);
	else
	printf("查找失败!\n");
}


void insert(LNode *head,int i,Student e)
{
	int k;
	LinkList p,r;
	r=head;k=0;
	printf("请输入你要插入的位置:\n");
	scanf("%d",&i);
	printf("请输入插入学生的信息:\n");
	printf("学号:\n");
	scanf("%s",e.no);
	printf("姓名:\n");
	scanf("%s",e.name);
	printf("成绩:\n");
	scanf("%d",&e.score);
	while(r!=NULL&&k<i-1)
	{
		r=r->next;
		k=k+1;
	}
	if(r==NULL)
	{
		printf("插入失败!\n");
	}
	p=(LinkList)malloc(sizeof(LNode));
	p->data=e;
	p->next=r->next;
	r->next=p;
	printf("插入成功!\n");
}


void delete_1(LNode *head,int i,Student *e)
{
	LinkList p,r;
	int k;
	r=head;k=0;
	printf("请输入你要删除的位置:\n");
	scanf("%d",&i);
	while(r->next!=NULL&&k<i-1)
	{
		r=r->next;
		k++;
	}
	if(r==NULL)
	{
		printf("删除失败!\n"); 
	}
	p=r->next;
	r->next=p->next;
	*e=p->data;
	free(p);
	printf("删除成功!\n"); 
}


void number(LNode *head)
{
	int i;
	LinkList p;
	p=head->next;i=0;
	while(p!=NULL)
	{
		p=p->next;
		i++;
	}
	printf("学生总数为:%d\n",i);
	printf("\n");
}

void  exit_1()
{
	printf("退出成功!请按任意键结束!");
	exit(0);
}


int main()
{ 
    LNode *head;
	head=(LinkList)malloc(sizeof(LNode));
	head->next=NULL;
	int select=-1;
	int i;
	Student e;
	printf("********************************************************************\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("********************************************************************\n");
	printf("\n"); 
	while(select!=0)
	{
		printf("请选择你要操作的选项:");
		scanf("%d",&select);
		printf("\n");
		switch(select)
		{
			case 1: in(head); break; 
			case 2: out(head); break;
			case 3: research_1(head,e);break;
			case 4: research_2(head,i);break;
			case 5: insert(head,i,e);break;
			case 6: delete_1(head,i,&e);break;
			case 7: number(head);break;
			case 8: exit_1();break;
		}
	}
	return 0;
}

你可能感兴趣的:(C语言)