数据结构之结构体数组和函数完成简易学生管理系统的增删改查功能

思维导图

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student               
{                            
	char name[128];//姓名    
	char sex[10];//性别      
	int age;//年龄           
	int id;//学号            
};
int student_num=0;//定义一个全局变量来接收输入进去的学生个数
void show_student(struct student *p,int n);
void add_student(struct student *p,int n);
void del_student(struct student *p);
void mod_student(struct student *p);
void seek_student(struct student *p);
int main(int argc, const char *argv[])
{   
	struct student stu[100];
	int choice,n;
	while(1)
	{
		printf("----------学生信息管理系统----------\n");
		printf("(1)输入学生信息并打印所有的学生信息\n");
		printf("(2)根据学号删除学生信息并打印所有的学生信息\n");
		printf("(3)根据学号修改学生信息并打印所有的学生信息\n");
		printf("(4)根据学号查找学生信息并打印该学生的信息\n");
		printf("(0)退出程序\n");
		printf("请输入你的选择:");
		scanf("%d",&choice);
		switch(choice)
		{
		case 1:
			printf("please enter student number:");
			scanf("%d",&n);
			add_student(stu,n);
			show_student(stu,n);
			break;
		case 2:
			del_student(stu);
			show_student(stu,n);
			break;
		case 3:
			mod_student(stu);
			show_student(stu,n);
			break;
		case 4:
			seek_student(stu);
			break;
		case 0:
			printf("程序退出\n");
			exit(0);
			break;
		default:
			printf("您输入的选项有误!\n");
		}
	}                    
	return 0;
}
void show_student(struct student *p,int n)
{
	if(student_num == 0)
	{
		printf("当前没有学生信息\n");
		return;
	}
	putchar(10);
	for(int i=0;i<student_num;i++)
	{
		printf("姓名:%s  性别:%s  年龄:%d  学号:%d\n",(p+i)->name,(p+i)->sex,(p+i)->age,(p+i)->id);
		putchar(10);
	}
	putchar(10);
}
void add_student(struct student *p,int n)
{
	for(int i=student_num;i<(student_num+n);i++)
	{
		printf("请输入要添加的学生姓名:");
		scanf("%s",(p+i)->name);
		getchar();
		printf("请输入要添加的学生性别:");
		scanf("%s",(p+i)->sex);
		printf("请输入要添加的学生年龄:");
		scanf("%d",&(p+i)->age);
		printf("请输入要添加的学生学号:");
		scanf("%d",&(p+i)->id);
		printf("添加成功\n");
	}
	student_num+=n;
	putchar(10);
	if(student_num == 100)
	{
		printf("添加学生数量已达最大值,无法添加\n");
		return;
	}
}
void del_student(struct student *p)
{
	int del_id,index=-1;
	printf("请输入要删除学生信息的学号:");
	scanf("%d",&del_id);
	int i,j;
	for(i=0;i<student_num;i++)
	{
		if(del_id == (p+i)->id)
		{
			index=i;
			break;
		}
	}
	if(index == -1)
	{
		printf("没有该学号的学生信息!\n");
	}
	else
	{
		for(j=index;j<student_num-1;j++)
		{
			strcpy((p+j)->name,(p+j+1)->name);
			strcpy((p+j)->sex,(p+j+1)->sex);
			(p+j)->age=(p+j+1)->age;
			(p+j)->id=(p+j+1)->id;
		}
		student_num--;
		printf("删除成功!\n");
	}
	putchar(10);
}
void mod_student(struct student *p)
{
	int mod_id,index=-1;
	printf("请输入要修改学生信息的学号:");
	scanf("%d",&mod_id);
	int i;
	for(i=0;i<student_num;i++)
	{
		if(mod_id == (p+i)->id)
		{
			index=i;
			break;
		}
	}
	if(index == -1)
	{
		printf("没有该学号的学生信息!\n");
	}
	else
	{
		printf("请输入修改后的学生姓名:");
		scanf("%s",(p+index)->name);
		printf("请输入修改后的学生性别:");
		scanf("%s",(p+index)->sex);
		printf("请输入修改后的学生年龄:");
		scanf("%d",&(p+index)->age);
		printf("请输入修改后的学生学号:");
		scanf("%d",&(p+index)->id);
		printf(" 学生信息修改成功!\n");
	}
}
void seek_student(struct student *p)
{
	int seek_id,index=-1;
	printf("请输入要查找学生信息的学号:");
	scanf("%d",&seek_id);
	putchar(10);
	int i;
	for(i=0;i<student_num;i++)                  
	{
		if(seek_id == (p+i)->id)
		{
			index=i;
			break;
		}
	}
	if(index == -1)
	{
		printf("没有该学号的学生信息!\n");
	}
	else
	{	
		printf("姓名:%s  性别:%s  年龄:%d  学号:%d\n",(p+index)->name,(p+index)->sex,(p+index)->age,(p+index)->id);
	}
	putchar(10);

}

运行界面显示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值