Java私活200元,完成JavaSwing学生成绩管理系统(三)

简介: 系统功能: 提供学生成绩的査询功能,输入学生的学号,能査找出该生各学期的成绩,并能够对成绩数据进行添加、删除、修改等基本操作和统计计算。

需求


接到一个需求,说让使用JavaSwing+Mysql完成一个学生成绩管理系统,时间紧任务重。


origin_img_v2_fba4286e-e8cb-418b-9d1d-38410b39e06g.jpg


具体需求如下:


用户需求


系统功能: 提供学生成绩的査询功能,输入学生的学号,能査找出该生各学期的成绩,并能够对成绩数据进行添加、删除、修改等基本操作和统计计算。


功能需求


1、功能1 提供学生成绩的査询功能,输入学生的学号,能査找出该生各学期的成绩


2、功能2 能对成绩数据进行添加、删除、修改等基本操作,并能进行一般的统计计算


3、功能3 建立学生成绩数据库,要求: 自定义数据库文件格式


需求分析


在别人眼中:要写java代码 还要写连接数据库代码 以及创建表、写注释 编写文档等等


在我的眼中:创建一个javaswing的项目并套用之前写好的学生成绩管理的各种属性,代码生成器勾选增删改查等条件,然后自动生成即可。


origin_img_v2_0543a598-394f-4699-a030-41e9dfb88a7g.jpg


代码生成器实现原理


1.文件目录介绍


config:包含一些系统的配置文件,比如这个系统的启动端口,连接的数据库

target:程序的主体(jar文件)

bat :两个bat文件都可以用来启动这个项目用的


其中start-service就是服务方式启动,缺点是双击后没有反应,优点是后台会一直启动。

start-terminal(推荐)是控制台启动,双击后弹出一个控制台黑框框,关掉控制台后系统就关掉了


2.启动系统


双击start-terminal.bat启动系统了,启动完成后,浏览器访问localhost


3.使用教程


下面介绍一些系统相关配置的注意事项

还有系统的一些便捷功能

避免生成的系统出现报错问题。


3.1界面


除了代码生成器这个模块,其他的功能没必要去管他

(这些就是历史原因了哈哈,本来想做一个网站的上线的…)


3.2 生成


在新增或者修改项目后,要记得保存,保存后下次可以复用


631104d336d545cdbb4c73df4a3ead83.png


3.3 配置项

为了更好的发掘生成器的功能,我们可以灵活的运用配置项的功能。


C/C++属性配置示例:


75c859375ed64313b3c3d939374984bd.png


C# / Javas程序配置示例:


cf90d577824a47a6823efd38b0f46080.png


通用配置


  • 命名 :系统、对象等命名时候,请避免使用特殊字符:# ¥ % & ^ ) - = + : " ' } ]【】~!? . , < > / 、等


  • 中文名 用于对象名或属性名的描述,这样生成的系统注释才会齐全。例:管理员


  • 是否查询 增删改查的查找功能中,如果查询设为【是】,则该属性会作为查询条件,例:可以通过姓名来查找学生


  • 是否统计 系统查询功能中,对于查出的数据会进行自动统计,例:每天的营业额设为统计,将自动对查询出来的数据求和


  • 是否平均 系统查询功能中,对于查出的数据会进行自动平均,例:学生身高设为平均,将自动显示平均身高


  • 更新页显示 修改/更新的时候,这个字段显示,例:我想让学生学号不可修改,我就可以设为否,默认是否


  • 可更新 是否可以更新这个字段,如果设为否,C#和Java 将会设为不可修改


58279337f261434196dec444c0786069.png


  • 字段唯一 比如学号、身份证号码,他们是不会重复的字段,应该设为字段唯一。


  • 数据类型 C/C++的数据类型为char的时候,请在属性名后面加上长度,java和c#则不需要添加后缀[n],n表示字符数组长度


bb80257471734a068699c0a4239cf908.png


  • 最大长度 是C#和Java才有的配置,只有数据类型是String才生效。类似于c语言属性名的后缀,表示这个字段最长长度,一般用默认的255即可


  • 不为空 必填,例如:姓名为必填项


  • 配置下拉框 当下拉框的有值的时候,输入框会变成自动下拉框。例如:性别为 男、女


  • 默认值 新增的时候,默认会给这个属性赋值,在C语言和其他语言中有所不同,要注意。


例1:【字符串】例如我想名族默认是汉族:那么要填"汉族",要加双引号,类似于string family = “汉族”;填的是 = 后面的内容。


例2:【数字】数量默认是100:填100


例3:【时间】窗体生成分为Java和C#窗体,在java和C#中都有时间类型,Java的默认时间是 new Date(),而C#的为 DateTime.Now.ToString() ,这时为了统一配置,我用通配符来代替他们。例如我要设默认时间为当前时间,则填{time.now}(这是我自己制定的规则),生成的时候,他们会判断这是java、C#项目来自动设置默认值。


  • 外键


这一个内容要单独理解,配置简单,但是功能比较多,拿下图的学生成绩管理系统来说:


前提是我们已经添加了学生:Student对象和课程:Course对象,现在添加这个成绩对象


1、 看下图,课程和学生对应的外键已经填上了内容,这个意思指的是,学生成绩管理系统必须先添加学生和课程,才能添加成绩,没有学生和课程,哪来的成绩对吧?


2、 自动设置权限,这个学生,如果【是登陆用户】,那么学生登陆后,是只能查看自己的成绩的,这个用处很多,很重要。例如:借阅系统中,我们希望读者只能看到自己的借阅记录。


3、 便利的查询,在C#和Java中的查询框是可以设置为下拉框的,以下例子中,因为课程和学生都是外键而且他们是查询条件,所以生成的成绩管理系统,在查成绩的时候,可以通过下拉框来选择查询某个学生、课程的成绩。


f5633b06b23c492888a6b8213816003d.png

e2d6b1b4e47441459bae4e6ed49444ae.png


部分代码


public class MainView extends JFrame {
    JPanel northPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JButton addBtn = new JButton("增加");
    JButton updateBtn = new JButton("修改");
    JButton delBtn = new JButton("删除");
    JTextField searchTxt = new JTextField(15);
    JButton searchBtn = new JButton("查询");
JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
JButton preBtn = new JButton("上一页");
JButton nextBtn = new JButton("下一页");
MainViewTable mainViewTable = new MainViewTable();
private int pageNo = 1;
private int pageSize = 10;
MainViewHandler mainViewHandler;
public MainView() {
    super("主界面-Java学生成绩管理");
    Container contentPane = getContentPane();
    Rectangle bounds = DimensionUtil.getBounds();
    pageSize = Math.floorDiv(bounds.height, 35);
    mainViewHandler = new MainViewHandler(this);
    // 放置北边的组件
    layoutNorth(contentPane);
    // 设置中间的jtable
    layoutCenter(contentPane);
    // 放置南边的组件
    layoutSouth(contentPane);
    // 自定义图标
    URL imgUrl = MainView.class.getClassLoader().getResource("learnIcon.jpg");
    setIconImage(new ImageIcon(imgUrl).getImage());
    // 根据屏幕大小设置主界面大小
    setBounds(bounds);
    // 设置窗体完全充满整个屏幕的可见大小
    setExtendedState(JFrame.MAXIMIZED_BOTH);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setResizable(true);
    setVisible(true);
}
private void layoutCenter(Container contentPane) {
    TableDTO dto = getTableDTO();
    MainViewTableModel mainViewTableModel = MainViewTableModel.assembleModel(dto.getData());
    // 把jtable和model关联
    mainViewTable.setModel(mainViewTableModel);
    mainViewTable.renderRule();
    JScrollPane jScrollPane = new JScrollPane(mainViewTable);
    contentPane.add(jScrollPane, BorderLayout.CENTER);
    showPreNext(dto.getTotalCount());
}
private TableDTO getTableDTO() {
    StudentService studentService = new StudentServiceImpl();
    StudentRequest request = new StudentRequest();
    request.setPageNo(pageNo);
    request.setPageSize(pageSize);
    request.setSearchKey(searchTxt.getText().trim());
    TableDTO tableDTO = studentService.retrieveStudents(request);
    return tableDTO;
}
private void layoutSouth(Container contentPane) {
    preBtn.addActionListener(mainViewHandler);
    nextBtn.addActionListener(mainViewHandler);
    southPanel.add(preBtn);
    southPanel.add(nextBtn);
    contentPane.add(southPanel, BorderLayout.SOUTH);
}
/*
设置上一页下一页是否可见
 */
private void showPreNext(int totalCount) {
    if (pageNo == 1) {
        preBtn.setVisible(false);
    } else {
        preBtn.setVisible(true);
    }
    int pageCount = 0;
    if (totalCount % pageSize == 0) {
        pageCount = totalCount / pageSize;
    } else {
        pageCount = totalCount / pageSize + 1;
    }
    if (pageNo > pageCount) {
        pageNo = pageCount;
    } else if (pageNo < 1) {
        pageNo = 1;
    }
    if (pageNo == pageCount) {
        nextBtn.setVisible(false);
    } else {
        nextBtn.setVisible(true);
    }
}
private void layoutNorth(Container contentPane) {
    // 增加事件监听
    addBtn.addActionListener(mainViewHandler);
    updateBtn.addActionListener(mainViewHandler);
    delBtn.addActionListener(mainViewHandler);
    searchBtn.addActionListener(mainViewHandler);
    northPanel.add(addBtn);
    northPanel.add(updateBtn);
    northPanel.add(delBtn);
    northPanel.add(searchTxt);
    northPanel.add(searchBtn);
    contentPane.add(northPanel, BorderLayout.NORTH);
}
public static void main(String[] args) {
    new MainView();
}
public void setPageNo(int pageNo) {
    this.pageNo = pageNo;
}
public int getPageNo() {
    return pageNo;
}
public void reloadTable() {
    TableDTO dto = getTableDTO();
    MainViewTableModel.updateModel(dto.getData());
    mainViewTable.renderRule();
    showPreNext(dto.getTotalCount());
}
public long[] getSelectedStudentIds() {
    int[] selectedRows = mainViewTable.getSelectedRows();
    long[] ids = new long[selectedRows.length];
    for (int i = 0; i < selectedRows.length; i++) {
        int rowIndex = selectedRows[i];
        Object idObj = mainViewTable.getValueAt(rowIndex, 0);
        ids[i] = Long.parseLong(idObj.toString());
    }
    return ids;
}
public MainViewTable getMainViewTable() {
    return mainViewTable;
}
  }


效果


image-20220701161539238.png

image-20220701161559377.png

image-20220701161618017.png

视频演示


接私活之课程设计学生成绩管理系统


https://www.bilibili.com/video/BV1mR4y1t7Ck?p=1&vd_source=97b717a7cd1b9ea962b07d744ed4fa26


总结


以上就是用代码生成器生成Java课设学生成绩管理系统的分享,半小时轻松赚到200元,还是那句话接私活不能让你大富大贵,平时赚点零花钱还是很轻松的,想要接私活或者对代码生成器有想法的小伙伴可以点击下方的卡片与我联系。

目录
相关文章
|
11天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
40 3
|
14天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
16 1
|
16天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
19天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
21天前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
44 1
|
25天前
|
Java 关系型数据库 API
介绍一款Java开发的企业接口管理系统和开放平台
YesApi接口管理平台Java版,基于Spring Boot、Vue.js等技术,提供API接口的快速研发、管理、开放及收费等功能,支持多数据库、Docker部署,适用于企业级PaaS和SaaS平台的二次开发与搭建。
|
29天前
|
Java 关系型数据库 MySQL
基于Java的学生成绩管理系统/学生信息管理系统
基于Java的学生成绩管理系统/学生信息管理系统
38 2
|
29天前
|
前端开发 Java 数据库连接
基于Java的校车管理系统(下)
基于Java的校车管理系统(下)
16 0
|
29天前
|
存储 前端开发 Java
基于Java的校车管理系统
基于Java的校车管理系统(上)
19 0
|
29天前
|
Java 数据库
基于java的汽车服务管理系统(Car Service Management System)
基于java的汽车服务管理系统(Car Service Management System)
17 0