基于Android平台的手机开发课程实训
设计课题: 家庭的理财通
系 部: 电子信息工程系
班 级: 11软大1班
姓 名:易海杰
学 号: 201102040119
同组人员: 段宇、陈波、杨嘉、杨旺、石瑶、
指导老师:李新良
目录
目录 2
摘 要 3
关键字:家庭理财; 数据库 ;关系模式第一章 3
第一章 4
引言 4
第二章 系统分析 5
2.1 系统功能需求分析 5
2.2系统和业务流程 6
2.3 系统数据库表设计 6
第三章 为每个功能模块进行代码实现 8
3.1、用户登录模块 8
3.2、收入模块 10
3.3、支出模块 14
3.4、便签模块 18
3.5、系统设置模块 19
3.5 数据管理 21
3.6 退出 25
3.7 系统测试结果 25
致 谢 27
参考文献 27
摘 要
摘要: 家庭财务管理系统应用软件给家庭成员提供了一个在Android操作系统上运行的管理平台,家庭成可以对其成员编号、姓名以及收入、支出构成进行增加、删除、修改等管理操作。同时该系统还提供了家庭成员管理功能,根据家庭成员的分类,其拥有的权限也不同,系统可以判断登录家庭成员管理功能,根据家庭成员的分类,其拥有的权限也不同,系统可以判断登录家庭成员的用户名和密码,从而判断其是否可以使用该系统。系统亦可获取登录家庭成员的权限信息,从而判断该家庭成员能够使用该系统的哪些特定功能,不同级别的家庭成员之间不能够越权使用系统功能。家庭成员分为家长和普通成员两类。
.
通过本次的工程开发,我提高了软件开发的能力,学习新的一门语言的编程技巧,提高工作设计思想,通过与指导老师交流,从中学习知识吸取经验,在技术和软件思想上同时得到锻炼和提高,从而使总体水平升到一个新的高度。
关键字:家庭理财; 数据库 ;关系模式
第一章
引言
近几年来,随着我国城乡居民收入的增加和生活水平的提高,家庭理财已成为人们居家过日子的重要内容。社会学家细心的观察到,时下家庭的“小九九”比之计划经济年代,开始发生微妙的变化。现在的城乡家庭生活发生了明显的变化,人们的收入逐渐拉开档次,消费水平也高了。大多数家庭关注的是提高生活质量,一方面精打细算,量入为出,把钱用在刀刃上;另一方面保证适当的娱乐活动、社会交际、智力开发等方面的开支。为此,不少家庭就有中长期财务预算,有基本建设规划。
总的说来,家庭理财必须以量入为出为原则,以财产保值增值为目标,处理好积累和消费的关系。因此,应树立以下四个观念:
第一,资金运动质量观。资金(包括现金,有价证券,存款等)运动,是家庭经济活动的价值反应,家庭理财应管好用活资金,加速资金周转,提高资金利用效果,力争做到结构合理、偿债能力强、经济效益高,家庭财务做为资金的载体,应力争实现其保值增值。
第二,资金使用责任观。家庭财产作为社会资源的一部分,有责任创造社会财富,履行社会责任,为适应我国经济发展的要求,家庭可根据自身状况,适当投资,适度超前消费。
第三,经济效益观。家庭经济生活的基本目标,是在满足生活最佳需要的基础上,实现家庭财力的最大化。因此家庭理财要与经济效益挂钩,必须处理好投入与产出的关系,规避各种经济风险,堵塞各种经济漏洞,增收节支,当好家理好财,不断提高经济效益。
第四,利益协调观。家庭作为社会的细胞,它无疑又是一个利益结合体。从该意义上讲,家庭理财实质就是处理协调家庭内部及与各有关的经济方面的经济利益关系。在理财实践中,要坚持公正、公平、诚实和守信的原则,妥善处理好家庭内部利益关系、家庭与国家及有关经济单位的利益关系。
第二章 系统分析
2.1 系统功能需求分析
家庭理财管理系统是针对用户要求用计算机,对自己的财务的收入、支出以及相关的各种信息,进行记录、修改、添加、删除而设计的一种现代化管理软件。
通过需求分析,本系统需要具有以下功能:
(1)由于一项新的软件在被使用之前,对于使用者来说是陌生和崭新的,所以要求系统具有良好的人机界面。
(2)能够家庭理财管理系统的各项功能,能成功的对用户各种信息进行管理。
(3)查询、修改、删除、添加数据方便,数据的稳定性和可靠性好。
具体说来,要求本系统具有以下几个功能模块:用户登录模块、用户管理模块、收入模块、支出模块、密码管理模块、账目统计模块以及查询模块。家庭理财通的功能结构如下所示:
家庭理财管理系统结构图
2.2系统和业务流程
2.3 系统数据库表设计
本系统是一个关于家庭理财信息的管理系统,主要包括收入、支出的管理。所以,所设计数据库表的时候设计了密码表、收入表、支出表、便签信息表用来存储对应的信息。
第三章 为每个功能模块进行代码实现
3.1、用户登录模块
用户登录:验证用户信息是否合法,以及验证用户是否为系统设计的合法用户。开始原密码是没有密码,进去后可在系统设置里设置密码。
android:layout_height="fill_parent" android:padding="5dp" > android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center_horizontal" android:text="请输入密码:" android:textSize="25dp" android:textColor="#8C6931" /> android:layout_height="wrap_content" android:layout_below="@id/tvLogin" android:inputType="textPassword" android:hint="请输入密码" />
3.2、收入模块
对于该家庭理财系统来说,收入模块是很非常重要的一个模块。因为它能记录用户收入的一切信息,为用户提供一个非常实用且便捷的记录功能。此外,该模块还具有修改、删除、排序、查找等功能。在家庭理财系统中,用户添加收入记录是很频繁的事,那么在系统中收入的记录就会非常多。正因为如此,每条记录的信息就显得尤为重要。添加收入信息记录的内容包括:收入来源、金额、收入日期、收入者、存放方以及相关备注这几项。另外为了用户能够方便的查看收入记录,故将收入来源进行了分类,具体分为十三类,分别为工资、股票、兼职、基金、分红、利息、奖金、补贴、礼金、租金、应收款、销售款、报销款以及其他。
android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="3" > android:layout_gravity="center" android:gravity="center_horizontal" android:text="新增收入" android:textSize="40sp" android:textColor="#ffffff" android:textStyle="bold" android:layout_height="wrap_content"/> android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" > android:padding="10dp" > android:textSize="20sp" android:text="金 额:" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/txtInMoney" android:layout_alignBottom="@+id/txtInMoney" android:layout_alignParentLeft="true" android:layout_marginLeft="16dp"> android:layout_width="210dp" android:layout_height="wrap_content" android:layout_toRightOf="@id/tvInMoney" android:inputType="number" android:numeric="integer" android:maxLength="9" android:hint="0.00" /> android:textSize="20sp" android:text="时 间:" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/txtInTime" android:layout_alignBottom="@+id/txtInTime" android:layout_toLeftOf="@+id/txtInMoney"> android:layout_width="210dp" android:layout_height="wrap_content" android:layout_toRightOf="@id/tvInTime" android:layout_below="@id/txtInMoney" android:inputType="datetime" android:hint="2011-01-01" /> android:textSize="20sp" android:text="类 别:" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/spInType" android:layout_alignBottom="@+id/spInType" android:layout_alignLeft="@+id/tvInTime"> android:layout_height="wrap_content" android:layout_toRightOf="@id/tvInType" android:layout_below="@id/txtInTime" android:entries="@array/intype" /> android:textSize="20sp" android:text="付款方:" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/txtInHandler" android:layout_alignBottom="@+id/txtInHandler" android:layout_toLeftOf="@+id/spInType"> android:layout_width="210dp" android:layout_height="wrap_content" android:layout_toRightOf="@id/tvInHandler" android:layout_below="@id/spInType" android:singleLine="false" /> android:textSize="20sp" android:text="备 注:" android:layout_height="wrap_content" android:layout_alignTop="@+id/txtInMark" android:layout_toLeftOf="@+id/txtInHandler"> android:layout_width="210dp" android:layout_height="150dp" android:layout_toRightOf="@id/tvInMark" android:layout_below="@id/txtInHandler" android:gravity="top" android:singleLine="false" /> android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="3" > android:padding="10dp" > android:layout_width="80dp" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginLeft="10dp" android:text="取消" /> android:layout_width="80dp" android:layout_height="wrap_content" android:layout_toLeftOf="@id/btnInCancel" android:text="保存" />
类别的代码:
3.3、支出模块
对于该家庭理财系统来说,支出模块是很非常重要的一个模块。因为它能记录用户支出的一切信息,让用户能清楚地知道每一分钱到底是花在了什么地方。为用户提供一个非常实用且便捷的记录功能。此外,该模块还具有修改、删除、排序、查找等功能。
在家庭理财系统中,用户添加支出记录是很频繁的事,那么在系统中支出的记录就会非常多。正因为如此,所以每条记录的信息就显得尤为重要。添加收入信息记录的内容包括:支出金额、支出者、支出日期、支出用途以及相关备注这几项。
android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="3" > android:layout_gravity="center" android:gravity="center_horizontal" android:text="新增支出" android:textSize="40sp" android:textColor="#ffffff" android:textStyle="bold" android:layout_height="wrap_content"/> android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" > android:padding="10dp" > android:textSize="20sp" android:text="金 额:" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/txtMoney" android:layout_alignBottom="@+id/txtMoney" android:layout_alignParentLeft="true" android:layout_marginLeft="16dp"> android:layout_width="210dp" android:layout_height="wrap_content" android:layout_toRightOf="@id/tvMoney" android:inputType="number" android:numeric="integer" android:maxLength="9" android:hint="0.00" /> android:textSize="20sp" android:text="时 间:" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/txtTime" android:layout_alignBottom="@+id/txtTime" android:layout_toLeftOf="@+id/txtMoney"> android:layout_width="210dp" android:layout_height="wrap_content" android:layout_toRightOf="@id/tvTime" android:layout_below="@id/txtMoney" android:inputType="datetime" android:hint="2011-01-01" /> android:textSize="20sp" android:text="类 别:" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/spType" android:layout_alignBottom="@+id/spType" android:layout_alignLeft="@+id/tvTime"> android:layout_height="wrap_content" android:layout_toRightOf="@id/tvType" android:layout_below="@id/txtTime" android:entries="@array/outtype" /> android:textSize="20sp" android:text="地 点:" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/txtAddress" android:layout_alignBottom="@+id/txtAddress" android:layout_toLeftOf="@+id/spType"> android:layout_width="210dp" android:layout_height="wrap_content" android:layout_toRightOf="@id/tvAddress" android:layout_below="@id/spType" android:singleLine="false" /> android:textSize="20sp" android:text="备 注:" android:layout_height="wrap_content" android:layout_alignTop="@+id/txtMark" android:layout_toLeftOf="@+id/txtAddress"> android:layout_width="210dp" android:layout_height="150dp" android:layout_toRightOf="@id/tvMark" android:layout_below="@id/txtAddress" android:gravity="top" android:singleLine="false" /> android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="3" > android:padding="10dp" > android:layout_width="80dp" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginLeft="10dp" android:text="取消" /> android:layout_width="80dp" android:layout_height="wrap_content" android:layout_toLeftOf="@id/btnCancel" android:text="保存" />
3.4、便签模块
主要实现方便记录的添加、删除、修改、游览。
package com.xiaoke.accountsoft.activity;
import com.xiaoke.accountsoft.dao.FlagDAO;
import com.xiaoke.accountsoft.model.Tb_flag;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Accountflag extends Activity {
EditText txtFlag;// 创建EditText组件对象
Button btnflagSaveButton;// 创建Button组件对象
Button btnflagCancelButton;// 创建Button组件对象
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.accountflag);
txtFlag = (EditText) findViewById(R.id.txtFlag);// 获取便签文本框
btnflagSaveButton = (Button) findViewById(R.id.btnflagSave);// 获取保存按钮
btnflagCancelButton = (Button) findViewById(R.id.btnflagCancel);// 获取取消按钮
btnflagSaveButton.setOnClickListener(new OnClickListener() {// 为保存按钮设置监听事件
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String strFlag = txtFlag.getText().toString();// 获取便签文本框的值
if (!strFlag.isEmpty()) {// 判断获取的值不为空
FlagDAO flagDAO = new FlagDAO(Accountflag.this);// 创建FlagDAO对象
Tb_flag tb_flag = new Tb_flag(
flagDAO.getMaxId() + 1, strFlag);// 创建Tb_flag对象
flagDAO.add(tb_flag);// 添加便签信息
// 弹出信息提示
Toast.makeText(Accountflag.this, "〖新增便签〗数据添加成功!",
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(Accountflag.this, "请输入便签!",
Toast.LENGTH_SHORT).show();
}
}
});
btnflagCancelButton.setOnClickListener(new OnClickListener() {// 为取消按钮设置监听事件
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
txtFlag.setText("");// 清空便签文本框
}
});
}}
3.5、系统设置模块
给游览的用户自己设置密码。
package com.xiaoke.accountsoft.activity;
import com.xiaoke.accountsoft.dao.PwdDAO;
import com.xiaoke.accountsoft.model.Tb_pwd;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class Sysset extends Activity {
EditText txtpwd;// 创建EditText对象
Button btnSet, btnsetCancel;// 创建两个Button对象
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.sysset);// 设置布局文件
txtpwd = (EditText) findViewById(R.id.txtPwd);// 获取密码文本框
btnSet = (Button) findViewById(R.id.btnSet);// 获取设置按钮
btnsetCancel = (Button) findViewById(R.id.btnsetCancel);// 获取取消按钮
btnSet.setOnClickListener(new OnClickListener() {// 为设置按钮添加监听事件
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
PwdDAO pwdDAO = new PwdDAO(Sysset.this);// 创建PwdDAO对象
Tb_pwd tb_pwd = new Tb_pwd(txtpwd.getText().toString());// 根据输入的密码创建Tb_pwd对象
if (pwdDAO.getCount() == 0) {// 判断数据库中是否已经设置了密码
pwdDAO.add(tb_pwd);// 添加用户密码
} else {
pwdDAO.update(tb_pwd);// 修改用户密码
}
// 弹出信息提示
Toast.makeText(Sysset.this, "〖密码〗设置成功!", Toast.LENGTH_SHORT)
.show();
}
});
btnsetCancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
txtpwd.setText("");// 清空密码文本框
txtpwd.setHint("请输入密码");// 为密码文本框设置提示
}
});
}
}
3.5 数据管理
主要是管理收集支出、收入以及便签的记录,对于家庭理财系统来说,数据管理功能是非常重要的一个功能。该家庭理财系统数据管理模块包含三个查询方式,以支出信息为例,这三种查询方式分别是按收入类型、按收入时间、按收入者、按收入金额范围进行查询,对应收入表和支出表,用户能按多种不同的方式更清楚地了解到自己的财务情况。
package com.xiaoke.accountsoft.activity;
import java.util.List;
import com.xiaoke.accountsoft.dao.FlagDAO;
import com.xiaoke.accountsoft.dao.InaccountDAO;
import com.xiaoke.accountsoft.dao.OutaccountDAO;
import com.xiaoke.accountsoft.model.Tb_flag;
import com.xiaoke.accountsoft.model.Tb_inaccount;
import com.xiaoke.accountsoft.model.Tb_outaccount;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
public class Showinfo extends Activity {
public static final String FLAG = "id";// 定义一个常量,用来作为请求码
Button btnoutinfo, btnininfo, btnflaginfo;// 创建3个Button对象
ListView lvinfo;// 创建ListView对象
String strType = "";// 创建字符串,记录管理类型
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.showinfo);// 设置布局文件
lvinfo = (ListView) findViewById(R.id.lvinfo);// 获取布局文件中的ListView组件
btnoutinfo = (Button) findViewById(R.id.btnoutinfo);// 获取布局文件中的支出信息按钮
btnininfo = (Button) findViewById(R.id.btnininfo);// 获取布局文件中的收入信息按钮
btnflaginfo = (Button) findViewById(R.id.btnflaginfo);// 获取布局文件中的便签信息按钮
ShowInfo(R.id.btnoutinfo);// 默认显示支出信息
btnoutinfo.setOnClickListener(new OnClickListener() {// 为支出信息按钮设置监听事件
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
ShowInfo(R.id.btnoutinfo);// 显示支出信息
}
});
btnininfo.setOnClickListener(new OnClickListener() {// 为收入信息按钮设置监听事件
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
ShowInfo(R.id.btnininfo);// 显示收入信息
}
});
btnflaginfo.setOnClickListener(new OnClickListener() {// 为便签信息按钮设置监听事件
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
ShowInfo(R.id.btnflaginfo);// 显示便签信息
}
});
lvinfo.setOnItemClickListener(new OnItemClickListener()// 为ListView添加项单击事件
{
// 覆写onItemClick方法
@Override
public void onItemClick(AdapterView> parent, View view,
int position, long id) {
String strInfo = String.valueOf(((TextView) view).getText());// 记录单击的项信息
String strid = strInfo.substring(0, strInfo.indexOf('|'));// 从项信息中截取编号
Intent intent = null;// 创建Intent对象
if (strType == "btnoutinfo" | strType == "btnininfo") {// 判断如果是支出或者收入信息
intent = new Intent(Showinfo.this, InfoManage.class);// 使用InfoManage窗口初始化Intent对象
intent.putExtra(FLAG, new String[] { strid, strType });// 设置要传递的数据
} else if (strType == "btnflaginfo") {// 判断如果是便签信息
intent = new Intent(Showinfo.this, FlagManage.class);// 使用FlagManage窗口初始化Intent对象
intent.putExtra(FLAG, strid);// 设置要传递的数据
}
startActivity(intent);// 执行Intent,打开相应的Activity
}
});
}
private void ShowInfo(int intType) {// 用来根据传入的管理类型,显示相应的信息
String[] strInfos = null;// 定义字符串数组,用来存储收入信息
ArrayAdapter switch (intType) {// 以intType为条件进行判断 case R.id.btnoutinfo:// 如果是btnoutinfo按钮 strType = "btnoutinfo";// 为strType变量赋值 OutaccountDAO outaccountinfo = new OutaccountDAO(Showinfo.this);// 创建OutaccountDAO对象 // 获取所有支出信息,并存储到List泛型集合中 List (int) outaccountinfo.getCount()); strInfos = new String[listoutinfos.size()];// 设置字符串数组的长度 int i = 0;// 定义一个开始标识 for (Tb_outaccount tb_outaccount : listoutinfos) {// 遍历List泛型集合 // 将支出相关信息组合成一个字符串,存储到字符串数组的相应位置 strInfos[i] = tb_outaccount.getid() + "|" + tb_outaccount.getType() + " " + String.valueOf(tb_outaccount.getMoney()) + "元 " + tb_outaccount.getTime(); i++;// 标识加1 } break; case R.id.btnininfo:// 如果是btnininfo按钮 strType = "btnininfo";// 为strType变量赋值 InaccountDAO inaccountinfo = new InaccountDAO(Showinfo.this);// 创建InaccountDAO对象 // 获取所有收入信息,并存储到List泛型集合中 List (int) inaccountinfo.getCount()); strInfos = new String[listinfos.size()];// 设置字符串数组的长度 int m = 0;// 定义一个开始标识 for (Tb_inaccount tb_inaccount : listinfos) {// 遍历List泛型集合 // 将收入相关信息组合成一个字符串,存储到字符串数组的相应位置 strInfos[m] = tb_inaccount.getid() + "|" + tb_inaccount.getType() + " " + String.valueOf(tb_inaccount.getMoney()) + "元 " + tb_inaccount.getTime(); m++;// 标识加1 } break; case R.id.btnflaginfo:// 如果是btnflaginfo按钮 strType = "btnflaginfo";// 为strType变量赋值 FlagDAO flaginfo = new FlagDAO(Showinfo.this);// 创建FlagDAO对象 // 获取所有便签信息,并存储到List泛型集合中 List (int) flaginfo.getCount()); strInfos = new String[listFlags.size()];// 设置字符串数组的长度 int n = 0;// 定义一个开始标识 for (Tb_flag tb_flag : listFlags) {// 遍历List泛型集合 // 将便签相关信息组合成一个字符串,存储到字符串数组的相应位置 strInfos[n] = tb_flag.getid() + "|" + tb_flag.getFlag(); if (strInfos[n].length() > 15)// 判断便签信息的长度是否大于15 strInfos[n] = strInfos[n].substring(0, 15) + "……";// 将位置大于15之后的字符串用……代替 n++;// 标识加1 } break; } // 使用字符串数组初始化ArrayAdapter对象 arrayAdapter = new ArrayAdapter android.R.layout.simple_list_item_1, strInfos); lvinfo.setAdapter(arrayAdapter);// 为ListView列表设置数据源 } @Override protected void onRestart() { // TODO Auto-generated method stub super.onRestart();// 实现基类中的方法 ShowInfo(R.id.btnoutinfo);// 显示支出信息 } } 3.6 退出 用户点退出按钮退出后回到用户登录系统。 btnclose.setOnClickListener(new OnClickListener() {// 为取消按钮设置监听事件 @Override public void onClick(View arg0) { // TODO Auto-generated method stub finish();// 退出当前程序 } }); } } 3.7 系统测试结果 本系统的开发使用了Android作为开发工具,具有良好的可视化的编程环境。在编程的过程中就可以对所做的模块进行运行,发现错误,以便立即进行改正。经过不断地修改和更正,最终得以完善各个模块的功能。通过进行系统各个子模块的测试和总体的测试,本系统各个模块运行良好,能够完成其对应的功能。要进入系统,系统用户必须通过验证。在登录之后,进入系统主界面。在主界面中,系统用户能够进入用户登录模块、用户管理模块、数据库备份模块、收入模块、支出模块、密码管理模块、帐目统计模块、报表输出模块以及查询模块等九个子模块。在各个子模块中,用户能够对子模块中对应的信息进行相应的操作,本系统的各个模块都能正常的运行。 第四章 设计心得与体会 经过这次家庭理财系统的设计和开发,使我们对软件开发有了更深层次的认识,我们认为一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期,这就如同一个人要经过胎儿、儿童、青年、中年和老年,直到最终死亡的漫长时期一样。通常把软件经历的这个漫长的时期称为生命周期。软件开发最初的工作应该是问题定义,也就是确定要求解决的问题是什么;然后进行可行性研究,结局问题是否存在可行解决办法;接下来应该进行需求分析,也就是深入具体地了解用户的要求,在所要开发的系统中必须做什么这个问题上和用户取得完全一致的看法。经过上述软件定义时期的准备工作才能进入开发时期,而在开发时期,首先需要对软件进行设计,然后才能进入编程的阶段,编写程序完之后还必须经过大量的测试工作才能使最终交付使用。所以,编写程序只是软件开发过程的一个阶段,编写程序完成后进入软件测试占全周期的40%-50%,最重要的阶段了。而且在软件开发过程中,编写程序所需求的工作量只占软件开发全周期的10%-20%。再者,通过本次程序设计我们发现对于ANDROID语言和数据库知识的掌握还有很多欠缺的地方,还有很多的盲点,了解还是不够深入,既然认识到了自身的不足,我们都决心今后仍需要不懈的努力学习,不断的完善自我。我们掌握了ANDROID语言和数据库使用的基本要领和技巧,通过本次程序设计实验我们学会了并且能够利用ANDROID语言来完成一个小型简单的数据库系统的设计和实现。总之,通本次实验我们受益颇多,为今后走向社会,适应社会打下了坚实的基础。最后,在整个系统设计与开发过程中,我们深刻的知道了一个系统开发的过程不仅仅是需要专业技能的熟练,而且需要其他相关学科知识的了解与掌握。尤其是当我们着手软件开发编程之前首先要进行的用户调研和需求分析,着其中遇到了一些我们想到没想到的困难。让我们深深的了解到初期系统软件的设计对最后整个系统软件的成功具有相当重要的作用. 参考文献 致 谢 本软件是在李新良老师的热情关心和指导下完成的,用渊博的知识和严谨的治学作风使我受益匪浅,对顺利完成本课程设计起到了极大的作用。在此向她表示我最衷心的感谢!感谢李新良老师在课题设计研究初期给予我一定的帮助,在李新良老师的帮助下课题设计才得以很好的一个开始,有了一个很好的开端,才有后来的成功品、在这个课程设计的过程中发现有很多的不足。在课程设计完成过程中,本人还得到了其他老师和许多同学的热心帮助,我向他们表示深深的谢意,感谢老师对我们的栽培! 最后向在老师您深深地感谢! 参考文献 [1] CARSTEN THOMSEN.VB.NET数据库开发[M].北京:清华大学出版社,2004。 [2] 王进强.Visual Basic.NET基础教程[M].北京:清华大学出版社,2004。 [3] 贾文晋,薛为民.Visual Basic.NET组件开发专业教程[M].北京:清华大学出版社,2004。 [4] 张树泉.Visual Basic.NET控件技术教程[M].北京:清华大学出版社,2004。 [5] 黄淼云.Visual Basic.NET函数技术教程[M].北京:清华大学出版社,2004。 [6] 章立民.Visual Basic.NET程序开发与界面设计秘诀[M].北京:机械工业出版社,2006。 [7] 方睿,仁宏,吴四九.网络数据库原理及应用[M].成都:四川大学出版社,2005。