《《面向对象程序设计》课程设计教学大纲设计.docx》由会员分享,可在线阅读,更多相关《《面向对象程序设计》课程设计教学大纲设计.docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面向对象程序设计课程设计教学大纲设计 面向对象程序设计课程设计教学大纲 适用专业:计算机科学与技术 课程周数:2周 一、大纲说明 本大纲根据计算机科学与技术专业人才培养方案制订。 (一)课程设计性质 课程设计是学生对课程所学知识的综合运用,它与课堂听讲、上机实验、课外练习、自学研究相辅相成,构成一个完整的课程教学体系。 (二)主要先修课程和后续课程 1.先修课程:C语言程序设计 2.后续课程:Java程序设计、软件工程 二、课程设计目的及基本要求 本课程全面系统的学习面向对象程序设计的基本概念,基本语法和编程方法。正确理解掌握C+面向对象程序设计的基本特性:类,对象,继承与派生,多态,虚函数,
2、模板,流类库等。遵循软件过程的各个环节进行系统分析、设计、实现、集成、测试,并相应给出软件规格说明书等制品,了解当前常用的软件开发工具(Visual C+),要求熟练掌握基于Win32 Console Application的程序设计,培养解决实际问题的能力。 三、课程设计容及安排 1、有理数运算 问题描述:有理数是一个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数,而就为无理数。在C+中,并没有预先定义有理数,需要时可以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。对有理数的各种操作都可以用重载运算符来实现。 基本要求:定义并实现一个有理数类,通过
3、重载运算符+、-、*、/对有理数进行算术运算,通过重载运算符=实现判定两个有理数是否相等。写一个优化函数,它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。 测试数据:在应用程序中,创建若干有理数对象,通过带参数的构造函数使得各有理数对象值各不相同,然后分别进行各类运算,输出运算结果,检验其正确性。 实现提示: 设有两个有理数a/b和c/d,则有: (1)有理数相加分子=a*d+b*c;分母=b*d (2)有理数相减分子=a*d-b*c;分母=b*d (3)有理数相乘分子=a*c
4、;分母=b*d (4)有理数相除分子=a*d;分母=b*c 优化函数在创建有理数对象时应执行,在执行其它各种运算之后也需执行它,这样可保证所存储的有理数随时都是最优的。对于判断两个有理数是否相等,由于在对有理数进行各种运算后都对其进行优化,所以判定两个有理数是否相等只需判定它们两个的分子和分母分别相等即可。 选做容:重载插入()运算符,使得对有理数可以直接输入输出。 设有理数输入格式为: 整数1 整数2 /整数1为分子,整数2为分母 有理数输出格式为: 分子/分母 2、通讯录管理 问题描述:编写一个简单的通讯录管理程序。通讯录记录有,地址(省、市(县)、街道),邮政编码等四项。 基本要求:程序
5、应提供的基本基本管理功能有: 1)添加:即增加一个人的记录到通信录中 2)显示:即在屏幕上显示所有通信录中的人员信息,应能分屏显示。 3)存储:即将通讯录信息保存在一个文件中。 4)装入:即将文件中的信息读入程序。 5)查询:可根据查找某人的相关信息,若找到显示其、地址、和邮政编码。 6)修改:可修改一个人的除外其它信息。 测试数据:程序应输入不少于10个人员的通讯录信息,应考虑到人员可以同名的情况。 实现提示:程序可用一个单向链表来管理人员信息,每个人员的,地址,和邮政编码用一个类Cperson来实现,作为链表的值指针指向这些Cperson类对象,通过链表的遍历可以操作这些数据。 选做容:为
6、了加快数据定位查找的速度,采用常用优先的方法对链表的各个节点进行排序,即一旦操作了一个人员的数据,他的数据就将被调用到链表的链首。这样经过有限次操作,经常查阅的人员的信息就将排在链表的前端。虽然不能说链首的节点一定是最常用的,但常用的节点一定会排在较靠前的部分,链表查找时所要走的平均距离一定较短。 3、商品销售统计 问题描述:编写商品销售统计程序,商品的信息有:商品的名称,计量单位(重量或件),单价。所有商品的信息事先已存入计算机,屏幕上显示所有商品的名称,选择商品名,输入商品计量单位(如重量,件数等),根据单价算出总价。客户一次购物可能购买多种商品,程序应计算出客户应付的钱款数。 基本要求:
7、程序分为两个部分:第一部分用于输入商品的信息并允许修改和删除;第二部分实现销售统计。程序运行时由用户选择进入哪一部分功能,并能在运行时在两部分之间切换。第二部分运行时,首先显示所有商品名称及代码(商品数目较多时,应考虑分屏显示),用户输入商品代码及商品重量或件数,用户一次操作可输入若干商品的购买信息,然后输入一个特殊的代码(如-1)表示本次购物结束。此时。程序计算出应付钱款数并显示。 测试数据:程序应输入不少于10种商品的信息,并进行模拟运行。 实现提示:本程序的商品信息管理可采用与课程设计题目二类似的数据结构,既定义一个商品类,每种商品作为商品类的实例(对象)存储在链表节点中。 选做容:程序
8、在营业结束时统计每种商品的销售量,销售金额及总营业额。因此第二部分应有营业结束的选择,当用户选择此项时屏幕上显示当天营业的每种商品的销售量,销售金额及总营业额。注意,商品类的数据成员应增加有商品的销售量和销售金额。总营业额是所有商品的营业额之和,可用静态数据成员实现。或可由原商品类派生出一个特殊的类,增加上面的数据成员及相应的成员函数。 4、研究生初试录取 问题描述:研究生考试课程为4门,其中数学、外语、政治为统一命题,而专业基础课则根据不同的专业由招生学校自行命题。国家对初试录取分数有总分要求(如某一年要求4门课总分应达到310分),另外还有对每门课的最低分数要求(如总分为100的试卷最低应
9、达到40分,总分为150的试卷最低应达到65分)。编程统计初试合格的人数,并按总分由高到低的顺序输出合格考生的信息。 基本要求:程序运行时首先要求输入:考生,号,报考专业,是否应届生,4门课程(政治、数学、外语、专业基础课)成绩。这些原始数据应保存到一个文件中。然后输入:录取的总分要求,各课程的最低分数要求。输出要求:过线考生的,号,报考专业,是否应届生,4门课程(政治、数学、外语、专业基础课)成绩及总分,这些信息应存放到另一个文件中。 测试数据:程序应输入不少于10名考生的信息,其中应届生和历届生分别有若干名,并且都有合格和不合格的情况。 实现提示:可定义一个考生类存放有关信息和实现相应的操
10、作。分数线数据(总分要求和各门课程的要求)可定义另外的类来存放,但应能被考生类及其派生类直接访问。 选做容:初试合格的考生应经过复试才能决定是否录取,复试成绩合格(大于一给定分值)可以录取,否则被淘汰。而录取的顺序假设是按照专业基础课和复试成绩的平均值来确定的(因为这涉及到是计划还是委培问题)。因此,应首先输入初试合格考生的复试成绩及复试的合格线分数,然后按上面要求排序输出并标明被淘汰的学生。 5、足球联赛积分 问题描述:足球联赛采用主客场双循环赛制,胜一场得3分,平局各得1分,负一场得0分,联赛排名以积分多者在前,当两队(或多队)积分相同时,则净胜球(即进球数与失球数之差)多者在前,若净胜球
11、相同,则进球数多者在前,若仍相同,则抽签或踢附加赛决定名次(这在联赛结束后进行,联赛未结束则两队名次并列,本程序不做这方面要求)。试编一程序统计最近一轮比赛后,各队积分及排名。 基本要求:设积分表结构如下:队名(不超过15个字符),已比赛的场数,赢的场数,平的场数,负的场数,进球数,失球数,积分。积分表放在正文文件中。最近一轮的结果从键盘输入,其形式为:主队名(可用代码),客队名(可用代码),主队得分(即进球数),客队得分(即进球数)。程序应根据此轮结果修改各队的积分和名次,所得的最新记分表仍在原积分文件中并同时在屏幕上显示。 测试数据:可选择我国当年的甲A或甲B联赛的数据输入,并检查与报章公
12、布的数据是否一致。 实现提示:定义一个球队类,每个球队是均是此类的对象。由于联赛中参赛的队伍数是固定的,因此可用对象数组来实现(当然也可以用链表结构)。每输入两个队的比赛成绩,则相应的队的有关数据(比赛场数,赢的场数,平的场数,负的场数,进球数,失球数,积分等)即可进行修改,比赛成绩录入完成,调用联赛排序方法(对象数组作为参数)排出名次并输出。 选做容:篮球联赛(如NBA)往往采用胜率来决定名次,胜率就是取胜的场数比赛场数之比。若胜率相同,再由净胜球及进球数来决定名次,通过继承性完成上述要求。 6、银行账户管理程序 问题描述:设计一个银行账户管理程序,账户的信息有账号(唯一)、余额、单位、地址
13、等,允许用户进行如下操作:开户、销户、存款、取款、转账、查询,一个用户可以有多个户头,账户的数值没有上限。 基本要求:程序运行时,可以由用户选择进行何种操作,开户操作要求输入用户信息后自动获取账号,用户销户后账号被回收,并且该账号可以继续分配给其它账户,不 允许用户透支,根据或账号可以进行用户的信息查询,所有的账户信息应存放到一个文件中,可以随时的访问和更新。 测试数据:程序应输入不少于10人的账户信息,应考虑到人员同名的情况。 实现提示:可定义一个账户类存放账户信息以及执行相应的操作,可以用一个链表类来管理账户。 选作容:在上述程序的基础上,添加联名账户(一个联名账户有两个拥有者)的管理。
14、7、模拟计算器程序 问题描述:设计一个程序来模拟一个简单的手持计算器。程序支持算术运算+、-、*、/、=、以及(清除)、A(全清除)操作。 基本要求:程序运行时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在窗口中,用户键入=符号后,窗口显示出结果。 测试数据:程序输入不少于5种不同的表达式进行测试。 实现提示:可定义一个计算器类,该类包括两个组件对象,一个计算引擎和一个用户接口,用户接口对象处理接受的键盘输入信息,并显示答案,计算引擎对象对给出的数据执行相应操作,并存储操作的结果。 选作容:如果用户输入的表达式不合法,可以判别出来并给出相应的错误提示。 8、
15、设计一个排课程序 问题描述:每位教师都有教学工作量,教师对他所希望讲授的课程表达为一个期望值,1,2,n,其中1位最高的期望值。课程也有优先级,1,2,n,用来决定将课程分给教师的顺序,其中1时最高的优先级。设计一个程序针对某些课程给某些教师进行排课。 基本要求:程序运行时,用户输入教师信息(、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级)、教师对所希望讲授课程的期望值以及教学工作量等相关信息,所有信息应保存在文件中,程序根据课程的优先级以及教师对课程的期望值进行排课。为了公平起见,程序随机分配课程,如果10门课程都有优先级1,程序以随机的顺序将这些课程分给教师,如果10
16、位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。 测试数据:程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。 实现提示:可定义一个教师类存放教师信息,所有教师的信息可以用链表存储;定义一个课程类存放课程信息,所有课程的信息可以用链表存储;定义一个排课类进行排课,排课类可以访问课程和教师信息。 选作容:对两个同类班级安排一学期(20周)的课程,程序应能处理某些限制,如一个老师不能同时给两个班上课。 9、设计一个Database类 问题描述:设计
17、一个Database类。Database类是一个表的集合,而表又由行和列组成。例如,下面的雇员信息表包含三个记录,每个记录有四个字段(Employee、Name、 基本要求:能够完成对数据库的基本操作;包括创建数据库,实现对数据库里面的表的添加,删除;以及能够完成对表结构的修改(如添加或删除字段),以及对表中的记录进行添加和删除;能够完成对使用适当的查询语言从一个或多个表中查找相关信息。 测试数据:可以选取高校人员(教师、学生、职工等)数据库作为测试数据 实现提示:Database 类的公有接口包含如下数据成员: ?创建一个表。 ?通过增加或删除字段修改表结构。 ?删除一个表。 ?在表中增加一
18、个记录。 ?从表中删除记录。 ?用适当的查询语言从一个或多个表中查找信息。 选做容:高校人员信息通常保存在文件里面,可以从文件里面读取人员信息;然后完成上面操作。 10、电煤气管理系统 问题描述:设计一个水电管理信息系统,能够对高校的水电费用进行管理,包括了登记费用,查询费用,以及住户信息管理等。在设计时要考虑到学生和教工在用水电时的不同,学生可以免费使用一定额度的水电,超过这个额度的随便以后必须自费使用,且自费部分水电费的价格标准要高于教工的收费标准(主要是节约资源)。 基本要求: 实现对用户信息的录入 实现水电煤气数据的录入 计算并查询用户应缴费用 查询未缴纳费用 测试数据:可选用小区物业
19、管理部门的数据,也可采用手工输入不少于10个用户信息的数据。 实现提示:用户基本信息类,教工用户信息类,学生用户信息类,收费标准类,该类存储水电煤气标准单位的收费标准,如:煤气,1.0元/立方米; 不同类型人员水、电、煤气信息类,这些类可以包括水表,电表,煤气表ID,抄表时间,上次抄表时间,本次抄表时间,上次抄表度数,本次抄表度数,本次使用度数,费用,是否缴费标记等信息。在实现的时候考虑继承和多态技术的合理使用。 选做容:实现用户查询系统能够找出该用户半年之的交费记录和本次应交费的数据。 11.对参赛结果分数进行处理:参赛选手n人(n1),评委m人(m2),评委给每一选手打一个分数score(
20、分数score为小于等于10的一个正实数)。选手的最后得分lastScore计算方法为 (1)m9时,去掉一个最高分和一个最低分后另m-2个得分的平均值。 (2)m9时,去掉两个最高分和两个最低分后另m-4个得分的平均值。 假设事先已经建立了text型的数据文件f1.txt,其中依次记录着n个选手的编号(一个正整数)、(一个字符串)以及m个评委给出的得分。 请编制程序,依次从数据文件f1.txt中读入n个选手的有关信息,而后按上述规定方法计算出每一个选手的最后得分,而且往屏幕上以及另一个text型文件f2.txt中同时输出如下形式的结果信息。 假设参赛选手人数n=5,评委人数m=7,磁盘文件f
21、1.txt中的初始数据为: 1 zhangjin 8.8 9.3 7.9 8.7 8.9 9.7 9.2 2 lintao 8.9 8.2 8.6 8.8 8.5 9.1 9.3 3 guojian 8.9 8. 4 8.7 8.6 8.6 8.4 8.6 4 maling 7.9 8.3 8. 5 8. 6 8.5 8.9 8.3 5 liuyifan 9.5 9.1 9.8 9.2 9.0 9.5 8.9 那么,程序执行后,屏幕显示结果以及磁盘文件f2.txt中的结果均应该为: 参赛号姓名最高分最低分累积分最后得分 1 zhangjin 9.7 7.9 44.9 8.98 2 lintao
22、 9. 3 8.2 43.9 8.78 3 guojian 8.9 8. 4 42.9 8.58 4 maling 8.9 7.9 42.2 8.44 5 liuyifan 9.8 8.9 46.3 9.26 思考:可进一步考虑找出比赛的第1至第k名,也在屏幕以及f2.txt中同时输出相关的结果信息(k小于等于n,并规定若多个选手最后得分相同时,则有效分(即已删除原来的最高分后)中最高分高者名次优先)。 12、设计一个类CStudent,类中包含一个学生的基本数据如下: 编号,性别,年龄,数学成绩,计算机成绩,外语成绩。 并假设编号为整数,且从1号往后连续编码;为字符串,性别为字符。如: 1
23、LiPing m 18 89 98 94 请采用binary文件形式,并使用随机读写处理方式,对自定义CStudent类的对象数据进行存储与读写处理(即是说,总按具有连续编码的编号num为“序”来对文件中的各对象数据进行随机读写处理)。并设计该类的成员函数,而且对输出运算符“”进行重载,使该运算符能够完成将一个学生的信息输出到屏幕上。要求成员函数完成以下功能: (1)从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。 (2)按编号对学生信息进行检索并将检索结果显示在屏幕上。 (3)按对学生信息进行检索并将检索结果显示在屏幕上。 (4)计算某编号学生的总成绩与平均成
24、绩。 (5)列出所有总成绩超过n分的性别为s同学的有关信息(n,s由用户从键盘输入)。 思考:可进一步对上述程序进行扩充,如,添加学生基本数据(籍贯,专业,班级,其他各门成绩,奖惩记录等),并添加所需要的其他相关处理函数(如可通过咨询教学办公室管理人员后确立),进而将其编制成为一个简单而实用的小型学籍与成绩管理软件。 13、日期时间显示 (1)定义一个时间类Time,能提供时、分、秒组成的时间,并提供时间增加的方法(按秒)。 (2)定义一个日期类Date,记录年、月、日,并提供日期增加的方法(按天)。 (3)由类Time和日期类Date,派生出DateTime类,除具有年、月、日、时、分、秒外,还增加国名和与格林威治时间的差。 编一应用程序,输入年、月、日、时、分、秒,在屏幕上模拟显示一电子计时器,不断输出下一秒的时间和日期,以及格林威治的日期和时间。 注意,当对日期增加1天后,会涉及所谓的“进位”问题:首先算出本“日”所在的月份具有的天数N,若加1之后的“日”数值超过所在的月份具有的天数N时,“进