C++结构体、类和对象- Part II--类和对象[2025-06-18]

【同济】C++结构体、类和对象- Part II–类和对象[2025-06-18]

§7.结构体、类和对象- Part II–类和对象

首次提醒:6.18为本课程所有作业的最终截止时间,考虑到批改作业需要预留一定时间,不支持任何理由的延期!

[注意:]

1、本次作业不允许使用未学过的知识点,包括 STL容器等

2、除明确要求外,已学过的知识中不允许使用 goto/全局变量/C++的 string类

3、cstdio、cmath、cstring中的系统函数可以直接使用,包括课上未介绍过的,具体可自行查阅相关资料

4、除明确要求外,所有 cpp源程序不允许使用 scanf/printf进行输入/输出

5、多编译器下均要做到“0 errors,0 warnings”

6、输出为浮点数且未指定格式的,均要求为 double型, C++为 cout缺省输出, C为%lf的缺省输出

7、认真阅读格式要求及扣分说明!!!

[输出格式要求:]

1、为方便机器自动判断正确性,作业有一定的输入输出格式要求(但不同于竞赛的无任何提示)

2、每个题目见具体说明,必须按要求输入和输出,不允许有偏差

3、没有特别说明的情况下,最后一行有效输出的最后有一个endl

4、本次作业的比对要求为 txt_compare在–trim right下与 demo做到完全一致

补充:

3、题目同 3-b5(从键盘输入年月日的值,计算这是该年的第几天)

①用类封装的形式实现

基准程序 7-b3.cpp已部分给出,按要求完成即可(不要违规)

4、已知三角形的三点坐标,求三角形的面积

①用类封装的形式实现,要求用两种类封装方式

②类的定义和实现放在 7-b4-1. h/7-b4-2. h中,按要求补充完整即可(不要违规,需要提交)

测试用例放在 7-b4-1. cpp/7-b4-2. cpp中(检查作业时会替换,不需要提交)

④ 7-b4-1.cpp/7-b4-2.cpp的区别就是包含头文件的不同,其余均相同

项目组织结构如下图所示

5、已知有某门课前后两轮的选课名单,对比前后两轮的名单,打印出的相应的选课数据分析

(学习静态链接库的使用方法)

程序已部分给出,按要求完成即可

提供7-b5-demo.exe供参考

附件给出了本课程04班理论课(5000244001604)三轮选课的名单,可以任意两两前后组合,查看程序的输出(将附件给出的文件名改短,不要带空格,也可以改成1.txt等简易形式)

读文件的方法没学过也不用学,通过调用静态链接库中已实现的两个函数read_stulist和print_stulist来完成,具体方法见⑤

如何在项目中使用静态链接库(以7-b5为例)

a)建立7-b5项目,将附件给出的7-b5.cpp、read_stulist.h、lib_read_stulist.lib和lib_read_stulist.pdb文件复制到7-b5项目对应的目录下(注意文件名要去掉多余的前缀),如图所示

b)将基准源文件7-b5.cpp添加到项目中(源文件-鼠标右键菜单-添加-现有项-出现的对话框中选择7-b5.cpp)

将头文件read_stulist.h添加到项目中(头文件-鼠标右键菜单-添加-现有项-出现的对话框中选择 read_stulist.h)

d)将 lib_read_stulist.lib静态链接库文件添加到项目中(项目-右键菜单-添加-现有项-出现的对话框中选择lib_read_stulist.lib)

e)lib_read_stulist.pdb文件不需要放入项目中(但需要在文件目录中存在)

f)完成后的项目组织结构如下图所示

注意:文件命名必须符合图示规则,如果不按要求而造成编译错误则得分为0

选课名单每行一个学生,排列无序且可能重复,除此之外的其它信息正确与否不用管,处理read_stulist读到的结果即可

附件给出的read_stulist.h和lib_read_stulist.lib、lib_read_stulist.pdb不准修改,也不需要提交,检查作业时会用新的lib_read_stulist.lib放入并编译

例:新的 lib_read_stulist.lib用于读取姓名在前、学号在后的选课名单,只要保证放入struct student中正确,就不影响本题你做的部分的正确性

要求最后的输出按学号升序排列

本题仅要求VS方式实现即可

[输出格式要求]

1、每行输出的序号固定宽度为4、学号固定为7、第一轮/第二轮固定为6、姓名需要动态适应(测试方法,给姓名最长的同学再加一个字)

2、每行首尾各空一个空格,列之间为两个空格

3、输出左对齐

4、要求txt_compare在–trim right下与demo保持一致

6、定义一个简单的Date类,能实现以下要求:

①有年、月、日三个成员

②允许用以下方式进行对象初始化

Date d1;

//2000.1.1(无参构造,默认为2000.1.1)

Date d2(2025,6,12);//2025.6.12(三参构造,分别对应年月日)

Date d3(45819);//2025.6.12(一参构造,参数值表示从1900.1.1开始的天数)

定义set成员函数,能设置对象的日期

同时设定年月日(月、日默认均为1):

set(2025,6,12);

//设置当前日期为2025.6.12

set(2025,6);

//设置当前日期为2025.6.1

set(2025);

//设置当前日期为2025.1.1

同时设定年月日(含非法值,若多个非法则按年月日的顺序处理):

set(1899,2,29);

//年1899非法默认为2000,此时月日合法,值问哦2000.2.29

set(1899,13,32);//年1899非法默认为2000,月13非法,默认1,日32非法默认1只设定年、月、日的部分(为0的参数不变)

(假设对象当前日期是2025.6.12)

set(2007,0,0);//设日期为2007.6.12(月日不变)

set(0,3,18);//设日期为2025.3.18(年不变)

定义get成员函数,能取对象当前的日期

(假设对象当前日期是2025.6.12)

get(y,m,d);//y,m,d为int型变量,调用后y,m,d的值分别是2025、6、12

定义 show成员函数,能显示对象当前的日期(xxxx.x.x形式)

[要求:]1、Date类的定义放在7-b6.h中,Date类成员函数的体外实现要求放在7-b6.cpp中,两个文件均已部分给出,按要求完成即可(不要违规)

2、在7-b6-main.cpp中给出了Date类的测试用例,不需要提交,检查作业时会替换

3、限定日期的范围为1900.1.1-2099.12.31,闰年、大小月的合法性要进行考虑

4、在构造函数及set函数中若出现非法年份,均用缺省值2000代替

例:Date d1(1870,3,15),则 d1为 2000.3.15

d1.set(2112,3,4),则d1为2000.3.4

在构造函数及set函数中若出现月、日非法,均按缺省值1处理

例:Date d1(2024,13,15),则d1为2024.1.15

d1.set(2024,5,32),则d1为2024.5.1

非法的判断按年月日的顺序进行处理,多个非法值也按年月日的顺序处理

例:Date d1(1899,2,29),则d1为2000.2.29

d1.set(1899,2,30),则d1为2000.2.1

6、提供7-b6-demo.exe供参考

7、程序注释与实际代码的日期如果不同,以代码为准

8、项目组织结构如下图所示

[编译器要求:]

编译器VS编译器Dev
7-b3.cpp计算天数(类封装形式)YY
7-b4-1.h求三角形面积(方法1)YY
7-b4-2.h求三角形面积(方法2)YY
7-b5.cpp选课数据分析Y
7-b6.cpp简单Date类YY

[作业要求:]

1、6月18日前网上提交本次作业

2、每题所占平时成绩的具体分值见网页

3、超过截止时间提交作业会自动扣除相应的分数,具体见网页上的说明

再次提醒:6.18为本课程所有作业的最终截止时间,考虑到批改作业需要预留一定时间,不支持任何理由的延期!

源码联系UP主 -> https://space.bilibili.com/329101171

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值