Conception et mise en œuvre d'une nouvelle application de système de prévision des étudiants basée sur Android

1. Introduction

Avec le changement continu de la politique éducative du pays, depuis le début du 20e siècle, le gouvernement a commencé à mettre en œuvre le plan d'expansion des inscriptions. En 2020, le nombre total d'étudiants dans mon pays a grimpé à près de 50 millions, et la vulgarisation de l'enseignement universitaire se réalise progressivement. Avec le nombre croissant d'étudiants de première année, chaque année en septembre, les collèges et universités seront confrontés à une série de problèmes dans l'inscription des étudiants de première année, et l'inscription des étudiants de première année est une partie importante de la gestion des collèges et universités, qui est liée au bon déroulement développement du travail de suivi et de la conduite. Affectés par la politique d'expansion des inscriptions, les collèges et les universités accepteront chaque année plus de nouveaux étudiants lors de la saison d'ouverture que l'année précédente, et devront effectuer davantage de procédures d'inscription pour les nouveaux étudiants, de sorte que le processus d'inscription pour chaque semestre sera très lourd. Aujourd'hui, de nombreuses écoles utilisent le système d'inscription APP pour simplifier le processus et améliorer l'efficacité, mais certaines écoles ont des fonctions compliquées du système d'inscription existant, et les élèves ne peuvent pas bien s'inscrire et manquent de la précision statistique du système d'inscription et de certaines fonctions pratiques qui le système d'enregistrement devrait avoir. Par conséquent, une application de système de prévision pour étudiants de première année est conçue pour améliorer l'efficacité de l'inscription des étudiants de première année à l'école, et en même temps, elle doit répondre aux fonctions de base de l'utilisation des étudiants, telles que l'interrogation des annonces scolaires, les demandes de programmes d'études et les demandes d'informations sur les étudiants.

Le système APP est principalement divisé en deux terminaux d'exploitation.

L'un est le système d'administrateur d'arrière-plan et le client. Lorsque l'autorité d'exploitation du compte est suffisante, vous pouvez modifier et saisir les informations d'inscription des étudiants et le programme des étudiants, et en même temps, vous pouvez publier des annonces sur le système pour que les étudiants puissent les voir, et pour que les enseignants et les enseignants du bureau des affaires académiques puissent utiliser.

La seconde consiste à se connecter au terminal utilisateur pour les nouveaux étudiants. Il est principalement utilisé pour l'inscription de nouveaux étudiants et pour vérifier des informations telles que les majors, les classes, les horaires, etc. Il peut également télécharger des informations personnelles en arrière-plan. Le système est mis en œuvre à l'aide de la base de données MySQL et est principalement utilisé par les étudiants de première année et les écoles. étudiants.

Le système a atteint l'objectif de conception du système, peut répondre aux exigences d'utilisation de base de l'école, réduire la charge de travail manuelle du travail d'inscription des étudiants de première année, renvoyer en temps opportun les informations des étudiants qui sont confirmés pour fréquenter l'école, faciliter la recherche d'informations par les étudiants et promouvoir les besoins normalisés de la gestion du travail d'inscription des étudiants de première année.

2. Outils et technologies de développement

2.1 HeidiSQL

HeidiSQL est un logiciel client de base de données gratuit et open source. Interface graphique basée sur les données. Après une configuration spécifique, il peut prendre en charge des fonctions telles que la navigation dans les bases de données, la gestion des tables, la navigation et les enregistrements pratiques et la gestion des autorisations des utilisateurs. Heidi SQ. Il s'agit d'une interface graphique utilisée pour simplifier la gestion des mini-serveurs et des bases de données.Il est développé par Delphi et prend en charge les serveurs MySQL, SQL Server et PostgreSQL. HeidiSQL fournit une interface facile à utiliser pour basculer les requêtes SQL entre les navigateurs de base de données et les onglets avec coloration syntaxique. Il est pratique de parcourir la base de données, de gérer les tables, les vues, les procédures stockées, les déclencheurs, de parcourir et de modifier les enregistrements et de gérer les autorisations des utilisateurs. De plus, vous pouvez importer des données à partir de fichiers texte, exécuter des requêtes SQL, synchroniser des tables entre deux bases de données et exporter des tables sélectionnées vers d'autres bases de données ou vers des scripts SQL. Le schéma de fonctionnement spécifique de HeidiSQL est illustré à la figure 2.1 :

 2.2 SQLyog

SQLyog est un logiciel de gestion graphique professionnel. SQLyog est facile à utiliser et puissant. Il peut aider les utilisateurs à gérer facilement leurs propres bases de données MYSQL. SQLyog prend en charge l'exportation dans plusieurs formats de données. Il peut rapidement aider les utilisateurs à sauvegarder et restaurer des données, et peut également rapidement exécuter SQL. Les fichiers de script sont pratiques pour les utilisateurs. Produit par la société Webyog de renommée industrielle. L'utilisation de SQLyog peut vous permettre de gérer rapidement et intuitivement des bases de données MySQL distantes via le réseau depuis n'importe quel coin du monde. La base de données est principalement utilisée pour réaliser la fonction de sauvegarde des données utilisateur, et en même temps, elle doit avoir une fonction de connexion pour faciliter aux utilisateurs l'accès aux données dans la base de données et la recherche de données. Par conséquent, la base de données doit avoir un certain degré de sécurité et d'indépendance pour éviter les fuites de données. Le schéma de fonctionnement spécifique de SQLyog est illustré à la figure 2.2 :

Après avoir créé un nouveau compte, en utilisant l'ancienne méthode de cryptage, puis en autorisant le super administrateur, il peut également être utilisé pour se connecter avec cet administrateur. Le schéma de connexion spécifique à SQLyog est illustré à la figure 2.3.

2.3 Studio Android

Android Studio est un outil de développement logiciel de Google.Grâce à la prise en charge de la construction basée sur Gradle, il est possible de prévisualiser l'effet en faisant glisser et en contrôlant les contrôles de l'interface utilisateur via cette plate-forme. Les modèles fournis par la plate-forme peuvent être utilisés pour générer des conceptions et des composants d'application couramment utilisés. Le schéma de fonctionnement spécifique d'Android Studio est illustré à la figure 2.4.

Grâce à ce logiciel, vous pouvez voir l'aperçu du logiciel de gestion de l'information créé, ce qui est pratique pour modifier la conception de l'interface utilisateur du terminal d'exploitation étudiant.Le processus de modification spécifique est illustré à la figure 2.5 sous forme de diagramme de modification de l'interface utilisateur du terminal d'exploitation.

2.4 Éclipse

Eclipse est un environnement de développement intégré pour le langage de programmation Java avec plus de 10 ans de vitalité. Il dispose de fonctions telles que la sélection intelligente, le mode de navigation riche, la fonction d'enregistrement de l'historique et l'assistance au codage, ce qui est très convivial pour l'environnement d'écriture de nos développeurs. En même temps, nous pouvons utiliser l'interface graphique pour réaliser l'écriture du système de gestion d'arrière-plan que nous voyons. Bien qu'il existe maintenant plus d'environnements de codage, la compatibilité est toujours plus conviviale pour eclipse. Le terminal d'exploitation graphique spécifique à Eclipse est illustré à la Figure 2.6.

2.5 Architecture du système Android

L'architecture du système Android est une architecture de système d'exploitation générale à usage général. L'architecture principale est divisée en couche d'application, couche de cadre d'application, couche d'exécution du système et couche du noyau Linux du niveau supérieur au niveau inférieur.

Programme d'application : principalement un logiciel de programme exploité par le client. Généralement, il s'agit d'une couche d'utilisation des fonctions et le langage de programmation Android est généralement le langage Java, car l'efficacité de développement de Java est suffisamment élevée et, en même temps, la difficulté de démarrage est faible. Android est écrit en langage Java et parce que Java a de bonnes fonctionnalités multiplateformes, il est suffisant pour prendre en charge l'utilisation de bon nombre de nos appareils Android existants et maintenir la stabilité de l'application.

Framework d'application : principalement un framework d'API auquel les développeurs peuvent accéder. Inclut principalement les vues, les listes, les grilles, les zones de texte, les boutons, les fournisseurs de contenu, le gestionnaire de ressources, le gestionnaire de notifications (gestionnaire de notifications), le gestionnaire d'activités (gestionnaire d'activités).

Bibliothèque d'exécution du système : en utilisant la bibliothèque appartenant à la plate-forme, les composants du système peuvent être utilisés. Fournir aux développeurs de programmes de plate-forme des services connexes via le cadre de la couche supérieure. Inclut certaines bibliothèques de base. Tels que la bibliothèque système C, la bibliothèque multimédia, Surface Manager, LibWebCore et d'autres bibliothèques d'exécution.

Noyau Linux : Le noyau Linux agit comme une couche intermédiaire entre le matériel et le logiciel, et sa fonction est de transmettre les demandes d'application à la couche matérielle. Dans le même temps, le noyau est également une bibliothèque, qui fournit des commandes orientées système pour les applications et facilite les appels système pour les applications.

L'organigramme complet de l'architecture Android est illustré à la figure 2.7.

2.6Java

Fonctionnalités de Java : Étant donné que Java est multi-utilisateurs et multiplateforme, il possède de nombreuses fonctions et est facile à utiliser. Ces deux fonctionnalités les plus élémentaires. Java présente des caractéristiques telles que la simplicité, l'orientation objet, la distribution , la robustesse , la sécurité , l'indépendance et la portabilité de la plate-forme, le multithreading et la dynamique. Dans le même temps, Java peut écrire des applications de bureau , des applications Web, des systèmes distribués et des applications système embarquées , etc.

Le principe de fonctionnement de Java : le fichier source est compilé dans une classe de fichier bytecode par un écrivain, puis le fichier bytecode est généré dans un fichier exécutable correspondant par un interpréteur dans la JVM. Le diagramme de principe de fonctionnement Java spécifique est illustré à la figure 2.8.

Le processus de fonctionnement Java est construit par la machine virtuelle Java et l'interface du programme d'application Java via la plate-forme Java, et le langage Java est le canal pour entrer dans cette plate-forme. Les programmes écrits et compilés dans le langage Java peuvent s'exécuter sur cette plate-forme. L'organigramme du fonctionnement de Java est illustré à la figure 2.9.

2.7 Langage de requête structuré

SQL est un langage de programmation spécialisé dont la fonction est d'accéder aux données via des bases de données et d'interroger, mettre à jour et gérer des systèmes de bases de données relationnelles .

Les principales caractéristiques sont les suivantes : intégration fonctionnelle, structure unifiée, complétion automatique du système, langage concis, etc.

Le langage de requête structuré est principalement divisé en six parties : 1. Langage de requête de données ( DQL : ), 2. Langage de manipulation de données (DML : ), 3. Langage de contrôle des transactions (TCL), 4. Langage de contrôle des données (DCL), 5. , Langage de définition de données ( DDL ), 6, Langage de contrôle de pointeur (CCL).

Langage de requête de données : laissez la base de données exécuter des instructions de langage de requête de données et envoyer les résultats au client. C'est un moyen incontournable et important d'obtenir des données.

Langage d'exploitation des données : utilisé pour l'exploitation de la base de données et l'exploitation des données et accéder aux instructions de programmation de travail.

Langage de contrôle des transactions : principalement utilisé pour manipuler des données complexes et difficiles.

Langage de contrôle des données : utilisé pour définir et modifier les instructions d'autorisation d'utilisateur et de rôle de la base de données.

Langage de définition de données : classez les données en définissant les données d'autorisation dans la base de données.

Langage de contrôle des pointeurs : stipule les règles d'utilisation du programme pour favoriser l'utilisation normale de la base de données.

3. Conception fonctionnelle

Introduction fonctionnelle des modules de fonction du système : le nouveau système d'inscription des étudiants est principalement divisé en un système de gestion des antécédents des clients étudiants et des enseignants.

Les fonctions impliquées dans le client étudiant sont les suivantes : connexion au compte, requête d'informations de base, affichage des annonces liées au système, paiement des frais pertinents et interrogation des détails de paiement, affichage du calendrier des cours, téléchargement d'informations personnelles, modification du mot de passe du compte et d'autres fonctions.

Les fonctions impliquées dans le système de gestion des antécédents des enseignants comprennent : les fonctions connexes du module de gestion des étudiants, les fonctions connexes du module de gestion des frais, les fonctions connexes du module de gestion des cours, les fonctions connexes du module d'enregistrement des informations et les fonctions connexes de l'annonce du système. module.

Les fonctions nécessaires à la gestion du système comprennent principalement : le module de fonction de gestion des informations sur les étudiants, qui est divisé en module d'enregistrement des informations, module de gestion des frais, module de gestion des cours, module de gestion des étudiants, module d'annonce du système, etc.

Le schéma de structure du module d'enregistrement des informations est illustré dans la figure :

 Brève introduction à la fonction du module d'enregistrement d'informations: édition d'informations, fonction d'édition du sexe, du nom, du numéro de téléphone, du numéro d'identification, de l'adresse du domicile, de l'école doctorale et d'autres informations de l'étudiant.

Le schéma de structure du module de gestion des dépenses est présenté dans la figure :

 

 Présentation des fonctions du module de gestion des dépenses : ajoutez des informations sur les dépenses, modifiez les informations sur les dépenses, supprimez les informations sur les dépenses, affichez les informations sur les dépenses. Les informations de coût spécifiques peuvent être modifiées, telles que les frais de scolarité, les frais de formation militaire, les frais de fournitures d'appartement, les frais divers, les frais de livre, les frais d'examen médical et d'autres fonctions de modification des informations.

Le schéma de structure du module de gestion des cours est présenté dans la figure :

 

 Brève introduction aux fonctions spécifiques du module de gestion des cours : ajouter des informations sur les cours, modifier des informations sur les cours, supprimer des informations sur les cours et afficher les informations sur les cours. Les informations de cours spécifiques incluent la modification des départements, des majors, des classes, du programme et d'autres fonctions de modification de contenu.

Le schéma de structure du module de gestion des étudiants est présenté dans la figure :

 

Brève introduction aux fonctions du module de gestion des étudiants : y compris l'ajout d'informations sur les étudiants, la modification des informations sur les étudiants, la suppression d'informations sur les étudiants et l'affichage des informations sur les étudiants. Parmi eux, les informations spécifiques à l'étudiant sont modifiées en département, nom, majeure, numéro d'étudiant, classe, numéro de bâtiment de dortoir et numéro de dortoir. L'identifiant étudiant est le mot de passe initial du compte du terminal étudiant.

Le schéma de structure du module d'annonce du système est illustré dans la figure :

 

Présentation des fonctions du module de bulletin système : ajoutez, modifiez, supprimez, affichez les bulletins et marquez le titre, le contenu, la date de sortie et d'autres fonctions. 

4. Rendus fonctionnels

4.1 Fonctionnement  de la fonction de gestion d'arrière-plan

Tout d'abord, vous devez créer un compte administrateur pour pouvoir enregistrer les informations sur les nouveaux étudiants. Ajoutez un nouvel administrateur après vous être connecté au compte administrateur initial. Le compte administrateur initial est admin et le mot de passe est 2014122. Après vous être connecté, vous pouvez ajouter un compte administrateur dans le système de gestion des étudiants en arrière-plan.

(1) Connexion au compte administrateur

 Le compte administrateur initial a la plus haute autorité et ne peut pas être ajouté ou supprimé. Après vous être connecté en arrière-plan, vous devez basculer vers votre propre compte administrateur pour continuer à vous connecter. Après avoir entré le mot de passe correct du compte administrateur, vous pouvez entrer dans le système de gestion des étudiants. L'interface de connexion en arrière-plan est illustrée dans la figure :

(2) Ajouter un compte administrateur

Ajoutez un nouveau compte administrateur via le compte administrateur initial. Le schéma d'interface pour l'ajout d'un compte administrateur est illustré dans la figure :

 (3) Ajouter un compte administrateur

  Après vous être connecté au compte administrateur, vous pouvez ajouter les informations des nouveaux étudiants, puis les informations des nouveaux étudiants peuvent être conservées dans le système de gestion des étudiants en arrière-plan, et les nouveaux étudiants peuvent se connecter via l'APP.

Parmi eux, lors de l'ajout d'informations sur l'étudiant, vous pouvez choisir le numéro d'étudiant, la classe, la majeure, le numéro de dortoir et le numéro de dortoir de l'étudiant, afin que les étudiants puissent vérifier leurs propres informations sur l'application frontale. En même temps, il prend en charge les opérations de modification.L'ajout spécifique d'informations sur le nouveau-né est illustré dans la figure :

Après avoir terminé la connexion des informations sur les nouveaux étudiants, vous pouvez ajouter les frais de scolarité des étudiants, les horaires des cours et émettre des annonces système en fonction des informations sur les étudiants, afin que les étudiants puissent effectuer un paiement ultérieur et faciliter la compréhension des informations par les étudiants.

Ajoutez un tableau des frais de scolarité des étudiants comme indiqué dans la figure :

 Ajoutez un horaire de cours comme indiqué dans la figure :

Publiez l'annonce système comme indiqué dans la figure : 

4.2  Fonctionnement de la fonction APP nouveau-né _

  Une fois que le compte administrateur a ajouté les informations sur les nouveaux étudiants dans le système de gestion des étudiants en arrière-plan, il est prévu que les nouveaux étudiants puissent obtenir l'APP via des méthodes en ligne, puis se connecter à l'APP via leur propre numéro d'étudiant et le mot de passe initial est l'étudiant. nombre pour effectuer une série d'opérations.

(1) Nouvelle connexion au compte étudiant

Après s'être connecté via le compte, les étudiants de première année peuvent ajouter leurs propres informations et modifier le mot de passe du compte.

Le diagramme de connexion du nouveau compte est comme indiqué dans la figure :

Le diagramme d'ajout d'informations est illustré dans la figure :

​​ ​

Modifiez le mot de passe du compte comme indiqué sur la figure : 

(2) Autres fonctions de l'APP

Après s'être connecté à l'APP, les étudiants de première année doivent effectuer leur propre vérification des informations de base, le paiement, vérifier l'horaire des cours, vérifier l'annonce du système et d'autres fonctions.

Vérifiez les informations de base comme indiqué sur la figure :

Les nouveaux tarifs étudiants sont les suivants : 

Voir le programme comme indiqué dans l'image : 

 Consultez l'annonce du système comme indiqué sur la figure :

5. Code de base

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. Documents de référence

Table des matières

1. Introduction

1.1 Contexte de recherche du sujet

1.1.1 Sources des sujets de recherche

1.1.2 Objet du sujet de recherche

1.2 Statut de la recherche au pays et à l'étranger

1.2.1 Aperçu du développement du système de gestion des inscriptions des étudiants dans le pays et à l'étranger

1.3 Le processus global et le cadre du document

2. Démonstration de la proposition

2.1 Environnement de développement et technologie de conception

2.1.1 Environnement de développement

2.1.2 Technologie de conception

2.2 Analyse de la demande et analyse de faisabilité

2.2.1 Analyse de la demande

2.2.2 Analyse de faisabilité

2.3 Conception du système

2.3.1 Principes de conception du système

2.3.2 Conception du module fonctionnel du système d'enregistrement

2.3.3 Conception du module de fonction de gestion du système

2.3.4 Diagramme ER de la conception conceptuelle de la base de données

2.3.5 Introduction détaillée de chaque tableau de données

3. Mise en œuvre et exploitation du système

3.1 Fonctionnement de la fonction de gestion d'arrière-plan

3.1.1 Connexion au compte administrateur

3.1.2 Ajouter un compte administrateur

3.1.3 Gestion des informations des étudiants de première année

3.2 Fonctionnement de la fonction APP nouveau-né

3.2.1 Nouvelle connexion au compte étudiant

3.2.2 Autres fonctions de l'APP

4. Test du système et analyse des résultats

4.1 Introduction aux essais

4.2 Test d'arrière-plan

4.2.1 Test du module de connexion en arrière-plan

4.2.2 Test du module de gestion des étudiants

4.2.2 Test du module de libération de notification

4.3 Tests frontaux

4.3.1 Test du module de connexion frontal

4.3.1 Test du module d'information sur l'élève

4.4 Analyse des résultats

5. Résumé et perspectives

5.1 Problèmes existants dans le système

5.2 Perspectives de développement du système

6. Références

7. Résumé

Tout d'abord, après le test, le système peut être utilisé normalement, mais le système lui-même n'a pas réalisé certaines de ses fonctions imaginées, telles que l'utilisation du système pour la sélection de cours. Puisqu'il s'agit de connecter le système au réseau du bureau des affaires académiques de l'école, il existe certains risques de sécurité. L'ajout de cette fonction doit donc encore être examiné en détail.

Deuxièmement, en raison des défauts du programme de conception et des caractéristiques du logiciel, ce système ne peut utiliser que l'application frontale et le back-end sous le même emplacement réseau pour le moment, et la fonction n'est pas assez parfaite.

À l'heure actuelle, les applications mobiles se développent rapidement et les applications Android sont d'une grande importance pour améliorer l'efficacité du travail. Par conséquent, il est particulièrement important de créer un système de rapport Android stable, entièrement fonctionnel et facile à utiliser.

Avant le début du projet, en consultant des livres, des articles et des revues pertinents, nous avons fondamentalement compris les caractéristiques des modèles des systèmes pertinents et étudié avec soin les avantages et les inconvénients des systèmes pertinents. Après avoir compris, nous avons analysé la conception et le développement du système. Le but principal du système est d'annoncer les informations d'inscription des nouveaux étudiants aux nouveaux étudiants et de fournir des services aux nouveaux étudiants. En même temps, l'annonce de l'école informations et les élèves affichent la nouvelle information relative à l'école devient possible. C'est un système relativement efficace.

Après le test de la boîte noire et le test de compatibilité, les différentes fonctions du système fonctionnent avec succès sur la base de la nouvelle génération d'Android, atteignant essentiellement l'objectif escompté. Cependant, il y a encore quelques lacunes, et nous espérons continuer à travailler dur pour optimiser le nouveau système de prévision des étudiants de première année, et enfin fournir un logiciel de projet pratique pour notre travail de première année.

Aime, aime, collections et attention aux lettres privées Communication de l'auteur

Acho que você gosta

Origin blog.csdn.net/lf21qp/article/details/131487308
Recomendado
Clasificación