
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра АПУ
отчет
по лабораторной работе №1
по дисциплине «Технология программирования»
Тема: Информационная система ДЕКАНАТ для автоматизации работы деканата факультета вуза
Студентка гр. 9091 |
|
Боброва Н. |
Преподаватель |
|
Литвинов В.Л. |
Санкт-Петербург
2023
Содержание
Задание на разработку информационной системы 3
Диаграмма использования 4
Логическая структура базы данных 5
Скриншоты основных режимов работы 8
Фрагменты программного кода 11
Задание на разработку информационной системы
Цель работы – разработка информационной системы «Деканат» для автоматизации работы деканата факультета ВУЗа Пусть максимальное число кафедр на факультете равно 10, кафедры готовят студентов по 12 специальностям.
По каждой специальности имеется учебный план, который содержит список всех предметов, изучаемых на этой специальности, с указанием общего количества лекционных, практических, лабораторных часов, раскладку предметов и курсовых работ по семестрам с указанием количества часов, форму сдачи предмета (зачет/экзамен).
На каждого студента заводится учебная карточка, в которую заносятся его точные данные, а также список предметов, подлежащих сдаче согласно учебному плану специальности. По мере сдачи предметов и перехода с курса на курс учебная карточка заполняется соответствующими оценками. По окончании вуза копия учебной карточки выдается студенту как приложение к диплому.
Система должна обеспечивать ввод и обработку учебных планов специальностей, учебных карточек студентов.
Разработать:
меню системы;
модули ввода, изменения и просмотра дан21цмных.
Информационная подсистема должна быть разработана по технологии «клиент-сервер». Вся бизнес-логика находится в базе данных (серверная часть). Клиентское приложение обеспечивает доступ к вводу, редактированию, удалению данных и процедурам расчета (клиентская часть).
Серверная часть должна быть разработана в Access, клиентская часть – в Borland C++ builder.
Диаграмма использования
Предусматривается одна роль использования информационной системы: сотрудник деканата
Сотрудник деканата вносит необходимую информацию по предметам, оценки студентов, личную информацию студентов и т.д.
Диаграмма вариантов использования информационной системы «Деканат» приведена на рис. 1:
Рисунок 1 – Диаграмма вариантов использования
Логическая структура базы данных
Обобщенная логическая ER-модель имеет вид диаграммы сущность-связь (Entity Relationship Diagram (ERD)) и представляет собой модель данных верхнего уровня. Она включает сущности и взаимосвязи, отражающие основные бизнес-правила предметной области. ERD модель в нотации IDEF1X, построенная в case-средстве ERWin Data Modeller, приведена на рисунке 2:
Рисунок 2 – Обобщенная логическая ER-модель в нотации IDEF1X
ER-диаграмма в разрезе атрибутов приведена на рисунке 3:
Рисунок 3 – ER-диаграмма в разрезе атрибутов
Скриншоты основных режимов работы
Главная форма клиентского приложения показана на рисунке 4
Рисунок 4. Главная форма
На рисунке 5 приведена форма учебного плана, в котором можно увидеть информацию по кафедрам, специальностям, предметам
Рисунок 5. Форма "Учебные планы"
В форме «Учебные карточки» на рисунке 6 можно получить информацию по студентам, оценкам и специальностям.
Рисунок 6. Форма "Учебные карточки"
Перечень предметов с их кодом ведется в форме, приведенной на рисунке 7.
Рисунок 7. Форма "Предметы"
Фрагменты программного кода
//----------------------------------Главная форма--------------------
#include <vcl.h>
#pragma hdrstop
#include "main.h"
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMain_Form *Main_Form;
//---------------------------------------------------------------------------
__fastcall TMain_Form::TMain_Form(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TMain_Form::BPlansClick(TObject *Sender)
{
Plans->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TMain_Form::BCardsClick(TObject *Sender)
{
Students -> ShowModal ();
}
//---------------------------------------------------------------------------
void __fastcall TMain_Form::PredmClick(TObject *Sender)
{
Subjects -> ShowModal ();
}
//---------------------------------------------------------------------------
void __fastcall TMain_Form::BExitClick(TObject *Sender)
{
Main_Form -> Close ();
}
//---------------------------------------------------------------------------
//---------------Форма "Учебные карточки"------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TStudents *Students;
//---------------------------------------------------------------------------
__fastcall TStudents::TStudents(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TStudents::SemestrChange(TObject *Sender)
{
Otm -> Active = False;
int value = Semestr -> ItemIndex;
value++;
Otm -> ParamByName ("SemNum") -> Value = value;
Otm -> ParamByName ("StudNum") -> Value = Stud->FieldByName ("Код студента")->Value;
Otm -> Active = True;
Predm -> Active = False;
Predm -> ParamByName ("SemNum") -> Value = value;
Predm -> ParamByName ("SpecNum") -> Value = Spec->FieldByName ("Код специальности")->Value;
Predm -> Active = True;
}
//---------------------------------------------------------------------------
void __fastcall TStudents::DBGrid1CellClick(TColumn *Column)
{
Otm -> Active = False;
int value = Semestr -> ItemIndex;
value++;
Otm -> ParamByName ("SemNum") -> Value = value;
Otm -> ParamByName ("StudNum") -> Value = Stud->FieldByName ("Код студента")->Value;
Otm -> Active = True;
}
//---------------------------------------------------------------------------
void __fastcall TStudents::DBGrid2CellClick(TColumn *Column)
{
Otm -> Active = False;
int value = Semestr -> ItemIndex;
value++;
Otm -> ParamByName ("SemNum") -> Value = value;
Otm -> ParamByName ("StudNum") -> Value = Stud->FieldByName ("Код студента")->Value;
Otm -> Active = True;
}
//---------------------------------------------------------------------------
void __fastcall TStudents::Add_StudClick(TObject *Sender)
{
Edit_Stud -> Visible = True;
Edit_Stud -> Text = "";
LStud -> Visible = True;
BStud_OK -> Visible = True;
Students -> ActiveControl = Edit_Stud;
}
//---------------------------------------------------------------------------
void __fastcall TStudents::Edit_StudKeyPress(TObject *Sender, char &Key)
{
Stud -> Active = False;
int value;
if (Key == 13)
{
if (Edit_Stud -> Text=="") MessageBox (NULL, "Необходимо ввести ФИО", NULL, MB_OK);
else
{
if (Stud_All -> FindLast () == False ) value = 0;
else value = Stud_All -> FieldByName ("Код студента") -> Value;
value++;
Stud_All -> Append ();
Stud_All -> FieldByName ("Код студента") -> Value = value;
Stud_All -> FieldByName ("Код специальности") -> Value = Spec -> FieldByName ("Код специальности") -> Value ;
Stud_All -> FieldByName ("ФИО") -> Value = Edit_Stud -> Text;
Stud_All -> Post ();
}
}
Stud -> Active = True;
}
//---------------------------------------------------------------------------
void __fastcall TStudents::BStud_OKClick(TObject *Sender)
{
Stud -> Active = False;
int value;
if (Edit_Stud->Text=="") MessageBox (NULL, "Необходимо ввести ФИО", NULL, MB_OK);
else
{
if (Stud_All -> FindLast () == False ) value = 0;
else value = Stud_All -> FieldByName ("Код студента") -> Value;
value++;
Stud_All -> Append ();
Stud_All -> FieldByName ("Код студента") -> Value = value;
Stud_All -> FieldByName ("Код специальности") -> Value = Spec -> FieldByName ("Код специальности") -> Value ;
Stud_All -> FieldByName ("ФИО") -> Value = Edit_Stud -> Text;
Stud_All -> Post ();
}
Stud -> Active = True;
}
//---------------------------------------------------------------------------
void __fastcall TStudents::Add_OtmClick(TObject *Sender)
{
if (Semestr ->ItemIndex == -1) MessageBox (NULL, "Необходимо выбрать семестр", NULL, MB_OK);
else
{
Predm -> Active = False;
int value = Semestr -> ItemIndex;
value++;
Predm -> ParamByName ("SpecNum") -> Value = Spec-> FieldByName ("Код специальности")->Value;
Predm -> ParamByName ("StudNum") -> Value = Stud-> FieldByName ("Код студента")->Value;
Predm -> ParamByName ("SemNum") -> Value = value;
Predm -> Active = True;
ComboPredm -> Visible = True;
ComboEx -> Visible = True;
ComboKurs -> Visible = True;
LPredm -> Visible = True;
LEx -> Visible = True;
LKurs -> Visible = True;
BPredm_OK -> Visible = True;
Students -> ActiveControl = ComboPredm;
}
}
//---------------------------------------------------------------------------
void __fastcall TStudents::BPredm_OKClick(TObject *Sender)
{
if (ComboPredm -> Text == "") MessageBox (NULL, "Необходимо выбрать предмет", NULL, MB_OK);
else
{
int value;
FindOtm -> Active = False;
FindOtm -> ParamByName ("SemNum") -> Value = Semestr -> Text;
FindOtm -> ParamByName ("PredmNum") -> Value = Predm -> FieldByName ("Код предмета") -> Value;
FindOtm -> ParamByName ("StudNum") -> Value = Stud-> FieldByName ("Код студента")->Value;
FindOtm -> Active = True;
Otm -> Active = False;
if (FindOtm -> FindLast() == True)
{
Otm_All -> Edit ();
if (ComboEx -> Text == "") Otm_All -> FieldByName ("Оценка за экзамен") -> Value = 0;
else Otm_All -> FieldByName ("Оценка за экзамен") -> Value = ComboEx -> Text;
if (ComboKurs -> Text == "") Otm_All -> FieldByName ("Оценка за курсовик") -> Value = 0;
else Otm_All -> FieldByName ("Оценка за курсовик") -> Value = ComboKurs -> Text;
}
else
{
if (Otm_All -> FindLast() == False) value = 0;
else value = Otm_All -> FieldByName ("Код") -> Value;
value++;
Otm_All -> Append ();
Otm_All -> FieldByName ("Код") -> Value = value;
Otm_All -> FieldByName ("Код студента") -> Value = Stud -> FieldByName ("Код студента") -> Value;
Otm_All -> FieldByName ("Код предмета") -> Value = Predm -> FieldByName ("Код предмета") -> Value;
if (ComboEx -> Text == "") Otm_All -> FieldByName ("Оценка за экзамен") -> Value = 0;
else Otm_All -> FieldByName ("Оценка за экзамен") -> Value = ComboEx -> Text;
if (ComboKurs -> Text == "") Otm_All -> FieldByName ("Оценка за курсовик") -> Value = 0;
else Otm_All -> FieldByName ("Оценка за курсовик") -> Value = ComboKurs -> Text;
Otm_All -> FieldByName ("№ семестра") -> Value = Semestr -> Text;
}
Otm_All -> Post ();
Otm -> Active = True;
}
}
//---------------------------------------------------------------------------
//--------------------Форма "Предметы"------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TSubjects *Subjects;
//---------------------------------------------------------------------------
__fastcall TSubjects::TSubjects(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------