Реферат: Объектно-ориентированное программирование

Министерствонауки и образования Украины

Одесскийнациональный политехнический университет

Кафедрасистемного программного обеспечения

Объяснительнаязаписка к курсовой работе

с дисциплины «Объектно-ориентированноепрограммирование»

Группа:АС-071

Выполнил:Розгон А. С.

Приняла:Кунгурцев А. Б.

Одесса 2009г.


Аннотация

Данная курсовая работазаключалась в написании учебной системы на языке программирования Java, что ибыло сделано. Учебная система представляет собой совокупность пяти основныхклассов и около десятка вспомогательных. Она предполагает регистрацию, выдачуучебного материала, проверку знаний, способы выдачи и принятия информации,детально описанные в задании для каждого варианта отдельно. Также имеются общиехарактеристики системы для всех вариантов, и они являются базовыми,индивидуальные только расширяют их. Именно это повлияло на распределениефункций по классам. На основе задания и программы была составлена диаграммаклассов, иллюстрирующая все аспекты вышеперечисленного, и поэтому была распечатанаотдельном листе формата А1. В данной пояснительной записке указана инструкцияиспользования, некоторые особенности поведения программы, приведены коды всехклассов и файлов, а также имеется объяснение к диаграмме классов на А1.


Содержание

1.   Задание

2.   Анализтребований

3.   Структурыклассов

4.   Кодыклассов

5.   Структурафайлов

6.   Инструкцияпользователя и контрольный пример

Список использованной литературы


1. Задание

Завдання №8.

Учбовий матеріал– функції з параметрами-масивами мови С++.

Треба реалізуватинаступні вимоги до програмних класів:1.4, 2.1, 3.6, 4.1, 5.4

Навчальнапрограма повинна складатися з наступних класів.

1.Класпредставлення навчального матеріалу.

Клас обов’язково реалізує наступні функції.

Читаннянавчального матеріалу з файла.

Надання студентупорції навчального матеріалу.

Перехід донаступної порції матеріалу.

Клас додатковоможе реалізувати наступні функції відповідно до конкретного завдання докурсової роботи.

Матеріалподається за схемою, що задається викладачем для кожного конкретного випадку.

2.Класконтролю знань студента.

Клас обов’язково реалізує наступні функції.

Читання завданнядо контролю з файлу.

Читання еталоннихвідповідей з файлу.

Надання студентузавдань до контролю знань.

Оцінювання кожноївідповіді.

Клас додатковоможе реалізувати наступні функції відповідно до конкретного завдання докурсової роботи.

Завдання типу«вибір альтернативної відповіді».

3.Класреєстрації студента та видачі підсумкового документу.

Клас обов’язково реалізує наступні функції.

Приймає дані щодостудента.

Видає підсумковийдокумент.

Клас додатковоможе реалізувати наступні функції відповідно до конкретного завдання докурсової роботи.

Підсумковийдокумент містить загальний час навчання.

4.Класвведення учбового матеріалу, контрольних завдань, еталонів відповідей та іншоїінформації.

Клас обов’язково реалізує наступні функції.

Введення учбовогоматеріалу у форматі, що задано іншими пунктами завдання. Введення контрольнихзавдань у форматі, що задано іншими пунктами завдання.Введення еталоніввідповідей у форматі, що задано іншими пунктами завдання.

Клас додатковоможе реалізувати наступні функції відповідно до конкретного завдання докурсової роботи.

Клас приймає данітільки у діалоговому режимі.

5.Класконтролю за ходом навчального процесу викладачем.

Клас обов’язково реалізує наступні функції.

Переглядрезультатів навчання для кожного студента.

Клас додатковоможе реалізувати наступні функції відповідно до конкретного завдання докурсової роботи.

Отримання данихщодо тем, які успішно пройшов конкретний студент.

Завдання накурсову роботу видається на початку 3 семестру.

Докладний змісткурсової роботи характеризується типовим завданням.

2. Анализтренований:

— Очевидно, что нужно ввести два типапользователя: студент и

преподаватель, так как ихфункции и возможности граничат и

конфликтуют.

— Система должнасодержать пять главных классов и несколько

второстепенных;

— Система должнавыполнять все пункты задания;


3. Структуры классов

На диаграмме классов,приведенной отдельно от объяснительной записке на А1, мы можем видетьпоочередность вызова классов, их взаимосвязи, функции и переменные, поэтомудальше описаны детали того, что мы увидели:

1.        Class Main –чтобы работать с системой, программа должна считывать с определенных файлов определенныеданные(а именно файлы Control.txt Answers.txt,указанные в задании, но сначала они должны быть записаны, что и реализует этоткласс. Помимо этого этот класс вызывает класс, отвечающий за регистрацию – ButtonFrame11. Все переменные этого класса – строки,которые записываются в выше перечисленные классы, а функция writeData () – этореализует.

2.        ClassButtonFrame11 – класс, отвечающий за правильное расположения окна регистрации ивызов самого класса регистрации – ButtonPanel11.

3.        Class ButtonPunel11 – класс, отвечающий зарегистрацию, вход в систему и авторизацию. Содержит в себе элементы окнарегистрации и внутренний класс ColorAction11, который отвечает за получение и обработку данных, полученных отпользователя. В зависимости от этого он может вызвать, а может и не вызватькласс ButtonFrame. Единственный метод этого класса – ActionPerformed () –отвечает за считывание данных, сравнения их с существующими, создания или несоздания различных файлов в различных ситуациях.

4.        Class ButtonFrame – класс, содержащий в себе элементы главного окна, отвечающийза распределения возможностей между студентом и преподавателем, отвечающий заправильное расположение главного окна. В нем имеется встроенный класс ColorAction – отвечающий за идентификациюдействия, который вызывает пользователь. И в зависимости от этого может вызватьследующие классы: JFrame1, JFrame2, CheckBoxFrame, MyTimer, MyTimer1.

5.        Class JFrame1 – это класс, который отвечает за расположения окначастичного вывода материала. Его главная задача – вызов класса ButtonPanel1.

6.        Class ButtonPanel1 – класс, содержащий все элементыокна, и отвечающий за чтение и вывод информации на экран. Для этого он имеетфункцию readData () – отвечающую за чтение, и встроенный класс – Color1Action – отвечающий за преобразования наэкране, что, в свою очередь, осуществляет функция actionPefrormed ().

7.        Class JFrame2 – это класс, который отвечает за расположения окнаизменение порядка вывода материала. Его главная задача – вызов класса ButtonPanel2.

8.        Class ButtonPanel2 – – класс, содержащий все элементыокна, и отвечающий за принятие и обработку информации, введенной пользователем.Для этого он имеет функцию getPrevios() – отвечающую за преобразование информации, и функцию actionPefrormed (), которая отвечает за считывание.

9.        Class CheckBoxFrame – это класс, содержащий все элементыи свойства окна тестирование знаний, который отвечает за вывод информации изфайла на экран, принятия информации пользователя, формулирования и выводрезультатов на экран, а также их последующая запись в файл. ФункцияaddRadioButton () – отвечает за добавления кнопки и элементов идентификации.Функция actionPerformed () – отвечает за чтение и сравнениеинформаций пользователя и конкретного задания.

10.     Class MyTimer –это класс, отвечающий за выход из системы и вывод на экран результатов работысистемы, для чего в нем предусмотрена функция readData () – для чтенияинформации из файла, а также функция actionPerformed () – для выхода с системы.

11.     Class MyTimer1 –класс, отвечающий за те же функции, что и класс MyTimer, содержащий те жеэлементы, но имеется существенное исключение: MyTimer – выдавал информацию отекущем клиенте, а класс MyTimer1 – выдает информацию о любом студенте.

12.     Class Device – отвечает за первоначальную запись и чтениеэлементов в файле, так как они являются объектами класса, это реализует функцииreadData () и writeData (), а доступ к элементам классафункция getName ().

4. Кодыклассов

packagejavaapplication20;

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.*;

importjavax.swing.event.*;

importjava.io.*;

importjava.util.*;

importjava.text.*;

importjava.net.*;

importjava.lang.reflect.*;

public classMain

{

public staticvoid main(String[] args)throws IOException

{

DataInputStreaminData = new DataInputStream(System.in);

String T0=«Оценитеутверждение: массив в С++ никогда не передается по значению»;

String T1=«Верно ли,что размер массива важен при объявлении параматра?»;

StringT2=«Действительно ли, что указатель указывает на нулевой элемент массива,при передачи массива»;

String T3=«Оценитеутверждение: изменение значения аргумента внутри функции затрагивает сампереданный объект и его локальную копию »;

String T4=«Верно ли,размер массива не является частью типа параметра »;

StringT5=«Действительно ли, функция знает реальный размер передаваемогомассива?»;

String T6=«Правдали, что в конце каждого массива имеется, который указывает на конецмассива»;

String T7=«Оценитеутверждение: другой способ сообщить функции размер массива-параметра – объявитьпараметр как ссылку »;

String T8=«Верно ли,что использование абстрактный контейнерный тип — это один из способов полученияразмера передаваемого массива»;

String T9=«Правдали, что параметры шаблона заключаются в круглые скобки»;

StringT10=«3»;

StringT11=«2»;

StringT12=«3»;

StringT13=«1»;

StringT14=«3»;

StringT15=«2»;

StringT16=«2»;

StringT17=«3»;

StringT18=«3»;

StringT19=«2»;

try{

FileOutputStreamOS=new FileOutputStream (new File(«C:\\USER\\Control.txt»));

DataOutputStreamods = new DataOutputStream (OS);

ods.writeUTF(T0);

ods.writeUTF(T1);

ods.writeUTF(T2);

ods.writeUTF(T3);

ods.writeUTF(T4);

ods.writeUTF(T5);

ods.writeUTF(T6);

ods.writeUTF(T7);

ods.writeUTF(T8);

ods.writeUTF(T9);

ods.close();

FileOutputStreamOS1=new FileOutputStream (new File(«C:\\USER\\Answers.txt»));

DataOutputStreamods1 = new DataOutputStream (OS1);

ods1.writeUTF(T10);

ods1.writeUTF(T11);

ods1.writeUTF(T12);

ods1.writeUTF(T13);

ods1.writeUTF(T14);

ods1.writeUTF(T15);

ods1.writeUTF(T16);

ods1.writeUTF(T17);

ods1.writeUTF(T18);

ods1.writeUTF(T19);

ods1.close();

}

catch(IOException e)

{

System.out.print(«Cannot read file55555»+e);

}

ButtonFrame11frame1 = new ButtonFrame11 ();

frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame1.setVisible(true);

Device[] staff= new Device[10];

staff[0] = newDevice(«Массив в С++ никогда не передается по значению, а только какуказатель на его первый, точнее нулевой, элемент»);

staff[1] = newDevice(«Размер массива неважен при объявлении параметра»);

staff[2] = newDevice(«Передача массивов как указателей имеет следующиеособенности:»);

staff[3] = newDevice(«изменение значения аргумента внутри функции затрагивает сампереданный объект, а не его локальную копию. Если такое поведение нежелательно,программист должен позаботиться о сохранении исходного значения. Можно такжепри объявлении функции указать, что она не должна изменять значение параметра,объявив этот параметр константой: „);

staff[4] = newDevice(“размер массива не является частью типа параметра. Поэтому функцияне знает реального размера передаваемого массива. Компилятор тоже не может этопроверить»);

staff[5] = newDevice(«При проверке типов параметров компилятор способен распознать, чтов обоих случаях тип аргумента int* соответствует объявлению функции. Однакоконтроль за тем, не является ли аргумент массивом, не производится.»);

staff[6] = newDevice(«По принятому соглашению C-строка является массивом символов,последний элемент которого равен нулю. Во всех остальных случаях при передачемассива в качестве параметра необходимо указывать его размер. Это относится и кмассивам символов, внутри которых встречается 0. Обычно для такого указанияиспользуют дополнительный параметр функции.»);

staff[7] = newDevice(«Другой способ сообщить функции размер массива-параметра – объявитьпараметр как ссылку. В этом случае размер становится частью типа, и компиляторможет проверить аргумент в полной мере.»);

staff[8] = newDevice(«Еще один способ получить размер переданного массива в функции –использовать абстрактный контейнерный тип. (Такие типы были представлены вглаве 6. В следующем подразделе мы поговорим об этом подробнее»);

staff[9] = newDevice(«Параметры шаблона заключаются в угловые скобки. Ключевое словоclass означает, что идентификатор Type служит именем параметра, приконкретизации шаблона функции putValues() он заменяется на реальный тип – int,double, string и т.д. (В главе 10 мы продолжим разговор о шаблонах функций»);

Device[]staff3 = new Device[10];

staff3[0] =new Device(«Передача массивов в С++»);

staff3[1] =new Device(«Размер массива „);

staff3[2] = newDevice(“Передача массивов как указателей имеет следующиеособенности...»);

staff3[3] =new Device(«Свойство 1»);

staff3[4] =new Device(«Свойство 2»);

staff3[5] = newDevice(«Расмотрение примера»);

staff3[6] = newDevice(«Дополнительный параметер функции»);

staff3[7] = newDevice(«Объявление параметра как ссылку»);

staff3[8] = newDevice(«Абстрактный контейнерный тип»);

staff3[9] =new Device(«Шаблоны»);

try

{

PrintWriterout = new PrintWriter( new FileWriter(«device.dat»));

writeData(staff,out);

out.close();

PrintWriterout1 = new PrintWriter( new FileWriter(«device1.dat»));

writeData(staff3,out1);

out1.close();

}

catch(IOExceptionexception){

exception.printStackTrace();

}

}

static voidwriteData(Device[] e, PrintWriter out)

throwsIOException

{

out.println(e.length);

for(inti=0;i<e.length;i++)

e[i].writeData(out);

}

}

classButtonFrame extends JFrame

{

publicButtonFrame()

{

Toolkit kit =Toolkit.getDefaultToolkit();

DimensionscreenSize = kit.getScreenSize();

intscreenHeight = screenSize.height;

intscreenWidth = screenSize.width;

setSize(screenWidth/2,screenHeight/2);

setLocation(screenWidth/4,screenHeight/4);

Image img =kit.getImage(«icon.gif»);

setIconImage(img);

setTitle(«CenteredFrame»);

ContainercontantPane = getContentPane();

JMenuBarmenuBar = new JMenuBar();

JMenu stMenu =new JMenu(«Студент»);

JMenuItemWorkSpace = new JMenuItem(«Просмотреть материал»,newImageIcon(«page_bookmark.gif»));

stMenu.add(WorkSpace);

menuBar.add(stMenu);

JButtonyellowButton = new JButton(«WorkSpace»);

JButtongreenButton = new JButton(«I_want_to_see»);

JButtonblueButton = new JButton(«I am a teacher»);

JButtonredButton = new JButton(«Check_Knowlarge»);

JButtonExitButton = new JButton(«Exit»);

JPanel wer=new JPanel();

wer.add(yellowButton);

wer.add(blueButton);

wer.add(redButton);

wer.add(ExitButton);

wer.add(greenButton);

//contantPane.add(wer,BorderLayout.SOUTH);

contantPane.add(menuBar,BorderLayout.NORTH);

ColorActionyellowAction = new ColorAction(2);

ColorActionblueAction = new ColorAction(3);

ColorActionredAction = new ColorAction(4);

ColorActionExitAction = new ColorAction(5);

ColorActiongreenAction = new ColorAction(6);

yellowButton.addActionListener(yellowAction);

blueButton.addActionListener(blueAction);

redButton.addActionListener(redAction);

ExitButton.addActionListener(ExitAction);

greenButton.addActionListener(greenAction);

WorkSpace.addActionListener(yellowAction);

JMenuItemCheck = new JMenuItem(«Проверить знания»,newImageIcon(«icon_security.gif»));

stMenu.add(Check);

Check.addActionListener(redAction);

JMenuItem Exit= new JMenuItem(«Выход»,newImageIcon(«action_stop.gif»));

stMenu.add(Exit);

Exit.addActionListener(ExitAction);

JMenu prMenu =new JMenu(«Преподаватель»);

JMenuItemteacher = new JMenuItem(«Изменить»,newImageIcon(«page_down.gif»));

prMenu.add(teacher);

teacher.addActionListener(blueAction);

JMenuItemteacher1 = new JMenuItem(«Посмотреть»,new ImageIcon(«icon_world_dynamic.gif»));

prMenu.add(teacher1);

teacher1.addActionListener(greenAction);

menuBar.add(prMenu);

try

{

FileInputStreamis = new

FileInputStream(new

File(«C:\\USER\\teacher.txt»));

DataInputStreamids = new DataInputStream(is);

StringS2=ids.readUTF();

n=Integer.parseInt(S2);

}

catch(IOExceptionexception){

System.out.println(«bgbvhgfj»);

}

if(n==0)

{

teacher.setEnabled(false);

teacher1.setEnabled(false);

System.out.println(n);

}

else

{

Check.setEnabled(false);

Exit.setEnabled(false);

System.out.println(n);

}

}

private classColorAction implements ActionListener

{

publicColorAction(int c)

{

ccc=c;

}

public voidactionPerformed(ActionEvent event)

{

if(ccc==2)

{

JFrame1 frame2= new JFrame1 ();

frame2.setVisible(true);

}

if(ccc==3)

{

JFrame2 frame3= new JFrame2 ();

frame3.setVisible(true);

}

if(ccc==4)

{

CheckBoxFrameframe3 = new CheckBoxFrame();

frame3.setVisible(true);

}

if(ccc==5)

{

MyTimer frame3= new MyTimer();

frame3.setVisible(true);

}

if(ccc==6)

{

MyTimer1frame3 = new MyTimer1();

frame3.setVisible(true);

}

}

private intccc;

}

private intn=0;

}

class MyTimerextends JFrame

{

publicMyTimer()

{

setSize(650,350);

setTitle(«Youranswer»);

try

{

FileInputStreamis = new

FileInputStream(new

File(«C:\\USER\\NOW.txt»));

DataInputStreamids = new DataInputStream(is);

S2=ids.readUTF();

GregorianCalendard = new GregorianCalendar();

intyear=d.get(Calendar.YEAR);

intmouth=d.get(Calendar.MONTH);

intday=d.get(Calendar.DAY_OF_MONTH);

inthour=d.get(Calendar.HOUR);

intminute=d.get(Calendar.MINUTE);

intseconds=d.get(Calendar.SECOND);

FileInputStreamis1 = new

FileInputStream(new

File(«C:\\USER\\Time.txt»));

DataInputStreamids1 = new DataInputStream(is1);

StringS22=ids1.readUTF();

intyear_0=Integer.parseInt(S22);

StringS33=ids1.readUTF();

intmouth_0=Integer.parseInt(S33);

StringS44=ids1.readUTF();

intday_0=Integer.parseInt(S44);

StringS55=ids1.readUTF();

inthour_0=Integer.parseInt(S55);

StringS66=ids1.readUTF();

intminute_0=Integer.parseInt(S66);

StringS77=ids1.readUTF();

intseconds_0=Integer.parseInt(S77);

if(seconds<seconds_0)

{

seconds_1=seconds-seconds_0+60;

minute=minute-1;

}

else

{

seconds_1=seconds-seconds_0;

}

if(minute<minute_0)

{

minute_1=minute-minute_0+60;

hour=hour-1;

}

else

{

minute_1=minute-minute_0;

}

if(hour<hour_0)

{

hour_1=hour-hour_0+24;

day=day-1;

}

else

{

hour_1=hour-hour_0;

}

if(day<day_0)

{

if(mouth==0||mouth==2||mouth==4||mouth==6||mouth==8||mouth==10)

g=31;

if(mouth==3||mouth==5||mouth==7||mouth==9||mouth==11)

g=30;

if(mouth==1)

g=28;

if(mouth==1&& year==2012)

g=29;

day_1=day-day_0+g;

mouth=mouth-1;

}

else

{

day_1=day-day_0;

}

if(mouth<mouth_0)

{

mouth_1=mouth- mouth_0+12;

year=year-1;

}

else

{

mouth_1=mouth- mouth_0;

}

year_1=year-year_0;

FileInputStreamis12 = new

FileInputStream(new

File(«C:\\Student\\»+S2+".txt"));

ids13 = newDataInputStream(is12);

StringE=ids13.readUTF();

intf=Integer.parseInt(E);

df=newDevice[f];

m1=new int[f];

FileInputStreamis121 = new

FileInputStream(new

File(«C:\\Student1\\»+S2+".txt"));

ids131 = newDataInputStream(is121);

for(intr123=0;r123<f;r123++)

{

StringE1=ids131.readUTF();

intf1=Integer.parseInt(E1);

m1[r123]=f1;

}

BufferedReaderin = new BufferedReader(new FileReader(«device1.dat»));

newStaff1=readData(in);

in.close();

for(intg1=0;g1<f;g1++)

{

r3=m1[g1];

df[r34]=newStaff1[r3];

r34++;

}

label9= newJLabel(«FFF»);

for(intg1=0;g1<f;g1++)

{

Stringrrr=df[g1].getName();

hhh=hhh+"<br>"+rrr;

}

label9.setText("<html><br>Вы правильно ответили на следующие темы(это — "+(f*10)+"%)<br>"+hhh+"</html>");

ContainercontentPane = getContentPane ();

JPanel panel =new JPanel();

JPanel panel1= new JPanel();

label = newJLabel («Вниманиe „+S2+“, вы прошли тестирование»);

label1 = new JLabel(«Ваше время пребывания:»);

label2 = newJLabel (year_1+" лет ");

label3 = newJLabel (mouth_1+" месяцев ");

label4 = newJLabel (day_1+" дней ");

label5 = newJLabel (hour_1+" часов ");

label6 = newJLabel (minute_1+" минут ");

label7 = newJLabel (seconds_1+" секунд ");

contentPane.add(label,BorderLayout.NORTH);

panel1.add(label1);

panel1.add(label2);

panel1.add(label3);

panel1.add(label4);

panel1.add(label5);

panel1.add(label6);

panel1.add(label7);

panel1.add(label9);

replace2 = newJButton(«OK»);

panel.add(replace2);

contentPane.add(panel,BorderLayout.SOUTH);

contentPane.add(panel1,BorderLayout.CENTER);

}

catch(IOException e)

{

System.out.print(«Cannot read file66666»+e);

}

replace2.addActionListener(newActionListener(){

public voidactionPerformed(ActionEvent event2)

{

System.exit(0);

}

});

}

private JLabellabel;

private JLabellabel1;

private JLabellabel2;

private JLabellabel3;

private JLabellabel4;

private JLabellabel5;

private JLabellabel6;

private JLabellabel7;

private JLabellabel9;

privateJButton replace2;

private StringS2;

private Stringhhh=new String("");

private intseconds_1;

private intminute_1;

private inthour_1;

private intday_1;

private intmouth_1;

private intyear_1;

private int g;

private intr34=0;

private intr3=0;

privateDataInputStream ids13;

private Device[] df;

private int []m1;

privateDataInputStream ids131;

private Device[] newStaff1=new Device[10];

staticDevice[] readData(BufferedReader in)

throwsIOException

{

int n =Integer.parseInt(in.readLine());

Device []e=new Device[n];

for(inti=0;i<n;i++)

{

e[i] = newDevice();

e[i].readData(in);

}

return e;

}

}

class MyTimer1extends JFrame

{

publicMyTimer1()

{

setSize(650,350);

setTitle(«Hisanswer»);

try

{

S2=JOptionPane.showInputDialog(«Введителогин искомого студента»);

FileInputStreamis12 = new

FileInputStream(new

File(«C:\\Student\\»+S2+".txt"));

ids13 = newDataInputStream(is12);

StringE=ids13.readUTF();

intf=Integer.parseInt(E);

df=newDevice[f];

m1=new int[f];

FileInputStreamis121 = new

FileInputStream(new

File(«C:\\Student1\\»+S2+".txt"));

ids131 = newDataInputStream(is121);

for(intr123=0;r123<f;r123++)

{

StringE1=ids131.readUTF();

intf1=Integer.parseInt(E1);

m1[r123]=f1;

}

BufferedReaderin = new BufferedReader(new FileReader(«device1.dat»));

newStaff1=readData(in);

in.close();

for(intg1=0;g1<f;g1++)

{

r3=m1[g1];

df[r34]=newStaff1[r3];

r34++;

}

label9= newJLabel(«FFF»);

for(intg1=0;g1<f;g1++)

{

Stringrrr=df[g1].getName();

hhh=hhh+"<br>"+rrr;

}

label9.setText("<html><br>Он правильно ответили на следующие темы(это — "+(f*10)+"%)<br>"+hhh+"</html>");

ContainercontentPane = getContentPane ();

JPanel panel =new JPanel();

JPanel panel1= new JPanel();

panel.add(label9);

replace2 = newJButton(«OK»);

panel1.add(replace2);

contentPane.add(panel,BorderLayout.CENTER);

contentPane.add(panel1,BorderLayout.SOUTH);

}

catch(IOException e)

{

System.out.print(«Cannot read file66666»+e);

}

replace2.addActionListener(newActionListener(){

public voidactionPerformed(ActionEvent event2)

{

System.exit(0);

}

});

}

private JLabellabel9;

privateJButton replace2;

private StringS2;

private Stringhhh=new String("");

private intr34=0;

private intr3=0;

privateDataInputStream ids13;

private Device[] df;

private int []m1;

privateDataInputStream ids131;

private Device[] newStaff1=new Device[10];

staticDevice[] readData(BufferedReader in)

throwsIOException

{

int n =Integer.parseInt(in.readLine());

Device []e=new Device[n];

for(inti=0;i<n;i++)

{

e[i] = newDevice();

e[i].readData(in);

}

return e;

}

}

classButtonFrame11 extends JFrame

{

publicButtonFrame11()

{

Toolkit kit =Toolkit.getDefaultToolkit();

DimensionscreenSize = kit.getScreenSize();

intscreenHeight = screenSize.height;

intscreenWidth = screenSize.width;

setSize(screenWidth/3,screenHeight/5);

setLocation(screenWidth/4,screenHeight/4);

Image img =kit.getImage(«icon.gif»);

setIconImage(img);

setTitle(«CenteredFrame»);

ButtonPanel11panel = new ButtonPanel11();

add(panel);

}

}

classButtonPanel11 extends JPanel

{

publicButtonPanel11()

{

JButtonBeginButton = new JButton(«Begin»);

JButtonReButton = new JButton(«Registration»);

Password = newJPasswordField("",6);

login = newJTextField(15);

label1 = newJLabel(«Please,input your name»);

label2 = newJLabel(«Please,input your password»);

JPanel panel =new JPanel();

panel.setLayout(newGridLayout(2,2));

panel.add(label1);

panel.add(login);

panel.add(label2);

panel.add(Password);

add(panel,BorderLayout.CENTER);

JPanel panel1= new JPanel();

panel1.add(BeginButton);

panel1.add(ReButton);

add(panel1,BorderLayout.SOUTH);

ColorAction11BeginAction = new ColorAction11(2);

ColorAction11ReAction = new ColorAction11(3);

BeginButton.addActionListener(BeginAction);

ReButton.addActionListener(ReAction);

}

private classColorAction11 implements ActionListener

{

publicColorAction11(int c)

{

ccc=c;

t=0;

S1=newString(«0»);

S2=newString(«1»);

S3=newString(«2»);

S4=newString(«3»);

S5=newString(«4»);

S6=newString(«5»);

S7=newString(«6»);

S8=newString(«7»);

S9=newString(«8»);

S10=newString(«9»);

}

public voidactionPerformed(ActionEvent event)

{

if(ccc==2)

{

S13 =login.getText();

pass =Password.getPassword();

S14=newString(pass,0,6);

try

{

FileInputStreamis = new

FileInputStream(new

File(«C:\\RGR\\»+S13+".txt"));

DataInputStreamids = new DataInputStream(is);

StringS15=ids.readUTF();

if(S15.length() == S13.length())

{

if(S13.regionMatches(0,S15, 0, S15.length()))

{

String S16 =ids.readUTF();

if(S13.regionMatches(0,S11, 0, S11.length()))

{

t1=1;

}

if(S14.length() == S16.length())

{

if(S14.regionMatches(0,S16, 0, S16.length()))

{

if(S14.regionMatches(0,r, 0, r.length()))

{

t1=2;

}

FileOutputStreamOS=new FileOutputStream (new File(«C:\\USER\\NOW.txt»));

DataOutputStreamods = new DataOutputStream (OS);

ods.writeUTF(S13);

ods.close();

GregorianCalendard = new GregorianCalendar();

intyear=d.get(Calendar.YEAR);

intmouth=d.get(Calendar.MONTH);

intday=d.get(Calendar.DAY_OF_MONTH);

inthour=d.get(Calendar.HOUR);

intminute=d.get(Calendar.MINUTE);

intseconds=d.get(Calendar.SECOND);

StringS111=""+year;

StringS122=""+mouth;

StringS133=""+day;

StringS144=""+hour;

StringS155=""+minute;

StringS166=""+seconds;

FileOutputStreamOS2=new FileOutputStream (new File(«C:\\USER\\Time.txt»));

DataOutputStreamods2 = new DataOutputStream (OS2);

ods2.writeUTF(S111);

ods2.writeUTF(S122);

ods2.writeUTF(S133);

ods2.writeUTF(S144);

ods2.writeUTF(S155);

ods2.writeUTF(S166);

ods2.close();

if(t1==2)

{

FileOutputStreamOS6=new FileOutputStream (new File(«C:\\USER\\teacher.txt»));

DataOutputStreamods6 = new DataOutputStream (OS6);

ods6.writeUTF(«1»);

ods6.close();

}

else

{

FileOutputStreamOS6=new FileOutputStream (new File(«C:\\USER\\teacher.txt»));

DataOutputStreamods6 = new DataOutputStream (OS6);

ods6.writeUTF(«0»);

ods6.close();

}

ButtonFrameframe = new ButtonFrame ();

frame.setVisible(true);

}

}

}

}

else

{

System.out.print(«Youfull!»);

}

}

catch(IOException e)

{

System.out.print(«Cannot read file77777»+e);

}

}

if(ccc==3)

{

try{

t++;

S13 =login.getText();

System.out.println(S13);

pass =Password.getPassword();

System.out.println(pass);

S14=newString(pass,0,6);

File file =new File(«C:\\RGR\\»+S13+".txt");

File file1 =new File(«C:\\KURS\\»+S13+".txt");

File file2 =new File(«C:\\Student\\»+S13+".txt");

File file3 =new File(«C:\\Student1\\»+S13+".txt");

try

{

file.createNewFile();

file1.createNewFile();

file2.createNewFile();

file3.createNewFile();

}

catch(IOExceptione)

{

System.out.println(«Cannot create new file»+e);

}

FileOutputStreamOS=new FileOutputStream (new File(«C:\\RGR\\»+S13+".txt"));

DataOutputStreamods = new DataOutputStream (OS);

ods.writeUTF(S13);

ods.writeUTF(S14);

ods.close();

FileOutputStreamOS1=new FileOutputStream (newFile(«C:\\KURS\\»+S13+".txt"));

DataOutputStreamods1 = new DataOutputStream (OS1);

ods1.writeUTF(S1);

ods1.writeUTF(S2);

ods1.writeUTF(S3);

ods1.writeUTF(S4);

ods1.writeUTF(S5);

ods1.writeUTF(S6);

ods1.writeUTF(S7);

ods1.writeUTF(S8);

ods1.writeUTF(S9);

ods1.writeUTF(S10);

ods1.close();

}

catch(IOExceptione)

{

System.out.println(«Cannot write file»+e);

}

}

}

private intccc;

private char[]pass = new char[20];

private StringS13;

private StringS14;

privateboolean dd;

private int t;

private intt1=0;

private Stringr=«111111»;

private StringS1;

private StringS2;

private StringS3;

private StringS4;

private StringS5;

private StringS6;

private StringS7;

private StringS8;

private StringS9;

private StringS10;

private StringS11=«lector»;

}

privateJPasswordField Password;

privateJTextField login;

private JLabellabel1;

private JLabellabel2;

}

classCheckBoxFrame extends JFrame

{

publicCheckBoxFrame()

{

setTitle(«Test»);

setSize(600,200);

ContainercontentPane = getContentPane ();

JPanel panel =new JPanel ();

label = new JLabel(«Внимания, вы проходите тестирование — не дурачится и внимательновчитывайтесь в вопрос!»);

contentPane.add(label,BorderLayout.NORTH);

replace1=newJButton(«Finish»);

replace = newJButton(«Next»);

panel.add(replace);

panel.add(replace1);

contentPane.add(panel,BorderLayout.SOUTH);

try

{

FileInputStreamis45 = new

FileInputStream(new

File(«C:\\USER\\NOW.txt»));

DataInputStreamids45 = new DataInputStream(is45);

S2=ids45.readUTF();

FileInputStreamis = new

FileInputStream(new

File(«C:\\USER\\Control.txt»));

ids = newDataInputStream(is);

}

catch(IOExceptione)

{

System.out.print(«Cannot read file888888»+e);

}

replace1.addActionListener(newActionListener(){

public voidactionPerformed(ActionEvent event2)

{

label.setText(«Вашрезультат — »+fff*10+"% угаданых вопросов от общего количествавопросов");

}

});

replace.addActionListener(newActionListener(){

public voidactionPerformed(ActionEvent event2)

{

w=0;

c=0;

try

{

if(y<10)

{

S3=ids.readUTF();

label.setText("<html>Внимания,вы проходите тестирование — не дурачится и внимательно вчитывайтесь ввопрос!<br>"+S3);

}

}

catch(IOExceptione)

{

System.out.print(«Cannot read file5555»+e);

}

}

});

buttonPanel =new JPanel();

group = newButtonGroup ();

addRadioButton(«Дa»,3);

addRadioButton(«Частично»,1);

addRadioButton(«Нет»,2);

addRadioButton(«Другой ответ»,0);

contentPane.add(buttonPanel,BorderLayout.CENTER);

try

{

FileInputStreamis4 = new

FileInputStream(new

File(«C:\\USER\\Answers.txt»));

ids4 = newDataInputStream(is4);

}

catch(IOExceptione)

{

System.out.print(«Cannot read file4444»+e);

}

}

public voidaddRadioButton(String name, final int size)

{

booleanselected = size==mode;

JRadioButtonbutton = new JRadioButton(name,selected);

group.add(button);

buttonPanel.add(button);

try{

OS=newFileOutputStream (new File(«C:\\Student1\\»+S2+".txt"));

ods = newDataOutputStream (OS);

}

catch(IOException e)

{

System.out.print(«Cannot read file3333»+e);

}

ActionListenerlisterner = new ActionListener()

{

public voidactionPerformed(ActionEvent event1)

{

if(c==0)

{

if(y<10)

{

w++;

if(w==1)

{

try

{

StringS31=ids4.readUTF();

r=Integer.parseInt(S31);

}

catch(IOExceptione)

{

System.out.print(«Cannot read file2222»+e);

}

if(r==size)

{

fff++;

try{

StringX=""+y;

ods.writeUTF(X);

OS1=newFileOutputStream (new File(«C:\\Student\\»+S2+".txt"));

ods1 = newDataOutputStream (OS1);

S3=""+fff;

ods1.writeUTF(S3);

}

catch(IOException e)

{

System.out.print(«Cannot read file111»+e);

}

}

}

}

}

y++;

}

};

button.addActionListener(listerner);

}

private JLabellabel;

private JPanelbuttonPanel;

privateButtonGroup group;

private staticfinal int mode=0;

private intfff=0;

private intr=0;

privateJButton replace;

privateJButton replace1;

private inty=0;

private intc=1;

private StringS3;

private StringS2;

privateDataInputStream ids4 ;

privateDataInputStream ids;

privateFileOutputStream OS;

privateDataOutputStream ods;

privateFileOutputStream OS1;

privateDataOutputStream ods1;

private intw=0;

}

class JFrame1extends JFrame

{

publicJFrame1()

{

setSize(400,300);

ButtonPanel1panel = new ButtonPanel1();

add(panel);

}

}

classButtonPanel2 extends JPanel

{

publicButtonPanel2()

{

S133=JOptionPane.showInputDialog(«Введителогин искомого студента»);

JButton Change= new JButton(«Change»);

m_1=newJTextField(5);

m_2=newJTextField(5);

m_3=newJTextField(5);

m_4=newJTextField(5);

m_5=newJTextField(5);

m_6=newJTextField(5);

m_7=newJTextField(5);

m_8=newJTextField(5);

m_9=newJTextField(5);

m_10=newJTextField(5);

JLabel l = newJLabel(«Please, give me a logical speach, if you already want tochange:»);

JLabel l1 = newJLabel(«Массив в С++: его значение, применение, свойства:»);

JLabel l2 = newJLabel(«Размер передаваемого массива»);

JLabel l3 = newJLabel(«Передача массивов как указателей»);

JLabel l4 = newJLabel(«Преимущества передачи массива как указателя»);

JLabel l5 = newJLabel(«Проблемы связаны с передачой массива...»);

JLabel l6 = newJLabel(«Некоторые особенности поведения компилятора»);

JLabel l7 = newJLabel(«Примеры правильного кода»);

JLabel l8 = newJLabel(«Массив обявленный как ссылка»);

JLabel l9 = newJLabel(«Использование абстрактного контейнера — это плохо?»);

JLabel l10 = newJLabel(«Коечто о шаблонах их работе и многом другом»);

JPanel panel1= new JPanel();

panel1.setLayout(newGridLayout(10,2));

add(l,BorderLayout.NORTH);

panel1.add(l1);

panel1.add(m_1);

panel1.add(l2);

panel1.add(m_2);

panel1.add(l3);

panel1.add(m_3);

panel1.add(l4);

panel1.add(m_4);

panel1.add(l5);

panel1.add(m_5);

panel1. add(l6);

panel1.add(m_6);

panel1.add(l7);

panel1.add(m_7);

panel1.add(l8);

panel1.add(m_8);

panel1.add(l9);

panel1.add(m_9);

panel1.add(l10);

panel1. add(m_10);

add(panel1,BorderLayout.CENTER);

add(Change,BorderLayout.SOUTH);

Change.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event)

{

try{

S2 =m_1.getText();

S3 =m_2.getText();

S4 =m_3.getText();

S5 =m_4.getText();

S6 =m_5.getText();

S7 =m_6.getText();

S8 =m_7.getText();

S9 =m_8.getText();

S10 =m_9.getText();

S11 =m_10.getText();

FileOutputStreamOS=new FileOutputStream (newFile(«C:\\KURS\\»+S133+".txt"));

DataOutputStreamods = new DataOutputStream (OS);

ods.writeUTF(S2);

ods.writeUTF(S3);

ods.writeUTF(S4);

ods.writeUTF(S5);

ods.writeUTF(S6);

ods.writeUTF(S7);

ods.writeUTF(S8);

ods.writeUTF(S9);

ods.writeUTF(S10);

ods.writeUTF(S11);

ods.close();

}

catch(IOExceptione)

{

System.out.print(«Cannot read file99999»+e);

}

}

});

}

publicButtonPanel2(int e)

{

w=e;

m1[0]=0;

m1[1]=1;

m1[2]=2;

m1[3]=3;

m1[4]=4;

m1[5]=5;

m1[6]=6;

m1[7]=7;

m1[8]=8;

m1[9]=9;

}

privateJTextField m_1;

privateJTextField m_2;

privateJTextField m_3;

privateJTextField m_4;

privateJTextField m_5;

privateJTextField m_6;

privateJTextField m_7;

privateJTextField m_8;

privateJTextField m_9;

private JTextFieldm_10;

private StringS1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S133;

protected int[] m1=new int[10];

int w=0;

public int[]getPrivios ()

{

return m1;

}

}

class JFrame2extends JFrame

{

publicJFrame2()

{

setSize(650,325);

ButtonPanel2panel1 = new ButtonPanel2();

add(panel1);

}

}

classButtonPanel1 extends JPanel

{

publicButtonPanel1()

{

JButtonNextButton = new JButton(«Next»);

textArea = newJTextArea(12,35);

textArea.setEditable(false);

textArea.setLineWrap(true);

textArea.setWrapStyleWord(true);

scrollPane =new JScrollPane(textArea);

add(scrollPane,BorderLayout.CENTER);

add(NextButton);

S2 = newString();

try

{

FileInputStreamis = new

FileInputStream(new

File(«C:\\USER\\NOW.txt»));

DataInputStreamids = new DataInputStream(is);

S2=ids.readUTF();

FileInputStreamis1 = new

FileInputStream(new

File(«C:\\KURS\\»+S2+".txt"));

DataInputStreamids1 = new DataInputStream(is1);

StringS30=ids1.readUTF();

StringS31=ids1.readUTF();

String S32=ids1.readUTF();

StringS33=ids1.readUTF();

StringS34=ids1.readUTF();

StringS35=ids1.readUTF();

StringS36=ids1.readUTF();

StringS37=ids1.readUTF();

StringS38=ids1.readUTF();

StringS39=ids1.readUTF();

d1[0]=Integer.parseInt(S30);

d1[1]=Integer.parseInt(S31);

d1[2]=Integer.parseInt(S32);

d1[3]=Integer.parseInt(S33);

d1[4]=Integer.parseInt(S34);

d1[5]=Integer.parseInt(S35);

d1[6]=Integer.parseInt(S36);

d1[7]=Integer.parseInt(S37);

d1[8]=Integer.parseInt(S38);

d1[9]=Integer.parseInt(S39);

}

catch(IOException e)

{

System.out.print(«Cannot read file0000»+e);

}

Color1ActionNextAction = new Color1Action(d1);

NextButton.addActionListener(NextAction);

}

private classColor1Action implements ActionListener

{

publicColor1Action(int[]o)

{

try{

BufferedReaderin = new BufferedReader(new FileReader(«device.dat»));

newStaff=readData(in);

in.close();

}

catch(IOExceptionexception){

exception.printStackTrace();

}

for(inty=0;y<10;y++)

{

m[y]=o[y];

}

}

public voidactionPerformed(ActionEvent event)

{

if(d<10)

{

i=m[d];

d++;

textArea.setText(newStaff[i].getName());

}

}

private intccc1;

private StringS1;

private inti=0;

private intd=0;

private int []m= new int [10];

}

privateJTextArea textArea;

privateJScrollPane scrollPane;

private StringS2;

privateDevice[] newStaff = new Device[10];

private int[]d1= new int[10];

staticDevice[] readData(BufferedReader in)

throwsIOException

{

int n =Integer.parseInt(in.readLine());

Device []e=new Device[n];

for(inti=0;i<n;i++)

{

e[i] = newDevice();

e[i].readData(in);

}

return e;

}

}

class Device

{

private Stringname;

publicDevice() {}

public Device(String n) {

name=n;

}

public Device(Device e){

name=e.name;

}

public StringgetName () {

return name;

}

public voidwriteData(PrintWriter out) throws IOException

{

out.println(name+"|"+"");

}

public voidreadData(BufferedReader in) throws IOException

{

Strings=in.readLine();

StringTokenizert= new StringTokenizer(s,"|");

name=t.nextToken();

}

}

5. Структуры файлов:

Структура файлов даннойсистемы простая:

1.        Она содержитединственный файл, содержащий код программы – Main.

2.        Она использует 5папок вспомогательных файлов, переменного количества файлов в каждой папке.

3.        Папка RGRсодержит файлы типа .txt – названия которых – это логины, а содержащаяся в нихинформация – пароли соответствующих пользователей.

4.        Папка USER –содержит несколько файлов :

— NOW.txt – содержит имяпользователя, присутствующего в системе в данный момент.

— Time.txt – содержит время захода пользователя в систему;

— Control.txt – содержит вопросы тестирования;

— Answers.txt – содержит правильные ответы на вопросы тестирования;

— teacher.txt – содержит 0(если пользователь – учитель) или 1 (еслипользователь – студент).

5.        Папка KURS –содержит файлы последовательности вывода информации на экран для каждогопользователя в отдельности.

6.        Папка Student –содержит номера разделов, на которые студент дал правильный ответ.

7.        Папка Student1 – содержитколичество правильных ответов студента

6. Инструкцияпользователя и контрольный пример:

Все последующие пунктыбудут базироваться на следующих принципах:

1.        Начало каждогопункта – теоретическая часть – это первый пункт инструкции, который даетинформацию: что и почему мы это делаем.

2.        Окончание –практическая часть – это первый пункт примера, который наглядно показываетдействия описанные в теоретической части.

Сделано это было дляудобства пользователя и повышения его восприятия описанной выше информации.

Пункты совместнойинструкции и примера:

1.        Сначала мы должныпройти регистрацию, и не просто пройти, а соблюсти некоторые правила. Если выхотите зарегистрироваться как студент – у вас нет никаких ограничений, кромешестизначного пароля, но если вы хотите зарегистрироваться как преподаватель,то вам придется ввести заданные значения полей логина и пароля, а именно – «lector» и «111111» соответственно. Этонужно, так как программа реализирует функции для студентов и преподавателей, атак как они не могут работать вместе, было решено их распараллелить в выборедоступных им функций. Для стабильной работы программы необходимо наличие хотябы одного студента, поэтому мы сначала зарегистрируемся как студент:


/>

2.        После нажатиякнопки Begin мы войдем в систему как студент ааа:

/>

/>

3.        Как вы видите нарисунке наши действия как преподавателя в профиле студент невозможны, новозможны следующие действия: «Просмотреть материал» –


/>

Как вы видите ничего нетпока мы не нажмем кнопку Next

/>

И таким образом мы можемпросмотреть любое количество материала выложенное на освоение студентами.

4.        «Проверитьзнание»:

/>

Чтобы правильнопродолжить выполнение программы нужно нажать кнопку Next, не нажимая ничегодругого:

/>

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

5.        Наступит момент,когда нажатие кнопки Next не принесет каких-либо изменений в структуре окна,тогда нажмите кнопку Finish и вы получите результат:

/>

6.        Только пройдя всепункты у вас возникает выбор: или повторить пункты 4 и 5 или воспользоватьсяфункцией «Выход»:

/>


При нажатии кнопки ОК вызавершите программу.

7.        Теперь вы зайдитекак преподаватель:

/>

/>

8.        Вы видите, чточасть функций студента прикрыта, но все остальные функции вам доступны:проверяем функцию «Изменить»:

/>

В этом окне вы должныввести логин студента, которому вы хотели бы изменить порядок изложенияматериала:


/>

Причем вы можете ввестилюбое целое число от 0 до 9.

9.        Последняя функция– «Посмотреть»:

/>

При нажатии на кнопку ОКвы выйдите из системы.


Список использованнойлитературы:

1.    Методичні вказівки до курсової роботи«Обєктно-орієнтоване програмування» — Одеса, ОНПУ – 2007 р.;

2.    Кей Хорстман,Гарри Корнел :«Том І. Основы» — Киев: «Вильямс» — 2007 год;

3.    Кей Хорстман,Гарри Корнел :«Том 2. Тонкости програмирования» — Киев: «Вильямс» — 2007год;

еще рефераты
Еще работы по информатике, программированию