C#大学课程(第五版)课后习题17.4序列化和去序列化

/*17.4
(序列化和去序列化)修改前面的程序,使其能利用可以被序列化和去序列化的类对象
*/
using System;
[ Serializable ]
class ClassGrade
{
public string Last { get; set; }
public string First { get; set; }
public string Id { get; set; }
public string Class { get; set; }
public string Grade { get; set; }
public ClassGrade()
{
}
public ClassGrade( string lastName, string firstName,
string id, string className, string grade )
{
Last = lastName;
First = firstName;
Id = id;
Class = className;
Grade = grade;
}
}
using System;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace Grades
{
public partial class GradesForm : Form
{
private FileStream fileInOut;
private bool saved = false;
private BinaryFormatter formatter;
public GradesForm()
{
InitializeComponent();
formatter = new BinaryFormatter();
}
private void AllTextBox_TextChanged( object sender, EventArgs e )
{
EnableEnterButton();
}
private void saveAsButton_Click( object sender, EventArgs e )
{
if ( fileInOut != null )
{
fileInOut.Close();
fileInOut = null;
statusLabel.Text = "Closing file";
}
DialogResult result;
string fileName;
using ( SaveFileDialog chooser = new SaveFileDialog() )
{
result = chooser.ShowDialog();
fileName = chooser.FileName;
}
if ( result == DialogResult.OK )
{
if ( fileName == string.Empty )
MessageBox.Show( "Invalid File Name", "Invalid File name",
MessageBoxButtons.OK, MessageBoxIcon.Information );
else
{
fileInOut = new FileStream( fileName,
FileMode.OpenOrCreate );
saveAsButton.Enabled = false;
saved = true;
}
EnableEnterButton();
}
}
private void EnableEnterButton()
{
if ( lastTextBox.Text != string.Empty &&
firstTextBox.Text != string.Empty &&
idTextBox.Text != string.Empty &&
classTextBox.Text != string.Empty &&
gradeTextBox.Text != string.Empty && saved )
enterButton.Enabled = true;
else
enterButton.Enabled = false;
}
private void enterButton_Click( object sender, EventArgs e )
{
string last = lastTextBox.Text;
string first = firstTextBox.Text;
string id = idTextBox.Text;
string className = classTextBox.Text;
string grade = gradeTextBox.Text;
ClassGrade entry = new ClassGrade( last, first, id,
className, grade );
formatter.Serialize( fileInOut, entry );
statusLabel.Text = "Entry saved";
lastTextBox.Clear();
firstTextBox.Clear();
idTextBox.Clear();
classTextBox.Clear();
gradeTextBox.Clear();
}
private void loadButton_Click( object sender, EventArgs e )
{
if ( fileInOut != null )
{
fileInOut.Close();
fileInOut = null;
statusLabel.Text = "Closing file";
saveAsButton.Enabled = true;
saved = false;
}
DialogResult result;
string fileName;
using ( OpenFileDialog fileChooser = new OpenFileDialog() )
{
result = fileChooser.ShowDialog();
fileName = fileChooser.FileName;
}
if ( result == DialogResult.OK )
{

if ( fileName == string.Empty )
MessageBox.Show( "Invalid File Name", "Invalid File name",
MessageBoxButtons.OK, MessageBoxIcon.Information );
else
{
fileInOut = new FileStream( fileName,
FileMode.Open, FileAccess.Read );
gradesTextBox.Clear();
try
{
while ( true )
{
ClassGrade entry =
( ClassGrade ) formatter.Deserialize( fileInOut );
gradesTextBox.AppendText( FormatEntry( entry ) +
"\r\n" );
}
}
catch ( SerializationException )
{
statusLabel.Text = "File loaded";
}
}
}
}
private string FormatEntry( ClassGrade fromFile )
{
string result = fromFile.Last.Trim() + ", " +
fromFile.First.Trim() + ":\t" + fromFile.Id.Trim() + "\t" +
fromFile.Class.Trim() + "\t" + fromFile.Grade.Trim();
return result;
}
}
} using System;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace Grades
{
public partial class GradesForm : Form
{
private FileStream fileInOut;
private bool saved = false;
private BinaryFormatter formatter;
public GradesForm()
{
InitializeComponent();
formatter = new BinaryFormatter();
}
private void AllTextBox_TextChanged( object sender, EventArgs e )
{
EnableEnterButton();
}
private void saveAsButton_Click( object sender, EventArgs e )
{
if ( fileInOut != null )
{
fileInOut.Close();
fileInOut = null;
statusLabel.Text = "Closing file";
}
DialogResult result;
string fileName;
using ( SaveFileDialog chooser = new SaveFileDialog() )
{
result = chooser.ShowDialog();
fileName = chooser.FileName;
}
if ( result == DialogResult.OK )
{
if ( fileName == string.Empty )
MessageBox.Show( "Invalid File Name", "Invalid File name",
MessageBoxButtons.OK, MessageBoxIcon.Information );
else
{
fileInOut = new FileStream( fileName,
FileMode.OpenOrCreate );
saveAsButton.Enabled = false;
saved = true;
}
EnableEnterButton();
}
}
private void EnableEnterButton()
{
if ( lastTextBox.Text != string.Empty &&
firstTextBox.Text != string.Empty &&
idTextBox.Text != string.Empty &&
classTextBox.Text != string.Empty &&
gradeTextBox.Text != string.Empty && saved )
enterButton.Enabled = true;
else
enterButton.Enabled = false;
}
private void enterButton_Click( object sender, EventArgs e )
{
string last = lastTextBox.Text;
string first = firstTextBox.Text;
string id = idTextBox.Text;
string className = classTextBox.Text;
string grade = gradeTextBox.Text;
ClassGrade entry = new ClassGrade( last, first, id,
className, grade );
formatter.Serialize( fileInOut, entry );
statusLabel.Text = "Entry saved";
lastTextBox.Clear();
firstTextBox.Clear();
idTextBox.Clear();
classTextBox.Clear();
gradeTextBox.Clear();
}
private void loadButton_Click( object sender, EventArgs e )
{
if ( fileInOut != null )
{
fileInOut.Close();
fileInOut = null;
statusLabel.Text = "Closing file";
saveAsButton.Enabled = true;
saved = false;
}
DialogResult result;
string fileName;
using ( OpenFileDialog fileChooser = new OpenFileDialog() )
{
result = fileChooser.ShowDialog();
fileName = fileChooser.FileName;
}
if ( result == DialogResult.OK )
{

if ( fileName == string.Empty )
MessageBox.Show( "Invalid File Name", "Invalid File name",
MessageBoxButtons.OK, MessageBoxIcon.Information );
else
{
fileInOut = new FileStream( fileName,
FileMode.Open, FileAccess.Read );
gradesTextBox.Clear();
try
{
while ( true )
{
ClassGrade entry =
( ClassGrade ) formatter.Deserialize( fileInOut );
gradesTextBox.AppendText( FormatEntry( entry ) +
"\r\n" );
}
}
catch ( SerializationException )
{
statusLabel.Text = "File loaded";
}
}
}
}
private string FormatEntry( ClassGrade fromFile )
{
string result = fromFile.Last.Trim() + ", " +
fromFile.First.Trim() + ":\t" + fromFile.Id.Trim() + "\t" +
fromFile.Class.Trim() + "\t" + fromFile.Grade.Trim();
return result;
}
}
}

原文地址:https://www.cnblogs.com/hsyv123ve/p/8734184.html

时间: 2024-11-10 09:36:40

C#大学课程(第五版)课后习题17.4序列化和去序列化的相关文章

C#大学课程(第五版)课后习题17.3学生成绩文件

/*17.3(学生成绩文件) 创建一个程序,它将学生的成绩保存到一一个文本文件中.这个文件应当包含每位学生的姓名.ID 号.课程以及成绩信息.应允许用户载人文件并以只读文本框模式显示它的内容.显示信息时应具有如下的格式:LastNane,FirstName: ID# Class Grade一些数据样本如下:Jones,Bob: 1 "Introduction to Computer Science" "A-"Johnson,Sarah: 2 "Data S

C#大学课程(第五版)课后习题15.11MDI 画图程序

/*15.11(MDI 画图程序)创建一个MDI 程序,它的每个子窗口都有一个用于画图的面板.在这个MDI程序中添加菜单,使用户能够改变画刷的大小和颜色.当运行程序时,应确保当一个窗口遮盖了另一个时,应清除面板的内容.*/using System.Drawing;using System.Windows.Forms;namespace UsingMDI{ public partial class DrawingForm : Form { bool shouldPaint = false; int

电子技术基础模拟部分 第五版 第六版 课后习题答案

<电子技术基础·模拟部分:学习辅导与习题解答(第六版)>是为配合华中科技大学电子技术课程组编.康华光任主编.陈大钦和张林任副主编的<电子技术基础模拟部分> (第六版)教材而编的学习辅导与习题解答. 获取方式见文末 内容包括 一.如何学习模拟电子技术基础(含附录“模拟电子技术基础”课程教学基本要求): 二.各章重点及疑难问题解答:三.各章习题全解. 考虑到SPICE习题需要进行上机仿真验证,为方便读者学习,将分散在主教材各章的SPICE习题集中解答,作为第12章,但习题编号不变. 希

电子技术基础数字部分 第五版 第六版 课后习题答案

电子技术基础模拟部分 第五版 第六版 课后习题答案 <电子技术基础·模拟部分:学习辅导与习题解答(第六版)>是为配合华中科技大学电子技术课程组编.康华光任主编.陈大钦和张林任副主编的<电子技术基础模拟部分> (第六版)教材而编的学习辅导与习题解答. 获取方式见文末 全书共11章,分别是:数字逻辑概论,逻辑代数与硬件描述语言基础,逻辑门电路,组合逻辑电路,锁存器和触发器,时序逻辑电路,半导体存储器,CPLD和FPGA,脉冲波形的变换与产生,数模与模数转换器,数字系统设计基础. 扫一扫

概率论与数理统计 第四版 课后习题答案 习题解析

<概率论与数理统计第四版>是普通高等教育“十一五”国家级规划教材,在2001年出版的概率论与数理统计(第三版)的基础上增订而成. 本次修订新增的内容有:在数理统计中应用Excel,bootstrap方法,P值检验法,箱线图等:同时吸收了国内外优秀教材的优点对习题的类型和数量进行了渊整和充实. 获取方式见文末 概率论与数理统计(第四版) 课后习题解析 第1章 概率论的基本概念课后习题答案 第2章 随机变量及其分布课后习题 第3章 多维随机变量及其分布课后习题 第4章 随机变量的数字特征课后习题

计算机组成原理_第四版课后习题答案(完整版)

计算机组成原理_第四版课后习题答案(完整版) ?第一章 1.?比较数字计算机和模拟计算机的特点. 解:模拟计算机的特点:数值由连续量来表示,运算过程是连续的: 数字计算机的特点:数值由数字量(离散量)来表示,运算按位进行. 两者主要区别见P1?表1.1. 2.?数字计算机如何分类?分类的依据是什么? 解:分类: 数字计算机分为专用计算机和通用计算机.通用计算机又分为巨型机.大型机. 中型机.小型机.微型机和单片机六类. 分类依据:专用和通用是根据计算机的效率.速度.价格.运行的经济性和适应性来划

软件设计师教程第5版课后习题答案

软件设计师教程第5版课后答案 软件设计师教程第5版课后习题答案具体对比变化如下: 第4版 第5版 对比变化 第一章 计算机系统知识 第一章 计算机系统知识 无变化 第二章 程序设计语言基础 第二章 程序设计语言基础 无变化 第三章 操作系统知识 第四章 操作系统知识 第5版删减小节:网络与嵌入式操作系统.UNIX操作系统基础知识 第四章 软件工程基础知识 第五章 软件工程基础知识 第5版增加知识点:统一过程(UP)模型.webApp设计 增加小节:系统设计(概要设计和详细设计) 结构化开发方法独

C++ Primer【第五版】习题参考答案——第六章(函数)

本系列文章会不断更新,但是时间不能保证.另外基本上都是自己做的答案,仅供参考,如果有疑问欢迎交流. #include <iostream> #include <initializer_list> using namespace std; int test_Ex_6_27(std::initializer_list<int> li); int main() { cout << test_Ex_6_27({23,78,89,76,90}) << en

C++ Primer【第五版】习题参考答案——第五章(语句)

#include <iostream> #include <vector> #include <string> using namespace std; /******************************************************************* Ex_5_1: 空语句就是只含有一个分号的语句. 如果在程序的某个地方,语法上要求有一条语句,但是逻辑上不需要, 这时就需要一条空语句. Ex_5_2: 块就是由花括号包围的复合语句