面向对象程序设计(C++):第10章 综合应用程序设计_第1页
面向对象程序设计(C++):第10章 综合应用程序设计_第2页
面向对象程序设计(C++):第10章 综合应用程序设计_第3页
面向对象程序设计(C++):第10章 综合应用程序设计_第4页
面向对象程序设计(C++):第10章 综合应用程序设计_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

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

§10.1

电子万年历

§10.4学生成绩管理系统

§10.3图书借阅管理系统

§10.2俄罗斯方块游戏本章教学内容综合应用程序设计§10.1

电子万年历

电子万年历在计算机系统中、手机里、电子词典中、MP4播放器中、办公桌上,甚至家庭摆设等随处可见。

1、系统设计的教学目标掌握C语言程序设计的基本知识、基本思想和基本应用,熟悉了解开发应用系统的基本方法。

2、系统开发的知识要点①标准输入/输出函数的应用;②顺序结构、选择结构、循环结构的程序设计方法;③系统库函数的应用方法;④用户自定义函数的定义、声明及调用方法等。⑤按功能模块进行设计、组织、调试的基本方法。10.1.1系统设计目标10.1.2系统需求分析

1、基本需求

电子万年历用来提供查询,主要实现以下三个查询功能:

功能1:要求从键盘输入年份,输出该年12个月的日历。

功能2:要求从键盘输入年份和月份,输出该月的日历。

功能3:要求从键盘输入年、月、日,输出该日是星期几。2、功能要求

⑴日历显示功能:自动显示系统日期所在月份的月历,并能突出显示当期日期。

⑵日期查询功能:显示查询日期、月份、是否为闰年。

⑶支持键盘操作:通过键盘调整年份、月份和日期。

⑷参数排错功能:能对输入的日期进行合法性检查。10.1.3系统总体设计

1、系统结构设计

根据以上需求分析,系统应有功能控制、打印输出、日历显示和键值获取等4个功能模块,系统结构如图10-1所示。图10-1系统功能模块功能控制模块打印输出模块日历显示模块键值获取模块万年历系统10.1.3系统总体设计

2、主控函数main()本系统的结构由4个模块所组成,由主函数main()实行控制,按照系统工作顺序,其工作流程如图10-2所示。

主控函数主要对输入参数进行检查,以保证输入参数正确,不会对后续程序造成影响;其次,对输入的年份和月份进行处理和计算,判断输入年份是否为闰年。图10-2万年历设计流程图显示当日日期开始结束显示当月第1天是星期几是否为闰年输入year、month、day输入合法吗?10.1.3系统总体设计

3、功能模块设计

⑴功能控制模块:用来实现日期合法性检查、闰年判断和星期计算。

⑵打印输出模块:用来实现输出显示和打印指定个数的空格、打印分隔线、打印用户使用手册、打印当前日期你对应的星期以及打印给定的星期。

⑶日历显示模块:用来实现日历生成和显示。

⑷键值获取模块:主要用于对键盘操作的响应,由函数voidgetKeyValue()获取按键值,根据键值调整当前日期,并调用日历显示模块中的showCalendar()函数来实现日历生成和输出,其实现过程如图10-4所示。10.1.3系统总体设计

4.数据结构设计本程序没有自定义结构体,仅定义了全局变量。

⑴structdatesysTime:系统结构体,用于存储系统日期。该结构体有3个成员,分别是da_year、da_mon和da_day,分别表示年、月和日。

⑵intcurrentYear:表示当前的年份。

⑶intcurrentMonth:表示当前的月份。

⑷intcurrentDay:表示当前的日期。

⑸intn_currentMon:表示当前月的天数。

⑹intn_lastMon:表示上一个月的天数。10.1.4系统功能实现电子万年历系统设计项目的实现分为项目建立、项目需求分析、项目算法设计、代码编写与调试、代码测试、代码完善等多个环节。1、函数功能描述在进行本项目的程序设计时,建议按教材358页表10-1定义模块中的函数,然后进行调试。2、模快化编程根据模块结构,按模块进行编程,并在每个程序代码前写上模块显示结构。

⑴参数输入与验证:对输入参数作验证,若输入参数不合法,则重新输入,允许输入3次,若3次均不正确,则结束程序。10.1.4

系统功能实现

⑵闰年判断:判断year为闰年还是平年,为后续程序设计作判断。仿照算法设计中的公式,写出闰年判断函数leapyear()。

⑶计算是星期几:根据dayNum()函数返回的结果,计算month中的星期值。

⑷计算是第几天:根据输入的month值,计算month第一天在该年中是第多少天。3.程序编码的基本原则

⑴易修改:为了便于日后修改,每个函数应在入口处加入较详细的注释。

⑵易记忆:给变量命名时,名字中尽可能多地包含必要的信息。10.1.4

系统功能实现

⑶易阅读:当结构嵌套时,内层结构采用缩进形式,以明确结构的界限。

⑷易理解:尽量采用容易理解的表达式。

⑸易排错:编码最基本的要求是语法和逻辑的正确。

4、调试程序

⑴异常处理:通过输入错误数据格式验证工程代码对异常输入的处理能力。

⑶平年2月验证:输入2011-2能验证千年2月的打印输出。

⑷闰年其它月份验证:输入闰年的其它月份如2012-11可以验证输出结果。

⑸平年其它月份验证:输入平年其它月份如2011-11可以验证输出结果。

§10.2俄罗斯方块游戏1、系统设计的教学目标本项目旨在训练学生的基本编程能力和游戏开发技巧,熟悉C语言图形模式下的编程。本项目中涉及C语言的结构体、数组、时钟中断及绘图等方面的知识。2、系统开发的知识要点这里介绍开发俄罗斯方块游戏的实现方法,用C语言编程实现俄罗斯方块游戏涉及的主要知识点有以下几个方面:结构体、数组、时钟中断及绘图等方面的知识。①应用结构体类型编程;②应用数组编程;③时钟中断系统的应用方法;④C语言的绘图知识等;10.2.1系统设计目标10.2.2

系统需求分析1、基本需求游戏本身是一种娱乐,因此,必须使游戏者在游戏过程中感到有趣。与此同时,通过这种“娱乐”,应能对游戏者在智能、创造性等方面具有一定的启迪、激发、引导作用。2、功能要求要使游戏者感到该游戏格外有趣,在游戏操作过程中,游戏系统应具有以下功能和特点:

⑴游戏操作引导:在游戏过程中,在当前游戏画面中,出现下一个游戏方块,这样有利于游戏者控制游戏的策略。

⑵方便任意操作:能实现对游戏方块的左、右、下、上的快速移动、下落和旋转。10.2.2

系统需求分析

⑶画面显示更新:当游戏方块左右移动、下落、旋转时,要清除先前的游戏方块。

⑷具有成绩记录:在游戏过程中自动计算游戏分数,以激励游戏者具有技能性的操作。

⑸游戏帮助功能:游戏者进入游戏后,系统具有随时跟踪本游戏如何操作的友情提示。10.2.3

系统总体设计1、系统结构设计助根据以上需求分析,系统应有游戏方块预览功能、控制功能、显示更新功能、速度更新功能、帮助功能等,其模块结构如图10-5所示:图10-5俄罗斯方块游戏功能描述图方块预览模块方块控制模块显示更新模块分数更新模块俄罗斯方块游戏帮助功能模块

⑴方块预览模块:在游戏过程中,当在游戏底板中出现一个游戏方块时,必须在游戏方块预览区域中出现下一个游戏方块,这样有利于游戏玩家控制游戏的策略。

⑵方块控制模块:通过各种条件的判断,实现对游戏方块的左移、右移、快速下移、自由下落、旋转功能以及行满消除行的功能。⑶显示更新模块:当游戏方块左右移动、下落、旋转时,要清除先前的游戏方块,用新坐标重绘游戏方块。当消除满行时,要重绘游戏底板的当前状态。⑷速度更新模块:在游戏者进行游戏过程中,需要按照一定的游戏规则给游戏者计算游戏分数。

⑸帮助功能模块:游戏者进入游戏后,将有对本游戏如何操作的温馨提示。10.2.3

系统总体设计

2.主控函数main()主控函数main()实现对整个程序的运行控流程制以及相关功能模块的调用。3.功能模块设计整个游戏的操作是通过以下5个功能模块来实现的。

⑴方块预览模块:游戏方块将在如图10-7所示的4×4的正方形小方块中预览。

⑵方块控制模块:这是该游戏开发的重点和难点部分。①左移的实现过程。②右移的实现过程③下移的实现过程④旋转的实现过程10.2.3

系统总体设计图10-7游戏方块预览□□□□□■□□□■□□□■■□

⑶显示更新模块:清除游戏方块的过程是先画轮廓再填充的方式,使用背景色填充小方块,然后使用前景色画一个游戏底板中的小方块。

⑷分数更新模块:当判断出一行满时,score变量加一固定值(如10),可以把等级level看作是速度speed4、数据结构设计

⑴游戏底板BOARD结构体⑵游戏方块SHAPE结构体⑶SHAPE结构数组10.2.3

系统总体设计10.2.4

系统功能实现1、函数功能描述在进行本项目的程序设计时,建议按教材367页表10-2定义模块中的函数,然后进行调试。

2、模块化编程俄罗斯方块程序按模块化编程,分为4个功能模块。

⑴主函数main():实现对整个程序的运行控制。

时钟中断处理:速度越快,时间中断的间隔也就越短。

⑶成绩、速度及帮助的显示:为了帮助游戏者操作,必须提供帮助,为了鼓励游戏者,必须显示游戏成绩与速度。

⑷满行处理:当游戏方块不能满足相关操作条件时,可以调用以下函数来处理。§10.3图书借阅管理系统1、系统设计的教学目标设计一个图书借阅管理系统,需要使用函数、数组、指针、结构体、链表和文件等,基本上涵盖了C语言程序设计的所有基础阶段的知识。2、系统开发的知识要点①函数的定义与调用;②指针变量做为函数参数;③结构体数组的应用;④字符串函数的应用;⑤文件的打开、关闭及读/写操作等。10.3.1系统设计目标10.3.2

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

⑴用户登录:系统用户分为管理员和学生。10.3.2

系统需求分析

⑵图书信息管理:包括;书号、书名、作者、图书分类、出版社、出版时间、单价、总量和库存量。

⑶学生信息管理。包括:输入学生信息、保存学生信息、修改学生信息、添加学生信息、删除和输出学生信息。

⑷图书查询功能:图书查询分为:按书名查询、按作者查询、按图书分类查询、按出版社查询和按出版时间查询。

⑸借书功能:借书时,先判断学生是否有空闲的借书卡,若有空闲的借书卡,则要求学生输入所借图书的书号。

⑹还书功能:还书时,先检查学生的借书卡,然后要求学生输入所还图书的书号,将对应借书卡上的记录清零,并修改该书的库存量。10.3.3

系统总体设计1、系统结构设计根据上述需求分析,图书借阅管理系统应具有用户登录管理模块、图书信息管理模块、学生信息管理模块、图书查询管理模块、图书借阅管理模块,其结构如图10-9所示。

⑴用户登录管理模块:用于实现管理员和学生登录管理。

⑵图书信息管理模块:用于实现图书信息的输入、保存、修改、添加、删除、输出等。

⑶学生信息管理模块:用于实现学生信息的输入、保存、修改、添加、删除、输出等。

⑷图书查询管理模块:用于实现按不同条件对图书信息进行查询。

⑸图书借阅管理模块:用于实现图书的借阅和归还管理。2、主控函数main()图书借阅管理系统由5个模块组成,所有模块都位于主函数main()之下,用户通过主函数中提供的菜单选择相应的模块,执行具体的功能操作,因此,主函数的设计是极为重要的。3、功能模块设计

⑴用户登录管理模块:是进入图书借阅管理系统的必备模块,主要实现两项功能,一是用来完成管理员登录工作;二是用来完成学生登录工作。

⑵图书信息管理模块:用于实现图书信息的输入、保存、修改、添加、删除、输出等6个方面的操作。

⑶学生信息管理模块:其功能与图书信息管理模块相似,它用于实现学生信息的输入、保存、修改、添加、删除、输出等6个方面的操作。

10.3.3

系统总体设计

⑷图书信息查询模块:用于实现按不同条件对图书信息进行查询。

⑸图书借阅管理模块:主要是对图书借阅卡的信息管理,包括图书借阅管理和图书归还管理。4、数据结构设计该系统可以定义四种结构体类型,包括日期类型、借书卡类型、图书类型和学生类型,其中在图书类型中要使用日期类型,而在学生类型中要使用日期和借书卡类型。10.3.3

系统总体设计10.3.4

系统功能实现为便于设计出图书借阅管理系统,这里给出图书借阅管理系统的函数功能描述以及模块化编程,供设计时参考。1、函数功能描述在进行本项目程序设计时,建议按教材372页表10-3定义模块中的函数,然后进行调试。2、模块化编程图书借阅管理系统是按5个模块进行设计的,各模块由多个自定义函数或系统函数组成。

⑴用户登录管理模块:是进入图书借阅管理系统的模块,用来完成管理员登录工作和完成学生登录工作,分别由函数ManagerLogin()和StudentLogin()来实现,并由main函数调用。10.3.4

系统功能实现

⑵图书信息管理模块:实行图书信息的输入、保存、修改、添加、删除、输出等6个方面的操作。

⑶学生信息管理模块:实行学生信息的输入、保存、修改、添加、删除、输出等6个方面的操作。

⑷图书信息查询模块:实行按不同条件对图书信息进行查询。

⑸图书借阅管理模块:实行图书借阅管理和图书归还管理。在实行模块化编程的过程中,首先考虑的是主控函数main()的编程,系统操作界面、各功能选项(菜单)、用户密码设置,都应安排在主控函数main()中,重要功能模块和共用功能模块都应直接由主控函数main()控制,然后分层调用,这样有利于系统的拓展、更新和维护。§10.4

学生成绩管理系统学生成绩管理系统是数据库管理系统的又一个典型应用实例。开发出高效实用的学生成绩管理系统,对学生成绩进行统一管理,实现学生成绩信息管理工作流程的系统化、规范化和自动化有着极为重要的作用和意义。

1、系统设计的教学目标本程序旨在训练读者的基本编程能力,了解管理信息系统的开发流程,熟悉C++的文件和单链表的各种基本操作。具体为:①了解程序设计的过程和方法。②掌握学生成绩管锂系统的设计思想和方法。③熟悉学生成绩管理系统的源代码。④通过学习提高程序设计的能力。10.4.1系统设计目标10.4.1

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

系统需求分析1.基本需求为了开发一个方便、适用的学生成绩管理系统,在设计前必须对该系统的信息进行认真的调查研究。对系统的具体要求如下:

⑴成绩录入:输入学生的各项信息,并计算课程的平均成绩。

⑵成绩查询:根据学号查询某学生各项成绩或全班学生的成绩,输出各项查询结果。

⑶成绩处理:修改原有成绩、添加新生的成绩、删除不需保存的成绩。

⑷成绩统计:统计每门课程各个分数段的人数、每门课程平均分数、不及格人数等。10.4.2

系统需求分析

⑸成绩排序:对选定课程成绩、平均成绩、总分等进行排序。

⑹建立文本界面进行输入和选择。⑺数据以文件形式存储。2.功能要求

通过对学生成绩管理工作内容的分析,设计的学生成绩管理系统应包含以下功能。

⑴成绩输入功能:输入学生的成绩信息,包括班级、学号、姓名及课程的成绩。数据可以从键盘输入,也可以从文件中读取。10.4.2系统需求分析

⑵成绩输出功能:输出班级所有学生的成绩记录。成绩记录可以直接输出在屏幕上或保存到磁盘文件中。

⑶成绩查询功能:查询指定学号学生的成绩及相关信息。

⑷成绩处理功能:修改或删除指定学号学生的成绩记录,或增加学生的成绩记录,或对学生成绩进行排序。

⑸成绩统计功能:计算每门课程的平均分,统计每门课程不及格人数,以及相关信息。

通过需求分析,全面了解对应问题及其环境,为问题涉及的信息、功能及系统行为建立模型,将用户需求精确化、完全化,最终形成设计方案及其规格说明。

10.4.3

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

系统结构设计2、系统主控模块学生成绩管理系统是在主控函数的管理下进行的。主控模块由main()函数和menu()函数组成,实现控制系统流程控制和显示菜单。(本系统执行的主控流程图省略)

⑴main()函数:控制整个系统的运行流程,各功能模块的函数均由主函数控制调用。在主函数中,通过循环执行一个swibh开关语句来运行系统。在循环体中,根据用户输入的数字调用相应函数完成相应功能。⑵menu()函数:主要实现显示系统的菜单界面。在main函数的循环体内只需调用该函数,即可达到循环显示菜单的功能,方便用户选择。按键时有效的输入为0~9之间任意数值。

10.4.4

使用结构体设计学生成绩信息由班级、学号、姓名、各门课程成绩、总分和名次等数据构成。尽管学生成绩信息包含的数据是相同的,但三种方法在数据类型的定义格式上是不一样的。1、成绩输入模块成绩输入模块用来完成从数据文件中读入学生成绩,也可以从键盘逐个输入学生成绩。成绩输入通过Input(Stu_Scores[])函数、Read(StuScores[])函数实现成绩输入。

⑴Input(Stu_Scores[])函数:用来通过键盘将学生成绩信息输入到结构体数组中。

⑵Read(StuScores[])函数:用来从已有磁盘文件中读取成绩信息到结构体数组中。10.4.4

使用结构体设计2、成绩查询模块成绩查询模块用来完成按学号和姓名查找学生,然后查找该学生的成绩信息。成绩查询通过Search函数、Search_Name函数和Search_Score函数实现。

⑴SearchNum(Stu_Scores[],charstu_num[15])函数:用来查找指定学号学生是否存在,若存在,则返回该学生所在的位置。

⑵Search_Name(Stu_Scores[],charstu_name[10])函数:用来查找指定姓名学生是否存在,若存在,则返回该学生所在的位置。

⑶Search_Score(Stu_Scores[])函数:用来查找指定学生的成绩信息,若存在该学生,则将其成绩显示在屏幕上。10.4.4

使用结构体设计3、成绩处理模块成绩处理通过Modify函数、Delete函数、Insert函数、Soft_Sum函数和Sort_Num函数来实现。

⑴Modify(Stu_Scores[])函数:用来修改指定学号学生的成绩信息。

⑵Delete(Stu_Scores[])函数:用来删除指定学号学生的成绩信息。

⑶Insert(Stu_Scores[])函数:用来增加一个学生的成绩信息。

⑷Soft_Sum(Stu_Scores[])函数:用来按总分降序对所有学生进行排序,并给出名次。10.4.4

使用结构体设计

⑸Sort_Num(Stu_Scores[])函数:用来对所有学生按学号从小到大进行排序。

4、成绩统计模块成绩统计模块用来统计每门课的平均分和统计每门课程不及格的人数,并显示在屏幕上。成绩统计通过Course_Ave函数和Statistic_Course函数来实现。

⑴Course_Ave(Stu_Scores[])函数:用来统计每门课的平均分。

⑵Statistic_Course(Stu_Scores[])函数:用来统计每门课程不及格的人数。10.4.4

使用结构体设计5、成绩输出模块成绩输出模块主要完成两项任务:一是通过Output函数将所有学生的成绩信息显示在屏幕上;二是通过Save函数将成绩信息保存至磁盘文件中。

⑴Output(StuScoress[])函数:用来将所有学生的成绩信息显示在屏幕上。

⑵Save(Stu_Scores[])函数:用来将成绩信息保存至磁盘文件中。

10.4.5

使用链表设计使用链表设计本系统时,只需关心指针有没有指到链表尾,而不必知道班级学生人数,故不需要实时记录人数。1、成绩输入模块成绩输入模块通过Input(node*head))函数和Read(node*head)函数来实现信息输入。

⑴Input(node*head)函数:用来通过键盘将若干名学生的成绩信息输入到链表中,生成一条有序链表。

⑵Read(node*head)函数:用来直接从文件中读取成绩信息到链表中,生成一条有序链表。2、成绩查询模块成绩查询模块通过Search_Num(node*head,charstu_num[15])函数、SearchName(node*head,charstu_name[15]函数、Search_Score(node*head)实现3种查询。10.4.5

使用链表设计

⑴Search_Num(node*head,charstu_num[15])函数:

用来在链表中查找指定学号学生是否存在,若存在,则返回指向该学生所在结点的指针。

⑵Sea

温馨提示

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

评论

0/150

提交评论