小试J2me(一个统计软件)

原创 2006年05月31日 13:14:00
利用业余时间写了一个统计的软件,仅做新手研究Rms用,Rms操作未优化!
完成了部分功能:
1.统计当天的消费情况
2.自定义消费项目 如吃饭 坐车等
3.统计当年的消费数目,并按月显示
未完成的是按星期来统计,主要是算法比较复杂!正在努力发现一种简单点的算法

给出midlet类 其他的类如果需要的话联系我吧, 主要是还不太完善 需修改!
/**
 * midlet类显示的界面
 */
import java.util.Date;
import java.util.Enumeration;
import java.util.Vector;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.DateField;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.lcdui.Item;

import com.sun.midp.io.j2me.mms.DatagramImpl.SubclassedDatagramReader;

public class MyMidlet extends MIDlet implements CommandListener{
   
    Display display;
    Vector v = new Vector();
    //fAdd 承载要记帐还是要查账的option
    //fMoney 承载输入钱的类
    //fShowDate1 承载记帐时选择日期的类
    //fDayAgg 承载当天的总计
    //fYear 为输入的要查询的年份
    Form fAdd, fMoney,fShowDate1, fDayAgg,fYear;
   
    //新增加时的输入框
    TextField tfAdd;
    //新增加money时的输入框
    TextField tfMoney;
    //当天的总计
    TextField tfDayAgg;
    //要查询的年份
    TextField tfYear;
    //时间类
    DateField df;

    //lOption 表示记帐还是查账
    //lItemb 表示要记帐的种类
    //lTimeChoice为选择按年,月或者星期结算
    // 按年查询 里面按月分别显示
    List lOption, lItem, lTimeChoice, lFromYear;
   
    //tbNewItem 表示新增加的记帐种类
    TextBox tbNewItem;
   
    //记录每个项目对应的钱
//    int[] money = new int[getDataFromRecordStore.MAXLEN];
   
    //记录所有的项目
    String[] sItem;
    getDataFromRecordStore gdfrs = new getDataFromRecordStore();
    Command cLeft = new Command("Cancel", Command.SCREEN , 0);
    Command cRight = new Command("Comfirm", Command.SCREEN, 1);
    Command cRight2 = new Command("Add", Command.SCREEN , 1);
   
    private static final String MON[] = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
    public MyMidlet() {
        super();
        display = Display.getDisplay( this);
        // TODO Auto-generated constructor stub
    }

    protected void startApp() throws MIDletStateChangeException {
        // TODO Auto-generated method stub
        String[] sOption = {"Record", "Check"};
        lOption = new List("项目选择", List.IMPLICIT  ,sOption,null );
        lOption.addCommand(cLeft);
        lOption.addCommand(cRight);
        lOption.setCommandListener(this);
        display.setCurrent(lOption);
    }

    protected void pauseApp() {
        // TODO Auto-generated method stub

    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
        // TODO Auto-generated method stub

    }

    public void commandAction(Command arg0, Displayable arg1) {
        // TODO Auto-generated method stub
        if (arg1 == lOption)
        {
            if (arg0 == cLeft) //exit midlet
            {
                try {
                    destroyApp(true);
                } catch (MIDletStateChangeException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                notifyDestroyed();
            }
            else
            {
                if (lOption.getSelectedIndex() == 0)   //go to 记帐流程
                {
                    showTime();
                }
                else                                   //go to 结帐流程
                {
                    timeChoice();
                }
            }
        }
        else if (arg1 == fDayAgg)                          
        {
            display.setCurrent(lItem);                    //无论按什么都返回到lItem
        }
        else if (arg1 == lTimeChoice)
        {
            if (arg0 == cLeft)
                display.setCurrent(lOption);
            else
            {
                if (lTimeChoice.getSelectedIndex() == 0)    //YEAR
                {
                    yearInput();
                }
                else if (lTimeChoice.getSelectedIndex() == 1) //MONTH
                {
                   
                }
                else          //WEAK
                {
                   
                }
            }
        }
        else if (arg1 == fYear) // 输入年份
        {
            if (arg0 == cLeft)
            {           
                display.setCurrent(lTimeChoice);
            }
            else //开始查此年的花费
            {
                showYearMoney();
            }
        }
        else if(arg1 == lFromYear)
        {
            if (arg0 == cLeft)
                display.setCurrent(lTimeChoice);
        }
        else if (arg1 == fShowDate1)
        {
            if (arg0 == cLeft)
            {
                display.setCurrent(lOption);//返回
            }
            else
            {
                //显示项目 需读取数据库中的项目和money
                showItem();
            }
        }
        else if (arg1 == lItem)
        {
            if (arg0 == cLeft)
            {
                //TODO 需写入数据库
                //返回时储存数据并且清空所有vector中的类
                gdfrs.saveMoneyToRs(df.getDate().toString(), getCostFromVector());
                v.removeAllElements();
                display.setCurrent(fShowDate1);
            }
            else if (arg0 == cRight)           //Confirm
            {
                MoneyToItem();
            }
            else if (arg0 == cRight2)          //add
            {
                nameOfNewItem();
            }
            else                               //aggregate
            {
                goTotalFromVector();
            }
        }
        else if (arg1 == fAdd)
        {
            if (arg0 == cLeft)
            {
                display.setCurrent(lItem);
            }
            else
            {
                char[] c;
                try {
                    c = (tfAdd.getString().trim()).toCharArray();
                    char cr = c[0];
                } catch (IndexOutOfBoundsException e) {
                    //如果输入框中什么也没有输入
                    display.setCurrent(lItem);
                    return;
                }
                //新增加的项目加入向量
                v.addElement(new Consumption(tfAdd.getString()));
                gdfrs.saveItemToRecordStore(tfAdd.getString());
                //根新Item
                showItem();       
                display.setCurrent(lItem);
            }
        }
        else if (arg1 == fMoney)//输入钱框结束后
        {
            if (arg0 == cLeft)//返回, 不保存输入结果
            {
                display.setCurrent(lItem);
            }
            else           //确定 保存输入 根新int[] money 中的相应项
            {
                setVectorMoney(sItem[lItem.getSelectedIndex()], Integer.parseInt(tfMoney.getString()));
                lItem.set(lItem.getSelectedIndex(), sItem[lItem.getSelectedIndex()]+"    " + tfMoney.getString(), null);
                display.setCurrent(lItem);
            }
        }
    }
   
    /** 输入year界面
     *
     */
    private void yearInput()
    {
        fYear = new Form("Input Year");
        //取默认的年
        String s = (new Date()).toString();
        tfYear = new TextField("Year", (s.substring(s.indexOf("UTC")+3)).trim(), 4, TextField.DECIMAL);
        fYear.append(tfYear);
        fYear.addCommand(cLeft);
        fYear.addCommand(cRight);
        fYear.setCommandListener(this);
        display.setCurrent(fYear);
    }
   
    /** 按年显示花费的钱 里面按月分
     *
     *
     */
    private void showYearMoney()
    {
        String[] s = gdfrs.getAllRecord(); //读出所有的记录
        int[] money = new int[12];         //每月的money总计
        //什么数据都没有
        if (s == null)
        {
            lFromYear = new List("Month   Cost", List.IMPLICIT);
        }
        else
        {
            lFromYear = new List("Month   Cost", List.IMPLICIT);
            int num = s.length;
            for (int i=0; i<num; i++) //所有记录搜索一遍
            {
                int pos = s[i].indexOf(tfYear.getString());
                if (pos != -1)//是当前的year
                {
                    System.out.println(s[i]);
                    int startIndex = s[i].indexOf(" ") + 1;
                    String sM = s[i].substring(startIndex, startIndex + 3);//找到代表月份的字母缩写
                    for (int j=0; j<MON.length; j++)//根据月份录入数据
                    {
                        if (MON[j].equals(sM))//已经找到
                        {
                            String m = (s[i].substring(pos+4)).trim();
                            money[j] += Integer.valueOf(m);
                            break;
                        }
                    }
                }
                else
                {
                    continue;
                }
            }
           
            int total = 0;
            for (int k=0; k<money.length; k++)
            {
                lFromYear.append(MON[k]+"         " + money[k], null);
                total += money[k];
            }
            lFromYear.append("total" + "      "+total, null);
        }
        lFromYear.addCommand(cLeft);
        lFromYear.setCommandListener(this);
        display.setCurrent(lFromYear);
    }
   
    /**
     *
     */
    private void goTotalFromVector()
    {
        fDayAgg = new Form("");
        tfDayAgg = new TextField("Aggregate", String.valueOf(getMoneyFromVector()), 10, 0);
        fDayAgg.append(tfDayAgg);
        fDayAgg.addCommand(cLeft);
        fDayAgg.addCommand(cRight);
        fDayAgg.setCommandListener(this);
        display.setCurrent(fDayAgg);
    }
   
    /**
     *
     */
    private int getMoneyFromVector()
    {
        int money = 0;
        Enumeration e = v.elements();
        while (e.hasMoreElements())
        {
            money += ((Consumption)e.nextElement()).getCost();
        }
        return money;
    }
   
    /**修改项目的money
     *
     * @param str 项目名称
     * @param money 花费
     */
    private void setVectorMoney(String str, int money)
    {
        Enumeration e = v.elements();
        while (e.hasMoreElements())
        {
            Consumption c = (Consumption)e.nextElement();
            if (c.getName().equals(str))
            {
                c.setCost(money);
                return; //如果找到了项目 就无需在往下做 立即返回
            }
        }
    }
   
    /**返回向量中所有的cost
     *
     * @return
     */
    private int[] getCostFromVector()
    {
        Enumeration e = v.elements();
        int i=0;
        int[] cost = new int[getDataFromRecordStore.MAXLEN];
        while (e.hasMoreElements())
        {
             cost[i++]= ((Consumption)e.nextElement()).getCost();
        }
        return cost;
    }
   
    /**年,月还是日结算
     *
     *
     */
    private void timeChoice()
    {
        String[] s= {"By Year","by Month","by Week"};
        lTimeChoice = new List("Aggregate",List.IMPLICIT );
        lTimeChoice.deleteAll();
        for (int i=0; i<3; i++)
            lTimeChoice.append(s[i], null);
        lTimeChoice.addCommand(cLeft);
        lTimeChoice.addCommand(cRight);
        lTimeChoice.setCommandListener(this);
        display.setCurrent(lTimeChoice);
    }
   
    /**月份转换
     *
     * @param month 数字式的月份输入
     * @return   返回英文的缩写 与Date类一制
     */
    private String getMonthEnglish(int month)
    {
        if (month <= 12)
            return MON[month];
        else
            return null;
    }
   
    //显示时间
    private void showTime()
    {
        fShowDate1 = new Form("Select Time");
        df = new DateField("Time", DateField.DATE);
        df.setLayout(Item.LAYOUT_DEFAULT);
        df.setDate(new Date());
        fShowDate1.append(df);
        fShowDate1.addCommand(cLeft);
        fShowDate1.addCommand(cRight);
        fShowDate1.setCommandListener(this);
        display.setCurrent(fShowDate1);
    }
   
    //增加选项菜单
    private void nameOfNewItem()
    {
        fAdd = new Form("add");
        tfAdd = new TextField("Content", "", 10, 0);
        fAdd.append(tfAdd);
        fAdd.addCommand(cLeft);
        fAdd.addCommand(cRight);
        fAdd.setCommandListener(this);
        display.setCurrent(fAdd);
    }
   
    //输入钱的界面
    private void MoneyToItem()
    {
        fMoney = new Form(lItem.getString(lItem.getSelectedIndex()));
        tfMoney = new TextField("Money", "", 10, TextField.DECIMAL);
        fMoney.append(tfMoney);
        fMoney.addCommand(cLeft);
        fMoney.addCommand(cRight);
        fMoney.setCommandListener(this);
        display.setCurrent(fMoney);
    }
   
    //在手机屏幕上显示item 并读取相对应的moeny
    private void showItem()
    {
        sItem = gdfrs.getItemFromRS();
        String sTemp = df.getDate().toString();
        //只取需要的string部分
        lItem = new List(sTemp.substring(0, sTemp.indexOf("00")), List.IMPLICIT);
        lItem.deleteAll();
       
        //从数据库中读出money
        int[] money = new int[getDataFromRecordStore.MAXLEN];
        int[] temp = gdfrs.getMoneyFromRS(df.getDate().toString());
        money = temp == null ?  money :temp;
        for (int i=0; sItem != null && i<sItem.length ; i++)
        {
            if (sItem[i] != null)
            {
                lItem.append(sItem[i] + "   " + money[i] , null);
                // 把所有显示的项目加入到vector中,方便管理和扩展
                v.addElement(new Consumption(sItem[i], money[i]));
            }
        }
        lItem.addCommand(cLeft);
        lItem.addCommand(cRight);
        lItem.addCommand(cRight2);
        Command cRight3 = new Command("aggregate this day", Command.SCREEN, 1);
        lItem.addCommand(cRight3);
        lItem.setCommandListener(this);
        display.setCurrent(lItem);
    }

}

J2ME及其移植

J2me及其移植   1. 简介 1.1 系统结构 Java ME 以往称作J2ME(Java Platform,Micro Edition),是为机顶盒、...
  • ydhua1988
  • ydhua1988
  • 2015年01月22日 09:22
  • 1166

【代码】如何快速将J2me游戏移植到Android上

前言 小白:“老大,你让做的三个J2me游戏搞定了,请看DEMO。” 老大:“恩,不错,小白,你知道Android这个平台吧?” 小白:“恩,听过。听说和J2ME有很多共同点。” 老大:“(一阵奸...
  • u011884154
  • u011884154
  • 2013年09月11日 12:13
  • 1221

JDK、J2EE、J2SE、J2ME的区别

你对JDK、J2EE、J2SE、J2ME概念是否了解,这里和大家分享一下JDK、J2EE、J2SE、J2ME的概念以及他们的关系区别,相信本文介绍一定会让你有所收获。JDK,J2EE,J2SE,J2M...
  • wangyunzhong123
  • wangyunzhong123
  • 2016年06月02日 13:40
  • 2752

【Android】最近做的一个Android平台下时间统计工具

最近在完成实验室的项目之后花了一点时间弄了一个小应用。因为自己也算是手机重度手机依赖患者,平时虽然玩手机时间不长,但是很频繁,所以一直想要知道自己每天打开手机多少次,用了哪些应用,以及每个应用花了多少...
  • Sugar_Z_
  • Sugar_Z_
  • 2016年01月11日 13:18
  • 1501

机器学习小试(1)TensorFlow的第一个程序

最近,因为项目需要开始接触机器学习。虽然在学校对神经网络等算法已有接触,但早已忘得差不多了。在学习TF之前,建议和我一样,先从理论背景开始看起。...
  • goldenhawking
  • goldenhawking
  • 2017年07月05日 12:58
  • 695

j2me程序如何移植到ophone

文章转自东方尚智3g数字内容学院沈大海老师博客: 中国拥有世界最庞大的电信客户群,仅移动用户就达7亿,3G在中国有最大的市场做后盾,无论现在的市场发展如何的困难,3G费用的降低是大势所趋,不久的...
  • bingchu2401
  • bingchu2401
  • 2017年01月03日 00:27
  • 56

怎么获取J2ME软件签名证书

数字证书就是标志网络用户身份信息的一系列数据,用来在网络通讯中识别通讯各方的身份,即要在Internet上解决"我是谁"的问题,就如同现实中我们每一个人都要拥有一张证明个人身份的身份证或驾驶执照一样,...
  • u014571355
  • u014571355
  • 2014年04月28日 20:03
  • 353

自动化统计工具

【背景】 为更好的提升机器利用率,并保证机器预算不被削减,开发机器利用率监控工具。后续每周对机器利用率进行分析,找出更好的机器利用率提升方法,避免机器资源浪费。 1 #!/usr/bin/env ...
  • u010951938
  • u010951938
  • 2015年09月23日 10:27
  • 567

J2MEWTK提供六种模拟器

J2ME就是Java 2 Platform,micro Edition的缩写。J2ME是Java 2的一个组成部分,与J2SE、J2EE并称。根据Sun Microsystems,Inc.的定义:J2...
  • u012402926
  • u012402926
  • 2016年07月04日 16:20
  • 157

科研数据统计绘图常用软件介绍【持续更新】

科研数据统计绘图常用软件介绍【持续更新】
  • Neil_Pan
  • Neil_Pan
  • 2016年06月17日 20:52
  • 10213
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小试J2me(一个统计软件)
举报原因:
原因补充:

(最多只允许输入30个字)