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

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

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

Здравствуйте ! Было задание на вывод записей текстового файла с числом страниц больше указанного, напримев вводим 100 и выводятся все записи с числом страниц больше 100. Теперь аналогично надо вывести записи с годом в котором больше всего книг (строк).Т.е. сейчас это 2008 с 4 записями (текстовый файл может меняться). Как это сделать я не знаю. Буду благодарен полному коду выполненного задания. Просьба делать без LINQ, а с помощью цикла.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.IO;
  7. namespace Lab8
  8. {
  9. struct Library//объявление структуры
  10. {
  11. public string avtor;
  12. public string kniga;
  13. public int god;
  14. public int str;
  15. public Library(string avtor, string kniga, int god, int str)
  16. {
  17. this.avtor = avtor;
  18. this.kniga = kniga;
  19. this.god = god;
  20. this.str = str;
  21. }
  22. }
  23. class Program
  24. {
  25. private static object book;
  26. static StreamReader file() //открытие файла с записями о книгах
  27. {
  28. FileStream aFile = new FileStream("Library.txt", FileMode.OpenOrCreate);
  29. StreamReader sr = new StreamReader(aFile, Encoding.Default);
  30. return sr;
  31. }
  32. static void Programma(string strLine, StreamReader sr, int S, int N) //основная функция
  33. {
  34. System.IO.File.Delete("logs.txt"); //удаление файла
  35. FileStream bFile = new FileStream("logs.txt", FileMode.OpenOrCreate); // файл для результатов
  36. StreamWriter sw = new StreamWriter(bFile, Encoding.Default);//запись в файл
  37. sw.WriteLine("Последний поисковый запрос:");
  38. Library[] Bibl = new Library[N];
  39. int i = 0;
  40. char[] separator = { '*' };
  41. while (strLine != null)//заполнение структуры информацией из файла
  42. {
  43. string[] Z = strLine.Split(separator);
  44. Bibl[i].avtor = Z[0];
  45. Bibl[i].kniga = Z[1];
  46. Bibl[i].god = Convert.ToInt32(Z[2]);
  47. Bibl[i].str = Convert.ToInt32(Z[3]);
  48. i++;
  49. strLine = sr.ReadLine();
  50. }
  51. sr.Close();
  52. foreach (Library book in Bibl) //перебор всех записей о книгах
  53. {
  54. if (book.str > S)//цикл условия
  55. {
  56. sw.WriteLine("{0}, {1}, {2}, {3} ", book.avtor, book.kniga, book.god, book.str); //запись строки в файл
  57. Console.WriteLine("{0}, {1}, {2}, {3} ", book.avtor, book.kniga, book.god, book.str); //вывод строки на экран
  58. }
  59. }
  60. sw.Close(); //конец записи
  61. }
  62. static void Main(string[] args)
  63. {
  64. begin:
  65. int N = System.IO.File.ReadAllLines("Library.txt").Length;//подсчитывает кол-во строк в файле=кол-ву записей в структуре
  66. StreamReader sr = file();
  67. string strLine = sr.ReadLine();
  68. Console.WriteLine("Введите год:");
  69. int S = Convert.ToInt32(Console.ReadLine()); //ввод кол-ва страниц
  70. Console.WriteLine("Подходящие книги:");
  71. Programma(strLine, sr, S, N);
  72. Console.WriteLine();
  73. Console.WriteLine("Выполнить новый поиск? Y - да");
  74. string c = Console.ReadLine();
  75. if (c == "Y") //цикл для повтора
  76. {
  77. sr.Close();
  78. goto begin;
  79. }
  80. }
  81. }
  82. }
Вот текст текстового файла : Адига Аравинд*Белый тигр* 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
Листинг программы
  1.     internal class Program
  2.     {
  3.         private static void Main(string[] args)
  4.         {
  5.             var allBooks = LoadFromFile("logs.txt");
  6.             var filteredBooks = FilterBooks(allBooks, book => book.PagesCount > 100);
  7.  
  8.             foreach (var book in filteredBooks)
  9.             {
  10.                 Console.WriteLine(book);
  11.             }
  12.  
  13.             Console.ReadLine();
  14.         }
  15.  
  16.         internal static IEnumerable<Book> FilterBooks(IEnumerable<Book> books, Func<Book, bool> predicate)
  17.         {
  18.             foreach (var book in books)
  19.             {
  20.                 if (predicate(book))
  21.                     yield return book;
  22.             }
  23.         }
  24.  
  25.         internal static IEnumerable<Book> LoadFromFile(string filePath)
  26.         {
  27.             foreach (var line in File.ReadAllLines(filePath))
  28.             {
  29.                 yield return Book.Parse(line);
  30.             }
  31.         }
  32.     }
  33.  
  34.     class Book
  35.     {
  36.         private Book()
  37.         {
  38.            
  39.         }
  40.  
  41.         public string Title { get; private set; }
  42.         public  string Author { get; private set; }
  43.         public int Year { get; private set; }
  44.         public int PagesCount { get; private set; }
  45.  
  46.         internal static Book Parse(string str)
  47.         {
  48.             var parts = str.Split(new[] {'*'}, StringSplitOptions.RemoveEmptyEntries);
  49.  
  50.             var book = new Book();
  51.             book.Author = parts[0];
  52.             book.Title = parts[1];
  53.             book.Year = Convert.ToInt32(parts[2]);
  54.             book.PagesCount = Convert.ToInt32(parts[3]);
  55.  
  56.             return book;
  57.         }
  58.  
  59.         public override string ToString()
  60.         {
  61.             return string.Format("Title:{0}, Author:{1}, Year:{2}, PagesCount:{3}", Title, Author, Year, PagesCount);
  62.         }
  63.     }

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


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

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

14   голосов , оценка 3.786 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы