アンドリュースのカリキュラムのデザイン
会計管理システム
学校:瀋陽工業研究所
部署:情報と制御工学
主:コンピュータ科学と技術
クラス: 1702
学籍番号: 173 230 222
名前:ヤン風水
講師:郭ダン
ディレクトリ
A. 分析を必要とする ..................................
II。テクニカルノート ..................................
III。コード ......................................
IV。システムテスト ..................................
V. システム実装 ..................................
VI。概要 ......................................
A:ニーズ分析
- 機能の説明:
アカウント、クエリと変更のアカウントを追加し、アカウント情報の統計情報、退出システム
- アイデアを設計します。
(1)新しいアカウント:あなたは新しいアカウント情報を保存し、アカウントの含有量を増加させることができます
(2)クエリと変更:ビューのアカウント情報は、監査のアカウントを変更し、変更された情報の保存が可能
(3)統計のアカウント:簡単に鑑賞するためにいくつかの時間のための統計システムの自動分類を、アカウント
あなたは、システムをシャットダウンするとき、あなたはすぐにシステムを終了することができます:システムを終了する(4)
II。テクニカルノート
今日では、技術が継続的に改善している、人々は、ハイテクのために、ますます需要が高いですで、より多くのAndroidプラットフォーム上のアプリケーション-demand。このコースは今月かもしれ記録的な収益と支出と収入と支出の統計の記録を達成するための課金管理システムを実現するために主に設計され、あなたが登録するにはログインすることができます。使用SQLiteのストレージ技術の収入と支出情報。
UMLのクラス図
図例の分析:
III。コード
文書のリスト:
レイアウトファイル:
1.スクリーンショット
记账统计主界面
添加收入支出
登录
2. 原文件
(1)LoginActivity.java: 主要用来进行登录
/**
* login event
* @param v
*/
public void OnMyLoginClick(View v){
if(pubFun.isEmpty(editPhone.getText().toString()) || pubFun.isEmpty(editPwd.getText().toString())){
Toast.makeText(this, "手机号或密码不能为空!", Toast.LENGTH_SHORT).show();
return;
}
//call DBOpenHelper
DBOpenHelper helper = new DBOpenHelper(this,"qianbao.db",null,1);
SQLiteDatabase db = helper.getWritableDatabase();
Cursor c = db.query("user_tb",null,"userID=? and pwd=?",new String[]{editPhone.getText().toString(),editPwd.getText().toString()},null,null,null);
if(c!=null && c.getCount() >= 1){
String[] cols = c.getColumnNames();
while(c.moveToNext()){
for(String ColumnName:cols){
Log.i("info",ColumnName+":"+c.getString(c.getColumnIndex(ColumnName)));
}
}
c.close();
db.close();
//将登陆用户信息存储到SharedPreferences中
SharedPreferences mySharedPreferences= getSharedPreferences("setting",Activity.MODE_PRIVATE); //实例化SharedPreferences对象
SharedPreferences.Editor editor = mySharedPreferences.edit();//实例化SharedPreferences.Editor对象
editor.putString("userID", editPhone.getText().toString()); //用putString的方法保存数据
editor.commit(); //提交当前数据
this.finish();
}
else{
Toast.makeText(this, "手机号或密码输入错误!", Toast.LENGTH_SHORT).show();
}
}
(2)RegistActivity 主要注册成为会员
.java:
/**
* Description : 注册信息
*/
/**
* register event
* @param v
*/
public void OnMyRegistClick(View v)
{
boolean isTrue = true;
if(pubFun.isPhoneNumberValid(editPhone.getText().toString()) == false){
isTrue = false;
Toast.makeText(this, "手机号格式不正确!", Toast.LENGTH_SHORT).show();
return;
}
if(pubFun.isEmpty(editPwd.getText().toString())){
isTrue = false;
Toast.makeText(this, "密码不能为空!", Toast.LENGTH_SHORT).show();
return;
}
if(isTrue = true){
//call DBOpenHelper
DBOpenHelper helper = new DBOpenHelper(this,"qianbao.db",null,1);
SQLiteDatabase db = helper.getWritableDatabase();
Cursor c = db.query("user_tb",null,"userID=?",new String[]{editPhone.getText().toString()},null,null,null);
if(c!=null && c.getCount() >= 1){
Toast.makeText(this, "该用户已存在", Toast.LENGTH_SHORT).show();
c.close();
}
else{
//insert data
ContentValues values= new ContentValues();
values.put("userID",editPhone.getText().toString());
values.put("pwd",editPwd.getText().toString());
long rowid = db.insert("user_tb",null,values);
Toast.makeText(this, "注册成功", Toast.LENGTH_SHORT).show();
this.finish();
}
db.close();
}else{
return;
}
}
(3)SpendingActivity 记录记账信息添加
.java:
/**
* Description :记账
*/
String[] titles = new String[]{"明细", "类别报表"};
private static final String[] yearList = {pubFun.getTime("Y") + "年"};
private static final String[] monthList = { "01月", "02月", "03月", "04月", "05月", "06月", "07月", "08月", "09月", "10月", "11月", "12月" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//去除工具栏
getSupportActionBar().hide();
setContentView(R.layout.spending);
initViews();
initSpinner();
mFragmentAdapter = new FragmentAdapter(this.getSupportFragmentManager(), mFragmentList);
vp.setOffscreenPageLimit(2);//ViewPager的缓存为2帧
vp.setAdapter(mFragmentAdapter);
vp.setCurrentItem(0);//初始设置ViewPager选中第一帧
item_detail.setTextColor(Color.parseColor("#1ba0e1"));
//ViewPager的监听事件
vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
/*此方法在页面被选中时调用*/
//title.setText(titles[position]);
changeTextColor(position);
}
@Override
public void onPageScrollStateChanged(int state) {
/*此方法是在状态改变的时候调用,其中arg0这个参数有三种状态(0,1,2)。
arg0==1的时辰默示正在滑动,
arg0==2的时辰默示滑动完毕了,
arg0==0的时辰默示什么都没做。*/
}
});
(4)MainActivity 系统的主界面包括按钮
.java:
/**
* Description :主界面
*/
package com.hyl.accountbook;
import com.hyl.accountbook.CircleMenuLayout.OnMenuItemClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Toast;
/**
* @programName: MainActivity.java
* @programFunction: the home page
* @createDate:
* @author: AnneHan
* @version:
* xx. yyyy/mm/dd ver author comments
* 01. 1.00
*/
public class MainActivity extends AppCompatActivity {
//第一次点击事件发生的时间
private long mExitTime;
private CircleMenuLayout mCircleMenuLayout;
private String[] mItemTexts = new String[] { "登录&注册", "关于我们", "心愿墙",
"特色设置", "收入&支出", "统计" };
private int[] mItemImgs = new int[] { R.mipmap.home_mbank_1_normal,
R.mipmap.home_mbank_2_normal, R.mipmap.home_mbank_3_normal,
R.mipmap.home_mbank_4_normal, R.mipmap.home_mbank_5_normal,
R.mipmap.home_mbank_6_normal };
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCircleMenuLayout = (CircleMenuLayout) findViewById(R.id.id_menulayout);
mCircleMenuLayout.setMenuItemIconsAndTexts(mItemImgs, mItemTexts);
mCircleMenuLayout.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public void itemClick(View view, int pos) {
if (mItemTexts[pos] == "特色设置") {
openSettingWind(view);
} else if (mItemTexts[pos] == "收入&支出") {
openSpendingWind(view);
} else if (mItemTexts[pos] == "登录&注册") {
openLoginWind(view);
} else if (mItemTexts[pos] == "统计") {
openCountWind(view);
} else if (mItemTexts[pos] == "关于我们") {
openAboutUsAddWind(view);
} else if (mItemTexts[pos] == "心愿墙") {
openWishWind(view);
}
;
}
public void itemCenterClick(View view) {
Toast.makeText(MainActivity.this, "you can do something just like login or register", Toast.LENGTH_SHORT).show();
}
});
}
/**
* 跳转至登录&注册界面
* @param v
*/
private void openLoginWind(View v){
Intent intent = new Intent();
intent.setClass(MainActivity.this, LoginActivity.class);
this.startActivity(intent);
}
/**
* 跳转至开销界面,记录收入与支出
* @param v
*/
private void openSpendingWind(View v){
Intent intent = new Intent();
intent.setClass(MainActivity.this, SpendingActivity.class);
this.startActivity(intent);
}
/**
* 跳转至统计界面
* @param v
*/
private void openCountWind(View v){
Intent intent=new Intent();
intent.setClass(MainActivity.this, CountActivity.class);
this.startActivity(intent);
}
/**
* 跳转至特色设置界面
* @param v
*/
private void openSettingWind(View v){
Intent intent = new Intent();
intent.setClass(MainActivity.this, SettingActivity.class);
this.startActivity(intent);
}
/**
* 跳转至心愿墙界面
* @param v
*/
private void openWishWind(View v){
Intent intent = new Intent();
intent.setClass(MainActivity.this, WishActivity.class);
this.startActivity(intent);
}
/**
* 跳转至关于我们界面
* @param v
*/
private void openAboutUsAddWind(View v){
Intent intent=new Intent();
intent.setClass(MainActivity.this, AboutUsActivity.class);
this.startActivity(intent);
}
/**
* 点击两次返回退出app
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if ((System.currentTimeMillis() - mExitTime) > 2000) {
Object mHelperUtils;
Toast.makeText(this, "再按一次退出金金记较", Toast.LENGTH_SHORT).show();
//System.currentTimeMillis()系统当前时间
mExitTime = System.currentTimeMillis();
} else {
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
}
四.系统测试:
(1)测试能否添加收入支出
(2)测试能否删除账本信息
(3)测试能否修改金额及账本信息
(4)测试能否查看收入支出情况以及账本信息
五.系统实现:
(1)登录功能可以实现
(2)添加功能可以实现
(3)删除功能可以实现
(4)修改功能可以实现
(5)查询功能可以实现
六.总结
通过这次课程设计,我明白了原来安卓是一门非常难学难理解的课程,繁琐复杂的代码运行,难懂的安卓语言等困难必须要有非常坚实的基础,有足够的功底才能学好这门课程。目前我是处于一种完全理解不了安卓语言的水平,所以我需要更加进一步的学习这门课程,争取能理解得了一些。