Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2016, 20:22   #1
Bergamot
Пользователь
 
Регистрация: 06.01.2016
Сообщений: 18
По умолчанию Создать абстрактный класс PO с методами, позволяющими вывести на экран информацию о ПО

1.Создать абстрактный класс PO с методами, позволяющими вывести на экран информацию о программном обеспечении, а также определить соответствие возможности использования (на момент текущей даты).
Создать производные классы: Свободное (название, производитель), Условно-бесплатное (название, производитель, дата установки, срок бесплатного использования), Коммерческое (название, производитель, цена, дата установки, срок использования) со своими методами вывода информации на экран, и определения возможности использования на текущую дату.
Создать базу (массив) из n видов программного обеспечения, вывести полную информацию из базы на экран, а также организовать поиск программного обеспечения, которое допустимо использовать на текущую дату.

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Plam
{
    abstract class PO
    {
        abstract public void Show();
        abstract public void Poisk(string n);
    }
    class Svobod : PO
    {
        protected string Naz;
        protected string Prz;
        public Svobod(string Naz, string Prz)
        {
            this.Naz = Naz;
            this.Prz = Prz;
        }
        public override void Show()
        {
            Console.WriteLine();
            Console.WriteLine("Свободные:");
            Console.WriteLine("Название: " + Naz);
            Console.WriteLine("Производитель: " + Prz);
        }
 
    }
    class Uslovno_besplat : Svobod
    {
        protected string sr;
        protected string data;
        public Uslovno_besplat(string Naz, string Prz)
            : base
                (Naz, Prz)
        {
            this.sr = sr;
            this.data = data;
        }
        public override void Show()
        {
            Console.WriteLine();
            Console.WriteLine("Условно-бесплатное: ");
            Console.WriteLine("Название: " + Naz);
            Console.WriteLine("Производитель: " + Prz);
            Console.WriteLine("Дата установки: " + data);
            Console.WriteLine("Срок использования: " + sr);
        }
    }
    class Komercheskoe : Svobod
    {
        protected string price;
        public Komercheskoe(string Naz, string Prz, string price, string data, string sr)
            : base(Naz, Prz, data, sr)
        {
            this.price = price;
        }
        public override void Show()
        {
            Console.WriteLine();
            Console.WriteLine("Коммерческое: ");
            Console.WriteLine("Название: " + Naz);
            Console.WriteLine("Производитель: " + Prz);
            Console.WriteLine("Цена: " + price);
            Console.WriteLine("Дата установки: " + data);
            Console.WriteLine("Срок использования: " + sr);
        }
 
        public override void Poisk(string n)
        {
            if (this is Uslovno_besplat) if (n == this.Data)
                    this.Show();
                else
                    if (this is Komercheskoe) if (n == (this as Komercheskoe).Data) this.Show();
        }
    }
 
}
Выскакивала ошибка:
Ошибка 1 "Plam.Svobod" не реализует наследуемый абстрактный член "Plam.PO.Poisk(string)".
Подсказали,что надо создать метод:
Создайте метод Poisk(string) во всех классах наследуемых от класса PO.
Код:
public override void Poisk(string text){
}
Что-то я затупил и не могу понять,куда это вставить...
Помогите немного подправить и вставить этот метод в код,буду очень вам благодарен.
Bergamot вне форума Ответить с цитированием
Старый 08.01.2016, 20:23   #2
Bergamot
Пользователь
 
Регистрация: 06.01.2016
Сообщений: 18
По умолчанию

Продолжение кода.
Код:
namespace Plam
{
    class Progam
    {
        static Svobod Svob()
        {
            Console.WriteLine();
            Console.WriteLine("Свободные: ");
            Console.Write("Название: ");
            string s = Console.ReadLine();
            Console.Write("Производитель: ");
            string s1 = Console.ReadLine();
            return new Svobod(s, s1);
        }
        static Uslovno_besplat YsBs()
        {
            Console.WriteLine();
            Console.WriteLine("Условно-бесплатное: ");
            Console.WriteLine("Название: ");
            string s = Console.ReadLine();
            Console.WriteLine("Производитель: ");
            string s1 = Console.ReadLine();
            Console.WriteLine("Дата установки: ");
            string s2 = Console.ReadLine();
            Console.WriteLine("Дата использования: ");
            string s3 = Console.ReadLine();
            return new Uslovno_besplat(s, s1, s2, s3);
        }
        static Komercheskoe Kom()
        {
            Console.WriteLine();
            Console.WriteLine("Коммерческое: ");
            Console.WriteLine("Название: ");
            string s = Console.ReadLine();
            Console.WriteLine("Производитель: ");
            string s1 = Console.ReadLine();
            Console.WriteLine("Цена: ");
            string s2 = Console.ReadLine();
            Console.WriteLine("Дата установки: ");
            string s3 = Console.ReadLine();
            Console.WriteLine("Дата использования: ");
            string s4 = Console.ReadLine();
            return new Komercheskoe(s, s1, s2, s3, s4);
        }
        static void Main(string[] args)
        {
            Console.Write("Введите количество комплект: ");
            int n = int.Parse(Console.ReadLine());
            PO[,] ob = new PO[n, 3];
            for (int i = 0; i < n; i++)
            {
                ob[i, 0] = Svob();
                ob[i, 1] = YsBs();
                ob[i, 2] = Kom();
            }
            foreach (PO a in ob)
            {
                a.Show();
            }
            Console.WriteLine();
            Console.Write("Введите дату для поиска: ");
            string v = Console.ReadLine();
            foreach (PO a in ob)
            {
                a.Poisk(v);
            }
            Console.ReadKey();
        }
    }
}
Bergamot вне форума Ответить с цитированием
Старый 08.01.2016, 20:34   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А про Show почему не возник этот же вопрос?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 08.01.2016, 20:39   #4
Bergamot
Пользователь
 
Регистрация: 06.01.2016
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А про Show почему не возник этот же вопрос?
На Show никаких ошибок не возникало,поэтому и не возник.
Bergamot вне форума Ответить с цитированием
Старый 08.01.2016, 21:05   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Причем тут ошибки. Почему один абстрактный метод реализовать получилось без вопросов, а второй нет?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.01.2016, 01:18   #6
Bergamot
Пользователь
 
Регистрация: 06.01.2016
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Причем тут ошибки. Почему один абстрактный метод реализовать получилось без вопросов, а второй нет?
Во втором,я как-то запутался.
Bergamot вне форума Ответить с цитированием
Старый 09.01.2016, 01:53   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну бывает, распутывайся.

Только решение по-моему не особо соответствует заданию, скорее всего надо было сделать что-то типа
Код:
bool IsValid()
которое проверяет не превышает ли текущая дата (DateTime.Now) дату установки + срок, и возвращает соответственно true/false (а у того где нет дат всегда true).

Ну и дату хранить как DateTime, а не строку, и срок либо TimeSpan, либо int (кол-во дней).
Изучать их методы Parse/TryParse/ParseExact для преобразования из строки.

И еще наследовать все от Свободного странная идея. Если это из-за того, что у всех есть те же самые два свойства, то надо было их в абстрактный класс и занести.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 09.01.2016 в 02:00.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать абстрактный класс Alina1807 Общие вопросы по Java, Java SE, Kotlin 1 18.01.2016 18:16
Определить и вывести на экран информацию о стране (DOS 38h). INSIDER73 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 20 22.12.2015 15:41
Создать абстрактный базовый класс C++ MicRaiS Общие вопросы C/C++ 3 11.06.2012 13:14
Вывести на экран информацию о всех диск windetta35555 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 31.05.2011 20:02
Создать файл записей (таблицу) и вывести на экран информацию о людях (имя, год рожденя, день рождения) пепелаЦО Паскаль, Turbo Pascal, PascalABC.NET 3 24.05.2009 12:15