Вводим анкеты - программирование 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Вводим анкеты - программирование



Перейдём к программированию нашей кнопки "Добавить".

Чтобы использовать нашу запись, создадим переменную соответствующего типа:

var Person: TPerson;

Теперь у нас есть один экземпляр нашей записи и в него можно смело записывать данные:

procedure TForm1.Button1Click(Sender: TObject);var Person: TPerson;begin Person.Name:=Edit1.Text; Person.Age:=UpDown1.Position; Person.Education:=CheckBox1.Checked; Person.PC:=CheckBox2.Checked; Person.Foreign:=[]; if CheckListBox1.Checked[0] then Person.Foreign:=Person.Foreign + [flEnglish]; if CheckListBox1.Checked[1] then Person.Foreign:=Person.Foreign + [flGerman]; if CheckListBox1.Checked[2] then Person.Foreign:=Person.Foreign + [flFrench];end;

Комментарии.

Возраст в данном случае лучше взять из этих самых "кнопок-стрелочек" - там есть соответствующее свойство Position. А почему не из Edit2, спросите вы? А вот почему. Во-первых, если брать значение из Edit, нужно преобразовывать его в число функцией StrToInt(). Второе, что придётся делать - контролировать это значение. В Edit запросто можно ввести отрицательное число, да или вообще буквы. Тогда нужно ещё и введенную строку проверять - а число ли это вообще? Зато, имея TUpDown, этих проблем нет. Даже если ввести в Edit буквы, UpDown сохранит своё текущее значение и никаких проблем не будет. Кстати, у UpDown1 можно задать свойство Max - максимальное значение. Изначально там стоит 100. Если не хотите принимать на работу, скажем, людей старше 60, впишите туда 60.
Теперь что касается иностранных языков. Для начала множество лучше сделать пустым, мало ли что? А дальше проверяются строки из списка. Узнать, выбрана строка или нет, можно с помощью свойства Checked, указав в квадратных скобках номер (индекс) строки, которые начинаются с нуля. Если строка выбрана, добавляем во множество соответствующий элемент. Если ни одна строка не выбрана, множество останется пустым.

Оптимизация

Вроде у нас всё хорошо, да вот об оптимизации не стоит забывать. В данном случае получится скорее не оптимизация, а сокращение кода. Помните про оператор with? Тот самый, что позволяет вынести имя объекта за скобку? Вот его и применим, вынеся Person вперёд:

procedure TForm1.Button1Click(Sender: TObject);var Person: TPerson;begin with Person do begin Name:=Edit1.Text; Age:=UpDown1.Position; Education:=CheckBox1.Checked; PC:=CheckBox2.Checked; Foreign:=[]; if CheckListBox1.Checked[0] then Foreign:=Foreign + [flEnglish]; if CheckListBox1.Checked[1] then Foreign:=Foreign + [flGerman]; if CheckListBox1.Checked[2] then Foreign:=Foreign + [flFrench]; end;end;

Уже лучше, но всё равно не идеально. В частности, строки проверки иностранных языков выглядят как-то нелепо - они мало отличаются друг от друга. К тому же, что делать, если в списке будет 100 языков? 100 раз писать одно и то же? Нет, конечно. Единственная загвоздка в данном случае может возникнуть только в том, как преобразовать номер строки (0, 1, 2) в значение типа данных (flEnglish, flGerman, flFrench)? Эти значения ведь нельзя указать в виде строки... Решение простое. Если вспомним, что перечислимые типы данных упорядочены, а каждому "текстовому" значению просто ставится в соответствие число, начиная с нуля, проблема мигом решится. Нам нужно просто привести типы данных, а именно - число к типу TForeignLanguages. Дальше элементарно - заводим цикл по строкам и "на лету" формируем требуемое множество. Итак, окончательный вариант:

procedure TForm1.Button1Click(Sender: TObject);var Person: TPerson; I: Byte;begin with Person do begin Name:=Edit1.Text; Age:=UpDown1.Position; Education:=CheckBox1.Checked; PC:=CheckBox2.Checked; Foreign:=[]; for I:= 0 to CheckListBox1.Items.Count-1 do if CheckListBox1.Checked[I] then Foreign:=Foreign + [TForeignLanguages(I)]; end;end;

Красивый и при этом самый короткий код зарезервированного слова record (запись) в одном типе можно объединять данные разных типов. Общий синтаксис объявления этого типа выглядит следующим образом:

record fieldnamel: fieldtypel; fieldname2, fieldname3: fieldtype2; case optional tagfield: required ordinal type of 1: variantnamel: varianttype3; 2, 3: variantname2: varianttype4; end;

Данное объявление состоит из фиксированной и вариантной частей. Однако вовсе не обязательно вставлять в одно объявление записи обе эти части. Обычно удобнее работать с каждой из этих частей отдельно.

Примеры

 

Пример.

 

Сформировать файл FM. DAT, содержащий экзаменационную ведомость одной студенческой группы. Записи файла состоят из следующих элементов: фамилия, имя, отчество; номер зачетной книжки; оценка.

начало
n
I:=1,n
I: 1,’-й, Ф.И.О.’
‘Номер зачёт’,SNZ
‘оценка: S.Mark Fstud, S
конец

 

Program Examen;

Type Stud= Record

Fio: String [30];

Nz: String [6];

Mark: 2..5

End;

Var Fstud: File Of Stud;

S: Stud;

N, I: Byte;

Begin

Assign (Fstud,’FM. DAT’); Rewrite (Fstud);

Write (‘Количество студентов в группе?’);

Readln (N);

For I:=1 To N Do

Begin

Write (I: 1,’-й, Фамилия И. О.’); Readln (S. FIO);

Write (‘номер зачетки:’); Readln (S.Nz);

Write (‘ оценка:’); Readln (S. Mark);

Write (Fstud, S)

End;

Close (Fstud);end.

6.3. Контрольные вопросы

1. Что такое запись?

2. Почему запись называют комбинированным типом данных?

3. Как определяется тип записи?

4. Что называется полем записи?

5. Чем определяется объем памяти, требуемый для размещения записи?

6. Что такое составное имя поля записи? Из каких частей оно состоит и как записывается?

7. С какого идентификатора начинается определение типа записи?

8. Каждому полю обязательно присваивается…

9. Что такое необязательное поле?

10. Как описывается запись?

11. TPoint – это…

12. … - позволяет хранить данные о прямоугольной области.

Задания к лабораторной работе № 6

Записи

 

Вариант 1.

1. Существует файл, содержащий сведения о магазинах вашего района: название, тип магазина, адрес. Вывести все продовольственные магазины, название которых начинается на заданную букву.

2. Дан список – протокол лыжных гонок. Фамилия, время старта и время финиша. Вывести на экран список победителей.

 

Вариант 2.

1.Распечатать список учеников, фамилии которых начинаются

на букву В, с указанием даты их рождения.

2. Составить программу назначения стипендии студентам по результатам сессии, используя следующие правила:

1) если все оценки 5, назначается повышенная стипендия;

2) если все оценки 4 и 5, назначается обычная стипендия;

3) если есть оценка 3, то стипендия не назначается. В результате

работы программы должен быть напечатан список группы с

оценками и средним баллом каждого студента.

 

Вариант 3.

1. Из данного списка спортсменов распечатать сведения о тех

из них, кто занимается плаванием. Указать возраст, сколько

лет они занимаются спортом.

2. В таблице хранятся следующие данные об учениках: фамилия, имя, отчество, рост, масса. Вычислить, каков средний рост учеников, рост самого высокого и самого низкого учеников.

 

Вариант 4.

1. Вычислить средний балл учеников класса, если известны оценки каждого ученика по математике, русскому языку и физике. Распечатать список учеников, имеющих средний балл выше среднего в классе.

2. На аптечном складе хранятся лекарства. Сведения о лекарствах содержатся в специальной ведомости: наименование лекарственного препарата, количество, цена, срок хранения (в месяцах). Выяснить сколько стоит самый дорогой и самый дешевый препарат; сколько препаратов хранится на складе?

 

Вариант 5.

1.Распечатать фамилии рабочих бригады, начинающиеся с букв А и С, с указанием их месячной зарплаты.

2. Распечатать фамилии тех учеников класса, которые являются троечниками по итогам года. Также указать, насколько их средний балл отличается от среднего балла хорошиста с самым низким средним баллом среди хорошистов.

 

Вариант 6.

1.Из ассортимента конфет, выпускаемых пермской кондитерской фабрикой, выбрать те, стоимость которых от 30 до 55 руб.за 1 кг. Указать срок их годности и номера магазинов, в которых они имеются в продаже.

2. Распечатать анкетные данные учеников, участвовавших в олимпиаде по информатике и заработавших менее 30 баллов, а также список победителей олимпиады.

 

 

Вариант 7.

1. Распечатать список учеников музыкальной школы, которые учатся играть на скрипке. Указать также, сколько лет они занимаются музыкой и принимали ли участие в каких- либо конкурсах.

2.Распечатать список автомобилей, участвовавших в гонках (указать марку, время прохождения трассы, фамилию гонщика). Кто пришел к финишу первым и последним?

 

Вариант 8.

1. Среди работников данного предприятия найти тех, чья заработная плата за месяц ниже средней по предприятию, а также распечатать список тех, кто проработал на предприятии более 10 лет, с указанием их фамилии, зарплаты, стажа работы и должности.

2. Из данного списка спортсменов распечатать сведения о тех

из них, кто занимается плаванием. Указать того, кто занимается спортом дольше всех.

 

Вариант 9.

1. Распечатать фамилии тех учеников, которые не получили ни одной тройки за последнюю четверть. В каких классах учатся эти ученики? Каков их средний балл?

2. В таблице хранятся следующие данные об учениках: фамилия, имя, отчество, рост, масса. Сколько учеников могут заниматься в баскетбольной секции, если рост баскетболиста должен быть больше 170 см?

 

Вариант 10.

1. Распечатать список тех учителей школы, которые преподают математику и информатику, указать стаж их работы и недельную нагрузку.

2. Даны результаты переписи населения, которые хранятся в памяти ЭВМ. Напечатать фамилии, имена и подсчитать общее число жителей женского пола, родившихся после 1990 г.

 

Вариант 11.

1. Распечатать фамилии детей данного детского сада, которые родились в определенном месяце; указать их возраст и группу.

2. Распечатать список учеников, фамилии которых начинаются

на букву Х. Кто из этого списка имеют один и тот же цвет глаз и волос?

 

Вариант 12.

1. Распечатать анкетные данные учеников, участвовавших в олимпиаде по информатике и заработавших не менее 30 баллов.

2. Распечатать список учеников музыкальной школы, которые учатся играть на скрипке. Указать также, кто из них играет на каком либо другом инструменте и владеет английским языком.

 

Вариант 13.

1. Распечатать фамилии тех учеников класса, которые являются хорошистами и отличниками по итогам года. Также указать, насколько их средний балл отличается от среднего балла класса.

2. Составить программу назначения стипендии студентам по результатам сессии, используя следующие правила:1) если все оценки 5, назначается повышенная стипендия; 2) если все оценки 4 и 5, назначается обычная стипендия; 3) если есть оценка 3, то стипендия не назначается. В результате работы программы должны быть напечатаны два списка фамилий (назначенных на повышенную и обычную стипендию).

 

 

Вариант 14.

1. По данным сведениям об учениках класса определить среднюю массу мальчиков и средний рост девочек. Кто из учеников класса самый высокий?

2. При поступлении в университет лица, получившие оценку неудовлетворительно на первом экзамене, ко второму экзамену не допускаются. Считая фамилии абитуриентов и их оценки после первого экзамена исходными данными, составить список абитуриентов, поступивших в университет, по итогам двух экзаменов, при условии что набор составил К человек.

 

Вариант 15.

1. Даны результаты переписи населения, которые хранятся в памяти ЭВМ. Напечатать фамилии, имена и подсчитать общее число жителей, родившихся после 1990 г.

2. На аптечном складе хранятся лекарства. Сведения о лекарствах содержатся в специальной ведомости: наименование лекарственного препарата, количество, цена, срок хранения (в месяцах). Выяснить наименование препарата, которого больше всего на складе и препарата с самым маленьким сроком хранения.

 



Поделиться:


Последнее изменение этой страницы: 2016-07-16; просмотров: 361; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.178.133 (0.042 с.)