课程设计 | 学生成绩管理系统

Posted Linux猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课程设计 | 学生成绩管理系统相关的知识,希望对你有一定的参考价值。

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: C/C++/Java课程设计100例 优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、需求分析

二、设计思路

三、功能实现

3.1 计算每个课程的总分和平均分

3.2 按分数降序排序

3.3 按学号升序排序

3.4 通过学号查询

3.5 统计分析

3.6 从文件读取


本篇文章对学生成绩管理系统进行详细讲解, 更多课程设计/大作业请点击 C/C++/Java课程设计100例 获取!

一、需求分析

1. 使用 C 语言实现学生成绩管理系统;

2. 支持计算每个课程的总分和平均分;

3. 支持计算每个学生的总分和平均分;

4. 支持按分数降序排序、按分数升序排序、按学号升序排序、按姓名字典序排序;

5. 支持通过学号查询;

6. 支持通过姓名查询;

7. 支持统计分析、列表展示;

8. 支持从文件中读取和保存。

二、设计思路

通过菜单列出学生成绩管理系统支持的所有功能,并将功能标号,用户可以根据标号选择功能,然后根据对应标号执行对应的功能,学生成绩管理系统流程如下所示。

图1 学生成绩管理系统流程图

三、功能实现

下面将针对程序的主要功能进行详细介绍,包括:计算每个课程的总分和平均分、按分数降序排序、按学号升序排序、通过学号查询、统计分析以及从文件读取。

3.1 计算每个课程的总分和平均分

对所有学生的具体课程进行遍历,统计当前课程的总分,最后计算出平均分,代码实现如下所示。

// 计算每门课程的总分和平均分
void averageSumOfEveryCourse(STU *head)

    int x = 20, y = 3;
	getCoord(x, y++); printf("******************************************************************************");
	if (head->next != NULL) 
        int j = 1;
		for (int i = 0; i < m; i++) 
			STU *p = head->next;
			float sum = 0.0;
			do 
				sum += p->score[i];
				p = p->next;
			 while (p != NULL);
			getCoord(x, y++); printf("\\t\\t\\t课程 %d:    总分 = %.0f , 平局分 = %.0f\\n", j++, sum, sum/n);
		
	 else 
        getCoord(x, y++); printf("没有学生信息");
	
    getCoord(x, y++); printf("******************************************************************************");

	char ch = ' ';
	while (ch != 'Q') 
        getCoord(x, y); printf("请输入 Q 退出:");
        scanf("%c", &ch);
	

3.2 按分数降序排序

对数据排序通过一个单独的函数来处理,具体排序规则只需要传入排序类型即可实现对应的排序,这里 type = 1 表示按分数降序排序,代码实现如下所示。

// type = 1
void sortbyScoreDescending(STU *head)

    int x = 20, y = 3;
	getCoord(x, y++); printf("******************************************************************************");
    getCoord(x, y++); printf("按分数降序排列");
	sortCommon(head, 1);

3.3 按学号升序排序

同理,type = 3 表示按照学号进行升序排序,代码实现如下所示。

// type = 3
void sortbyNum(STU *head)

    int x = 20, y = 3;
	getCoord(x, y++); printf("******************************************************************************");
    getCoord(x, y++); printf("按学号升序排列");
	sortCommon(head, 3);

3.4 通过学号查询

首先,用户输入学号,根据用户输入的学号遍历所有学生,查找对应学号的学生并进行输出,代码实现如下所示。

void searchbyNum(STU *head)

	int x = 20, y = 3;
	getCoord(x, y++); printf("******************************************************************************");
    getCoord(x, y++); printf("通过学号进行查询");
	long num;
	bool flag = true;
	getCoord(x, y++); printf("请输入学号:");
	scanf("%ld", &num);
	STU *p = head->next;
	if (p != NULL) 
		do 
			if (p->num == num) 
				getCoord(x, y++); printf("学号:"); printf("%ld", p->num);
				getCoord(x, y++); printf("姓名:"); printf("%s", p->name);
				for (int i = 0; i < m; i++) 
					getCoord(x, y++); printf("课程 %d: %.0f\\t", i+1, p->score[i]);
				
				getCoord(x, y++); printf("总分:%.0f\\n", p->sum);
				getCoord(x, y++); printf("平均分:%.0f\\n", p->sum/m);
				flag = false;
				break;
			
			p = p->next;
		 while (p != NULL && flag);
		if (flag) 
			getCoord(x, y++); printf("没有发现!\\n");
		
	
	getCoord(x, y++); printf("******************************************************************************");
	returnMenu(x, y+1);

3.5 统计分析

对所有学生的成绩进行分析,输出各个成绩段的学生情况,包括:< 60、60 - 69、70 - 79、80 - 89、90 - 99、100,代码实现如下所示。

void statisticAnalysis(STU *head)

	int a[6];
	int x = 20, y = 3;
    getCoord(x, y++); printf("******************************************************************************");
	for (int i = 0; i < m; i++) 
		STU *p = head->next;
		memset(a, 0, sizeof(a));
		do 
			if (p->score[i] < 60) 
				a[0]++;
			 else if (p->score[i] < 70) 
				a[1]++;
			 else if (p->score[i] < 80) 
				a[2]++;
			 else if (p->score[i] < 90) 
				a[3]++;
			 else if (p->score[i] < 100) 
				a[4]++;
			 else 
				a[5]++;
			
			p = p->next;

		 while (p != NULL);

		getCoord(x, y++); printf("课程 %d:\\n", i + 1);
		getCoord(x, y++); printf("* < 60\\t%d\\t%.2f%%\\n", a[0], 100 * a[0] / 6.0);
		getCoord(x, y++); printf("* %d - %d\\t%d\\t%.2f%%\\n", 60, 69, a[1], 100 * a[1] / 6.0);
		getCoord(x, y++); printf("* %d - %d\\t%d\\t%.2f%%\\n", 70, 79, a[2], 100 * a[2] / 6.0);
		getCoord(x, y++); printf("* %d - %d\\t%d\\t%.2f%%\\n", 80, 89, a[3], 100 * a[3] / 6.0);
		getCoord(x, y++); printf("* %d - %d\\t%d\\t%.2f%%\\n", 90, 99, a[4], 100 * a[4] / 6.0);
		getCoord(x, y++); printf("* %d\\t%d\\t%.2f%%\\n", 100, a[5], 100 * a[5] / 6.0);
	
	getCoord(x, y++); printf("******************************************************************************\\n");
    returnMenu(x, y+1);

3.6 从文件读取

数据存储在 student.txt  中,按照指定格式,读取文件内容,将其存储到结构中,代码实现如下所示。

void readfromFile(STU *head)

    int x = 20, y = 3;
    getCoord(x, y++); printf("******************************************************************************");
	STU *pre = head;
	FILE *fp;
	if ((fp = fopen("student.txt", "r")) == NULL) 
		getCoord(x, y++); printf("打开文件 student.txt 失败!\\n");
	 else 
            fscanf(fp, "%d\\t%d\\n", &n, &m);
            for (int i = 0; i < n; i++) 
                STU *p = (STU *)malloc(LEN);
                pre->next = p;
                p->next = NULL;
                fscanf(fp, "%12ld", &p->num);
                fscanf(fp, "%12s", p->name);
                for (int j = 0; j < m; j++)
                
                    fscanf(fp, "%12f", &p->score[j]);
                
                fscanf(fp, "%12f%12f", &p->sum, &p->aver);
                pre = p;
            
	
    fclose(fp);
	getCoord(x, y++); printf("导入数据成功!\\n");
	print(head, x, y);


🍓🍓🍓 更多课程设计/大作业请点击 C/C++/Java课程设计100例 获取!🎉🎉🎉


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


以上是关于课程设计 | 学生成绩管理系统的主要内容,如果未能解决你的问题,请参考以下文章

C语言程序设计学生成绩管理系统

学生成绩管理系统c

C语言程序设计 班级学生成绩管理系统

java课程设计 学生成绩管理

用C语言写学生成绩管理系统基本功能:1、 输入一个班级的学生基本信息(包括学号,姓名,性别,5门课程成绩

sql,查询每门课程最高分的学生的学号,课程号,成绩。再一张表里