基于顺序表的学生成绩管理系统

🌈 个人主页:白子寰
🔥 分类专栏:python从入门到精通,魔法指针,进阶C++,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~
💡 坚持创作博文(平均质量分81+),分享更多关于深度学习、C/C++,python领域的优质内容!(希望得到您的关注~) 

 

注:
学生成绩管理系统(语法)简单实现icon-default.png?t=N7T8http://t.csdnimg.cn/DDppq该篇是基于数据结构顺序表的学生管理系统👇

gitee链接:基于数据结构顺序表的学生管理系统icon-default.png?t=N7T8https://gitee.com/mei-tianbu/stay-up-late-coding

目录

目的

 效果呈现

①学生数据添加

②查看学生数据 

​编辑

③删除及查看

代码的具体实现

一.在测试文件(StuScoreTest.c)框架构建

学生管理系统框架代码实现

二.在头文件(StuScore.h)定义学生管理系统的相关函数

三.在文件(StuScore.c)具体实现学生数据的增删查改

学生管理系统的初始化和销毁代码具体实现

学生增删查找的具体实现 

学生数据添加代码具体实现

利用学生姓名寻找学生相关数据代码具体实现

 学生数据删除具体实现

修改学生数据的具体实现

学生数据的完整查看具体实现

一个学生相关数据的查看具体实现


 

目的

针对学生信息(学号,姓名,性别,英语、数学、数据结构成绩、简介)进行

操作(添加、删除、修改、查找个人、查找全部)信息


 

 效果呈现

①学生数据添加

②查看学生数据 

③修改和查看

 

③删除及查看


 

代码的具体实现

一.在测试文件(StuScoreTest.c)框架构建

1.先基于顺序表的初始化学生管理系统

2.主函数学生管理系统利用在do...while...语句中包含switch...case..语句实现学生数据的增删查改操作的框架

3.再基于顺序表的销毁学生管理系统

学生管理系统框架代码实现

int main()
{
	int op = -1;
	Stu con;
	//初始化学生管理系统
	STUCS(&con);
	do 
	{
		menu();
		printf("请选择你的操作:");
		scanf("%d", &op);
		switch (op)
		{
		case 1:
			//添加学生数据
			stuscoreadd(&con);
			break;
		case 2:
			//删除学生数据
			stuscoredel(&con);
			break; 
		case 3:
			//修改学生数据
			stuscoremodify(&con);
			break;
		case 4:
			//查找学生数据
			stuscorefind(&con);
			break;
		case 5:
			//查看完整学生数据
			stuscoreshow(&con);
			break;
		case 0:
			printf("成功退出系统\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
		}

	} while (op != 0);
	//销毁学生管理系统
	STUdestroy(&con);
	return 0;
}

 


二.在头文件(StuScore.h)定义学生管理系统的相关函数

1.创建(学生相关数据类型)结构体和顺序表的前置声明

#pragma once

#define MAX_NAME 100

//(学生相关数据类型)结构体
typedef struct stuscore
{
	int id;//学号
	char name[MAX_NAME];//姓名
	char sex[5];//性别
	float EngScore;//英语
	float MathScore;//数学
	float DatastrScore;//数据结构
	char StudentProfile[1000];
}Stu;

//顺序表的前置声明
struct shunxu;

typedef struct shunxu stu;

2.定义学生管理系统的初始化和销毁,增添查改函数

//学生管理系统的初始化和销毁
void STUCS(stu* pcon);
void STUdestroy(stu* pcon);

//添加,删除,修改,查找,查找全部
void stuscoreadd(stu* pcon);
void stuscoredel(stu* pcon); 
void stuscoremodify(stu* pcon);
void stuscorefind(stu* pcon);
void stuscoreshow(stu* pcon);

 

三.在文件(StuScore.c)具体实现学生数据的增删查改

1.学生管理系统的初始化和销毁(调用顺序表中的初始化和销毁)

调用代码

//初始化
void CS(SX* ps)
{
	//具体arr,size,nowsize具体的值不知道是多少,所以初始化为NULL,0
	ps->arr = NULL;
	ps->size = ps->nowsize = 0;
}

//销毁
void SXdestroy(SX* ps)
{
	//保证指针有效
	assert(ps);
	if (ps->arr)
	{
		free(ps->arr);
	}
	ps->arr = NULL;
	ps->size = ps->nowsize = 0;
}

学生管理系统的初始化和销毁代码具体实现

//学生管理系统的初始化和销毁
void STUCS(stu* pcon)
{
	CS(pcon);
}

void STUdestroy(stu* pcon)
{
	SXdestroy(pcon);
}

 

学生增删查找的具体实现 

2.学生数据的添加

①输入学生数据保存在结构体变量

②使用.访问结构体成员输入学生的数据(学号,姓名,性别,英语、数学、数据结构成绩、简介)

③基于顺序表的尾插将学生数据保存在学生管理系统里去

调用顺序表的尾部插入数据

//顺序表的尾插
void CHARUback(SX* ps, datatype x)
{
	//方式一:断言 -- 暴力方式 --会报错且知道具体错误位置
	assert(ps);
	//方式二:断言 -- 温柔方式--会报错,不知道具体错误位置
	/*if (ps == NULL)
	{
		return;
	}*/

	//空间不够,扩容
	publicKUOR(ps);
	//空间足够,直接插入
	/*第一种写法*/
	//ps->arr[ps->size] = x;
	//ps->size++;
	/*第二种写法*/
	ps->arr[ps->size++] = x;

}
学生数据添加代码具体实现
//添加学生数据
void stuscoreadd(stu* pcon)
{
	Stu stu;
	printf("请输入学生学号:\n");
	scanf("%d", &stu.id);	
	printf("请输入学生姓名:\n");
	scanf("%s", stu.name);
	printf("请输入学生性别:\n");
	scanf("%s", stu.sex);
	printf("请输入学生英语成绩:\n");
	scanf("%f", &stu.EngScore);
	printf("请输入学生数学成绩:\n");
	scanf("%f", &stu.MathScore);
	printf("请输入学生数据结构成绩:\n");
	scanf("%f", &stu.DatastrScore);
	printf("请输入学生个人简介:\n");
	scanf("%s", stu.StudentProfile);

	//保存到学生管理系统:尾插
	CHARUback(pcon, stu);
}

3.利用学生姓名寻找学生相关数据,若找到返回下标,找不到,返回-1

使用strcmp进行字符串之间的比较进而实现学生姓名的查找

利用学生姓名寻找学生相关数据代码具体实现
//寻找学生名字,找到返回下标,没找到,返回-1
int findname(stu* pcon, char name[])
{
	for (int i = 0; i < pcon->size; i++)
	{
		if (strcmp(pcon->arr[i].name, name) == 0) 
		{
			return i;//找到了
		}
	}
	return -1;
}

4.学生数据删除

①利用寻找学生姓名删除该生的相关数据

若找到该生姓名,调用顺序表的删除进而删除该生的相关数据

若找不到该生姓名,直接返回

②调用顺序表的删除进而删除学生的相关数据

调用代码

//删除指定位置数据
void SXpointdestroy(SX* ps, int pos)
{
	//判断ps是否为有效指针
	assert(ps);
	//断言,保证下标pos>=0且pos小于顺序表空间大小size
	assert(pos >= 0 && pos < ps->size);

	for (int i = pos; i < ps->size - 1; i++)
	{
		ps->arr[i] = ps->arr[i + 1];
	}
	ps->size--;
}
 学生数据删除具体实现
//学生数据删除
void stuscoredel(stu* pcon)
{
	printf("请输入要删除的学生姓名:");
	char name [MAX_NAME];
	scanf("%s", name);

	int findIndex = findname(pcon, name);
	if (findIndex < 0)
	{
		printf("要删除的学生不存在!\n");
		return;
	}
	SXpointdestroy(pcon, findIndex);
	printf("该生相关数据删除成功!!!\n");
}

5.修改学生数据

利用寻找学生姓名修改该生的相关数据

若找到该生姓名,利用指针修改该生的相关数据

若找不到该生姓名,直接返回

修改学生数据的具体实现
//学生数据的修改
void stuscoremodify(stu* pcon)
{
	char name[MAX_NAME];
	printf("请输入要修改的学生姓名:");
	scanf("%s", name);

	int findIndex = findname(pcon, name);
	if (findIndex < 0)
	{
		printf("要找的该生相关数据不存在!\n");
		return;
	}
	printf("请输入要修改的学生学号:\n");
	scanf("%d", &pcon->arr[findIndex].id);
	printf("请输入要修改的学生姓名:\n");
	scanf("%s", pcon->arr[findIndex].name);
	printf("请输入要修改的学生性别:\n");
	scanf("%s", pcon->arr[findIndex].sex);
	printf("请输入要修改的学生英语成绩:\n");
	scanf("%f", &pcon->arr[findIndex].EngScore);
	printf("请输入要修改的学生数学成绩:\n");
	scanf("%f", &pcon->arr[findIndex].MathScore);
	printf("请输入要修改的学生数据结构成绩:\n");
	scanf("%f", &pcon->arr[findIndex].DatastrScore);
	printf("请输入要修改的学生个人简介:\n");
	scanf("%s", pcon->arr[findIndex].StudentProfile);
	printf("修改学生相关数据成功!!!\n");
}

6.学生数据的完整查看

使用for循环指针访问结构体成员输出全部学生的相关数据

学生数据的完整查看具体实现
//学生完整数据查看
void stuscoreshow(stu* pcon)
{
	for (int i = 0; i < pcon->size; i++)
	{
		printf("学生学号:%d\n",pcon->arr[i].id);
		printf("学生姓名:%s\n", pcon->arr[i].name);
		printf("学生性别:%s\n", pcon->arr[i].sex);
		printf("学生英语成绩:%.2f\n", pcon->arr[i].EngScore);
		printf("学生数学成绩:%.2f\n", pcon->arr[i].MathScore);
		printf("学生数据结构成绩:%.2f\n", pcon->arr[i].DatastrScore);
		printf("学生个人简介:%s\n", pcon->arr[i].StudentProfile);
	}
}

7.一个学生相关数据的查看

利用寻找学生姓名打印该生的相关数据

若找到该生姓名,利用指针打印该生的相关数据

若找不到该生姓名,直接返回

一个学生相关数据的查看具体实现
//学生相关数据查看
void stuscorefind(stu* pcon)
{
	char name[MAX_NAME];
	printf("请输入要查找的学生姓名:\n");
	scanf("%s", name);
	int findIndex = findname(pcon, name);
	if (findIndex < 0)
	{
		printf("查找到学生相关数据不存在!!!\n");
		return;
	}

	//找到了,打印学生相关数据
		printf("学生学号:%d\n", pcon->arr[findIndex].id);
		printf("学生姓名:%s\n", pcon->arr[findIndex].name);
		printf("学生性别:%s\n", pcon->arr[findIndex].sex);
		printf("学生英语成绩:%.2f\n", pcon->arr[findIndex].EngScore);
		printf("学生数学成绩:%.2f\n", pcon->arr[findIndex].MathScore);
		printf("学生数据结构成绩:%.2f\n", pcon->arr[findIndex].DatastrScore);
		printf("学生个人简介:%s\n", pcon->arr[findIndex].StudentProfile);
}

 


 ***********************************************************分割线*****************************************************************************
完结!!!

感谢浏览和阅读。
等等等等一下,分享最近喜欢的一句话:

“道阻且长,行则将至”。

我是白子寰,如果你喜欢我的作品,不妨你留个点赞+关注让我知道你曾来过。
你的点赞和关注是我持续写作的动力!!! 
好了划走吧。 

  • 43
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
学生成绩管理系统是一个常见的应用程序,用于存储和处理学生的成绩信息。基于链表的学生成绩管理系统可以使用链表数据结构来有效地组织和管理学生的成绩数据。每个节点可以存储一个学生的成绩信息,包括学号、姓名、科目和分数等。 下面是一个简单的基于链表的学生成绩管理系统的示例代码: ```python class Node: def __init__(self, student_id, name, subject, score): self.student_id = student_id self.name = name self.subject = subject self.score = score self.next = None class GradeManagementSystem: def __init__(self): self.head = None def add_student(self, student_id, name, subject, score): new_node = Node(student_id, name, subject, score) if self.head is None: self.head = new_node else: current = self.head while current.next is not None: current = current.next current.next = new_node def remove_student(self, student_id): if self.head is None: return if self.head.student_id == student_id: self.head = self.head.next return current = self.head while current.next is not None: if current.next.student_id == student_id: current.next = current.next.next return current = current.next def get_student_score(self, student_id): current = self.head while current is not None: if current.student_id == student_id: return current.score current = current.next return None def print_all_students(self): current = self.head while current is not None: print(f"Student ID: {current.student_id}") print(f"Name: {current.name}") print(f"Subject: {current.subject}") print(f"Score: {current.score}") print("---------------") current = current.next # 示例用法 grade_system = GradeManagementSystem() grade_system.add_student(1, "Alice", "Math", 90) grade_system.add_student(2, "Bob", "English", 85) grade_system.print_all_students() ``` 这是一个简单的例子,你可以根据实际需求扩展和修改代码。这个示例中的学生成绩信息是按照添加顺序存储的,你也可以根据需求进行其他排序方式的实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值