第10章 综合应用程序设计_第1页
第10章 综合应用程序设计_第2页
第10章 综合应用程序设计_第3页
第10章 综合应用程序设计_第4页
第10章 综合应用程序设计_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第10章 综合应用程序设计问题问题原由原由从从第章介绍了第章介绍了C/C+程序设计的基本内容。程序设计的基本内容。怎样从软件工程的角度进行综合应用程序设计呢?怎样从软件工程的角度进行综合应用程序设计呢?本章力图通过综合应用程序设计实例,全面了解和本章力图通过综合应用程序设计实例,全面了解和掌握开发应用程序的全过程。掌握开发应用程序的全过程。本章通过四本章通过四个实例个实例项目项目( (电子电子万年历、万年历、俄罗斯方块俄罗斯方块游戏、游戏、图书借阅管理系统、学生成绩管理图书借阅管理系统、学生成绩管理系统系统) )的的程序设计,全面概括了程序设计,全面概括了C语言的所有内容以及语言的所有内容以

2、及C+语言的初步应用,语言的初步应用,教学教学重点重点能力能力要求要求掌握掌握: : 应用程序的基本设计方法的开发步骤。应用程序的基本设计方法的开发步骤。了解:了解:通过应用成绩设计,了解软件工程概念。通过应用成绩设计,了解软件工程概念。熟悉熟悉: : 编写程序代码、程序调试和程序测试方法。编写程序代码、程序调试和程序测试方法。 2 10.1 电子万年历电子万年历 10.4 学生成绩管理系统学生成绩管理系统 10.3 图书借阅管理系统图书借阅管理系统 10.2 俄罗斯方块游戏俄罗斯方块游戏310.1电子万年历 电子万年历在计算机系统中、手机里、电子词典中、电子万年历在计算机系统中、手机里、电子

3、词典中、MP4播放器中、办公桌上,甚至家庭摆设等随处可见。播放器中、办公桌上,甚至家庭摆设等随处可见。 掌握语言程序设计的基本知识、基本思想和基本应用,掌握语言程序设计的基本知识、基本思想和基本应用,熟悉了解开发应用系统的基本方法。熟悉了解开发应用系统的基本方法。 标准输入标准输入/输出函数的应用;输出函数的应用; 顺序结构、选择结构、循环结构的程序设计方法;顺序结构、选择结构、循环结构的程序设计方法; 系统库函数的应用方法;系统库函数的应用方法; 用户自定义函数的定义、声明及调用方法等。用户自定义函数的定义、声明及调用方法等。 按功能模块进行设计、组织、调试的基本方法。按功能模块进行设计、组

4、织、调试的基本方法。 410.1.2系统需求分析 电子万年历用来提供查询电子万年历用来提供查询,主要实现以下三个查询功能主要实现以下三个查询功能: 功能功能1:要求从键盘输入年份,输出该年要求从键盘输入年份,输出该年12个月的日历。个月的日历。 功能功能2:要求从键盘输入年份和月份,输出该月的日历。要求从键盘输入年份和月份,输出该月的日历。 功能功能3:要求从键盘输入年要求从键盘输入年、月月、日日, 输出该日是星期几输出该日是星期几。 日历显示功能:日历显示功能:自动显示系统日期所在月份的月历,自动显示系统日期所在月份的月历,并能突出显示当期日期。并能突出显示当期日期。 日期查询功能:日期查询

5、功能:显示查询日期、月份、是否为闰年。显示查询日期、月份、是否为闰年。 支持键盘操作:支持键盘操作:通过键盘调整年份、月份和日期。通过键盘调整年份、月份和日期。 参数排错功能:参数排错功能:能对输入的日期进行合法性检查。能对输入的日期进行合法性检查。510.1.3系统总体设计根据以上需求分析,系统应有功能控制、打印输出、日根据以上需求分析,系统应有功能控制、打印输出、日历显示和键值获取等历显示和键值获取等4个功能模块,系统结构如图个功能模块,系统结构如图101所示所示。 图图 101 系统功能模块系统功能模块功功能能控控制制模模块块打打印印输输出出模模块块日日历历显显示示模模块块键键值值获获取

6、取模模块块万年历系统万年历系统610.1.3系统总体设计 本系统的结构由本系统的结构由4个模块所组成,由主函数个模块所组成,由主函数main()实行控实行控制,按照系统工作顺序,其工作流程如图制,按照系统工作顺序,其工作流程如图102所示。所示。主控函数主要对输入参数进行检查,以保证输入参数正主控函数主要对输入参数进行检查,以保证输入参数正确,不会对后续程序造成影响;其次,对输入的年份和月份确,不会对后续程序造成影响;其次,对输入的年份和月份进行处理和计算,判断输入年份是否为闰年。进行处理和计算,判断输入年份是否为闰年。图图 10102 2 万年历设计流程图万年历设计流程图显示当日日期显示当日

7、日期开开 始始结结 束束显示当月第显示当月第1 1天是星期几天是星期几是否为闰年是否为闰年输入输入yearyear、monthmonth、dayday输入合法吗?输入合法吗?710.1.3系统总体设计 功能控制模块:功能控制模块:用来实现日期合法性检查、闰年判断用来实现日期合法性检查、闰年判断和星期计算。和星期计算。 打印输出模块:打印输出模块:用来实现输出显示和打印指定个数的用来实现输出显示和打印指定个数的空格、打印分隔线、打印用户使用手册、打印当前日期你对空格、打印分隔线、打印用户使用手册、打印当前日期你对应的星期以及打印给定的星期。应的星期以及打印给定的星期。 日历显示模块:日历显示模块

8、:用来实现日历生成和显示。用来实现日历生成和显示。 键值获取模块:键值获取模块:主要用于对键盘操作的响应,由函数主要用于对键盘操作的响应,由函数void getKey Value()获取按键值,根据键值调整当前日期,获取按键值,根据键值调整当前日期,并调用日历显示模块中的并调用日历显示模块中的showCalendar()函数来实现日历生函数来实现日历生成和输出,其实现过程如图成和输出,其实现过程如图104所示。所示。 810.1.3系统总体设计 本程序没有自定义结构体,仅定义了全局变量。本程序没有自定义结构体,仅定义了全局变量。 struct date sysTime:系统结构体,用于存储系统

9、系统结构体,用于存储系统日期。该结构体有日期。该结构体有3个成员,分别是个成员,分别是da_year、da_mon和和da_day,分别表示年、月和日。,分别表示年、月和日。 int currentYear:表示当前的年份。表示当前的年份。 int currentMonth:表示当前的月份。表示当前的月份。 int currentDay:表示当前的日期。表示当前的日期。 int n_currentMon:表示当前月的天数。表示当前月的天数。 int n_lastMon:表示上一个月的天数。表示上一个月的天数。910.1.4 系统功能实现 电子万年历系统设计项目的实现分为项目建立、项目需电子万年

10、历系统设计项目的实现分为项目建立、项目需求分析、项目算法设计、代码编写与调试、代码测试、代码求分析、项目算法设计、代码编写与调试、代码测试、代码完善等多个环节。完善等多个环节。 在进行本项目的程序设计时,建议按教材在进行本项目的程序设计时,建议按教材358页表页表101定义定义模块中的函数,然后进行调试。模块中的函数,然后进行调试。 根据模块结构,按模块进行编程,并在每个程序代码前根据模块结构,按模块进行编程,并在每个程序代码前写上模块显示结构。写上模块显示结构。 参数输入与验证:参数输入与验证:对输入参数作验证,若输入参数对输入参数作验证,若输入参数不合法,则重新输入,允许输入不合法,则重新

11、输入,允许输入3次,若次,若3次均不正确,则结次均不正确,则结束程序束程序 。1010.1.4 系统功能实现 闰年判断:闰年判断:判断判断year为闰年还是平年,为后续程序设为闰年还是平年,为后续程序设计作判断。仿照算法设计中的公式,写出闰年判断函数计作判断。仿照算法设计中的公式,写出闰年判断函数leapyear()。 计算是星期几:计算是星期几:根据根据dayNum()函数返回的结果,计函数返回的结果,计算算month中的星期值。中的星期值。 计算是第几天:计算是第几天:根据输入的根据输入的month值,计算值,计算month第第一天在该年中是第多少天。一天在该年中是第多少天。 易修改:易修

12、改:为了便于日后修改,每个函数应在入口处加为了便于日后修改,每个函数应在入口处加入较详细的注释。入较详细的注释。 易记忆:易记忆:给变量命名时,名字中尽可能多地包含必要给变量命名时,名字中尽可能多地包含必要的信息。的信息。1110.1.4 系统功能实现 易阅读:易阅读:当结构嵌套时,内层结构采用缩进形式,以当结构嵌套时,内层结构采用缩进形式,以明确结构的界限。明确结构的界限。 易理解:易理解:尽量采用容易理解的表达式。尽量采用容易理解的表达式。 易排错:易排错:编码最基本的要求是语法和逻辑的正确。编码最基本的要求是语法和逻辑的正确。 异常处理:异常处理:通过输入错误数据格式验证工程代码对异通过

13、输入错误数据格式验证工程代码对异常输入的处理能力。常输入的处理能力。 平年平年2月验证:月验证:输入输入2011-2能验证千年能验证千年2月的打印输出。月的打印输出。 闰年其它月份验证:闰年其它月份验证:输入闰年的其它月份如输入闰年的其它月份如2012-11可以验证输出结果。可以验证输出结果。 平年其它月份验证:平年其它月份验证:输入平年其它月份如输入平年其它月份如2011-11可可以验证输出结果。以验证输出结果。 1210.2 俄罗斯方块游戏 本项目旨在训练学生的基本编程能力和游戏开发技巧,本项目旨在训练学生的基本编程能力和游戏开发技巧,熟悉熟悉C语言图形模式下的编程。本项目中涉及语言图形模

14、式下的编程。本项目中涉及C语言的结构语言的结构体、数组、时钟中断及绘图等方面的知识。体、数组、时钟中断及绘图等方面的知识。 这里介绍开发俄罗斯方块游戏的实现方法,用这里介绍开发俄罗斯方块游戏的实现方法,用C语言编语言编程实现俄罗斯方块游戏涉及的主要知识点有以下几个方面:程实现俄罗斯方块游戏涉及的主要知识点有以下几个方面:结构体、数组、时钟中断及绘图等方面的知识。结构体、数组、时钟中断及绘图等方面的知识。 应用结构体类型编程;应用结构体类型编程; 应用数组编程;应用数组编程; 时钟中断系统的应用方法;时钟中断系统的应用方法; C语言的绘图知识等;语言的绘图知识等;1310.2.2 系统需求分析

15、游戏本身是一种娱乐,因此,必须使游戏者在游戏过程游戏本身是一种娱乐,因此,必须使游戏者在游戏过程中感到有趣。与此同时,通过这种中感到有趣。与此同时,通过这种“娱乐娱乐”,应能对游戏者,应能对游戏者在智能、创造性等方面具有一定的启迪、激发、引导作用。在智能、创造性等方面具有一定的启迪、激发、引导作用。 要使游戏者感到该游戏格外有趣,在游戏操作过程中,要使游戏者感到该游戏格外有趣,在游戏操作过程中,游戏系统应具有以下功能和特点:游戏系统应具有以下功能和特点: 游戏操作引导:游戏操作引导:在游戏过程中,在当前游戏画面中,在游戏过程中,在当前游戏画面中,出现下一个游戏方块,这样有利于游戏者控制游戏的策

16、略。出现下一个游戏方块,这样有利于游戏者控制游戏的策略。 方便任意操作:方便任意操作:能实现对游戏方块的左、右、下、能实现对游戏方块的左、右、下、上的快速移动、下落和旋转。上的快速移动、下落和旋转。1410.2.2 系统需求分析 画面显示更新:画面显示更新:当游戏方块左右移动、下落、旋转时,当游戏方块左右移动、下落、旋转时,要清除先前的游戏方块。要清除先前的游戏方块。 具有成绩记录:具有成绩记录:在游戏过程中自动计算游戏分数,以在游戏过程中自动计算游戏分数,以激励游戏者具有技能性的操作。激励游戏者具有技能性的操作。 游戏帮助功能:游戏帮助功能:游戏者进入游戏后,系统具有随时跟游戏者进入游戏后,

17、系统具有随时跟踪本游戏如何操作的友情提示。踪本游戏如何操作的友情提示。1510.2.3 系统总体设计 根据以上需求分析,系统应有游戏方块预览功能、控制根据以上需求分析,系统应有游戏方块预览功能、控制功能、显示更新功能、速度更新功能、帮助功能等,其模块功能、显示更新功能、速度更新功能、帮助功能等,其模块结构如图结构如图105所示:所示:图图 105 俄罗斯方块游戏功能描述图俄罗斯方块游戏功能描述图方方块块预预览览模模块块方方块块控控制制模模块块显显示示更更新新模模块块分分数数更更新新模模块块俄罗斯方块游戏俄罗斯方块游戏帮帮助助功功能能模模块块16 方块预览模块:方块预览模块:在游戏过程中,当在游

18、戏底板中出在游戏过程中,当在游戏底板中出现一个游戏方块时现一个游戏方块时,必须在游戏方块预览区域中出现下一个游必须在游戏方块预览区域中出现下一个游戏方块,这样有利于游戏玩家控制游戏的策略。戏方块,这样有利于游戏玩家控制游戏的策略。 方块控制模块:方块控制模块:通过各种条件的判断,实现对游戏通过各种条件的判断,实现对游戏方块的左移、右移、快速下移、自由下落、旋转功能以及行方块的左移、右移、快速下移、自由下落、旋转功能以及行满消除行的功能。满消除行的功能。 显示更新模块:显示更新模块:当游戏方块左右移动、下落、旋转当游戏方块左右移动、下落、旋转时时,要清除先前的游戏方块要清除先前的游戏方块,用新坐

19、标重绘游戏方块。当消除用新坐标重绘游戏方块。当消除满行时,要重绘游戏底板的当前状态。满行时,要重绘游戏底板的当前状态。 速度更新模块:速度更新模块:在游戏者进行游戏过程中,需要按在游戏者进行游戏过程中,需要按照一定的游戏规则给游戏者计算游戏分数。照一定的游戏规则给游戏者计算游戏分数。 帮助功能模块:帮助功能模块:游戏者进入游戏后,将有对本游戏游戏者进入游戏后,将有对本游戏如何操作的温馨提示。如何操作的温馨提示。10.2.3 系统总体设计17 主控函数主控函数main( )实现对整个程序的运行控流程制以及相实现对整个程序的运行控流程制以及相关功能模块的调用关功能模块的调用。 整个游戏的操作是通过

20、以下整个游戏的操作是通过以下5个功能模块来实现的。个功能模块来实现的。 方块预览模块:方块预览模块:游戏方块将在如图游戏方块将在如图107所示的所示的44的正方形小方块中预览。的正方形小方块中预览。 方块控制模块:方块控制模块:这是该游戏开发的重点和难点部分。这是该游戏开发的重点和难点部分。 左移的实现过程。左移的实现过程。 右移的实现过程右移的实现过程 下移的实现过程下移的实现过程 旋转的实现过程旋转的实现过程10.2.3 系统总体设计图图10107 7 游戏方块预览游戏方块预览18 显示更新模块:显示更新模块:清除游戏方块的过程是先画轮廓再填清除游戏方块的过程是先画轮廓再填充的方式,使用背

21、景色填充小方块,然后使用前景色画一个充的方式,使用背景色填充小方块,然后使用前景色画一个游戏底板中的小方块。游戏底板中的小方块。 分数更新模块:分数更新模块:当判断出一行满时当判断出一行满时,score变量加一固变量加一固定值定值(如如10),可以把等级,可以把等级level看作是速度看作是速度speed 游戏底板游戏底板BOARD结构体结构体 游戏方块游戏方块SHAPE结构体结构体 SHAPE结构数组结构数组10.2.3 系统总体设计1910.2.4 系统功能实现 在进行本项目的程序设计时,建议按教材在进行本项目的程序设计时,建议按教材367页表页表102定义模块中的函数,然后进行调试。定义

22、模块中的函数,然后进行调试。 俄罗斯方块程序按模块化编程,分为俄罗斯方块程序按模块化编程,分为4个功能模块个功能模块 。 主函数主函数main():实现对整个程序的运行控制。实现对整个程序的运行控制。 时钟中断处理:时钟中断处理:速度越快,时间中断的间隔也就越短。速度越快,时间中断的间隔也就越短。 成绩、速度及帮助的显示:成绩、速度及帮助的显示:为了帮助游戏者操作,必为了帮助游戏者操作,必须提供帮助,为了鼓励游戏者,必须显示游戏成绩与速度。须提供帮助,为了鼓励游戏者,必须显示游戏成绩与速度。 满行处理:满行处理:当游戏方块不能满足相关操作条件时,可当游戏方块不能满足相关操作条件时,可以调用以下

23、函数来处理。以调用以下函数来处理。2010.3 图书借阅管理系统 设计一个图书借阅管理系统,需要使用函数、数组、指设计一个图书借阅管理系统,需要使用函数、数组、指针、结构体、链表和文件等,基本上涵盖了针、结构体、链表和文件等,基本上涵盖了C语言程序设计语言程序设计的所有基础阶段的知识。的所有基础阶段的知识。 函数的定义与调用;函数的定义与调用; 指针变量做为函数参数;指针变量做为函数参数; 结构体数组的应用;结构体数组的应用; 字符串函数的应用;字符串函数的应用; 文件的打开、关闭及读文件的打开、关闭及读/写操作等。写操作等。2110.3.2 系统需求分析 图书借阅管理系统中的实体主要有图书和

24、用户。对一般图书借阅管理系统中的实体主要有图书和用户。对一般用户来说,主要功能有查找图书、浏览图书、借书、还书等;用户来说,主要功能有查找图书、浏览图书、借书、还书等;对管理员来说,除了一般用户的权限外,还具备有管理功能,对管理员来说,除了一般用户的权限外,还具备有管理功能,即注册图书、注册用户、注销图书、注销用户等维护管理功即注册图书、注册用户、注销图书、注销用户等维护管理功能。能。 一个功能比较完善、具有实用价值的图书借阅管理系统,一个功能比较完善、具有实用价值的图书借阅管理系统,从业务流程来讲,要求能实现用户的注册、注销、查找、浏从业务流程来讲,要求能实现用户的注册、注销、查找、浏览、借

25、书、还书,图书的注册、注销、查找、浏览、外借和览、借书、还书,图书的注册、注销、查找、浏览、外借和归还等。因此,应具有以下归还等。因此,应具有以下6项基本功能。项基本功能。 用户登录:用户登录:系统用户分为管理员和学生。系统用户分为管理员和学生。 2210.3.2 系统需求分析 图书信息管理:图书信息管理:包括;书号、书名、作者、图书分类、包括;书号、书名、作者、图书分类、出版社、出版时间、单价、总量和库存量。出版社、出版时间、单价、总量和库存量。 学生信息管理。学生信息管理。包括:输入学生信息、保存学生信息、包括:输入学生信息、保存学生信息、修改学生信息、添加学生信息、删除和输出学生信息。修

26、改学生信息、添加学生信息、删除和输出学生信息。 图书查询功能:图书查询功能:图书查询分为:按书名查询、按作者图书查询分为:按书名查询、按作者查询查询、按图书分类查询按图书分类查询、按出版社查询和按出版时间查询。按出版社查询和按出版时间查询。 借书功能:借书功能:借书时,先判断学生是否有空闲的借书卡,借书时,先判断学生是否有空闲的借书卡,若有空闲的借书卡,则要求学生输入所借图书的书号。若有空闲的借书卡,则要求学生输入所借图书的书号。 还书功能:还书功能:还书时,先检查学生的借书卡,然后要求还书时,先检查学生的借书卡,然后要求学生输入所还图书的书号,将对应借书卡上的记录清零,并学生输入所还图书的书

27、号,将对应借书卡上的记录清零,并修改该书的库存量。修改该书的库存量。2310.3.3 系统总体设计 根据上述需求分析,图书借阅管理系统应具有用户登录根据上述需求分析,图书借阅管理系统应具有用户登录管理模块、图书信息管理模块、学生信息管理模块、图书查管理模块、图书信息管理模块、学生信息管理模块、图书查询管理模块、图书借阅管理模块,其结构如图询管理模块、图书借阅管理模块,其结构如图109所示。所示。 用户登录管理模块:用户登录管理模块:用于实现管理员和学生登录管用于实现管理员和学生登录管理。理。 图书信息管理模块:图书信息管理模块:用于实现图书信息的输入、保用于实现图书信息的输入、保存、修改、添加

28、、删除、输出等。存、修改、添加、删除、输出等。 学生信息管理模块:学生信息管理模块:用于实现学生信息的输入、保用于实现学生信息的输入、保存、修改、添加、删除、输出等。存、修改、添加、删除、输出等。 图书查询管理模块:图书查询管理模块:用于实现按不同条件对图书信用于实现按不同条件对图书信息进行查询。息进行查询。 图书借阅管理模块:图书借阅管理模块:用于实现图书的借阅和归还管用于实现图书的借阅和归还管理。理。24 图书借阅管理系统由图书借阅管理系统由5个模块组成,所有模块都位于主个模块组成,所有模块都位于主函数函数main()之下,用户通过主函数中提供的菜单选择相应的之下,用户通过主函数中提供的菜

29、单选择相应的模块,执行具体的功能操作,因此,主函数的设计是极为重模块,执行具体的功能操作,因此,主函数的设计是极为重要的要的。 用户登录管理模块:用户登录管理模块:是进入图书借阅管理系统的必备是进入图书借阅管理系统的必备模块,主要实现两项功能,一是用来完成管理员登录工作模块,主要实现两项功能,一是用来完成管理员登录工作 ;二是用来完成学生登录工作二是用来完成学生登录工作 。 图书信息管理模块:图书信息管理模块:用于实现图书信息的输入、保存、用于实现图书信息的输入、保存、修改、添加、删除、输出等修改、添加、删除、输出等6个方面的操作。个方面的操作。 学生信息管理模块:学生信息管理模块:其功能与图

30、书信息管理模块相似,其功能与图书信息管理模块相似,它用于实现学生信息的输入、保存、修改、添加、删除、输它用于实现学生信息的输入、保存、修改、添加、删除、输出等出等6个方面的操作。个方面的操作。 10.3.3 系统总体设计25 图书信息查询模块:图书信息查询模块:用于实现按不同条件对图书信息用于实现按不同条件对图书信息进行查询。进行查询。 图书借阅管理模块:图书借阅管理模块:主要是对图书借阅卡的信息管理,主要是对图书借阅卡的信息管理,包括图书借阅管理和图书归还管理。包括图书借阅管理和图书归还管理。 该系统可以定义四种结构体类型,包括日期类型、借书该系统可以定义四种结构体类型,包括日期类型、借书卡

31、类型、图书类型和学生类型,其中在图书类型中要使用日卡类型、图书类型和学生类型,其中在图书类型中要使用日期类型,而在学生类型中要使用日期和借书卡类型。期类型,而在学生类型中要使用日期和借书卡类型。10.3.3 系统总体设计2610.3.4 系统功能实现 为便于设计出图书借阅管理系统,这里给出图书借阅管为便于设计出图书借阅管理系统,这里给出图书借阅管理系统的函数功能描述以及模块化编程,供设计时参考。理系统的函数功能描述以及模块化编程,供设计时参考。 在进行本项目程序设计时,建议按教材在进行本项目程序设计时,建议按教材372页表页表103定定义模块中的函数,然后进行调试。义模块中的函数,然后进行调试

32、。 图书借阅管理系统是按图书借阅管理系统是按5个模块进行设计的,各模块由多个模块进行设计的,各模块由多个自定义函数或系统函数组成。个自定义函数或系统函数组成。 用户登录管理模块:用户登录管理模块:是进入图书借阅管理系统的模块,是进入图书借阅管理系统的模块,用来完成管理员登录工作和完成学生登录工作,分别由函数用来完成管理员登录工作和完成学生登录工作,分别由函数ManagerLogin()和和StudentLogin()来实现,并由来实现,并由main函数调函数调用。用。2710.3.4 系统功能实现 图书信息管理模块:图书信息管理模块:实行图书信息的输入、保存、修实行图书信息的输入、保存、修改、

33、添加、删除、输出等改、添加、删除、输出等6个方面的操作。个方面的操作。 学生信息管理模块:学生信息管理模块:实行学生信息的输入、保存、修实行学生信息的输入、保存、修改、添加、删除、输出等改、添加、删除、输出等6个方面的操作。个方面的操作。 图书信息查询模块:图书信息查询模块:实行按不同条件对图书信息进行实行按不同条件对图书信息进行查询。查询。 图书借阅管理模块:图书借阅管理模块:实行图书借阅管理和图书归还管实行图书借阅管理和图书归还管理。理。在实行模块化编程的过程中,首先考虑的是主控函数在实行模块化编程的过程中,首先考虑的是主控函数main()的编程,系统操作界面、各功能选项(菜单)、用户密码

34、设的编程,系统操作界面、各功能选项(菜单)、用户密码设置,都应安排在主控函数置,都应安排在主控函数main()中,重要功能模块和共用功中,重要功能模块和共用功能模块都应直接由主控函数能模块都应直接由主控函数main()控制,然后分层调用,这控制,然后分层调用,这样有利于系统的拓展、更新和维护。样有利于系统的拓展、更新和维护。 2810.4 学生成绩管理系统 学生成绩管理系统是数据库管理系统的又一个典型应用学生成绩管理系统是数据库管理系统的又一个典型应用实例。开发出高效实用的学生成绩管理系统,对学生成绩进实例。开发出高效实用的学生成绩管理系统,对学生成绩进行统一管理,实现学生成绩信息管理工作流程

35、的系统化、规行统一管理,实现学生成绩信息管理工作流程的系统化、规范化和自动化有着极为重要的作用和意义。范化和自动化有着极为重要的作用和意义。 本程序旨在训练读者的基本编程能力,了解管理信息系本程序旨在训练读者的基本编程能力,了解管理信息系统的开发流程,熟悉统的开发流程,熟悉C+的文件和单链表的各种基本操作。的文件和单链表的各种基本操作。具体为:具体为: 了解程序设计的过程和方法。了解程序设计的过程和方法。 掌握学生成绩管锂系统的设计思想和方法。掌握学生成绩管锂系统的设计思想和方法。 熟悉学生成绩管理系统的源代码。熟悉学生成绩管理系统的源代码。 通过学习提高程序设计的能力。通过学习提高程序设计的

36、能力。2910.4.1 系统设计目标 用用C+语言开发学生成绩管理系统,涉及的主要知识点语言开发学生成绩管理系统,涉及的主要知识点有以下几个方面:有以下几个方面: 选择结构与循环结构;选择结构与循环结构; 函数的建立;函数的建立; 数组的应用;数组的应用; 指针的应用;指针的应用; 数据的统计、查询、排序;数据的统计、查询、排序; 结构体类型、类和对象的使用;结构体类型、类和对象的使用; 链表的使用(利用链表,实现数据记录的插入、修改、链表的使用(利用链表,实现数据记录的插入、修改、删除、排序等操作);删除、排序等操作); 数据文件的建立、打开、读数据文件的建立、打开、读/写、关闭。写、关闭。

37、3010.4.2 系统需求分析 为了开发一个方便、适用的学生成绩管理系统,在设计为了开发一个方便、适用的学生成绩管理系统,在设计前必须对该系统的信息进行认真的调查研究。对系统的具体前必须对该系统的信息进行认真的调查研究。对系统的具体要求如下:要求如下: 成绩录入:成绩录入:输入学生的各项信息,并计算课程的平均输入学生的各项信息,并计算课程的平均成绩。成绩。 成绩查询:成绩查询:根据学号查询某学生各项成绩或全班学生根据学号查询某学生各项成绩或全班学生的成绩,输出各项查询结果。的成绩,输出各项查询结果。 成绩处理:成绩处理:修改原有成绩、添加新生的成绩、删除不修改原有成绩、添加新生的成绩、删除不需

38、保存的成绩。需保存的成绩。 成绩统计:成绩统计:统计每门课程各个分数段的人数、每门课统计每门课程各个分数段的人数、每门课程平均分数、不及格人数等。程平均分数、不及格人数等。3110.4.2 系统需求分析 成绩排许:成绩排许:对选定课程成绩、平均成绩、总分等进对选定课程成绩、平均成绩、总分等进行排序。行排序。 建立文本界面进行输入和选择。建立文本界面进行输入和选择。 数据以文件形式存储。数据以文件形式存储。 通过对学生成绩管理工作内容的分析,设计的学生成绩通过对学生成绩管理工作内容的分析,设计的学生成绩管理系统应包含以下功能。管理系统应包含以下功能。 成绩输入功能:成绩输入功能:输入学生的成绩信

39、息,包括班级、学输入学生的成绩信息,包括班级、学号、姓名及课程的成绩。数据可以从键盘输入,也可以从文号、姓名及课程的成绩。数据可以从键盘输入,也可以从文件中读取。件中读取。3210.4.2 系统需求分析 成绩输出功能:成绩输出功能:输出班级所有学生的成绩记录。成绩输出班级所有学生的成绩记录。成绩记录可以直接输出在屏幕上或保存到磁盘文件中。记录可以直接输出在屏幕上或保存到磁盘文件中。 成绩查询功能:成绩查询功能:查询指定学号学生的成绩及相关信息。查询指定学号学生的成绩及相关信息。 成绩处理功能:成绩处理功能:修改或删除指定学号学生的成绩记录,修改或删除指定学号学生的成绩记录,或增加学生的成绩记录

40、,或对学生成绩进行排序。或增加学生的成绩记录,或对学生成绩进行排序。 成绩统计功能:成绩统计功能:计算每门课程的平均分,统计每门课计算每门课程的平均分,统计每门课程不及格人数,以及相关信息。程不及格人数,以及相关信息。 通过需求分析,全面了解对应问题及其环境,为问题涉通过需求分析,全面了解对应问题及其环境,为问题涉及的信息、功能及系统行为建立模型,将用户需求精确化、及的信息、功能及系统行为建立模型,将用户需求精确化、完全化,最终形成设计方案及其规格说明。完全化,最终形成设计方案及其规格说明。 3310.4.3 系统结构设计 通过对学生成绩管理系统功能要求的分析,该系统的结通过对学生成绩管理系统

41、功能要求的分析,该系统的结构设计如图构设计如图1011所示。所示。图图 101011 11 学生成绩管理系统功能模块结构图学生成绩管理系统功能模块结构图从从键键盘盘输输入入从从文文件件读读入入修修改改成成绩绩记记录录删删除除成成绩绩记记录录插插入入成成绩绩记记录录排排序序成成绩绩记记录录按按姓姓名名查查询询按按学学号号查查询询输输出出至至屏屏幕幕输输出出至至文文件件不不及及格格的的人人数数各各课课程程平平均均分分输入记录输入记录管理模块管理模块处理记录处理记录管理模块管理模块查询记录查询记录管理模块管理模块输出记录输出记录管理模块管理模块学生成绩管理系统学生成绩管理系统统计记录统计记录管理模块

42、管理模块3410.4.3 系统结构设计 学生成绩管理系统是在主控函数的管理下进行的。主控学生成绩管理系统是在主控函数的管理下进行的。主控模块由模块由main()函数和函数和menu()函数组成,实现控制系统流程控函数组成,实现控制系统流程控制和显示菜单制和显示菜单。(本系统执行的主控流程图省略)。(本系统执行的主控流程图省略) main()函数:函数:控制整个系统的运行流程控制整个系统的运行流程,各功能模块各功能模块的函数均由主函数控制调用。在主函数中,通过循环执行一的函数均由主函数控制调用。在主函数中,通过循环执行一个个swibh开关语句来运行系统。在循环体中,根据用户输入开关语句来运行系统

43、。在循环体中,根据用户输入的数字调用相应函数完成相应功能。的数字调用相应函数完成相应功能。 menu()函数:函数:主要实现显示系统的菜单界面。在主要实现显示系统的菜单界面。在main函数的循环体内只需调用该函数函数的循环体内只需调用该函数, 即可达到循环显示菜即可达到循环显示菜单的功能,方便用户选择。按键时有效的输入为单的功能,方便用户选择。按键时有效的输入为09之间任之间任意数值。意数值。 3510.4.4 使用结构体设计 学生成绩信息由班级、学号、姓名、各门课程成绩、总学生成绩信息由班级、学号、姓名、各门课程成绩、总分和名次等数据构成。尽管学生成绩信息包含的数据是相同分和名次等数据构成。

44、尽管学生成绩信息包含的数据是相同的,但三种方法在数据类型的定义格式上是不一样的。的,但三种方法在数据类型的定义格式上是不一样的。 成绩输入模块用来完成从数据文件中读入学生成绩,也成绩输入模块用来完成从数据文件中读入学生成绩,也可以从键盘逐个输入学生成绩。成绩输入通过可以从键盘逐个输入学生成绩。成绩输入通过Input(Stu_Score s )函数、函数、Read(Stu Score s )函数实现成函数实现成绩输入。绩输入。 Input(Stu_Score s )函数:函数:用来通过键盘将学生成用来通过键盘将学生成绩信息输入到结构体数组中。绩信息输入到结构体数组中。 Read(Stu Scor

45、e s )函数:函数:用来从已有磁盘文件中用来从已有磁盘文件中读取成绩信息到结构体数组中。读取成绩信息到结构体数组中。 3610.4.4 使用结构体设计 成绩查询模块用来完成按学号和姓名查找学生,然后查成绩查询模块用来完成按学号和姓名查找学生,然后查找该学生的成绩信息。成绩查询通过找该学生的成绩信息。成绩查询通过Search函数、函数、Search_Name函数和函数和Search_Score函数实现。函数实现。 Search Num(Stu_Scores ,char stu_num15)函数:函数:用用来查找指定学号学生是否存在,若存在,则返回该学生所在来查找指定学号学生是否存在,若存在,则

46、返回该学生所在的位置。的位置。 Search_Name(Stu_Score s ,char stu_name10)函数:函数:用来查找指定姓名学生是否存在,若存在,则返回该学生所用来查找指定姓名学生是否存在,若存在,则返回该学生所在的位置。在的位置。 Search_Score(Stu_Score s )函数:函数:用来查找指用来查找指定学生的成绩信息,若存在该学生,则将其成绩显示在屏幕定学生的成绩信息,若存在该学生,则将其成绩显示在屏幕上。上。 3710.4.4 使用结构体设计 成绩处理通过成绩处理通过Modify函数、函数、Delete函数、函数、Insert函数、函数、Soft_Sum函数

47、和函数和Sort_Num函数来实现。函数来实现。 Modify(Stu_Score s )函数:函数:用来修改指定学号学用来修改指定学号学生的成绩信息。生的成绩信息。 Delete(Stu_Score s )函数:函数:用来删除指定学号学用来删除指定学号学生的成绩信息。生的成绩信息。 Insert(Stu_Scores )函数:函数:用来增加一个学生的成用来增加一个学生的成绩信息。绩信息。 Soft_Sum(Stu_Score s )函数:函数:用来按总分降序对用来按总分降序对所有学生进行排序,并给出名次。所有学生进行排序,并给出名次。 3810.4.4 使用结构体设计 Sort_Num(St

48、u_Score s )函数:函数:用来对所有学生按用来对所有学生按学号从小到大进行排序。学号从小到大进行排序。 成绩统计模块用来统计每门课的平均分和统计每门课程成绩统计模块用来统计每门课的平均分和统计每门课程不及格的人数,并显示在屏幕上。成绩统计通过不及格的人数,并显示在屏幕上。成绩统计通过Course_Ave函数和函数和Statistic_Course函数来实现。函数来实现。 Course_Ave(Stu_Score s )函数:函数:用来统计每门课用来统计每门课的平均分。的平均分。 Statistic_Course(Stu_Score s )函数:函数:用来统计用来统计每门课程不及格的人数

49、。每门课程不及格的人数。 3910.4.4 使用结构体设计 成绩输出模块主要完成两项任务:一是通过成绩输出模块主要完成两项任务:一是通过Output函数函数将所有学生的成绩信息显示在屏幕上;二是通过将所有学生的成绩信息显示在屏幕上;二是通过Save函数将函数将成绩信息保存至磁盘文件中。成绩信息保存至磁盘文件中。 Output(Stu Scores s )函数:函数:用来将所有学生的成用来将所有学生的成绩信息显示在屏幕上。绩信息显示在屏幕上。 Save(Stu_Score s )函数:函数:用来将成绩信息保存至用来将成绩信息保存至磁盘文件中。磁盘文件中。 4010.4.5 使用链表设计 使用链表

50、设计本系统时,只需关心指针有没有指到链表使用链表设计本系统时,只需关心指针有没有指到链表尾,而不必知道班级学生人数,故不需要实时记录人数。尾,而不必知道班级学生人数,故不需要实时记录人数。 成绩输入模块通过成绩输入模块通过Input(node *head) )函数和函数和Read(node *head)函数来实现信息输入。函数来实现信息输入。 Input(node *head)函数:函数:用来通过键盘将若干名学用来通过键盘将若干名学生的成绩信息输入到链表中,生成一条有序链表。生的成绩信息输入到链表中,生成一条有序链表。 Read(node *head)函数:函数:用来直接从文件中读取成用来直接

51、从文件中读取成绩信息到链表中,生成一条有序链表。绩信息到链表中,生成一条有序链表。 成绩查询模块通过成绩查询模块通过Search_Num(node *head,char stu_num15)函函数、数、Search Name(node *head,char stu_name15函数、函数、Search_Score(node *head)实现实现3种查询。种查询。4110.4.5 使用链表设计 Search_Num(node *head,char stu_num15)函数函数: 用来在链表中查找指定学号学生是否存在,若存在,则用来在链表中查找指定学号学生是否存在,若存在,则返回指向该学生所在结点的指针。返回指向该学生所在结点的指针。 Search Name(node *head,char stu_name15)函

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论