0 / 0 / 0
Регистрация: 10.01.2015
Сообщений: 23
1

Создать абстрактный класс «Товар», на его основе создать класс «Автомобиль»

16.02.2017, 20:58. Показов 2945. Ответов 9
Метки нет (Все метки)

Вечер добрый, а может и не добрый. В изучении C# столкнулся с такой проблемой - как исключения.
Имею такую задачу.
Создать абстрактный класс «Товар» (наименование, цена, дата выпуска). На его основе создать класс «Автомобиль» (объём двигателя, расход бензина на 100 км, тип КПП, наличие сигнализации, госномер).
[1)Написать метод, определяющий минимальное количество дозаправок, необходимое чтобы проехать заданное расстояние. Количество бензина в начале пути задаёт пользователь в долях от объёма двигателя.
2)Класс, генерирующий и обрабатывающий исключения при попытке задать объём двигателя меньше 1 литра.
3)Для программы, разработанной в процессе выполнения задания 1 осуществить доступ к защищённым полям через свойства, создать класс-контейнер, хранящий массив из объектов одного из ранее созданных классов. Реализовать для этого класса: индексатор, интерфейсы IEnumerable, IEnumerator. Выполнить сортировку по какому-либо признаку. Вывести отсортированный список при помощи foreach.
4)Создать свойство – необходимость покраски. Покрасить автомобили, если в этом есть необходимость
5)onChange – запретить смену госномера. onEvent – когда расход бензина на 150 км превышает 2/3 объёма двигателя

Извиняюсь сразу за свой код. Это пока рабочие наброски.Тем более что пока в C# новичок. Первый этап я выполнил. Сейчас борюсь с исключениями.Уже какой день. Если не трудно прошу доходчиво объяснить на примере.
Код прилагаю.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
Form.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
        public partial class Form1 : Form
    {
        int i = 0;
        tovar[] a = new tovar[100];
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        { }
        private void panel1_Paint(object sender, PaintEventArgs e)
        { }
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            label3.Visible = true;
            maskedTextBox1.Visible = true;
            label4.Visible = true;
            textBox4.Visible = true;
            label5.Visible = true;
            textBox5.Visible = true;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string nazv;
            double colg, srokg, benzg;
            DateTime data;
            {
                string[] str = new string[6];
                nazv = textBox1.Text;
                double price = Convert.ToDouble(textBox2.Text);
                colg = Convert.ToDouble(textBox5.Text);
                data = Convert.ToDateTime(maskedTextBox1.Text);
                srokg = Convert.ToDouble(textBox4.Text);
                benzg = Convert.ToDouble(textBox3.Text);
                try
                {
                    a[i] = new auto(nazv, price, data, srokg, colg, benzg);
                    str = a[i].show_all();
                    listView1.Items.Add(str[0]);
                    listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[1]);
                    listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[2]);
                    listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[3]);
                    listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[4]);
                    listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[5]);
                }
 
                catch (ErrorClass error)
                {
                    MessageBox.Show(error.Message);
                }
                i++;
                textBox1.Clear();
                textBox2.Clear();
                maskedTextBox1.Clear();
                textBox4.Clear();
                textBox5.Clear();
                textBox3.Clear();
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            string[] str = new string[5];
            button1.Enabled = true;
            try
            {
                listView1.Items.Clear();
            }
            catch { }
            for (int x = 0; x < i; x++)
            {
                str = a[x].show_all();
                listView1.Items.Add(str[0]);
                listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[1]);
                listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[2]);
                listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[3]);
                listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[4]);
                listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[5]);
            }
        }
                      private void button3_Click(object sender, EventArgs e)
        {
            DateTime thisDay = DateTime.Today;
            string[] str = new string[6];
            listView1.Items.Clear();
            button1.Enabled = false;
            for (int x = 0; x < i; x++)
            {
                str = a[x].show_all();
                TimeSpan d = thisDay.Subtract(Convert.ToDateTime(str[2]));
                if (TimeSpan.Parse(str[3]) <= d)
                //if (str[0] == textBox6.Text)
                {
                    listView1.Items.Add(str[0]);
                    listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[1]);
                    listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[2]);
                    listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[3]);
                    listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[4]);
                    listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[5]);
                }
            }
        }
 
        private void textBox5_TextChanged(object sender, EventArgs e)
        {
        }
        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {
        }
        private void textBox4_TextChanged(object sender, EventArgs e)
        {
        }
        private void button4_Click(object sender, EventArgs e)
        {
            String temp = "";
            const int rasst = 400;
            int put1, put2 ;
            string[] str = new string[6];
           // listView1.Items.Clear();
            //button1.Enabled = false;
            for (int x = 0; x < i; x++)
            //{
                str = a[x].show_all();
           int rashod = Convert.ToInt16(str[3]);
           int emkost = Convert.ToInt16(str[5]);
           put1 = (rashod * rasst) / emkost;
           put2 = put1 / emkost;
           temp = Convert.ToString(put2);
           MessageBox.Show (temp+"Дозоправок нужно совершить");
            }
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Class1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication1
{    
//сздание обстрактного класса Товар
    abstract class tovar
    {
        abstract public string[] show_all();
        protected string nazvanie;
        protected double cena;
        protected tovar(string nazv, double price)
        {
            nazvanie = nazv;
            cena = price;
        }
    }
    class auto : tovar
    {
        double colg; // объем двигателя
        DateTime datapr;//дата производства
        double srokg;//емкость        
        double benzg;//колличество бензина в баке
        public auto(string nazv, double price, DateTime data, double srok, double col, double benz)
            : base(nazv, price)
        {
            datapr = data;
            srokg = srok;
            colg = col;
            benzg = benz;
        }
        public override string[] show_all()
        {
            string[] s = new string[6];
            s[0] = nazvanie;
            s[1] = Convert.ToString(cena);
            s[2] = Convert.ToString(datapr);
            s[3] = Convert.ToString(srokg);
            s[4] = Convert.ToString(colg);
            s[5] = Convert.ToString(benzg);
            return s;
        }
    }
}
Вот сам класс исключения. Т.е. жалкое его подобие.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
ErrorClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace WindowsFormsApplication1
{
    public class ErrorClass : Exception
    {
        private double colg = 1;
        public ErrorClass() { }
        public ErrorClass(double colg)
        {
            this.colg = colg;
        }
        public override string Message
        {
            get
            {
                string msg = base.Message;
                if (colg <1)
                {
                    msg += string.Format("укажите объем двигателя больше 1", Environment.NewLine, colg);
                }
                return msg;
            }
        }
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2017, 20:58
Ответы с готовыми решениями:

Создать абстрактный класс Body. На его основе реализовать классы Parallelepiped, Cone и Ball
Помогите, если можете. Вторую неделю колупаюсь. Создать абстрактный класс Body. На его основе...

Создать класс Point, на его основе создать класс Line
Здравствуйте, есть такая часть задачки: &quot;Создать класс Point, на его основе создать класс Line....

Создать класс CPoint — точка. На его основе создать классы CcoloredPoint и CLine
Помогите доделать программу: Создать класс CPoint — точка. На его основе создать классы...

Создать класс Point (точка). На его основе создать классы ColoredPoint и Line
Необходимо: Создать класс Point (точка). На его основе создать классы ColoredPoint и Line...

9
81 / 82 / 48
Регистрация: 12.10.2013
Сообщений: 1,079
16.02.2017, 22:55 2
Прога для ГАИ . Техническое состояние авто.Может кто и поможет ???

Добавлено через 57 минут
Может скинут готовую.Буде проще .У меня нет.
0
0 / 0 / 0
Регистрация: 10.01.2015
Сообщений: 23
17.02.2017, 05:32  [ТС] 3
Мне готовую не надо, мне объяснить нужно.
0
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
17.02.2017, 16:16 4
товар может быть разным, это может быть авто, или микроволновка, они могут иметь различие в наборы свойств. более выгодно было бы сделать чтото вроде:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 public abstract class tovar<T> where T : tovar<T>, new()
    {
          abstract public string[] show_all();
          protected string nazvanie;
          protected double cena;
          protected tovar(string nazv, double price)
          {
            nazvanie = nazv;
            cena = price;
          }
    }
 
 class auto : tovar<auto>
    {
        реализуй.
     }
где товар<тип товара>......
0
81 / 82 / 48
Регистрация: 12.10.2013
Сообщений: 1,079
17.02.2017, 18:10 5
iDReeM , честно нихрена не понимаю. Объясните применение
C#
1
protected
в полях.
0
0 / 0 / 0
Регистрация: 10.01.2015
Сообщений: 23
17.02.2017, 18:50  [ТС] 6
Ключевое слово protected является модификатором доступа к члену. Доступ к члену с модификатором protected возможен внутри класса и из производных экземпляров класса
0
EveKS
17.02.2017, 19:29
  #7

Не по теме:

Цитата Сообщение от Сумкин Посмотреть сообщение
double benzg;//колличество бензина в баке
Еще количество педалей добавь и булевое свойство, сидит-ли сейчас водитель в авто или нет...
Цитата Сообщение от Сумкин Посмотреть сообщение
DateTime datapr;//дата производства
Т.е. дата производства есть только у авто, у товара его нет?)

Вообще, нужно удалять весь код и начинать с 0.

0
0 / 0 / 0
Регистрация: 10.01.2015
Сообщений: 23
17.02.2017, 20:02  [ТС] 8
Код я потом отшлифую и приведу в Божеский вид.Сейчас передо мной задача разобраться с исключениями.Я создал отдельно класс, в котором мне нужно проверить поле TextBox на ввод объема двигателя меньше 1.
Вот код класса
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication1
{
    public class ErrorClass : Exception
    {
        private double colg = 1;
        public ErrorClass() { }
        public ErrorClass(double ob)
        {
            this.colg = ob;
        }
        public override string Message
        {
            get
            {
                string msg = base.Message;
                if (colg>1)
                {
                    { msg += "Ошибка"+ colg;}
                }
                return msg;
            }
        }
    }
}
Пытаюсь его проверить на работоспособность но пока увы.Что то не допер как это сделать

Добавлено через 8 минут
Цитата Сообщение от Сумкин Посмотреть сообщение
Код я потом отшлифую и приведу в Божеский вид.Сейчас передо мной задача разобраться с исключениями.Я создал отдельно класс, в котором мне нужно проверить поле TextBox на ввод объема двигателя меньше 1.
Вот код класса
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication1
{
    public class ErrorClass : Exception
    {
        private double colg = 1;
        public ErrorClass() { }
        public ErrorClass(double ob)
        {
            this.colg = ob;
        }
        public override string Message
        {
            get
            {
                string msg = base.Message;
                if (colg>1)
                {
                    { msg += "Ошибка"+ colg;}
                }
                return msg;
            }
        }
    }
}
Пытаюсь его проверить на работоспособность но пока увы.Что то не допер как это сделать
Извиняюсь за повтор сообщения, нашел ошибки и не успел по времени отредактировать.
0
0 / 0 / 0
Регистрация: 10.01.2015
Сообщений: 23
19.02.2017, 10:59  [ТС] 9
Вообщем после прочтения многих книг, у меня вышло.Конечно класс исключений получился примитивным. Но принцип работы все таки я понял.Код прилагаю.
ErrorClass.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace WindowsFormsApplication1
{
    //Класс, для описания пользовательского типа ошибок
    class ErrorClass : Exception //Используем наследование
    {
        //Принимает сообщение с описанием ошибки
        public ErrorClass()
            : base("Ошибка") //Вызываем конструктор базового класса
        {         
        }
          }
}
Фрагмент кода, в котором мы обрабатываем исключение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 private void button1_Click(object sender, EventArgs e)
        {
            string nazv;
            double colg, srokg, benzg;
            DateTime data;
            {
                try//В этом блоке код который может генерировать исключение
                { 
                nazv = textBox1.Text;
                colg = Convert.ToDouble(textBox5.Text);
                double price = Convert.ToDouble(textBox2.Text);
                data = Convert.ToDateTime(maskedTextBox1.Text);
                 srokg = Convert.ToDouble(textBox4.Text);
                 benzg = Convert.ToDouble(textBox3.Text);
                 a[i] = new auto(nazv, price, data, srokg, colg, benzg);
                 if (colg == 1) throw new ErrorClass ();//генерируем собственное исключение
                 string[] str = new string[6];
                 str = a[i].show_all();
                 listView1.Items.Add(str[0]);
                 listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[1]);
                 listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[2]);
                 listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[3]);
                 listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[4]);
                 listView1.Items[listView1.Items.Count - 1].SubItems.Add(str[5]);
                 i++;
                }
                catch (ErrorClass er)//в этом блоке обрабатываем исключение
                {
                    MessageBox.Show(er.Message);
                    textBox5.Clear();
                    textBox1.Clear();
                    textBox2.Clear();
                    maskedTextBox1.Clear();
                    textBox4.Clear();
                    textBox3.Clear();
                }
                }           
        }
0
0 / 0 / 0
Регистрация: 10.01.2015
Сообщений: 23
21.02.2017, 18:03  [ТС] 10
Кто может рассказать про интерфейсы IEnumerable, IEnumerator?Доходчиво.Прочитал пару книг. Сильно много про это никто не пишет.Или ссылки интересные если есть.Буду рад помощи.Заранее спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2017, 18:03
Помогаю со студенческими работами здесь

Создать класс Point (точка) На его основе создать классы ColoredPoint и Line (линия)
Помогите пожалуйста, сделать лабу :cry: Лабораторная работа 9. Наследование В программах...

Создать класс Point (точка). На его основе создать классы ColoredPoint и Line (линия)
Задания на наследование. Создать класс Point (точка). На его основе создать классы ColoredPoint и...

Создать класс Point (точка). На его основе создать классы ColoredPoint и Line (линия)
всем привет! помогите пожалуйста с решением задачи. вот задание: &quot;Создать класс Point...

Создать класс Point (точка). На его основе создать классы ColoredPoint и Line (линия)
На основе класса Line создать классы ColoredLine и PolyLine (многоугольник). В классах описать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru