Advertisement

吉林大学软件学院卓班第三次设计模式练习

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
简介:本次吉林大学软件学院卓班活动为第三次设计模式实践练习,旨在通过小组合作的方式加深学生对设计模式的理解和应用能力。 练习03:创建型+结构型+其它(基于step0_src中的代码) 1. 当前代码大量使用了cout,这限制了程序只能输出到控制台屏幕,并且大部分类只能在控制台程序中复用。为了提高Menu等类的复用性并适应多种输出设备,如流设备、打印机和窗口等,请根据给出的类图设计实现相关类(PrinterDevice 和 WindowDevice 类暂不实现),同时修改原代码以保持输出结果不变。 2. 在显示各菜单时,希望在左侧添加一些空格或制表符使界面更加美观。请使用装饰模式扩展第1题中的类来达到这一目的。 3. 考虑到打印机设备的实际情况,在没有本地打印机的情况下,系统可能会连接网络上的多台打印设备。当需要打印文档时,由系统根据情况选择一台合适的进行打印操作。为了保持OutDevice等类接口的一致性,并让用户在使用远程和本地打印功能时感觉相同,请利用代理模式给出相关部分的类图并简要说明。 4. 希望在处理各菜单(Menu)的过程中增加一些额外的操作,例如显示一个头部信息或循环播放背景音乐。当离开某个菜单时则停止播放音乐。通过将Menu中的Process方法声明为虚函数,并复用现有的各个Menu实现新增功能,请使用装饰模式扩展代码以确保每次进入和退出菜单时都能自动处理这些操作。 5. 添加Player类作为演示,可以设定2-3个玩家角色:如第1号是HumanPlayer;第2、3号是AutoPlayer。当用户选择MainMenu中的Play选项后,各个玩家将依次进行游戏回合。对于每一轮次: - 当轮到AutoPlayer时, 显示当前地图然后转交给下一个player; - 轮到HumanPlayer时,则显示一个包含Go…(继续)、Load、Save和返回主菜单等选项的PlayMenu界面。 请完成上述功能实现,并进行相应代码修改,包括将MainMenu中的子菜单SaveMenu移动至PlayMenu下;调整LoadMenu的功能,在用户选择返回时不直接回到MainMenu而是执行MainMenue的Play流程。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • 优质
    简介:本次吉林大学软件学院卓班活动为第三次设计模式实践练习,旨在通过小组合作的方式加深学生对设计模式的理解和应用能力。 练习03:创建型+结构型+其它(基于step0_src中的代码) 1. 当前代码大量使用了cout,这限制了程序只能输出到控制台屏幕,并且大部分类只能在控制台程序中复用。为了提高Menu等类的复用性并适应多种输出设备,如流设备、打印机和窗口等,请根据给出的类图设计实现相关类(PrinterDevice 和 WindowDevice 类暂不实现),同时修改原代码以保持输出结果不变。 2. 在显示各菜单时,希望在左侧添加一些空格或制表符使界面更加美观。请使用装饰模式扩展第1题中的类来达到这一目的。 3. 考虑到打印机设备的实际情况,在没有本地打印机的情况下,系统可能会连接网络上的多台打印设备。当需要打印文档时,由系统根据情况选择一台合适的进行打印操作。为了保持OutDevice等类接口的一致性,并让用户在使用远程和本地打印功能时感觉相同,请利用代理模式给出相关部分的类图并简要说明。 4. 希望在处理各菜单(Menu)的过程中增加一些额外的操作,例如显示一个头部信息或循环播放背景音乐。当离开某个菜单时则停止播放音乐。通过将Menu中的Process方法声明为虚函数,并复用现有的各个Menu实现新增功能,请使用装饰模式扩展代码以确保每次进入和退出菜单时都能自动处理这些操作。 5. 添加Player类作为演示,可以设定2-3个玩家角色:如第1号是HumanPlayer;第2、3号是AutoPlayer。当用户选择MainMenu中的Play选项后,各个玩家将依次进行游戏回合。对于每一轮次: - 当轮到AutoPlayer时, 显示当前地图然后转交给下一个player; - 轮到HumanPlayer时,则显示一个包含Go…(继续)、Load、Save和返回主菜单等选项的PlayMenu界面。 请完成上述功能实现,并进行相应代码修改,包括将MainMenu中的子菜单SaveMenu移动至PlayMenu下;调整LoadMenu的功能,在用户选择返回时不直接回到MainMenu而是执行MainMenue的Play流程。
  • 优质
    本课程为吉林大学软件学院卓越班开设的设计模式系列教学活动之一,旨在通过实践练习深化学生对设计模式的理解与应用能力。第二次练习将聚焦于具体案例分析和团队项目合作,进一步提升学员的软件开发技巧及协作精神。 练习02 创建型+结构型+其它(以fromsrc目录中的代码为基础) 1. 在game类维护着curMenu对象,在运行期间仅有一个实例存在。而MenuMgr作为所有menu的管理器,可以负责管理curMenu。请将curMenu从Game类中移至MenuMgr中,并确保程序功能不变。 2. 同上题,请建立MapMgr类并将curMap从Game类移到MapMgr中以保持运行结果一致。 3. 查看Map.h文件中的Block组织形式为二维数组,实际上Block的布局可以多样。请使用桥接模式分离接口和实现,同时将读取/添加Block的方式改为线性索引方式。 - MapImp类可如下设计:(当需要不同的实现时,从该类派生即可) - 既然Map不再记录二维位置信息,则让Block自行管理其坐标。请完成相关代码修改以保持程序功能不变。 4. 目前地图布局由二维数组表示,表明相邻非空Block是相通的而不同行或列中的则不然。 实际上,可以有其它方式来描述地图结构,例如如下数据表展示的方式: 类型 序号 行 列 LEFT RIGHT UP DOWN A 1 0 0 2 6 B 6 1 0 ... 若希望每个Block“知道”其相邻的各Block,请扩展MapDirector、MapBuilder和Block类,改写MapMgr中的createMap函数以支持新布局方式并正确显示地图。 5. 回看3中所设计的MapImp类:请问是否使用了适配器模式?如果确实如此,则说明它适应了什么,并讨论采用类适配器模式的可能性。如果不适用该模式,解释原因。
  • 优质
    本次实践是吉林大学软件学院卓越班的一次设计模式专题练习,旨在通过实际操作加深同学们对软件设计模式的理解和应用能力。 《大富翁》游戏的初步类图可如下描述: 菜单系统中的各菜单可能包含以下内容: 请使用面向对象的方法编写一个控制台程序来实现该菜单系统的演示版本(可以选用C++或Java语言,暂时无需考虑异常处理)。默认情况下设定为两名玩家,并且音量设为50%,屏幕分辨率为1024*768。 示例主函数如下: ```cpp int main() { Game * game = new Game; game->init(); game->run(); game->term(); delete game; return 0; } ``` 这段代码创建了一个`Game`对象,并依次调用了初始化、运行和终止方法。
  • 优质
    本课程为吉林大学软件学院卓班开设的设计模式系列练习之一,旨在通过实践巩固学生对各种设计模式的理解与应用能力。 作业04 行为型+其它 1. 将游戏中的玩家分为两个类:HumanPlayer 和 AutoPlayer。初始状态下,每个玩家都位于地图的第一个Block上,并且初始移动方向任意。每一轮次中,HumanPlayer前进3格,AutoPlayer前进2格。前进的方向可以是四个可能的选项(前、左、右),但不能往回走。如果前方有可选路径,则必须选择一个可行的方向进行前进。 - HumanPlayer所在的Block用[X]表示。 - AutoPlayer所在的Block用(X)表示。 请根据上述要求编写代码实现功能。 2. 在Players类中,通过getFirst和getLast函数获取两个玩家对象,但这两个成员函数与使用deque存储玩家紧密相关,并且只能取得前后两位的玩家。考虑到游戏中可能有多个玩家并且数据结构可以多样化,请采用迭代器模式重新设计遍历所有Player的功能。 - 实现C++风格的外部迭代器类 CppIterator 和 Java风格的外部迭代器类JavaIterator。 3. 玩家在前进时,不同的策略会导致不同的移动方式。如等概率随机选择方向和根据给定的概率分布表进行决策(具体见下)。而且未来可能会添加新的行进策略或让玩家动态改变策略。 - 使用策略模式实现这一功能,并提供相应的接口以支持多种可能的行进策略。 4. 为了增加游戏趣味性,引入了卡片子系统与魔法子系统。Player能够使用这些卡牌和法术来影响其它对象或自身状态: - 修改PlayMenu为: PlayMenu1. Go...2. ApplyRobCard3. ApplyMeanCard4. ApplyReturnSpell5. Load6. Save7. Back To MainMenuYour selected: 并给Player类添加ApplyRobCard(Player * target)、ApplyMeanCard();和ApplyReturnSpell(Player * target),实现上述功能。 - 未来可能加入更多卡牌与法术,且这些新的元素作用的目标可能是Player、Block等。为了便于扩展而不需直接从Player或其子类派生新类型,请使用命令模式。 5. 增加FlyCard和FreezeSpell以影响玩家的移动速度: - 使用状态模式实现上述功能。 6. 若还需要增加HurtSpell,该法术会导致被作用的Player每轮次减少Money的数量为5,并持续2个轮次;增加LuckCard,使持有者在保持幸运状态下额外获得金钱。同时,引入ExFlyCard和SuperCard以增强玩家的能力或改变游戏规则。 - 实现上述功能时,请确保多个卡牌/法术效果可以共存。 7. 若某个Player的money小于等于0,则表示该player破产了,并退出当前的游戏过程;所有继续进行中的玩家需要减半他们的Money,同时将TripBlock的惩罚调整为200。如果所有的HumanPlayers都已破产,游戏返回到主菜单;若只剩一个HumanPlayer而其它AutoPlayers均已破产的话则显示胜利信息并回到主菜单。 8. 若各Player又分两种高富帅和白富美等有限几种类型。应用不同的Card、Spell等到不同类型玩家时可能产生不同效果。 - 请以访问者模式设计实现上述需求,以便于未来可以扩展更多类型的卡牌与法术,并且能够灵活地为每种类型定义特定的效果。
  • JSP课程
    优质
    吉林大学软件学院卓越班JSP课程设计项目是专为培养高素质软件工程人才设立的教学实践环节,旨在通过实际项目操作提升学生在Java Web开发中的专业技能与团队协作能力。 开发一个图书借阅管理系统,系统包括读者用户管理、图书管理和借阅管理功能。用户信息包含:用户编号、姓名、电话号码、电子邮件地址及家庭住址;管理员登录后可对这些信息进行增删改操作,并能修改用户的密码以及自身的账户设置。 每本图书的信息应涵盖其编号、分类标签、书名、出版日期和出版社等详情,同时记录作者的相关资料。一本图书在图书馆内可能有多份副本存在。每位用户一次最多可以借阅3本书籍,且单次借阅的有效期限为一个月;若需要延长使用时间,则需在到期前一周之内申请续期服务(注意:超时未还的书籍不可再办理续期手续)。 读者可通过互联网远程完成图书续借操作或查询个人的借书记录,并可自行更改账户密码及联系方式等个人信息。当用户前来归还或者再次借用图书之时,管理员需要先检查该用户的当前状态;若有逾期未还的情况,则必须支付相应的滞纳金(每本书每天0.1元),并且系统会详细记录下所有罚款的相关信息以备后续查询。 此外,为了更好地管理这些费用问题,系统还需提供一个功能来汇总并展示特定时间段内的全部罚单数据及其总计金额。对于那些尚未清偿逾期款项的用户,管理员可以生成一份未缴清单,并通过批量发送消息的方式提醒他们尽快归还图书;当借阅者登录到自己的账户时,会看到这些待处理的通知内容(但已读过的通知将不再重复显示)。
  • JAVAEE课程
    优质
    本课程是吉林大学软件学院卓越班的核心课程之一,专注于Java EE技术的教学与实践,旨在培养学生的软件开发能力及项目管理技能。 一、课程设计内容 根据开发组的兴趣与知识,在以下几类网站中选择一个作为自己的课程设计项目:电子政务类的网站(如政府类网站);社交类网站(类似天涯论坛那样的平台);生活服务类网站(例如点评网这样的站点);兴趣爱好类网站,比如摄影、旅游或读书社区等。鼓励创新和创意,具体类型与业务内容自定。 二、开发环境要求 1. 使用B/S架构,在Java EE平台上构建分布式系统。 2. 页面设计采用JSF技术而非JSP页面。 3. 建议使用NetBeans或者Eclipse作为开发工具。 4. 数据库推荐Mysql,也可以选择其他产品如JavaDB等。 三、性能要求 项目应满足以下基本需求: 1. 界面:简洁美观且操作便捷的用户界面设计; 2. 功能:包括但不限于登录系统及信息检索功能,并需独立完成软件架构与功能的设计工作。 3. 数据库:能够实现信息存储、查询和修改等功能的数据管理系统,必要时还需包含普通用户的数据库管理机制。 四、考核办法 课程采用小组形式进行开发(每组三人),全班共分十个小组。每个团队将根据项目的表现来进行评分,并且个人的最终成绩会依据其在项目中的贡献比例做出相应调整;最后提交完整的代码和设计报告电子版以及打印的设计报告作为学院存档使用。 五、评分标准 完成所有规定功能并达到基本要求,可获得90分。如有创新之处则可能额外加分;未完全实现的功能将酌情扣分。 六、设计报告 请按照《Java EE企业级应用技术》课程设计报告模板填写内容,并确保包含全部必要的部分,可以在适当的地方增加补充信息。打印时应保持现有格式不变。
  • 优质
    本课程为吉林大学软件工程系列课程之一,专注于教授和实践各种经典及现代的软件设计模式。通过丰富的习题与项目案例,帮助学生深入理解并掌握设计模式的实际应用技巧,提升软件开发质量和效率。 吉林大学软件学院卓班设计模式第三次练习 在代码中大量使用了`cout`输出语句,这限制了程序只能将结果输出到控制台屏幕,并且也限制了许多类仅能在控制台应用程序中被复用。为了提高如Menu等类的复用性并适应多种输出设备(包括但不限于流设备和控制台),需要进行一定的改进。
  • UML作业
    优质
    本作业为吉林大学软件学院卓越班学生完成的UML(统一建模语言)课程任务,旨在通过实践提升学生的软件设计与建模能力。 《统一建模语言UML》课程作业 No.1 EasyLibrary用例图: - 借阅者请求服务的用例。 - 图书管理员处理借书、还书等用例。 - 系统管理员进行系统维护的用例。 No.3 超市结账系统的活动图 No.4 巡航器状态图 No.5 顺序图_通信图_VOPC三合一小作业: 1. 【问题1】 - checkMaxTournament() - setDates(StartDate, EndDate) - createTournament(name, startDate, endDate, maxp) - requestExclusiveSponsor() - findInterestedExclusiveSponsors() - create() - notifyLeagueOwner() - setSponsorship(sponsor) 2. 【问题1】 (创建竞赛: 确定赞助商: 3. 【问题1】 - create() - fillcontents() - submitReport() - createIncident() - submit() - acknowledgeReport() - endReportTransaction() - dismiss() 【问题2】【问题3】
  • 数据库系统原理课程
    优质
    本项目为吉林大学软件学院卓越班学生在《数据库系统原理》课程中的实践作业,旨在通过实际操作加深对数据库设计与应用的理解。学生们需完成从需求分析到数据库实施的全过程,提升其解决复杂问题的能力和团队协作精神。 ### 1.1 项目总体说明 本项目旨在使用Java语言开发一个小型的数据库管理系统(DBMS),支持特定语法风格的信息增删改查操作,并实现索引创建、维护及删除功能,以优化查询速度提升系统性能。此外,该系统还提供了扩展接口,便于未来增加更多特性。 ### 1.2 项目组成员简介 **项目组长:** 负责任务分配与进度管理,确保团队按时按质完成各项任务;具备良好的组织能力和中等偏上的编程水平。 **组员一:** 擅长编写代码及数据结构应用,在红黑树算法方面有深入研究和实践经验。 **组员二:** 对字符串匹配问题理解深刻,拥有较强的编程技能。 **组员三:** 专注于软件测试与调试工作,善于查找并修复程序中的错误;具备中等偏上的编程能力。 ### 1.3 四人组队缘由 本团队成员基于各自的专长和兴趣而组成。组长负责统筹规划项目流程及进度安排,确保整个开发过程顺利进行;其余三位成员则根据自身技术特长承担相应模块的设计与实现任务,在分工明确的前提下共同推进项目的进展。
  • C++实验报告与代码集锦
    优质
    本资源汇集了吉林大学软件学院卓越工程师计划(简称“卓班”)学生的C++课程实验报告及源代码,旨在为学习编程语言、进行实践训练以及准备相关考试的同学们提供参考和帮助。 吉林大学软件学院卓班C++实验课的第一次实验报告及代码要求如下: 一、实验题目 1. 位运算封装:创建一个类来实现C语言中的六种基本位运算(与、或、异或、左移、右移和取反),并提供相应的函数接口。编写测试用例以验证功能。 2. 基于位运算的算术操作模拟:使用位运算法则构建加法、减法和乘法三种基本数学运算的功能,同样需要提供测试代码来检查正确性。 3. 整数数字累加计算:设计一个程序能够接收任意整数值并输出其所有数字相加之和的结果。 4. 1000的阶乘(1000!)计算:实现一种算法或方法以高效地求解大数阶乘问题,可以自由选择合适的技术手段来完成此任务。 报告内容应当包括但不限于以下部分: - 对上述每个实验题目的需求进行详细解释。 - 为关键步骤绘制流程图,并附带必要的文字说明帮助理解逻辑过程。 - 分析编程过程中遇到的挑战及解决策略讨论。 - 概述所开发程序的优点和局限性,以及可能的改进方向。 - 总结个人从此次实验中学到的知识点和技术技巧。