关闭

小试J2me(一个统计软件)

522人阅读 评论(0) 收藏 举报
利用业余时间写了一个统计的软件,仅做新手研究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);
    }

}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3968次
    • 积分:68
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论