关于用JAVA写报表,涉及时间查询

第一张图图片是需求

img


第二张图片是数据库的结构

img


大概阐述一下那个需求 就是想要展示一年的每一周有多少数据 而一周中没有数据的就显示0 有数据又要具体到那一天 并且时间是上周三到本周二为一个周次 有什么好的写法吗 qq了

有个粗略的思路:

1. 拿到数据列表后,先按日期倒序排一下序
2. 创建一个结果数组,用来存放整理后的结果
3. 遍历数据列表
3.1 计算当前行所属周数(这里需要根据需求来,比如今天是周三到周天这段时间的话直接计算周数,周一周二的话就周数减13.2 累计统计数据,比如合格lot、不良lot等
3.3 与上一行相比较,看本行与上一行的周数是否相同
3.3.1 如果相同,则将当前行插入到结果数组的头部,然后继续
3.3.2 如果不同
3.3.2.1 如果当前行的周数==上一行周数-1。则创建一个对象,属性名与普通行基本一致(这样后面拼表格的时候方便些),属性值为本周到目前为止累计的统计数据。看你的需求中周合计列颜色与普通的日数据不一样,所以这里还需要加一个类似type的属性,用于区分是周合计还是日数据。插入到结果数组的头部
3.3.2.2 如果本行与上一行的周数之间有落下的,需要生成空的属性值都为0的周合计对象,落下几个就创建几个,也是插入到结果数组的头部
3.3.3 如果没有下一个了,视同3.3.2
4.根据结果数组渲染即可。得到的结果数组的结构应该是周合计、日数据、周合计、周合计、日数据类似这样的
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7506814
  • 这篇博客也不错, 你可以看下java模仿微信QQ群聊头像拼接,根据群聊内的用户头像拼接群聊头像,九宫格
  • 除此之外, 这篇博客: 仿 手机QQ 登录、注册、找回密码、好友列表、QQ状态等功能的实现中的 2. 数据库 的JAVA代码: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • package com.example.my_qq;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    
    import androidx.annotation.Nullable;
    
    public class MyDatabase extends SQLiteOpenHelper {
        static  final  String DBNAME="MY_QQ.db";//数据库名称
        static  final  int VERSION=1;//版本号
        static  final  String TBUSER="users";//用户表
        static  final  String TBFRIEND="friends";//好友表
    
    
        //修改构造函数
        public MyDatabase(@Nullable Context context) {
            super(context, DBNAME, null, VERSION);
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            //创建用户表
            db.execSQL("create table if not exists "+TBUSER+"(id integer not null  primary key  autoincrement," +
                    "num varchar(50)," +
                    "username varchar(50) not null," +
                    "sex varchar(2)," +
                    "password varchar(50), " +
                    "birthday varchar(60) " +
                    ")");
            //创建好友表
            db.execSQL("create table if not exists "+TBFRIEND+"(id integer not null  primary key  autoincrement," +
                    "friendname varchar(50) not null," +
                    "logo varchar(50)," +
                    "head integer)");
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    
        }
    }
    
  • 您还可以看一下 赖国荣老师的java语言从入门到精通2016+项目实训课程中的 【赖国荣】JAVA从入门到精通第92讲:实现QQ登录界面小节, 巩固相关知识点