家庭理财通课程设计_第1页
家庭理财通课程设计_第2页
家庭理财通课程设计_第3页
家庭理财通课程设计_第4页
家庭理财通课程设计_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

制作成员:陈恒志、闫金科、黄立洋、张梦飞班级:14级物联网工程时间:2023年6月20日~26日指导老师:陶少华目录1系统分析与设计31.1可行性分析31.2用户功能需求分析41.3系统性能要求51.4数据库设计62编码与实现82.1主要代码82.2主要界面设计83测试193.1测试原那么 203.2测试目标 203.3测试用例 203.4测试结果 214结论21参考文献 22附录〔程序源代码〕24成员:陈恒志、闫金科、黄立洋、张梦飞成员1:陈恒志,实验报告书写,登录界面、主界面设计成员2:闫金科,新增支出、新增收入、数据库功能设计成员3:黄立洋,我的支出、我的收入、退出功能设计成员4:张梦飞,数据管理、密码设置、收支便签功能设计各功能模块局部代码见附录家庭理财系统开发1.系统分析与设计1.1可行性分析可行性分析主要包括经济可行性、技术可行性、社会可行性。经济可行性首先,本次设计是基于安卓系统的应用开发,安卓应用开发只需要一台性能不错的电脑,这对于大局部大学生来说都是拥有的,特别是计算机专业,只要有了电脑,硬件条件就满足了。其次,只要在网上或是相关书籍上查找安卓平台开发环境搭建的相关资料,然后在电脑上搭建好开发环境,就具备了本次设计的根本条件,最后就是能有一个网络环境,虽然不是必须的,但是在有网络环境情况下,如果遇到困难就可以很方便的查阅资料来寻求解决的方法,而这个条件也是很容易满足的,不管在寝室还是在图书馆。由此可见,在经济上本次设计是可行的。技术可行性本次设计主要是在安卓平台上开发一个理财应用,将会涉及人机交互,数据库操作你,客户端开发,这些利用安卓平台以及安卓平台内嵌的SQLite数据库,运用Eclipse软件Java技术进行代码编写。从自身技术而言,安卓开发需要有一定的Java技术根底、数据库技术根底、对安卓平台的了解、熟悉XML.作为计算机专业的学生,在大学四年里学习过很多类似的根底知识:Java编程、SQLServer数据库原理、XML根底知识等相关根底知识,只要有一定的自学能力,通过阅读安卓开发书籍和网上查询相关的开发资料,是有能力开发出基于安卓系统的理财软件的。由以上两点可以看出,基于安卓系统的理财软件在技术上也是可行的。社会可行性理财是现代社会每个人都必须掌握的根本生存能力之一。随着信息化时代的到来和现代生活节奏的加快,通过纸笔记账的传统理财方式早已远去,通过PC软件实施的信息化理财也曾兴起,但是通过PC软件进行理财,很难做到信息的实时记录。随着Android和iphone等智能的普及,的功能早已不再局限于打发信息,由于具备天然的便携性,的功能和作用正在社交、游戏以及大量实用软件领域大量的替代PC[13]。将理财软件安装在中,用户就可以随时随地的进行记录,并可以进行统计和查看,这样就可以帮助用户真正实时的了解自己的财务状况。因此,开发基于Android系统的理财软件具有很大的实际价值和意义。所以,基于Android系统的理财软件也具有社会可行性。综上所述,本系统的开发目标明确,开发时机成熟,所以完全是可行的。1.2用户功能需求分析家庭理软件是针对用户要求用对自己的财务的收入、支出以及相关的各种信息,进行记录、修改、添加、删除而设计的一种现代化管理软件,所以本软件需要具有以下功能:(1)由于一项新的软件在被使用之前,对于使用者来说是陌生和崭新的,所以要求系统具有良好的人机界面。(2)能够实现家庭理财软件的各项功能,能成功的对用户各种信息进行管理。(3)查询、修改、删除、添加数据方便,数据的稳定性和可靠性好。具体说来,要求本系统具有以下几个功能模块:新增支出、我的支出、新增收入、我的收入、便签、数据管理以及系统设置。家庭理财通的功能结构如下列图1.1所示:图1.1功能结构图1.3系统性能要求为了保证系统在长期使用过程中能保持高效、可靠、平安等。系统应该到达以下性能要求:即时性要求即时性是系统中十分重要的性能之一。在用户使用过程中,及时的处理数据及信息反应对于用户体验至关重要。在系统开发设计时,要充分考虑数据和数据交换,使系统的数据处理能力和响应速度能够满足用户需求[14]。从系统本身来讲,即时准确的处理用户操作是系统成功的标志之一。易用性要求系统的使用者并非专业人员,这就要求系统设计简单,操作直接。所以良好的界面十分重要。界面作为人机交互的窗口,能让用户对软件产生最直观的认识。界面甚至决定了用户对软件的选择。这就要求系统从整体到细节尽量使用用户熟悉的语言和命名信息。要提供足够的帮助解释信息,缩短用户的熟悉过程,并对可能出现的问题给予解决。响应速度要求系统中冗余数据和重复性处理是影响响应速度的最大因素。优秀的数据库设计,各个表结构的最大优化,可以大大提高系统响应速度。系统要做到及时处理,保证用户的使用效率。1.4数据库设计在涉及数据库的软件开发时,对数据库的详细设计是软件开发过程中重中之重,完善的数据库设计是后期开发的必要根底。本工程需要从数据库中查询信息,许多模块功能的实现都需要和数据库进行交互]。用户权限的实现以及页面上各个功能图标的显示是查询数据库动态生成的,并且鉴于系统数据交互的复杂性,一个良好的数据库设计就成为我们必须关注的问题。本系统是一个关于家庭理财信息的管理系统,主要包括收入、支出的管理。所以,所设计数据库表的时候设计了密码表、收入表、支出表、便签信息表用来存储对应的信息。下面将对各个表进行介绍。密码信息表〔表1-1〕:用于用户登入时进行密码核对。表1-1密码信息表字段名数据类型是否主键描述PasswordVarchar〔20〕否用户密码支出信息表〔表1-2〕:用于记录支出信息,主要属性包括id〔编号〕、money〔支出金额〕、time〔支出时间〕、type〔支出类别〕、address〔支出地点〕、mark〔备注〕。表1-2支出信息表字段名数据类型是否主键描述idinteger是编号moneydecimal否支出金额timeVarchar(10)否支出时间typeVarchar(10)否支出类别addressVarchar(100)否支出地点markVarchar(200)否备注收入信息表〔表1-3〕:用于记录收入信息,主要属性包括id〔编号〕、money〔收入金额〕、time〔收入时间〕、type〔收入类别〕、handler〔付款方〕、mark〔备注〕。表3-3收入信息表字段名数据类型是否主键描述idinteger是编号moneydecimal否收入金额timeVarchar(10)否收入时间typeVarchar(10)否收入类别handlerVarchar(100)否付款方markVarchar(200)否备注便签信息表〔表1-4〕:用于记录所有提醒便签信息,主要属性有id〔编号〕、Flag〔便签内容〕。表1-4便签信息表字段名数据类型是否主键描述idinteger是编号Flagvarchar(20)否便签内容2编码与实现2.1主要代码系统程序架构如图2.1所示。图2.1程序架构2.2主要界面设计用户登录,如图2.2所示,验证用户信息是否合法,以及验证用户是否为系统设计的合法用户。首次登录不需要密码,进去后可在系统设置里设置密码。由于本软件属于个人客户端,通常情况下只有本人使用,所以没有用户名,直接进入密码输入环节,便于保护用户隐私。图2.2登入界面用户登入后进入软件的主界面,如图2.3所示。主界面包括软件的所有功能图标,用户可根据需要使用。图2.3主功能界面新增收入,如下列图2.4所示,此模块的功能是添加用户新增的收入。在平时理财的过程中,添加收入记录是很频繁操作,所以此模块为用户提供了一个非常实用而且便捷的操作过程。在这个模块中,用户可以添加收入信息记录的内容包括:金额、时间、类别、付款方以及备注。为了用户能够方便的查看收入记录,故将收入类别进行了分类,具体分为十三类,分别为工资、股票、兼职、基金、分红、利息、奖金、补贴、礼金、租金、应收款、销售款、报销款以及其他。图2.4新增收入界面我的收入,如下列图2.5所示,当在新增收入模块进行了添加操作后,添加的收入记录就会显示在我的收入模块中。在这个界面中可以清楚的看到所有的收入信息。同时在这个模块中可以进行查询、修改、删除操作,而查询的是按照类别来进行查询。图2.5我的收入界面我的支出界面,如图2.6所示,此模块的功能是添加用户的新增支出。同样新增支出可以选择金额、时间、类别、地点和备注。类别可以选择早餐、午餐、晚餐、夜宵、买菜、随礼、应酬、打的以及其他。图2.6新增支出界面我的支出模块,如下列图2.7。当在新增支出模块进行了数据添加操作后,添加的支出记录就会显示在我的支出模块中。在这个界面中可以清楚的看到所有的支出信息。在这个模块中可以进行查询、修改、删除操作,而查询也是按照类别来进行查询。图2.7我的支出界面便签模块,如图2.8所示,它主要实现的是添加便签记录。便签模块可以记录将要进行的收入或支出信息,也就是相当于备忘录的功能。图2.8便签界面系统设置,此模块如图2.9所示,它是让用户来设置密码。密码设置成功后,用户再次登录时就需要所设置的密码。图2.9系统设置数据管理界面,如图2.10所示,对于家庭理财系统来说,数据管理功能是非常重要的一个功能,它主要是管理支出、收入以及便签的记录信息。当点击支出、收入或便签按钮时,下方就会出现所有的支出、收入或便签信息。同时会总计出支出或收入的总金额。另外还有一个统计的功能,可以进行类别的统计。如果支出、收入或便签出现记录错误,点击改条记录,就会进入对应的管理界面。然后就可以对该条记录进行修改或删除,如下列图2.11是对支出信息进行修改或删除的管理界面,图2.12是收入的管理界面。图2.10数据管理界面图2.11支出管理界面图2.12收入管理界面退出,用户点击退出图标后回到登录界面。3测试在系统开发周期中系统测试是一个十分重要的环节。它是保证系统质量与可靠性的最后关口,是对整个系统开发过程包括系统分析、系统设计、系统实现的最终审查。系统测试的对象不仅仅是源程序,而应是整个系统,它把需求分析、概要设计、详细设计以及程序设计各阶段的开发文档,包括需求规格说明、概要设计说明、详细设计说明以及源程序都作为测试的对象[15]。测试的目的就是发现系统的错误。3.1测试原那么〔1〕软件测试工作应该贯穿于软件的整个过程,测试工作应该尽早开始,防止出现需求不能满足客户需求的问题。〔2〕软件测试应由第三方来完成,以便得出客观的结果。程序员不能测试自己的软件。〔3〕测试用例应该考虑到各种情况,如:合法输入、不合法输入以及各种边界值。还应该考虑一些意外情况,如:硬件问题、电源问题等。〔4〕测试方案要严格制定,具有可行性与指导性。〔5〕测试结果、测试用例、统计数据等一定要妥善保存,为后期的维护工作提供便利。3.2测试目标〔1〕通过测试来降低开发风险。〔2〕发现潜在问题并尽早改正。〔3〕在开发工程的过程中将测试看作是一个标准工程。3.3测试用例由于本系统的数据量不是很大,所以测试重点不在测试系统性能,如压力测试、兼容性测试等,本系统测试的重点主要是文本框的输入。测试它每个部件的操作是否符合预期,并且具有良好的交互性和操作友好性,如下表3-1所示。表3-1测试用例表测试工程输入预测结果测试结果保存按钮文本框为空,例如便签输入为空无法保存提示请输入便签保存按钮文本框不为空,例如便签输入:明天要交房租可以保存保存成功日期输入不符合格式,例如:2023-01-32无法输入提示错误并清空日期输入符合格式,例如:2023-01-01可以输入继续操作密码设置六位以上或十位以下,例如:123设置不成功提示密码位数不够或超出密码设置六至十位之间,例如:123456设置成功设置成功金额输入正整数,例如:10可以输入成功金额输入非正整数,例如:-10无法输入无法输入3.4测试结果本系统的开发使用了Android作为开发工具,具有良好的可视化的编程环境。在编程的过程中就可以对所做的模块进行运行,发现错误,以便立即进行改正。经过不断地修改和更正,最终得以完善各个模块的功能。通过进行系统各个子模块的测试和总体的测试,本系统各个模块运行良好,能够完成其对应的功能。要进入系统,系统用户必须通过验证。在登录之后,进入系统主界面。在主界面中,系统用户能够进入新增支出模块、我的支出模块、新增收入模块、我的收入模块、密码管理模块、便签模块等模块。在这些模块中,用户能够对子模块中对应的信息进行相应的操作,本系统的各个模块都能正常的运行。4结论经过这次家庭理财软件的设计和开发,使我们对软件开发有了更深层次的认识,一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期。通常把软件经历的这个漫长的时期称为生命周期。在设计过程中我们遇到了很多问题,因为对基于Android的编程不熟悉,我们前期不知如何下手,为此我们查阅了大量的文献信息,我们阅读大量的书籍,并且仔细研究别人工程的源代码,推敲其中道理。我们也经常在网上下载一些开发实例作为参考,自己尝试着动手去敲代码。另外一旦碰到自己不能解决的问题,我们会立刻询问指导老师或者和同学探讨,听取他们的意见与建议。从中我们学到了很多知识,也迈出了成功的第一步。通过此次软件开发让我们了解到最初的工作应该是问题定义,也就是确定要求解决的问题是什么;然后进行可行性研究,结局问题是否存在可行解决方法;接下来应该进行需求分析,也就是深入具体地了解用户的要求,在所要开发的系统中必须做什么这个问题上和用户取得完全一致的看法。经过上述软件定义时期的准备工作才能进入开发时期,而在开发时期,首先需要对软件进行设计,然后才能进入编程的阶段,编写程序完之后还必须经过大量的测试工作才能使最终使用。所以,编写程序只是软件开发过程的一个阶段,编写程序完成后进入软件测试占全周期的40%-50%,最重要的阶段了。而且在软件开发过程中,编写程序所需求的工作量只占软件开发全周期的10%-20%。再者,通过本次程序设计我发现对于Android语言和数据库知识的掌握还有很多欠缺的地方,还有很多的盲点,了解还是不够深入,当认识到了自身的缺乏,所以今后仍需要不懈的努力学习,不断的完善自我。参考文献[1]黄彬华.Android/平板电脑程序开发教练[M].北京:水利水电出版社,2023.[2]孙宏明.Android程序设计入门、应用到精通[M].北京:中国水利水电出版社,2023.[3]郭少豪.创意之钥:Android交互应用开发[M].北京:中国铁道出版社,2023.[4]杨丰富.Android技术内幕[M].北京:机械工业出版社,2023.[5]吴想想.基于Android平台软件开发方法的研究与应用[D].北京:北京邮电大学,2023.[6]王琳.基于Android平台音频播放系统的设计与实现[D].吉林:吉林大学,2023.[7]李宁.Android开发完全讲义[M].北京:中国水利水电出版社,2023.[8]韩超.Android经典应用程序开发[M].北京:电子工业出版社,2023.[9]杨云君.Android的设计与实现[M].北京:机械工业出版社,2023.[10]秦建平.Android编程宝典[M].北京:北京航空航天大学出版社,2023.[11]李宁.Android开发权威指南[M].北京:人民邮电出版社,2023.[12]王克锋.基于Android的信息推送管理系统的设计和实现[D].大连:大连理工大学,2023.[13]张嘉宾.Android应用的平安性研究[D].北京:北京邮电大学,2023.[14]靳岩、姚尚朗.GoogleAndroid开发入门与实战[M].北京:人民邮电出版社,2023.[15]吴亚峰.Android编程典型实例与工程开发[M].北京:电子工业出版社.2023.附录:MainActivity.java〔主界面〕packagecom.mingrisoft.activity;importjava.util.ArrayList;importjava.util.List;importandroid.app.Activity;importandroid.content.Context;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.AdapterView;importandroid.widget.AdapterView.OnItemClickListener;importandroid.widget.BaseAdapter;importandroid.widget.GridView;importandroid.widget.ImageView;importandroid.widget.TextView;publicclassMainActivityextendsActivity{privateGridViewgvInfo;privateString[]titles=newString[]{"新增支出","新增收入","我的支出","我的收入","数据管理","密码管理","收支便签","退出"};privateint[]images=newint[]{R.drawable.addoutaccount,R.drawable.addinaccount,R.drawable.outaccountinfo,R.drawable.inaccountinfo,R.drawable.showinfo,R.drawable.sysset,R.drawable.accountflag,R.drawable.exit};@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);gvInfo=(GridView)findViewById(R.id.gvInfo);PictureAdapteradapter=newPictureAdapter(titles,images,this);gvInfo.setAdapter(adapter);gvInfo.setOnItemClickListener(newOnItemClickListener(){@OverridepublicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,longarg3){Intentintent=null;switch(arg2){case0:intent=newIntent(MainActivity.this,AddOutaccount.class);startActivity(intent);break;case1:intent=newIntent(MainActivity.this,AddInaccount.class);startActivity(intent);break;case2:intent=newIntent(MainActivity.this,Outaccountinfo.class);IntentstartActivity(intent);break;case3:intent=newIntent(MainActivity.this,Inaccountinfo.class);startActivity(intent);Inaccountinfobreak;case4:intent=newIntent(MainActivity.this,Showinfo.class);startActivity(intent);break;case5:intent=newIntent(MainActivity.this,Sysset.class);startActivity(intent);break;case6:intent=newIntent(MainActivity.this,Accountflag.class);startActivity(intent);break;case7:finish();}}});}}classPictureAdapterextendsBaseAdapter{privateLayoutInflaterinflater;privateList<Picture>pictures;publicPictureAdapter(String[]titles,int[]images,Contextcontext){super();pictures=newArrayList<Picture>();inflater=LayoutInflater.from(context);for(inti=0;i<images.length;i++){Picturepicture=newPicture(titles[i],images[i]);pictures.add(picture);}}@OverridepublicintgetCount(){if(null!=pictures){returnpictures.size();}else{return0;}}@OverridepublicObjectgetItem(intarg0){returnpictures.get(arg0);}@OverridepubliclonggetItemId(intarg0){returnarg0;}@OverridepublicViewgetView(intarg0,Viewarg1,ViewGrouparg2){ViewHolderviewHolder;if(arg1==null){arg1=inflater.inflate(R.layout.gvitem,null);viewHolder=newViewHolder();viewHolder.title=(TextView)arg1.findViewById(R.id.ItemTitle);viewHolder.image=(ImageView)arg1.findViewById(R.id.ItemImage);arg1.setTag(viewHolder);}else{viewHolder=(ViewHolder)arg1.getTag();}viewHolder.title.setText(pictures.get(arg0).getTitle());viewHolder.image.setImageResource(pictures.get(arg0).getImageId());returnarg1;}}classViewHolder{publicTextViewtitle;publicImageViewimage;}classPicture{privateStringtitle;privateintimageId;publicPicture(){super();}publicPicture(Stringtitle,intimageId){super();this.title=title;this.imageId=imageId;}publicStringgetTitle(){returntitle;}publicvoidsetTitle(Stringtitle){this.title=title;}publicintgetImageId(){returnimageId;}publicvoidsetimageId(intimageId){this.imageId=imageId;}}Lojin.main〔登录界面〕<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="://schemas.android/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:padding="5dp"android:background="@drawable/background"><TextViewandroid:id="@+id/tvLogin"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:gravity="center_horizontal"android:text="请输入密码:"android:textColor="#ffffff"android:textSize="25dp"/><EditTextandroid:id="@+id/txtLogin"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/tvLogin"android:hint="请输入密码"android:inputType="textPassword"/><Buttonandroid:id="@+id/btnClose"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_below="@id/txtLogin"android:layout_marginLeft="10dp"android:text="取消"/><Buttonandroid:id="@+id/btnLogin"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_below="@id/txtLogin"android:layout_toLeftOf="@id/btnClose"android:text="登录"/></RelativeLayout>Lojin.java〔登录界面〕packagecom.mingrisoft.activity;importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.Toast;importcom.mingrisoft.dao.PwdDAO;publicclassLoginextendsActivity{privateEditTexttxtlogin;privateButtonbtnlogin,btnclose;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.login);txtlogin=(EditText)findViewById(R.id.txtLogin);btnlogin=(Button)findViewById(R.id.btnLogin);btnclose=(Button)findViewById(R.id.btnClose);btnlogin.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){Intentintent=newIntent(Login.this,MainActivity.class);PwdDAOpwdDAO=newPwdDAO(Login.this);if((pwdDAO.getCount()==0||pwdDAO.find().getPassword().isEmpty())&&txtlogin.getText().toString().isEmpty()){startActivity(intent);//启动主Activity}else{if(pwdDAO.find().getPassword().equals(txtlogin.getText().toString())){startActivity(intent);//启动主Activity}else{Toast.makeText(Login.this,"请输入正确的密码!",Toast.LENGTH_SHORT).show();}}txtlogin.setText("");}});btnclose.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){finish();}});}}Addinaccount.xml〔新增收入〕<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="://schemas.android/apk/res/android"android:id="@+id/initem"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:background="@drawable/background"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="3"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:gravity="center_horizontal"android:text="新增收入"android:textColor="#ffffff"android:textSize="40sp"android:textStyle="bold"/></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"android:orientation="vertical"><RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:padding="10dp"><TextViewandroid:id="@+id/tvInMoney"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/txtInMoney"android:layout_alignBottom="@+id/txtInMoney"android:layout_alignParentLeft="true"android:layout_marginLeft="16dp"android:text="金额:"android:textColor="#ffffff"android:textSize="20sp"></TextView><EditTextandroid:id="@+id/txtInMoney"android:layout_width="210dp"android:layout_height="wrap_content"android:layout_toRightOf="@id/tvInMoney"android:hint="0.00"android:inputType="number"android:maxLength="9"android:numeric="integer"/><TextViewandroid:id="@+id/tvInTime"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/txtInTime"android:layout_alignBottom="@+id/txtInTime"android:layout_toLeftOf="@+id/txtInMoney"android:text="时间:"android:textColor="#ffffff"android:textSize="20sp"></TextView><EditTextandroid:id="@+id/txtInTime"android:layout_width="210dp"android:layout_height="wrap_content"android:layout_below="@id/txtInMoney"android:layout_toRightOf="@id/tvInTime"android:hint="2023-01-01"android:inputType="datetime"/><TextViewandroid:id="@+id/tvInType"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/spInType"android:layout_alignBottom="@+id/spInType"android:layout_alignLeft="@+id/tvInTime"android:text="类别:"android:textColor="#ffffff"android:textSize="20sp"></TextView><Spinnerandroid:id="@+id/spInType"android:layout_width="210dp"android:layout_height="wrap_content"android:layout_below="@id/txtInTime"android:layout_toRightOf="@id/tvInType"android:entries="@array/intype"/><TextViewandroid:id="@+id/tvInHandler"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/txtInHandler"android:layout_alignBottom="@+id/txtInHandler"android:layout_toLeftOf="@+id/spInType"android:text="付款方:"android:textColor="#ffffff"android:textSize="20sp"></TextView><EditTextandroid:id="@+id/txtInHandler"android:layout_width="210dp"android:layout_height="wrap_content"android:layout_below="@id/spInType"android:layout_toRightOf="@id/tvInHandler"android:singleLine="false"/><TextViewandroid:id="@+id/tvInMark"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignTop="@+id/txtInMark"android:layout_toLeftOf="@+id/txtInHandler"android:text="备注:"android:textColor="#ffffff"android:textSize="20sp"></TextView><EditTextandroid:id="@+id/txtInMark"android:layout_width="210dp"android:layout_height="150dp"android:layout_below="@id/txtInHandler"android:layout_toRightOf="@id/tvInMark"android:gravity="top"android:singleLine="false"/></RelativeLayout></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="3"android:orientation="vertical"><RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:padding="10dp"><Buttonandroid:id="@+id/btnInCancel"android:layout_width="80dp"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_marginLeft="10dp"android:text="取消"/><Buttonandroid:id="@+id/btnInSave"android:layout_width="80dp"android:layout_height="wrap_content"android:layout_toLeftOf="@id/btnInCancel"android:text="保存"/></RelativeLayout></LinearLayout></LinearLayout>AddInaccount.java〔新增收入〕packagecom.mingrisoft.activity;importjava.util.Calendar;importandroid.app.Activity;importandroid.app.DatePickerDialog;importandroid.app.Dialog;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.DatePicker;importandroid.widget.EditText;importandroid.widget.Spinner;importandroid.widget.Toast;importcom.mingrisoft.dao.InaccountDAO;importcom.mingrisoft.model.Tb_inaccount;publicclassAddInaccountextendsActivity{privatestaticfinalintDATE_DIALOG_ID=0;privateEditTexttxtInMoney,txtInTime,txtInHandler,txtInMark;/privateSpinnerspInType;privateButtonbtnInSaveButton;privateButtonbtnInCancelButton;privateintmYear;//年privateintmMonth;//月privateintmDay;//日@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.addinaccount);//设置布局文件txtInMoney=(EditText)findViewById(R.id.txtInMoney);//获取金额文本框txtInTime=(EditText)findViewById(R.id.txtInTime);//获取时间文本框txtInHandler=(EditText)findViewById(R.id.txtInHandler);//获取付款方文本框txtInMark=(EditText)findViewById(R.id.txtInMark);//获取备注文本框spInType=(Spinner)findViewById(R.id.spInType);//获取类别下拉列表btnInSaveButton=(Button)findViewById(R.id.btnInSave);//获取保存按钮btnInCancelButton=(Button)findViewById(R.id.btnInCancel);//获取取消按钮txtInTime.setOnClickListener(newOnClickListener(){//为时间文本框设置单击监听事件@OverridepublicvoidonClick(Viewarg0){showDialog(DATE_DIALOG_ID);//显示日期选择对话框}})btnInSaveButton.setOnClickListener(newOnClickListener(){//为保存按钮设置监听事件@OverridepublicvoidonClick(Viewarg0){StringstrInMoney=txtInMoney.getText().toString();//获取金额文本框的值if(!strInMoney.isEmpty()){//判断金额不为空//创立InaccountDAO对象InaccountDAOinaccountDAO=newInaccountDAO(AddInaccount.this);//创立Tb_inaccount对象Tb_inaccounttb_inaccount=newTb_inaccount(inaccountDAO.getMaxId()+1,Double.parseDouble(strInMoney),txtInTime.getText().toString(),spInType.getSelectedItem().toString(),txtInHandler.getText().toString(),txtInMark.getText().toString());inaccountDAO.add(tb_inaccount);//添加收入信息//弹出信息提示Toast.makeText(AddInaccount.this,"〖新增收入〗数据添加成功!",Toast.LENGTH_SHORT).show();}else{Toast.makeText(AddInaccount.this,"请输入收入金额!",Toast.LENGTH_SHORT).show();}}});btnInCancelButton.setOnClickListener(newOnClickListener(){//为取消按钮设置监听事件@OverridepublicvoidonClick(Viewarg0){txtInMoney.setText("");//设置金额文本框为空txtInMoney.setHint("0.00");//为金额文本框设置提示txtInTime.setText("");//设置时间文本框为空txtInTime.setHint("2023-01-01");//为时间文本框设置提示txtInHandler.setText("");//设置付款方文本框为空txtInMark.setText("");//设置备注文本框为空spInType.setSelection(0);//设置类别下拉列表默认选择第一项}});finalCalendarc=Calendar.getInstance();//获取当前系统日期mYear=c.get(Calendar.YEAR);//获取年份mMonth=c.get(Calendar.MONTH);//获取月份mDay=c.get(Calendar.DAY_OF_MONTH);//获取天数updateDisplay();//显示当前系统时间}@OverrideprotectedDialogonCreateDialog(intid){//重写onCreateDialog方法switch(id){caseDATE_DIALOG_ID://弹出日期选择对话框returnnewDatePickerDialog(this,mDateSetListener,mYear,mMonth,mDay);}returnnull;}privateDatePickerDialog.OnDateSetListenermDateSetListener=newDatePickerDialog.OnDateSetListener(){publicvoidonDateSet(DatePickerview,intyear,intmonthOfYear,intdayOfMonth){mYear=year;//为年份赋值mMonth=monthOfYear;//为月份赋值mDay=dayOfMonth;//为天赋值updateDisplay();//显示设置的日期}};privatevoidupdateDisplay(){//显示设置的时间txtInTime.setText(newStringBuilder().append(mYear).append("-").append(mMonth+1).append("-").append(mDay));}}Addoutaccount.xml〔新增支出〕<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="://schemas.android/apk/res/android"android:id="@+id/item"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:background="@drawable/background"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="3"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:gravity="center_horizontal"android:text="新增支出"android:textColor="#ffffff"android:textSize="40sp"android:textStyle="bold"/></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_weight="1"android:orientation="vertical"><RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:padding="10dp"><TextViewandroid:id="@+id/tvMoney"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/txtMoney"android:layout_alignBottom="@+id/txtMoney"android:layout_alignParentLeft="true"android:layout_marginLeft="16dp"android:text="金额:"android:textColor="#ffffff"android:textSize="20sp"></TextView><EditTextandroid:id="@+id/txtMoney"android:layout_width="210dp"android:layout_height="wrap_content"android:layout_toRightOf="@id/tvMoney"android:hint="0.00"android:inputType="number"android:maxLength="9"android:numeric="integer"/><TextViewandroid:id="@+id/tvTime"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/txtTime"android:layout_alignBottom="@+id/txtTime"android:layout_toLeftOf="@+id/txtMoney"android:text="时间:"android:textColor="#ffffff"android:textSize="20sp"></TextView><EditTextandroid:id="@+id/txtTime"android:layout_width="210dp"android:layout_height="wrap_content"android:layout_below="@id/txtMoney"android:layout_toRightOf="@id/tvTime"android:hint="2023-01-01"android:inputType="datetime"/><TextViewandroid:id="@+id/tvType"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/spType"android:layout_alignBottom="@+id/spType"android:layout_alignLeft="@+id/tvTime"android:text="类别:"android:textColor="#ffffff"android:textSize="20sp"></TextView><Spinnerandroid:id="@+id/spType"android:layout_width="210dp"android:layout_height="wrap_content"android:layout_below="@id/txtTime"android:layout_toRightOf="@id/tvType"android:entries="@array/outtype"/><TextViewandroid:id="@+id/tvAddress"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignBaseline="@+id/txtAddress"android:layout_alignBottom="@+id/txtAddress"android:layout_toLeftOf="@+id/spType"android:text="地点:"android:textColor="#ffffff"android:textSize="20sp"></TextView><EditTextandroid:id="@+id/txtAddress"android:layout_width="210dp"android:layout_height="wrap_content"android:layout_below="@id/spType"android:layout_toRightOf="@id/tvAddress"android:singleLine="false"/><TextViewandroid:id="@+id/tvMark"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignTop="@+id/txtMark"android:layout_toLeftOf="@+id/txtAddress"android:text="备注:"an

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论