我是中工的zc,这是我的鸿蒙结课大作业,以下是我的作业报告。

1.介绍

记账软件是指利用电脑软件来记录个人、家庭、部门、企业等实体的资产收支情况的软件。记账软件按使用对象分为非财务人员使用的记账软件和财务人员使用的记账软件。财务人员使用的记账软件也称“会计软件”,是专门用于完成会计工作的计算机应用软件。

2.代码实现

搭建项目开发架构

在鸿蒙系统项目中,一个项目只会存在一个Application类作为管理整个软件的应用程序。因此我们使用该类进行管理所打开的所有Ability页面,在开启一个新的页面,或者关闭一个页面的同时,我们更好的对页面的状态以及生命周期进行监听。代码如下:

package com.example.bookkeepproject;

import ohos.aafwk.ability.Ability; import ohos.aafwk.ability.AbilityPackage;

import java.util.ArrayList; import java.util.List;

/**

  • 主应用程序类,一个应用只有一个应用程序类 */ public class MyApplication extends AbilityPackage { private static List abilities; @Override public void onInitialize() { super.onInitialize(); abilities=new ArrayList<>(); }
    /**
  • 将开启的界面添加至界面集合
  • @param ability */ public void addAbility(Ability ability) { if (!abilities.contains(ability)) { abilities.add(ability); } }

/**

  • 销毁所有的界面对象 */ public void removeAllAbility() { for (Ability activity : abilities) { activity.terminateAbility(); } } }

package com.example.bookkeepproject;

import ohos.aafwk.ability.Ability; import ohos.aafwk.content.Intent;

为了更好的统一管理所有的ability,我们建立BaseAbility(基类)继承至Ability类,那么我们所有的Ability都继承至我们自己的基类,在基类中可以定义封装常用的方法,方便调用,减少耦合度,避免代码冗余。

/**

  • 界面基类 */ public class BaseAbility extends Ability { MyApplication application; BaseAbility context; @Override protected void onStart(Intent intent) { super.onStart(intent); // 单例模式 if (application == null) { application = (MyApplication) getAbilityPackage(); } context = this; addAbility(); }@Override protected void onStop() { super.onStop(); }public void addAbility() { application.addAbility(context); }public void removeAllActivity() { application.removeAllAbility(); } }package com.example.bookkeepproject.slice;

import com.example.bookkeepproject.MainAbility; import com.example.bookkeepproject.utils.MyHelper; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.window.dialog.ToastDialog; import ohos.data.rdb.RdbStore;

import java.text.SimpleDateFormat; import java.util.Calendar;

/**

  • 子界面的基类 */ public class BaseAbilitySlice extends AbilitySlice { MainAbility ability; BaseAbilitySlice context; RdbStore rs; // Preferences preferences; public Calendar calendar = null; public int year=Calendar.getInstance().get(Calendar.YEAR); public int month=Calendar.getInstance().get(Calendar.MONTH)+1; public int day=Calendar.getInstance().get(Calendar.DAY_OF_MONTH); public String[] months = { "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" };
    public String[] types={"支出","收入","转账","余额"}; @Override protected void onStart(Intent intent) { super.onStart(intent); // 单例模式 if (ability == null) { ability = (MainAbility) getAbility(); } context = this; // addAbilitySlice();
if (calendar == null) {
     calendar = Calendar.getInstance();
 }

 if (rs==null)
     rs= MyHelper.getInstance(getContext(),"BookKeep");

// if (preferences==null) // preferences= MyHelper.getInstance("BKInfo",getContext()); // // // 向preferences实例注册观察者 // PreferencesObserverImpl observer = new PreferencesObserverImpl(); // preferences.registerObserver(observer); }

// private class PreferencesObserverImpl implements Preferences.PreferencesObserver { // // @Override // public void onChange(Preferences preferences, String key) { // if ("intKey".equals(key)) { // showToastDialogShort("添加了key重复了"); // } // } // }

/**
 * 获得实时的年月日时分秒
 * @return
 */
public static String getDate() {
    Calendar ca = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
    String date = sdf.format(ca.getTimeInMillis());
    return date;
}

/**
 * 获得实时的年月日
 * @return
 */
public static String getDate1() {
    Calendar ca = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String date = sdf.format(ca.getTimeInMillis());
    return date;
}

public void addAbilitySlice() {
    ability.addAbilitySlice(context);
}

public void removeAllAbilitySlice() {
    ability.removeAllActivity();
}

@Override
protected void onStop() {
    super.onStop();
}

public String getWeek() {
    String info = null;
    int month = calendar.get(Calendar.MONTH) + 1;
    int day = calendar.get(Calendar.DAY_OF_MONTH);
    int count = calendar.get(Calendar.DAY_OF_WEEK) - 1;
    if (count > 0) {
        info = month + "_" + (day - count + 1) + "_" + month + "_"
                + (day + 7 - count);
    }
    return info;
}

public String getmonth() {
    String info = null;

    int month = calendar.get(Calendar.MONTH) + 1;
    // 计算是当月的第几天
    int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.printf("输入的日期是当月的第%d天\n ", dayOfMonth);
    // 计算当月的第一天
    calendar.add(Calendar.DATE, 1 - dayOfMonth);
    // 计算下月的第一天
    calendar.add(Calendar.MONTH, 1);
    // 计算当月的最后一天
    calendar.add(Calendar.DATE, -1);
    // 计算是当月一共几天
    dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.printf("当月一共%d天\n ", dayOfMonth);

    info = month + "月" + 1 + "日--" + month + "月" + dayOfMonth + "日";

    return info;
}

public String getyear() {
    String info = null;

    int month = calendar.get(Calendar.MONTH) + 1;
    // 计算是当月的第几天
    int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.printf("输入的日期是当月的第%d天\n ", dayOfMonth);
    // 计算当月的第一天
    calendar.add(Calendar.DATE, 1 - dayOfMonth);
    // 计算下月的第一天
    calendar.add(Calendar.MONTH, 1);
    // 计算当月的最后一天
    calendar.add(Calendar.DATE, -1);
    // 计算是当月一共几天
    dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.printf("当月一共%d天\n ", dayOfMonth);

    info = "1月1日--" + month + "月" + dayOfMonth + "日";

    return info;
}

/**
 * 查看当前月份
 * @param month
 * @return
 */
public int select_month(int month) {

    return (month == 13) ? 1 : (month);
}

/**
 * 查看当前天数
 * @param month
 * @param day
 * @return
 */
public String select_day(int month, int day) {
    if (day >= 32) {
        int months = select_month(month + 1);
        return months + "-" + (day % 31);
    } else {
        return month + "-" + day;
    }
}

public void showToastDialogShort(String info){
    new ToastDialog(context).setText(info).setDuration(1000).show();
}

public void showToastDialogLong(String info){
    new ToastDialog(context).setText(info).setDuration(2000).show();
}

}

创建滑动加载适配器

package com.example.bookkeepproject.adapter;

import ohos.aafwk.ability.AbilitySlice; import ohos.agp.components.Component; import ohos.agp.components.ComponentContainer; import ohos.agp.components.Image; import ohos.agp.components.PageSliderProvider;

public class LoadingPageAdapter extends PageSliderProvider { private int[] images; private AbilitySlice context;

public LoadingPageAdapter(int[] images, AbilitySlice context) {
    this.images = images;
    this.context = context;
}

@Override
public int getCount() {
    return images.length;
}

@Override
public Object createPageInContainer(ComponentContainer componentContainer, int i) {
    Image image=new Image(context);
    image.setScaleMode(Image.ScaleMode.STRETCH);
    ComponentContainer.LayoutConfig config=new ComponentContainer
            .LayoutConfig(ComponentContainer.LayoutConfig.MATCH_PARENT,
            ComponentContainer.LayoutConfig.MATCH_PARENT);
    image.setLayoutConfig(config);
    image.setPixelMap(images[i]);
    componentContainer.addComponent(image);
    return image;
}

@Override
public void destroyPageFromContainer(ComponentContainer componentContainer, int i, Object o) {
    //滑出屏幕的组件进行移除
    componentContainer.removeComponent((Component) o);
}

@Override
public boolean isPageMatchToObject(Component component, Object o) {
    //判断滑页上的每一页的组件和内容是否保持一致
    return true;
}

}

参考:csdn笔触狂放