Изменить код программы - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте ! Было задание на вывод записей текстового файла с числом страниц больше указанного, напримев вводим 100 и выводятся все записи с числом страниц больше 100. Теперь аналогично надо вывести записи с годом в котором больше всего книг (строк).Т.е. сейчас это 2008 с 4 записями (текстовый файл может меняться). Как это сделать я не знаю. Буду благодарен полному коду выполненного задания. Просьба делать без LINQ, а с помощью цикла.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace Lab8
{
struct Library//объявление структуры 
{
public string avtor;
public string kniga;
public int god;
public int str;
public Library(string avtor, string kniga, int god, int str)
{
this.avtor = avtor;
this.kniga = kniga;
this.god = god;
this.str = str;
}
 
}
 
class Program
{
private static object book;
 
static StreamReader file() //открытие файла с записями о книгах 
{
FileStream aFile = new FileStream("Library.txt", FileMode.OpenOrCreate);
StreamReader sr = new StreamReader(aFile, Encoding.Default);
return sr;
}
static void Programma(string strLine, StreamReader sr, int S, int N) //основная функция 
{
System.IO.File.Delete("logs.txt"); //удаление файла 
FileStream bFile = new FileStream("logs.txt", FileMode.OpenOrCreate); // файл для результатов 
StreamWriter sw = new StreamWriter(bFile, Encoding.Default);//запись в файл 
sw.WriteLine("Последний поисковый запрос:");
Library[] Bibl = new Library[N];
int i = 0;
char[] separator = { '*' };
while (strLine != null)//заполнение структуры информацией из файла 
{
string[] Z = strLine.Split(separator);
Bibl[i].avtor = Z[0];
Bibl[i].kniga = Z[1];
Bibl[i].god = Convert.ToInt32(Z[2]);
Bibl[i].str = Convert.ToInt32(Z[3]); 
i++;
strLine = sr.ReadLine();
}
sr.Close();
foreach (Library book in Bibl) //перебор всех записей о книгах 
{
if (book.str > S)//цикл условия 
{
sw.WriteLine("{0}, {1}, {2}, {3} ", book.avtor, book.kniga, book.god, book.str); //запись строки в файл 
Console.WriteLine("{0}, {1}, {2}, {3} ", book.avtor, book.kniga, book.god, book.str); //вывод строки на экран 
}
}
sw.Close(); //конец записи 
}
static void Main(string[] args)
{
begin:
int N = System.IO.File.ReadAllLines("Library.txt").Length;//подсчитывает кол-во строк в файле=кол-ву записей в структуре 
StreamReader sr = file();
string strLine = sr.ReadLine();
Console.WriteLine("Введите год:");
int S = Convert.ToInt32(Console.ReadLine()); //ввод кол-ва страниц 
Console.WriteLine("Подходящие книги:");
Programma(strLine, sr, S, N);
Console.WriteLine();
Console.WriteLine("Выполнить новый поиск? Y - да");
string c = Console.ReadLine();
if (c == "Y") //цикл для повтора 
{
sr.Close();
goto begin;
}
}
}
}
Вот текст текстового файла : Адига Аравинд*Белый тигр* 2009*156 4Барнс Джулиан*3Артур и Джордж* 2008*120 Афлатуни Сухбат*Конкурс красоты* 2009*217 3Барнс Джулиан*4Артур и Джордж* 2008*120 Барнс Джулиан*Артур и Джордж* 2007*120 Барри Себастьян*Тайные скрижали* 2009*412 1Барнс Джулиан*1Артур и Джордж* 2008*120 2Барнс Джулиан*2Артур и Джордж* 2008*120

Решение задачи: «Изменить код программы»

textual
Листинг программы
    internal class Program
    {
        private static void Main(string[] args)
        {
            var allBooks = LoadFromFile("logs.txt");
            var filteredBooks = FilterBooks(allBooks, book => book.PagesCount > 100);
 
            foreach (var book in filteredBooks)
            {
                Console.WriteLine(book);
            }
 
            Console.ReadLine();
        }
 
        internal static IEnumerable<Book> FilterBooks(IEnumerable<Book> books, Func<Book, bool> predicate)
        {
            foreach (var book in books)
            {
                if (predicate(book))
                    yield return book;
            }
        }
 
        internal static IEnumerable<Book> LoadFromFile(string filePath)
        {
            foreach (var line in File.ReadAllLines(filePath))
            {
                yield return Book.Parse(line);
            }
        }
    }
 
    class Book
    {
        private Book()
        {
            
        }
 
        public string Title { get; private set; }
        public  string Author { get; private set; }
        public int Year { get; private set; }
        public int PagesCount { get; private set; }
 
        internal static Book Parse(string str)
        {
            var parts = str.Split(new[] {'*'}, StringSplitOptions.RemoveEmptyEntries);
 
            var book = new Book();
            book.Author = parts[0];
            book.Title = parts[1];
            book.Year = Convert.ToInt32(parts[2]);
            book.PagesCount = Convert.ToInt32(parts[3]);
 
            return book;
        }
 
        public override string ToString()
        {
            return string.Format("Title:{0}, Author:{1}, Year:{2}, PagesCount:{3}", Title, Author, Year, PagesCount);
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5
Похожие ответы