SSM 호텔 자산관리 시스템 설계
요약
호텔 자산관리 시스템의 주요 기능 모듈로는 창고정보, 자산종류, 구매신청, 구매입고, 대출신청, 반품정보, 수리정보, 유지보수 완료, 스크랩 신청, 스크랩 확인 등이 있습니다. 소프트웨어 개발 및 하드웨어 설치에 객체 지향 개발 모델을 채택하여 실제 사용 요구를 잘 충족시킬 수 있으며 해당 소프트웨어 설치 및 프로그램 코딩 작업을 개선합니다.Mysql은 배경 데이터의 주요 저장 단위로 사용됩니다.SSM 프레임워크, 비즈니스 시스템의 코딩 및 개발에는 JSP 기술과 Ajax 기술이 사용되어 이 시스템의 모든 기능을 구현합니다. 본 보고서는 먼저 연구의 배경과 역할, 의의를 분석하여 연구 작업의 합리성을 위한 기반을 마련합니다. 호텔 자산관리 시스템의 다양한 요구사항과 기술적인 문제를 분석하고, 시스템의 필요성과 기술적 타당성을 입증한 후, 디자인 시스템에 활용되어야 할 기술 소프트웨어와 디자인 아이디어에 대한 기본적인 소개를 하고 최종적으로 구현한다. 호텔 자산 관리 시스템 및 배포 작업에 사용됩니다.
키워드: 호텔 자산 관리, SSM 프레임워크, Mysql 데이터베이스
추상적인
호텔 자산 관리 시스템의 주요 기능 모듈로는 창고 정보, 자산 유형, 조달 신청, 조달 창고, 대출 신청, 반품 정보, 수리 정보, 유지 보수 완료, 스크랩 신청, 스크랩 확인 등이 있습니다. 소프트웨어 개발 및 하드웨어 설치에 객체 지향 개발 모델을 채택하면 실제 사용 요구 사항을 효과적으로 충족하고 해당 소프트웨어 설치 및 프로그램 코딩 작업을 개선할 수 있으며 MySQL을 백엔드 데이터의 주요 저장 장치로 채택하고 SSM 프레임워크, JSP 기술 및 비즈니스 시스템 코딩 및 개발을 위한 Ajax 기술로 이 시스템의 모든 기능을 구현합니다. 본 보고서는 먼저 연구의 배경과 역할, 의의를 분석하여 연구 작업의 합리성을 위한 기반을 마련합니다. 호텔 자산관리 시스템의 다양한 요구사항과 기술적인 문제를 분석하고, 시스템의 필요성과 기술적 타당성을 입증한 후, 시스템 설계에 필요한 기술 소프트웨어와 디자인 아이디어에 대한 기본적인 소개를 제공합니다. 마지막으로 호텔 자산관리 시스템을 구현하고 구축, 운영한다.
주제어 :호텔자산관리; SSM 프레임워크; MySQL 데이터베이스
목차
1 장 소개
1.1 연구 배경 및 의의
최근 사회가 발전함에 따라 각지에서 관광객이 지속적으로 증가하고 호텔의 수도 증가함에 따라 호텔자산관리에 관한 정보의 양도 기하급수적으로 증가하고 있다. 따라서 전통적인 호텔 자산 관리 방식은 점점 더 많은 문제를 노출시키고 있으며, 문제가 점점 더 많이 발생하고 인력이 소모되며 효율성이 낮습니다. 이때, 호텔에서는 호텔 직원이 막대한 양의 정보를 보다 빠르고, 편리하고, 정확하게 관리할 수 있는 다양한 시스템이 절실히 필요합니다.
인터넷 기술이 널리 보급된 오늘날, 사람들의 삶은 컴퓨터와 분리될 수 없으며 업무, 학습, 심지어 쇼핑에도 컴퓨터를 사용합니다. 예를 들어, 사람들이 출장을 가거나 해외 여행을 갈 때, 자신의 필요에 따라 미리 온라인으로 방을 예약하는 경우가 많아 방을 찾는 시간이 크게 절약됩니다. 대규모 호텔의 경우 호텔 시스템을 사용하여 자산 정보를 관리하는 것이 특히 중요합니다.
1.2 개발 현황
1. 국내 연구현황 :
우리나라 호텔 산업은 경영을 강화하고 서비스 수준을 향상시키기 위해 오랫동안 컴퓨터 관리 시스템을 사용해 왔습니다. 우리나라 호텔 IT의 발전단계는 주로 컴퓨터 시스템의 활용으로 이루어지고 있는데, 전화통신 시스템은 실제로 프로그램 제어 스위칭 기술의 등장으로 질적 도약을 이루었습니다. 컴퓨터의 대중화 및 응용과 함께 컴퓨터 기술의 지속적인 발전으로 인해 호텔 자산 관리 시스템도 새로운 시대로 나아가고 있으며 더욱 완벽해지는 경향이 있습니다. 호텔 자산 관리 시스템은 호텔의 인건비를 절약해줍니다.
2. 해외 연구 현황
외국의 호텔 산업은 중국보다 훨씬 일찍 발전했으며 다년간의 개발 탐색을 통해 호텔의 기능 개발이 더욱 포괄적이고 다양해졌습니다. 초기 Jian'an 숙박 시설부터 현재의 레저, 엔터테인먼트 및 비즈니스 여행에 이르기까지 호텔은 더욱 복잡한 기능과 완벽한 기능을 지향하는 방향으로 발전하고 있습니다. 이들 호텔이 종합적으로 발전함에 따라 호텔에 대한 관리 요구사항도 증가하고 있으며, 컴퓨터의 급속한 발전을 배경으로 호텔을 보다 편리하게 관리하기 위해 호텔 자산 관리 시스템 소프트웨어가 개발되어 인력을 1/4로 줄였습니다. 물질적, 재정적 자원은 호텔 운영을 더욱 표준화하고 서비스 표준을 향상시킵니다.
제2장 관련 기술 소개
2.1 개발 기술 설명
본 시스템의 프론트엔드 부분은 B/S 모드를 사용하여 MVVM 모델을 기반으로 개발되었으며, 백엔드 부분은 Java의 ssm 프레임워크를 기반으로 개발되었습니다.
프런트엔드 부분: 프런트엔드 프레임워크는 인기 있는 프로그레시브 JavaScript 프레임워크 Vue.js를 사용합니다. Vue-Router 및 Vuex를 사용하여 동적 라우팅 및 전역 상태 관리를 구현하고, Ajax를 사용하여 프런트엔드 및 백엔드 통신을 구현하고, Element UI 구성 요소 라이브러리를 사용하여 페이지를 빠르게 프로토타입하고, 프로젝트 프런트엔드를 사용하여 그리드 레이아웃을 통해 응답성을 달성합니다. PC, 태블릿, 휴대폰 등에 적용할 수 있습니다. 다양한 화면 크기에 맞는 완벽한 레이아웃 디스플레이.
백엔드 부분: ssm을 개발 프레임워크로 사용하고 MyBatis, Redis 및 기타 관련 기술을 통합합니다.
2.2 MVVM 패턴 소개
MVVM은 Model-View-ViewModel의 약어입니다. 본질적으로 MVC의 향상된 버전입니다. MVVM은 뷰의 상태와 동작을 추상화하여 뷰 UI와 비즈니스 로직을 분리할 수 있습니다. 물론 ViewModel은 이미 이러한 작업을 수행했으며, 콘텐츠를 표시해야 하기 때문에 모델의 데이터를 가져오고 뷰와 관련된 비즈니스 로직을 처리하는 데 도움을 줄 수 있습니다. Microsoft의 WPF는 Silverlight, 오디오 , 비디오 , 3D , 애니메이션 등의 새로운 기술 경험을 제공하므로 소프트웨어 UI 계층이 더욱 상세해지고 사용자 정의가 가능해집니다. 동시에 기술 수준에서 WPF는 바인딩, 종속성 속성, 라우팅된 이벤트, 명령, DataTemplate, ControlTemplate 등과 같은 새로운 기능도 제공합니다. MVVM(Model-View-ViewModel) 프레임워크의 기원은 MVP(Model-View-Presenter) 패턴 과 WPF 를 결합한 적용 방식에서 진화한 새로운 아키텍처 프레임워크 입니다 . 이는 원래의 MVP 프레임워크를 기반으로 하며 점점 더 복잡해지는 고객 요구 사항의 변화에 대처하기 위해 WPF의 새로운 기능을 통합합니다.
2.3 SSM 프레임워크
SSM(Spring+SpringMVC+MyBatis) 프레임워크 세트는 두 오픈 소스 프레임워크인 Spring과 MyBatis(SpringMVC는 Spring의 일부임)에 의해 통합됩니다. 비교적 간단한 데이터 소스를 사용하는 웹 프로젝트의 프레임워크로 자주 사용됩니다.
2.4.1봄
Spring은 전체 프로젝트에서 Bean을 조립하는 큰 공장과 같으며 구성 파일에서 특정 매개변수의 사용을 지정하여 개체 클래스의 생성자 메서드를 호출하여 개체를 인스턴스화할 수 있습니다. 프로젝트의 접착제라고도 할 수 있습니다.
Spring의 핵심 아이디어는 IoC(Inversion of Control)입니다. 즉, 프로그래머는 더 이상 객체를 명시적으로 '새로 만들' 필요가 없으며 Spring 프레임워크가 모든 작업을 수행하도록 합니다.
2.4.2 스프링MVC
SpringMVC는 프로젝트 내에서 사용자의 요청을 가로채는데, 핵심 서블릿인 DispatcherServlet이 중개자나 프론트 데스크의 역할을 담당하고, HandlerMapping을 통해 사용자의 요청을 Controller에 매칭시키며, Controller는 요청에 응답하여 수행되는 특정 작업이다. SpringMVC는 SSH 프레임워크의 struts와 동일합니다.
2.4.3 마이봇
Mybatis는 데이터베이스의 기본 작업을 투명하게 만드는 jdbc의 캡슐화입니다. mybatis의 작업은 sqlSessionFactory 인스턴스를 중심으로 이루어집니다. Mybatis는 구성 파일을 통해 각 엔터티 클래스의 Mapper 파일과 연결되며, Mapper 파일은 각 클래스에 필요한 SQL 문을 데이터베이스에 매핑하여 구성됩니다. 데이터베이스와 상호 작용할 때마다 sqlSessionFactory를 통해 sqlSession을 가져온 다음 sql 명령을 실행합니다.
페이지는 컨트롤러에 요청을 보내고, 컨트롤러는 비즈니스 계층 처리 논리를 호출하고, 논리 계층은 지속성 계층에 요청을 보내고, 지속성 계층은 데이터베이스와 상호 작용한 다음 결과를 비즈니스 계층인 비즈니스 계층에 반환합니다. 처리 논리를 컨트롤러에 보내고 컨트롤러는 뷰를 호출하여 데이터를 표시합니다.
2.4 MySQL 데이터베이스
많은 업데이트를 거쳐 Mysql은 기능면에서 매우 풍부하고 완성도가 높아졌으며, 버전 4에서 버전 5까지 비교적 대규모의 업데이트를 거쳐 실제 상용화에 있어 좋은 실용화 성과를 거두었습니다. 최신 버전의 Mysql은 정보 압축 및 암호화를 지원하므로 정보 보안 요구 사항을 더 잘 충족할 수 있습니다. 동시에 시스템을 여러 번 업데이트한 후 데이터베이스 자체의 미러링 기능도 크게 향상되었으며 작동의 원활함과 사용 편의성이 크게 향상되었으며 드라이버 사용 및 생성이 더욱 효율적이고 효율적이 되었습니다. 더 빠르게. 가장 큰 변화는 공간정보 표시 최적화로, 애플리케이션 맵에서 좌표를 쉽게 라벨링하고 계산할 수 있게 됐다. 강력한 백업 기능은 사용자가 사용 중에 더욱 편안함을 느낄 수 있도록 하며 동시에 지원되는 Office 기능은 사용자의 자체 설치 및 사용도 지원합니다. 정보 표시 형식도 크게 업데이트되어 자주 사용되는 두 가지 표시 영역이 추가되었습니다. 하나는 표와 텍스트가 분류된 정보 영역이며, 인터페이스 표시는 더욱 신선하고 구체적입니다. 두 번째는 기기 정보 제어로서 기기 정보 영역에 정보를 표시하고 동시에 여러 정보를 비교할 수 있어 사용자의 실제 사용에 큰 편의를 제공합니다[7][8].
본 글에서 설계한 호텔 자산 관리 시스템의 실제 구현 과정에서 최종적으로 Mysql 데이터베이스를 선택한 가장 큰 이유는 기업의 응용 시스템의 응용 및 개발 과정에서 빈번한 데이터베이스 작업이 많을 것이고, 데이터 보안 요구 사항도 매우 높습니다. 이러한 요인을 바탕으로 호텔 자산 관리 시스템의 백엔드 데이터를 저장하기 위해 상대적으로 보안 요소가 높은 Mysql이 최종 선택되었습니다[9][10].
3장 시스템 분석
3.1 타당성 분석
기술적인 측면에서 현재 주류인 SSM 프레임워크는 시스템의 주요 프레임워크를 구축하는 데 사용됩니다. 프런트 데스크는 jquery와 ajax를 사용하여 프런트 데스크 페이지의 디자인과 미적 조정을 구현합니다. 위의 기술은 모두 제가 체계적으로 연구한 것입니다. 보다 편리하고 체계적인 개발을 할 수 있는 코스설계를 실천해왔습니다. 기술적 관점에서 볼 때 이 시스템은 완전히 달성 가능합니다.
실용성 측면에서는 창고정보, 자산종류, 구매신청, 구매입고, 대출신청, 반품정보, 수리정보, 수리 완료, 스크랩 신청, 스크랩 확인 기능 모듈을 호텔 내 구현하는 것이 본 디자인의 주요 과제입니다. 현재의 발전 추세에 맞춰 자산 관리 시스템 등. 사용자 관점에서도 시스템 운영 비용과 인적 자원을 고려하고 인터넷상의 편리한 방법을 사용하여 온라인 비즈니스를 구현함으로써 비즈니스 프로세스를 보다 체계적이고 사용자 친화적이며 실용적으로 만듭니다.
경제성 측면에서 본 프로젝트에서 설계한 호텔 자산 관리 시스템의 주요 목적은 호텔 자산 정보를 보다 포괄적으로 관리하고 검색하는 것, 즉 직접 사용할 수 있는 정보 소프트웨어입니다. 시스템의 주요 비용은 주로 사용 데이터의 후속 유지 관리 및 업데이트 관리에 집중됩니다. 따라서 이 소프트웨어를 개발하는 것이 경제적으로 타당합니다.
3.2 기능적 요구사항 분석
호텔 자산 관리 시스템 의 기능은 크게 직원 사용자, 창고 관리자, 유지 관리 담당자, 구매자, 재무 담당자, 관리자 등 6가지 역할로 구분됩니다.
임직원은 시스템 로그인 후 창고정보 조회, 대출신청, 대출확인, 자산반납, 수리신청 등을 할 수 있다.
창고관리자는 시스템 로그인 후 창고정보 관리, 구매신청 및 구매정보 조회, 직원 대출신청 및 반품정보 조회, 창고자산 폐기 신청 등을 할 수 있습니다.
유지보수 담당자는 시스템에 로그인하여 창고 정보를 확인하고, 창고 내 자산을 빌리고 반납하며, 직원이 제출한 유지보수 정보를 볼 수 있습니다.
구매자는 시스템에 로그인하면 먼저 창고 정보 조회, 구매 신청서 제출, 구매 창고 업무를 수행할 수 있습니다.
재무 담당자는 시스템에 로그인하여 창고 정보를 확인하고 구매자가 제출한 구매 신청서를 검토할 수 있습니다.
관리자는 로그인 후 시스템 모듈 및 시스템 정보를 유지 관리합니다.
직원 사용 사례 다이어그램은 다음과 같습니다.
그림 3-1 직원 활용 사례 다이어그램
창고 관리자 사용 사례 다이어그램은 아래와 같습니다.
그림 3-2 창고 관리자 활용 사례 다이어그램
유지보수 작업자 사용 사례 다이어그램은 아래와 같습니다.
그림 3-3 유지보수 작업자 활용 사례 다이어그램
구매자 사용 사례 다이어그램은 아래와 같습니다.
그림 3-4 구매자 활용 사례 다이어그램
재무 사용 사례 다이어그램은 다음과 같습니다.
그림 3-5 재무 사용 사례 다이어그램
3.2.1 사용자 기능
회원가입 : 개인정보를 입력하고 휴대폰번호를 인증합니다.
로그인: 귀하의 계정과 비밀번호를 기반으로 로그인하십시오.
개인정보의 유지관리 : 이용자는 개인정보의 변경으로 인해 언제든지 등록정보를 수정할 수 있습니다.
창고정보 : 사용자는 자신의 필요에 따라 창고자산정보를 조회할 수 있으며, 창고정보는 창고관리자가 추가, 삭제, 수정, 확인합니다.
구매 요청: 자산에 대한 구매 요청은 구매자가 제출하며 재무 담당자가 확인하고 검토할 수 있습니다.
조달 및 창고 보관: 창고 관리인은 구입한 자산을 창고에 등록합니다.
차입 신청 : 본 모듈은 직원에 의한 자산 차입 신청과 유지보수 인력에 의한 자산 차입 신청으로 구분되며, 신청서는 창고관리자가 검토합니다.
차용 확인: 창고 직원은 직원 및 유지보수 담당자가 볼 수 있도록 차용 확인 정보를 게시합니다.
반납정보 : 본 모듈 역시 직원에 의한 차입자산 반납과 유지보수 인력에 의한 차입자산 반납으로 나누어지며, 이는 창고관리자가 검토하게 됩니다.
폐기 신청: 직원은 버려진 자산의 폐기를 신청해야 합니다.
스크랩 확인: 스크랩 확인은 창고관리인이 검토합니다.
수리정보 : 직원이 수리정보를 제출하며, 유지보수담당자는 구체적인 정보를 확인하고 유지보수를 주선할 수 있습니다.
유지보수 완료: 유지보수가 완료된 후 유지보수 기술자가 유지보수 완료 정보를 공개합니다.
3.2.2 관리자 기능
비밀번호 변경: 관리자는 시스템 보안을 보장하기 위해 언제든지 로그인 비밀번호를 변경하여 시스템에 들어갈 수 있습니다.
창고정보 등을 유지, 관리합니다.
사용자 관리 : 직원, 유지보수 담당자, 구매자, 창고 관리자, 재무 담당자를 관리합니다.
조달요청 관리 : 자산 조달 정보를 유지, 관리합니다.
자산 유형 관리: 자산 정보를 분류하고 관리합니다.
조달입고관리 : 조달을 거친 자산의 입고정보를 관리합니다.
차입 및 반납정보 관리 : 임직원 및 유지보수 인력의 자산 차입 및 반납정보를 관리합니다.
수리정보 관리 : 수리정보를 조회하고 관리할 수 있습니다.
3.3 비기능적 요구사항 분석
우선, 주요 고려 사항은 시스템 기능 소프트웨어가 특정 설계 프로세스에서 다양한 사용자의 기본 기능적 요구를 더 잘 충족시킬 수 있는지 여부이며, 사용자 요구를 더 잘 충족할 수 없다면 이 시스템의 존재 가치는 없습니다. 소프트웨어 시스템의 비기능 분석은 시스템을 목표로 하는 성능 분석, 시스템을 목표로 하는 보안 분석, 시스템을 목표로 하는 무결성 분석의 7가지 측면에서 수행됩니다. 하나는 시스템을 대상으로 하는 유지보수성 분석이고, 하나는 시스템을 대상으로 하는 확장성 분석이고, 다른 하나는 비즈니스에 적응하기 위한 성능 분석입니다. 호텔 자산 관리 시스템의 7가지 성능 측면(성능, 보안, 확장, 무결성)을 종합적으로 비교 분석한 결과 해당하는 비기능적 요구 사항 분석이 필요하다는 사실이 밝혀졌습니다.
3.4 보안 요구사항 분석
3.4.1 시스템 보안
보안은 모든 시스템에 매우 중요합니다. 보안이 좋은 시스템은 기업정보와 사용자 정보가 유출되는 것을 방지할 수 있습니다. 시스템 보안을 개선하는 것은 사용자뿐만 아니라 기업의 책임이기도 합니다. 특히 호텔 자산 관리 시스템의 경우 전체 시스템을 보호하려면 보안이 뛰어나야 합니다.
시스템에는 사용자에 대한 권한 제어 기능이 있으며 시스템 보안을 보장하기 위해 다양한 역할에 따라 사용자의 권한을 제한합니다.
3.4.2 데이터 보안
데이터베이스의 데이터는 외부 세계에서 입력되며, 데이터가 입력되면 여러 가지 이유로 인해 입력된 데이터가 유효하지 않거나 더러운 데이터가 됩니다. 따라서 입력 데이터가 규정을 준수하는지 확인하는 방법이 데이터베이스 시스템, 특히 다중 사용자 관계형 데이터베이스 시스템의 주요 관심사가 되었습니다.
따라서 데이터베이스에 쓸 때 데이터 무결성, 정확성 및 일관성이 보장되어야 합니다.
3.5 데이터 처리 분석
시스템의 데이터 흐름을 분석한 후 시스템 사용자는 시스템 사용자(직원, 유지보수 담당자, 구매자, 창고 관리자, 재무 담당자)와 관리자의 두 가지 범주로 구분됩니다. 시스템은 주로 인터페이스 정보 전송, 로그인 정보 확인, 등록 정보 수신 및 다양한 사용자 작업에 대한 응답을 처리합니다.
시스템의 최상위 데이터 흐름 다이어그램은 아래 그림에 나와 있습니다.
그림 3-2 최상위 데이터 흐름 다이어그램
사용자의 신원을 확인하기 위해 로그인 데이터를 기반으로 판단한 후 해당 기능 인터페이스로 점프합니다. 시스템 내의 사용자는 데이터를 조작할 수 있으며, 데이터베이스 센터는 시스템이 전송한 효과적인 데이터 스트림을 수신하여 데이터 SQL 문에 해당 작업을 수행할 수 있습니다.
시스템의 기본 데이터 흐름 다이어그램은 아래 그림에 나와 있습니다.
그림 3-3 기본 데이터 흐름 다이어그램
시스템은 프런트엔드와 백엔드의 두 부분으로 나눌 수 있으며, 각 작업이 끝나면 시스템은 작업 결과를 반환합니다. 프런트엔드와 백엔드 간의 데이터 연결은 주로 데이터베이스를 통해 이루어지며, 이는 각각 데이터베이스에서 서로 다른 작업이 수행됨을 의미합니다.
4장 시스템 설계
4.1 시스템 아키텍처 설계
호텔 자산 관리 시스템의 아키텍처 설계는 주로 웹 계층, 비즈니스 계층, 모델 계층의 세 가지 계층으로 나뉩니다. 웹 계층에는 뷰 계층과 컨트롤러 계층도 포함되며, 모델 계층에는 메타데이터 확장 계층과 데이터 액세스 계층이 포함됩니다.
시스템 아키텍처는 아래 그림에 나와 있습니다.
그림 4-1 시스템 아키텍처
4.2 전체 시스템 설계
호텔 자산 관리 시스템은 일반적으로 사용자 모듈과 관리자 모듈로 구분됩니다. 두 모듈은 독립적으로 존재하는 것처럼 보이지만 이들이 액세스하는 데이터베이스는 동일합니다. 관리자는 가장 높은 권한을 가진 사람으로, 구체적인 기능으로는 창고정보, 자산종류, 구매신청, 구매창고, 대출신청, 반품정보, 수리정보, 수리완료, 폐기신청, 폐기확인 등이 있습니다.
요약하자면, 시스템 기능 다이어그램은 아래 그림과 같습니다 .
![](https://img-blog.csdnimg.cn/direct/d5a8a3303bad4242880976db7b972627.png)
그림 4-2 시스템 기능 다이어그램
4.3 시스템 기능 설계
로그인 모듈: 로그인 모듈은 시스템에 들어가는 입구로, 모든 사용자는 로그인을 해야 시스템에 접근할 수 있습니다. 로그인하려면 사용자 이름과 비밀번호를 입력해야 합니다. 여러 번 로그인을 시도하는 경우 인증 코드를 입력해야 합니다. 로그인 시 일반 사용자인지, 관리자 로그인인지 등 사용자의 역할을 선택해야 합니다. 로그인에 성공하면 데이터베이스를 통해 사용자 권한을 획득하고 사용자 홈 페이지로 이동합니다.
창고 정보 데이터 모듈: 창고 정보 데이터 검색, 창고 정보 데이터 검색, 창고 정보 데이터 유지 관리의 세 가지 모듈로 나눌 수 있습니다.창고 관리자는 창고 정보 데이터를 유지 관리하고 새로운 창고 정보 데이터를 게시하며 기존 창고를 업데이트할 권한을 갖습니다. .정보자료 등
구매신청모듈 : 구매신청은 구매신청 추가, 수정으로 구분됩니다. 구매요청은 구매자가 수정, 추가, 삭제하고, 구매요청 검토는 재무담당자가 수행합니다.
대출신청모듈 : 대출신청은 대출추가, 수정, 심사로 구분됩니다. 차용정보는 직원 및 유지보수 인력에 의해 수정, 추가, 삭제되며, 차용정보에 대한 검토는 창고관리자가 검토 및 확인합니다.
스크랩 신청 모듈: 스크랩 신청은 스크랩 추가, 수정, 검토로 구분됩니다. 스크랩 정보는 직원이 수정, 추가, 삭제하고, 창고관리자, 재무담당자, 유지보수 담당자가 스크랩 정보를 검토하고 확인합니다.
유지보수 정보 모듈: 유지보수 정보는 추가, 수정, 검토로 구분됩니다. 수리 정보는 직원이 제출하고, 수리는 유지보수 담당자가 확인합니다.
4.4 데이터베이스 설계
4.4.1 데이터 요구사항 분석
앞선 분석을 통해 데이터베이스에서 가장 중요한 것은 창고정보, 구매신청정보, 대출신청정보, 동시구매 입고정보 및 반품정보, 스크랩 신청 및 스크랩 확인임을 알 수 있다. 분석을 통해 다음과 같은 데이터 설명을 얻을 수 있습니다.
플랫폼 사용자: 사용자 이름, 비밀번호, 이름, 성별, 주소, 이메일, 연락처 정보 및 기타 데이터 항목을 포함한 다양한 사용자 정보를 기록하는 데 사용됩니다.
관리자: 관리자의 로그인 정보를 기록합니다. 사용자 이름, 비밀번호, 권한 및 기타 데이터 항목이 포함됩니다.
창고: 자산 번호, 자산 이름, 사양 모델, 자산 유형, 재고 수량, 단위 가치, 제조업체 및 기타 데이터 항목을 포함하여 창고에 저장된 콘텐츠입니다.
구매요청 : 다양한 구매요청 정보를 저장합니다. 구매 주문 번호, 자산 번호, 자산 이름, 사양 모델, 자산 유형, 제조업체, 구매 날짜, 구매 단가, 구매 수량, 구매 금액 및 기타 데이터 항목을 포함합니다.
대출신청 : 대출신청 정보를 저장합니다. 차입주문번호, 자산번호, 자산명, 자산유형, 사양모델, 단가, 제조사, 차입일자, 차입수량, 품목가치, 차입사유 등의 데이터 항목을 포함합니다.
수리정보 : 수리정보를 저장합니다. 수리 번호, 자산 번호, 자산 이름, 자산 유형, 사양 모델, 단가, 수리 이유, 유지 관리 담당자, 유지 관리 날짜, 유지 관리 정보, 유지 관리 비용 및 기타 데이터 항목과 같은 데이터 항목을 포함합니다.
스크랩 신청 : 스크랩 신청 정보를 저장합니다. 폐기 주문 번호, 자산 번호, 자산 이름, 자산 유형, 사양 모델, 단위 가치, 폐기 날짜 및 기타 데이터 항목이 포함됩니다.
4.4.2 데이터베이스 개념 설계
이전 데이터 흐름도에 따라 시스템의 기능 모듈 설계와 결합하여 시스템에 맞는 각 정보 개체를 설계합니다.
시스템 ER 다이어그램은 아래와 같습니다.
그림 4-3 시스템 ER 다이어그램
4.4.3 데이터베이스 테이블 디자인
호텔 자산 관리 시스템에는 창고 정보 테이블, 구매 신청서, 구매 창고 테이블, 대출 신청서, 반품 정보 테이블, 수리 정보 테이블, 스크랩 신청 입찰, 유지 관리 정보 테이블 등의 데이터 테이블이 있습니다.
데이터 테이블이 많기 때문에 아래 표와 같이 시스템의 주요 데이터 테이블만 표시됩니다.
테이블 access_token(로그인 액세스 기간)
일련번호 |
이름 |
데이터 유형 |
길이 |
소수점 자리 |
Null 값 허용 |
기본 키 |
기본값 |
설명하다 |
1 |
토큰_ID |
정수 |
10 |
0 |
N |
와이 |
임시 액세스 배지 ID |
|
2 |
토큰 |
varchar |
64 |
0 |
와이 |
N |
임시 액세스 배지 |
|
삼 |
정보 |
텍스트 |
65535 |
0 |
와이 |
N |
||
4 |
최대 |
정수 |
10 |
0 |
N |
N |
2 |
최대 수명: 기본 2시간 |
5 |
생성_시간 |
타임스탬프 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
생성 시간: |
6 |
업데이트_시간 |
타임스탬프 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
업데이트 시간: |
7 |
user_id |
정수 |
10 |
0 |
N |
N |
0 |
사용자 ID: |
테이블 Boring_application_employee (대출신청(직원))
일련번호 |
이름 |
데이터 유형 |
길이 |
소수점 자리 |
Null 값 허용 |
기본 키 |
기본값 |
설명하다 |
1 |
차입_신청_직원_ID |
정수 |
10 |
0 |
N |
와이 |
대출신청(사원)ID |
|
2 |
대출_주문_번호 |
varchar |
64 |
0 |
와이 |
N |
추적 번호 대여 |
|
삼 |
자산_번호 |
varchar |
64 |
0 |
와이 |
N |
자산 번호 |
|
4 |
자산_이름 |
varchar |
64 |
0 |
와이 |
N |
자산 이름 |
|
5 |
사양 및 모델 |
varchar |
64 |
0 |
와이 |
N |
사양 및 모델 |
|
6 |
자산 유형 |
varchar |
64 |
0 |
와이 |
N |
자산 유형 |
|
7 |
단일_조각_가치 |
정수 |
10 |
0 |
와이 |
N |
0 |
단위 가치 |
8 |
제조업체 |
varchar |
64 |
0 |
와이 |
N |
제조업체 |
|
9 |
창고지기 |
정수 |
10 |
0 |
와이 |
N |
0 |
창고지기 |
10 |
직원_사용자 |
정수 |
10 |
0 |
와이 |
N |
0 |
직원 사용자 |
11 |
재무 담당자 |
정수 |
10 |
0 |
와이 |
N |
0 |
자금 관리자 |
12 |
대출_날짜 |
날짜 |
10 |
0 |
와이 |
N |
빌린 날짜 |
|
13 |
빌린_수량 |
정수 |
10 |
0 |
와이 |
N |
0 |
대출 수량 |
14 |
품목_값 |
varchar |
64 |
0 |
와이 |
N |
품목 가치 |
|
15 |
이유_대출_대여 |
텍스트 |
65535 |
0 |
와이 |
N |
대출 이유 |
|
16 |
검사 상태 |
varchar |
16 |
0 |
N |
N |
검토되지 않음 |
승인 상태 |
17 |
검사_답변 |
varchar |
16 |
0 |
와이 |
N |
검토 답변 |
|
18 |
추천하다 |
정수 |
10 |
0 |
N |
N |
0 |
지능형 추천 |
19 |
생성_시간 |
날짜 시간 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
생성 시간 |
20 |
업데이트_시간 |
타임스탬프 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
업데이트 시간 |
테이블 Boring_confirmation_employee (대출확인(직원))
일련번호 |
이름 |
데이터 유형 |
길이 |
소수점 자리 |
Null 값 허용 |
기본 키 |
기본값 |
설명하다 |
1 |
차입_확인_직원_ID |
정수 |
10 |
0 |
N |
와이 |
대출확인(사원)ID |
|
2 |
대출_주문_번호 |
varchar |
64 |
0 |
N |
N |
추적 번호 대여 |
|
삼 |
자산_번호 |
varchar |
64 |
0 |
와이 |
N |
자산 번호 |
|
4 |
자산_이름 |
varchar |
64 |
0 |
와이 |
N |
자산 이름 |
|
5 |
사양 및 모델 |
varchar |
64 |
0 |
와이 |
N |
사양 및 모델 |
|
6 |
자산 유형 |
varchar |
64 |
0 |
와이 |
N |
자산 유형 |
|
7 |
단일_조각_가치 |
정수 |
10 |
0 |
와이 |
N |
0 |
단위 가치 |
8 |
제조업체 |
varchar |
64 |
0 |
와이 |
N |
제조업체 |
|
9 |
창고지기 |
정수 |
10 |
0 |
와이 |
N |
0 |
창고지기 |
10 |
직원_사용자 |
정수 |
10 |
0 |
와이 |
N |
0 |
직원 사용자 |
11 |
재무 담당자 |
정수 |
10 |
0 |
와이 |
N |
0 |
자금 관리자 |
12 |
대출_날짜 |
날짜 |
10 |
0 |
와이 |
N |
빌린 날짜 |
|
13 |
빌린_수량 |
정수 |
10 |
0 |
와이 |
N |
0 |
대출 수량 |
14 |
품목_값 |
varchar |
64 |
0 |
와이 |
N |
품목 가치 |
|
15 |
number_of_registrations |
varchar |
64 |
0 |
와이 |
N |
등록 건수 |
|
16 |
추천하다 |
정수 |
10 |
0 |
N |
N |
0 |
지능형 추천 |
17 |
생성_시간 |
날짜 시간 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
생성 시간 |
18 |
업데이트_시간 |
타임스탬프 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
업데이트 시간 |
테이블구매_영수증(구매입고)
일련번호 |
이름 |
데이터 유형 |
길이 |
소수점 자리 |
Null 값 허용 |
기본 키 |
기본값 |
설명하다 |
1 |
구매_영수증_ID |
정수 |
10 |
0 |
N |
와이 |
구매창고ID |
|
2 |
구매_주문_번호 |
varchar |
64 |
0 |
N |
N |
구매 주문 번호 |
|
삼 |
자산_번호 |
varchar |
64 |
0 |
와이 |
N |
자산 번호 |
|
4 |
자산_이름 |
varchar |
64 |
0 |
와이 |
N |
자산 이름 |
|
5 |
사양 및 모델 |
varchar |
64 |
0 |
와이 |
N |
사양 및 모델 |
|
6 |
자산 유형 |
varchar |
64 |
0 |
와이 |
N |
자산 유형 |
|
7 |
제조업체 |
varchar |
64 |
0 |
와이 |
N |
제조업체 |
|
8 |
창고지기 |
정수 |
10 |
0 |
와이 |
N |
0 |
창고지기 |
9 |
사는 사람 |
정수 |
10 |
0 |
와이 |
N |
0 |
사는 사람 |
10 |
재무 담당자 |
정수 |
10 |
0 |
와이 |
N |
0 |
자금 관리자 |
11 |
구입 날짜 |
날짜 |
10 |
0 |
와이 |
N |
구입 날짜 |
|
12 |
구매_단가_가격 |
정수 |
10 |
0 |
와이 |
N |
0 |
구매 가격 |
13 |
구매 수량 |
정수 |
10 |
0 |
와이 |
N |
0 |
구매 수량 |
14 |
구매 금액 |
varchar |
64 |
0 |
와이 |
N |
구매 금액 |
|
15 |
추천하다 |
정수 |
10 |
0 |
N |
N |
0 |
지능형 추천 |
16 |
생성_시간 |
날짜 시간 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
생성 시간 |
17 |
업데이트_시간 |
타임스탬프 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
업데이트 시간 |
테이블 buy_request (구매요청)
일련번호 |
이름 |
데이터 유형 |
길이 |
소수점 자리 |
Null 값 허용 |
기본 키 |
기본값 |
설명하다 |
1 |
구매_요청_ID |
정수 |
10 |
0 |
N |
와이 |
구매요청ID |
|
2 |
구매_주문_번호 |
varchar |
64 |
0 |
와이 |
N |
구매 주문 번호 |
|
삼 |
자산_번호 |
varchar |
64 |
0 |
와이 |
N |
자산 번호 |
|
4 |
자산_이름 |
varchar |
64 |
0 |
와이 |
N |
자산 이름 |
|
5 |
사양 및 모델 |
varchar |
64 |
0 |
와이 |
N |
사양 및 모델 |
|
6 |
자산 유형 |
varchar |
64 |
0 |
와이 |
N |
자산 유형 |
|
7 |
제조업체 |
varchar |
64 |
0 |
와이 |
N |
제조업체 |
|
8 |
창고지기 |
정수 |
10 |
0 |
와이 |
N |
0 |
창고지기 |
9 |
사는 사람 |
정수 |
10 |
0 |
와이 |
N |
0 |
사는 사람 |
10 |
재무 담당자 |
정수 |
10 |
0 |
와이 |
N |
0 |
자금 관리자 |
11 |
구입 날짜 |
날짜 |
10 |
0 |
와이 |
N |
구입 날짜 |
|
12 |
구매_단가_가격 |
정수 |
10 |
0 |
와이 |
N |
0 |
구매 가격 |
13 |
구매 수량 |
정수 |
10 |
0 |
와이 |
N |
0 |
구매 수량 |
14 |
구매 금액 |
varchar |
64 |
0 |
와이 |
N |
구매 금액 |
|
15 |
검사 상태 |
varchar |
16 |
0 |
N |
N |
검토되지 않음 |
승인 상태 |
16 |
검사_답변 |
varchar |
16 |
0 |
와이 |
N |
검토 답변 |
|
17 |
추천하다 |
정수 |
10 |
0 |
N |
N |
0 |
지능형 추천 |
18 |
생성_시간 |
날짜 시간 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
생성 시간 |
19 |
업데이트_시간 |
타임스탬프 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
업데이트 시간 |
테이블 수리_완료(수리 완료)
일련번호 |
이름 |
데이터 유형 |
길이 |
소수점 자리 |
Null 값 허용 |
기본 키 |
기본값 |
설명하다 |
1 |
수리_완료_ID |
정수 |
10 |
0 |
N |
와이 |
전체 수리 ID |
|
2 |
수리_번호 |
varchar |
64 |
0 |
N |
N |
수리번호 |
|
삼 |
자산_번호 |
varchar |
64 |
0 |
와이 |
N |
자산 번호 |
|
4 |
자산_이름 |
varchar |
64 |
0 |
와이 |
N |
자산 이름 |
|
5 |
사양 및 모델 |
varchar |
64 |
0 |
와이 |
N |
사양 및 모델 |
|
6 |
자산 유형 |
varchar |
64 |
0 |
와이 |
N |
자산 유형 |
|
7 |
단일_조각_가치 |
정수 |
10 |
0 |
와이 |
N |
0 |
단위 가치 |
8 |
창고지기 |
정수 |
10 |
0 |
와이 |
N |
0 |
창고지기 |
9 |
제조업체 |
varchar |
64 |
0 |
와이 |
N |
제조업체 |
|
10 |
직원_사용자 |
정수 |
10 |
0 |
와이 |
N |
0 |
직원 사용자 |
11 |
유지보수_인원 |
정수 |
10 |
0 |
와이 |
N |
0 |
유지보수 담당자 |
12 |
이유_수리_수리 |
텍스트 |
65535 |
0 |
와이 |
N |
수리신고 사유 |
|
13 |
재무 담당자 |
정수 |
10 |
0 |
와이 |
N |
0 |
자금 관리자 |
14 |
수리_날짜 |
날짜 |
10 |
0 |
와이 |
N |
수리일 |
|
15 |
유지 관리_비용 |
정수 |
10 |
0 |
와이 |
N |
0 |
수리비 |
16 |
유지보수_정보 |
긴 텍스트 |
2147483647 |
0 |
와이 |
N |
유지보수 정보 |
|
17 |
추천하다 |
정수 |
10 |
0 |
N |
N |
0 |
지능형 추천 |
18 |
생성_시간 |
날짜 시간 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
생성 시간 |
19 |
업데이트_시간 |
타임스탬프 |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
업데이트 시간 |
제5장 시스템 구현
5.1 데이터베이스 접근 계층 구현
시스템은 jdbc와 Mysql을 통해 연결되는데, 데이터베이스 연결에 필요한 드라이버와 파라미터를 입력하기 위해 새로운 jdbc.properties 파일을 생성한다.
jdbc.driverClass=com.Mysql.jdbc.Driver
jdbc.url=jdbc:Mysql://localhost:3306/tsi
jdbc.username=루트
jdbc.password=123
첫 번째 파라미터는 MySQL 데이터베이스 드라이버를 나타내고, 두 번째 파라미터는 연결할 데이터베이스를 나타내며, 세 번째와 네 번째 파라미터는 데이터베이스 연결 이름과 비밀번호를 나타냅니다.
백엔드 및 데이터베이스 액세스는 주로 HQL 문을 통해 쿼리되며, 쿼리문의 테이블 이름은 해당 테이블의 엔터티 클래스 이름입니다. *는 집계 함수와 함께 사용하기에 적합한 경우를 제외하고 이러한 쿼리문에 사용할 수 없습니다.
5.2 로그인 모듈 구현
이는 주로 로그인 전 로그인 인터페이스와 로그인 후 사용자 기능 인터페이스의 두 부분으로 구성됩니다. 로그인 인터페이스에서는 사용자가 사용자 이름과 비밀번호를 입력해야 합니다. 사용자 이름이나 비밀번호가 비어 있으면 "사용자 이름과 비밀번호는 비워둘 수 없습니다."라는 메시지가 표시됩니다. 사용자 이름과 비밀번호를 얻은 후 데이터베이스에서 검색하여 사용자 이름이 존재하고 해당 비밀번호가 정확하면 로그인에 성공하고, 그렇지 않으면 로그인에 실패합니다. 로그인에 실패하면 프롬프트가 표시되고 텍스트 상자에서 초점이 중지됩니다. 로그인에 성공하면 세션의 전역 변수 사용자 이름이 사용자 이름으로 설정됩니다. 로그인에 성공하신 후, 기본 회원 정보 수정, 공개된 방 정보 관리, 정보 공개, 퇴실 기능을 주로 포함하는 회원 기능 모듈에 진입하세요. 종료 기능은 전역 변수 사용자 이름의 값을 지우고 홈 페이지로 돌아가는 것입니다.
로그인 흐름도는 아래와 같습니다.
그림 5-1 로그인 흐름도
사용자 로그인 인터페이스는 아래 그림에 나와 있습니다.
![](https://img-blog.csdnimg.cn/direct/9d00d8cbe6e14fb48345c2aa068ff04f.png)
그림 5-2 사용자 로그인 인터페이스
사용자 로그인을 위한 키코드는 다음과 같습니다.
/**
* 로그인
* @param 데이터
* @param httpServletRequest
* @반품
*/
@PostMapping("로그인")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
QueryWrapper wrapper = new QueryWrapper<User>();
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
public String select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return sql.toString();
}
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
5.3 用户资料修改模块的实现
用户登录/注册成功之后可以修改自己的基本信息。修改页面的表单中每一个input的name值都要与实体类中的参数相匹配,在用户点击修改页面的时候,如果改后用户名与数据库里面重复了,页面会提示该用户名已经存在了,否则通过Id来查询用户,并将用户的信息修改为表单提交的数据。
5.4 仓库信息管理模块的实现
如果仓库信息需要修改,管理员可以通过查询资产的基本信息来查询,查询资产信息是通过ajax技术来进行查询的,需要资产编号、资产名称等参数然后在返回到该页面中,可以选中要修改或删除的那条信息,如果选中了超过一条数据,页面会挑一个窗口提醒只能选择一条数,如果没有选中数据会挑一个窗口题型必须选择一条数据。当选择确认修改的时候,后台会根据传过来的id到数据库查询,并将结果返回到修改页面中,可以在修改页面中修改刚刚选中的信息当点击确认的时候from表单会将修改的数据提交到后台并保存到数据库中,就是说如果提交的数据数据库中存在就修改,否则就保存。
仓库信息添加界面如下图所示。
![](https://img-blog.csdnimg.cn/direct/a6d85d306bc345d0b2e9270b0203bac5.png)
图5-3仓库信息添加界面
仓库信息管理界面如下图所示。
![](https://img-blog.csdnimg.cn/direct/c97b192193214326bcdee0f47df61582.png)
图5-4仓库信息管理界面
仓库信息发布的关键代码如下。
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
5.5 借用申请模块的实现
借用申请功能需要考虑高并发,防止出现资产重复借用、资产状态显示出错等情况,特对资产这一共享数据增加锁机制。在乐观锁、悲观锁以及线程锁中,综合考虑性能效率和错误的可接受性选择了乐观锁机制。乐观锁的实现方式是使用版本标识来确定读到的数据与提交时的数据是否一致,提交后修改版本标识,不一致时可以采取丢弃和再次尝试的策略。在数据库资产表(对应资产实体)设计中增加了version字段,每次数据提交时(更改资产状态)会判断version是否匹配,若不匹配停止本次提交,若匹配则提交成功并增加version的值。
借用申请功能整体流程:用户浏览资产信息时,同时会显示资产的状态,系统会在其显示详细信息的页面时便会判断资产的状态,若资产状态为可借用,则会显示借用的链接按钮。在用户点击借用按钮时,会先通过拦截器判断用户是否登录,若未登录,会跳转至登录页面,提示用户先登录,若为登录用户就会跳转至填写借用信息的页面,填写好借用信息之后,点击提交按钮,借用成功之后返回提示信息,告知用户借用成功。
资产借用流程图如下图所示。
图5-5资产借用流程图
资产借用界面如下图所示。
![](https://img-blog.csdnimg.cn/direct/4e3fb98b628b49c5be76d90edef196ea.png)
图5-6资产借用界面
借用管理界面如下图所示。
![](https://img-blog.csdnimg.cn/direct/fa5f3b2155eb4dd5b8dba95ff8708b82.png)
图5-7借用管理界面
资产借用关键代码如下。
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
5.6归还信息模块的实现
归还信息功能整体流程:用户进行资产归还操作时,点击归还申请后按照提示进行归还申请提交。在用户点击归还申请提交时,会先通过拦截器判断用户是否登录,若未登录,会跳转至登录页面,提示用户先登录,若为登录用户就会跳转至填写归还申请的页面,填写好归还信息之后,点击提交按钮。
归还信息流程图如下图所示。
图5-8归还信息流程图
归还信息界面如下图所示。
![](https://img-blog.csdnimg.cn/direct/5ad71bd6839c429cae82495e85d2b51f.png)
图5-9归还信息界面
归还信息添加关键代码如下。
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
5.7 报修信息管理模块的实现
此页面的关键是编写报修信息,包括报修信息编号,资产名称,资产编号等。单击提交按钮以完成信息的添加。如果未写入完整的报修信息,例如,如果未写入资产编号,系统将给出相应的错误提示,并且无法成功输入。数据以概念的形式以onsubmit =“return checkForm()”的形式写入以进行检查,checkForm()函数是一种用于写入数据的不同类型的校对方法,是不是为空也是经过form表单中的οnsubmit=”return checkForm()来检查。
管理员点击左侧菜单“报修信息管理”,页面跳转到报修信息管理外观,调用后台查询所有报修信息。
报修信息管理流程图如下图所示。
图5-10报修信息管理流程图
报修信息添加界面如下图所示。
![](https://img-blog.csdnimg.cn/direct/9cb2ad875e124fa18a6821e283caf606.png)
图5-11报修信息添加界面
报修信息管理界面如下图所示。
![](https://img-blog.csdnimg.cn/direct/6925432bf5e34befa72dd97402a2ea7f.png)
图5-12报修信息管理界面
报修信息发布的关键代码如下。
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
5.8报废申请管理模块的实现
根据需求,需要对资产进行报废。新增报废申请时,点击报废链接按钮时,请求到达后台,还会先查询资产状态再次做出判定能否进行报废添加。填写好报废申请信息后,数据提交到后台会对数据库中相应的记录做出修改。
报废申请管理流程图如下图所示。
图5-13报废申请管理流程图
报废申请添加页面设计效果如下图所示。
![](https://img-blog.csdnimg.cn/direct/0c8c5ca3871b4f6f8f208b70b13d5223.png)
图5-14报废申请添加界面
报废申请管理页面效果如下图所示。
![](https://img-blog.csdnimg.cn/direct/4cfdcb65b27e4840a15ca6ca44efd9c9.png)
图5-15报废申请管理界面
报废申请发布的关键代码如下。
public Map<String, Object> success(Object o) {
Map<String, Object> map = new HashMap<>();
if (o == null) {
map.put("result", null);
return map;
}
if (o instanceof List) {
if (((List) o).size() == 1) {
o = ((List) o).get(0);
map.put("result", o);
}else {
String jsonString = JSONObject.toJSONString(o);
JSONArray objects = service.covertArray(JSONObject.parseArray(jsonString));
map.put("result", objects);
}
} else if (o instanceof Integer || o instanceof String) {
map.put("result", o);
} else {
String jsonString = JSONObject.toJSONString(o);
JSONObject jsonObject = JSONObject.parseObject(jsonString);
JSONObject j = service.covertObject(jsonObject);
map.put("result", j);
}
return map;
}
第6章 系统测试
6.1 测试目的
对任何系统而言,测试都是必不可少的环节,测试可以发现系统存在的很多问题,所有的软件上线之前,都应该进行充足的测试之后才能保证上线后不会Bug频发,或者是功能不满足需求等问题的发生。下面分别从单元测试,功能测试和用例测试来对系统进行测试以保证系统的稳定性和可靠性。
6.2 功能测试
下表是系统登录功能测试用例,检测了用户名和密码的不同的输入情况,观察系统的响应情况。得出该功能达到了设计目标。
表6-1 系统登录功能测试用例
功能描述 |
用于系统登录 |
|
测试目的 |
检测登录时的合法性检查 |
|
测试数据以及操作 |
预期结果 |
实际结果 |
输入的用户名和密码带有非法字符 |
提示用户名或者密码错误 |
与预期结果一致 |
输入的用户名或者密码为空 |
提示用户名或者密码错误 |
与预期结果一致 |
输入的用户名和密码不存在 |
提示用户名或者密码错误 |
与预期结果一致 |
输入正确的用户名和密码 |
登录成功 |
与预期结果一致 |
下表是注册功能测试用例,检测了各种数据的输入情况,观察系统的响应情况。得出该功能达到了设计目标。
表6-2 注册功能测试用例
功能描述 |
用于用户注册 |
|
测试目的 |
检测用户注册时的合法性检查 |
|
测试数据以及操作 |
预期结果 |
实际结果 |
输入的手机号不合法 |
提示请输入正确的手机号码 |
与预期结果一致 |
输入的字段为空 |
提示必填项不能为空 |
与预期结果一致 |
输入的密码少于6位 |
提示密码必须为6-12位 |
与预期结果一致 |
输入的密码大于12位 |
提示密码必须为6-12位 |
与预期结果一致 |
下表是资产管理功能的测试用例,检测了资产管理中对资产信息的增加,删除,修改,查询操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。
前置条件;用户登录系统。
表6-3 资产管理的测试用例
功能描述 |
用于资产管理 |
|
测试目的 |
检测资产管理时的各种操作的运行情况 |
|
测试数据以及操作 |
预期结果 |
实际结果 |
点击添加资产,必填项合法输入,点击保存 |
提示添加成功 |
与预期结果一致 |
点击添加资产,必填项输入不合法,点击保存 |
提示必填项不能为空 |
与预期结果一致 |
点击修改资产,必填项修改为空,点击保存 |
提示必填项不能为空 |
与预期结果一致 |
点击修改资产,必填项输入不合法,点击保存 |
提示必填项不能为空 |
与预期结果一致 |
点击删除资产,选择资产删除 |
提示删除成功 |
与预期结果一致 |
点击搜索资产,输入存在的资产名 |
查找出资产 |
与预期结果一致 |
点击搜索资产,输入不存在的资产名 |
不显示资产 |
与预期结果一致 |
下表是借用申请管理功能的测试用例,检测了借用申请管理中借用申请单的操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。
前置条件;用户登录系统。
表6-4 借用申请管理的测试用例
功能描述 |
用于借用申请管理 |
|
测试目的 |
检测借用申请管理时各种操作的情况 |
|
测试数据以及操作 |
预期结果 |
实际结果 |
未填写资产信息,点击提交 |
提示请填写资产信息 |
与预期结果一致 |
未输入数量,点击提交 |
提示请输入数量 |
与预期结果一致 |
未输入借用原因,点击提交 |
提示请输入借用原因 |
与预期结果一致 |
6.3 性能测试
使用阿里云PTS(Performance Testing Service)性能测试服务对线上系统进行压力测试。线上服务器环境为:1核心CPU,1G内存,1Mbps公网带宽,Centos7.0操作系统。
压测过程中使用了2台并发机器,每台机器20个用户并发,对系统主页,登录,数据查询和数据维护等模块进行并发访问,测试结果是有40个用户并发时,数据管理相关页面的响应时间甚至达到了7s,通过查看服务器出网流量发现已经达到1381kb/s,可以看出服务器的带宽已经达到峰值,如果系统使用5Mbps的带宽,系统的响应时间和TPS将会大大增加。在整个测试的过程中,CPU的使用率占用仅8%,也提现出带宽瓶颈对系统的影响非常严重。
第7章 总结与展望
随着计算机互联网技术的迅猛发展,各行各业都已经实现采用计算机相关技术对日益放大的数据进行管理。该课题是酒店资产管理为核心展开的。酒店资产管理系统的开发是以Java编程语言作为基础,在Myeclipse平台上完成编码工作,系统整体为B/S架构,数据库系统使用Mysql。文中详细分析了酒店资产管理系统的研究背景、研究目的和意义、开发工具和相关技术以及系统需求、系统详细设计和系统测试等等一系列内容。系统实现了酒店资产管理系统所需的一些基本功能,并通过测试对这些实现的功能进行了完善,进而提高了系统整体的实用性。整个系统的开发过程中大量使用了Java相关的知识以及前端开发使用的html和javascript等,同时涉及到了很多开源框架和组件,例如后台系统中运用的MVC架构、Freemarker模板引擎等,前端运用的UI框架等。
系统投入运行时,各功能均运行正常。系统的每个界面的操作符合常规逻辑,对使用者来说操作简单,界面友好。整个系统的各个功能设计合理,体现了人性化。
但是由于自己在系统开发过程中对一些用到的相关知识和技术掌握不够牢固,再加上自身开发经验欠缺,因此系统在有些方面的功能还不够完善,考虑的不够全面,因此整个系统还有待日后逐步完善。
参考文献
[1]张浩.SSM框架在Web应用开发中的设计与实现研究[J].电脑知识与技术,2023,19(08):52-54.
[2]吴昊.信息化时代下通信企业固定资产管理系统设计探讨[J].经济师,2023(03):50-51.
[3]张晓娜.固定资产管理系统在企业资产管理中的应用研究[J].老字号品牌营销,2023(04):136-138.
[4]郭志英.基于Web的酒店管理系统的设计与实现[J].长江信息通信,2022,35(12):120-123.
[5]宋式斌,袁启龙. 基于物联网技术的信息化资产管理系统建设探索[C]//中国计算机用户协会网络应用分会.中国计算机用户协会网络应用分会2022年第二十六届网络新技术与应用年会论文集.中国计算机用户协会网络应用分会2022年第二十六届网络新技术与应用年会论文集,2022:366-370.
[6]赵静.基于SSM+VUE框架的企业合规管理系统[J].数字通信世界,2022(11):17-19.
[7]于盛洋.智慧酒店管理系统设计与实现——基于RFID模块[J].产业科技创新,2022,4(02):37-40.
[8]岳颖颖.基于Web酒店管理系统设计分析[J].电子技术与软件工程,2021(17):196-197.
[9]朱云杰.翼云居酒店管理系统前置服务设计[J].电子元器件与信息技术,2021,5(06):182-185.
[10]王磊. 基于J2EE平台酒店资产管理系统设计与实现[D].电子科技大学,2019.
[11]梁新月,张伟.基于物联网的酒店固定资产管理系统研究[J].物联网技术,2019,2(12):63-64+68.
致谢
本次设计历时3个月。在这个毕业设计中,它离不开指导教师的指导,使事情基本顺利。指导老师无论是在毕业设计历经中,还是在论文做完中都给了了我特别大的助益。另1个方面,教师认真负责的工作姿态,谨慎的教学精神厚重的理论水准都使我获益匪浅。他勤恳谨慎的教学育人学习姿态也给我留下了特别特别深的感觉。我从老师那里学到了很多东西。在理论和实践中,我的技能得到了特别大的提高。在此,特向教师表示由衷的感激。
经过对该毕业设计的全部研究和开发,我的系统研发经历了从需求分析到实现详细功能,再到最终测试和维护的特殊进展。让我对系统研发有了更深层次的认识。如今我的动手本领单独处理疑惑的本领也获取到了特别大的演练学习增多,这是这次毕业设计最好的收获。
最后,在整个系统开发过程中,我周围的同学和朋友给了我很多意见,所以我很快就确认了系统的商业思想。在次,我由衷的向他们表示感激。