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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2010, 18:04   #1
Авторитет
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 74
Вопрос Надо переделать в ООП

Задача такая Язык естесно c#
  1. Создание списка книг в библиотеке
  2. Добавить новую книгу
  3. Удалить книгу из библиотеки
  4. Вывести на экран список книг
  5. Вывести на экран отсортированный по первому символу список книг
На структурном у меня получилось следующее
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace var6
{
    public partial class Form1 : Form
    {
        ArrayList books = new ArrayList();//создаем список books
        
        public Form1()
        {
            InitializeComponent();
        }

        public void textBox1_TextChanged(object sender, EventArgs e)
        {        }

        public void button1_Click(object sender, EventArgs e)
        {
            //чтение из textBox1
            listBox1.Items.Clear();
            books.Add(textBox1.Text.ToString());
            //запись в listBox1
            foreach (string book in books)
            {
                
                listBox1.Items.Add(book.ToString());
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                //удаление выбранной строчки
                books.RemoveAt(listBox1.SelectedIndex);
                listBox1.Items.RemoveAt(listBox1.SelectedIndex);
            }
            catch
            {   //проверка на наличие нулевого индекса
                MessageBox.Show("Неправильно выбран");
            }
        }

        private void button3_Click_1(object sender, EventArgs e)
        {
           // Knigi k = new Knigi();
           // k.name();
            listBox1.Items.Clear();
            books.Clear();
            books.Add("Английский язык");
            books.Add("Физики");
            books.Add("Математика");
            books.Add("История");
            books.Add("География");
            books.Add("Статистика");
            books.Add("Программирование");

            //вывод на экран
            foreach (string s in books)
            {
                listBox1.Items.Add(s);
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //очистка
            listBox1.Items.Clear();
            //сортировка
            books.Sort();
            //вывод на экран
            foreach (string s in books)
            {
                listBox1.Items.Add(s);
            }
        }
    }
}
А нужно чтобы различные функции лежали в разных классах (или можно в одном), а обращение к ним происходило через кнопки. Т.е. как-то так:
Код:
кнопка()
{
class1 f = new class1();
f.нужное_действие();
}

Последний раз редактировалось Авторитет; 26.09.2010 в 18:06.
Авторитет вне форума Ответить с цитированием
Старый 26.09.2010, 19:59   #2
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

сделай класс Book
в нем опиши все что нужно(название там, год, автор или что угодно )
сделай список List<Book> и пользуйся его методами для добавления/удаления

по сути будет тоже самое, только храниться в списке будут уже Book на string
m0nax вне форума Ответить с цитированием
Старый 27.09.2010, 18:11   #3
Авторитет
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 74
По умолчанию

m0nax, объясни как сделать список:
Код:
List<Book> f = new List<Book>();
f.Add( что_здесь_писать?);
Авторитет вне форума Ответить с цитированием
Старый 27.09.2010, 18:45   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
что_здесь_писать?
А то что вы создали List<Book> вам не о чем не говорит ? Включи логику у вас список из объектов Book, а следовательно и добавлять объекты Book надо
BOBAH13 вне форума Ответить с цитированием
Старый 27.09.2010, 18:55   #5
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Ну вот, что-то состряпал в качестве примера сойдёт, дальше сам придумаешь, сделаешь как надо:

Страница:
Код:
    public class BookPage
    {
        #region Поля

        String _text;

        #endregion

        #region Свойства

        public String Text
        {
            get { return _text; }
        } 

        #endregion

        #region Конструкторы

        public BookPage()
        {
            this._text = String.Empty;
        }

        public BookPage(String Text)
        {
            this._text = Text;
        } 

        #endregion

        #region Методы

        public void SetText(String Text)
        {
            this._text = Text;
        }

        public void AddTextLine(String Text)
        {
            this._text += "\n" + Text;
        } 

        #endregion
    }
Книга:
Код:
    public class Book
    {
        #region Свойства
        public String Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public String Author { get; set; }
        public List<BookPage> Pages { get; set; } 
        #endregion

        #region Конструкторы
        /// <summary>
        /// Создать пустую книгу
        /// </summary>
        public Book()
        {
            this.Title = String.Empty;
            this.ReleaseDate = DateTime.Now;
            this.Author = String.Empty;
            this.Pages = new List<BookPage>();
        }

        /// <summary>
        /// Создать книгу без страниц
        /// </summary>
        /// <param name="Title">Название</param>
        /// <param name="ReleaseDate">Дата выпуска</param>
        /// <param name="Author">Автор</param>
        public Book(String Title, DateTime ReleaseDate, String Author)
        {
            this.Title = Title;
            this.ReleaseDate = ReleaseDate;
            this.Author = Author;
            this.Pages = new List<BookPage>();
        }

        /// <summary>
        /// Создать книгу
        /// </summary>
        /// <param name="Title">Название</param>
        /// <param name="ReleaseDate">Дата выпуска</param>
        /// <param name="Author">Автор</param>
        /// <param name="pages">Страницы</param>
        public Book(String Title, DateTime ReleaseDate, String Author, BookPage[] pages)
        {
            this.Title = Title;
            this.ReleaseDate = ReleaseDate;
            this.Author = Author;
            this.Pages = new List<BookPage>();

            for (int i = 0; i < pages.Length; i++)
            {
                Pages.Add(pages[i]);
            }
        } 
        #endregion

        #region Методы
        /// <summary>
        /// Добавить страницу
        /// </summary>
        /// <param name="bookPage">Страница</param>
        public void AddPage(BookPage bookPage)
        {
            Pages.Add(bookPage);
        }

        /// <summary>
        /// Удалить страницу
        /// </summary>
        /// <param name="bookPage">Страница для удаления</param>
        public void DeletePage(BookPage bookPage)
        {
            throw new NotImplementedException(); //создаётся исключение: Метод не реализован. Сделаешь сам =)
        } 
        #endregion
    }
Использование:
Код:
        List<Book> listBooks = new List<Book>();
        private void button3_Click(object sender, EventArgs e)
        {
            String Title = "Моя новая книга";
            DateTime dateRelease = DateTime.Now;
            String Author = "Вася Пупкин";

            Book book = new Book(Title, dateRelease, Author); //создаём книгу

            String PageText = "Содержание: \n1) Первая глава \n2) Вторая глава \n3) Третья глава";
            BookPage Page = new BookPage(PageText); //создаём страницу

            book.AddPage(Page); //добавить страницу в книгу
            listBooks.Add(book);

            //вывести на экран инфо о книге и содержимое
            MessageBox.Show("Название книги: " + listBooks[0].Title +
                " \nАвтор книги: " + listBooks[0].Author + 
                " \nДата выпуска: " + listBooks[0].ReleaseDate.ToLongDateString()
                + "\n\nТекст первой страницы: \n" + listBooks[0].Pages[0].Text );
        }

Последний раз редактировалось Casper-SC; 27.09.2010 в 18:58.
Casper-SC вне форума Ответить с цитированием
Старый 27.09.2010, 19:01   #6
akasex
Форумчанин Подтвердите свой е-майл
 
Аватар для akasex
 
Регистрация: 31.03.2008
Сообщений: 179
По умолчанию

something like that...

Код:
class Author
{
       public string FirstName {get;set;}
       public string LastName {get;set;}
       public string Country {get;set;}
}

class Book
{
       public string Title {get;set;}
       public int Year {get;set;}
       public Author Author {get;set;}
}

class Library
{
       public List<Book> Books {get;set;}
       public List<Author> Authors {get;set;}

       public void AddBook(Book item)
       {
             this.Books.Add(item);
       }

       public void AddBook(string title, int year, Author author)
       {
             Book b = new Book();
             b.Title = title;
             b.Year = year;
             b.Author  = author;
             this.Books.Add(b);
       }

       //...etc.
}
akasex вне форума Ответить с цитированием
Старый 27.09.2010, 20:56   #7
userdab
Пользователь
 
Регистрация: 04.09.2010
Сообщений: 28
По умолчанию

к класу Library добавить еще индесатор, чтоб возращать книгу по title например. вот пример
userdab вне форума Ответить с цитированием
Старый 27.09.2010, 21:37   #8
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

А-а-а, я же не по заданию сделал пример =) Ну да ладно, уже поздняк метаться. Я просто подумал, что надо объектно ориентировано сделать методы там, свойства и всё =)
Casper-SC вне форума Ответить с цитированием
Старый 28.09.2010, 19:26   #9
Авторитет
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 74
Счастье

Мне конечно так круто как все тут писавшие не нужно было. Но все равно спасибо, узнал много нового. Сделал все проще.
Код:
    class Library
    {
        public ArrayList books = new ArrayList();
    }
Код:
Library l = new Library();
        
        public Form1()
        {
            InitializeComponent();
        }

        public void textBox1_TextChanged(object sender, EventArgs e)
        {        }

        public void button1_Click(object sender, EventArgs e)
        {
            //чтение из textBox1
            listBox1.Items.Add(textBox1.Text.ToString());

            //запись в listBooks
            l.books.Add(textBox1.Text.ToString());
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                l.books.RemoveAt(listBox1.SelectedIndex);
                listBox1.Items.RemoveAt(listBox1.SelectedIndex);
            }
            catch
            {   //проверка на наличие нулевого индекса
                MessageBox.Show("Неправильно выбран");
            }
        }

        private void button3_Click_1(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            l.books.Add("История");
            l.books.Add("Английский"); 
            l.books.Add("Французский");

            foreach (string s in l.books)
            {
                listBox1.Items.Add(s);
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            l.books.Sort();
            foreach (string s in l.books)
            {
                listBox1.Items.Add(s);
            }
        }
Тема закрыта.
Авторитет вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП VladimirVB Общие вопросы Delphi 4 18.11.2009 22:51
Помогите решить 2 задачки срочно надо а то меня повешают на практике мне надо к 2 июня!!! серега222 Паскаль, Turbo Pascal, PascalABC.NET 0 27.05.2009 17:46
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55