




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
全套设计加扣 3012250582湖南软件职业学院 毕业设计 毕业选题:基于Android平台的成绩查询应用指导教师:学生姓名:院系名称:软件工程专业班级:Java1304班学生学号:提交日期:2015年12月19日I目 录第一章 前言11.1课题背景11.2课题研究的目的和意义11.3课题的主要内容1第二章 开发工具和开发环境32.1 SQL 语言32.1.1 SQL 概述32.2 SQL Server 2008 简介32.3 android studio简介32.4 ADO 数据访问介绍42.4.1 ADO 不依赖于连续的活动连接4第三章 系统需求分析及总体设计73.1 系统功能分析73.2 数据库结构设计83.2.1 系统数据流程图83.2.2 实体关系图83.2.3 数据库逻辑结构设计10第四章 系统详细设计与实现144.1 登陆界面144.2 主界面164.3 课程信息列表界面174.5 我的课表管理界面184.6 我的成绩管理界面214.7 修改个人信息界面22第五章 系统测试255.1 系统测试的目的255.2 系统测试方法255.3 测试的执行和结果分析25第六章 结 论29参考文献30致谢311第一章 前言1.1课题背景进入21世纪以来,中国教育事业迅猛发展。其中起决定作用的是学生信息的管理。随之给每一位管理者带来了一个重要课题,即利用先进有效的管理手段来提高学生信息的管理效率及水平。大数据时代,面对信息化的无烟战争及挑战,采用科技手段无疑是包括学生信息管理在内的一条最高效产出的解决方式。因此,采用信息化管理、模块化管理是学生信息管理的最有效手段。总管世界经济,已然从工业化社会跨越到信息化社会,西方发达国家早已迈入较发达的信息化阶段,而中国的信息产业仍然处于信息产业链不完善的起步阶段。信息高速公路、经济信息化,这些能够颠覆国家产业链、经济发展等模式的重要因素,也必将极大影响人类社会的经济发展模式,从而影响社会各行各业的生产、工作和管理方式,是一次真正颠覆人们生活方式、国家经济运作模式的变化。当然,对教育行业等机构无疑又是一个严峻的挑战和机遇。 1.2课题研究的目的和意义中国教育业的应用系统迥异,自然供应商的软件也随之大相径庭。对于不同的要求,所需系统也大不相同,市场对学生信息管理系统的需求日益增大。如此这样,买方市场需求急剧上涨,一个方便上手、功能强大的管理软件就应运而生了,买卖双方达成了一致,从而提升员工工作效率、减少成本,最终增加效益。因此,一个能解决这些问题的学生信息管理系统已是势在必行、迫在眉睫。对于学校而言,如果能为学生的信息录入和查询工作带来高效易操作的接口,就能为用户提升迅速、高效的服务质量,也可减少由于手工操作而带来的误差,同时可以及时准确反映学生在校的状况等,从而提高学生学校的质量客户满意度,从而使用户得到更好的体验。1.3课题的主要内容此系统的数据库选用的是SQL-Srver-2008,开发环境为android studio,编程语言是java.成绩查询系统的开发设计,主要包括数据库结构设计、程序设计、具有课程信息列表、我的课表、我的成绩、新闻信息与修改个人信息等基本功能,能够完全基本满足学生信息管理的需求。在制作此系统的过程中,需要熟悉学生信息管理的流程,并查阅相关资料,通过自学将专业的计算机知识与学生信息管理的理论知识进行有机结合。- 2 -第二章 开发工具和开发环境2.1 SQL 语言SQL(Structured Query Language)是一种通用性极强、介于关系代数与关系演算之间的结构化查询语言,也是一种关系数据库语言。 2.1.1 SQL 概述SQL是关系型数据库系统的标准语言。所有关系数据库管理系统,如MySQL,MS Access,Oracle,SYBASE,Informix中,Postgres和SQL服务器使用SQL标准的数据库语言。此外,他们使用的是不同的方言,如:MS SQL使用T-SQL,Oracle 使用PL/SQL,MS Access SQL版本调用JET SQL (本地格式)等2.2 SQL Server 2008 简介SQL Server 2008 在Microsoft的数据平台上发布,可以组织管理任何数据。可以将结构化、半结构化和非结构化文档的数据直接存储到数据库中。可以对数据进行查询、搜索、同步、报告和分析之类的操作。数据可以存储在各种设备上,从数据中心最大的服务器一直到桌面计算机和移动设备,它都可以控制数据而不用管数据存储在哪里。SQL Server 2008 允许使用 Microsoft .NET 和Visual Studio开发的自定义应用程序中使用数据,在面向服务的架构(SOA)和通过 Microsoft BizTalk Server 进行的业务流程中使用数据。信息工作人员可以通过日常使用的工具直接访问数据。2.3 android studio简介android studio是一个全新的Android开发环境,基于Interllij IDEA。类似Eclipse ADT,android studio提供的集成的Android开发工具用于开发和调试,开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。1它是一款面向对象的可视化设计工具 2事件驱动的编程机制 3拥有简单易学的应用程序集成开发环境 4结构化的程序设计语言 1因为android studio具有多样的数据类型、结构化程序结构,所以就一种程序设计语言来说,它还具备的特点如下: (1)数值、字符串处理功能 强大(2)图形指令丰富,绘制图形方便(3)静态和动态数组,简化了内存的管理 (4)递归调用过程,从而简化了程序 (5)可以访问随机文件和顺序文件(6)具有自己的图标库,可被应用程序进行调用(7)具有完善的运行出错处理 5支持多种数据库系统的访问 6.据库交换、动态链接库和对象的链接与嵌入技术7可进行联机帮助,而且内含示例代码,方便用户移植参考相比于Windows环境下的软件,在android studio中,也可利用帮助功能,这样用户便可随时随地获得帮助。由于android studio帮助窗口中显示了许多示例代码供参考学习,我们就可以进行简单的操作获取帮助,例如可以进行复制、粘贴,从而用户可以方便地使用该软件系统。 2.4 android studio 数据访问介绍在使用 android studio 开发程序时,将会有关于数据访问的各类要求。某些情况下,只需要在窗体上显示数据。其他情况,或许只需设计一种方式来与另一公司进行信息共享。总之,无论如何访问数据,都要基于熟练掌握其数据结构、组件概念和组件组合方式。2.4.1 android studio 不依赖于连续的活动连接在传统的客户端/服务器应用程序中,首先要建立与数据库的连接,然后保持其连接状态,但由于各种原因,在应许应用程序使用该方法并不实用.多数情况,数据库只能维持少量的并发连接,所以程序的总体性能将会被连接的系统开销拉低。 android studio 程序中,组件彼此之间本来就是断开的。当服务器接收到请求页;服务器接下来进行请求处理,发送该页,发送完毕后服务器即刻断开与浏览器的任何连接,一直到下次的请求。由于这种模型必须需要始终保持连接的属性,所以使用连接结构交换1数据变得尤为困难和不实际。若数据被两个组件同时共享,那么二者都必须连接,抑或必须给这两个组件设计可相互传递数据的方式。 但是android studio 访问数据设计的是有节制使用连接的结构,这样,原本需要始终保持连接的模型所消耗的系统性能,就可以节省下来,为更多其他用户提供服务,从而提高系统总体性能。若要在数据库中执行操作,应执行SQL语句或存储过程.在用SQL语句中或存储过程读写行,执行聚合函数,如求平均值:使用SQL语句或存储过程创建或修改表或列等.在 android studio 中,提供了可以打包 SQL 语句或存储过程的数据命令。例如,若要从数据库读取一组行,则需要创建一个数据命令,再用 SQL Select 语句的文本或获取记录的存储过程的名称配置它即可。以下详述一下各个环节:1.安全说明 当使用数据命令将CommandType 属性设置为 Text 时,先对来自客户端的信息进行核查,然后再将其传递到数据库。有的用户可能会发送经过修改的SQL 语句,用来破坏数据库。但是,ADO会提供一种安全机制,当用户输入内容传输到数据库前,应确认这些信息始终是有效安全的;如可能,最佳措施应该始终使用参数化查询或存储过程。如执行多个操作(例如,读取一些行,然后更新他们)则可以使用命令集。每操作分别一一执行。如,读取多行,首先打开连接,在读取行,最后关闭连接:如对数据进行更新,那么应在打开连接,然后更新,最后再次关闭连接。数据命令可包括一个以上的参数,如:Select * From customers Where (customer_id = customerid)2.数据集可独立于数据源虽然数据库获取的数据缓存到数据集,但二者其实并没有实际关系。数据集就像是一个容器,其中填满了执行后的 SQL 命令或存储过程。3.数据保持为 XML当数据需要从数据存储区移动到数据集、从数据集移动到其他组件的时候,如使用android studio ,则传输数据的格式始终保持为 XML格式。同样如需保持数据,例如保持到文件中,则将其存储为 XML格式。如有 XML 文件,则可以像使用数据源一样,而且还可以从中创建数据集。1第三章 系统需求分析及总体设计3.1 系统功能分析 课程信息列表:它的功能主要有:课程的信息,属性包括员课程名、课程编号等管理员模块如图所示:课程信息列表课程编号课程名我的课表模块:主要功能有:课表选择、增加课程、删除课程、修改课程、申请课程、创建新课程表。我的课表模块如图所示:我的课表课标选择添加课程删除课程创建课程表修改课程申请课程3.2 数据库结构设计3.2.1 系统数据流程图 用户登录基本信息输入管理登录个人信息返回成绩信息选定输出信息课程信息返回基本信息输入- 7 -3.2.2 实体关系图管理员信息实体用户名密 码管理员信息实体图38 实体之间关系-图3.2.3 数据库逻辑结构设计系统设计了三个数据表即“课程信息”、“我的课表”、“我的成绩”。其具体信息如下: 表3-1课程信息表列名数据类型大小可否为空说明IDint4NOT NULL标号nameVarchar50NOT NULL课程名表3-2我的课表列名数据类型大小可否为空说明IDint4NOT NULL自增ID主键xuanzeVarchar50NOT NULL选择tianjiaVarchar50NULL添加shanchuvarchar50NOT NULL删除shengqingvarchar50NULL申请1chuangjianvarchar50NULL创建zenjiavarchar50NOT NULL增加课表表3-3我的成绩列名数据类型大小可否为空说明IDint4NOT NULL信息nameVarchar50NOT NULL名字Chengji int50NULL成绩 1 第四章 系统详细设计与实现4.1 主界面打开程序进入首页,页面如图: 该界面是本系统运行的首个界面,其他所有操作必须建立在本界面之上运行。在所有模块中此界面也是安全性最高的模块。主要代码如下:public class CrashHandler implements UncaughtExceptionHandler public static final String TAG = CrashHandler; private Thread.UncaughtExceptionHandler mDefaultHandler; private static CrashHandler INSTANCE = new CrashHandler(); private Context mContext; private Map infos = new HashMap(); private DateFormat formatter = new SimpleDateFormat(yyyy-MM-dd-HH-mm-ss); private CrashHandler() public static CrashHandler getInstance() return INSTANCE; public void init(Context context) mContext = context; mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(this); public void uncaughtException(Thread thread, Throwable ex) if (!handleException(ex) & mDefaultHandler != null) mDefaultHandler.uncaughtException(thread, ex); else try Thread.sleep(3000); catch (InterruptedException e) Log.e(TAG, error : , e); android.os.Process.killProcess(android.os.Process.myPid(); System.exit(1); private boolean handleException(Throwable ex) if (ex = null) return false; new Thread() Override public void run() Looper.prepare(); /Toast.makeText(mContext, 很抱歉,程序出现异常,即将退出., Toast.LENGTH_LONG).show(); Looper.loop(); .start(); collectDeviceInfo(mContext); saveCrashInfo2File(ex); return true; public void collectDeviceInfo(Context ctx) try PackageManager pm = ctx.getPackageManager(); PackageInfo pi = pm.getPackageInfo(ctx.getPackageName(), PackageManager.GET_ACTIVITIES); if (pi != null) String versionName = pi.versionName = null ? null : pi.versionName; String versionCode = pi.versionCode + ; infos.put(versionName, versionName); infos.put(versionCode, versionCode); catch (NameNotFoundException e) Log.e(TAG, an error occured when collect package info, e); Field fields = Build.class.getDeclaredFields(); for (Field field : fields) try field.setAccessible(true); infos.put(field.getName(), field.get(null).toString(); Log.d(TAG, field.getName() + : + field.get(null); catch (Exception e) Log.e(TAG, an error occured when collect crash info, e); private String saveCrashInfo2File(Throwable ex) StringBuffer sb = new StringBuffer(); for (Map.Entry entry : infos.entrySet() String key = entry.getKey(); String value = entry.getValue(); sb.append(key + = + value + n); Writer writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); ex.printStackTrace(printWriter); Throwable cause = ex.getCause(); while (cause != null) cause.printStackTrace(printWriter); cause = cause.getCause(); printWriter.close(); String result = writer.toString(); sb.append(result); try long timestamp = System.currentTimeMillis(); String time = formatter.format(new Date(); String fileName = crash- + time + - + timestamp + .log; if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) String path = /sdcard/crash/; File dir = new File(path); if (!dir.exists() dir.mkdirs(); FileOutputStream fos = new FileOutputStream(path + fileName); fos.write(sb.toString().getBytes(); fos.close(); return fileName; catch (Exception e) Log.e(TAG, an error occured while writing file., e); return null; 4.2 主界面 登陆首页后,此界面为客户选择的界面,界面很简洁,操作简单。其主要功能代码为: public class Declare extends Application Overridepublic void onCreate() / TODO Auto-generated method stub super.onCreate();CrashHandler crashHandler = CrashHandler.getInstance(); crashHandler.init(getApplicationContext(); private int id; private String userName; public String getUserName() return userName;public void setUserName(String userName) this.userName = userName;public int getId() return id;public void setId(int id) this.id = id; package com.mobileclient.util;import java.util.List; import java.util.Map;import com.mobileclient.activity.R;import android.content.Context;import android.graphics.Bitmap;import android.view.LayoutInflater; import android.view.View;import android.view.ViewGroup; import android.widget.ImageView; import android.widget.SimpleAdapter; import android.widget.TextView; public class TeacherSimpleAdapter extends SimpleAdapter /*需要绑定的控件资源id*/ private int mTo; /*map集合关键字数组*/ private String mFrom;/*需要绑定的数据*/ private List? extends Map mData; private LayoutInflater mInflater; Context context = null; public TeacherSimpleAdapter(Context context, List? extends Map data, int resource, String from, int to) super(context, data, resource, from, to); mTo = to; mFrom = from; mData = data; mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.context= context; public View getView(int position, View convertView, ViewGroup parent) ViewHolder holder = null; /*第一次装载这个view时=null,就新建一个调用inflate宣誓一个view*/if (convertView = null) convertView = mInflater.inflate(R.layout.teacher_list_item, null);holder = new ViewHolder();try /*绑定该view各个控件*/holder.tv_teacherNumber = (TextView)convertView.findViewById(R.id.tv_teacherNumber);holder.tv_teacherName = (TextView)convertView.findViewById(R.id.tv_teacherName);holder.tv_teacherSex = (TextView)convertView.findViewById(R.id.tv_teacherSex);holder.tv_teacherBirthday = (TextView)convertView.findViewById(R.id.tv_teacherBirthday);holder.iv_teacherPhoto = (ImageView)convertView.findViewById(R.id.iv_teacherPhoto); catch(Exception ex) /*标记这个view*/convertView.setTag(holder);else/*直接取出标记的view*/holder = (ViewHolder)convertView.getTag();/*设置各个控件的展示内容*/holder.tv_teacherNumber.setText(教师编号: + mData.get(position).get(teacherNumber).toString();holder.tv_teacherName.setText(教师姓名: + mData.get(position).get(teacherName).toString();holder.tv_teacherSex.setText(性别: + mData.get(position).get(teacherSex).toString();holder.tv_teacherBirthday.setText(出生日期: + mData.get(position).get(teacherBirthday).toString().substring(0, 10);holder.iv_teacherPhoto.setImageBitmap(Bitmap)mData.get(position).get(teacherPhoto);/*返回修改好的view*/return convertView; static class ViewHolder TextView tv_teacherNumber; TextView tv_teacherName; TextView tv_teacherSex; TextView tv_teacherBirthday; ImageView iv_teacherPhoto; package com.mobileclient.util;import java.util.List; import java.util.Map;import com.mobileclient.service.ClassInfoService;import com.mobileclient.activity.R;import android.content.Context;import android.graphics.Bitmap;import android.view.LayoutInflater; import android.view.View;import android.view.ViewGroup; import android.widget.ImageView; import android.widget.SimpleAdapter; import android.widget.TextView; public class StudentSimpleAdapter extends SimpleAdapter /*需要绑定的控件资源id*/ private int mTo; /*map集合关键字数组*/ private String mFrom;/*需要绑定的数据*/ private List? extends Map mData; private LayoutInflater mInflater; Context context = null; public StudentSimpleAdapter(Context context, List? extends Map data, int resource, String from, int to) super(context, data, resource, from, to); mTo = to; mFrom = from; mData = data; mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.context= context; public View getView(int position, View convertView, ViewGroup parent) ViewHolder holder = null; /*第一次装载这个view时=null,就新建一个调用inflate宣誓一个view*/if (convertView = null) convertView = mInflater.inflate(R.layout.student_list_item, null);holder = new ViewHolder();try /*绑定该view各个控件*/holder.tv_studentNumber = (TextView)convertView.findViewById(R.id.tv_studentNumber);holder.tv_studentName = (TextView)convertView.findViewById(R.id.tv_studentName);holder.tv_studentSex = (TextView)convertView.findViewById(R.id.tv_studentSex);holder.tv_studentClassNumber = (TextView)convertView.findViewById(R.id.tv_studentClassNumber);holder.iv_studentPhoto = (ImageView)convertView.findViewById(R.id.iv_studentPhoto); catch(Exception ex) /*标记这个view*/convertView.setTag(holder);else/*直接取出标记的view*/holder = (ViewHolder)convertView.getTag();/*设置各个控件的展示内容*/holder.tv_studentNumber.setText(学号: + mData.get(position).get(studentNumber).toString();holder.tv_studentName.setText(姓名: + mData.get(position).get(studentName).toString();holder.tv_studentSex.setText(性别: + mData.get(position).get(studentSex).toString();holder.tv_studentClassNumber.setText(所在班级: + (new ClassInfoService().GetClassInfo(mData.get(position).get(studentClassNumber).toString().getClassName();holder.iv_studentPhoto.setImageBitmap(Bitmap)mData.get(position).get(studentPhoto);/*返回修改好的view*/return convertView; static class ViewHolder TextView tv_studentNumber; TextView tv_studentName; TextView tv_studentSex; TextView tv_studentClassNumber; ImageView iv_studentPhoto; package com.mobileclient.util;import java.util.List; import java.util.Map;import com.mobileclient.service.StudentService;import com.mobileclient.service.CourseInfoService;import com.mobileclient.activity.R;import android.content.Context;import android.graphics.Bitmap;import android.view.LayoutInflater; import android.view.View;import android.view.ViewGroup; import android.widget.ImageView; import android.widget.SimpleAdapter; import android.widget.TextView; public class StudentSelectCourseInfoSimpleAdapter extends SimpleAdapter /*需要绑定的控件资源id*/ private int mTo; /*map集合关键字数组*/ private String mFrom;/*需要绑定的数据*/ private List? extends Map mData; private LayoutInflater mInflater; Context context = null; public StudentSelectCourseInfoSimpleAdapter(Context context, List? extends Map data, int resource, String from, int to) super(context, data, resource, from, to); mTo = to; mFrom = from; mData = data; mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); this.context= context; public View getView(int position, View convertView, ViewGroup parent) ViewHolder holder = null; /*第一次装载这个view时=null,就新建一个调用inflate宣誓一个view*/if (convertView = null) convertView = mInflater.inflate(R.layout.studentselectcou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小组活动协议
- 六年级科学知识复习试卷
- 电网运行故障应急处理培训教材
- 高考复习冲刺时间管理技巧
- 河段承包挖沙合同(标准版)
- 公司亲属合同(标准版)
- 买店面合同(标准版)
- 废钢采购合同(标准版)
- 市政工程二级建造师真题与详解
- 保单和投保合同(标准版)
- 2025年通信工程师-初级通信工程师历年参考题库含答案解析(5套典型考题)
- 电梯安全教学课件
- 2025-2026学年【秋】第一学期少先队工作计划:青春筑梦扬队旗励志前行绘未来
- 2025年评茶员职业技能鉴定题库(含答案)
- 数学集体备课汇报展示
- 食品生产企业采购管理制度
- 2025年养老护理员职业资格技师培训试题(含答案)
- 《鸿蒙应用开发项目教程》全套教学课件
- 超声新技术新项目应用与发展
- 四川省广安市2024-2025学年高一下学期期末考试数学试题(含答案)
- 2025年全国新高考语文一卷评讲课件(共66张)
评论
0/150
提交评论