Untitled

 avatar
unknown
plain_text
4 years ago
4.1 kB
11
Indexable
using System;
using System.Collections.Generic;
using System.Text;

namespace AbsFac
{
    class Program
    {
        static void Main(string[] args)
        {
            Table table = new Table();
            table.addCol(new TableHeader("AB", 0));
            table.addCol(new TableHeader("XY", 0));
            table.addCol(new TableHeader("KL", 1));
            table.addCol(new TableHeader("WD", 1));
            table.addCol(new TableHeader("KK", 0));

            table.addRow();
            table.addRow();
            table.addRow();
            table.addRow();
            table.addRow();
            table.addRow();
            Console.WriteLine(table);


        }
    }

    class Table
    {
        // lista nagłówków
        private List<TableHeader> headers;
        // lista wierszy (każdy wiersz to lista komórek)
        private List<List<TableData>> rows;

        public Table()
        {
            headers = new List<TableHeader>();
            rows = new List<List<TableData>>();
        }
        // dodawanie wiersza
        public void addRow()
        {
            // nowy wiersz
            List<TableData> row = new List<TableData>();
            // wypełniamy komórkami - tyle, ile mamy kolumn
            foreach (TableHeader col in headers)
                switch(col.getTyp())
                {
                    case 0:
                        row.Add(new TableDataInt());
                        break;
                    case 1:
                        row.Add(new TableDataString());
                        break;
                }
           
            // dodajemy do listy wierszy
            rows.Add(row);
        }
        // dodawanie kolumny
        public void addCol(TableHeader header)
        {
            // dodajemy do listy nagłówków
            headers.Add(header);
            // dodajemy po jednej komórce do każdego wiersza
            foreach (List<TableData> row in rows)
            {
                switch(header.getTyp())
                {
                    case 0:
                        row.Add(new TableDataInt());
                        break;
                    case 1:
                        row.Add(new TableDataString());
                        break;
                }
            }
      
        }
        // do wypisywania tabeli
        public override string ToString()
        {
            StringBuilder result = new StringBuilder();
            result.Append("| ");
            result.AppendJoin(" | ", headers);
            result.AppendLine(" |");

            result.Insert(result.Length, "+----", headers.Count);
            result.AppendLine("+");

            foreach (List<TableData> row in rows)
            {
                result.Append("| ");
                result.AppendJoin(" | ", row);
                result.AppendLine(" |");
            }
            return result.ToString();
        }
    }

    interface TableData
    {
        protected static readonly Random rnd = new Random();
    }

    class TableDataInt : TableData
    {
        private int data;
        public TableDataInt()
        {
            data = 10 + TableData.rnd.Next(90);
        }
        public override String ToString()
        {
            return data.ToString();
        }
    }
    class TableDataString: TableData
    {
        private string data;
        public TableDataString()
        {
            data = "st";
        }
        public override string ToString()
        {
            return data.ToString();
        }
    }

    class TableHeader
    {
        private String name;
        private int typ;
        public TableHeader(String name, int typ)
        {
            this.name = name;
            this.typ = typ;
        }
        public override String ToString()
        {
            return name;
        }
        public int getTyp()
        {
            return this.typ;
        }

    }

}



Editor is loading...