第十五周项目一:用二进制文件处理学生成绩
2015-06-13 16:49
531 查看
问题及代码:
运行结果:
学习心得:
这篇代码主要是主函数比较麻烦,要把原有的数据存到二进制文件中,再加上自己的信息。用BinaryViewer命令查看二进制文件文件,结果如图。
/* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称: 用二进制文件处理学生成绩 .cpp *作 者:白云飞 *完成日期:2015年6月13日 *版 本 号:v1.0 * *问题描述: (1)定义学生类,其中包含学号、姓名、C++课、高数和英语成绩及总分数据成员,成员函数根据需要确定。 (2)读入学生的成绩,并求出总分,用对象数组进行存储。ASCII文件score.dat中保存的是100名学生的学号、姓名和C++课、高数和英语成绩。 (3)将所有数据保存到一个二进制文件binary_score.dat中,最后通过键盘输入你的信息,并写入到文件中。 (4)为验证输出文件正确,再将binary_score.dat中的记录逐一读出到学生对象中并输出查看。 (5)用BinaryViewer命令查看二进制文件文件 *程序输入:个人的学号,姓名,c++,高数,英语的成绩 *程序输出:100名学生和自己的的学号、姓名和C++课、高数和英语成绩。 */ #include <fstream> #include<iostream> #include<cstring> #include<cstdlib> using namespace std; class Student { public: Student() {}; Student(int n, string nam, double c, double m, double e):num(n),name(nam),cpp(c),math(m),english(e) { total=c+m+e; } void set_value(int n,string nam, double c, double m, double e); string get_name() { return name; } double get_cpp() { return cpp; } double get_math() { return math; } double get_english() { return english; } double get_total() { return total; } void set_cpp(double c) { cpp=c; } void set_math(double m) { math=m; } void set_english(double e) { english=e; } void set_total(double t) { total=t; } friend ostream& operator<<(ostream&out, Student&s); private: int num; string name; double cpp; double math; double english; double total; }; void Student::set_value(int n,string nam, double c, double m, double e) { num=n; name=nam; cpp=c; math=m; english=e; total=c+m+e; } ostream& operator<<(ostream& out, Student& s) { out<<s.num<<" "<<s.name<<" "<<s.cpp<<" "<<s.math<<" "<<s.english<<" "<<s.total<<endl; return out; } int main( ) { Student stud[100]; int i,n; string sname; double scpp, smath, senglish; ifstream infile("score.dat",ios::in); if(!infile) { cerr<<"open error!"<<endl; exit(1); } for(i=0; i<100; i++) { infile>>n>>sname>>scpp>>smath>>senglish; stud[i].set_value(n,sname, scpp, smath, senglish); } infile.close(); ofstream outfile("binary_score.dat",ios::out|ios::binary); if(!outfile) { cerr<<"binary_score cannot open!"<<endl; exit(1); } for(i=0; i<100; i++) { outfile.write((char*)&stud[i], sizeof(stud[i])); } cout<<"输入本人信息:"; cin>>n>>sname>>scpp>>smath>>senglish; Student m(n,sname, scpp, smath, senglish); outfile.write((char*)&m, sizeof(m)); outfile.close(); Student s; ifstream infile2("binary_score.dat",ios::in|ios::binary); if(!infile2) { cerr<<"binary_score cannot open!"<<endl; exit(1); } while(1) { infile2.read((char*)&s, sizeof(s)); if(infile2.eof()) break; cout<<s; } infile2.close(); return 0; }
运行结果:
学习心得:
这篇代码主要是主函数比较麻烦,要把原有的数据存到二进制文件中,再加上自己的信息。用BinaryViewer命令查看二进制文件文件,结果如图。
相关文章推荐
- YT03-递推求解课后题目-1003 不容易系列之(3)—— LELE的RPG难题-(6.7日-烟台大学ACM预备队解题报告)
- YT03-递推求解课后题目-1002 超级楼梯-(6.7日-烟台大学ACM预备队解题报告)
- eclipse+CDT调试segmentation fault错误
- oracle建立表空间
- 兵器簿之Alcatraz(插件管理神器)的配置和使用
- DJANGO_SETTINGS_MODULE设置(MacOS, Linux)
- Spring Framework 下载地址
- C#中的类:字段、属性、方法
- 关于几个信号
- 批量插入数据 C# SqlBulkCopy使用
- vi编辑器的使用
- 批量插入数据 C# SqlBulkCopy使用
- syslog(),closelog()与openlog()--日志操作函数
- YT03-递推求解课后题目-1001 母牛的故事-(6.7日-烟台大学ACM预备队解题报告)
- 堆和栈的区别
- crontab命令简介
- Mac OS X中解决socket.error: [Errno 48] Address already in use 端口占用问题
- Android中同一个activity用到这个两个或多个监听事件冲突的解决
- 黑马程序员 - 技术 blog19 之集合框架 by 八戒
- Count Complete Tree Nodes