【期末课程设计】学生成绩管理系统_成绩管理系统(c#课程设计)一、功能介绍 该成绩管理系统分为教师登录和学生登(2)

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

因其独特,因其始终如一

文章目录

一、学生成绩管理系统介绍

二、学生成绩管理系统设计思路

三、源代码

1. test.c

2. Student Management System.c

3.Stu_System.c

4.Teacher.c

5.Student Management System.h


前言:

学生成绩管理系统含教师登录入口和学生登录入口,可实现学生信息的添加,删除,查找,排名、保存等

一、学生成绩管理系统介绍

该项目分为5个文件,其中4个 .c源文件和1个 .h头文件

test.c项目实现的整体框架及成绩管理系统的初始登录界面等

Student Management System.c实现教师系统和学生系统的登录界面和系统成员数据的初始化

Stu_System.c实现学生登录系统等相关功能

Teacher.c实现老师登录系统等相关功能

Student Management System.h存放项目中的各种头文件、#define 定义的常变量、函数、结构体的声明等

推荐使用集编译链接于一体的翻译环境

推荐环境:

Visual Studio 2017版及或更高、Dev-C++、Visual Studio Code等 C/C++编译器

学生成绩管理系统介绍

该成绩管理系统有两个登录入口,分为教师入口和学生入口。

一个学生的成绩信息包括:学生姓名,年龄、性别,学号,专业、成绩。

教师系统可以添加学生信息、删除学生信息、查询学生信息、查看学生总排名;学生系统可以查看所输入的学生的信息、排名等。教师每添加一个学生,在退出学生成绩管理系统后,程序会自动将学生信息以二进制文本的形式保存为一个txt文件,下次登录成绩管理系统时,程序会自动加载信息,教师也可以手动将某个或所有学生信息永久删除

学生成绩管理系统运行界面

二、学生成绩管理系统设计思路

首先要封装一个系统总界面,这个比较简单,只需要控制好间距,用printf即可实现,然后用 switch…case 语句来选择教师登录还是学生登录,并用do…while循环封装,保证该系统可以多次使用;在教师系统和学生系统中,也用类似的printf、switch…case选择语句加do…while循环来实现相应的选择功能。

其次是对学生系统进行初始化,为了节省内存,达到系统运行效率最大化,项目使用了动态内存管理的方法,初始化时先用动态内存函数开辟三个学生的空间,后面随着学生数量的增加,当系统空间被填满后,就再多开辟两个学生的空间,满了之后继续开辟,如此往复,每次只多开辟两个学生的空间。这里使用动态内存管理可以避免内存过度浪费。

接下来是老师录入信息,删除学生等。录入信息直接采用scanf函数即可,删除学生信息首先得找到这个学生,所以得单独再封装一个由学生姓名查找学生信息的函数,也方便后面查学生信息时使用,找到这个学生后,用这个学生个的下一个学生的数据覆盖它,然后用后面的进皆覆盖前面的信息,最后使学生人数减1即可,这里的覆盖使用memset函数完成即可。

还有对学生的成绩排名的功能,在教师系统和学生系统的排名处都要展示排名。因为学生信息在结构体中,所以推荐用 qsort快速排序函数完成,但需要将qsort函数由原来的升序改为降序

最后就是学生信息的保存及加载。在整个项目的最后可以添加一个而进行写文件的语句,并将学生信息逐条通过rwrite函数循环写入文件中;而加载文件中的二进制学生信息则是在初始化学生信息的时候,单独封装一个读文件的函数,用来加载学生数据。读写文件都用二进制的方式是为了防止学生信息泄露

三、源代码

1. test.c

#define _CRT_SECURE_NO_WARNINGS
#include "Student Management System.h"

void menu()
{
	printf("————————————————————————————————————————————————————————————————\n");
	printf("                       学生成绩管理系统                         \n");
	printf("————————————————————————————————————————————————————————————————\n");
	printf("          1.教师登录                      2.学生登录            \n");
	printf("                         0.退出系统            \n");
	printf("————————————————————————————————————————————————————————————————\n");
}
int main()
{
	int input = 0;
	System Mge;
	Init_System(&Mge);
	int ret = 0;
	do
	{
		menu();
		printf("请选择:-> ");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			//进入教师系统
			Teacher_System(&Mge);
			break;
		case 2:
			Stu_System(&Mge);
			break;
		case 3:
			break;
		case 0:
			break;
		default:
			break;
		}
	} while (input);
	return 0;
}

2. Student Management System.c

#define _CRT_SECURE_NO_WARNINGS

#include "Student Management System.h"
int Increase_Capacity2(System* Mge)//先判断是否够
{
	assert(Mge);
	if (Mge->sz == Mge->Max_Space)
	{
		Stu* tmp = (Stu*)realloc(Mge->data, (Mge->Max_Space + Add_Connt) * sizeof(Stu));
		if (Mge->data == NULL)
		{
			perror("realloc");
			return 1;
		}
		Mge->data = tmp;
		Mge->Max_Space += Add_Connt;	/*printf("增容成功\n");*/
		return 0;
	}
	else
		return 0;
}
void Load_Sy(System* Mge)
{
	assert(Mge);
	FILE* pf = fopen("data.txt", "rb");
	if (pf == NULL)
	{
		return;
	}
	else
	{
		Stu tmp = { 0 };
		while (fread(&tmp, sizeof(Stu), 1, pf))
		{
			if (1 == Increase_Capacity2(Mge))
				return;//开辟失败
			else
			{
				Mge->data[Mge->sz] = tmp;
				Mge->sz +=1;
			}
		}
	}
	fclose(pf);
	pf = NULL;
}
void Menu_Teacher()
{
	printf("\n——————————                 教师系统                 ————————————\n");
	printf("          1.录入学生信息                 2.删除学生信息           \n");
	printf("          3.显示所有学生信息             4.查看排名               \n");
	printf("          5.查询学生信息                 6.一键删除所有学生信息          \n");
	printf("                        0.退出教师系统                                   \n");
	printf("————————————————————————————————————————————————————————————————\n");

}
void Menu_Stu()
{
	printf("\n——————————                 学生系统                 ————————————\n");
	printf("                        1.查看我的信息                                         \n");
	printf("                        0.退出学生系统                                          \n");
	printf("————————————————————————————————————————————————————————————————\n");
}
void Init_System(System* Mge)
{
	//初始化系统
	assert(Mge);
	Mge->data = (Stu*)malloc(Inti_Data * sizeof(Stu));//初始化三个学生的空间
	if (Mge->data == NULL)
	{
		perror("malloc");
		return;
	}
	else
	{
		Mge->sz=0;
		Mge->Max_Space = Inti_Data;
		//加载通讯录
		Load_Sy(Mge);
	}
}
void Teacher_System(System* Mge)//教师系统
{
	assert(Mge);
	int input = 0;
	do 
	{
		Menu_Teacher();
		printf("请选择:->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			Add_Stu(Mge);//增加学生信息
			break;
		case 2:
			Del_Stu(Mge);//删除学生信息
			break;
		case 3:
			Show_Stu(Mge);//打印
			break;
		case 4:
			Sort(Mge);//查看排名
			break;
		case 5:
			SearchStu(Mge);//查找学生
			break;
		case 6:
			Del_Exit(Mge);//删除所有信息
			break;
		case 0:
			De_System(Mge);
			break;
		default:
			printf("退出教师系统\n");
			break;
		}
	} while (input);
}

void Stu_System(System* Mge)
{
	assert(Mge);
	int input = 0;
	do
	{
		Menu_Stu();
		printf("请选择:->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			View(Mge);
			break;
		case 0:
			break;
		default:
			printf("输入错误,请重新输入:");
			break;
		}
	} while (input);
}

3.Stu_System.c

#define _CRT_SECURE_NO_WARNINGS
#include "Student Management System.h"
int FindName1(System* Mge, char* str1)
{
	int i = 0;
	for (i = 0; i < Mge->sz; i++)
	{
		if (strcmp(str1, Mge->data[i].Name) == 0)
			return i;//找到了
	}
	return Mge->sz;
}
int Comper2(const void* p1, const void* p2)
{
	return(((Stu*)p2)->Garde-(((Stu*)p1)->Garde));
}
void View(System* Mge)
{
	assert(Mge);
	printf("请输入你的名字:->\n");
	char str1[10] = "0";
	scanf("%s",str1);
	qsort(&(Mge->data[0]), Mge->sz, sizeof(Stu), Comper2);
	int i=FindName1(Mge,str1);
	if (i == Mge->sz)
	{
		printf("请检查你的信息是否正确或找老师查询信息是否录入\n");
		return;
	}
	else
	{
		printf("%10s\t%-4s\t%-15s\t%5s\t%24s\t%5s%5s\n",
			"姓名", "年龄", "学号", "性别", "专业", "成绩", "排名");
		printf("%10s\t%-4d\t%-15s\t%5s\t%24s\t%5d%5d\n",


![img](https://img-blog.csdnimg.cn/img_convert/06f810ceb0463c9f29f860eb9b649488.png)
![img](https://img-blog.csdnimg.cn/img_convert/8c1e5e2918a42c84d3622c54feb8b0fe.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

	"姓名", "年龄", "学号", "性别", "专业", "成绩", "排名");
		printf("%10s\t%-4d\t%-15s\t%5s\t%24s\t%5d%5d\n",


[外链图片转存中...(img-0LydJVh4-1715790760118)]
[外链图片转存中...(img-HSNxGbxa-1715790760118)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值