Вот задание: 1. Считать из текстового файла исходные данные и на их основе создать необходимые объекты. 2. Разместить объекты в контейнере. Языки программирования Общее свойство: год разработки – короткое целое 1. Процедурные (наличие, отсутствие абстрактных типов данных – булевская величина) 2. Объектно-ориентированные (наследование: одинарное, множественное, интерфейса – перечислимый тип) 3. Функциональные языки (типизация – перечислимый тип = строгая, динамическая; поддержка «ленивых» вычислений – булевский тип) Я имею представление,что такое двусвязный список, но написать его не знаю как. Вот только что я смог сделать: Program.cs | Код | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO;
namespace text { class Program { static void Main(string[] args) { Spisok a = new Spisok(); int menu = -1; int t = 0; while (menu != 5) { Console.WriteLine(); Console.WriteLine("1.Прочитать текст\n2.Вывести на монитор\n3.Сортировка\n4.Записать в файл\n5.Выход из консоли"); Console.WriteLine(); try { menu = Convert.ToInt32(Console.ReadLine()); } catch { Console.WriteLine("\n Введите числа из меню \n"); } switch(menu) { case 1: Console.Clear(); Spisok.ReadFile(a); Console.WriteLine("Текст прочитан с текстового файла TextFile1.txt"); Console.ReadKey(); Console.Clear(); t = 1; break; case 2: if (t == 1) { Console.Clear(); a.Print(); Console.ReadKey(); Console.Clear(); } else { Console.Clear(); Console.WriteLine("Сначала выполни предыдущий пункт"); Console.ReadKey(); Console.Clear(); } break; case 3: Console.Clear(); Console.WriteLine("Код пока не написан"); Console.ReadKey(); Console.Clear(); break; case 4: Console.Clear(); Console.WriteLine("Код пока не написан"); Console.ReadKey(); Console.Clear(); break; case 5: break; default: Console.Clear(); Console.WriteLine("\nНеверно введено значение"); Console.ReadKey(); Console.Clear(); break; } } } }
class Proc : Base // класс процедурных языков { bool Atd; // наличие АТД
public Proc(short age, bool Atd) { this.age = age; this.Atd = Atd; }
public override string F() { return "Процедурный язык. Год:\t" + age + " АТД: " + Atd; } }
enum legacy { одинарное, множественное, интерфейс } class Obj : Base // класс объектно=ориентированных языков { legacy d; //наследование
public Obj(short age, legacy d) { this.age = age; this.d = d; }
public override string F() { return "Объектно-оринетированный. Год:\t" + age + " Наследование: " + d; } }
enum tip { строгая, динамическая } class Func : Base // класс функциональных языков { tip t; // типизация bool lazy; //поддержка "ленивых" вычислений
public Func(short age, tip t, bool lazy) { this.age = age; this.t = t; this.lazy = lazy; }
public override string F() { return "Функциональные. Год:\t" + age + " Типизация:\t" + t + " \tЛеннивость: " + lazy; } }
abstract public class Base // главный класс (объединяет все) { public abstract string F(); // абстрактная функция
public short age { get; set; } // общее свойство(год разработки) } }
|
Создал еще класс "Spisok", и запихал в контейнеры, НО это не двусвязный список...может кто сможет переделать под двусвязный Spisok.cs | Код | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO;
namespace text { class Spisok { class Node { public Base data; public Node next; };
Node first; Node last; int R = 0;
public void Print() { Console.Write("Содержимое: \n");
for (Node cur = first; cur != null; cur = cur.next) { Console.WriteLine(cur.data.F()); } Console.WriteLine(); }
public void Addi(Base value) { Node tmp = new Node(); tmp.data = value; tmp.next = null; if (first == null) { first = tmp; last = tmp; } else { last.next = tmp; last = tmp; } R++; }
public void Remove() { if (first != null) { first = first.next; if (first == null) { last = null; } } R--; }
public Base this[int i] { get { for (Node cur = first; cur != null; cur = cur.next, i--) { if (i == 0) { return cur.data; } } return null; } set { for (Node cur = first; cur != null; cur = cur.next, i--) { if (i == 0) { cur.data = value; } } } }
//public static LinkedList<Proc> s = new LinkedList<Proc>();
public static void ReadFile(Spisok sp) { LinkedList<Base> ss = new LinkedList<Base>(); try { StreamReader file = new StreamReader(@"..\..\TextFile1.txt", Encoding.Default); while (!file.EndOfStream) { string[] data = file.ReadLine().Split(' '); if (data[0] == "Proc") { ss.AddLast(new Proc(Convert.ToInt16(data[1]), Convert.ToBoolean(data[2]))); } else if (data[0] == "Obj") { if (data[2] == "одинарное") { sp.Addi(new Obj(Convert.ToInt16(data[1]), legacy.одинарное)); } if (data[2] == "множественное") { sp.Addi(new Obj(Convert.ToInt16(data[1]), legacy.множественное)); } if (data[2] == "интерфейс") { sp.Addi(new Obj(Convert.ToInt16(data[1]), legacy.интерфейс)); } } else if (data[0] == "Func") { if (data[2] == "строгая") { sp.Addi(new Func(Convert.ToInt16(data[1]), tip.строгая, Convert.ToBoolean(data[3]))); } if (data[2] == "динамическая") { sp.Addi(new Func(Convert.ToInt16(data[1]), tip.динамическая, Convert.ToBoolean(data[3]))); } } } } catch(Exception e) { Console.WriteLine("Ошибка: " + e.Message); } } } }
|
Добавлено через 1 минуту и 36 секундВот текстовый файл,а то вложенный некорректно показывает текстProc 1990 true Proc 2000 true Proc 1994 true Proc 1995 true Obj 1991 одинарное Obj 2001 одинарное Obj 1995 множественное Obj 1992 интерфейс Func 1992 строгая true Func 2002 строгая false Func 1996 динамическая true Func 1997 строгая false
Присоединённый файл ( Кол-во скачиваний: 3 )
text.txt 0,19 Kb
|