1、项目十二 学生成绩管理系统的设计,本项目内容,学生成绩管理系统功能的分析与设计 学生成绩管理系统功能的实现 系统功能实现中用到的C语言知识,12.1 背景知识,学生成绩管理系统是教育单位不可缺少的部分,每个学期末都要进行期末考试成绩的统计分析工作,而且这些工作都要在期末考试结束后一个星期左右的时间内完成。大量的成绩数据的统计分析工作如果只靠人工完成,既费力又费时,还容易出错。利用计算机进行学生成绩管理势在必行。因此,需要开发出一个能满足学校对学生成绩进行输入、输出、删除、修改、查询、排序、退出的功能完善的管理系统,它的内容对于学校的决策者和管理者来说都至关重要。,12.2 项目设计与准备,项目
2、描述为了更进一步提高学生综合运用C语言各个方面的知识解决实际问题能力,从而提高学生运用C语言开发应用系统的能力,本项目设定了五个任务:任务一目,是理解系统功能的分析与设计;任务二,目的是理解系统功能的实现;任务三,目的是掌握程序的模块划分;任务四,目的是理解系统的源程序;任务五,目的是掌握程序功能演示。,12.2 项目设计与准备,项目准备计算机(安装好Windows 操作系统和VC+6.0)方法及步骤打开VC+6.0开发环境,新建工程,在里面输入源代码,并按照相关的编译连接运行步骤得到相应的结果。,12.3 项目实施,任务一:理解系统功能的分析与设计 1.系统功能分析 成绩信息录入功能:每一条
3、记录包括一个学生的学号、姓名、不大于5门课成绩、课程总分、课程平均分。并且可以一次完成若干条记录的输入。成绩信息显示浏览功能:完成全部学生记录的显示。成绩信息的删除:按学号进行删除某学生的成绩记录信息。,12.3 项目实施,成绩信息修改功能:通过学生的学号,查询出要修改的记录,依次修改相应字段的值。查询功能:完成按姓名查找学生记录,并显示。排序功能:按学生课程成绩的总分进行排序,包括升序排列和降序排列。退出功能:退出当前成绩管理系统。应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。,12.3 项目实施,2.系统功能设计的核心数据结构#include #include
4、 #include #include #define COURSE_NUM 5 /* 最多的考试科目 */ /* 定义学生成绩信息的结构体 */ struct student int number; /* 每个学生的学号 */ char name15; /* 每个学生的姓名 */ int scoreCOURSE_NUM; /* 每个学生M门功课的成绩 */ int sum; /* 每个学生的总成绩 */,12.3 项目实施,float average; /* 每个学生的平均成绩 */ struct student *next; typedef struct student STU; char
5、Menu(void); /* 菜单实现函数 */ int Ascending(int a, int b); /* 升序排列函数 */ int Descending(int a, int b); /* 升序排列函数 */ void IntSwap(int *pt1, int *pt2); /* 两个整型数据交换函数 */ void CharSwap(char *pt1, char *pt2); /* 两个字符串类型数据交换函数 */ void FloatSwap(float *pt1, float *pt2); /* 两个实型数据交换函数 */ STU *DeleteNode(STU *head
6、, int nodeNum); /* 删除记录的函数 */ STU *ModifyNode(STU *head, int nodeNum, const int m); /* 修改记录的函数 */,12.3 项目实施,STU *SearchNode(STU *head, int nodeNum); /* 查找记录节点的函数 */ STU *AppendScore(STU *head, const int m); /* 增加记录的函数 */ void TotalScore(STU *head, const int m); /* 计算课程总分的函数 */ void PrintScore(STU *h
7、ead, const int m); /* 显示课程分数的函数 */ STU *DeleteScore(STU *head, const int m); /* 删除课程分数的函数 */ void ModifyScore(STU *head, const int m); /* 修改课程分数的函数 */ void SortScore(STU *head, const int m, int (*compare)(int a, int b); /* 对记录按照课程的总分进行排序的函数 */ void SearchScore(STU *head, const int m); /* 查找课程分数的函数 *
8、/ void DeleteMemory(STU *head); /* 释放内存空间的函数 */ void InputNodeData(STU *pNew, int m); /* 输入记录各个字段数据的函数 */ STU *AppendNode(STU *head, STU *pNew); /* 插入新记录的函数 */,12.3 项目实施,任务二:理解系统功能的实现系统功能的实现主要是实现对学生成绩的信息输入、输出、删除、修改、查询、排序、退出的功能。将学生的成绩信息进行记录,信息内容包含:(1)学生的学号;(2)学生的姓名;(3)学生各门课程的成绩。系统功能实现主要从程序的模块划分、系统的源程
9、序和程序功能演示三个部分加以说明。详细内容见教材任务三、任务四和任务五。,12.3 项目实施,任务三:掌握程序的模块划分程序模块的划分 成绩信息录入模块:输入信息包括学生的姓名、学号以及学生的课程成绩等相关信息,并且可以一次完成若干条记录的输入。可用函数STU *AppendScore(STU *head, const int m)来实现。 成绩信息显示浏览模块:完成全部学生记录的显示。可用函数void PrintScore(STU *head, const int m)来实现。 成绩信息的删除模块:按学号进行删除某学生的成绩记录信息。可用函数STU *DeleteScore(STU *hea
10、d, const int m)来实现。,12.3 项目实施,成绩信息修改模块:通过学生的学号,查询出要修改的记录,依次修改相应字段的值。可用函数void ModifyScore(STU *head, const int m)来实现。 查询模块:完成按姓名查找学生记录,并显示。可用函数void SearchScore(STU *head, const int m)来实现。 排序模块:按学生课程成绩的总分进行排序,包括升序排列和降序排列。升序排列用函数void SortScore(head, m, Ascending)来实现;降序排列用函数void SortScore(head, m, Desce
11、nding)来实现 退出模块:退出当前成绩管理系统。可以用函数exit(0)和void DeleteMemory(STU *head)来实现。,12.3 项目实施,系统模块划分流程图如下所示:,12.3 项目实施,任务四:理解系统的源程序 参考教材任务五:掌握程序功能演示参考教材,12.4 项目小结,经过对学生成绩管理系统的设计,我们总结出如下要点:要对系统的功能和要求做出详细的分析,并合理分解任务。 把分解出来的子任务,给出一个个相对独立的模块。 在设计一个模块之前,要简单构想一下总界面的显示情况。 针对构想出来的界面进行菜单程序的编写。,12.5 理论分析,通过实际开发一个具体的学生成绩管
12、理系统操作,是学生学会C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。在具体的操作中,使该学期所学的C语言的理论知识得到巩固,例如开发过程中运用了C语言程序控制语句、函数、指针、结构体等方面的知识,达到灵活运用C语言的理论知识开发简单的管理信息系统的基本目的,同时发现自己的不足之处 。,12.6 工程实训,实训题目:学生通讯录管理系统设计:设计一个实用的小型学生通讯录管理系统程序,具有增加、查询、修改、删除和退出功能。由学号、姓名、性别、年龄、出生年月、联系电话、E-mail和通信地址组成,姓名可以由字符和数字混合编码,电话号码可由字符和数字组成。实现如下功能:,12.6 工程实训,(1)系统以菜单方式工作。 (2)信息增加功能。 (3)信息删除功能。 (4)信息查询功能。 (5)信息打印功能。 (6)信息修改功能。 (7)系统退出功能。,