基于Visual Studio 2019学生成绩统计系统

学生成绩统计系统

所使用的知识较少所以实现的功能比较简单,处理的学生信息也不全面学习了结构体和文件处理后将会有一个更完善更实用的学生信息管理系统
一、项目实现
1.系统分析设计:
(1)程序功能模块:
        根据系统要求,系统主模块应包含显示主菜单模块、录入学生成绩模块、显示学生成绩模块、统计高于平均分模块、统计最高分和最低分模块、统计各分段人数模块,每个模块都定义为一个功能相对独立的函数
        *显示主菜单模块,函数名 MainMenu();
        *录入学生成绩模块,函数名 InputScore(long num[], int score[]);
        *显示学生成绩模块,函数名 DisplayScore(long num[], int score[], int n);
        *统计高于平均分模块,函数名 AboveAvgScore(long num[], int score[], int n);
        *统计最高分和最低分模块,函数名 MaxMinScore(long num[], int score[], int n);
        *统计各分段人数模块,函数名 GradeScore(int score[], int n);
(2)定义数据结构。
        要实现学生成绩统计,首先要考虑的问题就是学生学号、成绩的存储。那么设计一位数组 num[]、set_score[]来存储学生学号与成绩,并在一开始设置了一个符号常量MAXSTU,用于定义数组最大长度,即最多学生人数。假设学生不超过30人,则MAXSTU代表30
         在本项目中,除主菜单显示函数MainMenu()外,其他函数都使用数组set_score[]。本例中将该数组定义为局部变量,利用形参和实参的数据传递,实现对学生成绩数组的访问。在主函数中定义stu_count,存放学生的实际人数。
2.各个模块设计
(1)主界面设计。
采用printf()函数实现主界面设计,并使用system("cls")清屏,此函数原型在"stdlib.h"头文件中。本模块通过main()调用。
void MainMenu()
{
	system("cls");
	printf("\n\t\t	 学生成绩统计系统		    \n");
	printf("\n\t\t==================================\n");
	printf("\t\t	   1.录入学生成绩	         	  \n");
	printf("\t\t	   2.显示学生成绩	         	  \n");
	printf("\t\t	   3.显示高于平均分名单	      \n");
	printf("\t\t	   4.显示最高分和最低分的名单   \n");
	printf("\t\t	   5.统计各分数段人数	          \n");
	printf("\t\t	   0.退出          			  \n");
	printf("\n\t\t==================================\n");
	printf("\n\t\t 请输入您的选择: ");
}

效果如图:
在这里插入图片描述

(2)录入学生成绩模块。
本模块是从键盘输入学生学号和成绩,当输入成绩为负数时结束。本模块函数有2个,长整型num用来存放学生学号;整型数组score,存放学生的成绩。函数的返回值i为学生的总数。
int InputScore(long num[], int score[])
{
	int i = -1;
	system("cls");
	do
	{
		i++;
		printf("\n\t\t 请输入学号 成绩 (输入-1 退出)");
		scanf_s("%ld%d", &num[i], &score[i]);
	} while (num[i] > 0 && score[i] >= 0);
	return i;
}

效果(包括输入)如图:
在这里插入图片描述

(3)显示学生信息模块。
本模块函数参数有3个,长整型数组num,存放学生学号;整型数组score,存放学生成绩;整型变量n,存放学生总数。函数无返回值。
void DisplayScore(long num[], int score[], int n)
{
	int i;
	system("cls");
	printf("\n\t\t	学生成绩如下:");
	printf("\n\t\t===============================\n");
	printf("\n\t\t	学生号	成绩");
	printf("\n\t\t-------------------------------\n");
	for (i = 0; i < n; i++)
	{
		printf("\n\t\t	%ld		%d", num[i], score[i]);
	}
}

效果如图:
在这里插入图片描述

(4)显示高于平均分的名单模块。
先计算平均分,并显示高于平均分的名单。本模块函数参数有3个,长整型数组num,存放学生序号;整型数组score存放学生成绩;整型变量n,存放学生总数。函数无返回值。模块中平均值变量用变量average存放,声明为float类型。
void AboveAvgScore(long num[], int score[], int n)
{
	int i, sum = 0;
	int count = 0;
	float average;
	system("cls");
	for (i = 0; i < n; i++)
	{
		sum = sum + score[i];
	}
	average = (float)sum / n;
	printf("\n\t\t平均分为:%.2f\n", average);
	printf("\n\t\t--------------------------------\n");
	printf("\n\t\t高于平均分:\n\t\t学号	成绩");
	printf("\n\t\t--------------------------------\n");
	for (i = 0; i < n; i++)
	{
		if ((float)score[i] > average)
		{
			printf("\n\t\t%ld	%d", num[i], score[i]);
			count++;
		}
	}
	printf("\n\t\t高于平均分的人数:%d\n", count);
}

效果如图:
在这里插入图片描述

(5)显示最高分最低分名单模块。
本模块函数参数有3个,整型数组num,存放学生学号;整型数组score,存放学生成绩;整型变量n,存放学生总数。函数无返回值。将最高分成绩存于变量max中,学号存于max_num中,将最低分成绩存于变量min中,学好存于min_num中。
void MaxMinScore(long num[], int score[], int n)
{
	int i, max, min;
	long max_num, min_num;
	system("cls");
	max = min = score[0];
	max_num = min_num = num[0];
	for (i = 1; i < n; i++)
	{
		if (score[i] > max)
		{
			max = score[i]; max_num = num[i];
		}
		if (score[i] < min)
		{
			min = score[i]; min_num = num[i];
		}
	}
	printf("\n\t\t最高分学号: %ld,分数: %d", max_num, max);
	printf("\n\t\t最低分学号: %ld,分数: %d", min_num, min);
}

效果如图:
在这里插入图片描述

(6)统计各分数段人数模块。
本模块函数参数有2个,整型数组score,存放学生成绩;整型变量n,存放学生总数。函数无返回值。
void GradeScore(int score[], int n)
{
	int i;
	int grade_90 = 0;
	int grade_80 = 0;
	int grade_70 = 0;
	int grade_60 = 0;
	int grade0_59 = 0;
	system("cls");
	for (i = 0; i < n; i++)
	{
		switch (score[i] / 10)
		{
		case 10:
		case 9:grade_90++; break;
		case 8:grade_80++; break;
		case 7:grade_70++; break;
		case 6:grade_60++; break;
		default:grade0_59++; break;
		}
	}
	printf("\n\t\t 90分以下的人数为: %d", grade_90);
	printf("\n\t\t 80--90分的人数为: %d", grade_80);
	printf("\n\t\t 70--80分的人数为: %d", grade_70);
	printf("\n\t\t 60--70分的人数为: %d", grade_60);
	printf("\n\t\t 不及格的人数为 : %d", grade0_59);
}

效果如图:
在这里插入图片描述

(7)主函数。
主要是通过循环语句,结合switch语句完成主菜单的功能调用。
void main()
{
	int set_score[MAXSTU];	//定义一维数组,存放学生某门课程的成绩
	long num[MAXSTU];	//定义一维数组,存放学生学生学号
	int stu_count = 0;	//存放学生实际人数
	int choose;	//定义整型变量,存放主菜单选择序号
	while (1)
	{
		MainMenu();//调用显示菜单主函数
		printf("\n\t\t 请选择主菜单序号(0--5):");
		scanf_s("%d", &choose);
		switch (choose)
		{
		case 1:stu_count = InputScore(num, set_score); break;//调用录入成绩
		case 2:DisplayScore(num, set_score, stu_count); break;//调用显示成绩
		case 3:AboveAvgScore(num, set_score, stu_count); break;//调用显示高低分
		case 4:MaxMinScore(num, set_score, stu_count); break;//调用显示最高低分
		case 5:GradeScore(set_score, stu_count); break;//调用统计各分段
		case 0:return;	//退出
		default:printf("\n\t\t 输入无效,请重新选择!\n");
		}
		printf("\n\n\t\t 按任意键返回主菜单");
		_getch();
	}
}

除了每个函数模块以外还要注意函数声明,函数声明和头文件的引用如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAXSTU 30	  //最大学生人数

//------函数原型声明------
void MainMenu();     //主菜单函数声明
int InputScore(long num[], int score[]);	//录入学生成绩
void DisplayScore(long num[], int score[], int n);	//显示学生成绩
void AboveAvgScore(long num[], int score[], int n);	//显示高于平均分名单
void MaxMinScore(long num[], int score[], int n);
void GradeScore(int score[], int n);
总结:
(1)在实际开发中,当编写由许多函数组成的程序时,一般情况下先编写主函数,对于尚未编写的被调函数,先使用空函数占位,以后再使用编写好的函数代替它。
(2)声明一维形参数组时,方括号内可以不给出数组长度
(3)在被调函数中改变形参数组元素时,实参数组元素值也会随之改变
  • 7
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
一篇很完整、很不错的论文、希望你们喜欢 摘要 学生成绩管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强.数 据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。 经过分析如此情况,我们使用Microsoft公司的visualstudio开发工具,利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。 关键词:sql2000,c#,数据一致性,信息管理系统。 Abstract:Student achievement management system is representative information management system (MIS) , whose development mainly consists of two aspects: building and maintain of backward database and development of foreward application program.To the former, we must build a database who has great data-consistence,great data-completion and good data-security. But to the later,that the application program has enough functions and is case to use is required. After analysing so-called condition, we decide to use visualstudio of Microsoft corporation, exploitation implement, utilizing the implement who provides all kinds of face to the object, especially the data window of intellectualized which is able to controlit by concise and convenient,first,we should build the systerm application prototype in a short time,then, carry out the system needing iteration , amending and improving unceasingly, until the consumer satisfied with the viable system which is formed. Key words:sql2000,c# , data window , information management system. 一、引言 1.1 项目开发背景 几年前,各个学校的学生成绩管理基本上都是靠手工进行,随着各个学校的规模增大,有关学生成绩管理工作所涉及的数据量越来越大,有的学校不得不靠增加人力、物力来进行学生成绩管理.但手工管理具有效率底、易出错、对学校的管理提供决策信息较为困难等缺点.我校尽管部分学院或系已开出学生成绩管理系统,但开发的系统不具有通用性,所以我想借本次毕业设计之际,开发一个不仅适用本校各系而且适用于其它各校的通用高校学生成绩管理系统. 采用软件工程的指导方法,选用C/S模式设计的方案,应用SQL Server 2000数据库管理系统,C#程序设计语言,Visual Studio.NET 2003开发工具等开发出来的基于WINDOWS系列的学生学籍管理系统.该系统面向各部门和全体学生,实现对学生成绩情况、学籍情况等的计算机管理。系统支持学生查询自己的学籍信息和成绩信息,还可以修改自己的密码,而教师可以对学生的学籍信息和成绩信息进行添加、删除和修改等的操作,同时本系统支持报表的输出打印功能。减少了部门之间工作的中间环节,提高了跨部门管理的效率。 1.2 项目开发的目标 建立学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高办学效益和现代化水平.帮助广大教师提高工作效率,实现学生成绩信息管理工作流程的系统化、规范化和自动化. 1.3 项目提出的意义 现在我国的大中专院校的学生成绩管理水平普遍不高,有的还停留在纸介质基础上,这种管理手段已不能适应时代的发展,因为它浪费了了许多的人力和物力.在当今信息时代这种传统的管理方法必然被计算机为基础的信息管理系统所代替.如果本系统能被学校所采用,将会改变以前靠手工管理学生成绩的状况,可以树立良好的办学形象,提高工作效率. 二、常用的软件开发方法 2.1 结构化系统开发方法 2.1.1 结构化系统开发的基本思想 用系统工程的思想和工程化的方法,按照用户至上的原则,采取结构化、模块化、自顶向下的方法对系统进行分析与设计。 2.1.2 结构化系统开发方法的特点 1.强调用户的参与。 2.深入调查研究。 3.使用结构化、模块化方法。 4.严格按照阶段进行。 5.开发过程工程化。 2.1.3 结构化系统开发方法的阶段划分 1、系统规划阶段 根据用户的系统开发要求,初步调查,明确问题,然后进行可行性研究。 2、系统分析阶段 系统分析阶段的主要任务是分析业务流程,分析数据与数据流程,提出新系统的逻辑方案。 3、系统设计阶段 系统时间阶段的主要任务是总体结构设计和模块设计。根据设计要求选择合适的软硬件设备,进行代码、用户界面、文件、数据库、网络结构的设计。 4、系统实施阶段 系统实施阶段的主要任务包括编程、操作人员培训以及数据准备,然后投入试运行。 5、系统运行阶段 系统运行阶段的主要任务是进行系统的日常运行管理、评价、审计工作。 2.2 原型开发方法 2.2.1 原型的概念 原型开发方法首先有用户提出开发要求,开发人员识别和归纳用户需求,根据识别、归纳的结果,构造出一个原型,然后同用户一起评价这个原型。如果根本不行,则重新构造原型;如果不满意,则修改原型,直到用户满意为此。 原型按照建立的目的不同可分为抛弃型原型和增量渐进型原型。 2.2.2 抛弃型原型 抛弃型原型主要用于验证软件需求以及设计方案和算法,这是当前使用较广泛的原型。 抛弃型原型开发模型如下:
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值