Я делаю домашнюю работу и попал в ту часть, где мне нужно отобразить мои данные из файла данных.Проблема в том, что я могу отображать отдельные данные с помощью BinaryReader (), но не могу создать правильный цикл, который бы отображал все данные в указанном ниже формате:
Enter Book Title: Title 1
Enter Author's First Name: First 1
Enter Author's Last Name: Last 1
Enter Publisher's Name: Publisher 1
Enter Book Price: $1.1
Would like to enter another book? [Y or N] y
Enter Book Title: Title 2
Enter Author's First Name: First 2
Enter Author's Last Name: Last 2
Enter Publisher's Name: Publisher 2
Enter Book Price: $2.2
Would like to enter another book? [Y or N] n
Title 1
Publisher 1
1.1
First 1 Last 1
Title 2
Publisher 2
2.2
First 2 Last 2
Вместо этого я показываю только последнюю запись,Видишь проблему?Я не знаю, как отобразить все данные из папки данных с помощью цикла.
Я ценю любые советы, как это можно сделать.
Спасибо!
Вотмои файлы кодов:
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Lab_7
{
class Program
{
private const string FILE_NAME = "lab07.dat";
static void Main(string[] args)
{
char ask;
if (!File.Exists(FILE_NAME))
{
FileStream fileStream = new FileStream(FILE_NAME, FileMode.OpenOrCreate);
}
Book book = new Book();
FileStream writeStream = new FileStream(FILE_NAME, FileMode.Append);
BinaryWriter write = new BinaryWriter(writeStream);
do
{
Console.Write("Enter Book Title: ");
book.Title = Console.ReadLine();
Console.Write("Enter Author's First Name: ");
book.AuthorFirstName = Console.ReadLine();
Console.Write("Enter Author's Last Name: ");
book.AuthorLastName = Console.ReadLine();
Console.Write("Enter Publisher's Name: ");
book.PublisherName = Console.ReadLine();
Console.Write("Enter Book Price: $");
book.Price = float.Parse(Console.ReadLine());
Console.Write("Would like to enter another book? [Y or N] ");
ask = char.Parse(Console.ReadLine().ToUpper());
book.saveDataTo(write);
}
while (ask == char.Parse("Y"));
write.Close();
FileStream readStream = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read);
BinaryReader read = new BinaryReader(readStream);
book.display();
read.Close();
}
}
}
Publication.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Lab_7
{
class Publication
{
private float price;
private string publisherName, title;
public float Price
{
get
{
return price;
}
set
{
price = value;
}
}
public string PublisherName
{
get
{
return publisherName;
}
set
{
publisherName = value;
}
}
public string Title
{
get
{
return title;
}
set
{
title = value;
}
}
public void display()
{
Console.WriteLine("{0}\n{1}\n{2}", title, publisherName, price);
}
}
}
Книга.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Lab_7
{
class Book : Publication
{
private string authorFirstName, authorLastName;
public string AuthorFirstName
{
get
{
return authorFirstName;
}
set
{
authorFirstName = value;
}
}
public string AuthorLastName
{
get
{
return authorLastName;
}
set
{
authorLastName = value;
}
}
public new void display()
{
base.display();
Console.WriteLine("{0}", getAuthorName());
}
public string getAuthorName()
{
return authorFirstName + " " + authorLastName;
}
public void readDataFrom(BinaryReader r)
{
base.Price = r.ReadSingle();
base.PublisherName = r.ReadString();
base.Title = r.ReadString();
authorFirstName = r.ReadString();
authorLastName = r.ReadString();
}
public void saveDataTo(BinaryWriter w)
{
w.Write(base.Price);
w.Write(base.PublisherName);
w.Write(base.Title);
w.Write(AuthorFirstName);
w.Write(AuthorLastName);
}
}
}
Спасибо за любую помощь.
С уважением.
HelpNeeder.
- РЕДАКТИРОВАТЬ -
Works!Спасибо!
while (read.PeekChar() != -1)
{
book.readDataFrom(read);
book.display();
}
Кроме того, я должен был убедиться, что новый файл создается каждый раз, когда я запускаю программу!
Плюс, я должен убедиться, что я закрываю свой FileStreams, потому чтоЯ продолжаю сбой программы.