Изменить код программы - C#
Формулировка задачи:
Здравствуйте !
Было задание на вывод записей текстового файла с числом страниц больше указанного, напримев вводим 100 и выводятся все записи с числом страниц больше 100. Теперь аналогично надо вывести записи с годом в котором больше всего книг (строк).Т.е. сейчас это 2008 с 4 записями (текстовый файл может меняться). Как это сделать я не знаю. Буду благодарен полному коду выполненного задания. Просьба делать без LINQ, а с помощью цикла.
Вот текст текстового файла :
Адига Аравинд*Белый тигр* 2009*156
4Барнс Джулиан*3Артур и Джордж* 2008*120
Афлатуни Сухбат*Конкурс красоты* 2009*217
3Барнс Джулиан*4Артур и Джордж* 2008*120
Барнс Джулиан*Артур и Джордж* 2007*120
Барри Себастьян*Тайные скрижали* 2009*412
1Барнс Джулиан*1Артур и Джордж* 2008*120
2Барнс Джулиан*2Артур и Джордж* 2008*120
Листинг программы
- 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;
- }
- }
- }
- }
Решение задачи: «Изменить код программы»
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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д