面向对象学习课程设计方案任务书.docx
- 文档编号:25240398
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:14
- 大小:23.87KB
面向对象学习课程设计方案任务书.docx
《面向对象学习课程设计方案任务书.docx》由会员分享,可在线阅读,更多相关《面向对象学习课程设计方案任务书.docx(14页珍藏版)》请在冰豆网上搜索。
面向对象学习课程设计方案任务书
河南城建学院
《面向对象程序设计》课程设计任务书
班级0844121
专业软件工程
课程名称面向对象程序设计
指导教师苏靖枫周二强
计算机科学与工程学院
2013年6月
《面向对象课程设计》任务书
一、设计时间及地点
1、时间:
第17周
2、地点:
计算机系实验中心205机房、本班教室
二、设计目的和要求
本课程设计是在学习C++基本理论之后的实践教案环节。
该实践教案是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。
要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。
学生通过课程设计在下述各方面得到锻炼:
1.能根据实际问题的具体情况,结合C++的基本理论和基本技巧,正确分析问题,并能设计出解决问题的有效算法与程序。
2.提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法和程序的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。
三、设计题目和内容
1.有理数运算
问题描述:
有理数是一个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数,而就为无理数。
在C++中,并没有预先定义有理数,需要时可以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。
对有理数的各种操作都可以用重载运算符来实现。
基本要求:
定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数进行算术运算,通过重载运算符==实现判定两个有理数是否相等。
写一个优化函数,它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。
此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。
测试数据:
在应用程序中,创建若干有理数对象,通过带参数的构造函数使得各有理数对象值各不相同,然后分别进行各类运算,输出运算结果,检验其正确性。
实现提示:
设有两个有理数a/b和c/d,则有:
(1)有理数相加分子=a*d+b*c;分母=b*d
(2)有理数相减分子=a*d-b*c;分母=b*d
(3)有理数相乘分子=a*c;分母=b*d
(4)有理数相除分子=a*d;分母=b*c
优化函数在创建有理数对象时应执行,在执行其它各种运算之后也需执行它,这样可保证所存储的有理数随时都是最优的。
对于判断两个有理数是否相等,由于在对有理数进行各种运算后都对其进行优化,所以判定两个有理数是否相等只需判定它们两个的分子和分母分别相等即可。
选做内容:
重载插入(<<)和提取(>>)运算符,使得对有理数可以直接输入输出。
设有理数输入格式为:
整数1整数2//整数1为分子,整数2为分母
有理数输出格式为:
分子/分母
2.通讯录管理
问题描述:
编写一个简单的通讯录管理程序。
通讯录记录有姓名,地址(省、市(县)、街道),电话号码,邮政编码等四项。
基本要求:
程序应提供的基本基本管理功能有:
1)添加:
即增加一个人的记录到通信录中
2)显示:
即在屏幕上显示所有通信录中的人员信息,应能分屏显示。
3)存储:
即将通讯录信息保存在一个文件中。
4)装入:
即将文件中的信息读入程序。
5)查询:
可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码和邮政编码。
6)修改:
可修改一个人的除姓名外其它信息。
测试数据:
程序应输入不少于10个人员的通讯录信息,应考虑到人员可以同名的情况。
实现提示:
程序可用一个单向链表来管理人员信息,每个人员的姓名,地址,电话号码和邮政编码用一个类Cperson来实现,作为链表的值指针指向这些Cperson类对象,通过链表的遍历可以操作这些数据。
选做内容:
为了加快数据定位查找的速度,采用常用优先的方法对链表的各个节点进行排序,即一旦操作了一个人员的数据,他的数据就将被调用到链表的链首。
这样经过有限次操作,经常查阅的人员的信息就将排在链表的前端。
虽然不能说链首的节点一定是最常用的,但常用的节点一定会排在较靠前的部分,链表查找时所要走的平均距离一定较短。
3.商品销售统计
问题描述:
编写商品销售统计程序,商品的信息有:
商品的名称,计量单位(重量或件),单价。
所有商品的信息事先已存入计算机,屏幕上显示所有商品的名称,选择商品名,输入商品计量单位(如重量,件数等),根据单价算出总价。
客户一次购物可能购买多种商品,程序应计算出客户应付的钱款数。
基本要求:
程序分为两个部分:
第一部分用于输入商品的信息并允许修改和删除;第二部分实现销售统计。
程序运行时由用户选择进入哪一部分功能,并能在运行时在两部分之间切换。
第二部分运行时,首先显示所有商品名称及代码(商品数目较多时,应考虑分屏显示),用户输入商品代码及商品重量或件数,用户一次操作可输入若干商品的购买信息,然后输入一个特殊的代码(如-1)表示本次购物结束。
此时。
程序计算出应付钱款数并显示。
测试数据:
程序应输入不少于10种商品的信息,并进行模拟运行。
实现提示:
本程序的商品信息管理可采用与课程设计题目二类似的数据结构,既定义一个商品类,每种商品作为商品类的实例(对象)存储在链表节点中。
选做内容:
程序在营业结束时统计每种商品的销售量,销售金额及总营业额。
因此第二部分应有营业结束的选择,当用户选择此项时屏幕上显示当天营业的每种商品的销售量,销售金额及总营业额。
注意,商品类的数据成员应增加有商品的销售量和销售金额。
总营业额是所有商品的营业额之和,可用静态数据成员实现。
或可由原商品类派生出一个特殊的类,增加上面的数据成员及相应的成员函数。
4.研究生初试录取
问题描述:
研究生考试课程为4门,其中数学、外语、政治为统一命题,而专业基础课则根据不同的专业由招生学校自行命题。
国家对初试录取分数有总分要求(如某一年要求4门课总分应达到310分),另外还有对每门课的最低分数要求(如总分为100的试卷最低应达到40分,总分为150的试卷最低应达到65分)。
编程统计初试合格的人数,并按总分由高到低的顺序输出合格考生的信息。
基本要求:
程序运行时首先要求输入:
考生姓名,准考证号,报考专业,是否应届生,4门课程(政治、数学、外语、专业基础课)成绩。
这些原始数据应保存到一个文件中。
然后输入:
录取的总分要求,各课程的最低分数要求。
输出要求:
过线考生的姓名,准考证号,报考专业,是否应届生,4门课程(政治、数学、外语、专业基础课)成绩及总分,这些信息应存放到另一个文件中。
测试数据:
程序应输入不少于10名考生的信息,其中应届生和历届生分别有若干名,并且都有合格和不合格的情况。
实现提示:
可定义一个考生类存放有关信息和实现相应的操作。
分数线数据(总分要求和各门课程的要求)可定义另外的类来存放,但应能被考生类及其派生类直接访问。
选做内容:
初试合格的考生应经过复试才能决定是否录取,复试成绩合格(大于一给定分值)可以录取,否则被淘汰。
而录取的顺序假设是按照专业基础课和复试成绩的平均值来确定的(因为这涉及到是计划内还是委培问题)。
因此,应首先输入初试合格考生的复试成绩及复试的合格线分数,然后按上面要求排序输出并标明被淘汰的学生。
5.足球联赛积分
问题描述:
足球联赛采用主客场双循环赛制,胜一场得3分,平局各得1分,负一场得0分,联赛排名以积分多者在前,当两队(或多队)积分相同时,则净胜球(即进球数与失球数之差)多者在前,若净胜球相同,则进球数多者在前,若仍相同,则抽签或踢附加赛决定名次(这在联赛结束后进行,联赛未结束则两队名次并列,本程序不做这方面要求)。
试编一程序统计最近一轮比赛后,各队积分及排名。
基本要求:
设积分表结构如下:
队名(不超过15个字符),已比赛的场数,赢的场数,平的场数,负的场数,进球数,失球数,积分。
积分表放在正文文件中。
最近一轮的结果从键盘输入,其形式为:
主队名(可用代码),客队名(可用代码),主队得分(即进球数),客队得分(即进球数)。
程序应根据此轮结果修改各队的积分和名次,所得的最新记分表仍在原积分文件中并同时在屏幕上显示。
测试数据:
可选择我国当年的联赛的数据输入,并检查与公布的数据是否一致。
实现提示:
定义一个球队类,每个球队是均是此类的对象。
由于联赛中参赛的队伍数是固定的,因此可用对象数组来实现(当然也可以用链表结构)。
每输入两个队的比赛成绩,则相应的队的有关数据(比赛场数,赢的场数,平的场数,负的场数,进球数,失球数,积分等)即可进行修改,比赛成绩录入完成,调用联赛排序方法(对象数组作为参数)排出名次并输出。
选做内容:
篮球联赛(如NBA)往往采用胜率来决定名次,胜率就是取胜的场数比赛场数之比。
若胜率相同,再由净胜球及进球数来决定名次,通过继承性完成上述要求。
6.银行账户管理程序
问题描述:
设计一个银行账户管理程序,账户的信息有账号(唯一)、姓名、余额、身份证号码、单位、电话号码、地址等,允许用户进行如下操作:
开户、销户、存款、取款、转账、查询,一个用户可以有多个户头,账户的数值没有上限。
基本要求:
程序运行时,可以由用户选择进行何种操作,开户操作要求输入用户信息后自动获取账号,用户销户后账号被回收,并且该账号可以继续分配给其它账户,不允许用户透支,根据姓名或账号可以进行用户的信息查询,所有的账户信息应存放到一个文件中,可以随时的访问和更新。
测试数据:
程序应输入不少于10人的账户信息,应考虑到人员同名的情况。
实现提示:
可定义一个账户类存放账户信息以及执行相应的操作,可以用一个链表类来管理账户。
选作内容:
在上述程序的基础上,添加联名账户(一个联名账户有两个拥有者)的管理。
7.模拟计算器程序
问题描述:
设计一个程序来模拟一个简单的手持计算器。
程序支持算术运算+、-、*、/、=、以及C(清除)、A(全清除)操作。
基本要求:
程序运行时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在窗口中,用户键入’=’符号后,窗口显示出结果。
测试数据:
程序输入不少于5种不同的表达式进行测试。
实现提示:
可定义一个计算器类,该类包括两个组件对象,一个计算引擎和一个用户接口,用户接口对象处理接受的键盘输入信息,并显示答案,计算引擎对象对给出的数据执行相应操作,并存储操作的结果。
选作内容:
如果用户输入的表达式不合法,可以判别出来并给出相应的错误提示。
8.设计一个排课程序
问题描述:
每位教师都有教案工作量,教师对他所希望讲授的课程表达为一个期望值,1,2…,n,其中1位最高的期望值。
课程也有优先级,1,2…,n,用来决定将课程分给教师的顺序,其中1时最高的优先级。
设计一个程序针对某些课程给某些教师进行排课。
基本要求:
程序运行时,用户输入教师信息(姓名、教师号、工作量)、课程信息(课程名、课程号、周学时、总学时、优先级)、教师对所希望讲授课程的期望值以及教案工作量等相关信息,所有信息应保存在文件中,程序根据课程的优先级以及教师对课程的期望值进行排课。
为了公平起见,程序随机分配课程,如果10门课程都有优先级1,程序以随机的顺序将这些课程分给教师,如果10位教师对某门课程的期望值为1,程序应从10位教师中随机选择一个。
最后输出排课情况,即某位老师上某门课程,以及某位老师的工作量。
测试数据:
程序应能实现对不少于20门课和10个教师的排课,并且使每个教师的满意度达到最大,不存在工作量不满的教师以及未分配的课等情况。
实现提示:
可定义一个教师类存放教师信息,所有教师的信息可以用链表存储;定义一个课程类存放课程信息,所有课程的信息可以用链表存储;定义一个排课类进行排课,排课类可以访问课程和教师信息。
选作内容:
对两个同类班级安排一学期(20周)的课程,程序应能处理某些限制,如一个老师不能同时给两个班上课。
9.设计一个Database类
问题描述:
设计一个Database类。
Database类是一个表的集合,而表又由行和列组成。
例如,下面的雇员信息表包含三个记录,每个记录有四个字段(Employee、Name、Department和Boss)。
雇员
姓名
部门
部门经理
111-11-1234
Cruz
ACC
Warder
213-44-5649
Johnston
MIS
Michaels
321-88-7895
Tom
FIN
Bearskin
基本要求:
能够完成对数据库的基本操作;包括创建数据库,实现对数据库里面的表的添加,删除;以及能够完成对表结构的修改(如添加或删除字段),以及对表中的记录进行添加和删除;能够完成对使用适当的查询语言从一个或多个表中查找相关信息。
测试数据:
可以选取高校人员(教师、学生、职工等)数据库作为测试数据
实现提示:
Database类的公有接口包含如下数据成员:
•创建一个表。
•通过增加或删除字段修改表结构。
•删除一个表。
•在表中增加一个记录。
•从表中删除记录。
•用适当的查询语言从一个或多个表中查找信息。
选做内容:
高校人员信息通常保存在文件里面,可以从文件里面读取人员信息;然后完成上面操作。
10.电煤气管理系统
问题描述:
设计一个水电管理信息系统,能够对高校的水电费用进行管理,包括了登记费用,查询费用,以及住户信息管理等。
在设计时要考虑到学生和教工在用水电时的不同,学生可以免费使用一定额度的水电,超过这个额度的随便以后必须自费使用,且自费部分水电费的价格标准要高于教工的收费标准(主要是节约资源)。
基本要求:
1.实现对用户信息的录入
2.实现水电煤气数据的录入
3.计算并查询用户应缴费用
4.查询未缴纳费用名单
测试数据:
可选用小区物业管理部门的数据,也可采用手工输入不少于10个用户信息的数据。
实现提示:
用户基本信息类,教工用户信息类,学生用户信息类;收费标准类,该类存储水电煤气标准单位的收费标准,如:
煤气,1.0元/立方M;不同类型人员水、电、煤气信息类,这些类可以包括水表,电表,煤气表ID,抄表时间,上次抄表时间,本次抄表时间,上次抄表度数,本次抄表度数,本次使用度数,费用,是否缴费标记等信息。
在实现的时候考虑继承和多态技术的合理使用。
选做内容:
实现用户查询系统能够找出该用户半年之内的交费记录和本次应交费的数据。
11.对参赛结果分数进行处理:
参赛选手n人(n>1),评委m人(m>2),评委给每一选手打一个分数score(分数score为小于等于10的一个正实数)。
选手的最后得分lastScore计算方法为
(1)m<9时,去掉一个最高分和一个最低分后另m-2个得分的平均值。
(2)m≥9时,去掉两个最高分和两个最低分后另m-4个得分的平均值。
假设事先已经建立了text型的数据文件f1.txt,其中依次记录着n个选手的编号(一个正整数)、姓名(一个字符串)以及m个评委给出的得分。
请编制程序,依次从数据文件f1.txt中读入n个选手的有关信息,而后按上述规定方法计算出每一个选手的最后得分,而且往屏幕上以及另一个text型文件f2.txt中同时输出如下形式的结果信息。
假设参赛选手人数n=5,评委人数m=7,磁盘文件f1.txt中的初始数据为:
1zhangjin8.89.37.98.78.99.79.2
2lintao8.98.28.68.88.59.19.3
3guojian8.98.48.78.68.68.48.6
4maling7.98.38.58.68.58.98.3
5liuyifan9.59.19.89.29.09.58.9
那么,程序执行后,屏幕显示结果以及磁盘文件f2.txt中的结果均应该为:
----------------------------------------------------------
参赛号姓名最高分最低分累积分最后得分
----------------------------------------------------------
1zhangjin9.77.944.98.98
2lintao9.38.243.98.78
3guojian8.98.442.98.58
4maling8.97.942.28.44
5liuyifan9.88.946.39.26
----------------------------------------------------------
思考:
可进一步考虑找出比赛的第1至第k名,也在屏幕以及f2.txt中同时输出相关的结果信息(k小于等于n,并规定若多个选手最后得分相同时,则有效分(即已删除原来的最高分后)中最高分高者名次优先)。
12.设计一个类CStudent,类中包含一个学生的基本数据如下:
编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。
并假设编号为整数,且从1号往后连续编码;姓名为字符串,性别为字符。
如:
1LiPingm18899894
请采用binary文件形式,并使用随机读写处理方式,对自定义CStudent类的对象数据进行存储与读写处理(即是说,总按具有连续编码的编号num为“序”来对文件中的各对象数据进行随机读写处理)。
并设计该类的成员函数,而且对输出运算符“<<”进行重载,使该运算符能够完成将一个学生的信息输出到屏幕上。
要求成员函数完成以下功能:
(1)从键盘输入一个学生的有关信息,并将它们存入到数据文件中(按编号来确定写出位置)。
(2)按编号对学生信息进行检索并将检索结果显示在屏幕上。
(3)按姓名对学生信息进行检索并将检索结果显示在屏幕上。
(4)计算某编号学生的总成绩与平均成绩。
(5)列出所有总成绩超过n分的性别为s同学的有关信息(n,s由用户从键盘输入)。
思考:
可进一步对上述程序进行扩充,如,添加学生基本数据(籍贯,专业,班级,其他各门成绩,奖惩记录等),并添加所需要的其他相关处理函数(如可通过咨询教案办公室管理人员后确立),进而将其编制成为一个简单而实用的小型学籍与成绩管理软件。
13.日期时间显示
(1)定义一个时间类Time,能提供时、分、秒组成的时间,并提供时间增加的方法(按秒)。
(2)定义一个日期类Date,记录年、月、日,并提供日期增加的方法(按天)。
(3)由类Time和日期类Date,派生出DateTime类,除具有年、月、日、时、分、秒外,还增加国名和与格林威治时间的差。
编一应用程序,输入年、月、日、时、分、秒,在屏幕上模拟显示一电子计时器,不断输出下一秒的时间和日期,以及格林威治的日期和时间。
注意,当对日期增加1天后,会涉及所谓的“进位”问题:
首先算出本“日”所在的月份具有的天数N,若加1之后的“日”数值超过所在的月份具有的天数N时,“进位”到月,而月份若超过12时还要“进位”到年。
思考:
可对该类增加你所考虑到的其他功能,如,对日期进行输入,计算二日期的间隔天数,计算某日期为星期几,打印对象当前数据的y年m月的月历,一次增加若干天,对两个日期进行其他比较运算等。
14.某商场有如下的几种货品:
衬衣、鞋子、帽子、裤子、冰箱、电视、立柜、壁橱、沙发。
每一种货物都有详细的说明信息。
衬衣:
布料、尺寸、单价、产地、库存量、所属货柜;
鞋子:
皮料、尺寸、单价、产地、库存量、所属货柜;
帽子:
布料、样式(平顶或尖顶)、尺寸、单价、产地、库存量、所属货柜;
裤子:
布料、尺寸、单价、产地、库存量、所属货柜;
冰箱:
制冷类型、样式(二门或三门)、颜色、尺寸、单价、产地、库存量、重量、所属货柜;
电视:
样式(彩色或黑白)、颜色、尺寸、单价、产地、库存量、重量、所属货柜;
立柜:
木料、颜色、尺寸、单价、产地、库存量、所属货柜;
壁橱:
木料、颜色、尺寸、单价、产地、库存量、所属货柜;
沙发:
木料、皮料、颜色、尺寸、单价、产地、库存量、所属货柜;
对这些商品的操作有:
新商品的录入,商品的进库,商品的出库,商品的调价,所属货柜的管理,库存的统计,总价格的计算,产地的统计。
要求自行设计数据结构,用类结构将上述的货品表示出来。
在上一步的基础上,将上述的商品管理计算机化,完成操作要求的功能。
15.定义并实现一个整数集合类int_set,集合类中cur_size表明当前集合中有几个整数,集合中最多含max_size个整数,存放集合元素的数组是动态的。
要求提供的方法有:
(1)增加一个整数到集合中;
(2)从集合中去掉一个元素;
(3)判断一个元素是否在集合中;
(4)重载<<运算法,输入集合;重载>>运算符输出集合;
(5)分别实现集合的交、并、差运算。
16.自选题目。
自选题目必须有一定的难度,能体现面向对象编程思想。
自选题目的成绩较正常的评分低一级。
四、设计方法和步骤
分析设计准备阶段(30%)
编程调试阶段(50%)
总结报告和书写说明书阶段(10%)
考核阶段(10%)
五、设计成果的编制
1、完整正确的程序
2、写出具体的程序说明和设计思想
六、评分标准及成绩评定
通过设计答辩方式,并结合学生出勤情况、动手能力,独立分析解决问题的能力和创新精神,总结报告和答辩水平以及学习态度综合考评。
成绩分优、良、中、及格和不及格五等,缺勤率达20%及以上者该环节成绩不合格。
七、设计指导教师及分组情况
1、具体的值班安排表。
星期
1-2
3-4
5-6
周一
周二强(机房)
苏靖枫(教室)
苏靖枫(教室)
周二
周二强(教室)
苏靖枫(教室)
周二强(机房)
周三
苏靖枫(教室)
周二强(机房)
苏靖枫(教室)
周四
苏靖枫(机房)
周二强(机房)
苏靖枫(教室)
周五
周二强(机房)
周二强(教室)
周二强(教室)
2、学生分组:
一人一组。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 学习 课程设计 方案 任务书
![提示](https://static.bdocx.com/images/bang_tan.gif)