import pymysql

#테이블값 저장
class MemVo:
    def __init__(self, id=None, pwd=None, name=None, email=None):
        self.id = id
        self.pwd = pwd
        self.name = name
        self.email = email

    def __str__(self):
        return 'id:'+self.id+' / pwd:'+self.pwd+' / name:'+self.name+' / email:'+self.email

class MemDao:#member 테이블과 관련된 db 작업만 구현
    def __init__(self):
        self.conn = None    #커넥션 객체 담을 멤버 변수

    #db연결함수. db 사용전 로그인하는 작업을 수행
    def connect(self):
        self.conn = pymysql.connect(host='localhost', user='root', password='1234', db='encore', charset='utf8')

    #db 닫는 함수
    def disconnect(self):
        self.conn.close()

    def insert(self, vo):#member 테이블에 한 줄 추가. 회원가입 정보를 저장
        self.connect() #db 연결
        cur = self.conn.cursor()  #사용할 커서 객체 생성
        #insert into member values(vo.id, vo.pwd, vo.name, vo.email)
        sql = "insert into member values(%s, %s, %s, %s)"   #변수가 들어갈 위치에 %s와 같은 포맷문자 지정
        vals = (vo.id, vo.pwd, vo.name, vo.email)
        cur.execute(sql, vals)
        self.conn.commit()
        self.disconnect()

    def select(self, id):
        self.connect()  # db 연결
        cur = self.conn.cursor()  # 사용할 커서 객체 생성
        sql = "select * from member where id=%s"  # 변수가 들어갈 위치에 %s와 같은 포맷문자 지정
        vals = (id,)
        cur.execute(sql, vals) #쿼리 실행. 검색 결과가 cur에 저장
        row = cur.fetchone()    #cur 객체에서 검색된 한 줄 fetch. 검색 결과 없으면 None반환
        self.disconnect()   #db 닫음
        if row!=None:   #검색된 결과가 있으면
            vo = MemVo(row[0], row[1], row[2], row[3])#id, pwd, name, email
            return vo

    def update(self, id, new_pwd):
        self.connect()  # db 연결
        cur = self.conn.cursor()  # 사용할 커서 객체 생성
        sql = "update member set pwd=%s where id=%s"  # 변수가 들어갈 위치에 %s와 같은 포맷문자 지정
        vals = (new_pwd, id)
        cur.execute(sql, vals)
        self.conn.commit()
        self.disconnect()

    def delete(self, id):
        self.connect()  # db 연결
        cur = self.conn.cursor()  # 사용할 커서 객체 생성
        sql = "delete from member where id=%s"  # 변수가 들어갈 위치에 %s와 같은 포맷문자 지정
        vals = (id,)
        cur.execute(sql, vals)
        self.conn.commit()
        self.disconnect()

class MemService:#제공할 기능 구현

    '''
    로그인 상태 유지 => 로그인함수에서 처리한 아이디를 어딘가 보관 =>
    로그인함수(): id, pwd를 입력받아서 db에 일치하는가 확인. 로그인 성공.
    기억상실처리 => MemService.login_id에 로그인 성공한 id를 저장. 로그아웃할때까지 유지
    MemService.login_id:None => 로그아웃 상태
    MemService.login_id:'aaa' => 'aaa'로 로그인 상태
    내정보확인 메뉴선택:
    '''

    login_id = None #로그인한 사람의 id보관. None이면 로그인 안된 상태

    def __init__(self):
        self.dao = MemDao() #대부분 기능이 db작업 필요. db작업 전담하는 dao객체를 멤버변수로 생성

    def join(self): #회원가입 기능
        print('회원가입')
        id = input('id:')
        pwd = input('pwd:')
        name = input('name:')
        email = input('email:')
        try:
            vo = MemVo(id, pwd, name, email)
            self.dao.insert(vo)#db에 id, pwd, name, email 저장
        except Exception as e:
            print(e)
        else:
            print('회원가입완료')

    def login(self):#로그인 기능
        print('로그인')
        if MemService.login_id != None: #로그인 상태
            print('이미 로그인 중')
            return
        id = input('id:')
        pwd = input('pwd:')
        vo = self.dao.select(id) #입력한 id로 검색
        if vo == None: #검색 결과 없음
            print('없는 아이디')
        else:
            if pwd == vo.pwd: #입력한 pwd와 vo에 담긴 pwd가 일치. 로그인 성공
                print('로그인 성공')
                MemService.login_id = id #로그인상태 유지
            else:
                print('패스워드 불일치')

    def logout(self):
        print('로그아웃')
        if MemService.login_id == None:#로그인 상태 확인
            print('로그인 먼저 해라')
            return
        MemService.login_id = None #로그아웃 상태

    def printMyInfo(self):#내정보확인기능
        print('내정보확인')
        if MemService.login_id == None:#로그인 상태 확인
            print('로그인 먼저 해라')
            return
        vo = self.dao.select(MemService.login_id)#로그인한 사람의 id를 select(id)에 담아 호출하면 로그인한 id정보 검색
        print(vo)

    def editMyInfo(self):#MemService.login_id로 새 pwd입력받아서 수정
        print('내정보수정')
        if MemService.login_id == None:#로그인 상태 확인
            print('로그인 먼저 해라')
            return
        new_pwd = input('새 pwd:')
        self.dao.update(MemService.login_id, new_pwd)

    def delMyInfo(self):#MemService.login_id로 삭제
        print('탈퇴')
        if MemService.login_id == None:
            print('로그인 먼저 해라')
            return

        self.dao.delete(MemService.login_id)#db에서 id가 동일한 행 삭제
        MemService.login_id = None  #로그아웃 처리

+ Recent posts