数据结构day4

简单学生管理系统

头文件

#ifndef _WORK_H_
#define _WORK_H_
#include 
#include 
#include 
#include 
#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

源文件

#include "work.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;ilen;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;ilen;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;ilen;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;ilen;i++)
	{
		for(int j=0;jlen-i;j++)
		{
			if(fleg == 1)
			{
				if(C->data[j].scoredata[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;
	}
}

主函数

#include "work.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;
}

思维导图

数据结构day4_第1张图片

 

你可能感兴趣的:(数据结构,算法)