1.3.Этапы разработкипрограммы13
2.2.Язык программированияDelphi14
2.3.Пользовательскийинтерфейс14
Внедрениеэлектронно-вычислительныхмашин, современныхсредств переработкии передачиинформациипослужилоначалом новогопроцесса, называемыминформатизациейобщества. Широкоераспространениеполучил научно-техническийпрогресс. Внастоящее времяодним из направленийнаучно-техническогопрогрессаявляетсякомпьютеризацияпрактическивсех сферчеловеческойдеятельности.
Сейчас компьютерявляется неотъемлемойчастью работылюдей. Компьютерыиспользуютсяв школах иуниверситетах.Они помогаютсистематизацииполученныеданных как врабочих целях,так и в учебных.
Данномкурсовом проектерассмотренпрограммныйпродукт “Методикамногофакторногоисследованияличности Р.Кеттелла”. Онпредставляетсобой опросникиз 187 вопросов,определяющийшестнадцатьфакторов личностии дает многограннуюинформациюо личностныхчертах, которыеназываютконституционнымифакторами,предложен Р.Кеттеллом.
Создаваяданную программуя использовалразличныекомпоненты,такие как button,combobox, edit,label, radiogroup,statictext, memo.
Простейшейи, пожалуй, наиболеечасто используемойкнопкой являетсякнопка Button (см.на рис. 5.1 в верхнемлевом углуформы), расположеннаяна страницебиблиотекиStandard.
Основноес точки зрениявнешнего видасвойство кнопки— Caption (надпись).В надписяхкнопок можнопредусматриватьиспользованиеклавиш ускоренногодоступа, выделяядля этого одиниз символовнадписи. Передсимволом, которыйдолжен соответствоватьклавише ускоренногодоступа, ставитсясимвол амперсанта«&». Этот символне появляетсяв надписи, аследующий заним символоказываетсяподчеркнутым.Тогда пользовательможет вместощелчка на кнопкенажать в любоймомент клавишуAltсовместно склавишей выделенногосимвола.
Основноесобытие любойкнопки — OnClick,возникающеепри щелчке наней. Именно вобработчикеэтого событиязаписываютсяоператоры,которые должнывыполнятьсяпри щелчкепользователяна кнопке. Помимоэтого есть ещеряд событий,связанных сразличнымиманипуляциямиклавишами икнопками мыши.
СвойствоCancel, если егоустановитьв true, определяет,что нажатиепользователемклавиши Escбудет эквивалентнонажатию наданную кнопку.Это свойствоцелесообразнозадавать равнымtrue для кнопок«Отменить»в различныхдиалоговыхокнах, чтобыможно быловыйти из диалога,нажав на этукнопку илинажав клавишуEsc.Свойство Default,если его установитьв true, определяет,что нажатиепользователемклавиши вводаEnterбудет эквивалентнонажатию наданную кнопку,даже если даннаякнопка в этотмомент не находитсяв фокусе. Правда,если в моментнажатия Enterв фокусе находитсядругая кнопка,то все-такисработаетименно кнопкав фокусе.
Изметодов, присущихкнопкам, имеетсмысл отметитьодин — Click. Выполнениеэтого методаэквивалентнощелчку на кнопке,т.е. вызываетсобытие кнопкиOnClick. Этим можновоспользоваться,чтобы продублироватькакими-то другимидействиямипользователящелчок на кнопке.Пусть, например,вы хотите, чтобыпри нажатиипользователемклавиши с символом«С»или «с»в любой моментработы с приложениемвыполнялисьоперации,предусмотренныев обработчикесобытия OnClickкнопки Button1. Посколькунеизвестно,какой компонентбудет находитьсяв фокусе в моментэтого события,надо перехватитьего на уровнеформы. Такойперехватосуществляется,если установитьсвойство формыKeyPreview в true. Тогдав обработчикесобытия формыOnKeyPress можно написатьоператор
if(key='C' or key='c') then Button1.Click;
Еслипользовательввел символ«С» или «с», тов результатебудет выполненобработчикщелчка кнопкиButton1.
Стильизображенияэтого компонентаопределяетсясвойствомStyle, которое можетприниматьследующиеосновные значения:
csDropDown- Выпадающийсписок со строкамиодинаковойвысоты и с окномредактирования,позволяющимпользователювводить илиредактироватьтекст;
csSimple- Развернутыйсписок со строкамиодинаковойвысоты и с окномредактирования,позволяющимпользователювводить илиредактироватьтекст;
csDropDownList- Выпадающийсписок со строкамиодинаковойвысоты, не содержащийокна редактирования.
Выборпользователяили введенныйим текст можноопределитьпо значениюсвойства Text.Если же надоопределитьиндекс выбранногопользователемэлемента списка,то можно воспользоватьсясвойствомItemIndex. Если начальноезначение незадано, то вмомент запускаприложенияпользовательне увидит вокне компонентаодно из возможныхзначений спискаи, вероятнеевсего, не оченьпоймет, что сэтим окном надоделать.
Еслив окне проводилосьредактированиеданных, то ItemIndex= -1. По этому признакуможно определить,что редактированиепроводилось.
СвойствоMaxLength определяетмаксимальноечисло символов,которые пользовательможет ввестив окно редактирования.
ЕслиMaxLength = 0, то числовводимых символовне ограничено.
ВкомпонентеEdit вводимыйи выводимыйтекст содержитсяв свойствеText. Это свойствоможно устанавливатьв процессепроектированияили задаватьпрограммно.Выравниваниетекста, как этоимело местов метках и панелях,невозможно.Перенос строктоже невозможен.Текст, не помещающийсяпо длине в окно,просто сдвигаетсяи пользовательможет перемещатьсяпо нему с помощьюкурсора. СвойствоAutoSize в окнахредактированияимеет смысл,отличный отсмысла аналогичногосвойства меток:автоматическиподстраиваетсяпод размертекста тольковысота, но неширина окна.
Окнаредактированияснабжены многимифункциями,свойственнымибольшинствуредакторов.Например, в нихпредусмотренытипичные комбинации«горячих»клавиш: Ctrl-C— копированиевыделенноготекста в буферобмена Clipboard (командаCopy), Ctrl-X— вырезаниевыделенноготекста в буферClipboard (команда Cut),Ctrl-V— вставка текстаиз буфера Clipboard впозицию курсора(команда Paste), Ctrl-Z— отмена последнейкоманды редактирования.
Editможно использоватьи просто каккомпонентыотображениятекста. Дляэтого надоустановитьв true его свойствоReadOnly и целесообразноустановитьAutoSelect в false. В этомслучае пользовательне сможет изменятьотображаемыйтекст и окноредактированиястановитсяподобным меткам.При использованииокон редактированиядля вывода,ввода и редактированиячисел необходимоиспользоватьфункции взаимногопреобразованиястрок и чисел.Для вывода этоописанные прирассмотренииметок функцииFloatToStr и IntToStr. Привводе это функцииStrToFloat — преобразованиестроки в значениес плавающейзапятой, и StrToInt— преобразованиестроки в целоезначение. Есливводимый текстне соответствуетчислу (например,содержит недопустимыесимволы), тофункции преобразованиягенерируютисключениеEConvertError. Поэтомув программенеобходимопредусмотретьобработку этогоисключения.Например:
varA: integer;
try
A :=StrToInt(Edit1.Text);
...{операторы, использующиепеременнуюА}
excepton EConvertError do
ShowMessage('Вы ввели ошибочное число;
повторите ввод');
Этоткод обеспечиваетсообщениепользователюоб ошибке вводаи предотвращаетошибочныевычисления.Впрочем, этоне лучший вариантпредотвратитьошибочный ввод,посколькупользовательузнает о своейошибке толькопосле того, какпрограммапытается использоватьвведенныеданные. Лучше,если пользовательпросто не сможетввести неправильныесимволы. Например,если вы хотите,чтобы пользовательмог вводитьв окно редактированияEdit только цифрыи символ точки,вы можете вобработчиксобытия OnKeyPressэтого компонентавставить оператор:
ifnot (Keyin['0'..'9', ',']) thenKey := #0;
Этотоператор подменитвсе символы,кроме цифр изапятой, нулевымсимволом, которыйне занесетсяв текст окнаEdit.
СвойствоMaxLength определяетмаксимальнуюдлину вводимоготекста. ЕслиMaxLength = 0, то длинатекста не ограничена.В противномслучае значениеMaxLength указываетмаксимальноечисло символов,которое можетввести пользователь.
СвойствоPasswordChar позволяетпревращатьокно редактированияв окно вводапароля. По умолчаниюзначение PasswordCharравно #0 — нулевомусимволу. В этомслучае этообычное окноредактирования.Но если в свойствеуказать инойсимвол (например,символ звездочки«*»), то при вводепользователемтекста в окнебудут появлятьсяименно этисимволы, а нете, которыевводит пользователь(см. рис. 3.5). Темсамым обеспечиваетсясекретностьввода пароля.
Дляотображенияразличныхнадписей наформе используютсяв основномкомпонентыLabel, StaticText (появившийсятолько в Delphi 3) иPanel. Первые дваиз этих компонентов— метки, специальнопредназначенныедля отображениятекстов.
Тексты,отображаемыев перечисленныхкомпонентах,определяютсязначением ихсвойства Caption.Его можноустанавливатьв процессепроектированияили задаватьи изменятьпрограммново время выполненияприложения.Например:
Label1.Caption:= 'Новый текст';
Еслитребуетсяотобразитьчисловую информацию,можно воспользоватьсяфункциямиFloatToStr и IntToStr, переводящимисоответственночисла с плавающейзапятой и целыев строку. Дляформированиятекста, состоящегоиз несколькихфрагментов,можно использоватьоперацию «+»,которая длястрок означаетих склеивание(конкатенацию).Например, еслив программеимеется целаяпеременнаяI, отображающаячисло сотрудниковнекоторойорганизации,то вывести вметку Label1 информациюоб этом можнооператором:
Label1.Caption:= 'Число сотрудников:'+IntToStr(I);
Вовсех компонентахцвет фонаопределяетсясвойствомColor, а цвет надписи— подсвойствомColor свойстваFont.
Дляметки Label цвети шрифт — единственнодоступныеэлементы оформлениянадписи. КомпонентStaticText имеет крометого свойствоBorderStyle, определяющеерамку текста— бордюр.
Размерметок Label и StaticTextопределяетсятакже свойствомAutoSize. Если этосвойство установленов true, то вертикальныйи горизонтальныйразмеры компонентаопределяютсяразмером надписи.Если же AutoSize равноfalse, то выравниваниетекста внутрикомпонентаопределяетсясвойствомAlignment, котороепозволяетвыравниватьтекст по левомукраю, правомукраю или центруклиентскойобласти метки.
Вметке Label имеетсясвойство Wordwrap— допустимостьпереноса словдлинной надписи,превышающейдлину компонента,на новую строчку.Чтобы такойперенос могосуществляться,надо установитьсвойство WordWrapв true, свойствоAutoSize в false (чтобыразмер компонентане определялсяразмером надписи)и сделать высотукомпонентатакой, чтобыв нем моглопоместитьсянесколькострок.
Вметке StaticText переносдлинного текстаосуществляетсяавтоматически,если значениеAutoSize установленов false и размеркомпонентадостаточендля размещениянесколькихстрок. Для того,чтобы в StaticTextосуществлялсяперенос приизменениипользователемразмеров окна,надо осуществлятьописанную вышеперерисовкукомпонентаметодом Repaint вобработчикесобытия формыOnResize.
Радиокнопкиобразуют группывзаимосвязанныхиндикаторов,из которыхможет бытьвыбран толькоодин. Они используютсядля выборапользователемодной из несколькихвзаимоисключающихальтернатив,например, отдела,в котором работаетсотрудник, илипола сотрудника.Впрочем, радиокнопкимогут использоватьсяи для отображенияаналогичныхданных. В этомслучае управлениекнопкамиосуществляетсяпрограммно.
RadioGroup– это панель,которая можетсодержатьрегулярнорасположенныестолбцами истроками радиокнопки.Надпись в левомверхнем углупанели определяетсясвойствомCaption. А надписикнопок и ихколичествоопределяютсясвойствомItems, имеющим типTStrings. Щелкнув накнопке с многоточиемоколо этогосвойства в окнеИнспектораОбъектов, выпопадете вредактор списковстрок. В нем выможете занестинадписи, которыехотите видетьоколо кнопок,по одной в строке.Сколько строчеквы запишете— столько ибудет кнопок.
Кнопки,появившиесяв панели послезадания значенийItems, можно разместитьв несколькостолбцов (неболее 17), задавсвойство Columns.По умолчаниюColumns = 1, т.е. кнопкиразмещаютсядруг под другом.
Определить,какую из кнопоквыбрал пользователь,можно по свойствуItemIndex, котороепоказываетиндекс выбраннойкнопки. Индексы,как всегда вDelphi, начинаютсяс 0. По умолчаниюItemIndex = -1, что означаетотсутствиевыбраннойкнопки. Есливы хотите, чтобыв момент началавыполненияприложениякакая-то изкнопок былавыбрана (этопрактическивсегда необходимо),то надо установитьсоответствующеезначение ItemIndexво время проектирования.Если вы используетерадиокнопкине для ввода,а для отображенияданных, устанавливатьзначение ItemIndexможно программново время выполненияприложения.
КомпонентRadioGroup очень удобен,но не свободенот некоторыхнедостатков.Его хорошоиспользовать,если надписикнопок имеютпримерно одинаковуюдлину и есличисло кнопокв каждом столбце(при размещенииих в несколькихстолбцах) одинаково.
ВкомпонентеMemo формат (шрифт,его атрибуты,выравнивание)одинаков длявсего текстаи определяетсясвойством Font.Если вы сохранитев файле текст,введенный илиотредактированныйпользователем,то будет создантекстовый файл,содержащийтолько символыи не содержащийэлементовформатирования.При последующемчтении этогофайла в Memo форматбудет определятьсятекущим состояниемсвойства FontкомпонентаMemo, а не тем, вкаком форматеранее вводилсятекст.
СвойстваAlignment и WordWrap имеюттот же смысл,что, например,в метках, иопределяютвыравниваниетекста и допустимостьпереноса длинныхстрок. Установкасвойства ReadOnlyв true задает тексттолько длячтения. СвойствоMaxLength определяетмаксимальнуюдлину вводимоготекста. ЕслиMaxLength = 0, то длинатекста не ограничена.Свойства WantReturnsи WantTab определяютдопустимостьввода пользователемв текст символовперевода строкии табуляции.
СвойствоScrollBars определяетналичие полоспрокруткатекста в окне.По умолчаниюScrollBars = ssNone, что означаетих отсутствие.Пользовательможет в этомслучае перемещатьсяпо тексту толькос помощью курсора.Можно задатьсвойству ScrollBarsзначенияssHorizontal, ssVertical или ssBoth,что будетсоответственноозначать наличиегоризонтальной,вертикальнойили обеих полоспрокрутки.
СвойстваTabCount и Tab имеютсмысл при вводетекста толькопри значениисвойства компонентаWantTabs = true. Это свойстворазрешаетпользователювводить в текстсимвол табуляции.Если WantTabs = false, тонажатие пользователемклавиши табуляциипросто переключитфокус на очереднойкомпонент исимвол табуляциив текст не введется.
Основноесвойство окнаmemo – Lines,содержащеетекст окна ввиде спискастрок и имеющеетип TStrings. Начальноезначение текстаможно установитьв процессепроектирования,нажав кнопкус многоточиемоколо свойстваLines в окне ИнспектораОбъектов. Передвами откроетсяокно редактированиясписков строк.Вы можетередактироватьили вводитьтекст непосредственнов этом окне,или нажатькнопку CodeEditor иработать вобычном окнеРедактора Кода.В этом случае,завершив работус текстом, выберитеиз контекстногоменю, всплывающегопри щелчкеправой кнопкоймыши, командуClose Page и ответьтеутвердительнона вопрос, хотители вы сохранитьтекст в соответствующемсвойстве окнаредактирования.
Вовремя выполненияприложениявы можете заноситьтекст в окноредактированияс помощью методовсвойства Linesтипа TStrings. Этоттип широкоиспользуетсяв свойствахмногих компонентови его описаниевы можете найтив во встроеннойсправке Delphi. Здеськоротко укажемтолько на егоосновные свойстваи методы, используемыев свойствеLines.
Весьтекст, представленныйодной строкойтипа String, внутрикоторой используютсяразделителитипа символоввозврата кареткии переводастроки, содержитсяв свойствеText.
Доступк отдельнойстроке текставы можете получитьс помощью свойстваStrings[Index: Integer]. Индексы,как и везде вDelphi, начинаютсяс 0. Так чтоMemo1.Lines.Strings[0] — это текстпервой строки.Учтите, чтоесли окноредактированияизменяетсяв размерах приработе с приложениеми свойствоWordWrap = true, то индексыстрок будутизменятьсяпри переносахстрок, так чтов этих случаяхиндекс малоо чем говорит.
Свойствотолько длячтения Count указываетчисло строкв тексте.
Дляочистки текстав окне надовыполнитьпроцедуруClear. Этот методотносится ксамому окну,а не к его свойствуLines.
Длязанесения новойстроки в конецтекста окнаредактированияможно воспользоватьсяметодами Addили Append свойстваLines. Для загрузкитекста из файлаприменяетсяметод LoadFromFile. Сохранениетекста в фалеосуществляетсяметодом SaveToFile.
Пусть,например, ввашем приложенииимеется окноредактированияEdit1, в которомпользовательвводит имясотрудника,и есть кнопка,при щелчке накоторой в окноMemo1 должна занестисьшапка характеристикиэтого сотрудника,после чегопользовательможет заполнитьтекст характеристики.
Обработчикщелчка на кнопкеможет иметьвид:
Memo1.Clear;
Memo1.Lines.Add('Х А Р А К Т Е Р ИС Т И К А');
Memo1.Lines.Add('Сотрудник'+Edit1.Text) ;.
Memo1.SetFocus;
Загрузкав окно Memo1 текстаиз файла (например,хранящейсяв файле характеристикисотрудника)может осуществлятьсякомандой
Memo1.Lines.LoadFromFile('text.txt');
Сохранениетекста в файлеможет осуществлятьсякомандой
Memo1.Lines.SaveToFile('text.txt');
Присоздании теста,можно использоватьмногостраничныйкомпонентNotePad, он даствозможностьна каждый вопросприменятьотличное отдругих вопросовоформлениеи тем самымпридаст тестуболее красочныйвид.
Определениетребованийк программе– один из важнейшихэтапов. На этомэтапе подробноописываетсяисходная информацияи формулируютсятребованияк результату.Кроме того,описываетсяповедениепрограммы вособых случаях.
Приразработкепрограммы,предназначеннойдля работы вWindows, требованияк ней могутвключать пунктыо желаемом видедиалоговыхокон программы.
Наэтапе разработкиалгоритманеобходимоопределитьпоследовательностьдействий, которыенадо выполнитьдля достиженияпоставленнойцели, получениярезультата.Если задачаможет бытьрешена различнымиспособами, и,следовательно,возможны различныеварианты алгоритмарешения, то,программист,используянекоторыйкритерий, выбираетнаиболее подходящеерешение. Затемсоставляетсяподробноесоставлениеалгоритма.
Припрограммированиив Delphi основнаяработа программистазаключаетсяв разработкеподпрограмм.Задачу организациивзаимодействияразработанныхподпрограммберет на себяDelphi . ТакжеDelphi удобнадля созданияпрограмм свизуальнымикомпонентами,которые ужесозданы в нейи имеют стандартныйнабор команд.
Поставленнаязадача заключаласьв следующем.Необходимосоздать программукоторая быпроводилатестированиена основе опросникаР.Кеттелла исохраняларезультатопроса длядальнейшегоанализа. Программадолжна помочьпсихологамв проведениитестированиястудентов.
Среда разработкиDelphi ориентирована,прежде всего,на созданиепрограмм длясемействаоперационныхсистем Windows.При этом большоевнимание уделяетсявозможностивизуальнойразработкиприложенийс помощью большогонабора готовыхкомпонентов,а в стандартнуюпоставку Delphiвходят основныеобъекты, которыеобразуют удачноподобраннуюиерархию из270 базовых классов,позволяющихизбежать ручногокодирования.Эти компонентыохватываютпрактическивсе аспектыприменениясовременныхинформационныхтехнологий.
В процессепостроенияприложениянеобходимовыбирать изпалитры компоненты,на основе которыхбудет строитьсяпроект. Еще докомпиляциивидно результатысвоей работы.В этом смыслепроектированиев Delphi мало чемотличаетсяот проектированияв интерпретирующейсреде, однакопосле выполнениякомпиляцииполучаем код,который исполняетсяв 10-20 раз быстрее,чем то же, самое,сделанное припомощи интерпретатора.Cреда Delphi включаетв себя полныйнабор визуальныхинструментовдля скоростнойразработкиприложений(RAD - rapid application development), поддерживающейразработкупользовательскогоинтерфейса.
Призапуске опросника,программапопросит вестиличные данные,такие как: Фамилия,имя, пол и возраст.
Вводэтих данныхобязателен,без них невозможноначать тест,т.к. от этогозависит подсчётфакторов личности.
Послезаполнениявсех полей,можно начатьсам тест, приэтом откроетсяновое окно, астарое закроется.В новом окнебудет приведенаинструкцияпо выполнениютеста и небольшоеописание.
Принажатии кнопки“Далее >>>” наформе отобразитсявопрос и триварианта ответа,выбор вариантаответа производитсякликом мыши.Продолжениетестированияпроизводитсякнопкой “Далее>>>” при этомна форме будутотображатьсяновые вопросыи три вариантаответа.
Приокончаниетеста, программаподсчитаетколичествонабранныхбаллов и отобразитхарактерныечерты личноститестируемого.
Призакрытие всефакторы сохраняютсяв файл с расширением.txt и именемфайла аналогичнымс фамилиейтестируемого,папка в которойбуду находитсявсе эти файлы,называетсяtested м находитсяв папке программы.
Организационнаяструктурареализацииалгоритмаразработкипрограммысхематическиизображенана рисунке 1.
Процессор– не ниже Pentium166;
Операционнаясистема – Windows95, 98, 2000, XP;
Оперативнаяпамять – 16 Мб;
Минимальноетребуемоеместо на жесткомдиске – 5 Мб.
Внастоящее времяшироко в нашужизнь внедряютсяинформационныетехнологии.На сегодняшнийдень, наверное,не осталосьникакой области,где–бы они неприменялись.Одной из сфердеятельности,в которойинформационныетехнологииполучили широкоераспространение,являются игрыи досуг.
БобровскийС. Delphi 5 – М.: Питер,2002.
ГаевскийА.Разработкапрограммныхприложенийна Delphi 6 – М.:Киев, 2000.
ДжонМатчо, ДэвидР.Фолкнер. «Delphi»- пер. с англ. –М.:Бином, 1998г.
ЕпанишниковА. М., ЕпанишниковВ. А. Программированиев среде Turbo Pascal 7.0. М.:Диалог МИФИ,1998.
ЗуевВ. А..Turbo Pascal 6.0, 7.0. М.: Веста;Радио и связь,1998.
КоцюбинскийА.О., Грошев С.В.Язык программированияDelphi 5 – М.: «ИздательствоТриумф», 1999.
ЛеонтьевВ. Delphi 5 – М.: Москва«Олма-Пресс»,1999.
МоисеевА. Object Pascal – М.:Москва,2000.
НемнюгинС.А. Программирование– М.: Питер, 2000.
Программированиепод ред. В.В.Старлова– М: Питер, 1999
РемизовН. Delphi – М.: Питер,2000.
СванТ. Основы программированияв среде дляWindows 95. Киев, 1996.
Справочнаясистема Delphi 5.0 Help.
Т.А.Ильина. Программированиена Delphi 6 – М.:Питер, 2000.
ФароновВ. В. Delphi 4. Учебныйкурс. М.: Нолидж,1999.
ФедоровА. Г. СозданиеWindows-приложенийв среде Delphi. М.: ТОО«КомпьютерПресс», 1999.
ХендерсонК. Руководстворазработчикабаз данных вDelphi 2. Киев: Диалектика,1998.
Ч.Куписевич.Программированияна Delphi. – М:Киев, 1986
ШапошниковИ. Delphi 5 – М.:Санкт-Петербург,2001.
ШумаковП. В. Delphi 3 и разработкаприложенийМ.: Нолидж, 1999.
unitfmain;
interface
uses
Windows, Messages,SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TFormmain =class(TForm)
Edit1: TEdit;
StaticText1:TStaticText;
Edit2: TEdit;
StaticText2: TStaticText;
ComboSex:TComboBox;
StaticText3:TStaticText;
StaticText4:TStaticText;
ComboAge:TComboBox;
Button1: TButton;
Button2: TButton;
procedureButton1Click(Sender: TObject);
procedureButton2Click(Sender: TObject);
procedureFormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
Formmain: TFormmain;
implementation
uses ftest;
{$R *.dfm}
procedureTFormmain.Button1Click(Sender: TObject);
var error:Boolean;
begin
nomer:=0;
if edit1.Text='' then
beginmessagedlg('Введитефамилию',mterror,[mbok],0);
error:=true; end elseerror:=false;
if edit2.Text='' then
beginmessagedlg('Введитеимя',mterror,[mbok],0);
error:=true; end elseerror:=false;
ifComboSex.ItemIndex0 then
ifComboSex.ItemIndex1 then
begin messagedlg('Введитепол',mterror,[mbok],0);
error:=true; end else error:=false;
ifComboAge.ItemIndex0 then
ifComboAge.ItemIndex1 then
ifComboAge.ItemIndex2 then
begin messagedlg('Введитевозраст',mterror,[mbok],0);
error:=true; end else error:=false;
if error=false thenbegin
Formmain.hide;
formtest.Show;
end;
end;
procedureTFormmain.Button2Click(Sender: TObject);
begin
close;
end;
procedureTFormmain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if messagedlg('Выдействительнохотитевыйти?',mtcustom,[mbyes,mbno],0)=mrnothen
canclose:=false;
end;
end.
unit ftest;
interface
uses
Windows, Messages,SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls,StdCtrls, Spin, ComCtrls;
type
TFormTest =class(TForm)
buttonnext:TButton;
Memo1: TMemo;
RadioGroup1:TRadioGroup;
Label1: TLabel;
Label3: TLabel;
BFinish: TButton;
procedurebuttonnextClick(Sender: TObject);
procedureFormCreate(Sender: TObject);
procedurebuttonPreviosClick(Sender: TObject);
procedureFormClose(Sender: TObject; var Action: TCloseAction);
procedureFormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedureBFinishClick(Sender: TObject);
procedureFormHide(Sender: TObject);
procedureFormDblClick(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
FormTest: TFormTest;
nomer:Byte; {номервопроса}
a,b,c,d,e,f,g,h,i,l,m,n,o,q1,q2,q3,q4:byte;{Факторы}
aa,bb,cc,dd,ee,ff,gg,hh,ii,ll,mm,nn,oo,qq1,qq2,qq34:byte;{Стены}
implementation
uses fmain;
{$R *.dfm}
{Очисткаформы}
procedure clear;
begin
FormTest.Memo1.Lines.Clear;
FormTest.RadioGroup1.Items.Clear;
end;
procedure pballov;
begin
if nomer=3 then
begin
caseFormTest.RadioGroup1.ItemIndex of
0:begin Aa:=aa+2;bb:=bb+2;end;
1:begin aa:=aa+1;bb:=bb+1;end;
2:begin aa:=aa+2;bb:=bb+2;end;
end;
end;
case nomer of
{AA}27,52,76,101,126,151,176:begin
case FormTest.RadioGroup1.ItemIndex of
0:Aa:=aa+2;
1:aa:=aa+1;
2:aa:=aa+2;
end;
end;
{BB}28,54,78,103,128,153,178:begin
case FormTest.RadioGroup1.ItemIndex of
0:bb:=bb+2;
1:bb:=bb+1;
2:bb:=bb+2;
end;
end;
...
{QQ3и QQ4} 24,48,73,98,123,148,173:begin
case FormTest.RadioGroup1.ItemIndex of
0:qq34:=qq34+2;
1:qq34:=qq34+1;
2:qq34:=qq34+2;
end;
end;
end;
FormTest.RadioGroup1.ItemIndex:=-1;
end;
{Подсчётвывод и сохранениерезультата}
procedure whoru;
begin
clear;
{подсчётвсех факторов}
caseformmain.ComboAge.ItemIndex of{от 16 до 18лет}
0:begin
ifformmain.ComboSex.ItemIndex=0 then {Ж.}
begin
case aa of
0..6:a:=1;
7..8:a:=3;
9..10:a:=4;
11:a:=5;
12..13:a:=6;
14..15:a:=7;
16:a:=8;
17..18:a:=9;
19..20:a:=10;
end;
case bb of
0..1:b:=1;
8,9:b:=8;
11,12:b:=10;
else b:=bb;
end;
…
end;
end;
end;
end;
{Отображениерезультата}
casea of {ФакторА}
1..5:begin
FormTest.Memo1.Lines.Add('"Шизотермия"');
…
end;
end;
end;
{добавлениевопросов вMemo}
procedure addtest;
begin
if nomer=1 then
begin
nomer:=nomer+1;
clear;
FormTest.memo1.Lines.Add('1.Я хорошопонял инструкцию,которую толькочто прочитал:');
FormTest.RadioGroup1.Items.Add('а)Да;');
FormTest.RadioGroup1.Items.Add('в)не уверен;');
FormTest.RadioGroup1.Items.Add('с)нет.');
end
else
begin
ifnomer
ifFormTest.RadioGroup1.ItemIndex=-1 then
messagedlg('Непропускайтеничего, обязательноотвечайте навсе вопросыподряд',mtinformation,[mbok],0)
else
begin
case nomer-1 of
3..186:pballov;
end;
clear;
{Вопросы}
case nomer of
1:begin
FormTest.memo1.Lines.Add('1.Я хорошопонял инструкцию,которую толькочто прочитал:');
FormTest.RadioGroup1.Items.Add('а)Да;');
FormTest.RadioGroup1.Items.Add('в)не уверен;');
FormTest.RadioGroup1.Items.Add('с)нет.');
end;
2:begin
…
188:begin
whoru;
end;
end;
if nomer
end;
end;
end;
procedureTFormTest.buttonnextClick(Sender: TObject);
begin
if nomer=0 then
begin
nomer:=nomer+1;
memo1.ScrollBars:=ssNone;
end;
if nomer=1 then
begin
RadioGroup1.Visible:=true;
label1.Visible:=false;
label3.Visible:=true;
end
else
if nomer=188then
begin
radiogroup1.Visible:=false;
memo1.ScrollBars:=ssVertical;
buttonnext.Caption:='Завершить';
buttonnext.Visible:=false;
BFinish.Visible:=true;
Label1.Visible:=false;
Label3.Visible:=false;
end;
addtest;
{if n>0 then
begin
case n of
3:pballov;
end;
end;}
end;
procedureTFormTest.FormCreate(Sender: TObject);
begin
nomer:=0;
end;
procedureTFormTest.buttonPreviosClick(Sender: TObject);
begin
nomer:=nomer-1;
addtest;
end;
procedureTFormTest.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Formmain.Edit1.Clear;
Formmain.Edit2.Clear;
Formmain.ComboSex.ItemIndex:=-1;
Formmain.ComboAge.ItemIndex:=-1;
formmain.Show;
end;
procedureTFormTest.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if nomer
ifmessagedlg('Прекратитьтестирование?',mtcustom,[mbyes,mbno],0)=mrnothen
canclose:=false;
end;
procedureTFormTest.BFinishClick(Sender: TObject);
begin
close;
end;
procedureTFormTest.FormHide(Sender: TObject);
begin
memo1.Lines.LoadFromFile('memo\main.txt');
RadioGroup1.Visible:=false;
end;
end.
ТЮМЕНСКИЙГОСУДАРСВЕННЫЙКОЛЛЕДЖ СВЯЗИ,
ИНФОРМАТИКИИ УПРАВЛЕНИЯ
РАЗРАБОТКАПРИЛОЖЕНИЯ«МЕТОДИКАМНОГОФАКТОРНОГОИССЛЕДОВАНИЯЛИЧНОСТИ Р.КЕТТЕЛЛА»
Курсовойпроект
Тюмень 2003
ТЮМЕНСКИЙГОСУДАРСВЕННЫЙКОЛЛЕДЖ СВЯЗИ,
ИНФОРМАТИКИИ УПРАВЛЕНИЯ
отделение:информатикии вычислительнойтехники
РАЗРАБОТКАПРИЛОЖЕНИЯ«МЕТОДИКАМНОГОФАКТОРНОГОИССЛЕДОВАНИЯЛИЧНОСТИ Р.КЕТТЕЛЛА»
Курсовойпроект
Выполнил:
Руководитель:
Зав. Отделения
Дата допускак защите
«__» __________ 2003
Тюмень 2003