嵌入式培训经验分享——数据结构小项目(动态学生信息存储)

学习数据结构之后,我们可以将这些综合起来,利用C语言和数据结构,可以完成一个简单的学生信息的管理系统,动态申请存储,可以对学生信息进行排序,查找,删除等操作,下面是我简单完成的学生信息管理系统,大体功能实现了,细化的没时间弄,大家可以相互借鉴一下,勿喷!!!

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

float average=0;
int count=0;

struct student
{
	char name[10];
	int id;
	char sex;
	int class;
	float score;
	struct student * next;
};

typedef struct student student_info;

student_info stuHead;

//打印所有学生的信息
void pr_All(student_info *pt)
{
	student_info *pt1=pt->next;
	while(pt1)
	{
		printf("姓名:%s 学号:%d 性别:%c 成绩:%f 班级:%d\n",pt1->name,pt1->id,
																			pt1->sex,pt1->score,pt1->class);
		pt1=pt1->next;
	}
}


//录入学生信息
void add_stu(student_info *pSTU)
{		
	student_info *pt;
	student_info *pHead=pSTU;
	while(1){
		pt=malloc(sizeof(student_info));
		memset(pt,0,sizeof(student_info));

		printf("请输入学生信息:(姓名 学号 性别 成绩 班级\n");
		scanf("%s %d %c %f %d",pt->name,&pt->id,&pt->sex,&pt->score,&pt->class);
		//printf("姓名:%s 学号:%d 性别:%c 成绩:%f 班级:%d\n",pt->name,pt->id,
		//																				pt->sex,pt->score,pt->class);
		if(strcmp(pt->name,"#")==0)
		{
			free(pt);
			break;
		}
		count++;
		pHead->next=pt;
		pHead=pHead->next;
	}

	return ;
}

//删除学生信息
int del_stu(student_info *pSTU)
{
	char num[10];
	student_info* pre=pSTU;
	student_info* p=pSTU->next;
	printf("请输入学生的姓名:");
	scanf("%s",num);

	while(p)
	{
		pre=pre->next;
		p=p->next;
		if(strcmp(p->name,num))
		{
			//printf("找打了");
			pre->next=p->next;
			free(p);
			return 1;
		}
	}
	return 0;
}

//查询学生信息
int look_info(student_info *pSTU)
{
	char num[10];
	int i;
	printf("请输入学生的姓名:");
	scanf("%s",num);
	while(pSTU)
	{
		if(strcmp(pSTU->name,num)==0)
		{
			printf("姓名:%s 学号:%d 性别:%c 成绩:%f 班级:%d\n",pSTU[i].name,pSTU[i							].id,pSTU[i].sex,pSTU[i].score,pSTU[i].class);
			return 1;
		}
		pSTU=pSTU->next;
	}
	return 0;
}

//查询学生平均成绩
void aver_sc(student_info *pSTU)
{
	int i;
	while(pSTU){
			average+=pSTU->score;
			pSTU=pSTU->next;
	}
	average=average/(float)(count);
	printf("平均成绩:%f\n",average);
	return ;
}

//更改学生信息
int chang_stuinfo(student_info *pSTU)
{
	char num[10];
	int a;
	printf("请输入学生的姓名:");
	scanf("%s",num);
	while(pSTU)
	{
		if(strcmp(pSTU->name,num)==0)
		{

				printf("请选择要更改的内容:\n1、姓名\n2、学号\n3、性别\n4、成绩\n5、班级\n");
				scanf("%d",&a);
				switch(a)
				{
					case 1: //更改姓名
									printf("请输入更改后的内容:\n");
									scanf("%s",pSTU->name);
									break;
					case 2: //更改学号
									printf("请输入更改后的内容:\n");
									scanf("%d",&pSTU->id);
									break;
					case 3: //更改性别					
									printf("请输入更改后的内容:\n");
									scanf("%c",&pSTU->sex);
									break;
					case 4: //更改成绩
									printf("请输入更改后的内容:\n");
									scanf("%f",&pSTU->score);
									break;
					case 5:	//更改班级
									printf("请输入更改后的内容:\n");
									scanf("%d",&pSTU->class);
									break;
		}
			//printf("姓名:%s 学号:%d 性别:%c 成绩:%f 班级:%d\n",pSTU->name,pSTU->				id,pSTU->sex,pSTU->score,pSTU->class);
			return 1;
		}
		pSTU=pSTU->next;
	}
	
	return 0;
}
//插入学生信息
int	inset_Stu(student_info *phead,char *name,student_info *insertname)
{
	student_info *p = phead->next;
	while(p){
		if( strcmp(p->name, name) == 0){
			break;
		}
		p=p->next;
	}
	// p is somebody
	if(p==NULL){
		printf("sorry,no found name=%s\n",name);
		return 0;	
	}
	//insert 
	insertname->next=p->next;
	p->next=insertname;
	return 1;
}

int main(int val, char *argv[])
{
	int a;
	student_info *pt1;
	student_info *p=NULL;
	while(1)
	{
		printf("1、录入学生信息\n2、删除学生信息\n3、学生信息查询\n4、查看平均成绩\n5、修改学生信息\n6、查看全部学生信息\n7、插入学生信息\n8、退出\n请输入要操作指令:");
		scanf("%d",&a);
		switch(a)
		{
			case 1: //添加学生数据
							add_stu(&stuHead);
							//pr_All(&stuHead);							
							break;
			case 2: //删除学生数据
							if(del_stu(&stuHead)){
									printf("删除成功\n");
							}else{
									printf("没有查询到相关的信息!!!\n");
							}
							break;
			case 3: //查询学生信息
							if(!look_info(&stuHead)){
									printf("没有查询到相关的信息!!!\n");
							}
							break;
			case 4: //查看平均成绩
							aver_sc(&stuHead);
							break;
			case 5:	//更改学生信息
							if(chang_stuinfo(&stuHead)) printf("修改成功\n");
							else  printf("未查询到此人\n");
							break;
			case 6: //打印所有学生的信息
							pr_All(&stuHead);
							break;
			case 7://插入学生信息					
							pt1=malloc(sizeof(student_info));
							memset(pt1,0,sizeof(student_info));
							printf("请输入学生信息:(姓名 学号 性别 成绩 班级\n");
							scanf("%s %d %c %f %d",pt1->name,&pt1->id,&pt1->sex,&pt1->score,&pt1->class);

							if(inset_Stu(&stuHead,"li",pt1)) printf("插入成功\n");
							else printf("未查询到此人\n");
							break;
			case 8://退出
							return 0;
		}

	}
	return 0;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值