学生管理系统

有10个学生,每个学生的数据包括学号、姓名、性别和1门课成绩,编写如下函数:
①根据学生的信息建立链表;
②输出链表;
③输入一个学生的学号,查找链表中是否有该学生;
④在第i个学生前插入一个学生信息;

⑤删除链表中第i个学生。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student{
	int num;
	char name[20];
	char sex;
	int score;
	struct student *next;
}Student;

Student *build(Student *head)
{
	Student *cur,*temp;
	int i,n;
	printf("输入几个学生信息:");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		temp=(Student *)malloc(sizeof(Student));
		if(temp)
		{
			printf("请输入学号:");
			scanf("%d",&temp->num);
			printf("请输入姓名:");
			getchar();
			gets(temp->name);
			printf("请输入性别:");
			//getchar();
			scanf("%c",&temp->sex);
			printf("请输入成绩:");
			scanf("%d",&temp->score);
			temp->next=NULL;
			if(i==0)
			head=cur=temp;
			else
			{
				cur->next=temp;
				cur=cur->next;
			}
		}		
	}
	return head;
}

void show(Student *head)
{
	Student *cur;
	cur=head;
	while(cur!=NULL)
	{
		printf("%5d\t",cur->num);
		printf("%10s\t",cur->name);
		printf("%5c\t",cur->sex);
		printf("%5d\n",cur->score);
		cur=cur->next;
	}
}

void seeknum(Student *head)
{
	Student *cur;
	cur=head;
	int num;
	printf("请输入要查找的学号:");
	scanf("%d",&num);
	while(cur!=NULL)
	{
		if(cur->num==num)
			break;
		cur=cur->next;
	}
	if(cur!=NULL)
		{
		printf("%5d\t",cur->num);
		printf("%10s\t",cur->name);
		printf("%5c\t",cur->sex);
		printf("%5d\n",cur->score);
		}
	else
		printf("未查到该同学信息.\n");
	
}

void seekname(Student *head)
{
	char name[20];
	Student *cur;
	cur=head;
	printf("请输入要查找的学生姓名:");
	scanf("%s",name);
	while(cur!=NULL)
	{
		if(strcmp(cur->name,name)==0)
			break;
		cur=cur->next;
	}
	if(cur!=NULL)
		{
	printf("%5d\t",cur->num);
		printf("%10s\t",cur->name);
		printf("%5c\t",cur->sex);
		printf("%5d\n",cur->score);
		}
	else
		printf("未查到该同学信息.\n");
}

void seek(Student *head)
{
	int n;
	while(1)
	{
		printf("================\n");
		printf("1. 按学号查找\n");
		printf("2. 按姓名查找\n");
		printf("3. 结束查找\n");
		scanf("%d",&n);
		switch(n)
		{
			case 1:{
				seeknum(head);
				break;
			}
			case 2:{
				seekname(head);
				break;
			}
			case 3:return;
		}
	}
}

void insert(Student *head)
{
	int i;
	int n;
	Student *cur,*temp;
	cur=head;
	printf("请输入插入到第几个同学前面:");
	scanf("%d",&n);
	temp=(Student *)malloc(sizeof(Student));
		if(temp)
		{
			printf("请输入学号:");
			scanf("%d",&temp->num);
			printf("请输入姓名:");
			getchar();
			gets(temp->name);
			printf("请输入性别:");
			//getchar();
			scanf("%c",&temp->sex);
			printf("请输入成绩:");
			scanf("%d",&temp->score);
			temp->next=NULL;
		}

	if(n==1)
	{
		temp->next=head;
		head=temp;
	}
	else
	{
		for(i=0;i<n-2;i++)
			cur=cur->next;
		temp->next=cur->next;
		cur->next=temp;
	}
	
}

void del(Student *head)
{
	Student *cur,*temp;
	int i;
	int n;
	cur=head;
	printf("请输入要删除第几个学生:");
	scanf("%d",&n);
	for(i=0;i<n-2;i++)
		cur=cur->next;
		if(n==0)
		{
			temp=head;
			head=head->next;
		}
	else
	{
		temp=cur->next;
		cur->next=temp->next;
	}
	free(temp);
}

int main()
{
	int n;
	Student *head=NULL;
	while(1)
	{
		printf("\t===================\n");
		printf("\t1. 建立链表\n");
		printf("\t2. 显示\n");
		printf("\t3. 查找\n");
		printf("\t4. 插入\n");
		printf("\t5. 删除\n");
		printf("\t6. 退出\n");
		scanf("%d",&n);
		switch(n)
		{
			case 1:head=build(head);break;
			case 2:show(head);break;
			case 3:seek(head);break;
			case 4:insert(head);break;
			case 5:del(head);break;
			case 6:return 0;
		}
	}
	return 0;
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值