1 题目描述
这是一个手机通讯录管理软件。
要求:
-
分组管理。能够添加、删除、修改。
-
用户管理。包括姓名、手机、办公电话等。
-
用户查询。初始时按照字母顺序显示所有人员,可以输入姓名或者数字模糊查询。
-
功能模拟。当选中一个用户时,有通话和短信选项可以操作,选择后进入相应界面双卡手机进入所想选用卡选项。
-
功能分析
系统主要功能包括:
-
分组管理。可以添加、修改、删除分组。
-
用户管理。可添加、显示、修改、删除用户信息。用户信息包括姓名、手机、办公电话、电子邮。
-
用户查询。初始时按照字母顺序显示所有人员,可输入姓名或数字进行模糊查询。可按分组显示人员。
-
功能模拟。当选中用户时,有通话和短信选项可以操作,选择后进入相应界面。
-
系统设计
3.1 系统整体结构
3.1.1 系统中的信息类型划分
在本系统中,主要分为两类信息:分组信息和人员信息(如图1所所示)。其中分组信息为分组名称。人员信息包括人员姓名、手机、办公电话、电子邮箱等。
3.1.2 对分组的操作
用户可以添加分组,删除分组,重命名分组。
3.1.3 对人员的操作
用户可以添加人员,删除人员,修改人员,功能模拟。
3.2 主要模块设计代码
1效果图
public class MyLetterListView extends View {
OnTouchingLetterChangedListener onTouchingLetterChangedListener;
String[] b = {"#","A","B","C","D","E","F","G","H","I","J","K","L"
,"M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
int choose = -1;
Paint paint = new Paint();
boolean showBkg = false;
public MyLetterListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MyLetterListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyLetterListView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(showBkg){
canvas.drawColor(Color.parseColor("#40000000"));
}
int height = getHeight();
int width = getWidth();
int singleHeight = height / b.length;
for(int i=0;i<b.length;i++){
paint.setColor(Color.WHITE);
paint.setTypeface(Typeface.DEFAULT_BOLD);
paint.setAntiAlias(true);
if(i == choose){
paint.setColor(Color.parseColor("#3399ff"));
paint.setFakeBoldText(true);
}
float xPos = width/2 - paint.measureText(b[i])/2;
float yPos = singleHeight * i + singleHeight;
canvas.drawText(b[i], xPos, yPos, paint);
paint.reset();
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
final int action = event.getAction();
final float y = event.getY();
final int oldChoose = choose;
final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener;
final int c = (int) (y/getHeight()*b.length);
switch (action) {
case MotionEvent.ACTION_DOWN:
showBkg = true; if(oldChoose != c && listener != null){
if(c>0&&c<b.length){ listener.onTouchingLetterChanged(b[c]);
choose = c; . }
}
break; case MotionEvent.ACTION_MOVE:
if(oldChoose != c && listener != null){
if(c > 0 && c< b.length){
listener.onTouchingLetterChanged(b[c]);
choose = c;
invalidate();
}
}
break;
case MotionEvent.ACTION_UP:
showBkg = false;
choose = -1;
invalidate();
break;
}
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
public void setOnTouchingLetterChangedListener(
OnTouchingLetterChangedListener onTouchingLetterChangedListener) {
this.onTouchingLetterChangedListener = onTouchingLetterChangedListener;
}
public interface OnTouchingLetterChangedListener{
public void onTouchingLetterChanged(String s);
}
}