【期末课程设计】学生成绩管理系统

这篇具有很好参考价值的文章主要介绍了【期末课程设计】学生成绩管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【期末课程设计】学生成绩管理系统,C语言学习专题,水火莲花-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文件,下次登录成绩管理系统时,程序会自动加载信息,教师也可以手动将某个或所有学生信息永久删除

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

【期末课程设计】学生成绩管理系统,C语言学习专题,水火莲花-C疑难专题,课程设计,c语言,算法

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

  首先要封装一个系统总界面,这个比较简单,只需要控制好间距,用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",
			Mge->data[i].Name,
			Mge->data[i].Age,
			Mge->data[i].Id,
			Mge->data[i].Sex,
			Mge->data[i].Pro,
			Mge->data[i].Garde,
			i+1);
	}
	 
}
 

4.Teacher.c

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

int FindName(System* Mge,char*str1)
{
	assert(Mge && 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 Increase_Capacity(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 Add_Stu(System* Mge)//录入学生信息
{
	assert(Mge);
	int z = Increase_Capacity(Mge);
	if (z == 1)
		printf("增容失败\n");
	else//不用增容
	{
		printf("请输入姓名:\n");
		scanf("%s", Mge->data[Mge->sz].Name);
		printf("请输入年龄:\n");
		scanf("%d",&(Mge->data[Mge->sz].Age));
		printf("请输入学号:\n");
		scanf("%s",Mge->data[Mge->sz].Id);
		printf("请输入性别:\n");
		scanf("%s",Mge->data[Mge->sz].Sex);
		printf("请输入专业:\n");
		scanf("%s",Mge->data[Mge->sz].Pro);
		printf("请输入成绩:\n");
		scanf("%d",&(Mge->data[Mge->sz].Garde));
		Mge->sz += 1;
	}
}

void Show_Stu(System* Mge)//打印学生信息
{
	assert(Mge);
	printf("%10s\t%-4s\t%-15s\t%5s\t%24s\t%5s\n",
		  "姓名", "年龄", "学号", "性别", "专业","成绩");
	int i = 0;
	for (i = 0; i < Mge->sz; i++)
	{
		printf("%10s\t%-4d\t%-15s\t%5s\t%24s\t%5d\n",
			Mge->data[i].Name,
			Mge->data[i].Age,
			Mge->data[i].Id,
			Mge->data[i].Sex,
			Mge->data[i].Pro,
			Mge->data[i].Garde);
	}
} 

void Del_Stu(System* Mge)//删除学生信息
{
	assert(Mge);
	printf("请输入你要删除学生的名字:\n");
	char str1[10] = "0";
	scanf("%s", str1);
	//先找到学生
	int z=FindName(Mge,str1);
	if (z == Mge->sz)
	{
		printf("未找到该学生\n");
		return;
	}
	else
	{
		int i = 0;
		for (i = z; i < Mge->sz; i++)
		{
			memmove(&Mge->data[i], &Mge->data[i + 1], sizeof(Stu));
		}
		Mge->sz--;
	}
}
int Comper(const void* p1, const void* p2)
{
	return(((Stu*)p2)->Garde - (((Stu*)p1)->Garde));
}
void Sort(System* Mge)
{
	assert(Mge);
	qsort(&(Mge->data[0]), Mge->sz, sizeof(Stu), Comper);
	printf("学生排名为:\n");
	printf("%10s\t%-4s\t%-15s\t%5s\t%24s\t%5s%5s\n",
		"姓名", "年龄", "学号", "性别", "专业", "成绩","排名");
	int i = 0;
	for (i = 0; i < Mge->sz; i++)
	{
		printf("%10s\t%-4d\t%-15s\t%5s\t%24s\t%5d%5d\n",
			Mge->data[i].Name,
			Mge->data[i].Age,
			Mge->data[i].Id,
			Mge->data[i].Sex,
			Mge->data[i].Pro,
			Mge->data[i].Garde
		            , i+1);
	}
}

void SearchStu(System* Mge)
{
	assert(Mge);
	char str1[15] = "0";
	printf("请输入要查找的学生的姓名");
	scanf("%s", str1);
	int i = FindName(Mge, str1);
	if (i == Mge->sz)
	{
		printf("未找到该学生\n");
		return;
	}
	else
	{
		printf("%10s\t%-4s\t%-15s\t%5s\t%24s\t%5s\n", 
		"姓名", "年龄", "学号", "性别", "专业", "成绩");
		printf("%10s\t%-4d\t%-15s\t%5s\t%24s\t%5d\n",
			Mge->data[i].Name,
			Mge->data[i].Age,
			Mge->data[i].Id,
			Mge->data[i].Sex,
			Mge->data[i].Pro,
			Mge->data[i].Garde);
	}
}
void De_System(System* Mge)//写入文件
{
	assert(Mge);
	FILE* pf = fopen("data.txt", "wb");
	Stu tmp = { 0 };
	int i = 0;
	for (i = 0; i < Mge->sz; i++)
	{
		//以二进制的形式写入文件
		fwrite(Mge->data + i, sizeof(Stu), 1, pf);
	}
	//关闭文件
	free(Mge->data);
	Mge->data = NULL;
	fclose(pf);
	pf = NULL;
}

void Del_Exit(System* Mge)
{
	assert(Mge);
	memset(Mge->data, 0, sizeof(Stu) * (Mge->sz));
	Mge->sz= 0;
}

5.Student Management System.h  

#pragma once
#define Inti_Data 3
#define Add_Connt 2
#include<stdlib.h>
#include<assert.h>
#include<stdio.h>
#include<string.h>
//学生信息
typedef struct Stu
{
	//结构体类型重命名为Stu
	char Name[15];
	int Age;
	char Id[19];//学号
	char Sex[5];//性别
	char Pro[24];//专业
	int Garde;//成绩
}Stu;
typedef struct System
{
	Stu* data;
	int sz;//学生人数
	int Max_Space;//系统最大容量
}System;

void Teacher_System(System* Mge);

int FindName(System* Mge, char* str1);
void Init_System(System* Mge);
void Add_Stu(System* Mge);
void Show_Stu(System* Mge);
void Del_Stu(System* Mge);
void Sort(System* Mge);
void SearchStu(System* Mge);
void Stu_System(System* Mge);
void View(System* Mge);
void De_System(System* Mge);
void Del_Exit(System* Mge);

【期末课程设计】学生成绩管理系统,C语言学习专题,水火莲花-C疑难专题,课程设计,c语言,算法

  博主写了好长时间,如果你能给博主一个免费三连鼓励一下博主的话,那么我觉得你的真是 泰     裤    辣 !!!【期末课程设计】学生成绩管理系统,C语言学习专题,水火莲花-C疑难专题,课程设计,c语言,算法文章来源地址https://www.toymoban.com/news/detail-600131.html

到了这里,关于【期末课程设计】学生成绩管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构课程设计:学生成绩管理系统

    目  录 第一章   需求分析 第二章 概要设计 第三章 详细设计 第四章 测试报告 第五章 安装及使用 第六章 项目总结 第七章 源码 一.需求分析        学生成绩管理是一个学校不可缺少的部分,它的内容对于学校的管理者和学生以及学生家长来说都至关重要,所以一个良好

    2024年02月02日
    浏览(53)
  • C语言课程设计-学生成绩管理系统

    需求分析: 1.设计题目:学生成绩管理系统 2.系统功能需求分析:实现对学生各科成绩总分及平均分的排序,和成绩的查找 概要设计 1. 功能模块图 详细设计 1. 流程图 测试结果 :列出所有功能的运行界面,并作文字说明。 1.录入成绩:录入3个人的学号和各科成绩 2.每门课程

    2024年02月11日
    浏览(36)
  • C语言课程设计_学生成绩管理系统

    设计一个学生成绩排名系统。 1)  具备对成绩的管理功能(添加、删除、排序) 2)  具备对成绩的统计功能(最高分,最低分,平均分,及格率等) 3)  具备按学号、姓名、或课程名查询成绩的功能。 4)学生成绩应该保存在文件中。 备注:成绩记录以下信息:班级,学号,

    2024年02月11日
    浏览(37)
  • C语言课程设计:学生成绩信息管理系统(排序、平均分、总分)详解

    1、需求分析 利用C语言编写一个可以对学生成绩信息进行管理的系统 0、退出系统 1、录入学生信息和成绩 2、打印学生信息 3、统计学生人数 4、查找学生信息 5、修改学生信息 6、删除学生信息 7、排序学生成绩 8、生成学生信息文件 9、读取文件学生信息 10、输出各科成绩不

    2024年02月11日
    浏览(37)
  • Python毕业设计|课程设计|基于Python+Django实现的学生成绩管理系统

    作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路  关注作者有好处 文末获取源码   语言环境:Python3.7 数据库:

    2024年02月10日
    浏览(35)
  • 【MFC】学生成绩管理系统(期末项目)

    如果需要代码请评论区留言或私信 E-R图 关系模式 教师(工号,姓名,学院) 主键(工号) 学生(学号,姓名,性别,年龄,班级,专业,学分) 主键(学号) 课程(课程编号,教师编号,课程名称,课程学分) 主键(课程编号) 外键(教师编号) 选课(学号,课程编号,分数) 主键(学号,课

    2024年01月17日
    浏览(40)
  • 【python课程作业】python学生成绩管理系统

    功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。给舍友做的课程作业。 功能包括:成绩管理、学生管理、课程管理、班级管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geeeeeeeek/python_score 演示地址 http:/

    2024年03月13日
    浏览(49)
  • Java设计学生成绩管理系统

    1.1 题目与要求 设计一个学生成绩排名系统 实现以下功能: (1) 具备对成绩的管理功能(添加、删除、排序); (2) 具备对成绩的统计功能(最高分,最低分,平均分,及格率等); (3) 具备按学号、姓名查询成绩的功能; (4) 具备处理解决学号重复问题 ; 备注:成绩记录以下

    2024年02月09日
    浏览(41)
  • 【Java程序设计】学生成绩管理系统

     相关文章: 【Java程序设计】宠物商店管理系统 【Java程序设计】Java基础知识实验 对于学生成绩管理系统,主要可以分为如下几个功能: 录入学生成绩 统计学生成绩 查找学生成绩 修改学生成绩 删除学生成绩 按平均分排序 显示所有成绩 退出管理系统 进入系统之后,我们

    2024年01月17日
    浏览(36)
  • JSP设计一个简单的学生成绩管理系统

    XsCjZj.jsp      XsCjZj0.jsp XsCx.jsp     XsWh.jsp XsXq.jsp  XsXg.jsp   XsXg0.jsp XsSc.jsp   XsSc0.jsp  

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包