Каждый должен быть знаком с онлайн-опросами. Пользователям даются вопрос и несколько ответов, затем результаты сохраняются в базе данных, автоматически выполняется статистика и, наконец, предоставляется статистический график. В этом выпуске подписывайтесь на меня и создайте систему онлайн-опросов.
1. Функциональный дизайн.
Нужно ли проектировать такую простую систему функционально? Некоторым людям это может показаться странным, но, несмотря на это, независимо от того, что это за система, если вы сначала займетесь функциональным проектированием, вы всегда сможете получить более четкое представление о системе. Давайте посмотрим, на что способны онлайн-опросы. Выше упоминалась основная функция: задать вопрос и несколько ответов, затем составить статистику и, наконец, построить график. Исходя из этого, мы можем рассмотреть возможность добавления периода времени (срока действия) к опросу. В течение этого периода времени опрос действителен. По истечении этого периода опрос автоматически завершится. Кроме того, мы можем указать, что пользователь может отправлять ответы только один раз за раз. Если вы хотите ввести более строгие ограничения, вы можете указать, что IP-адрес может отправить ответ только один раз. Однако это может позволить отправить ответ только одному человеку в интернет-кафе. Что касается вопросов опроса, некоторые из них могут быть вопросами с одним выбором, а некоторые могут быть вопросами с несколькими вариантами ответов. Наконец, поговорим о статистическом графике. На статистическом графике должны быть показаны ответы, количество проголосовавших за каждый ответ и доля голосов за каждый ответ. Как правило, достаточно использовать горизонтальную диаграмму, которую проще реализовать. Конечно, если вы хотите изменить ее на вертикальную диаграмму, вы также можете это сделать.
Теперь, основываясь на вышеизложенном, функции онлайн-опроса суммируются следующим образом:
1. Данные сохраняются в базе данных ACCESS 2000.
2. Каждый пользователь может проголосовать один раз за посещение
.3. Статистика каждого опроса предоставляется и отображается вместе с ним; статистические диаграммы
4. Каждый опрос имеет срок действия и автоматически завершается после истечения срока действия. Можно просмотреть только результаты завершенных опросов.
5. Администраторы могут добавлять опросы и изменять ответы на опросы (добавлять, изменять, удалять, изменять тип).
6. Для опросов, которые завершились, администраторы могут только удалить опрос, но не могут изменить ответы.
7. Администратор только один (один пользователь)
2. Проектирование базы данных
Теперь спроектируем базу данных. Согласно функциональным требованиям должно быть не менее трех таблиц, одна таблица администратора, вторая таблица опроса и таблица. в-третьих, таблица результатов опроса. Имя файла базы данных — Survey.mdb, его можно изменить на .asp. В этом случае внесите соответствующие изменения в программу ASP.
Таблица 1. Имя таблицы администратора: управление
-------------------------------------------------- ---------------
Описание длины типа поля
-------------------------------------------------- ---------------
автоматическая нумерация Manage_id — здесь не используется, будет расширена в будущем
Manage_username Текст 15 Имя пользователя администратора
Manage_password Текст 15 Пароль администратора
-------------------------------------------------- ---------------
После создания таблицы управления добавьте новую запись и введите имя пользователя и пароль администратора. Здесь вы заполняете
таблицу xmxoxo 2. Имя таблицы опроса: опрос.
-------------------------------------------------- ---------------
Описание длины типа поля
-------------------------------------------------- ---------------
автоматическая нумерация Survey_id – инкрементная, первичный ключ, индексированная, без дублирования
Survey_question текст 255 вопрос опроса
Survey_type ли — тип, нет: одиночный выбор да: множественный выбор
Survey_stime date — длинная дата, время начала
Survey_etime date — длинная дата, время окончания
-------------------------------------------------- ---------------
Таблица 3. Форма завершения опроса Название таблицы: Survey_vote
------------------------- ------ ----------------------------------------
Описание длины типа поля
-------------------------------------------------- ---------------
voice_no автоматическая нумерация - возрастающая, первичный ключ, индексированная и без дублирования
voice_id длинное целое число — индексируется и повторяется, десятичный знак 0
voice_answer Текст 100 ответов на опрос
voice_count long - количество голосов
-------------------------------------------------- ---------------
Среди них таблица Survey_vote и поле id таблицы опроса имеют отношение многие-к-одному. Нет необходимости устанавливать эти отношения, но установление отношений сделает идеи более ясными.
3.Здесь не так много функций, используемых для
включения файлов
. Они в основном используются для работы с базой данных. Если вы хотите предотвратить ввод HTML и других кодов, просто используйте server.htmlencode для его обработки, поэтому нет необходимости. специальная функциядля обработки. Мы можем продолжить использовать включенные файлы из предыдущей статьи «Научитесь у меня» серии «Научитесь у меня делать древовидное меню».
Файл общей функции, имя файла: inc.asp
<%
''************************************************ *******************
''Общая функция ASP базы данных
''************************************************ *******************
''Константы базы данных
Databasename="survey.mdb" ''Имя базы данных, если вы измените имя, просто измените его здесь
''************************************************ *******************
''Открыть базу данных
суб opendb (подключение)
set Connect=server.CreateObject("ADODB.connection")
Connect.ConnectionString="DRIVER={Драйвер Microsoft Access (*.mdb)}; DBQ=" &_
server.MapPath(имя базы данных)
Connect.Открыть strconn
конец субтитра
''************************************************ *******************
''Закрыть базу данных
саб закрыт (подключиться)
подключить.закрыть
установить соединение = ничего
конец субтитра
''************************************************ *******************
''Открыть одну таблицу для чтения
вспомогательная открытая таблица (connect, tbname, myrs)
set myrs=server.createobject("ADODB.recordset")
rssql="выбрать * из" и имя_таблицы
myrs.open rssql,connect,1,1
конец субтитра
''************************************************ *******************
''Закрываем временную таблицу
дополнительный шкаф(ы)
RS.закрыть
установить rs=ничего
конец субтитра
''************************************************ *******************
''Запрос к базе данных
дополнительная таблица поиска (connect, sql, rs)
set rs=server.createobject("ADODB.recordset")
rs.open sql,connect,1,1
конец подзаголовка
''********************************************* *********************
''Запросить и изменить базу данных
дополнительная таблица изменений (connect,sql,rs)
set rs=server.createobject("ADODB.recordset")
rs.open sql,connect,1,3
конец подзаголовка
''********************************************* *********************
''Отображение информации для отладки
Sub w(сообщение)
ответ.написать сообщение
конец подзаголовка
''********************************************* *********************
''Прерывание программы для отладки
субпользовательстоп()
ответ.конец
конец субтитра
%>
4. Дизайн документа
Согласно традиционному подходу, мы всегда разделяем онлайн-опросы на три части: первая — отображение анкеты; вторая — отображение статистических результатов опроса; третья — управление фоном. В практических приложениях мы обнаружим, что анкета часто отображается на определенной веб-странице, а результаты обычно отображаются во всплывающем окне. Управление серверной частью осуществляется через другую ссылку или форму входа. Чтобы удобнее было пользоваться онлайн-опросом, мы написали часть отображения анкеты в виде JS-скрипта, чтобы веб-страница, на которой необходимо отобразить анкету, могла свободно вызывать ее, ссылаясь на скрипт. Хорошо, давайте посмотрим на дизайн файла
1. Inc.asp включает в себя файл. Основная библиотека функций
2, Surveycode.asp отображает программу анкетирования. Используйте скрипт на главной веб-странице, чтобы вызвать его.
3. Программа опроса Survey.asp. Перечисляет статус всех расследований.
4. Survey_vote.asp — это программа, которая отображает статистические результаты опроса. Приведите параметры, представляющие исследуемые вопросы.
5. Программа управления Survey_manage.asp.
Здесь мы пропустили дизайн страницы, поскольку дизайн стиля — это не то, о чем мы говорим, поэтому, что касается стиля, макета, CSS и т. д. веб-страницы, пожалуйста, создавайте его сами.
5. Поток файлов.
Сначала запишите основной поток программы, чтобы его было легче модифицировать, расширять и переносить в будущем. Здесь важнее то, какие подпрограммы писать в программе и как эти подпрограммы расположить.
1. Surveycode.asp отображает форму опроса
<%
''Получите параметр строки запроса, id представляет номер опроса
''Определить корректность параметров
«Определить, находится ли расследование в пределах срока действия.
''Прочитайте вопрос опроса, введите
''Вывод ответов на опрос и создание формы опроса
''Закрыть базу данных и таблицы
%>
2. Survey.asp отображает весь статус опроса
<%
''Читать базу данных
%>
<html>
''Показать все статусы опросов и добавить ссылки
</html>
3. Survey_vote.asp отображает статистические результаты.
Здесь есть две функции: одна — отображать без отправки, а другая — вести статистику после отправки ответа, а затем отображать результат. Если параметров нет, это первый способ. Это также можно сделать в двух файлах.
<%
''Получить параметры. id представляет номер опроса. Все данные поступают из формы.
''Определите, есть ли параметры, если да, то сначала выполните статистику
''Если нет, то оно будет отображаться напрямую.
''Статистическая подпрограмма
%>
<html>
''Показать подпрограмму
</html>
4. Программа управления Survey_manage.asp.
Часть управления более сложна и требует реализации большего количества функций. Сначала перечислим функции управления:
1) Вход администратора. Управление возможно только после входа в систему
. 2) Выйдите из системы. Выйдите безопасно, когда закончите управление.
Управление опросами включает в себя:
3) Добавить опрос. Также добавьте ответы на опрос
. 4) Измените опрос. Изменить содержание, время, тип, содержание ответов на опрос, добавить, удалить
5) Удалить опрос. Текущий опрос невозможно удалить.
Спроектируйте свой процесс для этих функций
<%
''Получить параметры. Action представляет собой действие, соответствующее вышеуказанным функциям.
''Перенаправление на соответствующую подпрограмму в соответствии с действием
''Подпрограмма входа в систему
''Выходим из процедуры входа в систему
''Выполнить подпрограмму добавления вопросов опроса
''Выполнить подпрограмму добавления ответов на опрос
''Выполните измененную подпрограмму опроса, чтобы одновременно изменить вопросы и ответы
''Выполнить процедуру удаления вопроса опроса
''Выполнить подпрограмму удаления ответа на опрос
<html>
<%
'' Определите, вошли ли вы в систему, если нет, отобразите форму входа.
''Показать соответствующую форму на основе действия
''Показать все подпрограммы опроса
''Показывает одну подпрограмму опроса. Вопросы и ответы отображаются вместе
''Показать добавленную подпрограмму расследования.
''Показать форму входа
%>
</html>
6. Написание кода
После завершения проектирования процесса написание кода станет более организованным. Начнем с простого. Прежде чем писать код, нам необходимо внести некоторые записи в базу данных для тестирования. Сначала добавьте вопрос опроса, несколько ответов на опрос и вручную введите некоторую статистическую информацию.
Давайте сначала напишем Surveycode.asp для отображения формы опроса. Этот файл нужно вызывать на других страницах, поэтому мы пишем его смешанным способом на JS и VBS. При вызове вы можете поместить его в форму и использовать следующий оператор:
<SCRIPT Language="JavaScript" SRC="surveycode.asp?id=1"></SCRIPT>
Прежде чем отображать форму, выполните описанный выше процесс. определить, существует ли расследование и продолжается ли оно. Кроме того, в форме необходимо указать скрытый параметр, представляющий номер вопроса (id) опроса. При отправке ответа номер ответа voice_no,
имя файла Surveycode.asp
<!--#include file="inc. жерех" -->
<%
id=request.querystring("id")
if id<>"" then ''если есть параметры
opendb my '' подключиться к базе данных
sql="выбрать * из опроса, где Survey_id="& id ''оператор запроса
searchtable my,sql,rs ''База данных запросов
если не rs.eof, то ''Если есть запись о расследовании
вопрос=rs("survey_question") ''Прочитать вопрос
Surveytype=rs("survey_type") ''Читать тип ответа
stime=rs("survey_stime") ''Читать время начала
etime=rs("survey_etime") ''Читать время окончания
closetable rs ''Закрыть таблицу
if stime<now() и etime>now() then ''если расследование продолжается
''Выведите форму опроса ниже
''Сначала выведите форму и вопросы, затем отправьте форму на Survey_vote.asp
%>
document.write("<form action=''survey_vote.asp'' target=''_blank'' метод=''post''>");
document.write("<table border=''1'' cellpadding=''2'' cellpacing=0'' bordercolorligh=''#000000''");
document.write(" bordercolordark=''#ffffff'' width=''100%'' align=''center''><tbody>");
document.write("<tr><td colspan=''2'' align=''center''><b><%=server.htmlencode(question)%></b></td></tr >");
<%
sql="select voice_no,vote_ответ из Survey_vote, где voice_id="&id ''SQL для запроса ответа
searchtable my,sql,rs ''Выполнить запрос
if not rs.eof then ''Если есть ответ, выведите его
для i=1 до rs.recordcount
%>
document.write("<tr><td align=''right''><input name=''res'' type=''");
<%
if Surveytype then ''Оцените тип, отобразите одиночный выбор или множественный выбор
%>
document.write("флажок");
<%else%>
document.write("радио");
<%end if ''Следующее предложение выводит текст ответа и отправленное значение (vote_no)%>
document.write("'' value=<%=rs("vote_no")%>></td><td><%=rs("vote_answer")%></td></tr>");
<%
rs.movenext
следующий
''Следующие предложения выводят скрытый параметр и передают номер вопроса (id)
'' и используйте функцию JS для определения ссылки после нажатия для просмотра
%>
document.write("<tr><td colspan=''2'' align=''center''><input type=''hidden'' name=''id'' value=''<%=id% >''>");
document.write("<input type=''submit'' class=button value=''vote''> ");
document.write("<input type=button class=button value=''View'' onclick=''jump(<%=id%>)''>");
document.write("</td></tr></tbody></table></form>");
функция jump(id){
window.open("survey_vote.asp?id="+id,"survey")
}
<%
конец, если
конец, если
конец, если
шкафчики
закрыто мое
конец, если
%>
После завершения Surveycode.asp мы определили следующие моменты реализации:
1. В Survey_vote.asp, если идентификатор параметра строки запроса имеет значение, результат просматривается.
2. В Survey_vote.asp, если параметр формы; Если идентификатор имеет значение, сначала необходимо выполнить статистику;
3. В Survey_vote.asp отправленный параметр формы res — это номер ответа voice_no
7. Статистические результаты
Сначала мы завершим отображение статистических результатов Survey_vote, что наиболее важно; тесно связан с файлами Surveycode.asp.asp. В конце предыдущей статьи мы объяснили некоторые параметры, определенные в Surveycode.asp.
Статистические результаты Survey_vote.asp
<!--#include file="inc.asp" -->
<html>
<голова>
<title>Статистика опроса</title>
<link rel="stylesheet" href="main.css" type="text/css">
</голова>
<тело>
<%
''В предыдущем предложении сначала добавьте включаемый файл и укажите функцию.
id=request.querystring("id") ''Получить идентификатор параметра строки запроса
opendb my '' подключиться к базе данных
if id="" then ''Если нет, вы не смотрите на результат напрямую.
id=request.form("id") ''Получить идентификатор параметра формы
if id<>"" then ''Если есть значение, его необходимо сначала посчитать
Surveycount() ''Вызов статистической подпрограммы
конец, если
конец, если
если id<>"" тогда
disp_survey() ''Независимо от того, что это будет, результат будет отображен в конце
конец, если
closeb моя ''Закрыть базу данных
''-----Статистическая подпрограмма-----
вспомогательный счетчик опросов()
if session("survey_ok")="" then ''Если вы еще не проголосовали
no=request.form("res") ''Получить номер ответа
если нет<>"" то
''Определите операторы SQL, чтобы увеличить количество отправленных ответов на 1
sql="update Survey_vote set voice_count=vote_count+1 где voice_no= in (" & no &")"
мой.execute sql
конец, если
сеанс("survey_ok")="ок"
конец, если
конец субтитра
''----
''---Подпрограмма отображения результата---
sub disp_survey()
''Определение операторов SQL для получения вопросов опроса
sql="выберите Survey_question из опроса, где Survey_id=" и идентификатор
searchtable my,sql,rs ''Выполнить запрос
вопрос=rs("survey_question") ''Сохраняем вопрос в вопрос
closetable rs ''Закрыть таблицу
''Определите оператор SQL и получите общее количество ответов
sql="выберите сумму(vote_count) как общую сумму из Survey_vote, где voice_id="& id
таблица поиска my,sql,rs
итог = rs («всего»)
closetable rs ''закрыть таблицу
'' определяет оператор SQL и получает все части текста ответа и номера голосов
sql="выберите voice_ответ,vote_count из Survey_vote, где voice_id=" и идентификатор
searchtable my,sql,rs ''Выполнить запрос
''Следующее использует таблицы для вывода статистических таблиц
%>
<table width="500" border="1" align="center" cellpadding="2" cellpacing="0"
bordercolorligh="#000000" bordercolordark="#ffffff">
<тр>
<td colspan="4" align="center"><b>Статистика опроса</b></td>
</tr>
<тр>
<td colspan="4"><b>Вопрос опроса: <%=question%></b></td>
</tr>
<тр>
<td width="150" align="center" height="20">Ответ</td>
<td width="150" align="center" height="20">Явка избирателей</td>
<td width="100" align="center" height="20">Пропорция</td>
<td width="100" align="center" height="20">Количество голосов</td>
</tr>
<%do, пока не rs.eof
если итог = 0, то
процент=0 ''Если никто не голосует, процент равен 0
еще
процент=int(rs("vote_count")/total*10000)/100 ''Рассчитать процент
конец, если
%>
<тр>
<td width="150" align="center"><%=rs("vote_answer")%></td>
<td width="150" align="left">
<table border="0" width="<%=percent%>" bgcolor="#CCCC00" height="10">
<тр>
<тд></тд>
</tr>
</таблица>
</td>
<td width="100" align="center"><%=percent%>%</td>
<td width="100" align="center"><%=rs("vote_count")%></td>
</tr>
<%
rs.movenext
петля
%>
<тр>
<td colspan="4"> На <%=now()%> имеется <%=total%> голосов
<a href="javascript:window.close()">Закрыть окно</a>
</td>
</tr>
</таблица>
<%
closetable rs ''Закрыть таблицу
конец субтитра
''------------------
%>
</тело>
</html>
В процессе отображения голосования мы используем переменную сеанса Survey_ok, чтобы указать, был ли голос подан. Кроме того, эта статистика отображения относится к файлам CSS для управления стилем таблицы. Вы можете добавить ее самостоятельно в соответствии со своими требованиями.
8. Перечислите статусы всех опросов
. Теперь давайте заполним файл Survey.asp. Его основная задача — вывести список статусов всех опросов, включая:
1. Вопросы опроса, связанные со страницей формы голосования (написанные непосредственно на этой странице)
; Время начала опроса;
3. Время окончания опроса;
4. Статус опроса: не начат, в процессе, завершен;
5. Количество голосов в опросе;
6. Тип опроса, одиночный; выбор или множественный выбор;
7. Также укажите ссылку для просмотра результатов голосования
в соответствии с этими требованиями, просто запросите соответствующую таблицу. Некоторые операторы, такие как получение общего количества голосов, фактически написаны в Survey_vote. асп выше.
Перечислите статус всех опросов Survey.asp
<!--#include file="inc.asp" -->
<html>
<голова>
<title>Список онлайн-опросов</title>
<link rel="stylesheet" href="main.css" type="text/css">
</голова>
<тело>
<%
id=request.querystring("id") ''Получить параметры
if id<>"" then ''Если есть параметры, отобразите эту форму опроса
response.write "<SCRIPT Language=''JavaScript'' SRC=''surveycode.asp?id="&id&"''></SCRIPT>"
else '' В противном случае вызовите подпрограмму для отображения статуса
дисстат()
end if
''-----Отображение статуса функции----
субдисстат()
opendb my '' подключиться к базе данных
opentable my,"survey",rs ''Открыть таблицу напрямую
''Далее используется таблица для отображения каждой записи
''Сначала показывать заголовок
%>
<table width="760" border="1" cellpacing="0" cellpadding="2"
align="center" bordercolorligh="#000000" bordercolordark="#ffffff">
<тр>
<td colspan="8" align="center"><b>Список онлайн-опросов</b></td>
</tr>
<тр>
<td width="50" align="center" height="20">Число</td>
<td width="200" align="center" height="20">Вопросы опроса</td>
<td width="50" align="center" height="20">Тип</td>
<td width="140" align="center" height="20">Время начала</td>
<td width="140" align="center" height="20">Время окончания</td>
<td width="50" align="center" height="20">Статус</td>
<td width="80" align="center" height="20">Количество поданных голосов</td>
<td width="50" align="center" height="20">Просмотр</td>
</tr>
<%
''Выведите каждую запись ниже
делай, пока не rs.eof
''Сначала прочтите каждое поле
id=rs("идентификатор_опроса")
вопрос = rs («survey_question»)
''Тип чтения
если rs("тип_опроса") тогда
stype="Множественный выбор"
еще
stype="одиночный выбор"
конец, если
stime=rs("survey_stime")
etime=rs("survey_etime")
'' Статус решения
если сейчас()<время тогда
стат="не запущено"
еще
если сейчас<евремя тогда
стат="в процессе"
еще
стат="Завершено"
конец, если
end if
''Определите оператор SQL и получите общее количество ответов
sql="выберите сумму(vote_count) как общую сумму из Survey_vote, где voice_id="& id
таблица поиска мой,sql,tmprs ''запрос
итог = tmprs («всего»)
closeable tmprs ''Закрыть таблицу
''Выведите запись ниже
%>
<тр>
<td align="center" height="20"><%=id%></td>
<td высота="20">
<a href="survey.asp?id=<%=id%>"><%=question%></a>
</td>
<td align="center" height="20"><%=stype%></td>
<td align="center" height="20"><%=stime%></td>
<td align="center" height="20"><%=etime%></td>
<td align="center" height="20"><%=stat%></td>
<td align="center" height="20"><%=total%></td>
<td align="center" height="20">
<a href="survey_vote.asp?id=<%=id%>" target="_blank">Просмотреть</a>
</td>
</tr>
<%
rs.movenext ''Перейти к следующему элементу, цикл
петля
%>
</таблица>
<%
closetable rs ''Закрыть таблицу
closeb my ''Закрыть базу данных
конец субтитра
''----------------------
%>
</тело>
</html>
9. Управление серверной частью
На странице управления серверной частью Survey_manage.asp мы уже перечислили функции управления, которых она хочет достичь. Процесс управления заключается в том, чтобы сначала отобразить все расследования, которые еще не начались, вы можете изменить или удалить их; для завершенных расследований вы можете удалить их, но не можете изменить, для текущих расследований вы можете изменить только их завершение; время. Для представления действия используйте один параметр действия, смысл следующий:
1. Без параметров. Указывает первый раз для входа, отображение формы входа
2, вход в систему означает выполнение входа в систему
3, выход из системы означает выполнение выхода из системы
4, showaddquestion означает отображение дополнительного опроса
5, showsurvey означает отображение опроса
6, doaddsurvey означает выполнение добавление опроса
7, doaddanswer означает выполнение «Добавить ответ»
8. dodelsurvey означает удаление опроса
9. dodelanswer означает удаление ответа
10. domodify означает изменение опроса и ответа