精华内容
参与话题
问答
  • java练习小项目(一)

    万次阅读 多人点赞 2018-10-10 10:20:46
    学习java有一段时间了,都是处于那种三天打鱼,两天晒网的状态,没有效率,因为方法不对,一直是在看资料,看...好吧,这样就开始了自己的第一个小项目,坚持下来,会发现自己每天过得好充实,开始的时候是找了一...

    学习java有一段时间了,都是处于那种三天打鱼,两天晒网的状态,没有效率,因为方法不对,一直是在看资料,看视频,并没有实际上手项目,就算当时看了,记住了,最后还是不会用,或者说要到用的时候不会用。这样学下去,根本没有任何效果,反思反思再反思,为什么有的人一个星期就能理解个大概了,因为他一直玩代码啊~~~

    好吧,这样就开始了自己的第一个小项目,坚持下来,会发现自己每天过得好充实,开始的时候是找了一个飞机游戏,跟着视频敲代码,虽然第一遍不懂,那就再来一遍,两遍不懂,那就来三遍,一遍一遍的理清逻辑,搞清楚方法之间的调用关系。记得有人跟我说过,招聘要求有几年经验,并不是说真正的非得工作那么几年,而是有那么几年的代码量。

    总之,勤能补拙。

    下面是我的小游戏最终实现的效果

    有点丑,因为没有图片处理技术,慢慢来吧。然后说说这个项目中遇到的问题。

    1:引用出错

    Date自动引用会出现两个,一个是java.util,一个是java.sql,因为之前不懂,就随便到了一个包,结果一直出错,却又找不到原因,util是工具包,sql始于数据库相联系——导包要根据实际需要仔细看清楚,不要觉得自动提示的东西都是对的,看也不看直接导

    2:初步学习,先知道怎么用,不要急于去研究那些看不懂已经封装好的内部的东西,越看越晕。

    3:要让物体动起来,需要借助于线程,所以线程一定是进阶的关键点

    4:算法很重要,但不要对算法死记硬背,要去理解,实在理解不了也不要老是花时间去深究,会陷入死循环,有时候,需要用时,百度一大堆,关键是要有那种思想,思维里有该用什么,,至于怎么用,度娘会帮你。

    5:仔细一些,我在做的时候,创建了很多工程,每个工程里面可能会出现一些与其他工程一样的类名,然后你懂得,就可能没有及时关闭上一个工程的某个类,却又在下一个工程中运行同名类,然后错误,一直纠结哪里出错。

    6:一定要静下心来,要做到不易被外界打扰,能够专心按照自己的逻辑去撸代码,一定要建立一套自己的思维体系。

    7:最后一点,熟能生巧!

    技能总结:

    1:双缓冲解决闪屏

    private Image offScreenImage = null;

        public void update(Graphics g) {
            if (offScreenImage == null)
                offScreenImage = this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);
            Graphics gOff = offScreenImage.getGraphics();
            paint(gOff);
            g.drawImage(offScreenImage, 0, 0, null);// 内存中先画一个图片进行缓存

    2:碰撞检测

    飞机与子弹看成两个矩形,获取两个矩形坐标,宽度和高度,调用rect里面的intersects来检测是否相撞

    3:图片轮播

    爆照效果:多张图片放在数组中,依次读取

    依次播放

    4:存活计时

    开始和死亡的时间计数,然后做差

     

    展开全文
  • Java基础之练手小项目

    万次阅读 多人点赞 2017-03-13 18:04:56
    项目为JAVAEE基础班综合项目,包含了若干个知识点,达到将基础班所学知识综合使用,提高了我们对项目的理解与知识点的运用。 熟练View层、Service层、Dao层之间的方法相互调用操作、 熟练dbutils操作数据库表完成...

    记账软件

    1. 项目介绍

    1.1. 项目安排

    1.1.1. 项目目标

    本项目为JAVAEE基础班综合项目,包含了若干个知识点,达到将基础班所学知识综合使用,提高了我们对项目的理解与知识点的运用。

    熟练View层、Service层、Dao层之间的方法相互调用操作

    熟练dbutils操作数据库表完成增删改查

    通过本项目,让我们了解公司项目开发的流程,充分的掌握项目需求分析、设计与功能的代码实现。提高同学们独立分析需求与功能实现的能力。

    1.1.2. 项目时间

    本项目通过1天课程时间完成。

    1.2. 项目功能分析

    1.2.1. 项目演示

    1.2.2. 项目功能介绍

     

    l 查询账务

    l 多条件组合查询账务

    l 添加账务

    l 编辑账务

    l 删除账务

     

    2. 项目环境搭建

    2.1. 技术选型和jar包介绍

    每个项目都要使用一些已经成熟的技术,它们通常是由一些专业组织或团队所提供的开源免费技术。在今后的学习过程中,我们会逐渐对这些专业组织有所了解。本项目中使用的技术如下:

    l apachecommons组件:

    Ø commons-dbutils-1.4.jar:封装并简化了JDBC

    Ø commons-dbcp-1.4.jarapache commons提供的数据库连接池组件,命名为DBCP

    Ø commons.pool-1.3.jarDBCP连接池依赖该jar包;

    l mysql-connector-java-5.1.28-bin.jarMySQLJDBC驱动包,用JDBC连接MySQL数据库必须使用该JAR包。

    2.2. 工具类介绍

    每个项目都会用到一些工具类,本项目也不例外。我们不会教大家如何实现这些类,而是让大家知道在项目我们如何使用这些工具类,下面是本项目中所使用的工具类以及介绍:

    l JDBCUtils:用来创建数据库连接池对象;

    在项目的实现过程中,我们会说明工具类的使用,这里就不再过多介绍。

    JDBCUtils.java

    public class JDBCUtils {

    public static final StringDRIVER_CLASS_NAME ="com.mysql.jdbc.Driver";

    public static final StringURL = "jdbc:mysql://localhost:3306/gjp";

    public static final StringUSERNAME = "root";

    public static final StringPASSWORD = "root";

    private static BasicDataSourcedataSource = new BasicDataSource();

    static {

    dataSource.setDriverClassName(DRIVER_CLASS_NAME);

    dataSource.setUrl(URL);

    dataSource.setUsername(USERNAME);

    dataSource.setPassword(PASSWORD);

    }

    public static DataSource getDataSource() {

    return dataSource;

    }

    }

     

    2.3. 数据表创建

    对一个项目而言,表设计是非常重要的,因为应用程序中所有的操作都是基于数据库表而进行的,所以我们第一步就是创建数据库表。

    管家婆项目的数据库设计很简单,我们只需找到gjp.sql文件,然后执行之即可。下面是创建库及表的SQL语句:

    2.3.1. 创建数据库

    创建管家婆数据库 gjp

    CREATE DATABASE gjp;

     

    2.3.2. 创建数据库表

    创建账务表gjp_zhangwu

    CREATE TABLE gjp_zhangwu (

      zwid INT PRIMARY KEY AUTO_INCREMENT,

      flname VARCHAR(200),

      money DOUBLE,

      zhangHu VARCHAR(100),

      createtime DATE,

      description VARCHAR(1000) 

    );

     

    2.3.3. 添加表数据

    添加账务表数据

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (1,'吃饭支出',247,'交通银行','2016-03-02','家庭聚餐');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (2,'工资收入',12345,'现金','2016-03-15','开工资了');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (3,'服装支出',1998,'现金','2016-04-02','买衣服');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (4,'吃饭支出',325,'现金','2016-06-18','朋友聚餐');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (5,'股票收入',8000,'工商银行','2016-10-28','股票大涨');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (6,'股票收入',5000,'工商银行','2016-10-28','股票又大涨');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (7,'工资收入',5000,'交通银行','2016-10-28','又开工资了');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (8,'礼金支出',5000,'现金','2016-10-28','朋友结婚');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (9,'其他支出',1560,'现金','2016-10-29','丢钱了');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (10,'交通支出',2300,'交通银行','2016-10-29','油价还在涨啊');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (11,'吃饭支出',1000,'工商银行','2016-10-29','又吃饭');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (12,'工资收入',1000,'现金','2016-10-30','开资');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (13,'交通支出',2000,'现金','2016-10-30','机票好贵');

    INSERT  INTO gjp_zhangwu(zwid,flname,money,zhangHu,createtime,description)VALUES (14,'工资收入',5000,'现金','2016-10-30','又开资');

     

     

    2.4. 项目分层(分包)的作用

    程序为什么要分包分层?

    以顾客去饭店吃饭案例分析一下:

    小饭店: 一个服务员搞定(接待顾客\点菜\炒菜)

    大饭店:

    迎宾员(是否有预定\询问吃中餐还是西餐或者烧烤等\几位用餐 \领路到指定的包间\找点菜员为顾客点菜 )

    点菜员(记录顾客点餐内容\记录是否有忌口等问题\找厨师为顾客炒菜)

    厨师(按照顾客菜肴清单,进行炒菜)

    通过案例发现,当程序规模小的时候,可以一个人全部完成;但程序规模大的时候,一个人难以完成,这时,要采用多人合作的方式来完成程序开发。

    多人合作方式将会碰到工作任务分配问题,这时我们会想,每个人负责完成项目的一块内容就可以了。那么,这一块块内容的划分,就需要我们采用分层(分包)的方式完成了。

    通过下图(用户注册功能)来讲解下,项目中常见的分层(分包)。

     

    l view层作用:视图层,即项目中的界面

    l controller层作用:控制层,获取界面上的数据,为界面设置数据;将要实现的功能交给业务层处理

    l service层作用:业务层,功能的实现,controller控制层和数据访问层DAO交互,将对数据库的操作交给DAO数据访问层来处理

    l dao层作用:数据访问层,用来操作数据库表的数据

    l db数据库:这里指MySQL

    l domain 实体包:存放JavaBean

    l tools工具包:存放项目中使用到的工具类

    l test 测试包:存放项目功能测试的代码

    2.5. 工程创建及包管理

    1. 使用Eclipse创建Java工程,命名为gjp

    2. 创建工程包

    Ø cn.itcast.gjp.app: 存放main方法类;

    Ø cn.itcast.gjp.domain: 存放JavaBean

    Ø cn.itcast.gjp.view: 存放界面,及表现层类;

    Ø cn.itcast.gjp.service: 存放业务层类;

    Ø cn.itcast.gjp.dao: 存放数据访问层类;

    Ø cn.itcast.gjp.tools:存放工具类

    3. 创建lib文件夹,用来存储使用的jar

     

    3. 功能模块

    3.1. 相关类创建

    完成本项目中类的创建,无需在类中添加代码。

    1. 复制已编写好的工具类JDBCUtils.java tools包中;

    2. 复制jarmysql-connector-java-5.1.28-bin.jar、commons-dbutils-1.4.jar、commons-dbcp-1.4.jar、commons-pool-1.3.jar,lib文件夹中,通过Build Path操作,添加到classPath路径中提供给JDBCUtils使用;

    3. app包中,创建类MainApp.java,编写main主方法,用来完成本项目的启动

    4. domain包中,创建类ZhangWu.java,它是用来封装账务信息的JavaBean

    5. dao包中,创建类ZhangWuDao.java,给ZhangWuDao类添加一个成员变量QueryRunner对象,因为我们使用dbutils来操作数据库。

    6. service包中,创建类ZhangWuService.java,给ZhangWuService类添加一个类型为ZhangWuDao的成员变量,因为service依赖dao

    7. view包中,创建类MainView.java,给MainView类添加一个类型为ZhangWuService的成员变量,因为本项目中view依赖service

     

    编写app包中MainApp.java

    /**

     * 主方法类

     */

    public class MainApp {

    public static void main(String[]args) {

    }

    }

     

    编写domain包中ZhangWu.java

    /**

     * 账务类

     */

    public class ZhangWu {

    }

     

    编写Dao包中ZhangWuDao.java

    /**

    * 账务数据层类

     */

    public class ZhangWuDao{

    //获取数据库连接池,得到操作表数据的对象QueryRunner

    QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());

    }

     

    编写Service包,ZhangWuService.java

    /**

    * 账务业务层类

     */

    public class ZhangWuService {

    //service都依赖dao

    private ZhangWuDao zhangWuDao =new ZhangWuDao();

    }

     

    编写view包,MainView.java

    public class MainView {

    //本项目中view依赖service

    private ZhangWuServicezhangWuService = new ZhangWuService();

    }

     

    3.2. 账务JavaBean

    JavaBean是指的是Java中的类,该类中的成员变量与数据库表中的字段相对应(变量名对应数据库表字段名、变量数据类型对应数据库表字段类型),并提供空参数构造方法、setget方法。

    我们现在来完成账务类的代码编写,如下:

    /**

     * 账务类

     */

    public class ZhangWu {

    private int zwid;// id

    private String flname;// 分类名称

    private String zhangHu;// 账户名称

    private double money;//金额

    private String createtime;// 创建时间

    private String description;// 说明

     

    public String getFlname() {

    return flname;

    }

    public void setFlname(Stringflname) {

    this.flname =flname;

    }

    public String getZhangHu() {

    return zhangHu;

    }

    public void setZhangHu(StringzhangHu) {

    this.zhangHu =zhangHu;

    }

    public int getZwid() {

    return zwid;

    }

    public void setZwid(int zwid) {

    this.zwid =zwid;

    }

    public double getMoney() {

    return money;

    }

    public void setMoney(double money) {

    this.money =money;

    }

    public String getCreatetime() {

    return createtime;

    }

    public void setCreatetime(Stringcreatetime) {

    this.createtime =createtime;

    }

    public String getDescription() {

    return description;

    }

    public void setDescription(Stringdescription) {

    this.description =description;

    }

    }

     

    3.3. 功能界面菜单

     

    界面菜单的完成,是项目编写的第一步。

    我们通过输出语句,完成界面菜单的输出,之后再根据输入的功能序号,进行对应功能的调用执行。

    3.3.1. 功能实现步骤

    编写MainViewrun方法

    1.1 完成功能界面菜单显示

    1.2 接收键盘输入的功能选项

    1.3 根据选项值,调用对应的功能方法

    编写MainApp类的main主方法

    2.1 调用MainView类中run方法,实现将程序执行起来,显示功能界面菜单。

    3.3.2. 功能实现代码

    1.viewMainView类中编写run方法

    /**

     * 运行方法

     */

    public void run() {

    /*

     * 1. 打印菜单 2. 获取用户输入 3. 调用对应方法

     */

    boolean flag =true;

    Scanner in = new Scanner(System.in);

    while (flag) {

    System.out.println("---------------管家婆家庭记账软件---------------");

    System.out.println(1.添加账务 2.编辑账务 3.删除账务 4.查询账务 5.退出系统");

    System.out.println("请输入要操作的功能序号[1-5]:");

    int op =in.nextInt();

    switch (op) {

    case 1:

    addZhangWu();

    break;

    case 2:

    editZhangWu();

    break;

    case 3:

    deleteZhangWu();

    break;

    case 4:

    selectZhangWu();

    break;

    case 5:

    System.out.println("再见!");

    flag = false;

    break;

    default:

    System.out.println("输入错误!");

    }

    }

    }

     

    2.appMainApp类的main主方法中,调用MainView类中run方法

    public static void main(String[]args) {

    new MainView().run();

    }

     

    3.4. 查询所有账务

     

    3.4.1. 功能实现步骤

    编写MainView类中selectZhangWu方法

    1.1 通过输出语句,显示出要查询账务的方式

    1.2 接收键盘的输入项,调用对应的方法(1.查询所有 2.按条件查询

    编写MainView类中selectAll查询所有账务方法

    2.1 调用ZhangWuServiceselectAll方法,返回包含所有账务数据的List<ZhangWu>集合

    2.2 调用MainView类中print方法实现控制台显示所有账务数据

    编写MainView类中print方法

    3.1 使用输出语句,打印出账务表的表头名称

     

    3.2 遍历账务集合,将每个账务信息输出打印

    编写ZhangWuService类中selectAll方法

    4.1 调用ZhangWuDao类中selectAll方法,返回包含所有账务数据的List<ZhangWu>集合

    编写ZhangWuDao类中selectAll()方法

    5.1 通过QueryRunner对象,调用query方法查询数据库表gjp_zhangwu,返回包含所有账务数据的List<ZhangWu>集合

    3.4.2. 功能实现代码

    1. 编写MainView类中selectZhangWu方法

    /**

     * 查询账务方法

     */

    public void selectZhangWu() {

    System.out.println("1.查询所有 2.按条件查询");

    Scanner in = new Scanner(System.in);

    int op =in.nextInt();

    switch (op) {

    case 1:

    selectAll();

    break;

    case 2:

    select();

    break;

    default:

    System.out.println("输入错误!");

    }

    }

     

    2. 编写MainView类中selectAll方法

    /**

     * 查询所有账务方法

     */

    public void selectAll() {

    List<ZhangWu> zhangWuList = zhangWuService.selectAll();

    print(zhangWuList);

    }

     

    3. 编写MainView类中print方法

    /*

     * 输出账务方法

     */

    private void print(List<ZhangWu>zhangWuList) {

    System.out.println("ID\t类别\t\t账户\t\t金额\t\t时间\t\t说明");

    for (ZhangWu zw : zhangWuList) {

    System.out.println(zw.getZwid() +"\t" + zw.getFlname() + "\t\t"

    + zw.getZhangHu() + "\t\t" + zw.getMoney() + "\t\t"

    + zw.getCreatetime() + "\t" + zw.getDescription());

    }

    }

     

    4. 编写ZhangWuService类中selectAll方法

    /**

     * 查询所有

    */

    public List<ZhangWu> selectAll() {

    return zhangWuDao.selectAll();

    }

     

    5. 编写ZhangWuDao类中selectAll()方法

    /**

     * 查询所有账务

     */

    public List<ZhangWu> selectAll() {

    String sql = "select * from gjp_zhangwu";

    try {

    return qr.query(sql,new BeanListHandler<ZhangWu>(ZhangWu.class));

    } catch (SQLExceptione) {

    throw new RuntimeException(e);

    }

    }

     

    3.5. 多条件查询账务

     

    3.5.1. 功能分析

    编写MainView类中select方法

    1.1 通过键盘输入查询日期的范围

    1.2 调用ZhangWuSerice类中select方法,返回查询日期范围内的账务信息集合List<ZhangWu>

    1.3 调用MainView类中的print方法,将账务信息集合中的内容显示在控制台中

    编写ZhangWuService类中select方法

    2.1 调用ZhangWuDao 类中select方法,返回查询日期范围内的账务信息集合List<ZhangWu>

    编写ZhangWuDao类中select方法

    3.1 通过QueryRunner对象,调用query方法查询数据库表gjp_zhangwu,返回包含查询日期范围内的账务数据List<ZhangWu>集合

    3.5.2. 功能实现步骤

    1. 编写MainView类中select方法

    /**

     * 按条件查询账务方法

     */

    public void select() {

    /*

     * 1. 获取用户输入查询日期范围。

     * 2. 调用serviceselect()方法完成条件查询功能

     */

    Scanner in = new Scanner(System.in);

    System.out.print("请输入查询起始时间:");

    String start = in.next();

    System.out.print("请输入查询结束时间:");

    String end = in.next();

    List<ZhangWu> zhangWuList = zhangWuService.select(start, end);

    print(zhangWuList);

    }

    2. 编写ZhangWuService类中select方法

    /**

     * 按条件查询账务方法

     * @param start

     * @param end

     * @return

     */

    public List<ZhangWu> select(Stringstart, String end) {

    return zhangWuDao.select(start,end);

    }

    3. 编写ZhangWuDao类中select方法

    /**

     * 按条件查询账务方法

     * @param start

     * @param end

     * @return

     */

    public List<ZhangWu> select(Stringstart, String end) {

    String sql = "select * from gjp_zhangwu where createtime between ? and ?";

    Object[] params = {start,end};

    try {

    return qr.query(sql,new BeanListHandler<ZhangWu>(ZhangWu.class),params);

    } catch (SQLExceptione) {

    throw new RuntimeException(e);

    }

    }

     

    3.6. 添加账务

     

    3.6.1. 功能分析

    编写MainView类中addZhangWu方法

    1.1 键盘输入新添加的账务信息

    1.2 调用ZhangWuService类中addZhangWu方法,用来指定账务的添加

    1.3 添加完毕后,使用输出语句,提示“添加账务成功!”

    编写ZhangWuService类中addZhangWu方法

    2.1 调用ZhangWuDao类中addZhangWu方法,用来指定账务的添加

    编写ZhangWuDao类中addZhangWu方法

    3.1 通过QueryRunner对象,调用update方法更新数据库表gjp_zhangwu,完成指定账务添加到数据库表中

    3.6.2. 功能实现步骤

    1. 编写MainView类中addZhangWu方法

    /**

     * 添加账务方法

     */

    public void addZhangWu() {

    /*

     * 1. 获取用户输入,封装到bean中。

     * 2. 调用serviceaddZhangWu()方法完成添加功能

     */

    Scanner in = new Scanner(System.in);

    ZhangWu zw = new ZhangWu();

    System.out.print("请输入类别:");

    zw.setFlname(in.next());

    System.out.print("请输入账户:");

    zw.setZhangHu(in.next());

    System.out.print("请输入金额:");

    zw.setMoney(in.nextDouble());

    System.out.print("请输入时间:");

    zw.setCreatetime(in.next());

    System.out.print("请输入说明:");

    zw.setDescription(in.next());

    zhangWuService.addZhangWu(zw);

    System.out.println("添加账务成功!");

    }

     

    2. 编写ZhangWuService类中addZhangWu方法

    /**

     * 添加账务

     * @param zw

     */

    public void addZhangWu(ZhangWuzw) {

    zhangWuDao.addZhangWu(zw);

    }

     

    3. 编写ZhangWuDao类中addZhangWu方法

    /**

     * 添加账务

     * @param zw

     */

    public void addZhangWu(ZhangWuzw) {

    String sql = "insert into gjp_zhangwu(flname,money,zhanghu,createtime,description) values(?,?,?,?,?)";

    try {

    Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhangHu(),zw.getCreatetime(),zw.getDescription()};

    qr.update(sql,params);

    } catch (SQLExceptione) {

    throw new RuntimeException(e);

    }

    }

     

    3.7. 编辑账务

     

    3.7.1. 功能分析

    编写MainView类中editZhangWu方法

    1.1 键盘输入要编辑的账务信息ID

    1.2 键盘输入要修改的账务信息内容

    1.3 调用ZhangWuService类中editZhangWu方法,用来将指定的账务信息进行更新

    1.4 更新完毕后,使用输出语句,提示 “编辑账务成功!”

    编写ZhangWuService类中editZhangWu方法

    2.1 调用ZhangWuDao类中editZhangWu方法,用来将指定的账务信息进行更新

    编写ZhangWuDao类中editZhangWu方法

    3.1 通过QueryRunner对象,调用update方法更新数据库表gjp_zhangwu,完成数据库表中指定账务更新操作

    3.7.2. 功能实现步骤

    1. 编写MainView类中editZhangWu方法

    /**

     * 编辑账务方法

     */

    public void editZhangWu() {

    /*

     * 1. 获取用户输入,封装到bean中。

     * 2. 调用serviceeditZhangWu()方法完成添加功能

     */

    Scanner in = new Scanner(System.in);

    ZhangWu zw = new ZhangWu();

    System.out.print("请输入ID");

    zw.setZwid(in.nextInt());

    System.out.print("请输入新类别:");

    zw.setFlname(in.next());

    System.out.print("请输入新账户:");

    zw.setZhangHu(in.next());

    System.out.print("请输入新金额:");

    zw.setMoney(in.nextDouble());

    System.out.print("请输入新时间:");

    zw.setCreatetime(in.next());

    System.out.print("请输入新说明:");

    zw.setDescription(in.next());

    zhangWuService.editZhangWu(zw);

    System.out.println("编辑账务成功!");

    }

     

    2. 编写ZhangWuService类中editZhangWu方法

    /**

     * 编辑账务

     * @param zw

     */

    public void editZhangWu(ZhangWuzw) {

    zhangWuDao.editZhangWu(zw);

    }

     

    3. 编写ZhangWuDao类中editZhangWu方法

    /**

     * 编辑账务

     * @param zw

     */

    public void editZhangWu(ZhangWuzw) {

    String sql = "update gjp_zhangwu set flname=?, money=?,zhanghu=?,createtime=?,description=? where zwid=?";

    try {

    Object[] params = {zw.getFlname(),zw.getMoney(),zw.getZhangHu(),zw.getCreatetime(),zw.getDescription(),zw.getZwid()};

    qr.update(sql,params);

    } catch (SQLExceptione) {

    throw new RuntimeException(e);

    }

    }

     

    3.8. 删除账务

     

    3.8.1. 功能分析

    编写MainView类中deleteZhangWu方法

    1.1 键盘输入要删除的账务信息ID

    1.2 调用ZhangWuService类中deleteZhangWu方法,用来将指定的账务信息删除

    1.3 删除完毕后,使用输出语句,提示 “删除账务成功!”

    编写ZhangWuService类中deleteZhangWu方法

    2.1 调用ZhangWuDao类中deleteZhangWu方法,用来将指定的账务信息删除

    编写ZhangWuDao类中deleteZhangWu方法

    3.1 通过QueryRunner对象,调用update方法更新数据库表gjp_zhangwu,完成数据库表中指定账务删除操作

    3.8.2. 功能实现步骤

    1. 编写MainView类中deleteZhangWu方法

    /**

     * 删除账务方法

     */

    public void deleteZhangWu() {

    /*

     * 1. 获取用户输入,封装到bean中。

     * 2. 调用servicedeleteZhangWu()方法完成添加功能

     */

    Scanner in = new Scanner(System.in);

    System.out.print("请输入ID");

    zhangWuService.deleteZhangWu(in.nextInt());

    System.out.println("删除账务成功!");

    }

     

    2. 编写ZhangWuService类中deleteZhangWu方法

    /**

     * 删除账务

     * @param zwid

     */

    public void deleteZhangWu(int zwid) {

    zhangWuDao.deleteZhangWu(zwid);

    }

     

    3. 编写ZhangWuDao类中deleteZhangWu方法

    /**

     * 删除账务

     * @param zwid

     */

    public void deleteZhangWu(int zwid) {

    String sql = "delete from gjp_zhangwu where zwid=?";

    try {

    qr.update(sql,zwid);

    } catch (SQLExceptione) {

    throw new RuntimeException(e);

    }

    }

     

    3.9. 功能模块总结

    恭喜大家,我们已经完成了分类模块所有功能。通过分类模块功能的实现,大家可能会发现如下几个问题:

    l 难度大的地方:自行功能分析的能力欠缺,需要讲师来分析;

    l 代码实现:

    Ø ViewController):代码量最大;

    Ø Service层:代码量最小;

    Ø DAO层:相似度高,难度不大;

     


    view层的作用是“界面”,用来完成数据显示给用户。当前项目view层中,包含了Controller层代码。

    Controller层的作用是“调度”,调度的是表现层view和业务层Service,主要功能分为:一是把表现层的数据交给业务层处理;二是把业务层返回的数据交给表现层显示。至于为什么这一层ViewController)的代码量大,这里我要说明一下,其实不是ViewController)层的代码量大,而是其他层代码量少,所以你会感觉ViewController)层代码量大。

    Service层的作用是“业务”,我们也可以把“业务”当成是“功能”。那为什么Service层代码量少呢?原因是现在我们写的项目很小,没有什么复杂的业务,而今后大家要写的大型项目代码量最大的就是Service层。

    DAO层是操作数据库,现在我们使用的是commons-dbutils工具来简化JDBC,所以我们发现代码不多,比较简单。最后我们还会学习其他DAO层的工具,例如:hibernatemybatis,他们都是JDBC的封装,用来简化JDBC

     

     

    展开全文
  • Android小项目——新闻APP

    万次阅读 多人点赞 2019-02-26 19:25:42
    在公司学习了一段时间Android知识,决定做一个小项目,目的是学会运用所学的基础知识,在这里记录一下开发历程,大家可以把它看成一款入门级练手的 Demo 应用吧~ 项目介绍: 类型: 新闻APP(低仿今日头条) ...

    前言:

     在公司学习了一段时间Android知识,决定做一个小项目,目的是学会运用所学的基础知识,在这里记录一下开发历程,大家可以把它看成一款入门级练手的 Demo 应用吧~

    项目概述:

    类型:

    新闻APP(低仿今日头条)

    基本功能:

    欢迎页面加载(3s,点击可跳过)——Activity相关

    用户注册/登录 ——SQLite运用

    横向滑动列表显示新闻类别——TabLayout、ViewPager、FragmentPagerAdapter的应用

    底部菜单栏 切换——Fragment运用

    –-主页(显示新闻列表)——ListView

    –-设置(退出应用、退出登录、清空缓存)——Activity管理、SharePreference

    –-我的(账号安全、新闻收藏夹)——SQLite

    新闻列表下拉、上滑实现刷新——自定义ListView

    逐条收藏新闻、删除新闻——SharePreference

    仿UI界面——各类控件运用

    点击查看新闻详情 —— WebView

    用户界面更换头像功能——Android运行时权限、多媒体、Content Provider

     

    源码及下载地址:

    https://download.csdn.net/download/qq_34149526/10977199

    PS:

    最近有不少朋友反馈程序闪退问题,我查看了一下,是因为我采用的数据接口(天行数据)请求下来的数据中,图片链接的数据为空(之前一直是正常数据),导致解析图片时空指针异常,最终程序闪退。json数据如下:

    {
    	"code": 200,
    	"msg": "success",
    	"newslist": [{
    		"ctime": "2019-07-18 00:00",
    		"title": "空间科学卫星:迈向空间科学强国",
    		"description": "新华科技",
    		"picUrl": "",--------------->此处为空!!!
    		"url": "http:\/\/www.xinhuanet.com\/tech\/2019-07\/18\/c_1124767044.htm"
    	},
        ……
    }

    修改方法一:替换含有图片数据接口,可采用聚合数据等(使用自行百度),注意修改代码中的数据字段名!!!

    修改方法二:在代码中解析图片的地方加上非空校验,程序不会崩溃,但是新闻列表中不会显示图片。

    修改方法三:自行想办法解决~哈哈

    下面简单贴一下修改方法二:
    
    //针对以下几个类做非空校验,希望大家以我为鉴,养成良好编码习惯。
    
    1、MyBitmapUtils.java:
    public Bitmap getBitmap(String url) {
            if(TextUtils.isEmpty(url)){
                return null;
            }
            Bitmap bitmap;
         ……
    }
    2、HttpUtils.java:
    public static Bitmap decodeUriAsBitmapFromNet(String imgUrl) {
            if(TextUtils.isEmpty(imgUrl)){
                return null;
            }
            URL fileUrl = null;
            Bitmap bitmap = null;
         ……
    }
    3、NewsAdapter.java:
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
         ……
    
         if(news.getNews_img()!=null) {
            viewHolder.newsImg.setImageBitmap(news.getNews_img());
         }
         ……
    }
    4、NetCacheUtils.java:
    private Bitmap downLoadBitmap(String url) {
         ……
            } finally {
                if (conn != null) {
                    conn.disconnect();
                }
            }
         ……
        }

            关于界面无法显示内容,原因是我申请的天行数据的API接口调用次数已用完(当时我是有10万次的免费调用次数,不得不感叹你们的强大),具体解决方法是更换TechFragment、MiliFragment、SportFragment、EnteFragment四个类里面的url地址,原地址已无法正常请求数据。可以自己去天行数据申请免费接口,替换即可(具体url格式参考天行数据官方文档,我已经很久不用它了)。

    ----------华丽分割线----------

    下面进入重点,开始介绍这个项目

    1、项目结构:

    类文件:

    资源文件:

    2、主要功能及其代码实现:

    欢迎页面:(持续时间为3s);

    利用handler机制并开启一个线程,实现展示欢迎页面3s后页面跳转;

     final Message message = new Message();
        final Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000);
                    message.what = 1;
                    handler.sendMessage(message);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

    欢迎页面加载完毕后会判断是否有用户登录,若没有用户登录,会跳转到注册&登录页面

    final Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                if (msg.what == 1) {
                    //判断用户是否登录
                    boolean userIsLogin = (boolean) SharedPreUtil.getParam(WelcomeActivity.this,
                            SharedPreUtil.IS_LOGIN, false);
                    if (userIsLogin) {
                        Intent intent = new Intent(WelcomeActivity.this, MainActivity.class);
                        startActivity(intent);
                    } else {
                        Intent intent = new Intent(WelcomeActivity.this, LoginOrRegisterActivity.class);
                        startActivity(intent);
                    }
    
                    finish();
                } else if (msg.what == 0) {
                    thread.interrupt();
                }
    
            }
    
        };

     注册或登录页面:

                 

     “注册”和“登陆”功能的实现主要是应用的SQLite数据库存储技术;

    注册——存

    SQLiteDatabase db = dbHelper.getWritableDatabase();
    
                        String username_str = username.getText().toString();
                        String userpassword_str = userpassword.getText().toString();
                        String repassword_str = repassword.getText().toString();
    
                        if (userpassword_str.equals(repassword_str)) {
                            ContentValues values = new ContentValues();
                            //组装数据
                            values.put("name", username_str);
                            values.put("password", userpassword_str);
    
                            db.insert("User", null, values);
    
                            startActivity(new Intent(RegisterActivity.this, LoginActivity.class));
                            finish();
                        }

    登陆——取

     if (cursor.moveToFirst()) {
                            String userpassword_db = cursor.getString(cursor.getColumnIndex("password"));
                            if (userpassword_str.equals(userpassword_db)) {
                                SharedPreUtil.setParam(LoginActivity.this, SharedPreUtil.IS_LOGIN, true);
                                SharedPreUtil.setParam(LoginActivity.this, SharedPreUtil.LOGIN_DATA, username_str);
                                //user.setUsername(username_str);
                                //user.setPassword(userpassword_str);
                                Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                                TimeCount.getInstance().setTime(System.currentTimeMillis());
                                startActivity(intent);
                                finish();
                            } else {
                                Toast.makeText(LoginActivity.this, "密码错误,请重新登录", Toast.LENGTH_SHORT).show();
                            }
                        }

    另外在实现“注册”中上传头像功能时涉及到一个小知识点——运行时权限;因为要访问图库:

    若用户不选择上传,程序会默认使用一个给定好的图片作为用户头像。

    @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            switch (requestCode) {
                case 1:
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        openAlbum();
                    } else {
                        Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();
                    }
                    break;
            }
        }
    
        private void openAlbum() {
            Intent intent = new Intent("android.intent.action.GET_CONTENT");
            intent.setType("image/*");
            startActivityForResult(intent, CHOSSE_PHOTO);
        }
    
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode) {
                case CHOSSE_PHOTO:
                    if (resultCode == -1) {
                        String imgPath = AlbumUtil.handleImageOnKitKat(this, data);
                        setHead(imgPath);
                    }
                    break;
                default:
                    break;
            }
        }

    用户注册登陆后,即进入主页面:默认为科技新闻,左右滑动即可切换新闻类别;

    新闻列表的显示原理及ListView、数据源与Adapter三者相结合,呈现出该画面;

        final String url = "http://api.tianapi.com/keji/?key=7d829a4176fef4ad7409c2dc129905ed&num=30";
        private View view;
        private LoadListView mListView;
        private List<News> newsList;
    
        private NewsAdapter adapter;

    其中数据源的获取涉及到了HTTPClient的GET请求网络资源以及解析json数据的相关知识;

     JSONObject jsonObject = new JSONObject(jsonData);
                JSONArray jsonArray = jsonObject.getJSONArray("newslist");
                for (int i = 0; i < 10; i++) {
                    JSONObject json_news = jsonArray.getJSONObject(i);
                    String imgUrl = json_news.getString("picUrl");
                    /**
                     * 采取三级缓存策略加载图片
                     */
    
                    Bitmap bitmap = myBitmapUtils.getBitmap(imgUrl); 
                    String title = json_news.getString("title");
                    String date = json_news.getString("ctime");
                    String author_name = json_news.getString("description");
                    String url = json_news.getString("url");
                    Log.d(TAG, "url:*-*-*-*-*-*-*" + imgUrl);
                    News news = new News(bitmap, title, url, imgUrl, date, author_name);
                    newsList.add(news);
    
                    getActivity().runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            adapter.notifyDataSetChanged();
                        }
                    });

    ​​​​该页面同样实现了下拉&上滑刷新新闻的功能:

    下拉刷新:

    上滑加载: 

    该功能具体实现请参考——ListView实现上拉加载&下拉刷新

    删除新闻:

    在新闻列表点击每条新闻中的×号可完成新闻删除。

     

    @Override
        public void click(View view) {
            Toast.makeText(getContext(), "该新闻已删除!", Toast.LENGTH_SHORT).show();
            newsList.remove(Integer.parseInt(view.getTag().toString()));
            adapter.notifyDataSetChanged();
        }

    为每一个ListView item设置一个鼠标监听器,在remove方法中传入item的索引位置即可完成新闻列表的删除。

     新闻详情页面:(及加载提示)

     

    代码实现:

    show_news.getSettings().setJavaScriptEnabled(true);
            Intent intent = getIntent();
            final String news_url = intent.getStringExtra("url");
            final String news_title = intent.getStringExtra("title");
            final String news_date = intent.getStringExtra("date");
            final String news_author = intent.getStringExtra("author");
            final String news_picurl = intent.getStringExtra("pic_url");
            show_news.loadUrl(news_url);
    

     

    获得intent对象中由上一个页面传来的新闻URL,将WebView初始化后进行加载;完成页面详情的展示。

    mDialog = new ProgressDialog(ShowNewsActivity.this);
            mDialog.setMessage("玩命加载ing");
            show_news.setWebViewClient(new WebViewClient() {
                //网页加载时的回调
                @Override
                public void onPageStarted(WebView view, String url, Bitmap favicon) {
                    super.onPageStarted(view, url, favicon);
                    if (!mDialog.isShowing()) {
                        mDialog.show();
                    }
                }
    
                //网页停止加载时的回调
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    // 如果没有显示,则显示
                    if (mDialog.isShowing())
                        mDialog.dismiss();
                }
            });

    实例化ProgressDialog对象,设置标题与提示信息,以对用户进行友好提示。

    新闻收藏:

     

    代码实现:

    主要是利用SQLite存储整个收藏新闻信息;

    collect_news.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    collect_news.setImageResource(R.drawable.favorite_selected);
    
                    SQLiteDatabase db = helper.getWritableDatabase();
    
                    ContentValues values = new ContentValues();
                    //组装数据
                    values.put("news_url", news_url);
                    values.put("news_title", news_title);
                    values.put("news_date", news_date);
                    values.put("news_author", news_author);
                    values.put("news_picurl", news_picurl);
    
                    db.insert("Collection_News", null, values);
    
                    db.close();

    设置页面:

    清空缓存:

    因为在加载新闻列表时对新闻图片采取了三级缓存策略(网络,本地文件,内存),所以会产生一定的缓存,该功能会清理掉所有缓存;

    代码实现:

     // 获取文件
        //Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
        //Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
        public static long getFolderSize(File file) throws Exception {
            long size = 0;
            try {
                File[] fileList = file.listFiles();
                for (int i = 0; i < fileList.length; i++) {
                    // 如果下面还有文件
                    if (fileList[i].isDirectory()) {
                        size = size + getFolderSize(fileList[i]);
                    } else {
                        size = size + fileList[i].length();
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return size;
        }
    
        /**
         * * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * *
         *
         * @param context
         */
        public static void cleanInternalCache(Context context) {
            deleteFilesByDirectory(context.getCacheDir());
        }

    退出应用:

    用户点击后直接退出程序并返回桌面。

    代码实现:

    专门创建了一个用户维护所有活动(页面)的工具类,当用户点击退出按钮时实际调用exit方法,结束活动类表中每一个活动,并执行System.exit(0);退出。

    public class ApplicationUtil extends Application {
        private List<Activity> mList = new LinkedList<Activity>();
        private static ApplicationUtil instance;
    
        private ApplicationUtil() {
        }
    
        public synchronized static ApplicationUtil getInstance() {
            if (instance == null) {
                instance = new ApplicationUtil();
            }
            return instance;
        }
    
        // 添加Activity到列表中维持
        public void addActivity(Activity activity) {
            mList.add(activity);
        }
    
        public void exit() {
            try {
                for (Activity activity : mList) {
                    if (activity != null) {
                        activity.finish();
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                System.exit(0);
            }
        }
    }

    我的:

    账号安全:

    该功能即修改用户基本信息;本质是对SQLite的应用;

    收藏夹:列举曾收藏过的所有新闻;

     

    ----------华丽分割线----------

     

    至此,项目介绍完毕。

     

    展开全文
  • 有趣python 小项目 大全

    万次阅读 2019-02-25 16:25:38
    1、某事件发生时,给客户打电话,提醒客户。事先录制好一段音频,客户接通电话后,自动播放 ... 2、配置阿里云邮件服务 ... 3、十个热门项目 https://blog.c...

    1、某事件发生时,给客户打电话,提醒客户。事先录制好一段音频,客户接通电话后,自动播放

    https://blog.csdn.net/u014633966/article/details/87616715

    2、配置阿里云邮件服务

    https://blog.csdn.net/u014633966/article/details/87877846

    3、十个热门项目

    https://blog.csdn.net/MOY37RQW1JarN33BgZk/article/details/87035623

    4、视频直播实现

    https://blog.csdn.net/STN_LCD/article/details/56012437

    5、开放api

    https://github.com/toddmotto/public-apis

    展开全文
  • 小项目

    2019-03-21 18:07:32
    import tools while True: tools.show_menu() msg = input(“请输入需要的操作:”) if msg == “0”: break if msg == “1”: tools.add_card() elif msg == “2”: tools.read_cards() elif msg == “3”: ...
  • 有没有简单一点的 Python 小例子或小项目

    万次阅读 多人点赞 2020-02-17 17:31:13
    分享一波Github上适合新手入门、又十分有趣的Python项目~ 1. 人脸识别 star:30.5k 最简洁的人脸识别库。可以使用Python和命令行工具提取、识别、操作人脸。其人脸识别是基于业内领先的C++开源库dlib中的深度学习...
  • 适合初学者练手的vue小项目(附github源码)

    万次阅读 多人点赞 2019-01-22 10:04:00
    vue慢慢的成为了前端最受欢迎的框架之一,在很多项目之中开发都能用得到,...如果在平时的工作里,有些公司用不到这两项技能,那你也要在业余的时间里面,找一些教程和练手的vue小项目。以下是今年的一些可以练笔的...
  • java项目源码分享——适合新手练手的java项目

    万次阅读 多人点赞 2018-03-16 10:48:45
    源码下载(实例一):jsp...源码下载(实例三)GitHub - uboger/LibraryManager: JAVA GUI 图书馆管理系统 源码下载(实例四):java swing开发企业人事管理系统源代码下载 源码下载(实例一):java swing开发网...
  • 相信很多伙伴在学习完SSM三大架构以后,不知道该如何找到一个简单容易上手的项目进行实战训练,经常在博客上看到一个不错的项目下载下来以后全部都是代码,无处下手。因此本文力求以最简单易懂的项目结构和代码...
  • 首先,确保 IDEA软件正确安装完成,Java 开发工具包 JDK安装完成。 IntelliJ IDEA下载地址:https://www.jetbrains.com/idea/download/#section=windows JDK 下载地址:...
  • Java项目实战

    万次阅读 多人点赞 2017-12-27 13:36:57
    为大家分享一些Java项目实战,希望大家能够从里面中学习到自己想学的东西。
  • java 练手小项目

    千次阅读 2018-03-29 20:45:28
    学习了javaSE的基础,为了巩固对Java面向对象编程,以及java多线程编程的理解,使用swing 写了一个很简单的小项目,源码github地址: https://github.com/pythondever/swing-demo 喜欢的同学可以学习学习 整体...
  • Jenkins+Maven+SVN自动化部署java项目

    万次阅读 2018-07-20 19:42:27
    安装Jenkins 提示:首先Jenkins安装方式有2中,一种是yum安装,另一种是使用war的方式进行安装(war就需要安装tomcat) ... 如果我们想使用war包的方式可以直接下载war包 Jenkins访问地址:localhost:8080/jenkins...
  • GitHub上非常实用的40个开源JAVA项目

    万次阅读 多人点赞 2019-03-09 15:10:52
    分享一下我认为值得关注的,非大型大家都熟知的: 1.biezhi/blade:一款轻量级、高性能、简洁优雅的MVC框架。 ... 2.scribejava/scribejava:一个简单的 Java 实现的 OAuth/OAuth2 库。...3.winterbe/java8-tu...
  • 适合Java新手练手的小项目

    万次阅读 多人点赞 2018-10-08 15:40:00
    对于很多朋友来说,Java是学习编程的开始,也有很多朋友希望通过Java可以找到工作,...就需要一些小项目来练手,这里分享一些还不错供大家学习提高。 源码下载(实例一): jsp开发完整的博研图书馆后台管理系统...
  • 项目目录: MyJFrame:实现项目界面样式; AppProcess:实现调用api或爬虫拿数据; NLIProcess:解析用户输入语句意图; lib中是程序开发需要用到的jar包列表。主要代码说明: 程序不同功能领域由选项卡...
  • Java项目源码分享——适合新手练手的Java Web项目

    千次阅读 多人点赞 2018-11-23 21:25:09
    所有推荐的项目,一般...另外一点,如果你想提高自己的Java Web水平,一样建议你好好敲一次下面的几个项目。 如果你没有学习好Java基础,看下面的内容上手比较难,没有一些基本的思路,你可以选择先再去学习一遍Ja...
  • 20个Java小项目,献给嗜学如狂的人,拿来练练手

    万次阅读 多人点赞 2019-01-28 11:10:42
    最后再通过有趣的练手项目进行巩固。 JAVA基础 Java编程语言(新版 2. Java进阶之设计模式 3. JDK 核心 API 4. MySQL 基础课程 5. 正则表达式基础 6. JDBC 入门教程 J2SE &amp; SSH框架 ...
  • Github 上优秀的 Java 项目推荐

    千次阅读 2019-08-15 17:10:08
    Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。 2、DoraemonKit 地址:didi/DoraemonKit 简称 "DoKit" 。一款功能齐全的客户端( iOS 、Android )研发助手,你值得拥有。 3、advanced-...
  • Java——一些适合新手练手的Java项目

    千次阅读 2018-06-20 09:52:56
    虽然不少人曾抱怨Java语言就像老太太的裹脚布,又臭又长,有时写了500行都不能表达程序员的意图。但从市场上的招聘现状看,Java工程师依然有着其他语言不可取代的竞争优势。看到了这里,恭喜...
  • 一个java项目的开发流程

    万次阅读 2018-11-05 11:35:25
    项目过程 &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1、项目启动 ...
  • 献给java初学者,非常适合新手练习的Java项目

    千次阅读 多人点赞 2018-12-23 10:08:41
    Java作为一门古老的语言,已有20年左右的历史,这在发展日新月异的技术圈可以说是一个...看到了这里,恭喜正式开始进入主题:适合新手练手的Java项目? 图书管理系统: 源码下载(实例一): jsp开发完整的博研...
  • java后台入门小项目(推荐)

    千次阅读 2019-03-26 17:51:22
    如果你是java后端研发的新同学,该项目是一个好的选择,作为入门学习,查看后端基本的结构有哪些,以及一些原生jdbc的一些写法,封装 https://github.com/zhoupengwa/photograph_u ...
  • Java新手入门经典小项目之银行系统

    千次阅读 多人点赞 2018-12-05 14:55:04
    项目要求: 设计一个简单的银行,内容包括注册,登录,存钱,取钱,转账,查询余额以及退卡。 项目分析: 简单的银行系统会有人对卡的存取转查一系列操作。而银行卡本身会有自己的id,密码,金额。银行需要做的...
  • 项目基本完成, 有些功能没有做的很好见谅, 先给你 大致的项目截图 1. Menu菜单类 2. Register注册(开户) 3. ReportLose挂失 在查询 存款 取款 转账 改密操作都需要登录,所以登录界面只截一
  • java 适合练手的java项目

    千次阅读 2019-09-04 14:06:22
    Java作为一门古老的语言,已有20年左右的历史,这在发展日新月异的技术圈可以说是一个...看到了这里,恭喜正式开始进入主题:适合新手练手的Java项目? 源码下载(实例一): jsp开发完整的博研图书馆后台管理系...
  • JAVA项目实战练习-----小白进阶之路2

    千次阅读 热门讨论 2018-05-08 10:13:47
    今天接着昨天的内容,继续来完成绘画板这个项目昨天完成了鼠标画笔功能,那么我们现在实现工具栏的功能,java中的工具栏使用javax.swing.JToolBar类表示,下面把新代码插入到DrawPictureFrame.java类中添加完工具栏...
  • 细数GitHub上既有趣又有用的Java项目Top14   在 GitHub 上有很多项目,能够帮我们优化手头的编程项目,或学习更多编程知识。下面我们分享 GitHub 上 14 个既有趣又有用的 Java 项目。 在 GitHub 上有很多项目...
  • 13个不容错过的Java项目

    千次阅读 2016-09-03 14:23:02
    今天我们将整理一大波干货满满的Java示例代码与能力展示素材。 GitHub可谓一座程序开发的大宝库,有些素材值得fork,有些则能帮助我们改进自有代码或者学习编程技能。无论如何,开发工作当中我们几乎不可能绕得开...
  • Java【有哪些适合新手练手的Java项目?】

    万次阅读 多人点赞 2017-09-10 20:27:29
    Java作为一门古老的语言,已有20年左右的历史,这在发展日新月异的技术圈可以说是一个神话。 虽然不少人曾抱怨Java语言...看到了这里,恭喜正式开始进入主题:适合新手练手的Java项目?  C9154343-0F98-4774-A

空空如也

1 2 3 4 5 ... 20
收藏数 3,309,419
精华内容 1,323,767
关键字:

小项目