Изменить код программы - 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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д