четверг, 1 августа 2013 г.

Статические поля и перегрузка методов

Продолжаем изучать основы разработки Windows-приложений. Ввод данных, проверка данных, защита полей от внешних незапланированных действий пользователя.
Массив объектов пользовательского класса. Его отображение в «списках».
Элементы Button, TextBox, MessageBox, Label, компонент ToolTip.
Как добавить класс в проект: Solution_Explorer -> (правая кнопка) Имя_Проекта -> Add ->Class -> (Name)Имя_класса.cs -> Add



Задача
Определить класс для представления результатов тестирования с полями объектов: фамилия тестируемого, балл (от 0 до 100). Статические поля: название дисциплины и максимальный балл по тесту среди всех, выполнивших этот тест. Свойство для нормирования балла, то есть для перехода от шкалы [0-100] к шкале [0-10]. Перегрузить метод ToString(). В диалоге: вводить сведения о прошедших тестирование и выводить в поле элемента TextBox список результатов теста.
Класс разместить в отдельном файле TestResult.cs


Решение Mod_1
Настройки свойств элементов:
textBox1.Multiline=True; textBox1.ScrollBars=Verical
Label1.Text=“Список результатов”; Label1.Font.Size=20; textBox1.BackColor = White; и т.д.
Объявление класса:
namespace Mod_1 {
   public class TestResult  // Результат студента
    {
        public static int maxBall = 0;  // Максимальный балл по результатам
        public static string title = "Информатика";  // название теста
        string name;    // фамилия тестируемого
        int ball;       // балл (от 0 до 100)
        public int NormBall {   // нормированное значение балла (от 0 до 10)
            get {
                double rom = maxBall == 0 ? 10 : 10.0 * ball / maxBall;
                return (int)Math.Round(rom); } }
        public TestResult(string name, int ball)    // конструктор
        {
            this.name = name;
            this.ball = ball;
            if (ball > maxBall)  maxBall = ball;
        }
        public override string ToString() {
            string res = string.Format("{0,-60}\t{1,10}{2,10}",
                name, ball, NormBall);
            return res; }
    }
}
Результат проектирования интерфейса:
namespace Mod_1  {
    public partial class Form1 : Form
    {
        static TestResult[] records = new TestResult[30];
        public static int numbRec = 0;  // счетчик записей
        string[] result = new string[30];   // представление оценок
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e) {
            records[0] = new TestResult("Степанов ", 50);
            records[1] = new TestResult("Сазонова ", 30);
            records[2] = new TestResult("Жарова ", 75);
            numbRec = 3;
            for (int i=0; i< numbRec; i++)
               result[i] = records[i].ToString();
            textBox1.Lines = result;    // вывести оценки в окно
            textBox1.Enabled = false;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            int bl;
            if (textBox2.Text == "")
            {
                MessageBox.Show("Введите фамилию!");
                textBox2.Focus();
                button1.Enabled = false;
                return;
            }
            if (!int.TryParse(textBox3.Text, out bl)| bl<0 ||bl>100) {
                MessageBox.Show("Введите балл!\nДиапазон от 0 до 100!");
                textBox3.Focus();
                button1.Enabled = false;
                return;
            }
            records[numbRec] = new TestResult(textBox2.Text, bl);
            for (int i = 0; i <= numbRec; i++) // обновить оценки
                result[i] = records[i].ToString();
            textBox1.Lines = result;  // вывести оценки в окно
            numbRec++;  // счетчик записей
            button1.Enabled = false;
            textBox2.Text = textBox3.Text = "";
            textBox2.Focus();
            label2.Text = "Тест: \"" + TestResult.title +
                "\", Максимальный балл: " + TestResult.maxBall;
        }
        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            button1.Enabled = true;
        }
        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            button1.Enabled = true;
        }
     
    }
}