Вход

Разработка программной системы для создания электронного учебника по курсу Объектно – ориентированное программирование

Рекомендуемая категория для самостоятельной подготовки:
Дипломная работа*
Код 95617
Дата создания 2015
Страниц 55
Источников 11
Мы сможем обработать ваш заказ (!) 19 апреля в 18:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
7 280руб.
КУПИТЬ

Содержание

Содержание
Введение 2
1. Постановка задачи и технико-экономическое обоснование 5
1.1. Постановка задачи 5
1.2. Технико-экономическое обоснование 13
2. Теоретическая часть 16
2.1 Анализ информационных задач предметной области 16
2.2. Выбор СУБД 16
2.3 Разработка структуры информационной системы. 21
3. Разработка серверной части информационной системы 26
3.1. Инфологическое проектирование БД 26
3.1.1. Выявление сущностей и связей 26
3.1.2. Выявление атрибутов сущностей. Назначение первичных ключей 28
3.1.3. Построение ER- диаграммы 30
3.2. Даталогическое проектирование 32
3.2.1. Переход от ER – диаграммы к предварительным отношениям 32
3.2.3. Проверка предварительных отношений на соответствие нормальным формам 33
3.2.4. Построение схемы данных 35
4. Разработка клиентской части информационной системы 35
4.1 Организация взаимодействия клиентской программы с БД 35
4.2. Разработка интерфейса пользователя 36
4.3. Разработка сценария инсталляции клиентской программы 38
5. Программная документация 38
5.1 Руководство системного администратора 38
5.2. Руководство пользователя программы 42
6. Экспериментальная часть 46
Заключение 47
Список используемой литературы 48
Приложение 1: SQL-скрипт для создания базы данных 50
Приложение 2: Исходный текст клиентской программы 55

Фрагмент работы для ознакомления

ShowDialog() != DialogResult.OK)
return;
DocumentForm child = new DocumentForm();
child.MdiParent = this;
child.Text = "Электронный учебник - " + Globals.strBook_name;
child.Show();
}
private void miBook_Click(object sender, EventArgs e)
{
// создаем форму
EditBaseForm editBaseForm1 = new EditBaseForm();
editBaseForm1.Text = "Электронный учебник ";
// отображаем форму выбора электронного учебника
//if (editForm.ShowDialog() != DialogResult.OK)
// return;
Globals.tblDisplay = "Book";
editBaseForm1.Show();
}
private void урокиToolStripMenuItem_Click(object sender, EventArgs e)
{
EditBaseForm editBaseForm1 = new EditBaseForm();
editBaseForm1.Text = "Уроки";
editBaseForm1.Show();
}
private void страницToolStripMenuItem_Click(object sender, EventArgs e)
{
EditBaseForm editBaseForm1 = new EditBaseForm();
editBaseForm1.Text = "Страницы";
editBaseForm1.Show();
}
private void упражненияToolStripMenuItem_Click(object sender, EventArgs e)
{
EditBaseForm editBaseForm1 = new EditBaseForm();
editBaseForm1.Text = "Упражнения";
editBaseForm1.Show();
}
private void вопросыToolStripMenuItem_Click(object sender, EventArgs e)
{
EditBaseForm editBaseForm1 = new EditBaseForm();
editBaseForm1.Text = "Вопросы";
editBaseForm1.Show();
}
private void ответыToolStripMenuItem_Click(object sender, EventArgs e)
{
EditBaseForm editBaseForm1 = new EditBaseForm();
editBaseForm1.Text = "Ответы";
editBaseForm1.Show();
}
private void правильныеОтветыToolStripMenuItem_Click(object sender, EventArgs e)
{
EditBaseForm editBaseForm1 = new EditBaseForm();
editBaseForm1.Text = "Правильные ответы";
editBaseForm1.Show();
}
}
}
// EditBaseForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace webbook
{
public partial class EditBaseForm : Form
{
public OleDbConnection connection;
public OleDbDataAdapter adapter;
public DataSet dataset;
public OleDbCommandBuilder cb;
public string TableName;
public EditBaseForm()
{
InitializeComponent();
ReadData();
}
public void ReadData()
{
connection = new OleDbConnection();
connection.ConnectionString =
Globals.ConnectionStr;
try
{
connection.Open();
}
catch
{
MessageBox.Show("Ошибка соединения с базой данных");
}
// подготавливаем команду
//MessageBox.Show("SELECT * FROM dbo.lesson");
OleDbCommand command = new OleDbCommand("SELECT * FROM dbo.page");
command.Connection = connection;
// создаем адаптер и набор данных
adapter = new OleDbDataAdapter(command);
dataset = new DataSet();
cb = new OleDbCommandBuilder(adapter);
// заполняем набор данных
adapter.Fill(dataset);
// закрываем соединение, которое нам больше не нужно
connection.Close();
// связываем набор данных с сеткой черед посредника bindingSource
dataGridView1.AutoGenerateColumns = true;
bindingSource.DataSource = dataset.Tables[0];
dataGridView1.DataSource = bindingSource;
}
private void EditBaseForm_Load(object sender, EventArgs e)
{
cb.GetDeleteCommand();
//Without the OleDbCommandBuilder this line would fail
adapter.Update(dataset);
// создаем объект команды
/* adapter.UpdateCommand = new OleDbCommand(
"UPDATE dbo.Book SET name = ?" +
"WHERE book_id = ?");
adapter.UpdateCommand.Parameters.Add("name", OleDbType.VarChar,
2000, "name");
adapter.UpdateCommand.Parameters.Add("book_id", OleDbType.Integer,
10, "book_id");
// указываем объект соединения
adapter.UpdateCommand.Connection = connection;
// вызов обновления данных
adapter.Update(dataset.Tables[0]);*/
}
private void btnSave_Click(object sender, EventArgs e)
{
}
private void EditBaseForm_Activated(object sender, EventArgs e)
{

}
}
}
// ExerciseForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace webbook
{
public partial class ExerciseForm : Form
{
public OleDbConnection connection;
public List<RadioButton>[] RadioButtonLstArr;
public string[] RightAnswer;

public ExerciseForm()
{
InitializeComponent();
connection = new OleDbConnection();
}
private void buttonRez_Click(object sender, EventArgs e)
{

int n_ok = 0;
int n_wrong = 0;
int i = 0;
foreach (List<RadioButton> RbList in RadioButtonLstArr)
{

foreach (RadioButton rb in RbList)
{
if (rb.Checked)
if (RightAnswer[i+1] == rb.Text)
++n_ok;
else
++n_wrong;
}
i++;
}
MessageBox.Show("Правильных ответов: " + Convert.ToString(n_ok) + " Ошибочных: " + Convert.ToString(n_wrong));

}

private void ExerciseForm_Shown(object sender, EventArgs e)
{
// инициализация соединения
connection.ConnectionString =
Globals.ConnectionStr;
try
{
connection.Open();
}
catch
{
MessageBox.Show("Ошибка соединения с базой данных");
}
//количество вопросов
OleDbCommand command = connection.CreateCommand();
command.CommandText = "SELECT COUNT(*) "+
" FROM dbo.question q, "+
" dbo.exercise e, "+
" dbo.lesson l, "+
" dbo.book b "+
" WHERE q.exercise_id = e.exercise_id "+
" and e.lesson_id = l.lesson_id "+
" and l.name = '"+this.Text+"'"+
" and l.book_id = b.book_id "+
" and b.name = '" + Globals.strBook_name + "'";

int numQuestion = (int)command.ExecuteScalar();

// сохраняем номера вопросов в отдельный массив
// создать команду запроса
string[] strArrQuestions_id = new string[numQuestion + 1];
string[] strArrQuestions_name = new string[numQuestion + 1];
command.CommandText = "SELECT q.question_id, q.name " +
" FROM dbo.question q, " +
" dbo.exercise e, " +
" dbo.lesson l, " +
" dbo.book b " +
" WHERE q.exercise_id = e.exercise_id " +
" and e.lesson_id = l.lesson_id " +
" and l.name = '" + this.Text + "'" +
" and l.book_id = b.book_id " +
" and b.name = '" + Globals.strBook_name + "'";
// выполнить запрос
OleDbDataReader reader = command.ExecuteReader();
int j = 0;
// цикл чтения данных с таблицы question
while (reader.Read())
{
j++;
strArrQuestions_id[j] = reader["question_id"].ToString();
strArrQuestions_name[j] = reader["name"].ToString();
}
reader.Close();
// считываем в массив списков
// для каждого вопроса в массиве AnswerArr
// храним список ответов
List<string>[] AnswerArr = new List<string>[numQuestion + 1];
for (int i = 0; i < numQuestion; i++)
{
AnswerArr[i] = new List<string>();
}
for (int i = 0; i < j; i++)
{
// добавление ответов в списки.
command.CommandText = "select name, type_answer from dbo.[answer] where question_id = " + strArrQuestions_id[i + 1];
// выполнить запрос
reader = command.ExecuteReader();
while (reader.Read())
{
AnswerArr[i].Add(reader["name"].ToString());
}
reader.Close();
}
// добавление правильных ответов в одномерный массив
// считается, что у вопроса имеется один правильный ответ
RightAnswer = new string[numQuestion + 1];
command.CommandText = " select a.name "+
" from dbo.right_answer r "+
" join dbo.[question] q "+
" on q.question_id = r.question_id "+
" join dbo.exercise e "+
" on q.exercise_id = e.exercise_id "+
" join dbo.lesson l"+
" on e.lesson_id = l.lesson_id "+
" join dbo.book b "+
" on l.book_id = b.book_id "+
" join dbo.[answer] a "+
" on a.answer_id = r.answer_id "+
" where l.name = '" + this.Text + "'"+
" and b.name = '" + Globals.strBook_name + "'";
reader = command.ExecuteReader();
j = 0;
while (reader.Read())
{
++j;
RightAnswer[j] = reader["name"].ToString();
}
reader.Close();
//
// Создание надписи пока для первого вопроса
//
Label Label2;
RadioButton radioButton1;
Panel panel1;
string bufStr;
int StartPos = 0;
RadioButtonLstArr = new List<RadioButton>[numQuestion];
for (int i = 0; i < numQuestion; i++)
{
// запоминаем в массив списков radiobox
RadioButtonLstArr[i] = new List<RadioButton>();
}
for (int i = 0; i < numQuestion; i++)
{
StartPos = StartPos + 30;
bufStr = i.ToString();
Label2 = new System.Windows.Forms.Label();
Label2.AutoSize = true;
Label2.Location = new System.Drawing.Point(60, StartPos);
Label2.Name = "label" + bufStr;
Label2.Size = new System.Drawing.Size(96, 17);
Label2.Text = strArrQuestions_name[i + 1];
this.Controls.Add(Label2);
StartPos = StartPos + 20;
panel1 = new System.Windows.Forms.Panel();
panel1.Location = new System.Drawing.Point(46, StartPos);
panel1.Name = "panel" + bufStr;
panel1.Size = new System.Drawing.Size(538, 84);
foreach (string str1 in AnswerArr[i])
{
radioButton1 = new System.Windows.Forms.RadioButton();
panel1.SuspendLayout();
panel1.Controls.Add(radioButton1);
radioButton1.AutoSize = true;
radioButton1.Location = new System.Drawing.Point(15, 3 + (AnswerArr[i].IndexOf(str1)) * 27);
radioButton1.Name = "radioButton_" + i + "_" + AnswerArr[i].IndexOf(str1);
radioButton1.Size = new System.Drawing.Size(500, 21);
radioButton1.TabIndex = AnswerArr[i].IndexOf(str1);
radioButton1.TabStop = true;
radioButton1.Text = str1;
radioButton1.UseVisualStyleBackColor = true;
StartPos = StartPos + 3 + (AnswerArr[i].IndexOf(str1)) * 27;
RadioButtonLstArr[i].Add(radioButton1);
}
this.Controls.Add(panel1);
}
// добавляем кнопку обработки результатов
Button buttonRez = new System.Windows.Forms.Button();
StartPos = StartPos + 30;
buttonRez.Location = new System.Drawing.Point(46, StartPos);
buttonRez.Name = "buttonRez";
buttonRez.Size = new System.Drawing.Size(100, 23);
buttonRez.Text = "Обработка";
buttonRez.UseVisualStyleBackColor = true;
buttonRez.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
buttonRez.Click += new System.EventHandler(this.buttonRez_Click);
this.Controls.Add(buttonRez);
connection.Close();
// закрываем соединение
if (connection.State == ConnectionState.Open)
connection.Close();
}
}
}
// DocumentForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace webbook
{

public partial class DocumentForm : Form
{
//List<Lesson> LessonsLst; // список уроков
public DocumentForm()
{
InitializeComponent();
//LessonsLst = new List<Lesson>();
}
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
}
private void Lesson_Click(object sender, EventArgs e)
{
string tempStr = (sender as Button).Text; //.IndexOf(".")
tempStr = tempStr.Substring(tempStr.IndexOf(".") + 1);
tempStr = tempStr.Trim();
PageForm PageWindow = new PageForm();
PageWindow.Text = tempStr;
PageWindow.Show();

}
private void label1_Click(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{

}
private void AddPageLessonMI_Click(object sender, EventArgs e)
{


}
private void AddExerciseMI_Click(object sender, EventArgs e)
{

}

private void DocumentForm_Shown(object sender, EventArgs e)
{
// получаем список уроков и отображаем их
OleDbConnection connection;
connection = new OleDbConnection();
// инициализация соединения
connection.ConnectionString =
Globals.ConnectionStr;
try
{
connection.Open();
}
catch
{
MessageBox.Show("Ошибка соединения с базой данных");
}
OleDbCommand command = connection.CreateCommand();
command.CommandText = "select l.name "+
" from dbo.lesson l, "+
" dbo.book b "+
" where l.book_id = b.book_id "+
" and b.name = '"+
Globals.strBook_name +"'";
// выполнить запрос
OleDbDataReader reader = command.ExecuteReader();
List<string> QuestionLst = new List<string>();
QuestionLst.Clear();
// цикл чтения данных с таблицы question
while (reader.Read())
{
QuestionLst.Add(reader["name"].ToString());
}
reader.Close();

int LeftBtn = 57;
int i = 0;
int TopBtn;
foreach (string question in QuestionLst)
{
//
// Создание кнопки buttonLesson
//
Button button2 = new System.Windows.Forms.Button();
TopBtn = 87 + (41 * i);
button2.ContextMenuStrip = this.contextMenuStrip1;
button2.Location = new System.Drawing.Point(LeftBtn, TopBtn );
button2.Name = "button" + i;
button2.Size = new System.Drawing.Size(514, 23);
button2.TabIndex = i;
button2.Text = "Урок №" + Convert.ToString(i + 1) + ". " +
question.Trim();
button2.UseVisualStyleBackColor = true;
button2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
button2.Click += new System.EventHandler(Lesson_Click);
i++;
this.Controls.Add(button2);
}


}
}

}
// Globals.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// класс с глобальными переменными
namespace webbook
{
public static class Globals
{
public static string strBook_name;
public static string ConnectionStr = @"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=User;Initial Catalog=electrobooks;Data Source=HOME-72C9B338FE\SQLEXPRESS";
public static string tblDisplay;

}
}
// PageForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Xml;
using System.Data.OleDb;
namespace webbook
{
public partial class PageForm : Form
{
public List<string> http_linkLst;
public int CurrPage = 0;
// получаем список уроков и отображаем их
public OleDbConnection connection;
public PageForm()
{
InitializeComponent();
connection = new OleDbConnection();
// инициализация соединения
connection.ConnectionString = Globals.ConnectionStr;
try
{
connection.Open();
}
catch
{
MessageBox.Show("Ошибка соединения с базой данных");
}
}
private void HomeBtn_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(http_linkLst.ElementAt(0));
label1.Text = "1";
label1.Refresh();
}
private void PageForm_Shown(object sender, EventArgs e)
{
OleDbCommand command = connection.CreateCommand();
command.CommandText = "select p.http_link " +
" from dbo.lesson l, " +
" dbo.book b, " +
" dbo.page p " +
" where l.book_id = b.book_id " +
" and b.name = '" + Globals.strBook_name + "'" +
" and l.name = '" + this.Text + "'" +
" and p.lesson_id = l.lesson_id ";
OleDbDataReader reader = command.ExecuteReader();
http_linkLst = new List<string>();
http_linkLst.Clear();
// цикл чтения данных с таблицы question
while (reader.Read())
{
http_linkLst.Add(reader["http_link"].ToString());
}
reader.Close();
webBrowser1.Navigate(http_linkLst.ElementAt(0));
label1.Text = "1";
label1.Refresh();
}
private void PreviosBtn_Click(object sender, EventArgs e)
{
if (CurrPage != 0)
CurrPage = CurrPage - 1;
else
CurrPage = 0;
label1.Text = (CurrPage + 1).ToString();
webBrowser1.Navigate(http_linkLst.ElementAt(CurrPage));
label1.Refresh();
}
private void NextBtn_Click(object sender, EventArgs e)
{
if (CurrPage < http_linkLst.Count - 1)
CurrPage = CurrPage + 1;
else
CurrPage = http_linkLst.Count - 1;
label1.Text = (CurrPage + 1).ToString();
label1.Refresh();
webBrowser1.Navigate(http_linkLst.ElementAt(CurrPage));
}
private void EndBtn_Click(object sender, EventArgs e)
{
webBrowser1.Navigate(http_linkLst.ElementAt(http_linkLst.Count - 1));
label1.Text = (http_linkLst.Count).ToString();
label1.Refresh();
}
private void btnExercise_Click(object sender, EventArgs e)
{
//количество вопросов
OleDbCommand command = connection.CreateCommand();
command.CommandText = "SELECT COUNT(*) " +
" FROM dbo.question q, " +
" dbo.exercise e, " +
" dbo.lesson l, " +
" dbo.book b " +
" WHERE q.exercise_id = e.exercise_id " +
" and e.lesson_id = l.lesson_id " +
" and l.name = '" + this.Text + "'" +
" and l.book_id = b.book_id " +
" and b.name = '" + Globals.strBook_name + "'";
int numQuestion = (int)command.ExecuteScalar();
if (numQuestion == 0)
{
MessageBox.Show("По данному уроку нет упражнений!");
}
else
{
ExerciseForm ExerciseWindow = new ExerciseForm();
ExerciseWindow.Text = this.Text;
ExerciseWindow.Show();
}
}
}
}
// ListofBooks.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace webbook
{
public partial class ListOfBooks : Form
{
public OleDbConnection connection;


public ListOfBooks()
{
InitializeComponent();
}


private void ListOfBooks_Shown(object sender, EventArgs e)
{
connection = new OleDbConnection();
// инициализация соединения
// connection.ConnectionString =
// @"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=User;Initial Catalog=electrobooks;Data Source=HOME-72C9B338FE\SQLEXPRESS";
connection.ConnectionString = Globals.ConnectionStr;
try
{
connection.Open();
}
catch
{
MessageBox.Show("Ошибка соединения с базой данных");
}

OleDbCommand command = connection.CreateCommand();
command.CommandText = "SELECT name FROM dbo.book";
// выполнить запрос
OleDbDataReader reader = command.ExecuteReader();
listView.Items.Clear();
// цикл чтения данных с таблицы question
while (reader.Read())
{

listView.Items.Add(reader["name"].ToString());
//listView.Items.Add(new ListViewItem(new string[] {"1", reader["name"].ToString()}));
}
reader.Close();
}
private void btnChoose_Click(object sender, EventArgs e)
{
if (listView.SelectedItems.Count > 0)
Globals.strBook_name = listView.SelectedItems[0].Text;
}
}
}
2
2
Результаты теста
Выбор упражнения
Упражнение
Текущая страница
Выбор урока
Список страниц
Выбор электронного учебника
Список электронных учебников
Список уроков
Пользователь
Электронный учебник
Book
Book_id
Name
CreateDate
Lesson
Lesson_id
Name
Book_id
PAGE
Page_id
HTTP_LINK
lesson_id
QUESTION
Name
Question_id Exercise_id
EXERCISE
Exercise_id
Name
Lesson_id

ANSWER
Answer_id
Name Question_id
Type_answer
Right_ANSWER
Answer_id Question_id
lesson
lesson_id
exercise
exercise_id lesson_id
1
N

Список литературы [ всего 11]

Список используемой литературы
1. Электронные учебники [Электронный ресурс] // URL: http://katerina-bushueva.ru/publ/ikt_v_obrazovanii/tekhnologii_distancionnogo_obrazovanija/ehlektronnye_uchebniki_ponjatie_i_programmnoe_obespechenie/7-1-0-35/ (дата обращения: 02.06.2015).
2. Что такое дистанционное обучение? // URL: http://distvuz.ru/stati/chto-takoe-distantsionnoe-obuchenie/ (дата обращения: 02.06.2015).
3. Фленов М. Е. «Библия С#», СПб.: БХВ-Петербург, 2011. — 560 с.
4. Троелсен Э. «C# и платформа .NET 3.0, специальное издание», СПб.: Питер, 2008. – 1456 с.
5. Подиновский В.В. Анализ задач многокритериального выбора методами теории важности критериев при помощи компьютерных систем поддержки принятий решений // Изв. АН. Теория и системы управления. 2008. - №2. – С. 64-68.
6. Методология функционального моделирования SADT [Электронный ресурс] //URL: http://www.business-rocess.ru/designing/methodology/sadt/theory_sadt.html/(дата обращения: 02.06.2015).
7. Классификация сущностей [Электронный ресурс] // URL: http://citforum.ru/database/dbguide/2-3.shtml/(дата обращения: 02.06.2015).
8. Карвин Б. Программирование баз данных SQL. – М.: Рид Групп, 2012. – 336 с. – (Профессиональные компьютерные книги)
9. Нормализация отношений. Первая и вторая нормальные формы [Электронный ресурс] // URL: http://habrahabr.ru/post/129195/ (дата обращения: 02.06.2015).
10. Создание подключения ADO из файла связи с данными в компонентах доступа к данным [Электронный ресурс] // URL: https://support.microsoft.com/ru-ru/kb/300261/ru (дата обращения: 02.06.2015).
11. Барсов Р. Постройте профессиональный сайт сами. - СПб. 2009. - 150 с.
Очень похожие работы
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00512
© Рефератбанк, 2002 - 2024