1、课 程 设 计 报 告 课程设计名称 移动应用软件开发(andriod)课程设计 专 业 班 级 学 号 姓 名 指导教师 郑凯梅 成 绩 2016年 7 月 5 日50目 录目录一、课程设计内容1二、开发环境及技术1三、系统需求分析1四、概要设计11系统结构图(功能模块图)12功能模块说明13界面布局设计24数据库设计2五、详细设计21查找通讯录信息22修改通讯录33增加通讯录34删除通讯录35排序通讯录36用户登录3六、运行及调试结果31、程序调试42、运行界面截图4七、收获及体会4八、参考文献4九、附录:源代码5一、课程设计内容二、开发环境及技术在无网络连接情况下,需要在线更新的两个软件
2、SDK和Eclipse的ADT插件逍遥子已经在有网络的前提下先完成在线升级之后打包。现在属于绿色低碳无公害软件,将他们解压到开发机里做一些相应的设置就可以使用了。 1. 安装java开发的JDK到本机,配置好环境变量。 2. 解压Android SDK和Eclipse,配置Eclipse的SDK路径。 (android-sdkGOOD.zip 与eclipseOK.rar)。我们可以在D盘或者是E盘建立一个目录Android,然后解压配置好的SDK和配置好的Eclipse文件到这个文件夹下面。,解压完成后生成新的两个目录:比如我是在D:/盘所以 在解压完Eclipse首次运行他时,由于被搬家过
3、来软件自动检查他的工作路径,需要用户设置它的默认工作路径,还需要用户选择SDK的一些配置路径。 系统默认的是在线安装新的SDK组件,我们不可能在没有网络连接的情形下升级应用组件!所以选取Use existing SDKs,然后点击下一步完成经一部的配置。完成配置到Windows里找到Android SDK Manager运行,检测是否可以正常启动。三、系统需求分析手机电子教师管理系统和在手机应用程序中并不常见,一般在手机上较为常见的日程提醒程序无法实现自由管理教师信息信息。经过对周边同学的调查研究,普遍认为这款软件方便实用。本系统是用Android实现的一个教师管理软件,通过对教师需求的考察、
4、分析,要求本软件具有以下功能: 1、简洁操作界面,能保证系统的易用性; 2、教师信息的查询、添加、删除、修改和排序; 3、教师工资的添加、系别的查询。4、每位教师的信息预览。四、概要设计 1系统结构图(功能模块图)教师管理系统管理员登入打开或创建数据库新建教师信息表查询模块插入模块修改模块删除模块排序模块退出管理系统 图1-1教师管理功能模块图2功能模块说明1.打开或创建数据库 用于存放教师信息2.新建教师信息表建表用于创建教师信息各类元素3.查询模块查询教师信息4.插入模块插入教师信息5.修改模块用于修改教师信息6.删除模块用于删除教师信息7.排序模块对教师信息进行排序8.退出模块退出教师管
5、理系统3界面布局设计3.1 首先是登录界面布局,登录界面我们采用绝对布局方式。组成元素主要是TextView、Button和EditText控件。界面跳转技术代码:SQLiteDatabase m_dbSQLiteDatabase=null; m_dbSQLiteDatabase=SQLiteDatabase.openOrCreateDatabase(/data/data/com.example.jsgl/JSDB.db, null); if(m_dbSQLiteDatabase!=null) Cursor resultCursor=m_dbSQLiteDatabase.query(gl,ne
6、w Stringgl_name,gl_mm,null,null,null,null,null); if(resultCursor.moveToFirst() for(int i=0;iresultCursor.getCount();i+) if(username.equals(resultCursor.getString(0)& password.equals(resultCursor.getString(1) Toast.makeText(/创建Toast MainActivity.this,恭喜您登陆成功!,Toast.LENGTH_SHORT).show();/显示Toast信息 Int
7、ent inttMainAct=new Intent (MainActivity.this,guanli.class); startActivityForResult(inttMainAct,INFORMATIONACT); else Toast.makeText(MainActivity.this,请输入正确的用户名或密码!,Toast.LENGTH_SHORT).show(); resultCursor.moveToNext();3.2 主界面和子界面通过线性布局方式进行布局,这样可以显得思路清晰,明朗。主要元素由Button和TextView控件组成。跳转技术:使用Intent方式进行跳
8、转。4数据库设计数据库设计我们建立了一个数据库,在这个数据库下新建了两张用于保存信息的表。教师信息表:序号字段名称中文说明数据类型是否为空描述1User_Id教师IDIETNot Null主键自动增长2User_Name教师姓名TEXTNot Null3User_xb系别TEXT4User_zhic职称TEXT5User_gongz工资INT表4-1 教师信息表管理员表序号字段名字中文说明数据类型是否为空描述1gl_Id管理员IDINTNot Null用户管理员登陆2gl_mm管理员密码INTNot Null密码表4-2 管理员表建数据库和建表的SQL语句:private SQLiteData
9、base OpenOrCreateDB()SQLiteDatabase dbSQLiteDatabase=null;trydbSQLiteDatabase=SQLiteDatabase.openOrCreateDatabase(/data/data/com.example.jsgl/JSDB.db, null);catch(Exception ex)return null;return dbSQLiteDatabase; private boolean CreateTable() String sqlCreateTable =CREATE TABLE JS + (User_Id INTEGER
10、 PRIMARY KEY,User_name TEXT NOT NULL,+ User_xb TEXT,+ User_zhic TEXT,+ User_gongz TEXT); if(m_dbSQLiteDatabase=null)return false; m_dbSQLiteDatabase.execSQL(sqlCreateTable); return true; 首先第一张表是用来保存管理员登录信息,用来进行教师管理系统的登录。另一张表是用来管理教师信息,所用到的技术主要是增、删、改、查和排序。增加sql语句:cvContextValues.put(User_Id, i);/插入数据字
11、段cvContextValues.put(User_name, strName);cvContextValues.put(User_xb, strxb);cvContextValues.put(User_zhic, strzc);cvContextValues.put(User_gongz, strgz);m_dbSQLiteDatabase.insert(JS, null, cvContextValues);/使用insert方法实现插入数据删除SQL语句:String strWhereClause=User_Id=?;/删除条件 String strArrayWhereArg=String
12、.valueOf(str);/删除条件参数 m_dbSQLiteDatabase.delete(JS, strWhereClause, strArrayWhereArg);/调用delete方法删除 myResult.setText(删除成功);提示信息修改SQL语句: ContentValues updateValues=new ContentValues();/对象实例化 updateValues.put(User_Id, strNew);/修改值 String strWhereClause=User_Id=?;/修改条件 String strArrayWhereArg=str;/修改条件
13、参数 m_dbSQLiteDatabase.update(JS, updateValues, strWhereClause, strArrayWhereArg);/调用update方法更新查询SQL语句:String strMsg=查到的数据:n 编号 姓名 性别 职称 工资n; Cursor resultCursor=m_dbSQLiteDatabase.query(JS,new StringUser_Id,User_Name,User_xb,User_zhic,User_gongz,null,null,null,null,null);/调用query方法查询数据 if(resultCurs
14、or.moveToFirst() for(int i=0;iresultCursor.getCount();i+) strMsg+= +resultCursor.getString(0)+ +resultCursor.getString(1)+ +resultCursor.getString(2)+ +resultCursor.getString(3)+ +resultCursor.getString(4)+n;/依次获取查询到的字段 resultCursor.moveToNext();五、详细设计1查找通讯录信息该模块的设计思想为,按照查询关键字从数据库表中读取所有人的信息,并显示查找信息。
15、先打开数据库,利用SQLiteDatabase。Query()方法进行查询,将查询关键字设为null进行整体查询,然后用cursor类实现输出。开始输入查询的条件KEY是否存在输出结束否 是图1 查询流程图 m_dbSQLiteDatabase=SQLiteDatabase.openOrCreateDatabase(/data/data/com.example.jsgl/JSDB.db, null);/打开数据库 if(m_dbSQLiteDatabase!=null) String strMsg=查到的数据:n 编号 姓名 性别 职称 工资n; /查询条件 Cursor resultCurs
16、or=m_dbSQLiteDatabase.query(JS,new StringUser_Id,User_Name,User_xb,User_zhic,User_gongz,null,null,null,null,null); /将查询到的数据一次列出 if(resultCursor.moveToFirst() for(int i=0;iresultCursor.getCount();i+) strMsg+= +resultCursor.getString(0)+ +resultCursor.getString(1)+ +resultCursor.getString(2)+ +resultC
17、ursor.getString(3)+ +resultCursor.getString(4)+n; resultCursor.moveToNext(); 2修改通讯录该模块的设计思想为,按照修改关键字从数据库表中读取所有人的信息,并进行通过输入的修改关键词进行信息的个别修改。修改流程图:开始输入修改的条件输入条件是否存在对应修改结束 否 是 图2 修改流程图修改姓名代码:SQLiteDatabase m_dbSQLiteDatabase=null; m_dbSQLiteDatabase=SQLiteDatabase.openOrCreateDatabase(/data/data/com.exa
18、mple.jsgl/JSDB.db, null);/打开数据库 String str=txtkey.getText().toString();/获取数据字符串 String strNew=txtNew.getText().toString(); if(m_dbSQLiteDatabase!=null)/判断数据库是否为空 String strMsg=查到的数据:n 编号 姓名 性别 职称 工资n; Cursor resultCursor=m_dbSQLiteDatabase.query(JS,new StringUser_Id,User_Name,User_xb,User_zhic,User_
19、gongz,null,null,null,null,null,null);/查询所有教师信息 if(resultCursor.moveToFirst() for(int i=0;iresultCursor.getCount();i+) strMsg+= +resultCursor.getString(0)+ +resultCursor.getString(1)+ +resultCursor.getString(2)+ +resultCursor.getString(3)+ +resultCursor.getString(4)+n; resultCursor.moveToNext(); Cont
20、entValues updateValues=new ContentValues(); updateValues.put(User_Name, strNew);/修改条件 String strWhereClause=User_Id=?; String strArrayWhereArg=str; m_dbSQLiteDatabase.update(JS, updateValues,strWhereClause, strArrayWhereArg);/进行更新 txtresult.setText(strMsg);/显示更新后的内容 Toast.makeText(xiugai.this, 修改成功,
21、 Toast.LENGTH_LONG).show(); else txtresult.setText(未找到!); m_dbSQLiteDatabase.close(); 3增加通讯录该模块的设计思想为,按照需要增加数据写入数据库中,并提示增加成功信息。增加流程图:开始输入增加信息输入添加成功添加成功结束 否 是 图3 增加流程图 增加部分代码:/获得各个控件引用EditText edtname = (EditText) findViewById(R.id.EditText02);EditText edtnum = (EditText) findViewById(R.id.EditText01
22、);EditText edtxb = (EditText) findViewById(R.id.EditText03);EditText edtgz = (EditText) findViewById(R.id.EditText04);EditText edtyx = (EditText) findViewById(R.id.EditText05);SQLiteDatabase m_dbSQLiteDatabase = null;m_dbSQLiteDatabase = SQLiteDatabase.openOrCreateDatabase(/data/data/com.example.jsg
23、l/JSDB.db, null);/打开数据库String strNum, strName, strxb, strzc, strgz;/定义字符串 /获取输入的字符串strNum = edtnum.getText().toString();strName = edtname.getText().toString();strxb = edtxb.getText().toString();strzc = edtgz.getText().toString();strgz = edtyx.getText().toString();int i=Integer.parseInt(strNum);/*Toa
24、st.makeText(add.this,strNum + , + strName + , + strTel + , + strage+ , + stryx, Toast.LENGTH_LONG).show();*/if (m_dbSQLiteDatabase != null) /插入数据ContentValues cvContextValues = new ContentValues();cvContextValues.put(User_Id, i);cvContextValues.put(User_name, strName);cvContextValues.put(User_xb, st
25、rxb);cvContextValues.put(User_zhic, strzc);cvContextValues.put(User_gongz, strgz);m_dbSQLiteDatabase.insert(JS, null, cvContextValues);Toast.makeText(insert.this, 成功添加, Toast.LENGTH_LONG).show();/toast提示 4删除通讯录开始输入删除关键字是否删除删除成功结束该模块的设计思想为,按照修改关键字从数据库表中读取所有人的信息,并进行通过输入的删除关键词进行信息的删除。删除流程图: 否 是 图4 删除流程
26、图 删除模块代码:SQLiteDatabase m_dbSQLiteDatabase=null; m_dbSQLiteDatabase=SQLiteDatabase.openOrCreateDatabase(/data/data/com.example.jsgl/JSDB.db, null); final String str=deleKey.getText().toString(); if (m_dbSQLiteDatabase != null) / delete() if(rId.isChecked() String strMsg=查到的数据:n 编号 姓名 性别 职称 工资n; Curs
27、or resultCursor=m_dbSQLiteDatabase.query(JS,new StringUser_Id,User_Name,User_xb,User_zhic,User_gongz,User_Id=?,new Stringstr,null,null,null); if(resultCursor.moveToFirst() for(int i=0;iresultCursor.getCount();i+) strMsg+= +resultCursor.getString(0)+ +resultCursor.getString(1)+ +resultCursor.getStrin
28、g(2)+ +resultCursor.getString(3)+ +resultCursor.getString(4)+n; resultCursor.moveToNext(); Dialog dialog=new AlertDialog.Builder(shanchu.this)/设置Dialog提示 .setTitle(删除对话框) .setIcon(R.drawable.ic_launcher) .setMessage(确认删除吗?n+strMsg) .setPositiveButton(确认,new DialogInterface.OnClickListener() public v
29、oid onClick(DialogInterface dialog,int which) SQLiteDatabase m_dbSQLiteDatabase=null; m_dbSQLiteDatabase=SQLiteDatabase.openOrCreateDatabase(/data/data/com.example.jsgl/JSDB.db, null); String strWhereClause=User_Id=?;/设置删除条件 String strArrayWhereArg=String.valueOf(str); m_dbSQLiteDatabase.delete(JS,
30、strWhereClause, strArrayWhereArg);/进行删除操作 myResult.setText(删除成功); ).setNegativeButton(取消, new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog,int which) myResult.setText(取消删除); ).create(); dialog.show(); else/txtresult.setText(未找到!);5排序通讯录开始点击降序排序显示排序结果结束该模块的设计思想为,按照ID降序
31、方式进行对数据库信息排序,并进行通过输出界面进行显示排序后的信息。排序流程图:图5 删除流程图降序排序代码:btnpx.setOnClickListener(new OnClickListener()/OnClickListener事件 public void onClick(View v)/重写Onclik方法 SQLiteDatabase m_dbSQLiteDatabase=null;/判断数据库是否为空 m_dbSQLiteDatabase=SQLiteDatabase.openOrCreateDatabase(/data/data/com.example.jsgl/JSDB.db,
32、null);/打开数据库 if(m_dbSQLiteDatabase!=null) String strMsg=查到的数据:n 编号 姓名 性别 职称 工资n; Cursor resultCursor=m_dbSQLiteDatabase.query(JS,new StringUser_Id,User_Name,User_xb,User_zhic,User_gongz,null,null,null,User_Id desc,null);/排序关键字 /将排序的数据一次列出 if(resultCursor.moveToFirst() for(int i=0;iresultCursor.getCo
33、unt();i+) strMsg+= +resultCursor.getString(0)+ +resultCursor.getString(1)+ +resultCursor.getString(2)+ +resultCursor.getString(3)+ +resultCursor.getString(4)+n; resultCursor.moveToNext(); jieg.setText(strMsg);/检结果显示在界面 m_dbSQLiteDatabase.close();/关闭数据库 );6用户登录该模块的设计思想为,按照数据库录入信息查找,将查到的信息与输入信息对比进行登入。
34、开始输入等入信息与数据库信息对比登录成功结束登录流程图: 不存在 存在 图6 登录流程图 登录模块代码:String username=user.getText().toString();/得到user字符串 String password=pass.getText().toString();/得到pass字符串 SQLiteDatabase m_dbSQLiteDatabase=null; m_dbSQLiteDatabase=SQLiteDatabase.openOrCreateDatabase(/data/data/com.example.jsgl/JSDB.db, null); if(
35、m_dbSQLiteDatabase!=null) Cursor resultCursor=m_dbSQLiteDatabase.query(gl,new Stringgl_name,gl_mm,null,null,null,null,null); if(resultCursor.moveToFirst() for(int i=0;iresultCursor.getCount();i+) if(username.equals(resultCursor.getString(0)& password.equals(resultCursor.getString(1)/将获取到的字符串与数据库信息比较
36、 Toast.makeText(/创建Toast MainActivity.this,恭喜您登陆成功!,Toast.LENGTH_SHORT).show();/显示Toast信息 Intent inttMainAct=new Intent (MainActivity.this,guanli.class); startActivityForResult(inttMainAct,INFORMATIONACT); else Toast.makeText(MainActivity.this,请输入正确的用户名或密码!,Toast.LENGTH_SHORT).show(); resultCursor.mo