Створення навчальної програми для студентів

 
















Обєктно-орієнтоване програмування


1. Складові частини навчальної програми


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

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

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

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

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

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

Читання завдання до контролю з БД.

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

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

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

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

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

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

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

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

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

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

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


2. Постанова задачі


2.1 Уточнення вимог до програмного продукту


Метою курсової роботи є створення навчальної програми для студентів на тему «Наслідування С++». Подання матеріалу відбуватиметься порціями, зчитуючи порції з БД. Буде розроблена сторінка для викладача та студентів та входу їх в систему. Студенти запамятовують власний пароль для постійного користування. Наприкінці кожного читання контролю будуть виведені питання для контролю знань.

Клас який представляє виведення матеріалу повинне за потребою викладача змінювати його зміст.

Курсова робота буде розроблена для того, щоб закріпити знання здобуті при вивченні дисципліни «Обєктно-орієнтоване програмування».

Студент має розробити навчаючу програму.

Навчаюча програма повинна виконувати наступні функції:

реєстрацію студента;

представлення матеріалу до навчання про наслідування у мові програмування С++;

забезпечення контролю знань;

введення та корегування навчального матеріалу;

отримання інформації щодо успіхів студента.

Програма розроблена не тільки для студентів, але й для викладачів. Викладачі з правами адміністратора зможуть перевірити рівень знань студентів, та й дистанційно їх навчати. Всього буде два рівня користувачів: студент, викладач.

Студент має право переглядати навчальний матеріал, і проходити контроль, й отримувати оцінку рівня отриманих знань з переглянутої теми.

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


2.2 Обєктно-орієнтований аналіз, визначення класів та методів


Клас Users

Структура:

public class Users

{class Users {static String student;static String teacher;static String nouser;static String secretPass;static String getStudent()static String getTeacher()static String getNoUser()static boolean isStudent (int status)static boolean isTeacher (int status)static boolean RegisterIsTeacher (String secret)

}

Опис:

Класс users має поля для перевірки та запамятовування користувачів в системі на надання прав.

Призначення:

Зберігання інформації про користувачів та перевіряє їх.

Клас Mysql

Структура:

public class Mysql {Connection connect = null;ResultSet resultSet = null;properties = new Properties();String url = «jdbc:mysql://localhost:3306/»;String dbName = «stud»;String driver = «com.mysql.jdbc. Driver»;String userName = «root»;String password = «123»;void SetPass (String Pass)ResultSet QuerySelect (String query) throws SQLExceptionboolean QueryInsert (String query) throws SQLExceptionboolean PreparedQueryInsert (String query, String theory, String theme) throws SQLExceptionString PreparedQueryInsertID (String query, String theory, String theme) throws SQLExceptionvoid initConnection()static String MD5 (String md5)void close()

}

Опис:

Поля urldb, Name, driver, username, password слугують для зєднання з БД, до приєднуються getри і setри, метод QuerySelect - для виконання запиту вибірки з БД, QueryInsert(), PreparedQueryInsert(), PreparedQueryInsertID() - методи для виконання запиту вставки даних до БД, а також методи встановлення та закриття зєднання з БД.

Призначення:

Зєднання, вибірка та вставка даних до БД.

В для виведення даних використовувались сервлети на мові Java.

Список сер влетів з описанням:

.AddQuestions - виконує додавання нових запитань.

.Addresults - зберігає результати тестування

.AddThemes - виконує додавання тем.

.AddTheorys - додавання нових порцій теорії.

.Login - авторизація користувачів.

.Logout - вихід користувача з системи.

.Questions - виконує виведення тестування.

.Register - реєстрація користувачів.

.Results - виведення результатів.

.Student_List - виводить список студентів.

.Themes_List - виводить список тем.

.Theory - слугує для виводу порцій теорії.


2.3 Загальна схема функціонування системи


Класи обробки дій користвача:, Addresults, AddThemes, AddTheorys, Login, Logout, Questions, Register, Results, Student_List, Themes_List, Theory, Users - класи для обробк даних та занесення даних до БД.


3. Представлення учбового матеріалу, питань та відповідей


Інтерфейс користувача повинен бути якомога зрозумілий: назви не мають двозначне тлумачення, чітко сформульовані та відрізняються один від одної. Інтерфейс викладача має задовольняти таким варіантам використання: обрання навчального матеріалу, обрання навчального контролю, перегляд успіхів кожного студента та зміну користувача. При обранні навчального контролю та матеріалу користувач може обрати та переглянути абсолютний шлях до файлів, а при перегляді успіхів викладач обирає студента зі списку, а не вводить вручну.


4. Бажаний інтерфейс користувача


Інструкція користувача та контрольний приклад

Графічний інтерфейс для роботи з програмою виглядає досить просто. Коли користувач запускає браузер та прописує необхідну адресу перед ним зявляється сторінка «Вхід в систему», яке потрібне для входу в навчальну програму.



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

Інструкція для користувачу «Викладач»

1.Після того як викладач пройде авторизація, потрапляє на с торінку зі списком тем, можна додати нову тему натиснувши на конпку «Добавить тему». На сторінці можна редагувати порції теорії та питання для тестування. Для того, щоб відредагувати теорію треба перейти по посиланню «Теория», а для редагування питань тестування - «Вопросы».



2.Після на тисненненя посилання «Теория» користувач потрапляє на сторінку редагування порцій матеріалу, для редагування старого матеріалу треба клацнути двійним натисканням і зявиться редактор.

.


Для додання матеріалу треба ввести новий матеріал і натиснути кнопку «Сохранить порцию».


.Перейшовши по посиланню «Список студентів» можна потрапити на сторінку зі списком студентів для складання іспиту, тут можливо додавати нового студента, а також продивитися результати кожного.



.Перейшовши по посиланню «Вопросы» потрапляємо на сторінку де потрібно додавати запитання для іспиту. Для вибору правильної відповіді треба натиснути на радіокнопку зліва.


Інструкція користувачу «Студент»

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

.Студент повинен вибрати одну з тем.



2.Потім система перекине його на сторінку з теорією, яка виводить посторінково, якщо студент вже її знає може одразу натиснути «Начать тестирование».


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



4.Після натиснення «Тест окончен» студенту буде висвітлено скільки балів він набрав, на скільки запитань правильно відповів і кількість затраченого часу.



5. Використання програми


Клас для роботи з БДModel;java.sql.*;java.util. Properties;

/**

*

* @author dante

*/class Mysql {Connection connect = null;

//private Statement statement = null;ResultSet resultSet = null;properties = new Properties();String url = «jdbc:mysql://localhost:3306/»; // адрес для связи с БДString dbName = «stud»;String driver = «com.mysql.jdbc. Driver»;String userName = «root»;String password = «123»;void SetURL (String URL) {.url = URL;

}void SetDBName (String DBName) {.dbName = DBName;

}void SetDriver (String Driver) {.driver = Driver;

}void SetUser (String user) {.userName = user;

}void SetPass (String Pass) {.password = Pass;

}

// Метод выполнения запроса на виборкуResultSet QuerySelect (String query) throws SQLException {s = connect.createStatement();.executeQuery («SET NAMES utf8»);.executeQuery(query);rs = s.getResultSet();rs;

}

// Метод выполнения запроса на добавлениеboolean QueryInsert (String query) throws SQLException {s = connect.createStatement();.setProperty («useUnicode», «true»);.setProperty («characterEncoding», «UTF-8»);.executeQuery («SET NAMES utf8»);(s.executeUpdate(query)!= 0) {true;

} else {false;

}

}

// Метод выполения запроса с проверкой на символыboolean PreparedQueryInsert (String query, String theory, String theme) throws SQLException {.setProperty («useUnicode», «true»);.setProperty («characterEncoding», «UTF-8»);s = connect.prepareStatement(query);.setString (1, theory);.setString (2, theme);

// s.executeQuery («SET NAMES utf8»);(s.executeUpdate()!= 0) {true;

} else {false;

}

}

// Вставка по идентификационному номеруString PreparedQueryInsertID (String query, String theory, String theme) throws SQLException {.setProperty («useUnicode», «true»);key = «»;.setProperty («characterEncoding», «UTF-8»);s = connect.createStatement();psmt = null;= connect.prepareStatement (query, psmt.RETURN_GENERATED_KEYS);.setString (1, theory);.setString (2, theme);.executeUpdate();keys = psmt.getGeneratedKeys();.next();= keys.getString(1);

// s.executeQuery («SET NAMES utf8»);key;

}

// Соедиение с БДvoid initConnection() {

//FIRST register and download driver{.registerDriver (new org.gjt.mm.mysql. Driver());

} catch (SQLException e) {.printStackTrace();

}{.forName(driver);

} catch (ClassNotFoundException e) {.printStackTrace();

}

//SECOND Connect to database{prop = new Properties();.setProperty («useUnicode», «false»);.setProperty («characterEncoding», «UTF8»);= DriverManager.getConnection (url + dbName +»? useUnicode=true&characterEncoding=UTF-8», userName, password);

} catch (SQLException e) {.printStackTrace();

}

}

// Хештрование строкиstatic String MD5 (String md5) {{.security. MessageDigest md = java.security. MessageDigest.getInstance («MD5»);[] array = md.digest (md5.getBytes());sb = new StringBuffer();(int i = 0; i < array.length; ++i) {.append (Integer.toHexString((array[i] & 0xFF) | 0x100).substring (1, 3));

}sb.toString();

} catch (java.security. NoSuchAlgorithmException e) {

}null;

// Закрытие с соединения с БДvoid close() {{(resultSet!= null) {.close();

}(connect!= null) {.close();

}

} catch (Exception e) {

}

}

}

Класс для роботи з користувачамиclass Users {static String student = «2»;static String teacher = «1»;static String nouser = «0»;static String secretPass = «teacher»;static String getStudent() {student;

}static String getTeacher() {teacher;

}static String getNoUser() {nouser;

}

// Проверка на студентаstatic boolean isStudent (int status) {(status == Integer.parseInt(student)) {true;

} else {false;

}

}

// Проверка на преподавателяstatic boolean isTeacher (int status) {(status == Integer.parseInt(teacher)) {true;

} else {false;

}

}

// Проверка на регистрацию преподавателяstatic boolean RegisterIsTeacher (String secret) {(secret.equals(secretPass)) {true;

} else {false;

}

}

}

Сервлет додавання питань:Model. Mysql;com.mysql.jdbc. Connection;com.mysql.jdbc. PreparedStatement;java.io.IOException;java.io. PrintWriter;java.sql. ResultSet;java.util. Properties;javax.servlet. ServletException;javax.servlet.http. HttpServlet;javax.servlet.http. HttpServletRequest;javax.servlet.http. HttpServletResponse;

/**

*

* @author dante

*/class AddQuestions extends HttpServlet {void processRequest (HttpServletRequest request, HttpServletResponse response)ServletException, IOException {.setContentType («text/html; charset=UTF-8»);

// указываем кодировку для данных полученых от клиента.setCharacterEncoding («UTF-8»);out = response.getWriter();{one = request.getParameter («one»);two = request.getParameter («two»);three = request.getParameter («three»);four = request.getParameter («four»);check = request.getParameter («check»);question = request.getParameter («que»);theme = request.getParameter («theme»);mysql = new Mysql();.initConnection();id_question = mysql. PreparedQueryInsertID («INSERT INTO questions (id_questions, question, id_theme) VALUES (NULL,?,?)», question, theme); // выполение запроса добавления вопроса

// Вставка ответов тестирования(check.equals («1»)) {. PreparedQueryInsert («INSERT INTO answers (`answer`,`id_question`,`right`) VALUES (?,?, '1')», one, id_question);

} else {. PreparedQueryInsert («INSERT INTO answers (`answer`,`id_question`,`right`) VALUES (?,?, '0')», one, id_question);

}(check.equals («2»)) {. PreparedQueryInsert («INSERT INTO answers (`answer`,`id_question`,`right`) VALUES (?,?, '1')», two, id_question);

} else {. PreparedQueryInsert («INSERT INTO answers (`answer`,`id_question`,`right`) VALUES (?,?, '0')», two, id_question);

}(check.equals («3»)) {. PreparedQueryInsert («INSERT INTO answers (`answer`,`id_question`,`right`) VALUES (?,?, '1')», three, id_question);

} else {. PreparedQueryInsert («INSERT INTO answers (`answer`,`id_question`,`right`) VALUES (?,?, '0')», three, id_question);

}(check.equals («4»)) {. PreparedQueryInsert («INSERT INTO answers (`answer`,`id_question`,`right`) VALUES (?,?, '1')», four, id_question);

} else {. PreparedQueryInsert («INSERT INTO answers (`answer`,`id_question`,`right`) VALUES (?,?, '0')», four, id_question);

}.close();

} catch (Exception e) {.printStackTrace();

}

}

Сервлет додавання питаньModel. Mysql;java.io.IOException;java.io. PrintWriter;javax.servlet. ServletException;javax.servlet.http. HttpServlet;javax.servlet.http. HttpServletRequest;javax.servlet.http. HttpServletResponse;

/**

*

* @author dante

*/class AddResults extends HttpServlet {void processRequest (HttpServletRequest request, HttpServletResponse response)ServletException, IOException {.setContentType («text/html; charset=UTF-8»);

// указываем кодировку для данных полученых от клиента.setCharacterEncoding («UTF-8»);out = response.getWriter();theme = request.getParameter («theme»);id = request.getParameter («id»);date = request.getParameter («date»);timer =request.getParameter («timer»);pri = request.getParameter («pri»);mysql = new Mysql();{.initConnection();(mysql. QueryInsert («INSERT INTO results (`id_user`,`id_theme`,`grade`,`elapsed_time`,»

+ «`time_end_of_test`) VALUES ('»+id+«', ' «+theme+» ', ' «+pri+» ', ' «+timer+» ', ' «+date+» ')»)) {

// Вставка результатов тестирования с возвратом значения.print («1»);

} else {.print («0»);

}.close();

} catch (Exception e) {.printStackTrace();

}

}

Сервлет додавання тем:Model. Mysql;java.io.IOException;java.io. PrintWriter;javax.servlet. ServletException;javax.servlet.http. HttpServlet;javax.servlet.http. HttpServletRequest;javax.servlet.http. HttpServletResponse;

/**

*

* @author dante

*/class AddThemes extends HttpServlet {void processRequest (HttpServletRequest request, HttpServletResponse response)ServletException, IOException {.setContentType («text/html; charset=UTF-8»);

// указываем кодировку для данных полученых от клиента.setCharacterEncoding («UTF-8»);out = response.getWriter();{theme = request.getParameter («theme»);mysql = new Mysql();.initConnection();(mysql. QueryInsert («INSERT INTO themes (theme) VALUES ('» + theme + «')»)) {.print («1»); // Запрос вставки темы

} else {.print («0»);

}.close();

} catch (Exception e) {.printStackTrace();

}

}

Сервлет додавання порцій теорії:Model. Mysql;com.mysql.jdbc. PreparedStatement;java.io.IOException;java.io. PrintWriter;javax.servlet. ServletException;javax.servlet.http. HttpServlet;javax.servlet.http. HttpServletRequest;javax.servlet.http. HttpServletResponse;

/**

*

* @author dante

*/class AddTheorys extends HttpServlet {void processRequest (HttpServletRequest request, HttpServletResponse response)ServletException, IOException {.setContentType («text/html; charset=UTF-8»);

// указываем кодировку для данных полученых от клиента.setCharacterEncoding («UTF-8»);updateSales = null;out = response.getWriter();{theory = request.getParameter («data»);id_theme = request.getParameter («id_theme»);status = request.getParameter («status»);id = request.getParameter («id»);mysql = new Mysql();.initConnection();(status.equals («1»)) {(mysql. PreparedQueryInsert («INSERT INTO theorys (theory, id_theme) VALUES (?,?)», theory, id_theme)) { // Вставка порций теории.print («1»);

} else {.print («0»);

}

} else if (status.equals («0»))

{(mysql. PreparedQueryInsert («UPDATE theorys SET theory =? WHERE id_theory=?», theory, id)) {.print («1»);

} else {.print («0»);

}

}.close();

} catch (Exception e) {.printStackTrace();

}

}

Сервлет для виконання авторизації:java.io.IOException;java.io. PrintWriter;java.sql. ResultSet;java.sql.SQLException;javax.servlet. ServletException;javax.servlet.annotation. WebServlet;javax.servlet.http. HttpServlet;javax.servlet.http. HttpServletRequest;javax.servlet.http. HttpServletResponse;javax.servlet.http. HttpSession;Model. Mysql;Model. Users;

/**

* Servlet implementation class Login

*/

@WebServlet («/login»)class Login extends HttpServlet {static final long serialVersionUID = 1L;void doGet (HttpServletRequest request,response) throws ServletException, IOException {

// TODO Auto-generated method stubmysql = new Mysql();.setContentType («text/html; charset=UTF-8»);session = request.getSession();.setAttribute («status», Users.getNoUser());out = response.getWriter();{.initConnection();.setContentType («text/html; charset=UTF-8»);.setCharacterEncoding («UTF-8»);login = request.getParameter («login»);pass = request.getParameter («pass»);rs = mysql. QuerySelect («SELECT * FROM user WHERE login='»

+ login.trim() + «'» + «AND password='» + pass.trim() + «' LIMIT 1»); // поиск пользователя в БД(rs.next()) {.setContentType («text/html; charset=UTF-8»);name = rs.getString («name»);last_name = rs.getString («last_name»);status = rs.getInt («status»);(Users.isTeacher(status)) { // Если преподаватель.setAttribute («name», name);.setAttribute («last_name», last_name);.setAttribute («id», rs.getString («id»));.setAttribute («status»,.MD5 (Users.getTeacher()));.print (Users.getTeacher());

} else if (Users.isStudent(status)) { // Если студент.setAttribute («name», name);.setAttribute («last_name», last_name);.setAttribute («id», rs.getString («id»));.setAttribute («status»,.MD5 (Users.getStudent()));

// response.sendRedirect («student/student.jsp»);.print (Users.getStudent());

} else {.print (Users.getNoUser());

}

}.close();.out.println («Disconnected from database»);

} catch (SQLException e) {.sendRedirect (request.getContextPath());

}

}

Сервлет виходу з системи:java.io.IOException;java.io. PrintWriter;javax.servlet. ServletException;javax.servlet.annotation. WebServlet;javax.servlet.http. HttpServlet;javax.servlet.http. HttpServletRequest;javax.servlet.http. HttpServletResponse;javax.servlet.http. HttpSession;Model. Users;

/**

* Servlet implementation class Logout

*/

@WebServlet («/logout»)class Logout extends HttpServlet {static final long serialVersionUID = 1L;void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub.setContentType («text/html; charset=UTF-8»);session = request.getSession(true);out = response.getWriter();.setAttribute («status», Users.getNoUser()); // Обнуление сессии пользователя.sendRedirect («index.jsp»);

}

/**

* @see HttpServlet#doPost (HttpServletRequest request, HttpServletResponse

* response)

*/void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

}

}

Сервлет виводу питань тестування:Model. Mysql;java.io.IOException;java.io. PrintWriter;java.sql. ResultSet;java.util. HashMap;java.util. Map;javax.servlet. RequestDispatcher;javax.servlet. ServletException;javax.servlet.http. HttpServlet;javax.servlet.http. HttpServletRequest;javax.servlet.http. HttpServletResponse;

/**

*

* @author dante

*/class Questions extends HttpServlet {void processRequest (HttpServletRequest request, HttpServletResponse response)ServletException, IOException {.setContentType («text/html; charset=UTF-8»);out = response.getWriter();mysql = new Mysql();id_theme = request.getParameter («questions»);page = «questions.jsp»;.setAttribute («id_theme», id_theme);dispatcher = request.getRequestDispatcher(page); // Передача параметров на страницу(dispatcher!= null) {.forward (request, response);

}

}

Сервлет реєстрації:java.io.IOException;java.io. PrintWriter;javax.servlet. ServletException;javax.servlet.annotation. WebServlet;javax.servlet.http. HttpServlet;javax.servlet.http. HttpServletRequest;javax.servlet.http. HttpServletResponse;Model. Mysql;Model. Users;java.sql. ResultSet;

@WebServlet («/register»)class Register extends HttpServlet {static final long serialVersionUID = 1L;void doGet (HttpServletRequest request,response) throws ServletException, IOException {

// TODO Auto-generated method stub

}

void doPost (HttpServletRequest request,response) throws ServletException, IOException {

// TODO Auto-generated method stub.setContentType («text/html; charset=UTF-8»);

// указываем кодировку для данных полученых от клиента.setCharacterEncoding («UTF-8»);mysql = new Mysql();out = response.getWriter();{login = request.getParameter («login»);pass = request.getParameter («pass»);name = request.getParameter («name»);last_name = request.getParameter («last_name»);secret = request.getParameter («secret»);.initConnection();rs = mysql. QuerySelect («SELECT login FROM user WHERE login='» + login.trim() + «'»);(! rs.next()) {(Users. RegisterIsTeacher(secret)) { // Втавка даннях если преподаватель(mysql. QueryInsert («INSERT INTO user (login, password, name, last_name, status) VALUES ('»

+ login.trim()

+ «', '»

+ pass.trim()

+ «', '»

+ name.trim()

+ «', '»

+ last_name.trim()

+ «', '»

+ Users.getTeacher()

+ «')»)) {.print («1»);

} else {.print («0»);

}

}


Висновок


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

Навчальна програма була розроблена на мові програмування Java. В даний час об'єктно-орієнтоване програмування є основним напрямом розвитку програмування взагалі, а мова Java є повністю об'єктною мовою. А наявність засобів строгої перевірки типів, орієнтація на роботу з комп'ютерними мережами, перенесення на рівні виконуваного коду і підтримка платформонезалежного коду, а також заборону прямого звернення до апаратури забезпечили виконання більшості вимог, що пред'являлися до мови прикладного програмування.

В ході курсової роботи був закріплений досвід роботи з мовою Java, закріплені навики роботи в середовищі розробки NetBeans.


Список літератури

програма студент викладач інтерфейс

  1. Кей Хорстманн «Java 2. Тонкости программирования. Том 2» Киев, 2008 г.
  2. Патрик Ноутон «Java 2. Наиболее полное руководство» Киев, 2010 г.
  3. С. Хорстманн, Гари Корнелл «Том 1. Основы Java» Киев, 2007 г.
  4. С. Хорстманн, Гари Корнелл «Том 2. Основы Java» Киев, 2009 г.


Обєктно-орієнтоване програмування 1. Складові частини навчальної програми Клас обовязк

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2019 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ