1. Introduction
Les animaux sont les animaux de compagnie des humains depuis des milliers d'années, en particulier les chats et les chiens sont aimés et admirés par les humains en raison de leur nature, et de nombreux idiomes, histoires et dictons leur sont liés. Cependant, ces dernières années, en raison de l'accélération du rythme de vie, la pression des gens a augmenté et il n'y a pas de temps ni d'espace pour s'occuper des animaux de compagnie, de sorte que le nombre de familles abandonnant les animaux de compagnie a augmenté et de plus en plus d'animaux errants. affectent non seulement la vie des animaux et même leur survie, mais aussi la vie humaine. Selon "Entertainment News" de Pékin, les experts vétérinaires ont déclaré que les chats et les chiens errants sont plus susceptibles de propager des maladies. "La probabilité que des chats et des chiens errant dans la rue transportent la peste et d'autres virus, puces et autres parasites est beaucoup plus élevée que celle des animaux domestiques." De plus, un grand nombre de chats et de chiens errants constituent également un grave danger caché pour l'environnement urbain, la circulation et la sécurité de la santé publique, et c'est aussi un manque de respect pour la vie. Dans le même temps, certaines familles regrettent de ne pas trouver d'animaux de compagnie adaptés.
À l'heure actuelle, il existe de nombreux problèmes dans le sauvetage des animaux, tels que des zones de sauvetage limitées, des investissements importants, des sites éloignés et des difficultés à mettre à jour et à diffuser les informations. Ces situations ont conduit à la situation de "plus de revenus et moins de rendement" pour les animaux dans les sauvetages d'animaux, ce qui a conduit à des problèmes de plus en plus graves dans l'économie et l'espace du refuge. Aujourd'hui, avec le développement rapide de la technologie des réseaux, le commerce électronique a un impact de plus en plus important sur les gens, allant de l'achat et de la vente de vêtements aux transactions immobilières pouvant être effectuées par le biais du commerce électronique. Les gens s'habituent de plus en plus à rester à la maison et à régler de nombreuses affaires personnelles. S'appuyant sur les avantages d'Internet, il est urgent de développer un système d'adoption et d'accompagnement d'animaux de compagnie en réseau en combinant adoption et accompagnement d'animaux.
Cet article décrit l'ensemble du processus de développement d'un système de sauvetage de chats et de chiens errants basé sur le SSM. En accédant à la plate-forme sur Internet, les utilisateurs peuvent décider de la méthode de sauvetage en fonction de leurs propres besoins, de leur environnement familial, de l'état de leur animal et d'autres facteurs. Bien sûr, en tenant compte des conditions des animaux eux-mêmes et des utilisateurs eux-mêmes, l'administrateur du site a le droit d'empêcher les utilisateurs de les sauver, et peut également gérer dynamiquement le sauvetage des animaux, et déterminer si les membres ont le droit d'adopter selon aux lois et réglementations nationales ; enfin, l'adoption
2. Technologie de développement
2.1 Cadre B/S
L'architecture B/S est une architecture de système logiciel, faisant référence au navigateur-serveur Web (Broswer-Server), qui adopte une architecture à trois niveaux, à savoir la couche de présentation, la couche de logique métier et la couche d'accès aux données. Dans l'architecture B/S, l'interface utilisateur est entièrement implémentée via le navigateur, et une partie de la logique métier est implémentée sur le front-end, mais la logique métier principale est implémentée côté serveur, formant l'architecture dite à 30 %. . Dans le système d'architecture B/S, l'utilisateur envoie des demandes à de nombreux serveurs répartis sur le réseau via le navigateur, et le serveur traite la demande du navigateur et renvoie les informations requises par l'utilisateur au navigateur. Le reste, comme la demande de données, le traitement, le retour des résultats, la génération de la page Web dynamique, l'accès à la base de données et l'exécution du programme d'application, etc., sont tous effectués par Web Server. Avec Windows intégrant la technologie du navigateur dans le système d'exploitation, cette structure est devenue la structure préférée des logiciels d'application d'aujourd'hui.
2.2 Technologie JSP
Le nom complet de JSP est JavaServer Pages, qui est une norme de technologie de page Web dynamique créée par Sun Microsystems. Il est construit sur un serveur Web, peut recevoir des instructions envoyées par le client, générer dynamiquement du HTML et d'autres pages Web en fonction du contenu de les instructions, puis les retourner au demandeur. JSP peut être créé indépendamment en fonction des besoins du personnel de R&D, et différentes langues peuvent être exécutées d'autres manières, ce qui est universel.
En raison de la norme dynamique JSP, elle présente de nombreux avantages par rapport aux normes statiques ordinaires. Par exemple, JSP peut incorporer des codes dans des pages statiques et les modifier à tout moment, et utiliser des pages statiques comme modèles pour réaliser la génération dynamique de certains contenus. en même temps, il a aussi une interactivité plus puissante. Il introduit également une balise XML appelée "action" pour appeler des fonctions intégrées. La bibliothèque de balises peut être utilisée de manière dynamique avec la plate-forme et s'adapte à divers environnements extérieurs à la plate-forme. Ces fonctions faciles à utiliser sont appréciées par de nombreux développeurs.
2.3 Cadre MVC
Le nom complet de MVC est Model View Controller, qui est l'abréviation de Model-View-Controller. Il s'agit d'un modèle de conception de logiciel. Il utilise une méthode de séparation de la logique métier, des données et de l'affichage de l'interface pour organiser le code et rassembler la logique métier. Améliorez et personnalisez les interfaces personnalisées et les interactions utilisateur sans réécrire la logique métier. MVC a été développé de manière unique pour mapper les fonctions d'entrée, de traitement et de sortie traditionnelles dans une structure d'interface graphique logique.
2.4 MySQL
MySQL est un système de gestion de base de données relationnelle de petite et moyenne taille qui peut être traité sur un serveur Web prenant en charge le multithreading [13].C'est un logiciel développé par ORACLE, et c'est l'une des meilleures applications RDBMS dans les applications Web.
MySQL peut stocker des données dans différentes tables. Ces tables sont équivalentes à de petits entrepôts, et divers entrepôts sont entrelacés. Cette méthode de connexion "entrelacée" améliore considérablement la flexibilité des données. MySQL utilise le langage SQL, a une version gratuite et est ouvert au public, et peut construire un bon environnement de développement avec Apache. MySQL présente les avantages d'un faible coût, d'une vitesse élevée et d'une petite taille. En termes d'application, il présente également les avantages d'une bonne sécurité et d'une vitesse de développement rapide.Pour certaines entreprises et les utilisateurs individuels qui souhaitent réduire les coûts, choisir MySQL est un très bon choix.
3. Conception fonctionnelle
Les membres de ce système sont divisés en trois rôles : les touristes, les utilisateurs et les administrateurs. Le schéma de la structure du système montre :
Les privilèges d'administrateur:
(1) L'administrateur a le pouvoir de gérer les utilisateurs principalement pour supprimer les informations d'utilisateur des utilisateurs qui violent l'accord et qui ne se sont pas connectés depuis longtemps.
(2) L'administrateur a le pouvoir de gérer les animaux principalement pour publier de nouvelles informations sur les animaux, supprimer les informations sur les animaux morts, modifier les informations sur le statut d'adoption des animaux, examiner les animaux libérés par les utilisateurs, etc.
(2) L'administrateur a le pouvoir de gérer les commandes, y compris : la modification du statut des commandes, la révision des commandes, l'annulation des commandes déraisonnables, la confirmation des commandes, etc.
(3) Les administrateurs ont le pouvoir de gérer les catégories d'animaux, y compris : l'ajout, la suppression et la modification des informations sur les catégories d'animaux.
(4) L'administrateur a le pouvoir de gérer les catégories de fret, y compris : l'ajout, la suppression et la modification des informations sur les catégories de fret.
(5) L'administrateur a le pouvoir de gérer l'adoption d'animaux de compagnie, principalement de modifier les informations d'adoption.
Droits de l'utilisateur:
(6) Les utilisateurs ont le pouvoir de parcourir toutes les informations sur les animaux de compagnie sur le site Web et de publier des informations sur les animaux de compagnie ayant besoin d'être secourus.
(7) L'utilisateur a le pouvoir de rechercher des animaux de compagnie par mot-clé.
(8) Gestion des informations personnelles : modifier les informations d'enregistrement personnelles.
(9) Gestion du mot de passe : récupérer le mot de passe, modifier le mot de passe.
(10) Ajouter, afficher ou supprimer des favoris personnels.
(11) Mettez l'animal sélectionné dans le chariot pour animaux de compagnie.
(12) Afficher, ajouter et supprimer des animaux de compagnie dans le panier d'animaux
(13) Si vous adoptez, soumettez la commande directement ; si vous adoptez, soumettez la commande et remplissez les informations de réception nécessaires.
(14) En cas de parrainage direct, modifiez directement les informations de parrainage de l'animal.
(15) Afficher le montant total, frais de port compris
(16) Vérifiez le détail de la consommation mensuelle des animaux parrainés.
(17) Téléchargez des photos récentes d'animaux de compagnie adoptés pour que l'administrateur rende visite.
(18) Gestion des informations de message : ajouter un message
(19) Se déconnecter
Autorisations des visiteurs :
(1) Les visiteurs ont le droit de parcourir toutes les informations sur les animaux de compagnie sur le site Web, principalement pour afficher les informations sur les animaux de compagnie.
(2) Les touristes ont le pouvoir de rechercher des animaux de compagnie par mot-clé.
(3) Les visiteurs ont le droit de s'inscrire en tant que membres.
4. Rendus fonctionnels
4.1 Page d'accueil
4.2 Centre d'adoption
4.3 Connexion
4.4 Inscription
4.5 Connexion administrateur en arrière-plan
5. Code de base
@Controller
@RequestMapping("adopt")
public class AdoptAnimalController {
@Autowired
private AdoptAnimalService animalService;
@Autowired
private PetService petService;
@Autowired
private UsersService usersService;
@RequestMapping("adopts.action")
@ResponseBody
public Message getAdoptAnimals(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
PageHelper.startPage(pn,4);
AdoptAnimal animal=new AdoptAnimal();
List<AdoptAnimal> adoptAnimals = animalService.findByState(1);
PageInfo page=new PageInfo(adoptAnimals,2);
return Message.success().add("pageInfo",page);
}
@RequestMapping("ByAgree.action")
@ResponseBody
public Message getAdoptStates(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
PageHelper.startPage(pn,4);
int state=2;
List<AdoptAnimal> adoptAnimals = animalService.findByState(state);
PageInfo page=new PageInfo(adoptAnimals,2);
return Message.success().add("pageInfo",page);
}
@RequestMapping("ByDisAgree.action")
@ResponseBody
public Message getAdoptDisagress(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
PageHelper.startPage(pn,4);
int state=0;
List<AdoptAnimal> adoptAnimals = animalService.findByState(state);
PageInfo page=new PageInfo(adoptAnimals,2);
return Message.success().add("pageInfo",page);
}
@RequestMapping("create.action")
@ResponseBody
public Message createAdopt(HttpServletRequest request){
Pet pet = (Pet)request.getSession().getAttribute("pet");
Users user = (Users)request.getSession().getAttribute("user");
pet.setState(1);
AdoptAnimal animal=new AdoptAnimal();
animal.setUser(user);
animal.setPet(pet);
animal.setState(1);
animal.setAdoptTime(new Date());
int i = animalService.addAdoptAnimal(animal);
int t=petService.updateState(pet);
if(i>0&&t>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("delete.action")
@ResponseBody
public Message deleteAdopt(Integer id){
if(animalService.deleteAdoptAnimal(id)>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("update.action")
@ResponseBody
public Message updateAdoptAnimal(AdoptAnimal animal){
if(animalService.updateAdoptAnimal(animal)>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping(value = "disAgree.action", method = RequestMethod.GET)
@ResponseBody
public Message updateAdoptState(Integer id) throws MessagingException {
AdoptAnimal animal = animalService.findById(id);
animal.setState(0);
Pet pet = animal.getPet();
pet.setState(0);
int i = animalService.updateAdoptState(animal);
int t=petService.updateState(pet);
if(i>0&&t>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping(value = "agree.action",method = RequestMethod.GET)
@ResponseBody
public Message updateAdoptStates(Integer id) throws MessagingException {
AdoptAnimal animal = animalService.findById(id);
animal.setState(2);
Pet pet = animal.getPet();
pet.setState(2);
int a = animalService.updateAdoptState(animal);
int b=petService.updateState(pet);
if(a>0&&b>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("findById.action")
@ResponseBody
public Message findById(Integer id){
AdoptAnimal animal = animalService.findById(id);
if(animal!=null){
return Message.success().add("animal",animal);
}else{
return Message.fail();
}
}
@RequestMapping("findByAdoptTime.action")
@ResponseBody
public Message findByAdoptTime(String adoptTime) throws ParseException {
PageHelper.startPage(1,4);
List<AdoptAnimal> adoptAnimals = animalService.findByAdoptTime(adoptTime);
if(adoptAnimals!=null){
PageInfo page=new PageInfo(adoptAnimals,3);
return Message.success().add("pageInfo",page);
}else{
return Message.fail();
}
}
@RequestMapping("findByName.action")
@ResponseBody
public Message findByName(@RequestParam(value = "pn",defaultValue = "1")Integer pn,@RequestParam(value = "userName") String userName,@RequestParam(value = "state") Integer state) throws ParseException {
PageHelper.startPage(1,4);
List<Users> users = usersService.findByName(userName);
List<AdoptAnimal> adoptAnimals = animalService.findByName(users,state);
if(adoptAnimals!=null){
PageInfo page=new PageInfo(adoptAnimals,3);
return Message.success().add("pageInfo",page);
}else{
return Message.fail();
}
}
}
@Controller
@RequestMapping("pet")
public class PetController {
@Autowired
private PetService petService;
@RequestMapping("pets.action")
@ResponseBody
public Message getPets(@RequestParam(value = "pn",defaultValue = "1")Integer pn){
PageHelper.startPage(pn,3);
List<Pet> pets = petService.getPets();
System.out.println(pets);
PageInfo page=new PageInfo(pets,2);
return Message.success().add("pageInfo",page);
}
@RequestMapping("petState.action")
@ResponseBody
public Message findByState(@RequestParam(value = "pn",defaultValue = "1")Integer pn){
PageHelper.startPage(pn,3);
int state=0;
List<Pet> pets = petService.findByState(0);
System.out.println(pets);
PageInfo page=new PageInfo(pets,2);
return Message.success().add("pageInfo",page);
}
@RequestMapping(value = "create.action")
@ResponseBody
public Message createPet(Pet pet,@RequestParam(value = "file") MultipartFile file, HttpServletRequest request){
String load = FileLoad.load(file,request);
pet.setPic(load);
if(petService.addPet(pet)>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("delete.action")
@ResponseBody
public Message deletePet(Integer id){
if(petService.deletePet(id)>0){
return Message.success();
}else {
return Message.fail();
}
}
@RequestMapping("update.action")
@ResponseBody
public Message updatePet(Pet pet){
if(petService.updatePet(pet)>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("findById.action")
@ResponseBody
public Message findById(Integer id){
Pet pet = petService.findById(id);
if(pet!=null){
return Message.success().add("pet",pet);
}else{
return Message.fail();
}
}
@RequestMapping("findByPet.action")
@ResponseBody
public Message findByPet(Integer id, HttpServletRequest request){
Pet pet = petService.findById(id);
System.out.println(pet);
String pic = pet.getPic();
String[] split = pic.split(",");
List<String> pics=new ArrayList<>();
for(int i=0;i<split.length;i++){
pics.add(split[i]);
}
request.getSession().setAttribute("pics",pic);
request.getSession().setAttribute("pet",pet);
if(pet!=null){
return Message.success().add("pet",pet);
} else{
return Message.fail();
}
}
@RequestMapping("findByPetType.action")
@ResponseBody
public Message findByName(@RequestParam(value = "pn",defaultValue = "1")Integer pn,String petType){
PageHelper.startPage(pn,4);
List<Pet> pets = petService.findByPetType(petType);
if(pets!=null){
PageInfo page=new PageInfo(pets,3);
return Message.success().add("pageInfo",page);
}else{
return Message.fail();
}
}
}
@Controller
@RequestMapping("apply")
public class ApplyController {
@Autowired
private ApplyService applyService;
@RequestMapping("applys.action")
@ResponseBody
public Message getBlog(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
// 引入PageHelper分页插件
// 在查询之前只需要调用,传入页码,以及每页的大小
PageHelper.startPage(pn,3);
List<Apply> applys = applyService.getApply();
System.out.println(applys);
// startPage后面紧跟的这个查询就是一个分页查询
// 使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了。
// 封装了详细的分页信息,包括有我们查询出来的数据,传入连续显示的页数
PageInfo page=new PageInfo(applys,2);
return Message.success().add("pageInfo",page);
}
@RequestMapping("create.action")
@ResponseBody
public Message addApply(Apply apply){
apply.setApplyTime(new Date());
apply.setState(2);
int i = applyService.addApply(apply);
if(i>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("delete.action")
@ResponseBody
public Message deleteApply(Integer id){
int i = applyService.deleteApply(id);
if(i>0){
return Message.success();
}else {
return Message.fail();
}
}
@RequestMapping("update.action")
@ResponseBody
public Message updateApply(Apply apply){
if(applyService.updateApply(apply)>0){
return Message.success();
}else{
return Message.fail();
}
}
@RequestMapping("findById.action")
@ResponseBody
public Message findById(Integer id){
Apply apply=applyService.findById(id);
if(apply!=null){
return Message.success().add("apply",apply);
}else{
return Message.fail();
}
}
@RequestMapping("findByState.action")
@ResponseBody
public Message findByTime(@RequestParam(defaultValue ="1",value = "pn") Integer pn,Integer state){
PageHelper.startPage(pn,4);
List<Apply> states = applyService.findByState(state);
if(states!=null){
PageInfo page=new PageInfo(states,3);
return Message.success().add("pageInfo",page);
}else{
return Message.fail();
}
}
}
6. Documents de référence
1.2 La source et la signification du sujet
1.3 Développement au pays et à l'étranger
Chapitre 2 Outils et techniques de développement de système
2.1 Outils de développement de système
2.2 Technologie de développement de système
Chapitre 3 Analyse des exigences
3.1 Analyse globale du système
Chapitre 4 Conception détaillée du système
4.1 Module de connexion utilisateur
4.2 Module d'enregistrement des utilisateurs
4.3 Module de requête d'animal de compagnie
4.5 Voiture pour animaux de compagnie
4.6 Gestion des commandes des membres
4.7 Module de connexion administrateur
4.8 Ajouter un module d'informations sur les animaux de compagnie
4.9 Module de modification des informations sur l'animal
4.10 Module de gestion des commandes administrateur
4.11 Fonction de rapport administrateur
Chapitre 5 Conception détaillée et implémentation des fonctions système
5.1 Mise en œuvre détaillée par l'utilisateur
5.2 Mise en œuvre détaillée de l'administrateur
6.1 Test de fonctionnement client
6.2 Test de la fonction de gestion d'arrière-plan
6.3 Analyse des résultats d'essai
Chapitre 7 Résumé et perspectives
7. Résumé
Ce système réalise la fonction du système de sauvetage des chats et des chiens errants basé sur JSP. Pendant le développement de ce système, j'ai beaucoup profité. Tout d'abord, je me rends compte de l'importance de la spécification du code, en particulier dans certains projets à grande échelle, il peut y avoir des centaines de fonctions utilisées, si le code écrit n'est pas standardisé, cela causera de gros problèmes lors de l'inspection ultérieure. Et le test complet du code est également très important, certaines erreurs peuvent ne pas être découvertes avant longtemps. Deuxièmement, je suis conscient de l'importance de la conception logicielle. Les projets que j'avais l'habitude de contacter sont souvent de type développement rapide. Je n'ai guère besoin de consacrer trop de temps à la conception de la logique logicielle, et je peux souvent passer à l'étape suivante de la conception tout en développant . Mais cette fois je me suis rendu compte qu'il est très important de faire du design logiciel, je n'ai pas fait attention à un design au départ, ce qui peut engendrer une grande zone de retravail dans le codage ultérieur. Le dernier est l'importance de la méthode de débogage.Le processus de débogage du système est beaucoup plus lourd que le processus de développement. Chaque opération et chaque demande soumise au serveur comprend en fait l'exécution de nombreux petits morceaux de code. Si la méthode de débogage correcte ne peut pas être adoptée, il sera difficile de trouver les erreurs dans le programme.
Le système a également de nombreuses fonctions extensibles, telles que l'ajout du rôle de stations de sauvetage pour animaux. Pour gérer les animaux de compagnie, il existe de nombreuses lacunes dans la gestion des horaires, et il existe certains défauts dans la gestion des commandes. En raison du temps limité, je ne peux pas encore rendre la fonction parfaite, mais je pense que je peux certainement créer un système plus parfait dans les efforts futurs.
Aime, aime, collections et attention aux lettres privées Communication de l'auteur