Разработка системы сохранения результатов анкетирования в базе данных MS SQL Server
Оглавление
Введение 2
1 Постановка задачи 3
2 Выбор средств реализации 4
3 Описание логики работы
приложения 6
4 Разработка программного
обеспечения и описание пользовательского интерфейса 8
4.1 Таблица SQL 8
4.2 Главная форма MainForm 9
4.3 Форма просмотра анкет
Infoform 12
Заключение 14
Список используемой
литературы 15
Приложение А
(обязательное) 16
Введение
Технологии программирования играли разную роль на разных этапах развития
программирования. По мере повышения мощности компьютеров и развития средств и
методологии программирования росла и сложность решаемых на компьютерах задач,
что привело к повышенному вниманию к технологии программирования. Резкое
удешевление стоимости компьютеров и, в особенности, стоимости хранения
информации на компьютерных носителях привело к широкому внедрению компьютеров
практически во все сферы человеческой деятельности, что существенно изменило
направленность технологии программирования. Человеческий фактор стал играть в
ней решающую роль. Сформировалось достаточно глубокое понятие качества
программных средств, в котором акценты стали ставится не столько на его
эффективности, сколько на удобстве работы с ним для пользователей (не говоря
уже о его надежности). Широкое использование компьютерных сетей привело к
интенсивному развитию распределенных вычислений, дистанционного доступа к
информации и электронного способа обмена сообщениями между людьми. Компьютерная
техника из средства решения отдельных задач все более превращается в средство
информационного моделирования реального и мыслимого мира, способное просто
отвечать людям на интересующие их вопросы. Начинается этап глубокой и полной
информатизации (компьютеризации) человеческого общества. Все это ставит перед
технологией программирования новые и достаточно трудные проблемы.
1
Постановка задачи
Разработка системы сохранения результатов анкетирования в базе данных MS SQL Server.
Основные требования: Вопросов в анкете должно быть не менее 15. Типов
данных для вводимых ответов должно быть не менее 3.
Общие требования:
1. При выборе элемента меню о программе, должно выводиться модальное
диалоговое окно со сведениями о программе и авторе программы.
2. Тип приложения: GUI
2 Выбор
средств реализации
Для выполнения курсовой работы был использован язык программирования Delphi и система управления базами данных Microsoft SQL Server.
Основные процедуры и функции Delphi, используемые в данном проекте:
Рисунок 1 - Таблица Table1
4.2 Главная форма MainForm
Листинг программы приведен в приложении А.
Для работы с базой SQL на
форме располагаются элементы DataSource1: TDataSource, ADO: TADOQuery, DBGrid1: TDBGrid.
Согласно изложенному выше плану работы приложения был создан модуль Mform, в котором описана форма MainForm
(рисунок 2). На этой форме размещены 4 панели,содержащие элементы для ввода
данных анкетирования.
Для большей удобности и экономии пространсво было создано MainMenu1,содержащее 2 вкладки: «Анкета»,
«Справка».
Вкладка «Анкета» имеет 3 пункта:
«Заполнить новую»-делает активной первую панель,скрывая все
остальные,очищатет все элементы ввода для ввода новых данных;
«Посмотреть заполненные»-показывает модальное окно InfoForm, содержащее информацию об анкетируемых(рисунок
4);
«Выход»-осуществляет выход из программы.
Вкладка «Справка» имеет один пункт:
«О программе»- показывает модальное окно AboutForm с информацией о программе и ее
авторе(рисунок 3).
Для того чтобы открываемое окно было модальным вызывается функция
showmodal соответствующего экземпляра формы.
Закрытие и уничтожение модальной формы осуществляется с помощью процедуры
Release, либо же формы, свойству
соответствующей кнопки выхода ModalResult присваивается значение mrCancel.
Навигация между нужными панелями выполняется при помощи кнопок
«Назад» и «Дальше». При работе с первой панелью кнопка «Назад» в свойстве
vision имеет значение false, при работе с остальными панелями true.
При работе с последней панелью кнопка «Дальше» в свойстве vision имеет значение false, при работе с остальными панелями true.
Также описана процедура:
procedure BdataKeyPress(Key:Char):Char;
- возвращает цифру, передаваемую как параметр, если она входит в алфавит, или
же является специальным знаком клавиши удаления #8, иначе возвращает “пустой”
символ #0 .Данная процедура используются для предотвращения некорректного ввода
в поле TEdit (например, при вводе букв в поле
ввода даты рождения анкетируемого).
После создания формы анкетирования переменной povtorSave: boolean этой формы присваивается значение false, это означает, что происходит новое
заполнение анкеты.
После ее нажатия начинается проверка заполнения,если же поле не было
заполнена данные не будут сохранены и программа уведомит пользователя об
этом.Далее происходит сохранение данных в базу SQL и переменной povtorSave присвоиться значение true,это
означает, что если мы не выберем в меню пункт «Новая анкета»,то при следующем
сохранении данных мы будем видеть диалоговое окно с запросом наших намерений.
Рисунок 2.1 - Главная форма
приложения.
Рисунок 2.2 - Главная форма приложения.
программа база данные анкета
Рисунок 2.3 - Главная форма
приложения.
Рисунок 2.4 - Главная форма
приложения.
Рисунок 3 - Форма «О программе».
4.3 Форма
просмотра анкет Infoform
На рисунке 4 представлена данная форма.
Для работы с базой SQL на
форме располагаются элементы DataSource1: TDataSource, ADO: TADOQuery, DBGrid1: TDBGrid.
При создании данной формы происходит заполнение 1 столбца InfoGrid:TstringGrid и подсчет количества анкет.
Количество анкет оображается в Label2.
Для осуществления перехода к определенной анкете,при нажатии кнопки Button1,происходит перемещение по таблице
до нужной анкеты и данные выводятся в InfoGrid при помощи процедуры SelectInfo.
Если был введен ID
несуществующей анкеты,появится окно предупреждающее об этом и окно ввода ID будет очищено.
При нажатии на кнопку «Предыдущая» происходит переход к предыдущей
анкете,которая будет показана в InfoGrid.
При нажатии на кнопку «Следующая» происходит переход к следующей
анкете,которая будет показана в InfoGrid.
Заключение
В ходе курсовой работы было разработано приложение, позволяющее заносить
данные анкетирования в базу данных MS SQL. Также была
подробно рассмотрена реализация приложения
Список
используемой литературы
1. Программирование в Delphi. Учебник по классическим теориям Delphi. - ООО «Бином-Пресс» 2006г.
2. Разработка
клиент-серверных приложений в Delphi
<http://forcoder.ru/delphi/razrabotka-klient-servernyh-prilozhenij-v-delphi-1137>
А. Шкрыль БХВ-Петербург 2006г
3. SQL: Полное руководство Джеймс Р. Грофф, Пол Н. Вайнберг
Издательство: Ирина, Издательская группа BHV, McGraw-Hill Companies 2001г.
Приложение
А (обязательное)
Листинг программы
program Anketa;
uses,in 'MainForm.pas' {Form1},in 'Unit1.pas' {AboutForm},in
'Unit2.pas' {InfoForm};
{$R *.res}.Initialize;.Title := 'Анкета';.CreateForm(TForm1,
Form1);.CreateForm(TAboutForm, AboutForm);.Run;.MainForm;, Messages, SysUtils,
Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, DBGrids, DB,
ADODB,, ComCtrls, Menus, Vcl.XPMan;= class(TForm): TDataSource;: TADOQuery;:
TDBGrid;: TButton;: TLabel;: TLabel;: TLabel;: TEdit;: TEdit;: TEdit;:
TRadioGroup;: TLabeledEdit;: TLabeledEdit;: TLabel;: TComboBox;: TLabel;:
TComboBox;: TLabel;: TComboBox;: TRichEdit;: TLabel;: TLabeledEdit;:
TRichEdit;: TLabel;: TComboBox;: TLabel;: TLabeledEdit;: TRichEdit;: TLabel;:
TLabel;: TComboBox;: TLabeledEdit;: TPanel;: TRadioGroup;: TPanel;: TPanel;:
TPanel;: TButton;: TButton;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;:
TMenuItem;: TMenuItem;: TMenuItem;PriorButtonClick(Sender:
TObject);NextButtonClick(Sender: TObject);FormCreate(Sender: TObject);SaveButtonClick(Sender:
TObject);BdataKeyPress(Sender: TObject; var Key: Char);N5Click(Sender:
TObject);N1Click(Sender: TObject);N3Click(Sender: TObject);N2Click(Sender:
TObject);
{ Private declarations }: integer;;: TForm1;:integer; //номер активной панели:boolean;Unit1, Unit2;
{$R *.dfm}definitionId: integer;//возвращает значение следующего ID анкеты.ado.SQL.Clear;.ado.SQL.Text:='select
id from table_1 ORDER BY id
ASC;';.ado.open;.ado.Last;:=Form1.ado.Fields[0].value+1;result:=1;;;NewANKETA;
.FormCreate(Form1);Form1
do.Clear;.Clear;.Clear;.ItemIndex:=-1;.Clear;.Clear;.Clear;.ItemIndex:=-1;.ItemIndex:=-1;.ItemIndex:=-1;.ItemIndex:=-1;.ItemIndex:=-1;.ItemIndex:=-1;.Clear;.Clear;.Clear;.Clear;.Clear;.NextButton.Visible:=true;.savebutton.Enabled:=false;;;Smena(l:integer);l
of
:
begin.Panel1.Visible:=true;.Panel2.Visible:=false;.Panel3.Visible:=false;.Panel4.Visible:=false;.PriorButton.Visible:=false;.NextButton.Visible:=true;;
:
begin.Panel1.Visible:=false;.Panel2.Visible:=true;.Panel3.Visible:=false;.Panel4.Visible:=false;.PriorButton.Visible:=true;.NextButton.Visible:=true;;
:
begin.Panel1.Visible:=false;.Panel2.Visible:=false;.Panel3.Visible:=true;.Panel4.Visible:=false;.PriorButton.Visible:=true;.NextButton.Visible:=true;;
: begin.Panel1.Visible:=false;.Panel2.Visible:=false;.Panel3.Visible:=false;.Panel4.Visible:=true;.PriorButton.Visible:=true;.NextButton.Visible:=false;.savebutton.Enabled:=true;;;;TForm1.PriorButtonClick(Sender:
TObject);l>1 then l:=l-1;(l);;TForm1.NextButtonClick(Sender: TObject);:boolean;:=false;l<4
then l:=l+1;l of
: beginPolgroup.ItemIndex=-1 then begin ShowMessage('Вы не указали
пол!'); error:=true;
end;(Bdata.Text);(0,'Неверный формат
даты!'+#13#10+'Пример правильного ввода '+#13#10+ '01.01.2012' ,'Неверная дата',MB_Ok or MB_ICONERROR);:=true;.Clear;;error then l:=1;;
:beginTimeGamebox.ItemIndex=-1 then begin ShowMessage('Вы не указали
сколько времени
тратите на игры!'); error:=true;
end;OpitGamebox.ItemIndex=-1 then begin ShowMessage('Вы не указали
как вы оцениваете свой игровой опыт!');
error:=true; end;Platformerbox.ItemIndex=-1 then begin ShowMessage('Вы не указали
как относитесь к платформерам!'); error:=true; end;Pristavkagroup.ItemIndex=-1 then begin
ShowMessage('Вы не указали есть ли у вас приставка!');error:=true; end;error then
l:=2;;
:beginOsbox.ItemIndex=-1 then begin ShowMessage('Вы не указали
свою ОС!'); error:=true; end;error then l:=3;;;Not error then
smena(l);;TForm1.FormCreate(Sender:
TObject);.Visible:=true;.Visible:=false;.Visible:=false;.Visible:=false;.Visible:=false;:=false;:=1;.savebutton.Enabled:=false;;TForm1.SaveButtonClick(Sender:
TObject);: boolean;:=false;Donatbox.ItemIndex=-1 then begin ShowMessage('Вы не указали
тратите ли вы деньги на игры'); error:=true; end;
if (povtorSave)and(messagebox(0,'Возможно вы пытаетесь сохранить уже
существующие данные!'+#13#10+'В этом случае они будут сохранены под новым
номером! Продолжить?','Повторное сохранение',MB_YesNo or MB_ICONINFORMATION)=mrNo) then error:=true;(not
error) then begin:=DefinitionId;.SQL.Text:='insert into table_1 (ID, name,
fam,otch,pol,datar,professia,TimeGame,OpitGame, GanrGame, Platformer, OS,
ConfigPC, Pristavka, Game, GameInfo, Donat, Film, Info)';.SQL.add(' values
(:ID, :name, :fam,:otch,:pol,:datar,:professia,:TimeGame,:OpitGame, :GanrGame,
:Platformer, :OS, :ConfigPC, :Pristavka, :Game, :GameInfo, :Donat, :Film,
:Info)');.Parameters.ParamByName('name').value:=NameEdit.Text;.Parameters.ParamByName('fam').value:=lNameEdit.Text;.Parameters.ParamByName('otch').value:=mNameEdit.Text;.Parameters.ParamByName('pol').value:=PolGroup.ItemIndex;.Parameters.ParamByName('professia').value:=professia.Text;.Parameters.ParamByName('DataR').value:=formatdatetime('yyyy/mm/dd',StrToDateTime(Bdata.Text));.Parameters.ParamByName('GanrGame').value:=GanrGame.Text;.Parameters.ParamByName('TimeGame').value:=TimeGamebox.ItemIndex;.Parameters.ParamByName('OpitGame').value:=OpitGamebox.ItemIndex;.Parameters.ParamByName('Donat').value:=Donatbox.ItemIndex;.Parameters.ParamByName('Platformer').value:=Platformerbox.ItemIndex;.Parameters.ParamByName('Pristavka').value:=PristavkaGroup.ItemIndex;.Parameters.ParamByName('OS').value:=OSBox.items[Osbox.ItemIndex];.Parameters.ParamByName('Game').value:=Game.Text;.Parameters.ParamByName('film').value:=FilmEdit.Text;.Parameters.ParamByName('ConfigPC').value:=ConfigPCEdit.Text;.Parameters.ParamByName('GameInfo').value:=GameInfoEdit.Text;.Parameters.ParamByName('info').value:=InfoEdit.Text;.Parameters.ParamByName('id').value:=id;.ExecSQL;
povtorSave:=true;(0,'Данные успешно
сохранены!','Сохранение',MB_Ok or MB_ICONINFORMATION);
except('Ошибка при записи данных!');
end;else messagebox(0,'Данные
не сохранены','Сохранение',MB_Ok or
MB_ICONERROR);;TForm1.BdataKeyPress(Sender: TObject; var Key: Char);: set of
char=['0'..'9',#8,'.'];(not(key in abc)) then key:=#0;;TForm1.N5Click(Sender:
TObject);.ShowModal;;TForm1.N1Click(Sender: TObject);;;TForm1.N3Click(Sender:
TObject);.Close;;TForm1.N2Click(Sender: TObject);.CreateForm(TInfoForm,
InfoForm);.ShowModal;;.Unit1;, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms,, StdCtrls, jpeg, ExtCtrls;= class(TForm): TLabel;: TLabel;:
TLabel;: TButton;: TImage;
{ Public declarations };: TAboutForm;
{$R *.dfm}.Unit2;, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms,, StdCtrls, Grids, DB, ADODB, DBGrids;= class(TForm):
TStringGrid;: TButton;: TButton;: TDataSource;: TDBGrid;: TADOQuery;: TLabel;:
TButton;: TLabel;: TButton;: TLabel;: TEdit;FormCreate(Sender: TObject);PriorButtonClick(Sender:
TObject);NextButtonClick(Sender: TObject);CloseButtonClick(Sender:
TObject);Button1Click(Sender: TObject);
{ Private declarations }
{ Public declarations };: TInfoForm;Mainform;
{$R *.dfm}SelectInfo;InfoForm do.Cells[1,0]:=ado.FieldByName('id').AsString;.Cells[1,1]:=ado.FieldByName('name').AsString;.Cells[1,2]:=ado.FieldByName('fam').AsString;.Cells[1,3]:=ado.FieldByName('Otch').AsString;ado.FieldByName('pol').AsBoolean
then InfoGrid.Cells[1,4]:='Женский'
else InfoGrid.Cells[1,4]:='Мужской';.Cells[1,5]:=ado.FieldByName('professia').AsString;.Cells[1,6]:=ado.FieldByName('DataR').Asstring;.Cells[1,7]:=Form1.TimeGameBox.Items[ado.FieldByName('TimeGame').AsInteger];.Cells[1,8]:=Form1.OpitGameBox.Items[ado.FieldByName('OpitGame').AsInteger];.Cells[1,9]:=ado.FieldByName('GanrGame').AsString;.Cells[1,10]:=Form1.PlatformerBox.Items[ado.FieldByName('Platformer').Asinteger];.Cells[1,11]:=ado.FieldByName('OS').AsString;.Cells[1,12]:=ado.FieldByName('ConfigPC').AsString;.Cells[1,13]:=Form1.PristavkaGroup.Items[ado.FieldByName('Pristavka').Asinteger];.Cells[1,14]:=ado.FieldByName('Game').AsString;.Cells[1,15]:=ado.FieldByName('GameInfo').AsString;.Cells[1,16]:=Form1.DonatBox.Items[ado.FieldByName('Donat').AsInteger];.Cells[1,17]:=ado.FieldByName('Film').AsString;.Cells[1,18]:=ado.FieldByName('Info').AsString;;;TInfoForm.FormCreate(Sender:
TObject);.SQL.Clear;.sql.Text:='select * from Table_1 order by id
asc;';.Open;.enabled:=true;.enabled:=true;.last;.Caption:='Всего анкет:
'+ado.FieldByName('id').AsString+'
';.First;.ColWidths[0]:=220;.ColWidths[1]:=680;.Cells[0,0]:='Номер анкеты';.Cells[0,1]:='Имя';.Cells[0,2]:='Фамилия';.Cells[0,3]:='Отчество';.Cells[0,4]:='Пол';.Cells[0,5]:='Профессия';
InfoGrid.Cells[0,6]:='Дата рождения';.Cells[0,7]:='Время затрачиваемое на
игры';.Cells[0,8]:='Игровой опыт';.Cells[0,9]:='Любимый жанр
игр';.Cells[0,10]:='Отношение к платформерам';.Cells[0,11]:='Операционная
система';.Cells[0,12]:='Конфигурация компьютера';.Cells[0,13]:='Наличие
приставки';.Cells[0,14]:='Любимая игра';.Cells[0,15]:='Информация о любимой
игре';.Cells[0,16]:='Трача денег на игры';.Cells[0,17]:='Любимый
фильм';.Cells[0,18]:='Информация о себе';
selectInfo;('Не найдено данных!');.Enabled:=false;.Enabled:=false;;;TInfoForm.PriorButtonClick(Sender:
TObject);.prior;;;TInfoForm.NextButtonClick(Sender:
TObject);.next;;;TInfoForm.Button1Click(Sender: TObject);:integer; //счетчик:=1;.Last;(strtoint(edit1.text)<=ado.FieldByName('id').AsInteger)and(strtoint(edit1.text)>0)
then.First;i<strtoint(edit1.text) do.Next;:=i+1;;; end else('Введите правильное значение номера
анкеты!');.clear;;;TInfoForm.CloseButtonClick(Sender:
TObject);.Release;;.