第7单元 - 作业2:编程互评

查看帮助

返回
 

提交作业(剩余10天)

完成并提交作业

 
 

作业批改

互评训练

 
互评作业

 
自评作业

 
 

成绩公布

查看成绩
 

由于在线编程不支持文件操作,因此,本单元的作业需要采用互评方式完成。

在互评评分标准中,会有对题目的解析,所以,想要知道如何做题的同学,一定要参加互评

本次作业有两道题,分别练习文本模式文件IO以及二进制文件IO

依照学术诚信条款,我保证此回答为本人原创,所有回答中引用的外部材料已经做了出处标记。

1
(10分)

题目说明请参见 本单元 【第X节:第7单元作业说明】中的 【第7单元 - 单元作业第2题说明

请提交代码(仅 cpp 文件)。

本作业的解析结果在互评的得分标准中。所以,想要了解如何做这道题的同学,务必进行互评

答案内容超过5000字建议使用附件形式上传
 
  1. #include <fstream>
  2. #include <iostream>
  3. #include <limits>
  4.  
  5. using namespace std;
  6.  
  7. class Screen {
  8. private:
  9. //----补充多个数据域成员
  10.  
  11. // 在Screen类中获取/释放图形窗口资源,是一种RAII方法
  12. // 关于RAII,可以参见异常处理单元的材料
  13. unsigned int width_;
  14. unsigned int height_;
  15. static Screen *instance;
  16.  
  17. Screen(unsigned int width, unsigned int height) {
  18. // 如果启用了图形库,则将初始化图形模式的函数置于此处
  19. // initgraph(width_, height_);
  20. width_ = width;
  21. height_ = height;
  22. };
  23. ~Screen() {
  24. // 如果启用了图形库,则将关闭图形模式的函数置于此处
  25. // closegraph();
  26. delete instance;
  27. instance = NULL;
  28. }
  29.  
  30. public:
  31. //----补充 getWidth() 与 getHeight() 函数,
  32. unsigned int getWidth()
  33. {
  34. return width_;
  35. }
  36.  
  37. unsigned int getHeight()
  38. {
  39. return height_;
  40. }
  41.  
  42. static Screen* getInstance(unsigned int width = 640, unsigned int height = 480) {
  43. // 单例模式
  44. //----补充函数体
  45. Screen* ret = instance;
  46. if (ret == NULL)
  47. {
  48. instance = new Screen(width, height);
  49. ret = instance;
  50. }
  51.  
  52. return ret;
  53. }
  54. };
  55.  
  56. Screen* Screen::instance = 0;
  57. //----补充Screen类的特殊数据成员初始化语句
  58.  
  59. int main() {
  60. int width, height;
  61. Screen* screen = 0;
  62. //第7单元 - 单元作业第2题说明 (概要)_1. 用 string 对象保存文件名 "screen.txt";然后创建 fstream 对象,再调用open函数,使用读写模式打开文件。
  63. string fileName = "screen.txt";
  64.  
  65. fstream fs;//第7单元 - 单元作业第2题说明(详细)_1. 假定文件流对象为 fstream fs;
  66.  
  67. fs.open(fileName, ios::in | ios::out);//第7单元 - 单元作业第2题说明(详细)_2. 读写模式打开文件时,需要使用 ios::in | ios::out 作为流对象fs的 open 函数的参数
  68.  
  69. //第7单元 - 单元作业第2题说明 (概要)_2. 使用读写模式打开的文件,如果文件不存在,则会打开失败。在这种情况下需要使用单独的“写模式”打开文件然后再关闭该文件,即可创建一个长度为0的空文件。然后再以读写模式打开该文件。
  70. //第7单元 - 单元作业第2题说明(详细)_3. 判断文件操作(打开、读写)是否成功,使用 fs.fail() 判断。如果成功, fail() 返回 false,否则返回 true
  71. if (fs.fail()) {
  72. //输出提示信息
  73. std::cout << "使用读写模式打开的文件,如果文件不存在,则会打开失败。" << std::endl;
  74. //用写模式打开文件
  75. fs.open(fileName, ios::out);
  76. //关闭文件
  77. fs.close();
  78. //再次用读写模式打开文件
  79. fs.open(fileName, ios::in | ios::out);
  80. }
  81.  
  82. //第7单元 - 单元作业第2题说明 (概要)_3. 从打开的文件中,读取屏幕的宽和高。如果读取失败,则从键盘读入屏幕的宽和高。同时,要清除文件流的状态位,否则后面的所有文件操作代码均会失败。
  83. //第7单元 - 单元作业第2题说明(详细)_4. 打开文件后,如果文件为空(大小为0),那么从文件流里面读取数据时会失败。此时需要从键盘读取屏幕的宽和高。然后,需要调用下面的函数,清除文件流的状态位,否则所有后续文件操作都会失败。
  84.  
  85. //获取文件大小
  86. fs.seekg(0, ios_base::end);
  87. int nFileLen = fs.tellg();
  88.  
  89. if (nFileLen == 0)
  90. {
  91. std::cin >> width >> height;
  92. fs.clear();
  93. }
  94. else
  95. {
  96. fs.seekg(ios::beg); //将文件的读指针移动到文件头
  97. fs >> width >> height;
  98. }
  99.  
  100. //第7单元 - 单元作业第2题说明 (概要)_4. 保留原 main() 函数中的代码:
  101. screen = Screen::getInstance(width, height);
  102. screen = Screen::getInstance();
  103.  
  104. //第7单元 - 单元作业第2题说明 (概要)_5. 在文件的头部开始,写入屏幕的宽(screen->getWidth())和屏幕的高度(screen->getHeight())
  105. fs.seekp(ios::beg); //将文件的写指针移动到文件头
  106. fs << screen->getWidth() << " " << screen->getHeight();
  107.  
  108. //第7单元 - 单元作业第2题说明 (概要)_6. 如果写文件出错,则提示错误信息然后关闭文件并返回 - 1
  109. if (fs.fail())
  110. {
  111. std::cout << "6. 如果写文件出错,则提示错误信息然后关闭文件并返回 - 1" << std::endl;
  112. fs.close();
  113. return -1;
  114. }
  115. //第7单元 - 单元作业第2题说明 (概要)_7. 从文件中读取刚刚写入的屏幕的宽和高,然后显示到屏幕上
  116. fs.seekg(ios::beg); //将文件的读指针移动到文件头
  117. fs >> width >> height;
  118. std::cout << width << " " << height;
  119.  
  120. //第7单元 - 单元作业第2题说明 (概要)_8. 最后关闭文件
  121. fs.close();
  122.  
  123. return 0;
  124. }

网易云课堂_C++程序设计入门(下)_第7单元:出入虽同趣,所向各有宜 – 文件输入和输出_第7单元 - 作业2:编程互评的更多相关文章

  1. 网易云课堂_C++程序设计入门(下)_第10单元:月映千江未减明 – 模板_第10单元 - 单元作业:OJ编程 - 创建数组类模板

    第10单元 - 单元作业:OJ编程 - 创建数组类模板 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...

  2. 网易云课堂_C++程序设计入门(下)_第9单元:白公曾咏牡丹芳,一种鲜妍独“异常”_第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理

    第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前 ...

  3. 网易云课堂_C++程序设计入门(下)_期末考试_期末考试在线编程题目

    期末考试在线编程题目 返回考试   本次考试题目一共两个,在考试期间可以不限制次数地提交 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间 ...

  4. 网易云课堂_C++程序设计入门(下)_第11单元:工欲善其事必先利其器 - STL简介_第11单元 - 单元作业2:OJ编程 - list 与 deque

    第11单元 - 单元作业2:OJ编程 - list 与 deque 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之 ...

  5. 网易云课堂_C++程序设计入门(下)_第8单元:年年岁岁花相似– 运算符重载_第8单元 - 作业2:OJ编程 - 重载数组下标运算符

    第8单元 - 作业2:OJ编程 - 重载数组下标运算符 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...

  6. 网易云课堂_C++程序设计入门(上)_第2单元:丹青画松石– EGE图形库

    第2节:一个简单的EGE程序 #ifndef _GRAPHICS_H_ #define _GRAPHICS_H_ #ifndef __cplusplus #error You must use C++ ...

  7. 网易云课堂_C++程序设计入门(上)_第6单元:丹枫虽老犹多态–继承与多态_第6单元作业【2】- 在线编程(难度:中)

    第6单元作业[2]- 在线编程(难度:中) 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统 ...

  8. 网易云课堂_C++程序设计入门(上)_第1单元:C++概览_第1单元作业 - 写代码 - 互评 (难度:易)

    第1单元作业 - 写代码 - 互评 (难度:易) 查看帮助 返回   提交作业(截止时间已过) 完成并提交作业     作业批改 互评训练   互评作业   自评作业     成绩公布 查看成绩 温 ...

  9. 网易云课堂_C++程序设计入门(上)_第5单元:万类霜天竞自由 – 对象和类的更多内容_第5单元作业【4】 - 在线编程(难度:难)

    第5单元作业[4] - 在线编程(难度:难) 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系 ...

随机推荐

  1. ldd - 显示共享库的依赖情况

    总览 (SYNOPSIS) ldd [-vVdr] program ... 描述 (DESCRIPTION) ldd 显示 每个 程序 需要 的 共享库 (shared library), 程序名 在 ...

  2. matlab读取内容为二进制的TXT文件

    本方法同样适合读取十六进制和二进制以外的其他进制文件,txt使用一个最简单的命令就可以读取 textread 这是一个十分有用,简便的函数(对于fopen fscanf而言)读取二进制txt文件:假如 ...

  3. Linux系统nmtui/nmcli绑定双网卡为team

    今天给大家带来图形化界面网络配置工具—nmtui的使用方法,可以省去敲命令的繁琐,较少误操作,结果更加直观. 小知识: nmtui:Network Manager Text User Interfac ...

  4. 最简洁地说明常用的git指令(1)

    前提条件,在github上面创建一个仓库,注册好git账号,下面开始 首先在项目文件夹下面,如果有安装git则邮件gitbash进入控制台.另一种方式是使用IDEA打开你要上传的工程,在里面的命令行下 ...

  5. 第02课:启动GDB调试

    使用GDB调试程序一般有三种方式: gdb filename gdb attach pid dgb filename corename 也对应这本节课的核心内容: 直接调试目标程序 附加进程 调试co ...

  6. 一个web应用的诞生(4)

    上一章实现了登录的部分功能,之所以说是部分功能,是因为用户名和密码写成固定值肯定是不可以的,一个整体的功能,至少需要注册,登录,密码修改等,这就需要提供一个把这些值存储到数据库的能力. 当前的主流数据 ...

  7. 推荐几个天气Api接口 (可在小程序中使用)

    国内的地图软件基本是支持查询天气的唯独腾讯地图不支持天气查询,当然其他天气平台提供的接口也是够个人使用的 1.高德地图(高德地图开发者平台)支持获取实时天气数据 2.百度地图(百度地图开放平台)支持获 ...

  8. Python 3标准库第三章

    时间过得很快,又是一周过去了,今天感觉迷迷糊糊的,不在状态,然后,下面开始我们的讲解,还是跟大家分享一下我自己的一些想法,第一.怎么讲了,就是各位如果有怀才不遇的想法,我感觉最好不要有这种想法;第二. ...

  9. Python---webserver3

    一.v07-添加路由功能 - 路由:能够理解请求并按照请求调用相应处理函数的模块 - 理解请求内容 - 能够调用或者指定相应业务处理模块 - 算法: - 按行读取传入报文 - 假如报文能用空格分割成三 ...

  10. 【NOIP2016提高A组模拟8.19】(雅礼联考day2)总结

    第一题又有gcd,又有xor,本来想直接弃疗,不过后来想到了个水法: 当两个相邻的数满足条件时,那么他们的倍数也可能满足条件.然后没打,只打了个暴力. 正解就是各种结论,各种定理搞搞. 第二题,想都不 ...