我是靠谱客的博主 活泼宝马,最近开发中收集的这篇文章主要介绍数据结构大作-学生信息管理系统,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

思路

用到的知识点:顺序表,冒泡排序。
typedef struct	//顺序表,长度为MAXSIZE
{
	STU students[MAXSIZE];
	int length;
} S;
首先确定要实用的数据结构:用链表可以提高空间的利用率,但是写代码的时候需要考虑的就会多一点,而且出错了不好检查(第一次尝试的时候就被各种指针指向搞晕了)。所以就选择了实现起来比较方便的顺序表。

主要的几个函数:录入学生信息,按关键字查找学生,冒泡排序法以及没有技术含量的初始化函数。下面的代码中都有功能注释,不多哔哔了。
完整代码

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

#define MAXSIZE 40
/***************	结构体定义	**********************/
typedef struct
{
	char name[MAXSIZE];
	float score;
} STU;

typedef struct 
{
	STU students[MAXSIZE];
	int length;
} S;
/***************	函数定义		***********************/
void Init()                //初始化
{
	printf ("ttt***************************************************n");
	printf ("ttt***               学生信息管理系统              ***n");
	printf ("ttt***功能:                                       ***n");
	printf ("ttt***  1、重新录入学生信息                        ***n");
	printf ("ttt***  2、按从大到小的顺序对学生总成绩排序        ***n");
	printf ("ttt***  3、查看各分段人数                          ***n");
	printf ("ttt***  4、按姓名查找学生                          ***n");
	printf ("ttt***  其他、退出程序                             ***n");
	printf ("ttt***************************************************n");
	printf ("ttt请按照功能前的序列号选择要实现的功能:t");
}


void input ( S *L, int num)			//重新输入学生所有信息
{
	int i;
	for ( i = 0; i < num; i++)
	{
		printf ("请输入第%d个学生的姓名:nt",i+1);
		scanf ("%s",L->students[i].name);
		printf ("请输入第%d个学生的成绩:nt",i+1);
		scanf ("%f",&L->students[i].score);
	}
	L->length = num;	
}


void show_all ( S n)					//显示
{
	int i;
	for ( i = 0; i < n.length; i++)
	{
		printf("第%d个学生 n姓名: %st成绩: %fn",i+1,n.students[i].name,n.students[i].score);
	}
}


STU *search ( S *L)					//按姓名查找,返回值为 储存目标学生的信息 的结构体的地址
{
	int i;
	char name_1[MAXSIZE];
	printf ("请输入目标学生的姓名:n");
	scanf ("%s",name_1);
	for ( i = 0; i < L->length; i++)
	{
		if ( strcmp( name_1, L->students[i].name) == 0)
			return  &L->students[i];
		else 
			continue;
	}
	printf ("错误n");
	return 0;
}


void search_name ( S *L)
{
	STU *lll;
	lll = search ( L);												//lll储存查找目标的结构体地址
	if ( lll != NULL)												//判断查找是否成功
		printf ("n姓名: %st成绩: %fn",lll->name,lll->score);		
	else															
		printf ("找不到该学生n");		
}


void bubble ( S *L)													//冒泡排序
{
	int i,j;
	float score_1;
	char name_1[MAXSIZE];
	for ( i = 0; i < L->length; i++)
	{
		for ( j = 0; j < L->length ; j++)
		{
			if ( L->students[j].score < L->students[j+1].score)		//分别交换结构体内容
			{
				score_1 = L->students[j].score;						//成绩交换
				L->students[j].score = L->students[j+1].score;			
				L->students[j+1].score = score_1; 
				
				strcpy ( name_1, L->students[j+1].name);
				strcpy ( L->students[j+1].name, L->students[j].name);//姓名交换
				strcpy ( L->students[j].name, name_1);
			}
		}
	}
}


void show_range ( S n)												//显示各分段的人数
{
	int i;
	int k[5];
	for ( i = 0; i < 5; i++)
	{
		k[i] = 0;
	}
	for ( i = 0; i < n.length; i++)
	{
		if ( n.students[i].score >= 90 && n.students[i].score < 100)
			k[0]++;
		if ( n.students[i].score >= 80 && n.students[i].score < 90)
			k[1]++;
		if ( n.students[i].score >= 70 && n.students[i].score < 80)
			k[2]++;
		if ( n.students[i].score >= 60 && n.students[i].score < 70)
			k[3]++;
		if ( n.students[i].score < 60)
			k[4]++;
	}
	printf ("n90 ~ 100:%d人nt",k[0]);
	printf ("n80 ~ 90:%d人nt",k[1]);
	printf ("n70 ~ 80:%d人nt",k[2]);
	printf ("n60 ~ 70:%d人nt",k[3]);
	printf ("nunder 60:%d人n",k[4]);
}


/***************	main函数	**********************/
int main()															//main()函数
{
	S nnn;
	int i,j;
	while (1)	
	{
		Init();
		scanf ("%d",&i);
		if ( i == 1)												//选择功能
		{
			printf ("学生总人数:n");
			scanf ("%d",&j);
			input ( &nnn, j);			
			printf ("nnendn");
			system ("pause");
			system ("cls");
		}
		if ( i == 2)
			{
				bubble ( &nnn);
				printf ("排序后的结果为:");
				show_all ( nnn);
				system ("pause");
				system ("cls");
			}
		if ( i == 3)
			{ 
				show_range ( nnn);
				system ("pause");
				system ("cls");
			}
		if ( i == 4)
			{ 
				search_name ( &nnn);
				system ("pause");
				system ("cls");
			}
		else
			break;
	}
	return 0;
}

扩展:

  • 添加另外的学生信息
  • 按照其他的方式把学生信息排列组织起来
  • 把学生的信息输入到txt文件中保存
  • 添加图形界面(QT)

之后会尝试更新的。

2022年3月24日:当时不写注释还又臭又长,懒得加功能了就这样吧,权当记录了

最后

以上就是活泼宝马为你收集整理的数据结构大作-学生信息管理系统的全部内容,希望文章能够帮你解决数据结构大作-学生信息管理系统所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部