-
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
2019-11-17 14:08:36听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目...第一幕:缘起
听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员……
996程序员做的梦:
第一场:团队招募
为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。
话说还是中国电信的信号好,地府都是满格,哈哈!!!
经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下?
而这次,面对这样的需求,这个程序员也是虎躯一震,本来想拒绝的,不过做不完就不让回去,而且,貌似这也是他报仇的好机会啊!
产品同学也被勾下来了。。
第二场:研发过程中的新需求
项目开发过程中,阎罗王发来了一个消息:
第三场:程序员还阳
项目进行中,程序员偷偷地在系统上留了一个后门,不仅回到了阳间,还将自己的寿命修改为+∞。
地府中留下的,是产品经理孤寂的身影。
这个故事告诉我们,做产品的,不能提太多的需求,也不能完全不懂技术,否则,可能会死的不明不白的。
第二幕:地府管理2.0研发
地府管理系统项目上线后,阎王尝到了很大的甜头,地府工作效率提高了很多倍,于是,“地府2.0计划”紧锣密鼓的开始了。
越是,不少人做梦,都梦见自己死了……
设计师:
昨晚做梦梦到我死了,进了阎王殿
阎王爷让我给他的地府做一张宣传海报
HR:
昨晚做梦梦到我死了,进了阎王殿
阎王爷让我给他考核一下地府在职人员的业绩
文案:
昨晚做梦梦到我死了,进了阎王殿
阎王爷让我给他写一篇能够提升转化的软文
物流管理:
昨晚做梦梦到我死了,进了阎王殿
阎王爷让我给他优化一下投胎的流程
交互设计师:
昨晚做梦梦到我死了,进了阎王殿
阎王爷让我给他优化一下油锅的体验
第三幕:地府大数据
为了应对日益增大的业务,地府管理系统3.0版本的原型图已经设计出来了,现在鉴赏一下
第一场:登录
与时俱进,比较完善,支持账号登录、手机登录、扫码登录三种登录方式。
移动端自适应哦!
首页看板做的很不错
第二场:可视化监控
可以实时查看十八层地狱的详细信息,目前只支持中国区,国府(国服)噢。
今年业绩不是很好,业绩相比去年大幅下跌了呢!
冥币的汇率总体走势上扬,应该有不错的上升空间,可以考虑持有。
第三场:生死簿
生死簿可以看到阳寿未尽、孤魂野鬼、已经转世投胎人的名单。通过查询后台数据,我们发现,孙猴子不是物理删库,他是获取了阎王爷的超级管理员权限,直接把自己的名字,从生死簿中给删除了。
不过也看出,到底是毛手毛脚的猴子,做事不干净,只是逻辑删除,而没有进行物理删除。差一步,还是能找到记录。
下一个操作就骚了,批量删除,一删一窝。
批量删除有风险,所以需要插入U盾,猴子应该是直接拿了阎王的,获取验证码,批量删除猴子猴孙,为你点赞!
还有退单操作,这下知道李世民为啥没死成了。。
第四场:阎罗殿审判记录
每一个被勾下来的人,都有完整的审判记录,确保不抓错一个好人,也不放过一个坏人。
妥妥的工作流,需要审批的。
还贴心地提供了老人专用版本,字体放大N倍,看起来很轻松。
第五场:六道轮回
地府后台管理系统还是非常人性的,解决了六道轮回的问题。以后投胎到哪里,摇一次转盘就搞定了。
原来猪刚鬣就是被这么摇到了畜生道啊!
第六场:元数据维护
还挺丰富的,功能能强大。
有设备管理:
冥币管理:
日志管理:
还有非常完善的角色权限,支持多租户,多级,多用户哦:
更多功能持续开发中,欢迎有志于地府事业的小伙伴积极参与哦:
第四幕:未来已来
如果同学们真的出现经常做梦的情况,考虑下是不是最近压力太大了。当一个人压力太大的时候,做梦都会惦记要做的事情,连觉都睡不好了。
年底了,不论是互联网从业人员还是其他行业的人,或多或少感到一些压力,个人建议还是好好调节一下,多去换位思考一下,用其他的事激励一下自己。
最后的最后,是大家心心念念的地府系统demo访问地址:http://kzgfmo.axshare.cn
没有结束的新开始。。。。
帖子发出去之后,居然成为了一个现象级的产品,很多朋友也跟我联系,希望能把这个系统做出来,下面这位大神已经建了个群,希望把系统做出来,有兴趣的可以加群聊聊,看能不能真的把他做出来。
第五幕:程序员们的地府生涯
经过前期准备,现在地府系统已经正式进入立项开发阶段了
github地址:https://github.com/canxin0523/thesixsectorTeam
欢迎围观,Star
先附一张昨晚画的地府组织架构图
项目工程结构:
这个是我的微信二维码,我拉你进讨论群和扣扣研发群,围观一个伟大产品的诞生
我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!
参考资料:
-
java web简单权限管理设计
2015-03-19 23:23:05推荐最新技术springboot版权限管理(java后台通用权限管理系统(springboot)),采用最新技术架构,功能强大! 注:由于该项目比较老,所以没有采用maven管理,建议下载springboot权限管理系统,对学习和使用会更有...源码免费下载地址:关注微信公众号“虾米聊吧”,回复关键字“权限”
推荐最新技术springboot版权限管理(java后台通用权限管理系统(springboot)),采用最新技术架构,功能强大!
注:由于该项目比较老,所以没有采用maven管理,建议下载springboot权限管理系统,对学习和使用会更有帮助。
springboot权限管理系统介绍地址:https://blog.csdn.net/zwx19921215/article/details/97806078
springboot权限管理系统初级版下载地址:http://zyshare.cn/resource/detail/3
springboot权限管理系统高级版下载地址:http://zyshare.cn/resource/detail/7
springboot个人博客系统:https://blog.csdn.net/zwx19921215/article/details/102665020
后台管理系统模板html打包下载: http://zyshare.cn/resource/detail/14
最近在做一个网站类型项目,主要负责后台,ui框架选型为jquery easy ui,项目架构为spring mvc + spring jdbc,简单易用好上手!搭建好框架后开始了第一个任务,设计并实现一套简单的权限管理功能。
一套最基本的权限管理包括用户、角色、资源。
数据库设计
我的设计如下:
用户:user
角色:role
用户-角色:user_role
资源:resource(包括上级菜单、子菜单、按钮等资源)
角色-资源:role_resource
标准的权限管理系统设计为以上5张表。
注:用户、用户-角色我就不做说明了,这两个是很简单的两块,用户的crud,以及为用户分配角色(多对多的关系)稍微琢磨一下就清楚了,下面都是针对为角色分配权限的实现
效果图:
项目结构
后台实现
展示层采用ztree树
role.jsp
<%@ page contentType="text/html;charset=UTF-8"%> <%@ include file="/views/back/include/taglib.jsp"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="decorator" content="back" /> <script type="text/javaScript"> //打开菜单窗口 function openMenuDialog(){ var selected = $("#list").datagrid('getSelected'); if (selected != null) { $("#id").val(selected.id); queryMenus(selected.id); $("#menuWindow").window("open"); } else { $.messager.alert('提示', "未选择数据!"); } } //角色-菜单信息入库 function ajaxSubmit(rid,idstr){ $.post("${ctx}/roleMenu/save.jhtml",{"roleId":rid,"ids":idstr},function(obj){ $.messager.alert('提示',obj.msg); $("#menuWindow").window('close'); },'json'); } </script> <!-- ztree --> <script type="text/javascript"> var tree = ""; var setting = { check : { chkboxType:{"Y":"ps","N":"s"},//勾选checkbox对于父子节点的关联关系,取消勾选时不关联父 chkStyle:"checkbox", enable : true //是否复选框 }, //数据 data : { simpleData : { enable : true } } }; //查询菜单信息 function queryMenus(roleId){ $.post('${ctx}/role/treedata.jhtml', {'roleId':roleId}, function(zNodes) { for (var i = 0; i < zNodes.length; i++) { if (zNodes[i].isParent) { } else { //zNodes[i].icon = "${ctxStatic}/images/532.ico";//设置图标 } } tree = $.fn.zTree.init($("#tree"), setting, zNodes); tree.expandAll(true);//全部展开 //var nodes = treeObj.getNodes(); }, 'json'); } //获取选中节点 function onCheck(){ var rid = $("#id").val(); var treeObj=$.fn.zTree.getZTreeObj("tree"); var nodes=treeObj.getCheckedNodes(true); var ids = new Array(); for(var i=0;i<nodes.length;i++){ //获取选中节点的值 ids.push(nodes[i].id); // v+=nodes[i].id + ","; //alert(nodes[i].id); } ajaxSubmit(rid,ids); } </script> </head> <body> <!-- 数据表格 --> <table id="list" url='${ctx}/role/list/page.jhtml' method='post' class="easyui-datagrid" style="width:100%;" fitcolumns="true" toolbar='#tb' pagination='true' rownumbers='true' singleSelect='true'> <thead> <tr> <th field='name' sortable='true' width='100'>角色名称</th> <th field='description' width='200' align='right'>描述</th> <th field='createTimeFormat' width='150' align='center'>创建时间</th> </tr> </thead> </table> <!-- 编辑栏 --> <div id="tb" style="padding:5px 5px;"> <div> <p2p:permission module="role" code="add"><a href="#" class="easyui-linkbutton" iconCls="icon-add" onclick="openCreateDialog();">新增</a></p2p:permission> <p2p:permission module="role" code="edit"><a href="#" class="easyui-linkbutton" iconCls="icon-edit" onclick="openUpdateDialog();">编辑</a></p2p:permission> <p2p:permission module="role" code="delete"><a href="#" class="easyui-linkbutton" iconCls="icon-remove" onclick="del();">删除</a></p2p:permission> <p2p:permission module="role" code="authority"><a href="#" class="easyui-linkbutton" iconCls="icon-edit" onclick="openMenuDialog();">设置权限</a></p2p:permission> </div> <!-- 搜索项 --> <div style="margin-top:5px;padding-left:5px"> 用户名: <input id="query_name" class="easyui-textbox" type="text" style="width:110px" /> 创建日期: <input id="query_startDate" class="easyui-datebox" style="width:110px"> 至: <input id="query_endDate" class="easyui-datebox" style="width:110px"> <a onclick="reload();" href="#" class="easyui-linkbutton" iconCls="icon-search">查询</a> </div> </div> <!-- 权限窗口 --> <div id="menuWindow" class="easyui-window" title="配置权限" data-options="modal:true,iconCls:'icon-save',footer:'#menuWindowfooter'" style="width:350px;height:420px;padding:10px"> <div id="tree" class="ztree" style="padding: 10px 20px;"></div> </div> <div id="menuWindowfooter" style="padding:5px;text-align:right;"> <a href="#" onclick="onCheck();" class="easyui-linkbutton" data-options="iconCls:'icon-save'">提交</a> </div> </body> </html>
action层
RoleAction.java@RequestMapping(value = "/treedata.jhtml") @ResponseBody public String treedata(HttpServletRequest request, Model model) { DynamicParams params = new DynamicParams(request); List<Map<String, Object>> mapList = Lists.newArrayList(); params.put("allMenu", "allMenu"); List<Menu> list = authManager.findMenuList(params); List<RoleMenu> roleMenus = authManager.findRoleMenuList(params); for (int i = 0; i < list.size(); i++) { Menu e = list.get(i); Map<String, Object> map = Maps.newHashMap(); map.put("id", e.getId()); map.put("pId", e.getParentId() != null ? e.getParentId() : 0); map.put("name", e.getName()); for (RoleMenu roleMenu : roleMenus) { if (roleMenu.getMenuId() == e.getId()) { map.put("checked", true); } } mapList.add(map); } return toJson(mapList); }
service层
AuthManager.java
// 菜单管理 public List<Menu> findMenuList(DynamicParams params) { List<Menu> menus = new ArrayList<Menu>(); if ("allMenu".equals(params.getString("allMenu"))) { menus = menuDao.findList(params); } else { // 通过用户查询角色 List<UserRole> userRoles = userRoleDao.findList(params); // 通过角色查询菜单 List<RoleMenu> roleMenus = new ArrayList<RoleMenu>(); if (userRoles != null && userRoles.size() > 0) { for (UserRole userRole : userRoles) { params = new DynamicParams(); if (userRole != null) { if (userRole.getRoleId().equals(params.getString("rid"))) { break; } params.put("roleId", userRole.getRoleId().toString()); List<RoleMenu> rms = roleMenuDao.findList(params); for (RoleMenu roleMenu : rms) { roleMenus.add(roleMenu); } } } } // 查询菜单信息 for (RoleMenu roleMenu : roleMenus) { if (roleMenu != null) { Menu menu = menuDao.find(roleMenu.getMenuId()); if (menu != null) { menus.add(menu); } } } menus = removeDuplicate(menus); Collections.sort(menus); } return menus; }
/** * 去除菜单中重复项 * * @param list * @return */ private List<Menu> removeDuplicate(List<Menu> list) { List<Menu> result = new ArrayList<Menu>(); Set<Long> menuIds = new HashSet<Long>(); for (int i = 0; i < list.size(); i++) { Menu m = list.get(i); if (m != null && menuIds.add(m.getId())) { result.add(m); } } return result; }
public List<RoleMenu> findRoleMenuList(DynamicParams params) { List<RoleMenu> roleMenus = roleMenuDao.findList(params); return roleMenus; }
Dao层
menuDao
@Override protected void createQuery(DynamicParams params, StringBuffer sql, List<Object> args) { sql.append("select s.* from sys_menu s where 1=1 "); String parentId = params.getString("parentId"); if (StringUtils.isNotBlank(parentId)) { sql.append(" and parent_id = ? "); args.add(parentId); } String sort = params.getString("sort"); String order = params.getString("order"); if (StringUtils.isNotBlank(sort)) { sql.append(" order by ").append(hump2underline(sort)); if (StringUtils.isNotBlank(order)) { sql.append(" " + order); } else { sql.append(" desc "); } } else { sql.append("order by sort asc,id desc "); } }
userRoleDao@Override protected void createQuery(DynamicParams params, StringBuffer sql, List<Object> args) { sql.append("select s.* from sys_user_role s where 1=1 "); Long adminId = params.getLong("adminId"); if (adminId != null) { sql.append(" and s.user_id = ?"); args.add(adminId); } }
roleMenuDao@Override protected void createQuery(DynamicParams params, StringBuffer sql, List<Object> args) { sql.append("select s.* from ").append("sys_role_menu").append(" s where 1=1 "); Long adminId = params.getLong("roleId"); if (adminId != null) { sql.append(" and s.role_id = ?"); args.add(adminId); } }
在WEB-INF目录下建立文件夹tlds 建立自定义标签文件shiros.tld,我们通过自定义标签实现页面按钮的控制。
<span style="color:#333333;"><?xml version="1.0" encoding="UTF-8" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <description>p2p permission taglib</description> <display-name>permission taglib</display-name> <tlib-version>1.0</tlib-version> <short-name>p2p_back</short-name> <uri>http://vanfon.p2p.cn/</uri> <tag> <description>权限校验标签,有权限就显示标签体的内容,否则不显示</description> <name>permission</name> <tag-class>com.vanfon.p2p.back.tag.PermissionTag</tag-class> <body-content>JSP</body-content> <attribute> <description></description> <name>module</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <description></description> <name>code</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> </taglib></span>
自定义标签类
package com.vanfon.p2p.back.tag; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import com.vanfon.p2p.entity.system.Admin; import com.vanfon.p2p.entity.system.Menu; import com.vanfon.p2p.manager.system.AuthManager; import com.vanfon.p2p.utils.DynamicParams; import com.vanfon.p2p.utils.SpringContextHolder; /** * 权限控制标签 * * @author zhangwx * @date 2015-2-5 */ public class PermissionTag extends TagSupport { /** * */ private static final long serialVersionUID = 4592227792811389132L; private String module;// 属性名必须与JSP自定义标签的属性名一样 private String code; public String getModule() { return module; } public void setModule(String module) { this.module = module; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } @Override public int doStartTag() throws JspException { boolean result = false; HttpServletRequest request = (HttpServletRequest) this.pageContext.getRequest();// 通过成员变量获取HttpServletRequest对象 Admin admin = (Admin) request.getSession().getAttribute("admin");// 获取登录到系统的用户 if (admin != null) { if ("1".equals(String.valueOf(admin.getIfsuper()))) {// 超级管理员 result = true; } else { DynamicParams params = new DynamicParams(); params.put("id", String.valueOf(admin.getId())); params.put("module", this.module); params.put("code", this.code); AuthManager authManager = SpringContextHolder.getBean(AuthManager.class); List<Menu> userRoleAuths = authManager.findUserRoleAuthList(params); if (userRoleAuths != null && userRoleAuths.size() > 0) { result = true; } } } return result ? EVAL_BODY_INCLUDE : SKIP_BODY; } }
以上就是该权限管理中权限树(为角色分配权限)的大体实现。
项目源码下载地址:http://www.zyshare.cn/resource/detail/1
注:由于本项目年代久远,所以技术比较老旧,新人学习建议此项目 java后台通用权限管理系统(springboot)
推荐项目:java后台通用权限管理系统(springboot)
博主qq:193459197 , qq群技术交流与支持:557911445
关注微信公众号“虾米聊吧”,回复“权限”获取源码,后续持续放送技术架构和资料干货!!!
一个热衷于分享技术和生活的程序猿,让我们一起交流吧~
微信扫描二维码,关注我的公众号
-
java学生信息管理系统(附源码)
2016-07-14 16:36:30学生管理系统就完成了 其中的登陆界面是 我借鉴别人的 文中难免有不足之处,恳请批评指正 2016-7-14 再此上传不了附件 所以我给链接去在云盘下载 首次上传 (2017_6_12更新)链接: ...一: 介绍
1:实现登录界面
2:实现主界面
有两种操作 一种是按钮操作 另外一种是SQL语句。
3:连接SQL server 2008 数据库,后续我更新了,加了一个MySql 版本。在我的下载链接里面都有,里面也有使用说明。另外*myeclipse和eclipse, jcreator什么的都是IDE,使用都一样,基本没什么区别,只不过myeclipse更商业化不开源,也就意味着收费,里面集成的插件比较多而已。
*****************************************************************************************************
用到的软件及环境SQLserver2008,eclipse,sqljdbc4.jar(数据库驱动包)
*****************************************************************************************************
另外一个Mysql 5.7.15. Myeclipse2015,mysql-connector-java-5.1.34.jar
**********************************************************************************************************************
java的JDK环境 (自行安装配置)
切记:
另外要新建数据库wtf 和新建学生表student(也可以用你自己创建的数据库及表,不过你得在源代码中进行修改):
还要导入sqljdbc4.jar
4:实现增删改查 (另有退出和刷新)
二: 使用
1:首先导入rjgc包
然后点开browse 找到rjgc
最后点击finish
得到 下图
加载出来以后可能有的java文件前面有错,因为还没有导入sqljdbc4.jar
(******************************************************************************************************************************* 注意,方式一导入jdbc的图是之前我做的时候比较麻烦的一种方式,但是也能达到效果,在后期的我更新的链接资源中,如果导入任意版本源码包的话,都会自动加载lib包以及下面不同版本对应的jdbc连接驱动。这时候你只需要在那个lib文件夹下的.jar 文件上右键点击-->build path--->add to build path,导入jdbc结束。
方式二导入:贴一张图
上面这张图是方式二导入的,
**************************************************************************************************************************)
接下来继续,方式一导入 看下图:
这时候应该就差不多可以运行了,不过还得把SQLserver2008的(MSSQLSERVER)服务开启了。
上图
再回到eclipse界面 打开rjgc
最后双击LoginIn.java打开代码文本
运行 就可以出现登录界面
在LoginIn.java代码文本里面找到登录用户 和密码后就可以登录了
比如admin 123 和wangtangfu 123456 (注意不要多加空格)
其实用户权限都一样 如果你想加用户权限 可以写两个不同的Qframe.java。要做到主窗口里面的功能不同 ,可以屏蔽一些按钮
比如修改 增加 等功能。然后在不同用户登陆的时候调用不同的Qframe.java,这样应该可以实现权限问题。。。
2:
还有程序里面应运了一些图片,它们的位置路径位置可能不一样 ,自行参照代码理解修改(很容易的哟);
三:程序运行截图
登陆窗口
主窗口
SQL语句执行 比如select * from student
刷新按钮:
增加按钮:
添加成功之后刷新即可:
删除按钮:
修改按钮:
查询按钮
至此
学生管理系统就完成了
其中的登陆界面是 我借鉴别人的
文中难免有不足之处,恳请批评指正
2016-7-14
再此上传不了附件 所以我给链接去在云盘下载
首次上传
(2017_6_12更新)链接: https://pan.baidu.com/s/1aSeKJ8gXxWSElHaTU6_PdA 密码: yqpv
添加myeclipse+mysql 版本:
(2017_12_17更新)链接: https://pan.baidu.com/s/1dFAlILj 密码: 9z7k
(2017_12_17更新)链接: https://pan.baidu.com/s/1dFAlILj 密码: 9z7k
(2017_12_17更新)链接: https://pan.baidu.com/s/1dFAlILj 密码: 9z7k
修改student.sql执行报错 (执行时可以打开偷偷看一眼)
(2019_04_13更新)链接: https://pan.baidu.com/s/121sRLAerxEa3UmTD50Uu6g 密码: xjge
(2019_04_13更新)链接: https://pan.baidu.com/s/121sRLAerxEa3UmTD50Uu6g 密码: xjge
(2019_04_13更新)链接:https://pan.baidu.com/s/121sRLAerxEa3UmTD50Uu6g 密码: xjge
-
JAVA学生宿舍管理系统
2019-01-22 21:28:14system.java (系统管理界面) sql.java (数据库操作,包括连接、断开、增删改查等操作) 一、登陆界面及代码 主要代码: 登陆按钮事件 public void actionPerformed(ActionEvent e) { // TODO Auto-...需要的工具
1.SQL Server
2.Eclipse
3.JDBC连接数据库驱动
https://download.microsoft.com/download/A/F/B/AFB381FF-7037-46CE-AF9B-6B1875EA81D7/sqljdbc_6.0.8112.200_chs.exe功能实现
分为三大类
1.land.java (登陆界面)
2.system.java (系统管理界面)
3.sql.java (数据库操作,包括连接、断开、增删改查等操作)一、登陆界面及代码
部分代码:
登陆按钮事件
public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if((JButton)e.getSource()== buttonLand) { String name = textName.getText().trim(); String password = String.valueOf(textPassword.getPassword()).trim(); int num = sq.landing(name, password); if(num==1) { JOptionPane.showMessageDialog(frame, "欢迎进入学生宿舍管理系统!","提示:",JOptionPane.PLAIN_MESSAGE); system system = new system(); frame.dispose(); } else { JOptionPane.showMessageDialog(frame, "账号或者密码错误!","提示:",JOptionPane.ERROR_MESSAGE); } } }
二、系统管理界面及代码**(这里只添加了俩个表,多少表都是一样的道理**)
增加数据:点击增加按钮会出现一空白行,填写完点击保存即可
保存(更新)数据:直接在表中进行相应的操作,再点击保存即可
删除数据:选择某行,点击删除按钮即可
部分代码://--------------------------------------按钮事件-------------------------------- @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub //------------------------------- 删除----------------------------- String tableName = null; String key1 = null; if((JButton)e.getSource()==buttonDelete) { if(paneParent.getSelectedIndex()==1) { tableName = "学生信息表"; key1 = "sno"; } if(paneParent.getSelectedIndex()==2) { tableName = "宿舍信息表"; key1 = "dno"; } int row = table.getSelectedRow(); if(row!=-1) { String key2 = (String) tableModel.getValueAt(row, 0); int result = JOptionPane.showConfirmDialog(null, "确定要删除吗?","请确认",JOptionPane.YES_NO_OPTION); if(result==JOptionPane.OK_OPTION) { String sql = "delete from "+tableName+" where "+key1+"="+key2; int num = sq.delete(sql); if(num>0) { tableModel.removeRow(row); } } } else { JOptionPane.showMessageDialog(null, "请选择要删除的行!","提示:",JOptionPane.ERROR_MESSAGE); } } //------------------------------保存------------------------ if((JButton)e.getSource()==buttonSave) { int result = JOptionPane.showConfirmDialog(null, "请确认数值已经更改,否则保存无效","请确认",JOptionPane.YES_NO_OPTION); if(result==JOptionPane.OK_OPTION) { int row = table.getRowCount(); int column = table.getColumnCount(); String[][]valueRow= new String[row][column]; String[] sqlvalue = new String[row]; for(int i = 0; i < row; i++) { for(int j = 0; j < column; j++) { valueRow[i][j] = table.getValueAt(i, j).toString(); } } if(paneParent.getSelectedIndex()==1) { for(int i =0;i<row;i++) { String sql = "insert into 学生信息表"+" values ("+valueRow[i][0].toString()+","+valueRow[i][1].toString()+","+valueRow[i][2].toString()+","+valueRow[i][3].toString()+","+valueRow[i][4].toString()+","+valueRow[i][5].toString()+")"; sqlvalue[i]=sql.toString(); } data = sq.Save(sqlvalue,"学生信息表",row, column); tableModel.setDataVector(data,dataTitle); } if(paneParent.getSelectedIndex()==2) { for(int i =0;i<row;i++) { String sql = "insert into 宿舍信息表"+" values ("+valueRow[i][0].toString()+","+valueRow[i][1].toString()+")"; sqlvalue[i]=sql.toString(); } data = sq.Save(sqlvalue,"宿舍信息表",row, column); tableModel.setDataVector(data,TitleDormitor); } } } //------------------------------增加--------------------------- if((JButton)e.getSource()==buttonIncrease) { tableModel.addRow(new Vector<>()); } }
三、sql.java (重要)
public class SQL { public Connection conn; public Statement st; public ResultSet rs; //----------------------------获取链接-------------------------------- public Connection getConn() throws SQLException, ClassNotFoundException { String driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; String url = "jdbc:sqlserver://localhost:1433;databaseName=学习宿舍"; //:1433为数据库默认端口号,学习宿舍为数据库名字 String user = "sa"; //登录用户名 String password = "123456"; //登录密码 try { Class.forName(driverClassName); conn = DriverManager.getConnection(url, user, password); System.out.println("数据库连接成功"); } catch (SQLException ex1) { System.out.println("数据库连接失败"); } return conn; } //-----------------------------------关闭链接---------------------------------- public void Close() { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } try { st.close(); } catch (SQLException e1) { e1.printStackTrace(); } try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } //----------------------------------------登陆--------------------------------- public int landing(String name1,String password1) { int num = 0; String sql = "select *from 用户表"; try{ getConn(); st = conn.createStatement(); rs = st.executeQuery(sql); while(rs.next()) { String name = rs.getString(1).trim(); String password = rs.getString(2).trim(); if(name.equals(name1)&&password.equals(password1)) { num = 1; } } }catch (SQLException e) { // TODO: handle exception } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } Close(); return num; } //--------------------------------查询------------------------------- public Vector<Vector<Object>> query(String tableName,int column) { int num = 0; String sql = "select *from "+tableName; Vector<Vector<Object>> data = new Vector<Vector<Object>>(); try{ getConn(); st = conn.createStatement(); rs=st.executeQuery(sql); while(rs.next()) { Vector<Object> rowdata = new Vector<Object>(); for(num=1;num<=column;num++) { rowdata.add(rs.getString(num)); } data.add(rowdata); } }catch(SQLException ex1) { System.out.println("失败"+ex1); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } Close(); return data; } //---------------------------------------删除---------------------------------- public int delete(String sql) { int num = 0; try{ getConn(); st = conn.createStatement(); num = st.executeUpdate(sql); }catch (SQLException e) { // TODO: handle exception } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } Close(); return num; } //-------------------------------------保存------------------------------------- public Vector<Vector<Object>> Save(String[] sqlvalue,String tableName,int row,int column) { Vector<Vector<Object>> data = new Vector<Vector<Object>>(); try{ getConn(); st = conn.createStatement(); st.executeUpdate("delete from "+tableName); for(int i =0;i<row;i++) { st.executeUpdate(sqlvalue[i].toString()); } data = query(tableName, column); }catch (SQLException e) { // TODO: handle exception } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return data; } }
数据库连接账号密码及表名
**
这个是数据库的连接账号和密码123456
这个是用户表结构和登陆账号和密码(可自行修改)
**
宿舍信息表结构**
**
学生信息表结构**
## 需要源码,点赞关注截图,发邮箱到1397195447@qq.com
-
GitHub开源的10个超棒后台管理面板
2019-09-20 09:36:16目录 1、AdminLTE 2、vue-Element-Admin 3、tabler 4、Gentelella 5、ng2-admin 6、ant-design-pro ...项目开发中后台管理平台必不可少,但是从零搭建一套多样化后台管理并不容易,目前有许多开源、免费、... -
第三版信息系统项目管理师47个过程的输入输出及工具
2018-01-02 18:03:27第三版信息系统项目管理师47个过程的输入输出及工具 -
2021软考信息系统项目管理师_项目管理(上) 视频培训教程
2015-09-01 14:47:24本视频教程以新的信息系统项目管理师教程(第三版)为蓝本,结合小任老师多年高校教学经验和软考培训经验录制。参加工作后,我们没有太多的时间投入到信息系统项目管理师的备考中,教程太厚、真题太难,怎样花少的... -
C语言学生成绩管理系统源代码
2018-03-21 20:27:20大学C语言实训课,C语言学生成绩管理系统。 #include<stdio.h> #include<string.h> #include<math.h> struct student { int num; char name[20]; float pingshi; float shiyan; ... -
基于Java和MySQL的图书管理系统
2018-06-20 21:41:17Java图书管理系统 设计人:wangyunpeng_bio 项目需求 随着计算机的普及和应用水平的提高,经过考察比较,决定利用自己的Java知识开发小型的图书管理系统,方便图书的管理。 图书管理系统是典型的信息管理系统。... -
ASP.NET管理系统
2013-01-29 17:08:28一个简单的asp.net管理系统,有权限分配,控制到按钮级别.采用vs2008开发,数据库附加即可。 -
[已实现]暴力破解路由器管理密码
2020-06-13 12:53:37和上次租房不同的地方在于,这次路由器后台管理密码居然和给的wifi连接密码不一样了,肯定是有人改过密码了!admin 等弱口令都试过了,全都不管用!对一个it技术人员来说,被人掌握网络生杀大权肯定是无法容忍的! 第... -
基于React+antd的后台管理模板(可预览)
2018-08-05 13:42:53自己利用业余时间,基于React+antd写了一个后台管理模板。主要是熟悉antd组件和React,页面主要还是展示页面,不涉及后台交互。 特点: 我用 -
【管理系统课程设计】美少女手把手教你后台管理
2019-11-19 09:44:48【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,... -
windows上最好用的文件管理软件 Directory Opus
2019-04-01 14:21:50windows上最好用的文件管理软件 Directory Opus windows 自带的文件管理软件就不用提了,垃圾的一比。而市面上比较流行的文件管理软件 xyploer,total commander 之类我都使用过,其中 total commander 的确是神器,... -
2012上半年 系统集成项目管理工程师 下午试卷
2020-08-06 12:24:37小王上任后,根据一般原则梳理了合同管理的主要内容,在此基础上制定了公司的合同管理制度,并将该制度分发给各项目组和职能部门。同时将自己的职责主要确定为对所有项目合同进行分析和审核,降低项目合同的风险。 ... -
信息系统项目管理师考试备考经验和心得(50天一次性通过)
2017-08-20 16:27:54本人参加的是2017年上半年信息系统项目管理师考试,今天看到2017上半年考试的成绩合格分数为45,也算是侥幸通过,在这里写一写自己是如何备考的,供各位考友参考一下。 这里说的50天是指白天上班以业余时间备考所需... -
2009上半年 系统集成项目管理工程师 下午试卷
2020-08-06 12:28:422008年9月19日B市政府决定实施智能交通管理系统项目,对路面人流和车流实现实时的、量化的监控和管理。项目要求于2009年2月1日完成。 该项目由CSAI公司承建,小李作为CSAI公司项目经理,在2008年10月20日接到项目... -
ArcGIS许可管理器License server administrator无法启动的解决方法
2017-12-19 17:46:45ArcGIS许可管理器License server administrator无法启动的解决方法在安装ArcGIS软件,甚至日常使用启动软件时,ArcGIS许可管理器License Manager经常会无法启动,点多少次都没反应,更别谈往后的破解了。这里谈一下... -
[Windows10]Win10如何获取最高管理员权限
2018-09-17 17:48:56使用Windows10的时候常常发现我们没有管理员权限,这对我们使用造成了巨大麻烦。今天我来分享一下 win10里面怎么获取最高管理员权限。 (一)Windows10专业版/企业版/教育版方法 1,按下win+R键唤出“运行”窗口,... -
数据库课程设计实验报告--图书馆管理系统
2018-03-08 14:03:13一、系统平台 开发工具:Eclipse java Mars 数据库 MySQL server,Navicat可视化工具 操作系统:win10 ... 提取码:4y44 ... 图书馆信息管理系统数据库用以收集、存储书籍信息、人员(读者、图书管理员... -
各厂商服务器存储默认管理口登录信息(默认IP、用户名、密码)收集
2018-12-14 10:12:49在此收集了一些厂商的服务器存储设备的默认管理口信息,以供大家日后运维时方便查找,若有错误的地方请指正,谢谢! 服务器管理口信息: 设备类型 设备型号 默认管理IP 默认用户名 默认密码 IBM... -
电信光猫获取超级管理员密码
2020-03-20 10:40:26之前网上的教程虽然多少有所不同 但是一般都是直接登录192.168.1.1之后再进入一个链接下载一个文件,打开文件里面就可以查询到,或者会有串数字自己换算一下就出来...首先进入光猫的管理页面有两个地址都是192.168.1... -
Linux 用户权限相关命令(用户,组,软连接,用户管理,组管理)
2020-09-28 21:03:54·用户 是Linux系统工作中重要的一环, 用户管理包括 用户 与 组 管理 ·在Linux系统中, 不论是由本级或是远程登录系统, 每个系统都必须拥有一个账号, 并且对于不同的系统资源拥有不同的使用权限 ·对 文件 / 目录 的... -
Git教程_3 IDEA管理
2021-01-11 15:31:043. IDEA管理 3.1 介绍 .gitignore文件,就是管理那些文件需要上传,那些文件不需要上传的 #为注释 *.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中! !lib.txt #但lib.txt除外 /temp #仅忽略项目根目录... -
2013上半年 系统集成项目管理工程师 下午试卷
2020-08-06 12:27:02小赵具有3年的软件项目开发与管理经验。公司认为这个项目的技术难度比较低,把两个月前刚从大学招聘来的9个计算机科学与技术转移的应届毕业生分配到这个项目组,这样,项目开发团队顺利建立了。项目的开发按照所制定... -
数据库课程设计 ——酒店管理系统
2019-05-31 10:36:11(1)酒店管理系统用于满足酒店工作人员和管理人员的需求。 (2)酒店管理人员和工作人员可以为酒店房间加入入住和退房记录,并生成相应的报表用于查阅,确认和保存,酒店工作人员可以浏览、查询、统计、添加酒店... -
2021软考信息系统项目管理师_项目管理(下) 视频培训教程
2015-09-02 13:50:40参加工作后,我们没有太多的时间投入到信息系统项目管理师的备考中,教程太厚、真题太难,怎样花少的时间顺利通过软考考试是每个人都在探索的问题。看视频,小任老师帮你把握考试重点,用短的时间,让你学到应该掌握... -
2021软考信息系统项目管理师-上午历年真题解析视频课程
2016-01-03 15:03:46小任老师帮你梳理软考信息系统项目管理师考试重点、难点。2020年下半年成功预测案例分析三题中的二道题。 2019年下半年成功预测案例分析三题中的二道题,论文成功预测:沟通管理。 2018年下半年成功预测案例... -
目标管理
2019-09-24 17:36:35书中介绍了很多管理工具,大部分内容同事已经分享过了,其中有一章没讲的是目标管理,正好最近又参加了《目标管理》的培训,就结合起来说说目标管理吧。 "企业管理说到底就是目标管理。" -- 彼得 · 德鲁克 《管理... -
2011年下半年 系统集成项目管理工程师 下午试卷
2020-08-06 12:22:28M公司承担了某大学图书馆存储及管理系统的开发任务,项目周期4 个月。 小陈是M 公司的员工,半年前入职。在校期间,小陈跟随导师做过两年的软件开发,具有很好的软件开发基础。领导对小陈很信任,任命小陈担任该...
-
Centos8服务器安装docker
-
大数据的基本概况.jpg
-
C++代码规范和Doxygen根据注释自动生成手册
-
php数组函数大全
-
【Python-随到随学】 FLask第一周
-
联想EXCEL培训资料.ppt
-
泊松分布、二项分布与正态分布
-
MySQL 性能优化(思路拓展及实操)
-
access应用的3个开发实例
-
第三章 C语言 PTA循环控制——作业-答案.html
-
Unity RUST 逆向安全开发
-
ROSv6.48.zip
-
hdoj 3533 Escape
-
各种格式测试视频(.avi.wmv.mkv.mp4.mov.rm)
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
基于SpringBoot+MyBatis的餐饮点餐系统
-
mybatisplus代码生成器
-
微信值 V3
-
Rust解决cargo build太慢
-
朱老师c++课程第3部分-3.5STL的其他容器讲解