Android第四次作业

1.团队成员

马玉娟   1600802053  162班   https://www.cnblogs.com/huanmeng/

高志杰  1600802039  162班    https://www.cnblogs.com/gao98

高怡      1600802040  162班    https://http://www.cnblogs.com/luy011/

2.APK链接

https://git.dev.tencent.com/gao2039/Schedule_apk.git

3.项目代码地址

https://git.dev.tencent.com/gao2039/Schedule.git

4.介绍团队项目

  4.1 团队项目总体效果截图

 

   4.2实现的功能及其效果的描述

    4.2.1新建课程并完善所有课程信息

       

   4.2.2对已有课程进行修改

    

  4.2.3关于项目的相关信息

4.2.4 显示退出提示

4.2.5 完整流程录屏

4.2.6 修改以及删除录屏

 

4.2.7 设置部分录屏

5. 项目关键代码

   5.1 创建数据库

public class DataBase extends SQLiteOpenHelper{
    
    private final static String DB_NAME="myBase";
    private final static String[] TB_NAME={"Mon","Tue","Wed","Thur","Fri","Sat","Sun"};
    public  final static String ID="_id";
    public final static String CLASS="classes";
    public final static String LOCA="location";
    public final static String TEACHER="teacher";
    public final static String ZHOUSHU="zhoushu";
    public final static String JIESHU="jieshu";
    public final static String TIME1="time1";
    public final static String TIME2="time2";
    public final static String WHICH="which";
    
    public DataBase(Context context){
        super(context,DB_NAME,null,1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        
        for(int i=0;i<7;i++){
        String sql="CREATE TABLE "+TB_NAME[i]+" (_id INTEGER primary key autoincrement,classes varchar(70),location varchar(70)," +
                "teacher varchar(70),zhoushu varchar(70),time1 varchar(70),time2 varchar(70),jieshu varchar(70),which varchar(70))";
        db.execSQL(sql);    
        }
    
    }

5.2 数据库的插入、删除、修改、更新等操作

public void onUpgrade(SQLiteDatabase db, int oleVersion, int newVersion) {
        for(int i=0;i<7;i++){
            String sql="DROP TABLE IF EXISTS "+TB_NAME[i];
            db.execSQL(sql);
        }
        onCreate(db);
        
    }
    public Cursor select(int i){
        
        SQLiteDatabase db=DataBase.this.getReadableDatabase();
        Cursor cursor=db.query(TB_NAME[i],null,null,null,null,null,null);
        return cursor;
    }
    public  long insert(int i,String cla,String loca,String tea,String zhou,String jie,String time1,String time2,String which){
        SQLiteDatabase db=DataBase.this.getWritableDatabase();
        ContentValues cv=new ContentValues();        
        cv.put(CLASS,cla);
        cv.put(LOCA, loca);
        cv.put(TEACHER,tea);
        cv.put(ZHOUSHU,zhou);
        cv.put(JIESHU,jie);
        cv.put(TIME1,time1);
        cv.put(TIME2,time2);
        cv.put(WHICH,which);
        long row=db.insert(TB_NAME[i],null,cv);
        return row;
    }
    public void update(int i,int _id,String cla,String loca,String tea,String zhou,String jie,String time1,String time2,String which){
        SQLiteDatabase db=DataBase.this.getWritableDatabase();
        String where="_id = ?";
        String[] whereValues={Integer.toString(_id)};
        ContentValues cv=new ContentValues();
        if(!cla.equals("")) cv.put(CLASS,cla);
        if(!loca.equals("")) cv.put(LOCA, loca);
        if(!tea.equals("")) cv.put(TEACHER,tea);
        if(!zhou.equals("")) cv.put(ZHOUSHU,zhou);
        if(!jie.equals("")) cv.put(JIESHU,jie);
        if(!time1.equals("")) cv.put(TIME1,time1);
        if(!time2.equals("")) cv.put(TIME2,time2);
        if(!which.equals("")) cv.put(WHICH,which);
        db.update(TB_NAME[i], cv, where, whereValues);
    }
    public void deleteData(int i,int _id){
        SQLiteDatabase db=DataBase.this.getWritableDatabase();
        String where="_id = ?";
        String[] whereValues={Integer.toString(_id)};
        ContentValues cv=new ContentValues();
        cv.put("classes","");
        cv.put("location","");
        cv.put("teacher","");
        cv.put("zhoushu","");
        cv.put("jieshu","");
        cv.put("time1","");
        cv.put("time2","");
        cv.put("which","");
        db.update(TB_NAME[i], cv, where, whereValues);
    }
    public void delete(int i,int _id){
        SQLiteDatabase db=this.getWritableDatabase();
        String where="_id = ?";
        String[] whereValues={Integer.toString(_id)};
        db.delete(TB_NAME[i], where, whereValues);
    }

5.3 实现课程表的插入、删除

   

    builder=new Builder(context)
        .setIcon(R.drawable.ic_launcher)
        .setTitle("编辑课程信息")
        .setView(view)
        .setPositiveButton("确认",new OnClickListener(){

            @SuppressWarnings("deprecation")
            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                if(!(s1=course_name.getText().toString()).equals("")) s1="课程: "+s1;
                if(!(s2=course_address.getText().toString()).equals("")) s2="地点: "+s2;
                if(!(s3=course_teacher.getText().toString()).equals("")) s3="老师: "+s3;
                if(!(s4=course_week.getText().toString()).equals("")) s4="周数: "+s4;
                if(!(s6=course_time1.getText().toString()).equals("")) s6="时间: "+s6;
                if(!(s7=course_time2.getText().toString()).equals("")) ;

                if((s5=course_count.getText().toString()).equals("")||s1.equals("")) {
                    Toast.makeText(context, "请正确输入课程及节数!", 3000).show();
                    return;
                }
                else {
                    int i=Integer.parseInt(s5.trim());
                    for(int m=0;m<i;m++){
                        MainActivity.db.update(day,n+m+1,s1,s2,s3,s4,s5,s6,s7,Integer.toString(m));
                    }

                }

                main.cursor[day].requery();
                main.list[day].invalidate();
            }

        })
        .setNegativeButton("取消", new OnClickListener(){

            @Override
            public void onClick(DialogInterface arg0, int arg1) {
            }

        });
        builder.create().show();

    }
    public void modify(final int day,final int n){
        inflater=LayoutInflater.from(context);
        view=inflater.inflate(R.layout.edit_shedule,null);
        findWidgetes();
        final Button course_time1=(Button)view.findViewById(R.id.time1);
        final Button course_time2=(Button)view.findViewById(R.id.time2);
        course_time1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                TimeSet_Dialog(course_time1);
            }
        });
        course_time2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                TimeSet_Dialog(course_time2);
            }
        });
        main.cursor[day].moveToPosition(n);
        String [] temp=new String[8];
        for(int i=0;i<8;i++) {temp[i]=main.cursor[day].getString(i+1);}
        if(!temp[0].equals("")) course_name.setText(temp[0].substring(temp[0].indexOf(":")+2));
        if(!temp[1].equals("")) course_address.setText(temp[1].substring(temp[1].indexOf(":")+2));
        if(!temp[2].equals("")) course_teacher.setText(temp[2].substring(temp[2].indexOf(":")+2));
        if(!temp[3].equals("")) course_week.setText(temp[3].substring(temp[3].indexOf(":")+2));
        if(!temp[4].equals("")) course_time1.setText(temp[4].substring(temp[4].indexOf(":")+2));
        course_time2.setText(temp[5]);
        course_count.setText(temp[6]);
        view.invalidate();


        builder=new Builder(context)
        .setIcon(R.drawable.ic_launcher)
        .setTitle("修改课程信息")
        .setView(view)
        .setPositiveButton("确认",new OnClickListener(){
    
            @SuppressWarnings("deprecation")
            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                if(!(s1=course_name.getText().toString()).equals("")) s1="课程: "+s1;
                if(!(s2=course_address.getText().toString()).equals("")) s2="地点: "+s2;
                if(!(s3=course_teacher.getText().toString()).equals("")) s3="老师: "+s3;
                if(!(s4=course_week.getText().toString()).equals("")) s4="周数: "+s4;
                if(!(s6=course_time1.getText().toString()).equals(""))s6="时间: "+s6;
                if(!(s7=course_time2.getText().toString()).equals(""));
                s5=course_count.getText().toString();
                main.cursor[day].moveToPosition(n);
                int n1=Integer.parseInt(main.cursor[day].getString(7).trim());
                int n2=Integer.parseInt(main.cursor[day].getString(8).trim());
                Log.i("kkk",main.cursor[day].getString(7));
                if(s5.equals("")||n1==Integer.parseInt(s5.trim())) {
                    switch(n2){
                        case 0:
                            for(int m=0;m<n1;m++){
                                MainActivity.db.update(day,n+m+1,s1,s2,s3,s4,s5,s6,s7,Integer.toString(m));
                                }
                            break;
                            
                        case 1:
                            MainActivity.db.update(day,n,s1,s2,s3,s4,s5,s6,s7,"0");
                            for(int m=1;m<n1;m++){
                                MainActivity.db.update(day,n+m,s1,s2,s3,s4,s5,s6,s7,Integer.toString(m));
                                }
                            break;        
                        case 2:
                            MainActivity.db.update(day,n-1,s1,s2,s3,s4,s5,s6,s7,"0");
                            MainActivity.db.update(day,n,s1,s2,s3,s4,s5,s6,s7,"1");
                            for(int m=2;m<n1;m++){
                                MainActivity.db.update(day,n+m-1,s1,s2,s3,s4,s5,s6,s7,Integer.toString(m));
                                }
                            break;
                        case 3:
                            for(int m=n2;m>=0;m--){
                                MainActivity.db.update(day,n-m+1,s1,s2,s3,s4,s5,s6,s7,Integer.toString(n2-m));
                                }
                            break;
                    }
                
                }

                else{
                    int n3=Integer.parseInt(s5.trim());
                    if(n3>n1){
                        
                        switch(n2){
                        case 0:
                            for(int m=0;m<n3;m++){
                                MainActivity.db.update(day,n+m+1,s1,s2,s3,s4,s5,s6,s7,Integer.toString(m));
                                }
                            break;
                            
                        case 1:
                            MainActivity.db.update(day,n,s1,s2,s3,s4,s5,s6,s7,"0");
                            for(int m=1;m<n3;m++){
                                MainActivity.db.update(day,n+m,s1,s2,s3,s4,s5,s6,s7,Integer.toString(m));
                                }
                            break;        
                        case 2:
                            MainActivity.db.update(day,n-1,s1,s2,s3,s4,s5,s6,s7,"0");
                            MainActivity.db.update(day,n,s1,s2,s3,s4,s5,s6,s7,"1");
                            for(int m=2;m<n3;m++){
                                MainActivity.db.update(day,n+m-1,s1,s2,s3,s4,s5,s6,s7,Integer.toString(m));
                                }
                            break;
                        case 3:
                            for(int m=n2;m>=0;m--){
                                MainActivity.db.update(day,n-m+1,s1,s2,s3,s4,s5,s6,s7,Integer.toString(n2-m));
                                }
                            break;
                            }
                    
                    }

                    if(n3<n1){
                        switch(n2){
                            case 0:    
                                for(int m=0;m<n1;m++){
                                    MainActivity.db.deleteData(day,n+m+1);
                                    }
                                break;
    
                            case 1:
                                MainActivity.db.deleteData(day,n);
                                for(int m=1;m<n1;m++){
                                    MainActivity.db.deleteData(day,n+m);
                                    }
                                break;        
                            case 2:
                                MainActivity.db.deleteData(day,n-1);
                                MainActivity.db.deleteData(day,n);
                                for(int m=2;m<n1;m++){
                                    MainActivity.db.deleteData(day,n+m-1);
                                    }
                                    break;
                            case 3:
                                for(int m=n2;m>=0;m--){
                                    MainActivity.db.deleteData(day,n-m+1);
                                    }
                                break;
                            default:
                                Toast.makeText(context, "error", 3000).show();
                                break;
                        }
                        
                    
                        switch(n2){
                            case 0:
                                for(int m=0;m<n3;m++){
                                    MainActivity.db.update(day,n+m+1,s1,s2,s3,s4,s5,s6,s7,Integer.toString(m));
                                    }
                                break;
                                
                            case 1:
                                MainActivity.db.update(day,n,s1,s2,s3,s4,s5,s6,s7,"0");
                                for(int m=1;m<n3;m++){
                                    MainActivity.db.update(day,n+m,s1,s2,s3,s4,s5,s6,s7,Integer.toString(m));
                                    }
                                break;        
                            case 2:
                                MainActivity.db.update(day,n-1,s1,s2,s3,s4,s5,s6,s7,"0");
                                MainActivity.db.update(day,n,s1,s2,s3,s4,s5,s6,s7,"1");
                                for(int m=2;m<n3;m++){
                                    MainActivity.db.update(day,n+m-1,s1,s2,s3,s4,s5,s6,s7,Integer.toString(m));
                                    }
                                break;
                            case 3:
                                for(int m=0;m<n3;m++){
                                    MainActivity.db.update(day,n+m-2,s1,s2,s3,s4,s5,s6,s7,Integer.toString(m));
                                    }
                                break;
                        }
                            
                    }
                }
                main.cursor[day].requery();
                main.list[day].invalidate();
            
            }
            
        })
        .setNegativeButton("取消", new OnClickListener(){
    
            @Override
            public void onClick(DialogInterface arg0, int arg1) {
                
                
            }
            
        });
        builder.create().show();
        
    }
    

5.4 显示当天的课表

public static int getWeekDay(){
        Calendar calendar=Calendar.getInstance();
        Date date=new Date(System.currentTimeMillis());
        calendar.setTime(date);
        int weekDay=calendar.get(Calendar.DAY_OF_WEEK)-1;
        return weekDay;    
    }

6.项目对比

(1)第1名:汤文涛 杨圣豪 黄东强 组的简单校园二手交易APP

一句话描述:比较简介实用的二手交易平台

优点:实现了登录、注册上传商品、查看我的发布、查看所有商品、查看某个商品的详细信息、给商家留言等多种功能,功能齐全,运行流畅。

缺点:界面布局不是很美观,字体较大,图标比较简易

如果我们来做:如果我们来做,我们会在实现基础功能的基础上,把界面布局也做的美观一点

(2)第2名: 李怡龙 刘志祥 刘显云 网络连接APP

一句话描述:测试网络连接相关数据的APP

优点:APP方向新颖、功能完善、实现了局域网连接的相关参数显示,功能简洁明了,UI界面也相当大方简单,同时实现了PC端的项目实现,运用到了我们很多没有学过的知识。

缺点:UI界面简洁明了但是美观程度差了一点

如果我们来做:我们会完善APP的界面,尽可能做到简洁美观,大方明了。

(3)第3名:沈顺文的代码杀APP

一句话描述:功能强大的代码在线交流、学习平台

优点:实现了登陆、上传、代码交流排序最新最热,个人页面的设置等等相关功能。在界面美观大方的同时,功能实现也相当完整,是一个使用相当顺畅的APP。

缺点:最好能实现一个添加好友的功能

如果我们来做:如果我们来做,我们会实现一个添加好友与好友交流的简要功能实现。

(4)第4名:李凯 季轩石组计划APP

一句话描述:功能强大、完善的计划 设置置顶提醒APP。

优点:UI界面十分好看,使用也流畅,简洁的APP使计划提醒与设置十分简洁完善。实现了计划设定,任务打卡,还有任务提醒的功能,同时实现了多个主题风格的使用,是一个相当完善的小程序了。

如果我们来做:如果我们来做,我们应该做不到这样的UI页面设置。但是我们应该会添加一个任务未完成自动启动飞行模式功能。

(5)第5名:季澈   张文君 郭守杰组的音乐播放器  

一句话描述:简易便捷的音乐播放器

优点:实现了本地搜索功能,实现了播放器应有的上一曲,下一曲,开始暂停,播放顺序,音量的控制,进度条,歌词,删除歌曲等的所有功能,比较实用

缺点:UI界面网络搜索等功能未实现

如果我们来做:我们会在实现了本地搜索歌曲的基础上,实现部分网络搜索功能

7.问题及解决方法

7.1课程表修改时布局问题:1600802053   马玉娟

在课程表修改时,之前只能按照插入时的布局进行修改,在参考网上相关资料后发现,inflater 动态布局,可根据需求改变界面:

  public void modify(final int day,final int n){
        inflater=LayoutInflater.from(context);
        view=inflater.inflate(R.layout.edit_shedule,null);
        findWidgetes();
        final Button course_time1=(Button)view.findViewById(R.id.time1);
        final Button course_time2=(Button)view.findViewById(R.id.time2);
        course_time1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                TimeSet_Dialog(course_time1);
            }
        });

  7.2 添加及修改时检测并提示:1600802053 马玉娟

之前添加以及修改课程表时,若不填其中一项,显示为空,没有任何提示,后来添加有关错误检测代码,解决相关问题,

若都正确提交到数据库,即可修改成功,否则重新填写。

if((s5=course_count.getText().toString()).equals("")||s1.equals("")) {
                    Toast.makeText(context, "请正确输入课程及节数!", 3000).show();
                    return;
                }
                else {
                    int i=Integer.parseInt(s5.trim());
                    for(int m=0;m<i;m++){
                        MainActivity.db.update(day,n+m+1,s1,s2,s3,s4,s5,s6,s7,Integer.toString(m));
                    }

                }

                main.cursor[day].requery();
                main.list[day].invalidate();
            }

        })
       

7.3 数据库的创建与更新:1600802039  高志杰

之前数据库一直无法升级更新,显示出错,后来参考网上有关数据库的升级,解决问题

public void onUpgrade(SQLiteDatabase db, int oleVersion, int newVersion) {
        for(int i=0;i<7;i++){
            String sql="DROP TABLE IF EXISTS "+TB_NAME[i];
            db.execSQL(sql);
        }
        onCreate(db);
        
    }

7.4 以选择的方式显示时间 :1600802039 高志杰

添加时间时本来想直接手写添加,后来查资料发现可以用上下拉动的方式显示

final Button course_time1=(Button)view.findViewById(R.id.time1);
        final Button course_time2=(Button)view.findViewById(R.id.time2);
        course_time1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                TimeSet_Dialog(course_time1);
            }
        });
        course_time2.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                TimeSet_Dialog(course_time2);
            }
        });
        main.cursor[day].moveToPosition(n);
        String [] temp=new String[8];
        for(int i=0;i<8;i++) {temp[i]=main.cursor[day].getString(i+1);}
        if(!temp[0].equals("")) course_name.setText(temp[0].substring(temp[0].indexOf(":")+2));
        if(!temp[1].equals("")) course_address.setText(temp[1].substring(temp[1].indexOf(":")+2));
        if(!temp[2].equals("")) course_teacher.setText(temp[2].substring(temp[2].indexOf(":")+2));
        if(!temp[3].equals("")) course_week.setText(temp[3].substring(temp[3].indexOf(":")+2));
        if(!temp[4].equals("")) course_time1.setText(temp[4].substring(temp[4].indexOf(":")+2));
        course_time2.setText(temp[5]);
        course_count.setText(temp[6]);
        view.invalidate();

7.5 定位到当天的课程表:1600802040  高怡

之前课程表打开时,一直显示星期日的课程表,查看当天课程表必须点击到当天的星期,后来定位当天的星期,直接打开显示当天课程表

public static int getWeekDay(){
        Calendar calendar=Calendar.getInstance();
        Date date=new Date(System.currentTimeMillis());
        calendar.setTime(date);
        int weekDay=calendar.get(Calendar.DAY_OF_WEEK)-1;
        return weekDay;    
    }

7.6显示课程表标识: 1600802040 高怡

之前做的APK在手机上安装后,标识都是安卓小机器人,不是很美观,查阅资料后,将标识设置为自定义图片

<application
        android:icon="@drawable/ic_launcher"

8. 分工安排

 

姓名分工工作比例分数
高志杰数据库设计、时间显示34%10
马玉娟课程表创建、编辑、连接33%10
高怡 UI设计,连接后端,定位星期33%10

转载于:https://www.cnblogs.com/gao98/p/10201768.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值