2019暑期答辩-自动统计签到回帖情况网站

本文介绍了一个利用Python爬虫统计工作室论坛签到和回帖的项目,涉及数据库设计、后台页面构建和用户体验优化。作者分享了在数据库建表、页面布局和合作过程中的经验教训,包括建表逻辑、页面响应式设计和Git协作。
摘要由CSDN通过智能技术生成

2019暑期答辩作品-自动统计签到回帖情况网站

目录

答辩作品

签到回帖汇总
成员信息个人签到回帖详细信息周签到信息个人签到信息
个人签到信息

流程

  • 获取工作室论坛的网址,用python爬虫爬取需要获取的数据,存入数据库中
  • 在后台录入工作室成员的个人信息
  • 将爬取的信息和工作室成员信息匹配,对应存储到个人
  • 在后台界面中以表格、折线图的形式分别展示爬取的数据
  • 个人的签到、回帖汇总信息在模态框中详细展示
  • 手动选择时间,以折线图的形式展示每组每周平均签到次数以及个人每周的总签到次数

数据库设计

[成员个人主页信息表]
在这里插入图片描述
[帖子表]
在这里插入图片描述[成员周签到详情表]
在这里插入图片描述数据库只是暑期培训的时候才接触,学了最基础的一些知识,自己上手做项目设计数据库建表时开始想的太简单了,后期做的时候出了很多问题就一直删删改改,之后慢慢理解了建库建表的一些逻辑知识。

[经验总结]:
1.建表时现将每一个功能实现需要的信息写下来,然后分析这些信息直接的关系(一对一/一对多/多对多),最后根据一对一/一对多/多对多的关系建立各个表之间的联系;
2.先在纸上模拟好了再开始建库建表!!!
3.错误想法:在有关联的表里增加重复的字段->看起来好像方便了很多,其实是多余的!!

//mysql
DROP TABLE IF EXISTS `post`;
CREATE TABLE `post`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `title` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '帖子标题',
  `uid` int(11) NOT NULL COMMENT '主表中的用户ID',
  `time` timestamp(0) NOT NULL COMMENT '发帖时间',
  `link` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '帖子链接地址',
  `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '帖子内容',
  `group` int(11) NOT NULL COMMENT '组别1表示开发组,2表示硬件组',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 43 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
......

后台页面

签到回帖汇总

//    展示用户汇总的签到回帖信息
        public String alluserinfo(@RequestBody int gid) throws ParseException {
   
            List<Result> list = new ArrayList<Result>();
            List<User> users = new ArrayList<User>();
            if (gid == 0) {
   
                users = userService.findAll();
            } else {
   
                users = userService.findByGroupID(gid);
            }
            for (User user : users) {
   
                Result result = new Result();
                result.setUid(user.getId());
                result.setRealname(user.getRealName());
                result.setSex(user.getSex());
                
                Group group = groupService.selectByGid(new Integer(user.getGroupId()));
                ArrayList<String> timelen = setTimme();
                if (group != null) {
   
                    result.setGroupName(group.getGroupName());
                    Sign sign = signService.findByUidAndTimeRange(user.getId(), timelen.get(0));
                    int sumsigned = 0;
                    if (sign != null) {
   
                        UserSignInfo userSignInfo = userSignInfoService.selectByPrimaryKey(sign.getSid());
                        if (userSignInfo != null) {
   
                            sumsigned = calSum(userSignInfo);
                            if (sumsigned >= group.getSignStandard()) {
   
                                result.setIfsign(1);
                            } else {
   
                                result.setIfsign(0);
                            }
                        }
                    }
                }
                List<String> timelen2 = getPostTimeRange();
                if (userPostInfoService.selectByUid(result.getUid(), timelen2.get(0), timelen2.get(1)) != null) {
   
                    result.setIfpost(1);
                } else {
   
                    result.setIfpost(0);
                }
                list.add(result);
            }
            return new Gson().toJson(list);
        }


        public int calSum(UserSignInfo userSignInfo){
   
            int sumsigned;
            sumsigned = userSignInfo.getMon1() + userSignInfo.getMon2() + userSignInfo.getMon3() +
                    userSignInfo.getTue1() + userSignInfo.getTue2() + userSignInfo.getTue3() +
                    userSignInfo.getWed1() + userSignInfo.getWed2() + userSignInfo.getWed3() +
                    userSignInfo.getThu1() + userSignInfo.getThu2() + userSignInfo.getThu3() +
                    userSignInfo.getFri1() + userSignInfo.getFri2() + userSignInfo.getFri3() +
                    userSignInfo.getSat1() + userSignInfo.getSat2() + userSignInfo.getSat3() +
                    userSignInfo.getSun1() + userSignInfo.getSun2() + userSignInfo.getSun3();
        return  sumsigned;
        }

        //    展示用户汇总的签到回帖信息
        public String fresult(@RequestBody String name) throws ParseException {
   
            List<Result> list = new ArrayList<>();
            List<User> users;
            users = userService.findByRealName(name);
            ArrayList<String> timelenth = mondayController.setTime();
            for (int i = 0; i < users.size(); i++) {
   
                User user = users.get(i);
                Result result = new Result();
                result.setUid(user.getId());
                result.setRealname(user.getRealName());
                result.setSex(user.getSex());
                
                Group group = groupService.selectByGid(new Integer(user.getGroupId()));
                if (group != null) {
   

                    result.setGroupName(group.getGroupName());
                    Sign sign = signService.findByUidAndTimeRange(user.getId(),timelenth.get(0));
                    if (sign!=null){
   
                        UserSignInfo userSignInfo = userSignInfoService.selectByPrimaryKey(sign.getSid());
                        Integer sumsigned = calSum(userSignInfo);
                        if (sumsigned < group.getSignStandard()) {
   
                            result.setIfsign(0);
                        } else {
   
                            result.setIfsign(1);
                        }
                    }
                }
                List<String> posttime=getPostTimeRange();
                    if (userPostInfoService.selectByUid(result.getUid(), posttime.get(0), posttime.get(1)) != null) {
   
                        result.setIfpost(1);
                    } else {
   
                        result.setIfpost(0);
                    }
                    list.add(result);
                }
            return new Gson().toJson(list);

        }

在这里插入图片描述

左侧菜单栏在页面缩放后隐藏,顶部下拉菜单显现

<!--html-->
<header class="navbar-wrapper">
	<div class="navbar navbar-fixed-top">
		<div class="container-fluid cl">
			<a class="logo navbar-logo f-l mr-10 hidden-xs" href="#">启明星签到回帖统计系统</a>

			<a class="logo navbar-logo-m f-l mr-10 visible-xs" href="#">启明星签到回帖统计系统</a>
			<a aria-hidden="false" class="nav-toggle Hui-iconfont visible-xs" href="#">&#xe667;</a>

			<span id="toptime" class="logo navbar-slogan f-l mr-10 hidden-xs" ></span>
			<nav id="Hui-userbar" class="nav navbar-nav navbar-userbar hidden-xs">
				<ul class="cl">
					<li th:switch="${session.admin.identity}">
						<span 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值