• 【苏大c++第二次考试模拟】


    1. 按以下要求编写程序

    请各位考生课程信息发布网站下载数据文件location.txt,然后将数据文件手动保存D盘根目录下。并按要求编写一个类Record,存储文件location.txt中的数据。该文件各个字段的信息如下:

    1. 第一列表示用户的名字name;
    2. 第二列形如A:B:C,A表示小时hour、 B表示分钟minute、C表示秒钟second;
    3. 第三列表示纬度latitude;
    4. 第四列表示经度longitude;

    Record类的要求如下:

    1. 该类的私有数据成员如下:

    class Record

    {

    private:

    string name;

    int hour, minute, second;

    double latitude, longitude;

    public:

    …………

    1. 该类public部分包含的函数如下:
    1. 构造函数,name默认值为“noName”,其余参数默认值为0;
    2. 六个常成员函数,分别返回名字、时、分、秒、纬度、经度;
    3. 友元函数,重载前自增操作符++,用于将当前对象的秒数加1。在实现的过程中需要注意进位问题。例如:13:59:59执行该操作的结果应该是14:00:00;23:59:59执行该操作的结果应该是00:00:00
    4. 友元函数,重载加操作符+,用于将当前对象的经度和纬度都加上一个double类型的数据;
    5. 拷贝构造函数,实现对象复制;
    1. 编载流输出运算符,用于显示一个对象的信息。其中,名字占10列并左对齐,时钟hour、分钟minute、秒钟second各占2列并右对齐,纬度latitude、经度longitude各占20列、精确到小数点后10位并右对齐。
    2. 编写函数inputData,完成数据的读入,结果存放在向量vec_record中。
    3. 编写函数outPut,用于把向量vec_record的前n条数据显示在屏幕上。注意:显示格式在重载流输出运算符中已有表述;如果向量中的数据不足n条时,则显示向量中的全部数据。
    4. 编写函数processTime,对向量vec_record中每个对象进行如下处理:如果对象的时间不在[6:00:00—22:00:00]范围内,则认为该对象是异常的,需要从vec_record中删除该对象;如果对象的时间在[6:00:00—22:00:00]范围内,则认为该对象是正常的并保留在vec_record中。
    5. 编写函数processLocation,完成如下功能:首先,调用重载的加号操作符,将vec_record中每个对象的经度和纬度各加0.1; 然后,判断对象的纬度是否在[34.0, 41.0]范围内、经度是否在[96.0,122.0]范围内如果经度和纬度都在上述范围内,则保留该对象,否则从向量中删除该对象。
    6. main函数的具体内容如下:

    程序的main函数注意:不得修改main函数!对main函数每修改一处扣2分,最多扣10分。

    int main()

    {

    Record  record1("Randy", 11, 12, 13, 34.15, 117.21);

    Record  record2(record1);

    cout << record2 << endl;

    vector vec_record;

    string path = "D:\\location.txt";

    inputData(path, vec_record);

    processTime(vec_record);

    cout<< "After time processing: " << endl;

    outPut(vec_record, 10);

    processLocation(vec_record); //

    cout<<"After location processing: " << endl;

    outPut(vec_record, 10);

    return 0;

    }

    程序运行结果:(不一定是标准答案

    编程题评分标准

    大项

    子项

    评分项

    应得分

    实得分

    结果(65分)

    1. 类结构

    4

    2. 带缺省值的构造函数

    5

    3. 拷贝构造函数

    5

    4. 常成员函数

    6x1

    5. 前自增运算符重载

    5

    6. 流输出运算符重载函数

    5

    7. 函数inputData

    10

    8. 函数processTime

    10

    9. 函数processLocation

    10

    10. 函数outPut

    5

    程序运行异常中断、死循环或无任何结果

    -10

    main函数修改处(最多扣10分)

    -2 x n

    缩进对齐(2分)

    正确运用缩进对齐规则

    2

    有缩进对齐但不完全符合要求

    1

    没有使用缩进对齐规则

    0

    函数说明(2分)

    有较完整的函数说明

    2

    有函数说明但不够完整

    1

    没有函数说明

    0

    注释(1分)

    有注释

    1

    无注释

    0

    总分

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. using namespace std;
    8. class Record
    9. {
    10. private:
    11. string name;
    12. int hour, minute, second;
    13. double latitude, longitude;
    14. public:
    15. /*
    16. 构造函数,name默认值为“noName”,其余参数默认值为0;
    17. 六个常成员函数,分别返回名字、时、分、秒、纬度、经度;
    18. (暂不做)友元函数,重载前自增操作符++,用于将当前对象的秒数加1。在实现的过程中需要注意进位问题。例如:13:59:59执行该操作的结果应该是14:00:00;23:59:59执行该操作的结果应该是00:00:00。
    19. (暂不做)友元函数,重载加号操作符+,用于将当前对象的经度和纬度都加上一个double类型的数据;
    20. 拷贝构造函数,实现对象复制;
    21. */
    22. Record(string m_name="noName",int m_hour=0,int m_minute=0, int m_second=0,double m_latitude=0, double m_longitude=0){
    23. this->name=m_name;
    24. this->hour=m_hour;
    25. this->minute=m_minute;
    26. this->second=m_second;
    27. this->latitude=m_latitude;
    28. this->longitude=m_longitude;
    29. }
    30. Record(const Record &r1){
    31. this->name=r1.name;
    32. this->hour=r1.hour;
    33. this->minute=r1.minute;
    34. this->second=r1.second;
    35. this->latitude=r1.latitude;
    36. this->longitude=r1.longitude;
    37. }
    38. void operator=(const Record&r);
    39. string getName(){return this->name;}
    40. int getHour(){return this->hour;}
    41. int getMinute(){return this->minute;}
    42. int getSecond(){return this->second;}
    43. double getLatitude(){return this->latitude;}
    44. double getLongitude(){return this->longitude;}
    45. friend ostream& operator<<(ostream&cout, const Record &r);
    46. friend Record operator+(const Record&r,double n);
    47. friend Record& operator++(Record &r);
    48. };
    49. /*
    50. 3.(暂不做,老师提供代码)重编载流输出运算符,用于显示一个对象的信息。其中,名字占10列并左对齐,时钟hour、分钟minute、秒钟second各占2列并右对齐,纬度latitude、经度longitude各占20列、精确到小数点后10位并右对齐。
    51. */
    52. ostream& operator<<(ostream&cout, const Record &r){
    53. cout<setw(10)<
    54. cout<setw(2)<":"<setw(2)<":"<setw(2)<
    55. cout<setprecision(10)<setw(20)<
    56. cout<setprecision(10)<setw(20)<
    57. return cout;
    58. }
    59. Record operator+(const Record&r,double n){
    60. /*友元函数,重载加号操作符+,用于将当前对象的经度和纬度都加上一个double类型的数据;*/
    61. Record r1(r);
    62. r1.latitude+=n;
    63. r1.longitude+=n;
    64. return r1;
    65. }
    66. Record& operator++(Record &r){
    67. /*友元函数,重载前自增操作符++,用于将当前对象的秒数加1。
    68. 在实现的过程中需要注意进位问题。
    69. 例如:13:59:59执行该操作的结果应该是14:00:00;23:59:59执行该操作的结果应该是00:00:00。*/
    70. r.second+=1;
    71. if(r.second==60){
    72. r.second=0;
    73. r.minute++;
    74. if(r.minute==60){
    75. r.minute=0;
    76. r.hour++;
    77. if(r.hour==24){
    78. r.hour=0;
    79. }
    80. }
    81. }
    82. return r;
    83. }
    84. void Record::operator=(const Record &r1){
    85. this->name=r1.name;
    86. this->hour=r1.hour;
    87. this->minute=r1.minute;
    88. this->second=r1.second;
    89. this->latitude=r1.latitude;
    90. this->longitude=r1.longitude;
    91. }
    92. /*
    93. 4.编写函数inputData,完成数据的读入,结果存放在向量vec_record中。
    94. */
    95. void inputData(string path,vector &v){
    96. ifstream ifile(path);
    97. while(!ifile.eof()){
    98. string m_name;
    99. string time;
    100. int m_hour,m_minute,m_second;
    101. double m_latitude, m_longitude;
    102. ifile>>m_name>>time>>m_latitude>>m_longitude;
    103. for(int i=0;ilength();i++){
    104. if(time[i]==':'){time[i]=' ';}
    105. }
    106. stringstream ss(time);
    107. ss>>m_hour>>m_minute>>m_second;
    108. Record tempR(m_name,m_hour,m_minute,m_second,m_latitude,m_longitude);
    109. v.push_back(tempR);
    110. }
    111. ifile.close();
    112. }
    113. /*
    114. 5.编写函数outPut,用于把向量vec_record的前n条数据显示在屏幕上。注意:显示格式在重载流输出运算符中已有表述;如果向量中的数据不足n条时,则显示向量中的全部数据。
    115. */
    116. void outPut(const vector&v, int n){
    117. for(int i=0;isize();i++){
    118. cout<
    119. if(i+1==n){
    120. return ;
    121. }
    122. }
    123. }
    124. /*
    125. 6.编写函数processTime,对向量vec_record中的每个对象进行如下处理:如果对象的时间不在[6:00:00—22:00:00]范围内,则认为该对象是异常的,需要从vec_record中删除该对象;如果对象的时间在[6:00:00—22:00:00]范围内,则认为该对象是正常的并保留在vec_record中。
    126. */
    127. void processTime(vector&v){
    128. for(vector::iterator it=v.begin();it!=v.end();){
    129. if(it->getHour()>22 or it->getHour()<6){
    130. it=v.erase(it);
    131. }
    132. else{
    133. it++;
    134. }
    135. }
    136. }
    137. /*
    138. 7.(暂不做)编写函数processLocation,完成如下功能:首先,调用重载的加号操作符,将vec_record中每个对象的经度和纬度各加0.1; 然后,判断该对象的纬度是否在[34.0, 41.0]范围内、经度是否在[96.0,122.0]范围内;如果经度和纬度都在上述范围内,则保留该对象,否则从向量中删除该对象。
    139. */
    140. void processLocation(vector&v){
    141. for(vector::iterator it=v.begin();it!=v.end();){
    142. (*it)=(*it)+0.1;
    143. if(it->getLatitude()<=41 and it->getLatitude()>=34 and it->getLongitude()>=96 and it->getLongitude()<=122){
    144. it++;
    145. }
    146. else{
    147. it=v.erase(it);
    148. }
    149. }
    150. }
    151. int main()
    152. {
    153. Record record1("Randy", 11, 12, 13, 34.15, 117.21);
    154. Record record2(record1);
    155. cout << record2 << endl;
    156. vector vec_record;
    157. string path = "/Users/apple/Desktop/第一次模拟/location.txt";
    158. inputData(path, vec_record);
    159. processTime(vec_record);
    160. cout<< "After time processing: " << endl;
    161. outPut(vec_record, 10);
    162. processLocation(vec_record); //(暂不做)
    163. cout<<"After location processing: " << endl;
    164. outPut(vec_record, 10);
    165. return 0;
    166. }

    算是理解了吧。。。

  • 相关阅读:
    网络安全(黑客)自学
    Day715. 适配不同的类型的switch匹配 -Java8后最重要新特性
    vue-cli创建
    JVM调优参数设置步骤
    TouchGFX之Mixins
    java判断字符串是否为数字或中文或字母
    C 基础知识内容
    单点登录SSO
    从私有Git仓库的搭建到命令的使用再到分支管理,全流程全套服务包您满意
    ubuntn20.4安装git
  • 原文地址:https://blog.csdn.net/weixin_51305111/article/details/130914204