• 安卓课设报告


                                                 Android移动应用开发课程设计报告

                     (20192020学年 第Ⅰ学期)

                                                            中医考研题库

                           系      计算机信息与控制工程系              

                           专      计算机科学与技术                    

                           班       计算机1702                         

                           学       173230227                           

                           姓       徐非凡                              

                           指导教师   郭丹                                

                   

                  

                   

                   

         

    目录

    . 需求分析 3

    1.1应用需求分析 3

    1.1.1用例分析 4

    1.1.2逻辑模型 5

    1.2功能需求分析 5

    1.2.1功能描述 6

    1.2.2功能模块结构图 6

    1.3数据库设计 6

    二. 系统总体设计 7

    2.1主要页面的设计流程图 7

    2.1.1登录页面 8

    2.1.2错题本页面 8

    三. 系统详细设计 9

    3.1注册模块 9

    3.2登录模块 10

    3.3答题系统模块 10

    3.4错题本模块 11

    3.5添加题目模块 12

    3.6查询题目模块 12

    3.7修改题目模块 13

    3.8删除题目模块 13

    四. 系统实现 14

    4.1注册模块实现 14

    4.2登录模块实现 14

    4.3答题模块实现 15

    4.4错题本模块实现 16

    4.4.1添加题目模块实现 18

    4.4.2查询题目模块实现 19

    4.4.3修改题目模块实现 20

    4.4.4删除题目模块实现 21

    五. 系统测试 22

    5.1测试环境 22

    5.2测试内容 22

    六.课设总结与展望 22

    七.附件 22

      

    一.需求分析

       1.1应用需求分析

          本次课设开发的安卓APP是中医考研题库,包含的功能有丰富的中医综合考研真题以及相关的其他相关类型的题型。此外还包含错题本的功能,可以将做过的需要记忆的题记录下来供自己及时复习。

           做此APP的目的:

                          1.目前市面上关于此类刷题的比较少见,大多都是题库、资料时间长了会比较乏味,此APP则增加了一些趣味性。

                          2.考研难度逐渐增加,但是中医考研这方面因为人数较少,所以一些资料不会很齐全,此APP可以很大程度上去满足考研学生的需求。

                          3.APP的错题本功能也能够帮助学生利用碎片时间去复习知识,可以帮助学生节约时间。

       1.1.1用例分析

           

     1. 用例名称:首页

    说明:系统的初始页面功能

    先决条件:用户

    请求结果:进入登录或者注册页面

    使用频率高

            2. 用例名称:注册

             说明:拥有中医考研题库APP身份的功能

    先决条件:无

    请求结果:拥有使用权

    使用频率:高  

    3. 用例名称:登录

            说明:进入答题页面的条件

    先决条件:已注册

    请求结果:进入答题系统

    使用频率:高

      4. 用例名称:上一题

            说明:可以进行题目间的切换

    先决条件:已登录

    请求结果:进入上一题

    使用频率:高

      5. 用例名称:下一题

            说明:可以进行题目间的切换

    先决条件:已登录

    请求结果:进入下一题

    使用频率:高

    6. 用例名称:错题本

            说明:具有进入错题本页面的功能

    先决条件:已登录

    请求结果:进入错题本

    使用频率:高

    7. 用例名称:添加题目

            说明:具有添加题目的功能

    先决条件:已进入错题本

    请求结果:进入添加题目页面

    使用频率:高

    8. 用例名称:查询题目

            说明:具有查询题目的功能

    先决条件:已进入错题本

    请求结果:进入查询题目页面

    使用频率:高

    9. 用例名称:修改题目

            说明:具有修改题目的功能

    先决条件:已进入错题本

    请求结果:进入修改题目页面

    使用频率:高

    10. 用例名称:删除题目

            说明:具有删除题目的功能

    先决条件:已进入错题本

    请求结果:进入删除题目页面

    使用频率:高

       1.1.2逻辑模型

    1.2功能需求分析

         1.2.1功能描述

    1. 用户注册页面:打开中医考研题库APP进入首页点击注册。
    2. 用户登录页面:注册后点击确认即可跳转登录页面。
    3. 答题系统页面:登录成功后即可进入答题页面,可点击上一题,下一题,错题本。
    4. 错题本页面:点击错题本即可进入,具有增加题目、查询题目、修改题目、删除题目四个功能。

          1.2.2功能模块结构

    1.3数据库设计

            根据次应用所实现的功能来设计出此应用所需要的数据库,以表格的形式表示出数据库表的表结构。

             1.3 错题本  

    字段名

    数据类型

    长度

    主键

    索引

    外键

    说明

    id

    INTEGER

    11

     

    题目的id

    number

    Varchar

    20

     

    错题本的题目

    note

    Varchar

    20

     

    错题本的笔记

     

    二. 系统总体设计

     

       2.1主要页面的设计流程图

    2.1.1登录页面

    2.1.2错题本页面

      3.1注册模块

       3.2登录模块

        3.3答题系统模块

     3.4错题本模块

     3.5添加题目模块

     3.6查询题目模块

     3.7修改题目模块

     3.8删除题目模块

    四. 系统实现

     

       

       4.1注册模块实现

     

    public class third  extends ActionBarActivity {

     

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main_three);

    }

         //实现注册信息传到登录页面

     public void CCC(View view){

     Button qz=(Button)findViewById(R.id.qz);

     EditText et2=(EditText)findViewById(R.id.et2);

     EditText et3=(EditText)findViewById(R.id.et3);

     String txt1=et2.getText().toString();

     String txt2=et3.getText().toString();

     Intent intent=new Intent(this,second.class);

             //信使中存放数据

             intent.putExtra("shoujihao",txt1);

             intent.putExtra("mima",txt2);        

             startActivity(intent);   

     

     }

    }

      

       4.2登录模块实现

     

    public class second extends ActionBarActivity {

     

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main_two);

    }

     public void CCC(View view) {

     Button dl=(Button)findViewById(R.id.dl);

     EditText et1=(EditText)findViewById(R.id.et1);

     EditText et2=(EditText)findViewById(R.id.et2);

     String sjh1=et1.getText().toString();

     String mm1=et2.getText().toString();

    //把信使中的数据取出来

     Intent intent=getIntent();

         String sjh=intent.getStringExtra("shoujihao");

         String mm=intent.getStringExtra("mima");

        //判断输入是否正确

         

         if(sjh1.equals(sjh)&&mm1.equals(mm)) {

                 Toast.makeText(second.this, "登陆成功", 0).show();  //点击按钮时,在下面弹出消息框

                 Intent intent1=new Intent(this,four.class);     

          startActivity(intent1);            

             }else {

                 Toast.makeText(second.this, "请重新输入", 0).show();

                 et1.setText("");

                 et2.setText("");

             }

         

     }

     

    }

     

     

       4.3答题模块实现

        

      

     

    public class four  extends ActionBarActivity {

      private Button ctb,syt,xyt;

      

      public void init(){

     ctb=(Button) findViewById(R.id.ctb);

     syt=(Button) findViewById(R.id.syt);

     xyt=(Button) findViewById(R.id.xyt);

       }

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main_four);

        init();

            //跳转下一个页面

         ctb.setOnClickListener(new OnClickListener(){

     

    public void onClick(View v) {

     Intent intent = new Intent(four.this,Five.class);

      startActivity(intent);

    }

        });

    //跳转上一个页面

         syt.setOnClickListener(new OnClickListener(){

     

    public void onClick(View v) {

     Intent intent = new Intent(four.this,four1.class);

      startActivity(intent);

    }

        });

           xyt.setOnClickListener(new OnClickListener(){

     

    public void onClick(View v) {

     Intent intent = new Intent(four.this,four2.class);

      startActivity(intent);

    }

        });

        

    }

    }

      

       4.4错题本模块实现

          

     

    public class Five extends ActionBarActivity {

     

    private Button addNumBtn,deleteNumBtn,selectNumBtn,alterNumBtn;

       

       public void init(){

       addNumBtn=(Button) findViewById(R.id.addNumBtn);

       selectNumBtn=(Button) findViewById(R.id.selectNumBtn);

       alterNumBtn=(Button) findViewById(R.id.alterNumBtn);

       deleteNumBtn=(Button) findViewById(R.id.deleteNumBtn);

       }

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_five);

     init();

          //跳转到添加页面

            addNumBtn.setOnClickListener(new OnClickListener(){

     

    public void onClick(View v) {

     Intent intent = new Intent(Five.this,AddNumBtn.class);

      startActivity(intent);

    }

        });          

    //跳转到查询页面

            selectNumBtn.setOnClickListener(new OnClickListener(){

     

        public void onClick(View v) {

         Intent intent = new Intent(Five.this,SelectNumBtn.class);

          startActivity(intent);

        

        }

            });

                     //跳转到修改页面

     

            alterNumBtn.setOnClickListener(new OnClickListener(){

     

    public void onClick(View v) {

     Intent intent = new Intent(Five.this, AlterNumBtn.class);

      startActivity(intent);

    }

        });

                         //跳转到删除页面

            deleteNumBtn.setOnClickListener(new OnClickListener(){

     

    public void onClick(View v) {

     Intent intent = new Intent(Five.this, DeleteNumBtn.class);

      startActivity(intent);

    }

        });

            

    }

        

     

     

    }

         

         

    4.4.1添加题目模块实现

    public class AddNumBtn extends ActionBarActivity {

     private Button b1,b2;

     private EditText et1,et2;

     private  MyHelper myHelper;

     private SQLiteDatabase db;

     private String number,note;

      

      public void init(){

     b1=(Button) findViewById(R.id.b1);

     b2=(Button) findViewById(R.id.b2);

     et1= (EditText)findViewById(R.id.timu);

     et2= (EditText)findViewById(R.id.biji);

       }

     

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_add_num_btn);

        init();

        myHelper = new MyHelper(this);

            

         b1.setOnClickListener(new OnClickListener(){

    public void onClick(View view) {

    db= myHelper.getWritableDatabase();

                    number= et1.getText().toString();

                    note= et2.getText().toString();

                    ContentValues values = new ContentValues();        //创建ContentValues对象

                    values.put("number", number);             //将数据添加到ContentValues对象

                    values.put("note", note);

                    db.insert("ky", null, values);  

                    Toast.makeText(AddNumBtn.this, "添加成功", 0).show();

                    db.close();

                    

    }

        });

         b2.setOnClickListener(new OnClickListener(){

     

    public void onClick(View view) {

     Intent intent = new Intent(AddNumBtn.this,Five.class);

      startActivity(intent);

    }

        });

    }

     

     

    }

     

       

      4.4.2查询题目模块实现

             

     

    public class SelectNumBtn extends ActionBarActivity {

    private Button cx ,fh;

    private SQLiteDatabase db;

    private  MyHelper myHelper;

    private ListView listView;

       public void init(){

       cx=(Button) findViewById(R.id.cx);

       fh=(Button) findViewById(R.id.fh);

       listView = (ListView)findViewById(R.id.lv);

       }

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_select_num_btn);

    init();

    myHelper = new MyHelper(this);

    //为查询创建监听事件

    cx.setOnClickListener(new OnClickListener(){

     

    public void onClick(View v) {

       Log.e("xff","123");

                    List<Question> list = new ArrayList<Question>();

                    db = myHelper.getWritableDatabase();

                    Cursor cursor = db.query("ky", null, null, null, null, null, null);

                    //判断是否有内容

                    if (cursor.getCount() == 0) {

                     Toast.makeText(SelectNumBtn.this, "没有数据", 0).show();

                    } else {

                        while (cursor.moveToNext()) {

                           Question q1 = new Question();

                            int numberIndex = cursor.getColumnIndex("number");

                            int noteIndex = cursor.getColumnIndex("note");

                            String number = cursor.getString(numberIndex);

                            String note= cursor.getString(noteIndex);

                            Log.e("xff","cursor.getCount();--"+cursor.getCount()+"number-"+number+"  "+note+"  ");

                            q1.setNumber(number);

                            q1.setnote(note);

                            list.add(q1);

                        }

                      //调用listview

                        CartAdapter adapter = new CartAdapter(SelectNumBtn.this,list);

                        listView.setAdapter(adapter);

                        adapter.notifyDataSetChanged();

                    }

                    cursor.close();

                    db.close();

    }

        });

    fh.setOnClickListener(new OnClickListener(){

     

    public void onClick(View v) {

     Intent intent = new Intent(SelectNumBtn.this,Five.class);

      startActivity(intent);

    }

        });

    }  

      

        

     

    }

            

      4.4.3修改题目模块实现

       protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_alter_num_btn);

                 init();

                 myHelper = new MyHelper(this);

                 

         xg.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {

    number= e1.getText().toString();

    note= e2.getText().toString();

                    db = myHelper.getWritableDatabase();

                    ContentValues values = new ContentValues();

                    values = new ContentValues();       // 要修改的数据

                    values.put("number",number);

                    values.put("note",note);

                    db.update("ky", values, "number=?",

                            new String[]{number}); // 更新并得到行数

                    db.update("ky", values, "note=?",

                            new String[] {note}); // 更新并得到行数

                    Toast.makeText( AlterNumBtn.this, "修改成功", 0).show();

                    db.close();

    }

        });

         fh.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {

     Intent intent = new Intent(AlterNumBtn .this,Five.class);

      startActivity(intent);

    }

        });

    }

       

      4.4.4删除题目模块实现

       protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_delete_num_btn);

     init();

             myHelper = new MyHelper(this);

             

         qr.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {

    db=myHelper.getWritableDatabase();

                      //判断需要删除的题目

                    db.delete("ky","number=?",new String[]{e1.getText().toString()});

                    Toast.makeText(DeleteNumBtn.this, "删除成功", 0).show();

                    db.close();

    }

        });

         fh.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {

     Intent intent = new Intent(DeleteNumBtn.this,Five.class);

      startActivity(intent);

    }

        });

             

      

    五. 系统测试

     

    5.1测试环境

    1.JDK安装

    2.Android SDK安装以及系统设置

    3.Eclipse安装以及ADT工具的安装

    4.在Android模拟器环境下进行测试。

    5.2测试内容

    打开模拟器,打开中医考研题库,从首页-注册-登录-答题页面-上一题-下一题-错题本-增加页面-查询页面-修改页面-删除页面各个页面的测试。

    六.课设总结与展望

     

       在本次开发过程中, 我对开发环境进一步的熟悉, 基本上可以熟练运用这个环境,

    基本掌握了安卓的开发方法及基本流程。在本次开发过程中, 主要用到的知识有Activity

    的使用,在程序中用到了多个窗口, SQL数据库的增删改查,listview的使用。

    开发期间, 我学会了有目的的去学习一些将要用到的东西, 仔细地考虑工作流程的规律

    和步骤, 充分利用手中的开发工具, 利用其所具备的功能, 尽量使自己的开发在代码上实现

    少而精确、让用户能够尽量简单地进行操作。但是在检测过程中, 还是出现了很多的不足之处,

    APP在未来也会添加解析、视频讲解、以及资料查询等功能,另外在实现答题页面的时候因

    存在一些问题所以没有很好地实现答题页面的功能, 这些都是要在今后的工作中需要努力改进

    和完善的。

    很感谢老师能给我们这一次的机会,让我们对这门课有了更深层次的理解。

     

     

       

     

    .附件:

       课设题目

     

          中医考研题库

     

       技术说明

           此应用包括11个页面其中运用的技术有

    1. Ui设计
    2. SQLite数据库

    运用的地方在错题本的添加题目、查询题目、修改题目、删除题目四个页面。

    1. Activity组件的应用

    11Avtivity页面间的互相切换

    1. ListView的使用

    体现在查询题目页面下显示所查询内容的地方。

      

       代码   

    因为无法插入文件代码行数太多 所以用截图代替 实际报告中包含全部文件

    1. 清单文件

          

    1. 布局文件

          

     

     

     

     

     

    1. Java源码

     

  • 相关阅读:
    大一训练赛20181105-二分三分分治部分
    该说命运弄人,毫不留情。
    矩阵快速幂模板
    Final Destination II -- 矩阵快速幂模板题
    UVA -580 组合数学
    NYOJ-16-矩形嵌套 记忆化搜索
    封装标签省,市,县。三级联动
    java压缩图片设置宽高
    sql分页
    常用的正则表达式@java后台
  • 原文地址:https://www.cnblogs.com/xffzcjlove/p/11997232.html
Copyright © 2020-2023  润新知