数据结构 0814~0818作业

作业

1、顺序表实现学生管理系统(参照顺序表技能)写出菜单界面switch选择,功能1创建顺序表(堆区),2录入学生信息,3插入一个学生信息,4删除一个学生信息,5按照位置修改一个学生信息,6、按照姓名顺序查找一个学生是否存在7、对学生年龄直接插入排序(从小到大)。

2、单链表实现学生管理系统(参照顺序表技能)写出菜单界面switch选择,功能1创建单链表,2录入学生信息,3删除一个学生信息,4按照成绩修改一个学生的年龄,5、按照姓名顺序查找一个学生是否存在。

要求:

1、学生信息结构体姓名,分数,年龄,电话。

2、其他功能函数自定义,分文件编译。

顺序表实现学生管理系统

mymain.c

#include <myhead.h>
#include "fun.h"

int main(int argc, const char *argv[])
{
	qstu L=stu_insert();
	int a;
	while(a!=0)
	{
		printf1();
		printf("请输入>>>>");
		scanf("%d",&a);
		switch(a)
		{
			case 1:input_stu(L);
			       output_stu(L);
				   break;
			case 2:insert_stu(L);
			       output_stu(L);
				   break;
			case 3:dele_stu(L);
			       output_stu(L);
				   break;
			case 4:pos_change_stu(L);
			       output_stu(L);
				   break;
			case 5:name_find_stu(L);
				   break;
			case 6:age_paixu_stu(L);
			       output_stu(L);
				   break;
            		case 0: exit(0);         //退出程序
            		default:printf("您输入的功能有误,请重新输入\n");	
		}
	}
	return 0;
}

fun.c

#include "fun.h"
void printf1()
{
	printf("1、录入学生信息\n");
	printf("2、插入一个学生信息\n");
	printf("3、删除一个学生信息\n");
	printf("4、按位置修改一个学生信息\n");
	printf("5、按名字查找一个学生是否存在\n");
	printf("6、对学生年龄进行排序(小到大)\n");
	printf("0、退出\n");
}
qstu stu_insert()//申请空间
{
	qstu q=malloc(sizeof(stu));
	if(q==NULL)
	{
	printf("创建顺序表失败\n");
	return NULL;
	}
	q->len=0;
	memset(q->data,0,sizeof(q->data));//置0
	return q;
}
int input_stu(qstu L)
{
	int i,a,n;
	printf("请输入学生人数:");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		printf("请输入第%d个学生信息: \n",i+1);
		printf("姓名:");
		scanf("%s",L->data[i].name);
		printf("分数:");
		scanf("%d",&L->data[i].score);
		printf("年龄:");
		scanf("%d",&L->data[i].age);
		printf("电话:");
		scanf("%s",L->data[i].phone);
		L->len++;
	}
	return 0; 
}
int output_stu(qstu L)
{
	printf("学生信息如下:\n");
	int i;
	printf("姓名\t成绩\t年龄\t电话\n");
	for(i=0;i<L->len;i++)
	{
		printf("%s\t%d\t%d\t%s\t",
		L->data[i].name,L->data[i].score,
		L->data[i].age,L->data[i].phone);
		putchar(10);
	}
	return 0;
}
int insert_stu(qstu L)
{
	int e,i;
	L->len++;
	printf("请输入要插入的位置>>\n");
	scanf("%d",&e);
	if(L==NULL || e<1||e>L->len)
	{
		printf("插入失败\n");
		return -1;
	}
	for(i=L->len;i>=e;i--)
	{
		L->data[i]=L->data[i-1];
	}
	printf("姓名:");
	scanf("%s",L->data[i].name);
	printf("分数:");
	scanf("%d",&L->data[i].score);
	printf("年龄:");
	scanf("%d",&L->data[i].age);
	printf("电话:");
	scanf("%s",L->data[i].phone);
	printf("插入成功\n");
	return 0;
}
int dele_stu(qstu L)
{
	int a,i;
	printf("请输入要删除的学生位置\n");
	scanf("%d",&a);
	if(0<=a&&a<=L->len)
	{
		for(i=a-1;i<L->len;i++)
		{
			L->data[i]=L->data[i+1];
		}
		L->len--;
		printf("删除成功\n");
	}
	else
	{
		printf("位置输入错误\n");
	}
	return 0;
}
int pos_change_stu(qstu L)
{
	int i,pos;
	printf("请输入要修改学生信息的位置\n");
	scanf("%d",&pos);
	if(pos>0&&pos<L->len)
	{
				printf("请输入该学生要修改的信息:\n");
				printf("姓名:");
				scanf("%s",L->data[pos-1].name);
				printf("分数:");
				scanf("%d",&L->data[pos-1].score);
				printf("年龄:");
				scanf("%d",&L->data[pos-1].age);
				printf("电话:");
				scanf("%s",L->data[pos-1].phone);
				printf("修改成功\n");
				break;
	}
	else
	{
		printf("位置错误\n");
	}
	return 0;
}
int name_find_stu(qstu L)
{
	printf("请输入要查找学生的名字\n");
	char name[20];
	scanf("%s",name);
	int i;
	int sub=-1;
	for(i=0;i<L->len;i++)
	{
		if(strcmp(L->data[i].name,name)==0)
		{
			sub=i;
		}
	}
	if(sub==-1)
	{
		printf("不存在该姓名的学生\n");
	}
	else
	{
		printf("查找成功\n 该学生在%d位置\n",sub+1);
	}
}
int age_paixu_stu(qstu L)
{
	int i,j,min;
	student t;
	
	for(i=0;i<L->len-1;i++)
	{
		min=i;
			for(j=i+1;j<L->len;j++)
		{
			if(L->data[j].age <L->data[min].age)
			{
				min=j;		
			}
		}
			if(i!=min)	
		{
			t=L->data[min];
			L->data[min]=L->data[i];
			L->data[i]=t;
		}
		
	}
	return 0;
}

fun.h

#ifndef _FUN_H_
#define _FUN_H_

#include <myhead.h>
#define N 100

typedef struct
{
	char name[20];
	int score;
	int age;
	char phone[20];
}student;
typedef struct
{
	student data[N];
	int len;
}stu,*qstu;

void printf1();
qstu stu_insert();
int input_stu(qstu L);
int output_stu(qstu L);
int insert_stu(qstu L);
int dele_stu(qstu L);
int pos_change_stu(qstu L);
int name_find_stu(qstu L);
int age_paixu_stu(qstu L);
 
 
#endif

运行结果:

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值