学生管理系统(顺序表)

student.h

#ifndef _STUDENT_H_
#define _STUDENT_H_
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define max 10
 
 
 
typedef struct
{
	char name[20];
	char sex;
	int age;
	double score;
}stu;
 
typedef stu datatype;
 
typedef struct
{
	datatype data[max];
	int len;
}Class,*Classptr;
 
//申请空间
Classptr creat();
 
//添加学员信息
int Class_add(Classptr C);
 
//判空
int Class_empty(Classptr C);
 
//遍历
int Class_show(Classptr C);
 
//任意位置插入学员信息
int Class_pos_add(Classptr C);
 
//任意位置删除学员信息
int Class_pos_delete(Classptr C);
 
//任意位置修改学员信息
int Class_pos_mod(Classptr C);
 
//按名字查找
int Class_name_find(Classptr C);
 
//排序
void Class_sort(Classptr C);
 
//释放空间
void Class_free(Classptr C);
 
 
 
 
#endif

 student.c

#include "student.h"
 
//申请空间
Classptr creat()
{
	Classptr C=(Classptr)malloc(sizeof(Class));
	if(NULL == C)
	{
		printf("申请失败\n");
		return NULL;
	}
	C->len=0;
	printf("申请成功\n");
	return C;
}
 
//添加学员信息
int Class_add(Classptr C)
{
	if(NULL == C)
	{
		printf("添加失败");
		return 0;
	}
	printf("姓名\t性别\t年龄\t成绩\n");
	scanf("%s %c %d %lf",\
			C->data[C->len].name,\
			&C->data[C->len].sex,\
			&C->data[C->len].age,\
			&C->data[C->len].score);
	C->len++;
	printf("添加成功\n");
	return 1;
}
 
//判空
int Class_empty(Classptr C)
{
	if(NULL == C)
	{
		printf("顺序表不合法\n");
		return 0;
	}
	return C->len==0;
}
 
//遍历
int Class_show(Classptr C)
{
	if(NULL==C || Class_empty(C) )
	{
		printf("遍历失败\n");
		return 0;
	}
	printf("姓名\t性别\t年龄\t分数\n");
	for(int i=0;i<C->len;i++)
	{
		printf("%s\t%c\t%d\t%.2lf\n",\
				C->data[i].name,\
				C->data[i].sex,\
				C->data[i].age,\
				C->data[i].score);
	}
	return 1;
}
 
//任意位置插入学员信息
int Class_pos_add(Classptr C)
{
	int a;
	printf("请输入插入的位置");
	scanf("%d",&a);
	if(NULL == C || Class_empty(C) || a<1 || a>C->len)
	{
		printf("插入失败\n");
		return 0;
	}
	for(int i=C->len;i>=a-1;i--)
	{
		C->data[i+1]=C->data[i];
	}
	printf("姓名\t性别\t年龄\t成绩\n");
	scanf("%s %c %d %lf",\
			C->data[a-1].name,\
			&C->data[a-1].sex,\
			&C->data[a-1].age,\
			&C->data[a-1].score);
	C->len++;
	printf("添加成功\n");
	return 1;
}
 
//任意位置删除学员信息
int Class_pos_delete(Classptr C)
{
	int a;
	printf("请输入删除的位置");
	scanf("%d",&a);
	if(NULL == C || Class_empty(C) || a<=0 ||a>C->len)
	{
		printf("删除错误\n");
		return 0;
	}
 
			for(int i=a-1;i<C->len;i++)
			{
			C->data[i]=C->data[i+1];
			}
		C->len--;
		printf("删除成功\n");
		return 1;
}
 
//任意位置修改学员信息
int Class_pos_mod(Classptr C)
{
	int a;
	printf("请输入修改的位置");
	scanf("%d",&a);
	if(NULL == C || Class_empty(C) || a<=0 ||a>=C->len)
	{
		printf("修改错误\n");
		return 0;
	}
	printf("姓名\t性别\t年龄\t成绩\n");
	scanf("%s %c %d %lf",\
			C->data[a-1].name,\
			&C->data[a-1].sex,\
			&C->data[a-1].age,\
			&C->data[a-1].score);
	printf("修改成功\n");
	return 1;
	
}
 
//按名字查找
int Class_name_find(Classptr C)
{
	char a[20];
	printf("请输入查找的名字:");
	scanf("%s",a);
	if(NULL == C || Class_empty(C))
	{
		printf("查找失败\n");
		return 0;
	}
	for(int i=0;i<C->len;i++)
	{
		if(strcmp(C->data[i].name,a)==0)
		{
			printf("查找成功\n");
			printf("姓名\t性别\t年龄\t成绩\n");		
			printf("%s\t%c\t%d\t%.2lf\n",\
				C->data[i].name,\
				C->data[i].sex,\
				C->data[i].age,\
				C->data[i].score);
		}
	}
	return 1;
}
 
//排序
void Class_sort(Classptr C)
{
	if(NULL == C || Class_empty(C))
	{
		printf("排序不成功\n");
		return;
	}
	int fleg;
	printf("输入0或1来控制升序或降序:");
	scanf("%d",&fleg);
	for(int i=1;i<C->len;i++)
	{
		for(int j=0;j<C->len-i;j++)
		{
			if(fleg == 1)
			{
				if(C->data[j].score<C->data[j+1].score)
				{
					datatype temp;
					temp=C->data[j];
					C->data[j]=C->data[j+1];
					C->data[j+1]=temp;
				}
			}	
			if(fleg == 0 )
			{
				if(C->data[j].score>C->data[j+1].score)
				{
					datatype temp;
					temp=C->data[j];
					C->data[j]=C->data[j+1];
					C->data[j+1]=temp;
				}
			}
 
		}
	}
}
 
//释放空间
void Class_free(Classptr C)
{
	if(NULL != C)
	{
		free(C);
		C=NULL;
	}
}

main.c

#include "student.h"
 
int main(int argc, const char *argv[])
{
	//调用申请空间函数
	Classptr C=creat();
	if(NULL == C)
	{
		printf("空间不合法\n");
		return -1;
	}
	while(1)
	{
		char ret;
		printf("a|A:添加学员信息\n");
		printf("b|B:遍历\n");
		printf("c|C:任意位置插入学员信息\n");
		printf("d|D:任意位置删除学员信息\n");
		printf("e|E:任意位置修改学员信息\n");
		printf("f|F:按名字查找\n");
		printf("g|G:排序\n");
		printf("q|Q:释放空间并退出\n");
		printf("请输入执行选项:");
		scanf(" %c",&ret);
		switch(ret)
		{
			case 'a'|'A':
			//调用添加函数
			Class_add(C);
			break;
 
			case 'b'|'B':
			//调用遍历函数
			Class_show(C);
			break;
 
			case 'c'|'C':
			//任意位置插入学员信息
			Class_pos_add(C);
			break;
 
			case 'd'|'D':
			//按位置删除学员信息
			Class_pos_delete(C);
			break;
 
			case 'e'|'E':
			//按任意位置修改学员信息
			Class_pos_mod(C);
			break;
 
			case 'f'|'F':
			//按名字查找
			Class_name_find(C);
			break;
 
			case 'g'|'G':
			//排序
			Class_sort(C);
			break;
 
			case 'q'|'Q':
			//添加释放函数
			Class_free(C);
			C=NULL;
			goto NEXT;
		}
	}
NEXT:
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值