基于Android新生预报到系统APP的设计与实现

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
可视分析地图(DataV-Atlas),3 个项目,100M 存储空间
简介: 基于Android新生预报到系统APP的设计与实现

1.引言

随着国家的教育方针政策的不断改变,自20世纪初以来,政府开始实施扩招计划,截至2020年我国大学生总规模己经攀升至近5000万,大学教育的普及化正在逐渐实现。随着大学新生数量的不断增多,到了每年的9月份,各大高校都会面临着大学新生报到的一系列问题,而新生报到又是高校管理中重要的一环,关系到后续工作的顺利开展和进行。受到扩招政策的影响,高校每年开学季都会接收比上一年更多的新生,需要完成更多新生的报到手续,因此每次开学的报到流程都会很繁琐。现在很多学校借助APP报到系统来简化流程,提高效率,但是有的学校现有报到系统功能繁杂,学生不能很好的完成报到,且缺乏报到系统统计准确性和一些报到系统应具备的便捷功能。因此设计一个新生预报到系统APP,提高学校新生报到的效率,同时要满足学生的使用基础功能,如查询学校公告,学生课程表查询,学生信息查询。

本APP系统主要分为了两个操作端。

一是后台管理员系统和用户端。当账号操作权限够,即可对学生入学信息以及学生课程表修改和录入,同时可以在系统上发布公告用于学生查看,用以老师和教务处教师使用。

二是新生登录用户端。主要用于新生登记,和查看入学专业,班级,课程表等信息,还可以将本人信息上传至后台,该系统是采用MySQL数据库予以实现,主要为新生和学校学生使用。

该系统达到了系统的设计目标,能够满足学校基本使用要求,降低新生报到工作的人工工作量,及时传回确定就学的学生信息,方便学生进行信息查询,促进新生报到工作管理的规范化需要。

2.开发工具及技术

2.1 HeidiSQL

HeidiSQL是一款免费开源的数据库客户端软件。图形化,数据化界面。通过具体的配置后能够支持浏览数据库,管理表,浏览和便捷记录,管理用户权限等功能。HeidiSQ。是一款用于简单化迷你的服务器和数据库管理的图形化界面,采用Delphi开发,支持MySQL、SQL Server、PostgreSQL服务器。HeidiSQL提供了一个用于在数据库浏览之间切换SQL查询和标签带有语法突出显示的简单易用的界面。可以方便浏览数据库,管理表、视图、存储过程、触发器,浏览和编辑记录,管理用户权限。此外,你可以从文本文件导入数据,运行SQL查询,在两个数据库之间同步表以及导出选择的表到其它数据库或者SQL脚本中。具体HeidiSQL操作图如图2.1所示:

2.2 SQLyog

SQLyog是一款专业的图形管理软件,SQLyog操作简单,功能强大,能够帮助用户轻松管理自己的MYSQL数据库,SQLyog支持多种数据格式导出,可以快速帮助用户备份和恢复数据,还能够快速地运行SQL脚本文件,为用户的使用提供便捷。由业界著名Webyog公司出品。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。数据库主要是为了实现保存用户数据的功能,同时要具备连接功能,以用来方便用户在数据库中存取数据,搜寻数据。因此数据库还得有着一定的安全性,独立性,以免数据泄露。具体SQLyog操作图如图2.2所示:

在通过建立一个新账号,采用旧的加密方法,再授权超级管理员,使用此管理员登录也可以使用。具体SQLyog连接图如图2.3所示。

2.3 Android Studio

Android Studio是谷歌的软件开发工具,通过基于Gradle的构建支持,能够通过此平台拖控UI控件进行效果预览。能够使用平台所给与的模板来生成常用的应用设计和组件。具体Android Studio操作图如图2.4所示。

通过本软件能够看到制作的信息管理软件预览图,方便修改学生操作端UI设计,具体修改过程如操作端UI修改图如图2.5所示。

2.4 Eclipse

eclipse是一个超过10年生命力的java编程语言开发集成环境。拥有着智能选取,丰富的导航模式,历史记录功能编码辅助等功能,对我们开发工作者的编写环境十分友好。同时能够使用图形化界面,实现我们看到后台管理系统的编写。虽然现在出现了更多的编码环境,但是兼容性还是eclipse更为友好。具体的eclipse图形化操作端如图2.6所示。

2.5 Android系统架构

Android系统架构为一般的通用操作系统架构。主要体系架构分为了从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。

应用程序:主要是通过客户端操作的程序软件。一般为功能使用层,Android编写语言一般为java语言,因为java的开发效率足够高,同时入手难度低。Android利用java语言编写同时因为java有着良好的跨平台特性,足够支持我们的现有安卓设备众多的使用,维持应用程序稳定性。

应用程序框架:主要是为了开发人员可以访问的API框架。主要包括有,视图(Views),列表(Lists),网格(Grids),文本框(Textboxes),按钮(Buttons),内容提供器(Content Providers),资源管理器(Resource Manager),通知管理器 (Notification Manager),活动管理器( Activity Manager)。

系统运行库:通过利用平台所拥有的库,使系统中组件使用。通过上一层的框架为平台程序开发者提供相关的服务。包括一些核心库。如系统C库,媒体库,Surface Manager,LibWebCore等运行库。

Linux内核:Linux内核充当的是硬件与软件的中间层,作用是吧应用程序的请求传递给硬件层。同时内核也是一个库,为应用程序提供面向系统命令,方便应用程序的系统调用。

Android架构完整流程图如图2.7所示。

2.6 Java

Java的特点:Java由于面向多用户跨平台,有着功能众多,方便上手这两个最基本的特点。Java具有简单性、面向对象、分布式健壮性安全性、平台独立与可移植性、多线程、动态性等特点。同时Java在使用中可以编写桌面应用程序、Web应用程序、分布式系统嵌入式系统应用程序等

Java的运行原理:源文件通过编写器编译成字节码文件class,然后在通过JVM中的解释器将字节码文件生成对应的可执行文件。具体的Java运行原理图如图2.8所示。

而Java运行流程是通过Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平台上。Java运行流程图如图2.9所示。

2.7 结构化查询语言

SQL是一种特殊目的的编程语言,功能是通过数据库存取数据以及查询、更新和管理关系数据库系统

主要特点为:功能一体化,统一结构,系统自动完成,语言简洁等特点。

结构化查询语言主要分为了六个部分:1,数据查询语言(DQL: ),2、数据操作语言(DML:),3、事务控制语言(TCL),4、数据控制语言(DCL),5、数据定义语言(DDL),6、指针控制语言(CCL)。

数据查询语言:让数据库执行数据查询语言语句把结果发送至客户端。是获取数据不可避免的重要手段。

数据操作语言:用于数据库操作以及数据运行访问工作编程语句。

事务控制语言:主要用来操作复杂,难处理的数据。

数据控制语言:用来设置以及更改数据库用户和角色权限语句。

数据定义语言:通过定义数据库里面权限数据对数据进行分类。

指针控制语言:规定程序的使用规则,来促使数据库正常使用。

3.功能设计

系统功能模块功能简介:新生报到系统主要分为学生客户端以及老师后台管理系统。

学生客户端涉及到的功能有:登陆账号,查询基础信息,查看系统相关公告,缴纳相关费用以及查询缴费明细,查看班级课程表,上传个人信息,修改账户密码等功能。

老师后台管理系统涉及到的功能有:学生管理模块相关功能,费用管理模块相关功能,课程管理模块相关功能,信息登记模块相关功能,系统公告模块相关功能等功能。

系统管理所需要的功能主要有:学生信息管理功能模块,具体又分为了信息登记模块,费用管理模块,课程管理模块,学生管理模块,系统公告模块等。

信息登记模块结构图如图所示:

信息登记模块功能简介:信息编辑,编辑学生的性别,姓名,电话号码,身份证号,家庭住址,毕业院校等信息的功能。

费用管理模块结构图如图所示:

费用管理模块功能简介:费用信息添加,费用信息修改,费用信息删除,费用信息查看。具体的费用信息可以改动的有学费,军训费,公寓用品费,杂物费,书费,体检费等信息改动功能。

课程管理模块结构图如图所示:

课程管理模块具体功能简介:课程信息添加,课程信息修改,课程信息删除,课程信息查看。具体的课程信息包括修改院系,专业,班级,课程表等内容修改功能。

学生管理模块结构图如图所示:

学生管理模块功能简介:包括学生信息添加,学生信息修改,学生信息删除,学生信息查看。其中具体的学生信息改动为院系,姓名,专业,学号,班级,宿舍楼号,宿舍号。其中的学生学号为学生端初始账号密码。

系统公告模块结构图如图所示:

系统公告模块功能简介:添加,修改,删除,查看公告,以及标注标题,内容,发布日期等功能。

4.功能效果图

4.1 后台管理功能操作

首先应该通过建立管理员账号才能够记录新生信息。登录初始管理员账户后添加新的管理员,初始管理员账号为admin,密码为2014122。登录后可在后台学生管理系统中添加管理员账户。

(1)管理员账号登录

初始管理员账号为最高权限,不可增删。在登录后台后应转用自己的管理员账号继续登录。在输入正确的管理员账号密码后就能进入学生管理系统。后台登录界面如图所示:

(2)添加管理员账号

通过初始管理员账号来添加新的管理员账号,具体添加管理员账号界面图如图所示:

(3)添加管理员账号

 在登录管理员账号后即可对新生的信息进行添加,然后新生的信息即可保留在后台学生管理系统中,新生就能通过APP登录。

其中在添加学生信息时,可以将学生的学号,班级,专业,宿舍楼号,宿舍号进行选择,方便同学在前端APP上面查阅自己信息。同时支持修改操作,具体添加新生信息图如图所示:

在完成新生信息登录,即可根据学生信息来添加学生学费,班级课程表,发布系统公告,以供学生完成后续缴费和方便学生了解信息。

添加学生学费图如图所示:

添加班级课表如图所示:

发布系统公告如图所示:

4.2 新生APP功能操作

 当管理员账号在后台学生管理系统中添加新生信息后,预报到新生即可通过在线上方式获取APP后,通过自己的学号,初始密码为学号登录APP完成一系列的操作。

(1)新生账号登录

新生在通过账号登录后,即可以对自己的信息添加,和修改账户密码。

新生账号登录图如图所示:

信息添加图如图所示:


修改账户密码图如图所示:

(2)APP其他功能

新生登录APP后应该完成自己的基础信息查阅,缴费,查阅课程表,查阅系统公告等功能。

基础信息查阅如图所示:

新生缴费如图所示:

查阅课程表如图所示:

查阅系统公告如图所示:

5.核心代码

public class BaseController {
  protected Logger logger = Logger.getLogger(this.getClass());
  private static final long serialVersionUID = 6357869213649815390L;
  /** new PageData对象
   * @return
   */
  public PageData getPageData(){
    return new PageData(this.getRequest());
  }
  /**得到ModelAndView
   * @return
   */
  public ModelAndView getModelAndView(){
    return new ModelAndView();
  }
  /**得到request对象
   * @return
   */
  public HttpServletRequest getRequest() {
    HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
    return request;
  }
  /**得到32位的uuid
   * @return
   */
  public String get32UUID(){
    return UuidUtil.get32UUID();
  }
  /**得到分页列表的信息
   * @return
   */
  public Page getPage(){
    return new Page();
  }
  public static void logBefore(Logger logger, String interfaceName){
    logger.info("");
    logger.info("start");
    logger.info(interfaceName);
  }
  public static void logAfter(Logger logger){
    logger.info("end");
    logger.info("");
  }
}
@Controller
@RequestMapping(value="/datasource2")
public class DataSource2Controller extends BaseController {
  String menuUrl = "datasource2/list.do"; //菜单地址(权限用)
  @Resource(name="datasource2Service")
  private DataSource2Manager datasource2Service;
  /**保存
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/save")
  public ModelAndView save() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"新增DataSource2");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "add")){return null;} //校验权限
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    pd.put("DATASOURCE2_ID", this.get32UUID()); //主键
    datasource2Service.save(pd);
    mv.addObject("msg","success");
    mv.setViewName("save_result");
    return mv;
  }
  /**删除
   * @param out
   * @throws Exception
   */
  @RequestMapping(value="/delete")
  public void delete(PrintWriter out) throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"删除DataSource2");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return;} //校验权限
    PageData pd = new PageData();
    pd = this.getPageData();
    datasource2Service.delete(pd);
    out.write("success");
    out.close();
  }
  /**修改
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/edit")
  public ModelAndView edit() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"修改DataSource2");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){return null;} //校验权限
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    datasource2Service.edit(pd);
    mv.addObject("msg","success");
    mv.setViewName("save_result");
    return mv;
  }
  /**列表
   * @param page
   * @throws Exception
   */
  @RequestMapping(value="/list")
  public ModelAndView list(Page page) throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"列表DataSource2");
    //if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} //校验权限(无权查看时页面会有提示,如果不注释掉这句代码就无法进入列表页面,所以根据情况是否加入本句代码)
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    String keywords = pd.getString("keywords");       //关键词检索条件
    if(null != keywords && !"".equals(keywords)){
      pd.put("keywords", keywords.trim());
    }
    page.setPd(pd);
    List<PageData>  varList = datasource2Service.list(page);  //列出DataSource2列表
    mv.setViewName("dst/datasource2/datasource2_list");
    mv.addObject("varList", varList);
    mv.addObject("pd", pd);
    mv.addObject("QX",Jurisdiction.getHC());  //按钮权限
    return mv;
  }
  /**去新增页面
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/goAdd")
  public ModelAndView goAdd()throws Exception{
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    mv.setViewName("dst/datasource2/datasource2_edit");
    mv.addObject("msg", "save");
    mv.addObject("pd", pd);
    return mv;
  } 
   /**去修改页面
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/goEdit")
  public ModelAndView goEdit()throws Exception{
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    pd = datasource2Service.findById(pd); //根据ID读取
    mv.setViewName("dst/datasource2/datasource2_edit");
    mv.addObject("msg", "edit");
    mv.addObject("pd", pd);
    return mv;
  } 
   /**批量删除
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/deleteAll")
  @ResponseBody
  public Object deleteAll() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"批量删除DataSource2");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return null;} //校验权限
    PageData pd = new PageData();   
    Map<String,Object> map = new HashMap<String,Object>();
    pd = this.getPageData();
    List<PageData> pdList = new ArrayList<PageData>();
    String DATA_IDS = pd.getString("DATA_IDS");
    if(null != DATA_IDS && !"".equals(DATA_IDS)){
      String ArrayDATA_IDS[] = DATA_IDS.split(",");
      datasource2Service.deleteAll(ArrayDATA_IDS);
      pd.put("msg", "ok");
    }else{
      pd.put("msg", "no");
    }
    pdList.add(pd);
    map.put("list", pdList);
    return AppUtil.returnObject(pd, map);
  }
   /**导出到excel
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/excel")
  public ModelAndView exportExcel() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"导出DataSource2到excel");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;}
    ModelAndView mv = new ModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    Map<String,Object> dataMap = new HashMap<String,Object>();
    List<String> titles = new ArrayList<String>();
    titles.add("标题"); //1
    titles.add("内容"); //2
    dataMap.put("titles", titles);
    List<PageData> varOList = datasource2Service.listAll(pd);
    List<PageData> varList = new ArrayList<PageData>();
    for(int i=0;i<varOList.size();i++){
      PageData vpd = new PageData();
      vpd.put("var1", varOList.get(i).getString("TITLE"));      //1
      vpd.put("var2", varOList.get(i).getString("CONTENT"));      //2
      varList.add(vpd);
    }
    dataMap.put("varList", varList);
    ObjectExcelView erv = new ObjectExcelView();
    mv = new ModelAndView(erv,dataMap);
    return mv;
  }
  @InitBinder
  public void initBinder(WebDataBinder binder){
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(format,true));
  }
}
public class ShopDetailAcitivity extends AppCompatActivity implements View.OnClickListener {
    private TextView tvShopName,tvTime,tvNotice,tvTile;
    private ImageView ivShopPic,ivBack;
    private ShopBean bean;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //绑定布局文件,把布局文件当作我们这个activity的界面
        setContentView(R.layout.acitivity_shop_detail);
        bean= (ShopBean) getIntent().getSerializableExtra("shop");
        if(bean==null){
            return;
        }
        initView();
        setData();
    }
    private void setData() {
        tvShopName.setText(bean.getShopName());
        tvTime.setText(bean.getTime());
        tvNotice.setText(bean.getShopNotice());
        Glide.with(this).load(bean.getShopPic()).error(R.mipmap.ic_launcher).into(ivShopPic);
    }
    private void initView() {
        tvShopName=findViewById(R.id.tv_shop_name);
        tvTime=findViewById(R.id.tv_time);
        tvNotice=findViewById(R.id.tv_notice);
        tvTile=findViewById(R.id.tv_title);
        ivShopPic=findViewById(R.id.iv_shop_pic);
        ivBack=findViewById(R.id.iv_back);
        tvTile.setText("店铺详情");
        ivBack.setVisibility(View.VISIBLE);
        ivBack.setOnClickListener(this);
    }
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.iv_back:
                finish();
                break;
        }
    }
}
@Controller
@RequestMapping(value="/cost")
public class CostController extends BaseController {
  String menuUrl = "cost/list.do"; //菜单地址(权限用)
  @Resource(name="costService")
  private CostManager costService;
  /**保存
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/save")
  public ModelAndView save() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"新增Cost");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "add")){return null;} //校验权限
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    pd.put("COST_ID", this.get32UUID());  //主键
    costService.save(pd);
    mv.addObject("msg","success");
    mv.setViewName("save_result");
    return mv;
  }
  /**删除
   * @param out
   * @throws Exception
   */
  @RequestMapping(value="/delete")
  public void delete(PrintWriter out) throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"删除Cost");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return;} //校验权限
    PageData pd = new PageData();
    pd = this.getPageData();
    costService.delete(pd);
    out.write("success");
    out.close();
  }
  /**修改
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/edit")
  public ModelAndView edit() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"修改Cost");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){return null;} //校验权限
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    costService.edit(pd);
    mv.addObject("msg","success");
    mv.setViewName("save_result");
    return mv;
  }
  /**列表
   * @param page
   * @throws Exception
   */
  @RequestMapping(value="/list")
  public ModelAndView list(Page page) throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"列表Cost");
    //if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} //校验权限(无权查看时页面会有提示,如果不注释掉这句代码就无法进入列表页面,所以根据情况是否加入本句代码)
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    String keywords = pd.getString("keywords");       //关键词检索条件
    if(null != keywords && !"".equals(keywords)){
      pd.put("keywords", keywords.trim());
    }
    page.setPd(pd);
    List<PageData>  varList = costService.list(page); //列出Cost列表
    mv.setViewName("newreport/cost/cost_list");
    mv.addObject("varList", varList);
    mv.addObject("pd", pd);
    mv.addObject("QX",Jurisdiction.getHC());  //按钮权限
    return mv;
  }
  /**去新增页面
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/goAdd")
  public ModelAndView goAdd()throws Exception{
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    mv.setViewName("newreport/cost/cost_edit");
    mv.addObject("msg", "save");
    mv.addObject("pd", pd);
    return mv;
  } 
   /**去修改页面
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/goEdit")
  public ModelAndView goEdit()throws Exception{
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    pd = costService.findById(pd);  //根据ID读取
    mv.setViewName("newreport/cost/cost_edit");
    mv.addObject("msg", "edit");
    mv.addObject("pd", pd);
    return mv;
  } 
   /**批量删除
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/deleteAll")
  @ResponseBody
  public Object deleteAll() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"批量删除Cost");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return null;} //校验权限
    PageData pd = new PageData();   
    Map<String,Object> map = new HashMap<String,Object>();
    pd = this.getPageData();
    List<PageData> pdList = new ArrayList<PageData>();
    String DATA_IDS = pd.getString("DATA_IDS");
    if(null != DATA_IDS && !"".equals(DATA_IDS)){
      String ArrayDATA_IDS[] = DATA_IDS.split(",");
      costService.deleteAll(ArrayDATA_IDS);
      pd.put("msg", "ok");
    }else{
      pd.put("msg", "no");
    }
    pdList.add(pd);
    map.put("list", pdList);
    return AppUtil.returnObject(pd, map);
  }
   /**导出到excel
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/excel")
  public ModelAndView exportExcel() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"导出Cost到excel");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;}
    ModelAndView mv = new ModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    Map<String,Object> dataMap = new HashMap<String,Object>();
    List<String> titles = new ArrayList<String>();
    titles.add("学费"); //1
    titles.add("书本费");  //2
    titles.add("公寓用品费");  //3
    titles.add("军训费");  //4
    titles.add("杂物费");  //5
    dataMap.put("titles", titles);
    List<PageData> varOList = costService.listAll(pd);
    List<PageData> varList = new ArrayList<PageData>();
    for(int i=0;i<varOList.size();i++){
      PageData vpd = new PageData();
      vpd.put("var1", varOList.get(i).get("STUCOST").toString()); //1
      vpd.put("var2", varOList.get(i).get("BOOKCOST").toString());  //2
      vpd.put("var3", varOList.get(i).get("GOODSCOST").toString()); //3
      vpd.put("var4", varOList.get(i).getString("TRAINCOST"));      //4
      vpd.put("var5", varOList.get(i).getString("SUNDCOST"));     //5
      varList.add(vpd);
    }
    dataMap.put("varList", varList);
    ObjectExcelView erv = new ObjectExcelView();
    mv = new ModelAndView(erv,dataMap);
    return mv;
  }
  @InitBinder
  public void initBinder(WebDataBinder binder){
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(format,true));
  }
}
@Controller
@RequestMapping(value="/course")
public class CourseController extends BaseController {
  String menuUrl = "course/list.do"; //菜单地址(权限用)
  @Resource(name="courseService")
  private CourseManager courseService;
  /**保存
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/save")
  public ModelAndView save(@RequestParam(value = "tp", required = false) MultipartFile file,
      @RequestParam(value = "tpz", required = false) String tpz,
      @RequestParam(value = "DEPARTMENT", required = false) String DEPARTMENT,
      @RequestParam(value = "SUBJECT", required = false) String SUBJECT,
      @RequestParam(value = "CLASS", required = false) String CLASS
      ) throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"新增Course");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "add")){return null;} //校验权限
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    pd.put("COURSE_ID", this.get32UUID());  //主键
    pd.put("DEPARTMENT", DEPARTMENT); //课程表
    pd.put("SUBJECT", SUBJECT); //课程表
    pd.put("CLASS", CLASS); //课程表
    if (null == tpz) {
      tpz = "";
    }
    String ffile = DateUtil.getDays(), fileName = "";
    if (null != file && !file.isEmpty()) {
      String filePath = PathUtil.getClasspath() + Const.FILEPATHIMG
          + ffile; // 文件上传路径
      fileName = FileUpload.fileUp(file, filePath, this.get32UUID()); // 执行上传
      pd.put("COURSEURL", ffile + "/" + fileName); // 路径
    //   pd.put("C_FILENAME", fileName);
    } else {
      pd.put("COURSEURL", tpz);
    }
    courseService.save(pd);
    mv.addObject("msg","success");
    mv.setViewName("save_result");
    return mv;
  }
  /**删除
   * @param out
   * @throws Exception
   */
  @RequestMapping(value="/delete")
  public void delete(PrintWriter out) throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"删除Course");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return;} //校验权限
    PageData pd = new PageData();
    pd = this.getPageData();
    courseService.delete(pd);
    out.write("success");
    out.close();
  }
  /**修改
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/edit")
  public ModelAndView edit(
      @RequestParam(value = "tp", required = false) MultipartFile file,
      @RequestParam(value = "tpz", required = false) String tpz,
      @RequestParam(value = "DEPARTMENT", required = false) String DEPARTMENT,
      @RequestParam(value = "SUBJECT", required = false) String SUBJECT,
      @RequestParam(value = "CLASS", required = false) String CLASS,
      @RequestParam(value = "COURSE_ID", required = false) String COURSE_ID
      ) throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"修改Course");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){return null;} //校验权限
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    pd.put("COURSE_ID",COURSE_ID);  //主键
    pd.put("DEPARTMENT", DEPARTMENT); //课程表
    pd.put("SUBJECT", SUBJECT); //课程表
    pd.put("CLASS", CLASS); //课程表
    if (null == tpz) {
      tpz = "";
    }
    String ffile = DateUtil.getDays(), fileName = "";
    if (null != file && !file.isEmpty()) {
      String filePath = PathUtil.getClasspath() + Const.FILEPATHIMG
          + ffile; // 文件上传路径
      fileName = FileUpload.fileUp(file, filePath, this.get32UUID()); // 执行上传
      pd.put("COURSEURL", ffile + "/" + fileName); // 路径
    //   pd.put("C_FILENAME", fileName);
    } else {
      pd.put("COURSEURL", tpz);
    }
    courseService.edit(pd);
    mv.addObject("msg","success");
    mv.setViewName("save_result");
    return mv;
  }
  /**列表
   * @param page
   * @throws Exception
   */
  @RequestMapping(value="/list")
  public ModelAndView list(Page page) throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"列表Course");
    //if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} //校验权限(无权查看时页面会有提示,如果不注释掉这句代码就无法进入列表页面,所以根据情况是否加入本句代码)
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    String keywords = pd.getString("keywords");       //关键词检索条件
    if(null != keywords && !"".equals(keywords)){
      pd.put("keywords", keywords.trim());
    }
    page.setPd(pd);
    List<PageData>  varList = courseService.list(page); //列出Course列表
    mv.setViewName("newreport/course/course_list");
    mv.addObject("varList", varList);
    mv.addObject("pd", pd);
    mv.addObject("QX",Jurisdiction.getHC());  //按钮权限
    return mv;
  }
  /**去新增页面
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/goAdd")
  public ModelAndView goAdd()throws Exception{
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    mv.setViewName("newreport/course/course_edit");
    mv.addObject("msg", "save");
    mv.addObject("pd", pd);
    return mv;
  } 
   /**去修改页面
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/goEdit")
  public ModelAndView goEdit()throws Exception{
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    pd = courseService.findById(pd);  //根据ID读取
    mv.setViewName("newreport/course/course_edit");
    mv.addObject("msg", "edit");
    mv.addObject("pd", pd);
    return mv;
  } 
   /**批量删除
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/deleteAll")
  @ResponseBody
  public Object deleteAll() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"批量删除Course");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return null;} //校验权限
    PageData pd = new PageData();   
    Map<String,Object> map = new HashMap<String,Object>();
    pd = this.getPageData();
    List<PageData> pdList = new ArrayList<PageData>();
    String DATA_IDS = pd.getString("DATA_IDS");
    if(null != DATA_IDS && !"".equals(DATA_IDS)){
      String ArrayDATA_IDS[] = DATA_IDS.split(",");
      courseService.deleteAll(ArrayDATA_IDS);
      pd.put("msg", "ok");
    }else{
      pd.put("msg", "no");
    }
    pdList.add(pd);
    map.put("list", pdList);
    return AppUtil.returnObject(pd, map);
  }
   /**导出到excel
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/excel")
  public ModelAndView exportExcel() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"导出Course到excel");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;}
    ModelAndView mv = new ModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    Map<String,Object> dataMap = new HashMap<String,Object>();
    List<String> titles = new ArrayList<String>();
    titles.add("院系"); //1
    titles.add("专业"); //2
    titles.add("班级"); //3
    titles.add("课程表");  //4
    dataMap.put("titles", titles);
    List<PageData> varOList = courseService.listAll(pd);
    List<PageData> varList = new ArrayList<PageData>();
    for(int i=0;i<varOList.size();i++){
      PageData vpd = new PageData();
      vpd.put("var1", varOList.get(i).getString("DEPARTMENT"));     //1
      vpd.put("var2", varOList.get(i).getString("SUBJECT"));      //2
      vpd.put("var3", varOList.get(i).getString("CLASS"));      //3
      vpd.put("var4", varOList.get(i).getString("COURSEURL"));      //4
      varList.add(vpd);
    }
    dataMap.put("varList", varList);
    ObjectExcelView erv = new ObjectExcelView();
    mv = new ModelAndView(erv,dataMap);
    return mv;
  }
  @RequestMapping(value = "/deltp")
  public void deltp(PrintWriter out) throws Exception {
    PageData pd = new PageData();
    pd = this.getPageData();
    String COURSEURL = pd.getString("COURSEURL");
    if (Tools.notEmpty(pd.getString("COURSEURL").trim())) {// 图片路径
      DelAllFile.delFolder(PathUtil.getClasspath() + Const.FILEPATHIMG
          + pd.getString("COURSEURL")); // 删除图片
    }
    courseService.delTp(pd); // 删除数据库中图片数据
    out.write("success");
    out.close();
  }
  @InitBinder
  public void initBinder(WebDataBinder binder){
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(format,true));
  }
}
@Controller
@RequestMapping(value="/mobileintef")
public class MobileIntefController extends BaseController {
  @Resource(name="studentmService")
  private StudentMManager studentmService;
  @Resource(name="costService")
  private CostManager costService;
  @Resource(name="courseService")
  private CourseManager courseService;
  @Resource(name="studentinfoService")
  private StudentInfoManager studentinfoService;
  @Resource(name="sysmsgService")
  private SysMsgManager sysmsgService;
  /**
   * 登录
   * @param
   * @throws Exception
   */
  @RequestMapping(value = "/dologin", produces = "application/json;charset=UTF-8")
  @ResponseBody
  public String dologin() throws Exception {
    PageData pd = new PageData();
    pd = this.getPageData();
    String STUDYNUMB = pd.getString("STUDYNUMB");
    String PASSWORD = pd.getString("PASSWORD");
    PageData loginpd = studentmService.dologin(pd); //根据用户名和密码去读取用户信息
    JSONObject result = new JSONObject();
    Map<String, String> map = new HashMap<String, String>();
    if (loginpd != null) {
      pd.put("ROW_ID", this.get32UUID());
      result.put("code", "ok");
      JSONObject userinfo = AppUtil.pdToJSON(loginpd);
      result.put("data", userinfo);
      result.put("msg", "请求成功");
    } else {
      result.put("code", "error");
      result.put("msg", "用户名或密码错误");
    }
    System.out.println("result = "+result.toString());
    return result.toString();
  }
  @RequestMapping(value = "/changePsd", produces = "application/json;charset=UTF-8")
  @ResponseBody
  public String changePsd() throws Exception {
    PageData pd = new PageData();
    pd = this.getPageData();
      PageData userpd = studentmService.dologin(pd);
      JSONObject result = new JSONObject();
      if (userpd == null) {
        result.put("code", "error");
        result.put("msg", "原密码错误,请重新输入!");
      } else {
        studentmService.editPSD(pd);
        result.put("code", "ok");
        result.put("msg", "密码修改成功!");
      }
      return result.toString();
  }
  @RequestMapping(value = "/getSysMsgList", produces = "application/json;charset=UTF-8")
  @ResponseBody
  public String getSysMsgList() throws Exception {
    PageData pd = new PageData();
    pd = this.getPageData();
       List<PageData> info = sysmsgService.listAll(pd);
      JSONObject result = new JSONObject();
      /* Map<String,String> map = new HashMap<String,String>(); */
      if (info != null) {
        result.put("code", "ok");
        JSONArray verifylist = AppUtil.pdToJSONArray(info);
        result.put("data", verifylist);
        result.put("msg", "请求成功!");
      } else {
        result.put("code", "error");
        result.put("msg", "无数据");
      }
      return result.toString();
  }
  @RequestMapping(value = "/getCostList", produces = "application/json;charset=UTF-8")
  @ResponseBody
  public String getCostList() throws Exception {
    PageData pd = new PageData();
    pd = this.getPageData();
       List<PageData> info = costService.listAll(pd);
      JSONObject result = new JSONObject();
      /* Map<String,String> map = new HashMap<String,String>(); */
      if (info != null) {
        result.put("code", "ok");
        JSONArray verifylist = AppUtil.pdToJSONArray(info);
        result.put("data", verifylist);
        result.put("msg", "请求成功!");
      } else {
        result.put("code", "error");
        result.put("msg", "无数据");
      }
      return result.toString();
  }
  @RequestMapping(value = "/getCouseList", produces = "application/json;charset=UTF-8")
  @ResponseBody
  public String getCouseList() throws Exception {
    PageData pd = new PageData();
    pd = this.getPageData();
      PageData info = courseService.getCouseList(pd);
      JSONObject result = new JSONObject();
      /* Map<String,String> map = new HashMap<String,String>(); */
      if (info != null) {
        result.put("code", "ok");
        JSONObject verifylist = AppUtil.pdToJSON(info);
        result.put("data", verifylist);
        result.put("msg", "请求成功!");
      } else {
        result.put("code", "error");
        result.put("msg", "无数据");
      }
      return result.toString();
  }
  @RequestMapping(value = "/getInfo", produces = "application/json;charset=UTF-8")
  @ResponseBody
  public String getInfo() throws Exception {
    PageData pd = new PageData();
    pd = this.getPageData();
      PageData info = studentinfoService.findById(pd);
      JSONObject result = new JSONObject();
      /* Map<String,String> map = new HashMap<String,String>(); */
      if (info != null) {
        result.put("code", "ok");
        JSONObject verifylist = AppUtil.pdToJSON(info);
        result.put("data", verifylist);
        result.put("msg", "请求成功!");
      } else {
        result.put("code", "error");
        result.put("msg", "无数据");
      }
      return result.toString();
  }
  @RequestMapping(value = "/saveInfo", produces = "application/json;charset=UTF-8")
  @ResponseBody
  public String saveInfo() throws Exception {
    PageData pd = new PageData();
    pd = this.getPageData();
    if(pd.containsKey("STUDENTINFO_ID")) {
      studentinfoService.edit(pd);
    }else {
    pd.put("STUDENTINFO_ID", this.get32UUID());
      studentinfoService.save(pd);
    }
      JSONObject result = new JSONObject();
      /* Map<String,String> map = new HashMap<String,String>(); */
        result.put("code", "ok");
        result.put("msg", "请求成功!");
      return result.toString();
  }
  @InitBinder
  public void initBinder(WebDataBinder binder){
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(format,true));
  }
}
@Controller
@RequestMapping(value="/studentinfo")
public class StudentInfoController extends BaseController {
  String menuUrl = "studentinfo/list.do"; //菜单地址(权限用)
  @Resource(name="studentinfoService")
  private StudentInfoManager studentinfoService;
  /**保存
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/save")
  public ModelAndView save() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"新增StudentInfo");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "add")){return null;} //校验权限
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    pd.put("STUDENTINFO_ID", this.get32UUID()); //主键
    studentinfoService.save(pd);
    mv.addObject("msg","success");
    mv.setViewName("save_result");
    return mv;
  }
  /**删除
   * @param out
   * @throws Exception
   */
  @RequestMapping(value="/delete")
  public void delete(PrintWriter out) throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"删除StudentInfo");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return;} //校验权限
    PageData pd = new PageData();
    pd = this.getPageData();
    studentinfoService.delete(pd);
    out.write("success");
    out.close();
  }
  /**修改
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/edit")
  public ModelAndView edit() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"修改StudentInfo");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "edit")){return null;} //校验权限
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    studentinfoService.edit(pd);
    mv.addObject("msg","success");
    mv.setViewName("save_result");
    return mv;
  }
  /**列表
   * @param page
   * @throws Exception
   */
  @RequestMapping(value="/list")
  public ModelAndView list(Page page) throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"列表StudentInfo");
    //if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;} //校验权限(无权查看时页面会有提示,如果不注释掉这句代码就无法进入列表页面,所以根据情况是否加入本句代码)
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    String keywords = pd.getString("keywords");       //关键词检索条件
    if(null != keywords && !"".equals(keywords)){
      pd.put("keywords", keywords.trim());
    }
    page.setPd(pd);
    List<PageData>  varList = studentinfoService.list(page);  //列出StudentInfo列表
    mv.setViewName("newreport/studentinfo/studentinfo_list");
    mv.addObject("varList", varList);
    mv.addObject("pd", pd);
    mv.addObject("QX",Jurisdiction.getHC());  //按钮权限
    return mv;
  }
  /**去新增页面
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/goAdd")
  public ModelAndView goAdd()throws Exception{
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    mv.setViewName("newreport/studentinfo/studentinfo_edit");
    mv.addObject("msg", "save");
    mv.addObject("pd", pd);
    return mv;
  } 
   /**去修改页面
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/goEdit")
  public ModelAndView goEdit()throws Exception{
    ModelAndView mv = this.getModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    pd = studentinfoService.findById(pd); //根据ID读取
    mv.setViewName("newreport/studentinfo/studentinfo_edit");
    mv.addObject("msg", "edit");
    mv.addObject("pd", pd);
    return mv;
  } 
   /**批量删除
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/deleteAll")
  @ResponseBody
  public Object deleteAll() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"批量删除StudentInfo");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "del")){return null;} //校验权限
    PageData pd = new PageData();   
    Map<String,Object> map = new HashMap<String,Object>();
    pd = this.getPageData();
    List<PageData> pdList = new ArrayList<PageData>();
    String DATA_IDS = pd.getString("DATA_IDS");
    if(null != DATA_IDS && !"".equals(DATA_IDS)){
      String ArrayDATA_IDS[] = DATA_IDS.split(",");
      studentinfoService.deleteAll(ArrayDATA_IDS);
      pd.put("msg", "ok");
    }else{
      pd.put("msg", "no");
    }
    pdList.add(pd);
    map.put("list", pdList);
    return AppUtil.returnObject(pd, map);
  }
   /**导出到excel
   * @param
   * @throws Exception
   */
  @RequestMapping(value="/excel")
  public ModelAndView exportExcel() throws Exception{
    logBefore(logger, Jurisdiction.getUsername()+"导出StudentInfo到excel");
    if(!Jurisdiction.buttonJurisdiction(menuUrl, "cha")){return null;}
    ModelAndView mv = new ModelAndView();
    PageData pd = new PageData();
    pd = this.getPageData();
    Map<String,Object> dataMap = new HashMap<String,Object>();
    List<String> titles = new ArrayList<String>();
    titles.add("性别"); //1
    titles.add("电话"); //2
    titles.add("身份证号"); //3
    titles.add("家庭住址"); //4
    titles.add("毕业院校"); //5
    dataMap.put("titles", titles);
    List<PageData> varOList = studentinfoService.listAll(pd);
    List<PageData> varList = new ArrayList<PageData>();
    for(int i=0;i<varOList.size();i++){
      PageData vpd = new PageData();
      vpd.put("var1", varOList.get(i).getString("GENDER"));     //1
      vpd.put("var2", varOList.get(i).getString("PHONE"));      //2
      vpd.put("var3", varOList.get(i).getString("IDCARD"));     //3
      vpd.put("var4", varOList.get(i).getString("ADDRESS"));      //4
      vpd.put("var5", varOList.get(i).getString("GRADUATE"));     //5
      varList.add(vpd);
    }
    dataMap.put("varList", varList);
    ObjectExcelView erv = new ObjectExcelView();
    mv = new ModelAndView(erv,dataMap);
    return mv;
  }
  @InitBinder
  public void initBinder(WebDataBinder binder){
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(format,true));
  }
}

6.参考论文

目  录

1. 绪论

1.1 课题研究背景

1.1.1课题研究来源

1.1.2课题研究目的

1.2 国内外研究现状

1.2.1国内外学生报到管理系统发展概况

1.3 论文整体流程以及框架

2.方案论证

2.1 开发环境与设计技术

2.1.1开发环境

2.1.2设计技术

2.2 需求分析与可行性分析

2.2.1需求分析

2.2.2可行性分析

2.3系统设计

2.3.1系统设计原理

2.3.2 报到系统功能模块设计

2.3.3 系统管理功能模块设计

2.3.4 数据库概念设计ER图

2.3.5 各数据表详细情况介绍

3.系统实现与操作

3.1 后台管理功能操作

3.1.1 管理员账号登录

3.1.2 添加管理员账号

3.1.3 新生信息管理

3.2 新生APP功能操作

3.2.1 新生账号登录

3.2.2 APP其他功能

4.系统测试与结果分析

4.1 测试介绍

4.2 后端测试

4.2.1 后台登录模块测试

4.2.2 学生管理模块测试

4.2.2 通知发布模块测试

4.3 前端测试

4.3.1 前端登录模块测试

4.3.1 学生信息模块测试

4.4 结果分析

5.总结与展望

5.1 系统尚存问题

5.2 系统发展展望

6.参考文献

7.总结

首先在经过测试后,系统已经可以正常使用,但是系统本身还没有做到自己的一些设想的功能,如利用本系统做选课功能。因为涉及到系统连接学校的教务处网络,有一定的安全性风险。所以加此功能仍然需要详细考虑。

其次因为设计程序的缺陷,和软件特点,本系统暂时只能把前台APP和后端用与同一网络地点下,功能还不够完善。

目前,移动应用发展迅速,安卓应用对提高工作效率具有非常重要的意义,因此构建一个稳定、功能齐全、易于操作的安卓报表系统尤为重要。

在项目开始前,通过查阅相关书籍、论文和期刊,我们从根本上了解了相关系统的模式特征,并认真研究了相关系统的优缺点。了解后,我们分析了该系统的设计与开发,该系统的主要目的是学校相关人员向在校新生公布新生入学信息,为新生提供服务的平台,同时使学校公告信息和学生显示新的学校相关信息成为可能。这是一个相对成功的系统。

经过黑匣子测试和兼容性测试,系统的各项功能在安卓新一代的基础上成功运行,基本达到了预期目标。然而,也存在一些不足,我们希望继续努力,优化新的新生预报到系统,最终为我们的新生工作提供一个方便的项目软件。

喜欢的点赞收藏加关注私信作者沟通交流

相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
24天前
|
XML Java 数据库
安卓项目:app注册/登录界面设计
本文介绍了如何设计一个Android应用的注册/登录界面,包括布局文件的创建、登录和注册逻辑的实现,以及运行效果的展示。
97 0
安卓项目:app注册/登录界面设计
|
4天前
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
29 15
Android 系统缓存扫描与清理方法分析
|
6天前
|
安全 搜索推荐 Android开发
深入探索安卓与iOS系统的差异及其对用户体验的影响
在当今的智能手机市场中,安卓和iOS是两大主流操作系统。它们各自拥有独特的特性和优势,为用户提供了不同的使用体验。本文将深入探讨安卓与iOS系统之间的主要差异,包括它们的设计理念、用户界面、应用生态以及安全性等方面,并分析这些差异如何影响用户的使用体验。
|
6天前
|
安全 搜索推荐 Android开发
揭秘iOS与Android系统的差异:一场技术与哲学的较量
在当今数字化时代,智能手机操作系统的选择成为了用户个性化表达和技术偏好的重要标志。iOS和Android,作为市场上两大主流操作系统,它们之间的竞争不仅仅是技术的比拼,更是设计理念、用户体验和生态系统构建的全面较量。本文将深入探讨iOS与Android在系统架构、应用生态、用户界面及安全性等方面的本质区别,揭示这两种系统背后的哲学思想和市场策略,帮助读者更全面地理解两者的优劣,从而做出更适合自己的选择。
|
2月前
|
Java 数据库 Android开发
一个Android App最少有几个线程?实现多线程的方式有哪些?
本文介绍了Android多线程编程的重要性及其实现方法,涵盖了基本概念、常见线程类型(如主线程、工作线程)以及多种多线程实现方式(如`Thread`、`HandlerThread`、`Executors`、Kotlin协程等)。通过合理的多线程管理,可大幅提升应用性能和用户体验。
92 15
一个Android App最少有几个线程?实现多线程的方式有哪些?
|
24天前
|
IDE Android开发 iOS开发
探索安卓与iOS系统的技术差异:开发者的视角
本文深入分析了安卓(Android)与苹果iOS两大移动操作系统在技术架构、开发环境、用户体验和市场策略方面的主要差异。通过对比这两种系统的不同特点,旨在为移动应用开发者提供有价值的见解,帮助他们在不同平台上做出更明智的开发决策。
|
24天前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
2月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
2月前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
66 6
|
2月前
|
Dart 开发工具 Android开发
在 Android 系统上搭建 Flutter 环境的具体步骤是什么?
在 Android 系统上搭建 Flutter 环境的具体步骤是什么?