开发工具:eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
<td>结束时间:</td>
<td><input id="add_end_time" style="width: 200px; height: 30px;" class="easyui-datetimebox" type="text" name="endTime" data-options="required:true, missingMessage:'不能为空'" /></td>
</tr>
<tr>
<td>主题介绍:</td>
<td>
<textarea id="info" name="info" style="width: 260px; height: 160px;" class="" ></textarea>
</td>
</tr>
</table>
</form>
</div>
<!-- 编辑窗口 -->
<div id="editDialog" style="padding: 10px">
<form id="editForm" method="post">
<input type="hidden" id="edit-id" name="id">
<table cellpadding="8" >
<tr>
<td>主题名称:</td>
<td><input id="edit_name" style="width: 200px; height: 30px;" class="easyui-textbox" type="text" name="name" data-options="required:true, missingMessage:'不能为空'" /></td>
</tr>
<tr>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">购物车</div>
<div class="code">&#xe670;</div>
<div class="fontclass">.Hui-iconfont-cart2-selected</div>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">购物车满</div>
<div class="code">&#xe672;</div>
<div class="fontclass">.Hui-iconfont-cart2-man</div>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">购物车空</div>
<div class="code">&#xe673;</div>
<div class="fontclass">.Hui-iconfont-card2-kong</div>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">购物车-选中</div>
<div class="code">&#xe6b8;</div>
<div class="fontclass">.Hui-iconfont-cart-selected</div>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">购物车</div>
<div class="code">&#xe6b9;</div>
vote.setCreateTime(new Date(System.currentTimeMillis()));
if(voteService.add(vote) <= 0){
ret.put("type", "error");
ret.put("msg", "投票失败!");
return ret;
}
if(subjectItemService.addOneVote(subjectItemId) <= 0){
ret.put("type", "error");
ret.put("msg", "投票子项修改失败!");
return ret;
}
if(subjectService.addOneVote(subjectId) <= 0){
ret.put("type", "error");
}
@RequestMapping(value="/reset_pwd",method=RequestMethod.POST)
@ResponseBody
public String resetPwd(String newPwd,Long id){
User user = userService.findUserById(id);
if(user == null)return "no";
if(StringUtils.isEmpty(newPwd))return "no";
user.setPassword(newPwd);
if(userService.changePwd(user) <= 0)return "no";
ret.put("msg", "添加失败!");
return ret;
}
ret.put("type", "success");
return ret;
}
@RequestMapping(value="/edit",method=RequestMethod.POST)
@ResponseBody
public Map<String,Object> edit(SubjectItem subjectItem){
<div class="name">节日</div>
<div class="code">&#xe655;</div>
<div class="fontclass">.Hui-iconfont-jieri</div>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">排序</div>
<div class="code">&#xe675;</div>
<div class="fontclass">.Hui-iconfont-paixu</div>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">匿名</div>
{field:'status',title:'状态',width:150,formatter: function(value,row,index){
switch(value){
case 1:{
return '正常';
}
case 0:{
return '禁用';
}
default:{
return '未知';
}
}
}},
{field:'createTime',title:'创建时间',width:150,formatter: function(value,row,index){
return formatterDate(value);
}},
]],
toolbar: "#toolbar"
});
<body>
<h3>编辑器演示</h3>
<ol>
<li><a href="default.html" target="_blank">default.html</a> (默认模式)</li>
<li><a href="simple.html" target="_blank">simple.html</a> (简单模式)</li>
<li><a href="dynamic-load.html" target="_blank">dynamic-load.html</a> (异步加载)</li>
<li><a href="multi-language.html" target="_blank">multi-language.html</a> (多语言)</li>
<li><a href="readonly.html" target="_blank">readonly.html</a> (只读模式)</li>
<li><a href="newline.html" target="_blank">newline.html</a> (回车换行设置)</li>
<li><a href="word-count.html" target="_blank">word-count.html</a> (统计字数)</li>
<li><a href="filter-mode.html" target="_blank">filter-mode.html</a> (关闭HTML过滤)</li>
<li><a href="url-type.html" target="_blank">url-type.html</a> (URL设置)</li>
<li><a href="paste-type.html" target="_blank">paste-type.html</a> (粘贴设置)</li>
<li><a href="auto-height.html" target="_blank">auto-height.html</a> (自动调整高度)</li>
<li><a href="custom-theme.html" target="_blank">custom-theme.html</a> (自定义风格)</li>
<li><a href="qqstyle.html" target="_blank">qqstyle.html</a> (自定义风格 仿QQ邮箱)</li>
<li><a href="custom-plugin.html" target="_blank">custom-plugin.html</a> (自定义插件)</li>
</ol>
<h3>使用其它类库</h3>
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
hash.put("is_dir", false);
hash.put("has_file", false);
hash.put("filesize", file.length());
hash.put("is_photo", Arrays.<String>asList(fileTypes).contains(fileExt));
hash.put("filetype", fileExt);
}
hash.put("filename", fileName);
hash.put("datetime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.lastModified()));
fileList.add(hash);
}
}
<li> <i class="icon Hui-iconfont"></i>
<div class="name">礼物</div>
<div class="code">&#xe6bb;</div>
<div class="fontclass">.Hui-iconfont-liwu</div>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">优惠券</div>
<div class="code">&#xe6b6;</div>
<div class="fontclass">.Hui-iconfont-youhuiquan</div>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">红包</div>
<div class="code">&#xe6b7;</div>
<div class="fontclass">.Hui-iconfont-hongbao</div>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">优惠券</div>
<div class="code">&#xe6ca;</div>
<div class="fontclass">.Hui-iconfont-hongbao2</div>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">资金</div>
<div class="code">&#xe63a;</div>
<div class="fontclass">.Hui-iconfont-money</div>
overlay : true,
ok : true,
onClosed : function() {
//location.reload();
}
});
$this.children("span.btn-txt").text("您已投票");
$this.attr('voted','true');
$this.css({background:'#e6e6e6',color:'black'});
var label = caption.find("label.vote-label");
var total = parseInt(caption.find("span.total-span").text());
caption.find("span.total-span").text(total);
label.each(function(i,e){
var voteNum = $(e).attr('data-val');
$(e).children("span.item-title").text($(e).children("span.item-title").text() + '(' + voteNum + '):');
$(e).children("input.vote-item").remove();
var per = parseFloat(voteNum)/parseFloat(total) * 100;
$(e).children("span.item-per").css({width:per + "%",background:"#FFA500"});
self.hideMenu();
}
self.clickToolbar(name, function() {
var menu = self.createMenu({
name : name,
width : 150
});
menu.addItem({
title : '红底白字',
click : function() {
click('red');
}
});
menu.addItem({
title : '绿底白字',
click : function() {
click('green');
}
});
menu.addItem({
collapsible: false,
minimizable: false,
maximizable: false,
draggable: true,
closed: true,
buttons: [
{
text:'添加',
plain: true,
iconCls:'icon-add',
handler:function(){
var validate = $("#addForm").form("validate");
if(!validate){
$.messager.alert("消息提醒","请检查你输入的数据!","warning");
return;
} else{
//var gradeid = $("#add_gradeList").combobox("getValue");
$.ajax({
type: "post",
url: "add",
data: $("#addForm").serialize(),
dataType:"json",
queryMap.put("pageSize", 99);
List<Subject> findByRelation = subjectService.findByRelation(queryMap);
if(findByRelation == null || findByRelation.size() == 0){
ret.put("type", "error");
ret.put("msg", "未找到符合的投票主题!");
return ret;
}
Subject subject = findByRelation.get(0);
List<String> subjectNameList = new ArrayList<String>();
List<Integer> voteNumberList = new ArrayList<Integer>();
for(SubjectItem subjectItem:subject.getSubjectItems()){
subjectNameList.add(subjectItem.getTitle());
voteNumberList.add(subjectItem.getVoteNumber());
}
ret.put("type", "success");
ret.put("name", subject.getName());
ret.put("subjectNameList", subjectNameList);
ret.put("voteNumberList", voteNumberList);
return ret;
}
}
//修改按钮监听事件
$("#edit-btn").click(function(){
var selectRow = $("#dataList").datagrid("getSelected");
//console.log(selectRow);
if(selectRow == null){
$.messager.alert("消息提醒", "请选择数据进行修改!", "warning");
return;
}
$("#editDialog").dialog("open");
});
//设置编辑班级窗口
$("#editDialog").dialog({
title: "编辑主题",
width: 500,
height: 500,
iconCls: "icon-add",
modal: true,
collapsible: false,
minimizable: false,
maximizable: false,
}
model.addObject("voteList", ret);
model.setViewName("home/vote_history_list");
model.addObject("singleType", "SINGLE");
model.addObject("muilteType", "MUILTE");
model.addObject("nowTime", System.currentTimeMillis());
return model;
}
@RequestMapping(value="/add_vote",method=RequestMethod.POST)
@ResponseBody
public Map<String, String> addVote(
@RequestParam(name="subjectId",required=true) Long subjectId,
@RequestParam(name="subjectItemIds",required=true) String subjectItemIds,
HttpServletRequest request
){
</body>
</html>
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Custom Plugin Examples</title>
<style>
form {
margin: 0;
}
textarea {
display: block;
}
.ke-icon-example1 {
background-image: url(../themes/default/default.gif);
background-position: 0px -672px;
width: 16px;
height: 16px;
}
.ke-icon-example2 {
background-image: url(../themes/default/default.gif);
private VoteService voteService;
@RequestMapping(value="/list",method=RequestMethod.GET)
public ModelAndView index(ModelAndView model){
model.setViewName("admin/vote/list");
return model;
}
@RequestMapping(value="/get_list",method=RequestMethod.GET)
@ResponseBody
public Map<String,Object> list(@RequestParam(value="username", required=false,defaultValue="") String username,
@RequestParam(value="subjectName", required=false,defaultValue="") String subjectName,
@RequestParam(value="subjectItemTitle", required=false,defaultValue="") String subjectItemTitle,
Page page
){
Map<String,Object> queryMap = new HashMap<String,Object>();
queryMap.put("username", "%" + username + "%");
queryMap.put("subjectName", "%" + subjectName + "%");
hash.put("is_dir", true);
hash.put("has_file", (file.listFiles() != null));
hash.put("filesize", 0L);
hash.put("is_photo", false);
hash.put("filetype", "");
} else if(file.isFile()){
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
hash.put("is_dir", false);
hash.put("has_file", false);
hash.put("filesize", file.length());
hash.put("is_photo", Arrays.<String>asList(fileTypes).contains(fileExt));
hash.put("filetype", fileExt);
}
hash.put("filename", fileName);
hash.put("datetime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.lastModified()));
fileList.add(hash);
}
}
if ("size".equals(order)) {
Collections.sort(fileList, new SizeComparator());
} else if ("type".equals(order)) {
Collections.sort(fileList, new TypeComparator());
} else {
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/admin/vote_stats")
public class VoteStatsController {
@Autowired
private SubjectService subjectService;
@Autowired
private SubjectItemService subjectItemService;
@Autowired
private VoteService voteService;
@RequestMapping(value="/list",method=RequestMethod.GET)
public ModelAndView index(ModelAndView model){
Map<String, Object> queryMap = new HashMap<String, Object>();
queryMap.put("name", "%%");
queryMap.put("startIndex", 0);
});
});
//修改按钮监听事件
$("#edit-btn").click(function(){
var selectRow = $("#dataList").datagrid("getSelected");
//console.log(selectRow);
if(selectRow == null){
$.messager.alert("消息提醒", "请选择数据进行修改!", "warning");
return;
}
$("#editDialog").dialog("open");
});
//设置编辑班级窗口
$("#editDialog").dialog({
title: "编辑主题",
width: 500,
height: 500,
<div class="code">&#xe67c;</div>
<div class="fontclass">.Hui-iconfont-share-douban</div>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">朋友圈</div>
<div class="code">&#xe693;</div>
<div class="fontclass">.Hui-iconfont-share-pengyouquan</div>
</li>
<li> <i class="icon Hui-iconfont"></i>
<div class="name">微信</div>
<div class="code">&#xe694;</div>
} else {
cmd.wrap('<span class="' + value + '"></span>');
}
cmd.select();
self.hideMenu();
}
self.clickToolbar(name, function() {
var menu = self.createMenu({
name : name,
width : 150
});
menu.addItem({
title : '红底白字',
click : function() {
click('red');
}
});
menu.addItem({
title : '绿底白字',
click : function() {
click('green');
}
});
});
//设置分页控件
var p = $('#dataList').datagrid('getPager');
$(p).pagination({
pageSize: 10,//每页显示的记录条数,默认为10
pageList: [10,20,30,50,100],//可以设置每页记录条数的列表
beforePageText: '第',//页数文本框前显示的汉字
afterPageText: '页 共 {pages} 页',
displayMsg: '当前显示 {from} - {to} 条记录 共 {total} 条记录',
});
//设置工具类按钮
$("#add").click(function(){
$("#addDialog").dialog("open");
});
//删除
$("#delete").click(function(){
var selectRow = $("#dataList").datagrid("getSelected");
//console.log(selectRow);
if(selectRow == null){
* 验证码生成器
*
* @author llq
*/
public class CpachaUtil {
/**
* 验证码来源
*/
final private char[] code = {
'2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F',
'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R',
运行环境
Java≥8、Tomcat≥7.0、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
技术框架
JavaBean MVC JSP SSM(Spring SpringMVC MyBatis) MySQL EasyUI jQuery Ajax
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
投票管理系统,分为前端和后台管理模块
前端用户可以登录注册、查看投票信息,登录后可以进行投票,也可以查看自己的历史投票记录
后台管理模块管理员登录后可以管理用户信息、管理投票主题和子项、查看投票详情、查看投票图表统计信息等
目前投票方式支持单选只能投一次、单选一天只能投一次、多选只能投一次、多选一天只能投一次等四种方式,投票主题可以设置开始和结束时间,结束后不能再进行投票
前台
后台
↖[获取源码方式]见左侧