使用面向对象的方法对不同的操作行为进行定义不同的类,从而实现对学生信息的查询,新增,修改和删除。
每次操作之后会返回进行下次操作的选择。

main.py #程序执行入口

from week2.Class.student.front.frontstu import frontstu 
#引入自定义模块
from week2.Class.student.db.dboption import dboption
from week2.Class.student.back.backstu import backstu
if __name__ == '__main__':
    backObj=backstu()  #建立backstu类的对象
    frontObj=frontstu()  #建立frontstu类的对象
    while True:
        option = input('请输入您要进行的选择1.search 2.add 3.update 4.delete:')
        if option.isdigit() and len(option) == 1:
            if option == '1':  # 查询
                frontObj.getStuSearchInfo() 
                #通过frontObj对象访问frontstu类的对象方法getStuSearchInfo() 
            elif option == '2':  # 新增
                frontObj.getStuAddInfo()
                #通过frontObj对象访问frontstu类的对象方法getStuAddInfo()
            elif option == '3':  # 修改
                frontObj.getStuUpdateInfo()
            elif option == '4':  # 删除
                frontObj.getStuDeleteInfo()
        else:
            print('非法输入!请重新输入')
            dboption.closeDB(backObj.dbObj,backObj.curObj)
            #关闭数据库连接

frontstu.py #接收信息并将数据返回给backstu,并将从backstu中得到的数据打印出来

from week2.Class.student.back.backstu import backstu
class frontstu:
    def __init__(self): #初始化方法
        self.backObj = backstu()  #建立对象

    def getStuSearchInfo(self):
        try:  #捕捉异常
            name, cid, sex, race = input('请输入您要查询的信息(每个信息请以逗号分隔)\n姓名、班级、性别、民族:').split(',')
            #接收信息
            stutuple = self.backObj.searchStu(name, cid, sex, race) 
            #访问backstu中的searchStu()方法,通过searchStu()方法查询数据库中符合条件的信息,并将得到的信息存储在stutupe元组中
            if len(stutuple) > 0:  
            #如果元组长度大于0说明查询得到符合条件的信息,否则说明数据库中没有符合该条件的信息
                for i in range(0, len(stutuple)):  #将得到的信息进行遍历,并打印出来
                    print(
                        f"学号:{stutuple[i][0]:<7} 姓名:{stutuple[i][1]:<12} 出生日期:{stutuple[i][2]}  入学日期:{stutuple[i][3]}   \n性别:{stutuple[i][5]:<7}   班级:{stutuple[i][7]:<14}")
                    print('民族:', stutuple[i][4], '\t', '身高:', stutuple[i][6], '\t', '爱好:', stutuple[i][8], '备注:',
                          stutuple[i][9], '\n')
            else:
                print('您输入的信息不存在,未找到符合条件的记录!')
        except:
            print('您输入的信息有误!\n请检查输入的信息是否为四个数据、数据之间是否用中文逗号隔开')

    def getStuAddInfo(self):
        try:  #捕捉异常
            name, birth, firstday, sex, cid = input('请输入必填信息(每个信息使用中文逗号分割开)\n姓名、出生日期、入学日期、性别、班级:').split(',')

            race, height, hobbies, remarks = input('请输入选填信息(每个信息使用中文逗号分隔开)\n民族、身高、爱好、备注:').split(',')
            if name != '' and birth != '' and firstday != '' and sex != '' and cid != '':  
            #必填信息不为空则进行下一步操作,否则提示必填信息不能为空

                if height == '':
                    height = 0
                if sex == '男' or sex == '女':
                    result = self.backObj.addStu(name, birth, firstday,sex,  cid,race,  height, hobbies, remarks)
                    #访问backstu中的addStu()方法
                    if result == 0:
                        print('新增信息成功!')
                    elif result == -1:
                        print('新增信息失败!')
                else:
                    print('性别输入错误,请选填“男”或“女”')
            else:
                print('必填信息不可为空!')
        except:
            print('信息输入不符合规范!请输入符合规范的四个数据并使用中文逗号分隔数据!')

    def getStuUpdateInfo(self):
        name = input('请输入您的姓名:')
        if name != '':
            searchResult = self.backObj.searchStu(name)
            #访问backstu中的searchStu()方法,先查询输入的姓名是否存在于数据库中
            if len(searchResult) > 0:   #大于0说明存在于数据库中
                try:  #捕捉异常
                    birth, firstday, sex, cid = input('请输入您要修改必填的信息\n出生日期,入学日期,性别,班级,:').split(',')
                    if searchResult[0][4] == '':
                        race = ''
                        print('民族信息不可更改')
                    else:
                        race = input('请输入选填信息民族:')
                    if searchResult[0][6] == 0:
                        height = 0
                        print('身高信息不可更改')
                    else:
                        height = input('请输入选填信息身高:')
                    if searchResult[0][8] == '':
                        hobbies = ''
                        print('爱好信息不可更改')
                    else:
                        hobbies = input('请输入选填信息爱好:')
                    if searchResult[0][9] == '':
                        remarks = ''
                        print('备注信息不可更改')
                    else:
                        remarks = input('请输入选填信息备注:')

                    if name != '' and birth != '' and firstday != '' and sex != '' and cid != '':
                        cid = int(cid)
                        result = self.backObj.updateStu(name=name, birth=birth, firstday=firstday, sex=sex, CID=cid, race=race,height=height, hobbies=hobbies, remarks=remarks)
                        #访问backstu中的updateStu()方法
                        if result == 0:
                            print('信息修改成功!')
                        elif result == -1:
                            print('信息修改失败')
                except:
                    print('您输入的信息不符合规范!\n请检查输入的信息是否为四个数据、数据之间是否用中文逗号隔开')
            else:
                print('您输入的姓名不存在,未找到符合条件的记录!')
        else:
            print('姓名不可为空,请重新输入')
            # if len(result) > 0:
        pass

    def getStuDeleteInfo(self):
        name = input('请输入您要删除的学生姓名:')
        if name != '':
            searchResult = self.backObj.searchStu(name)
            if len(searchResult) > 0:
                result = self.backObj.deletStu(name)
                if result == 0:
                    print('删除信息成功!')
                elif result == -1:
                    print('删除信息失败')
            else:
                print('您输入的姓名不存在,未找到符合条件的记录!')
        else:
            print('姓名不能为空,请重新输入!')

backstu.py #对数据库中的信息进行调用,包括读取,新增,修改,删除

from week2.Class.student.db.dboption import dboption
from week2.Class.student.config.dbdata import dbdata
class backstu:
    def __init__(self): #初始化方法
        self.dbObj,self.curObj=dboption.openDB(host=dbdata.host, user=dbdata.user, passwd=dbdata.passwd, port=dbdata.Port, db=dbdata.db)
        #连接数据库
    def searchStu(self, name='', cid='', sex='', race=''):
        sql = 'select * from student where '
        if name == '':
            sql = sql + 'sname=sname'
        else:
            sql = sql + f"sname='{name}'"
        if cid == '':
            sql = sql + ' and cid=cid'
        else:
            sql = sql + f" and cid={cid} "
        if sex == '':
            sql = sql + ' and sex=sex'
        else:
            sql = sql + f" and sex='{sex} '"
        if race == '':
            sql = sql + ' and race=race'
        else:
            sql = sql + f" and race='{race}'"
          #根据条件拼写查询的sql语句
        #print(sql)
        return dboption.readDB(self.curObj, sql)
        #将sql语句返回给数据库读操作

    def addStu(self,Sname, birth, firstday, sex, CID, race='', height=0, hobbies='', remarks=''):
        sql = f"insert into student(Sname,birth,firstday,sex,CID,race,height,hobbies,remarks) values('{Sname}','{birth}','{firstday}','{sex}',{CID},'{race}','{height}','{hobbies}','{remarks}')"
        #根据条件拼写新增数据的sql语句
        #print(sql)
        return dboption.writeDB(self.dbObj, self.curObj, sql)
        #将sql语句返回给数据库写操作

    def updateStu(self,name, birth, firstday, sex, CID, race='', height=0, hobbies='', remarks=''):
        sql = f"update student set birth='{birth}',firstDay='{firstday}',sex='{sex}',CID={CID} "
        if race != '':
            sql = sql + f", race='{race}' "
        else:
            sql = sql
        if height != 0 or height != '':
            sql = sql + f", height={height} "
        else:
            sql = sql
        if hobbies != '':
            sql = sql + f", hobbies='{hobbies}' "
        else:
            sql = sql
        if remarks != '':
            sql = sql + f", remarks='{remarks}' "
        else:
            sql = sql
        sql = sql + f" where Sname='{name}'"
        #根据条件拼写修改的sql语句
        #print(sql)
        return dboption.writeDB(self.dbObj, self.curObj, sql)
        #将sql语句返回给数据库写操作
    def deletStu(self,name):
        sql = f"delete from student where Sname='{name}'"
        #根据条件拼写删除的sql语句
        #print(sql)
        return dboption.writeDB(self.dbObj, self.curObj, sql)
        #将sql语句返回非数据库写操作

dboption.py #数据库的打开操作、读写操作、关闭操作方法

class dboption:
    @staticmethod  #静态方法
    def openDB(host, user, passwd, db, port):  
        import pymysql
        dbObj = pymysql.connect(host=host, user=user, password=passwd, db=db, port=port, charset='utf8')
        cueObj = dbObj.cursor() #连接数据库
        return dbObj, cueObj
    @staticmethod
    def readDB(curObj, sql):
        curObj.execute(sql)
        result = curObj.fetchall()
        return result  #对数据库进行读操作
    @staticmethod
    def writeDB(dbObj, curObj, sql):
        try:
            curObj.execute(sql)
            dbObj.commit() #对数据库进行写操作
            return 0
        except:
            dbObj.rollback() #回滚
            return -1
    @staticmethod
    def closeDB(dbObj, curObj):
        dbObj.close()
        curObj.close()  #关闭数据库

dbdata.py #存放数据库连接信息(可以不进行类的封装)

class dbdata:
    host='localhost'
    user='root'
    passwd='123456'
    Port=3306
    db='school'