c语言利用结构体,线性表实现简易学生管理系统

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 32

typedef struct student
{
	char name[20];
	int id;
	float score;
	int age;
}data_t;

typedef struct seqlist
{
	data_t data[MAX];
	int n ;
}seq_t;


int insert_student();
int output_student();
int show_menu(); 
int delete_student();
int update_student();
int sort_student();


seq_t*  creat_seqlist(   )
{       
	seq_t *seqlist = (seq_t*)malloc(sizeof(seq_t));
	if( seqlist == NULL)
	{
		printf("malloc error!!");
		return ;
	}
	memset(seqlist , 0 , sizeof(seq_t));
	return seqlist;

}


int insert_student(seq_t* L )
{
	int i = 0 ,pos = 0 ;
	data_t e;
	if( L -> n == MAX )
	{
		printf("seqlist is full!!");
		show_menu();
		return -1;
	}
	printf("请输入你想要插入学生的位置:\n");
	scanf("%d",&pos);
	if( pos < 0 || pos > L -> n)
	{
		printf("pos is error!!");
		show_menu();
		return -1;
	}
	printf("请输入你想要插入的学生姓名,学号,分数,年龄:\n");
	scanf("%s %d %f %d", e.name ,&e.id ,  &e.score , &e.age);
	for( i = L -> n ; i >= pos ; i--)
	{
		L -> data[i+1] =  L -> data[i];
	}
	L -> data[pos] = e;
	(L -> n)++;
	printf("插入成功\n");
	show_menu();
}

int output_student(seq_t* L)
{   
	int j = 0;
	printf("\n\n");
	printf("学生列表-------------------------------------------------------------------------------\n\n");
	printf("姓名\t\t\t学号\t\t\t分数\t\t\t年龄\t\t\t\n");
	for( j = 0 ; j < (L -> n) ; j++)
	{
		printf("---------------------------------------------------------------------------------------\n");
		printf("%s\t\t\t%d\t\t\t%.1f\t\t\t%d\t\t\t\n",L -> data[j].name , L -> data[j].id , L -> data[j].score , L -> data[j].age);
		printf("---------------------------------------------------------------------------------------\n");
	}
	printf("\n");
	show_menu();


} 

int delete_student(seq_t* L)
{ 
	int a = 0 ,j = 0 , m = 0 ;
	int i = 0;
	printf("请输入你想要删除的学生的学号:");
	scanf("%d",&a);
	if( L -> n == 0)
	{
		printf("没有学生信息,请添加:\n");
		show_menu();
		return -1;
	}
	for( j = 0 ; j < L ->  n ; j++)
	{
		if( a == L -> data[j].id )
		{       
			m = 1;
			for(i = j + 1 ; i < L -> n ;i++ )
			{
				L -> data[ j  ] = L -> data[ j + 1 ] ;
			}
			(L -> n)--;
			printf("删除成功!!\n");
			show_menu();
		}
		if ( m = 0)
		{
			printf("没有这个学号的信息\n");
		}
		return ;
	}
}

int update_student( seq_t* L)
{  
	int a = 0 , j = 0 , m = 0;
	printf("请输入你要修改的学生的学号:\n");
	scanf("%d",&a);
	for( j = 0 ; j < L -> n  ;j++)
	{
		if( a ==  L -> data[j].id)
		{   
			m = 1;
			printf("输入你修改后的姓名,学号,成绩 , 年龄:\n");
			scanf("%s %d %f %d", L -> data[j].name ,&L -> data[j].id , &L -> data[j].score ,&L->data[j].age);
			printf("修改成功\n");
			show_menu();

		}

		if(  m == 0 )
		{
			printf("输入学号错误!!\n");
		}
	}
	return ; 

}

int sort_student(seq_t *L)
{
	int i = 0 , j = 0;
	data_t temp ;
	if( L -> n == 0)
	{
		printf("没有学生信息,请添加:\n");
		show_menu();
		return;
	}
	for( i = 0 ; i < (L -> n) - 1 ; i++ )
	{
		for( j = 0 ; j < (L -> n) -i - 1 ; j++ )
		{
			if( L -> data[j].id <  L -> data[j + 1].id )
			{
				temp = L -> data[j];
				L -> data[j] = L -> data[j + 1];
				L -> data[j + 1] = temp;
			}
		}
	}
	printf("排序完成!!\n");
	show_menu();
	return ;
}



int show_menu(seq_t *L)
{       
	int a = 0;
	printf("\n\n");
	printf("--------------学  生  管  理  系  统-----------------\n");
	printf("-----------------------------------------------------\n");
	printf("-----------------------------------------------------\n");
	printf("---------- < 1 >  插  入  学  生  信  息 ------------\n\n");
	printf("---------- < 2 >  删  除  学  生  信  息 ------------\n\n");
	printf("---------- < 3 >  修  改  学  生  信  息 ------------\n\n");
	printf("---------- < 4 >  查  询  学  生  信  息 ------------\n\n");
	printf("---------- < 5 >  从  大  到  小  排  序 ------------\n\n");
	printf("---------- < 6 >  退  出  管  理  系  统 ------------\n\n");
	printf("-----------------------------------------------------\n");
	printf("-----------------------------------------------------\n");
	printf("---------------------------------------制作人:lpx---\n");
}


int main(int argc ,char *argv[])
{       
	int chose;
	seq_t* L =  creat_seqlist();
	show_menu(L);  
	while(1)
	{
		scanf("%d",&chose);
		switch (chose)
		{
			case 1 : insert_student(L);break;
			case 2 : delete_student(L);break;
			case 3 : update_student(L);break;
			case 4 : output_student(L);break;
			case 5 : sort_student(L)  ;break;
			case 6 : return 0;
			default : printf("输入错误 ,请重新输入:\n"); 

		}

	}
	return 0;
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值