본문 바로가기
DataBase

⏺과제 _ 축구선수관리 프로그램 기획

by 사라리24 2024. 4. 1.
SMALL

기획의도

1. 경기 전략적 고려: 경기 도중에는 다양한 상황이 발생할 수 있습니다. 선수 정보를 통해 각 선수의 특성과 능력을 파악하여 특정 상황에 최적의 대응을 할 수 있습니다. 예를 들어, 공격이나 수비를 강화하기 위해 특정 선수를 교체할 수 있습니다.

2. 포지션에 대한 이해: 각 선수의 주 포지션, 다양한 포지션에서의 경험 등을 고려하여 교체를 결정할 수 있습니다. 이를 통해 팀의 전술을 유연하게 조절하고, 상대팀의 전략에 대응할 수 있습니다. 선수 정보는 전략적인 결정에 필수적입니다. 또한, 선수 정보를 기반으로 경기 진행 상황에 맞는 전략을 수립할 수 있습니다. 

3. 선수 정보 관리: 축구팀은 선수들의 개인 정보를 체계적으로 관리해야 합니다. 이에는 선수의 이름, 생년월일, 연락처 등이 포함됩니다. 관리 프로그램을 통해 이러한 정보를 효율적으로 저장하고 업데이트할 수 있습니다.

4. 연습 일정 및 출석 관리: 축구팀은 정기적인 훈련과 연습 경기를 계획하고 이에 선수들을 참석시키는 것이 중요합니다. 관리 프로그램은 연습 일정을 작성하고 선수들의 출석 여부를 추적하여 팀 관리자들이 팀의 활동을 효율적으로 조정할 수 있도록 도와줍니다.

5. 부상 관리 계획 수립: 선수의 나라와 클럽을 알면 해당 지역의 기후, 훈련 시설, 경기 일정 등을 고려하여 부상 관리 계획을 수립할 수 있습니다. 예를 들어, 특정 지역의 기후가 부상 발생에 영향을 줄 수 있으므로, 이를 고려하여 훈련 및 경기 일정을 조정할 수 있습니다.

6. 팀의 리소스 활용: 선수가 소속된 클럽이나 나라를 알면 해당 지역의 의료진 및 의료 시설을 활용할 수 있습니다. 부상 시에는 즉각적이고 전문적인 의료 지원이 매우 중요합니다. 따라서 선수가 소속된 클럽이나 나라의 의료진과 시설을 알아두면 부상 시에 신속하고 효과적인 치료를 받을 수 있습니다.

 

 

 

 

1. 테이블 기획

 

 

 

 


 

  • Player 테이블 (MAIN)
    : 경기 도중에는 다양한 상황이 발생할 수 있습니다.
    각 선수의 주 포지션, 다양한 포지션에서의 경험 등을 고려하고
    선수 정보를 통해 각 선수의 특성과 능력을 파악하여 교체를 결정할 수 있습니다. 
    : 이
    를 통해 팀의 전술을 유연하게 조절하고, 상대팀의 전략에 대응할 수 있습니다.
    예를 들어, 공격이나 수비를 강화하기 위해 특정 선수를 교체할 수 있습니다.

 

 

 

 


 

  • Pofile 테이블
    : 선수들의 개인 정보를 체계적으로 관리해야 합니다.
      이에는 선수의 이름, 생년월일, 연락처 등이 포함됩니다.

    : 축구팀은 정기적인 훈련과 연습 경기를 계획하고 이에 선수들을 참석시키는 것이 중요합니다.
    : 선수들과 소통을 통해 연습 일정을 공지하고 출석 여부를 확인하여 팀의 활동을 효율적으로 진행할 수 있도록 도와줍니다.

 

 

 


  • Management 테이블
    : 선수의 소속팀을 확인하여 각 팀과 경기일정 조율 및 확정합니다.
    : 부상 시에는 즉각적이고 전문적인 의료 지원이 매우 중요합니다. 선수가 소속된 클럽이나 나라를 알면 해당 지역의 의료진 및 의료 시설을 활용할 수 있습니다.
    부상 시에 신속하고 효과적인 치료를 받을 수 있습니다. 
    : 선수에게 특이사항이 생겼을 경우, 신속하게  특이사항을 팀에 전달함으로써 팀은 향후 계획을 조정할 수 있습니다. 예를 들어, 선수의 부상으로 인해 경기 참여가 불가능해지면 팀은 대체 선수를 찾아야 할 수 있습니다.

 

 

 


  • Family 테이블
    : 부상은 긴급 상황을 초래할 수 있습니다. 선수가 혼자서 상황을 대처하기 어려울 때, 가족이나 친구에게 연락하여 도움을 요청할 수 있습니다. 가족에게 상황을 알리면 긴급 상황에 대비할 수 있으며, 필요한 조치를 취할 수 있습니다.

    : 선수가 의사와 상담하고 의료 결정을 내릴 때, 가족은 그들의 의견을 제공하고 지원할 수 있습니다. 가족의 지원은 선수가 적절한 치료를 받고 빠르게 회복할 수 있도록 도와줍니다.

 

 


 

  • Club 테이블
    : 선수가 속한 클럽 (ex. 토트넘, 파리 생제르맹, 맨체스터 시티, 바르셀로나, 바이에르 뮌헨...)

 

 

 

  • Country 테이블
    : 선수가 속한 나라 (ex. 한국, 브라질, 영국, 프랑스, 아르헨티나...)

 

 

  • Sponser 테이블
    : 선수를 지원하는 스폰서 (ex. 삼성, SK, GS, 아디다스, 나이키...)

 

  • Staff
    : 선수를 케어해주는 담당 스텝 (ex. 김종태, 브리스, 톰, 오성윤, 데이비드....)

 

2. 데이터 삽입, 수정, 삭제, 확인 ( 파이썬 활용)

 

 

import MySQLdb

# 선수 정보 확인, 출력 클래스


class Player:

    def __init__(self, name, position, rating=5, career=1):
        self.name = name
        self.position = position
        self.rating = rating
        self.career = career

    def setName(self, name):
        self.name = name

    def getName(self):
        return self.name

    def setPosition(self, position):
        self.position = position

    def getPosition(self):
        return self.position

    def setRating(self, rating):
        self.rating = rating

    def getRating(self):
        return self.rating

    def setCareer(self, career):
        self.career = career

    def getCareer(self):
        return self.career
   

 

# db 연결/해제시켜주는 클래스


class PayerDao:
    def __init__(self):
        self.db = None
       
    def connect(self):
        self.db = MySQLdb.connect('localhost','root','1234','soccer')
       
    def disconnect(self):
        self.db.close()

    def insert(self, player):
        self.connect() 
        cur = self.db.cursor() 
        sql = 'insert into player (name, position, rating, career) values (%s, %s, %s, %s)'
        data = (player.getName(), player.getPosition(), player.getRating(), player.getCareer()) 
        cur.execute(sql,data)
        self.db.commit()
        cur.close()
        self.disconnect()

    def selectAll(self):
        self.connect()
        cur = self.db.cursor(MySQLdb.cursors.DictCursor)
        sql = 'select name, position, rating, career from player order by name asc'
        cur.execute(sql)
        row = cur.fetchall()
        cur.close()
        self.disconnect()
        return row

    def search(self, name):
        self.connect()
        cur = self.db.cursor(MySQLdb.cursors.DictCursor)
        sql = "select name, position, rating, career from player where name like concat('%%', %s, '%%')"
        data = (name,)
        cur.execute(sql, data)
        row = cur.fetchall()
        cur.close()
        self.disconnect()
        return row

           
    def update(self, player):
        self.connect()
        cur = self.db.cursor()
        sql = 'update player set position=%s, rating=%s, career=%s where name=%s'
        data = (player.getPosition(), player.getRating(), player.getCareer(), player.getName())
        result = cur.execute(sql,data)
        self.db.commit()

        if result > 0:
            print('수정되었습니다.')
        else:
            print('에러!')

        cur.close()
        self.disconnect()

    def delete(self, name):
        self.connect()
        cur = self.db.cursor()
        sql = 'delete from player where name=%s'
        data = (name,)
        result = cur.execute(sql, data)
        self.db.commit()

        if result > 0 :
            print('삭제되었습니다.')
        else:
            print('오류!')

        cur.close()
        self.disconnect()

 



# 서비스 클래스


class PlayerService:
    def __init__(self):
        self.dao = PayerDao()
       
    def insertPlayer(self):
        name = input('선수의 이름을 입력하세요 >>> ')
        position = input('선수의 포지션을 입력하세요 >>> ')
        rating = input('선수의 등급을 입력하세요 >>> ')
        career =input('선수의 경력을 입력하세요 >>> ')
        player = Player(name, position, rating, career)
        self.dao.insert(player)
       
    def printAll(self):
        datas = self.dao.selectAll()

        for data in datas:
            print(f"\n{data['name']} : {data['position']} ({data['rating']}군, 경력 {data['career']}년)\n")
           
    def searchPlayer(self):
        eng = input('검색할 선수를 입력하세요.'
        datas = self.dao.search(eng)

        if datas:
            for data in datas:
                print(f"\n{data['name']} : {data['position']} ({data['rating']}군, 경력 {data['career']}년 )\n")
        else :
            print('찾는 단어가 없습니다.')

    def editPlayer(self):
        name = input('수정할 선수를 입력하세요.')
        player = self.dao.search(name)

        if not player:
            print('수정할 선수가 없습니다.')
        else:
            position = input('포지션을 입력하세요.')
            rating = input('등급을 입력하세요.')
            career = input('경력을 입력하세요.')
            player = Player(name, position, rating, career)
            self.dao.update(player)
   
    def delPlayer(self):
        name = input('삭제할 선수를 입력하세요.')
        player = self.dao.search(name)

        if not player:
            print('삭제할 선수가 없습니다.')
        else:
            self.dao.delete(name)


 



# 메뉴 선택 클래스



class
 Menu:
    def __init__(self):
        self.service = PlayerService()
       
    def run(self):
        while True:
            try:
                menu = int(input('1.선수 등록하기 2.선수 정보 불러오기 3.선수 검색하기 4.선수 수정하기 5.선수 삭제하기 6.종료하기'))
                if menu == 1:
                    self.service.insertPlayer()

                elif menu == 2:
                    self.service.printAll()

                elif menu == 3:
                    self.service.searchPlayer()

                elif menu == 4:
                    self.service.editPlayer()

                elif menu == 5:
                    self.service.delPlayer()      

                elif menu == 6:
                    print('프로그램을 종료합니다')
                    break

            except Exception as e:
                print(e)
                print('다시 입력하세요')



 

 

 

1. 선수 등록하기





 

2. 선수 정보 불러오기

 

3. 선수 검색하기

 

4. 선수 수정하기

 

5. 선수 삭제하기