python--面向对象的学生信息管理脚本

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

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'
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 面向ArcGIS的Python脚本编程是指使用Python语言编写脚本,以实现ArcGIS软件中的地理数据处理、分析、可视化等功能。这种编程方式可以通过ArcPy模块来实现,ArcPy提供了一系列的工具和函数,可以方便地访问和操作ArcGIS中的地理数据。通过面向ArcGIS的Python脚本编程,用户可以快速地完成复杂的地理数据处理任务,提高工作效率。 ### 回答2: 面向ArcGIS的Python脚本编程是一种使用Python编程语言来操作ArcGIS geoprocessing工具和对象模型的方法。ArcGIS是一个强大的地理信息系统(GIS)软件,提供了广泛的功能来管理、分析和展示地理空间数据。 Python是一种流行的脚本编程语言,它具有简单易学、灵活和功能广泛等特点。通过Python脚本编程,可以利用ArcGIS提供的丰富功能来完成地理数据的处理、分析和可视化等任务。 在面向ArcGIS的Python脚本编程中,我们可以使用ArcPy模块来进行编程。ArcPy是ArcGIS的Python库,提供了一系列用于操作地理数据的工具和函数。通过ArcPy,我们可以进行空间数据的导入导出、创建和编辑地理要素、进行空间分析和地图生成等操作。 使用Python脚本编程可以极大地提高工作效率和自动化处理过程。通过编写脚本,可以将一系列繁琐的操作自动化执行,从而节省时间和精力。Python的语法简洁而强大,可以通过简单的几行代码完成复杂的地理数据处理任务。 除了ArcPy,Python还支持其他各种库和模块,如NumPy、Pandas和Matplotlib等,这些库可以进一步拓展ArcGIS的功能,并进行更高级的数据处理和可视化。通过Python脚本编程,我们可以根据自己的需求定制化和扩展化地理分析流程,实现更灵活和精确的地理数据处理和分析。 总之,面向ArcGIS的Python脚本编程是一种强大而灵活的地理数据处理方法,通过编写Python脚本,可以利用ArcGIS提供的功能和库来高效地处理和分析地理空间数据。 ### 回答3: 面向ArcGIS的Python脚本编程指的是使用Python语言编写脚本以实现ArcGIS软件的自动化操作和地理空间数据的处理与分析。通过Python脚本,我们可以利用ArcGIS的功能来完成各种地理信息系统的任务,包括数据处理、地图制作、空间分析等。 在进行面向ArcGIS的Python脚本编程时,我们可以使用ArcPy这个Python库来调用ArcGIS的各种功能。ArcPy提供了一系列的工具和函数,使得我们可以使用Python语言与ArcGIS进行交互。我们可以通过ArcPy来读取和处理地理空间数据,创建和编辑地图要素,进行空间查询和分析,以及生成各种地理信息产品。 通过面向ArcGIS的Python脚本编程,我们可以提高工作效率,实现自动化的地理信息处理工作流程。比如可以编写脚本实现批量处理地理数据,进行数据转换和格式化,同时可以用脚本来生成符号化的地图,并自动进行地理空间分析,生成分析结果报告。 除了使用ArcPy,我们还可以使用Python的其他第三方库来扩展脚本的功能,比如使用Pandas库来进行数据处理和分析,使用NumPy库和Matplotlib库来进行科学计算和绘图。这样可以更加灵活地进行地理空间数据的处理和分析。 总之,面向ArcGIS的Python脚本编程是一种强大的地理信息处理方法,可以帮助我们快速高效地处理数据、分析空间关系和制作地图。通过编写脚本,可以提高工作效率,减少重复劳动,同时提供更强大的数据分析和可视化能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值