nandeisiga 2022-12-06 14:34 采纳率: 33.3%
浏览 132
已结题

python学生成绩管理系统结合sqlite3,需要有按钮和界面设计(酬金可加)

img

img

img

  • 写回答

2条回答 默认 最新

  • 龙星尘 2022-12-06 15:01
    关注

    代码(望采纳):

    
    import sqlite3
    import sys
    
    
    # conn = sqlite3.connect(database="SQLite3.db")
    # # 创建Account表
    # sql="""create table Account
    #             ( username varchar(20) not null,
    #             password varchar(30) not null)
    #         """
    # conn.execute(sql)
    # conn.commit()
    # conn.close()
    
    # 创建GradeTable表
    # sql="""create table GradeTable
    #             (Number varchar(20) not null,
    #             Name varchar(10),
    #             Chinese varchar(10),
    #             Math varchar(10),
    #             English varchar(10) )
    #         """
    # conn.execute(sql)
    # conn.commit()
    # conn.close()
    
    #账号登录
    class Account:
    
        def __init__(self):
            __conn = sqlite3.connect(database="SQLite3.db")
            self.__conn = __conn
    
        def __Login(self):
            print("\n-------------- 1.账号登录 --------------")
            self.__cur = self.__conn.cursor()
            self.__user = input("请输入账号:").strip()
            self.__pwd = input("请输入密码:").strip()
            self.__sql = """select count(*) from Account where username=?;"""
            self.__result = self.__cur.execute(self.__sql, (self.__user,))
            self.__st = self.__result.fetchone()
            if self.__user == "" or self.__pwd == "":
                print("账号或密码不得为空!\n")
                self.__Login()
            elif self.__st[0] == False:
                while True:
                    self.__num = input("账号不存在!是否选择注册一个新账号?\n1、是;2、否\n")
                    if self.__num == "1":
                        self.__Register()
                    elif self.__num == "2":
                        self.Main()
                    else:
                        self.__num = input("请重新选择:")
            else:
                self.__VerifyLogin(self.__user, self.__pwd)
    
        def __VerifyLogin(self, user, pwd):
            self.__cur = self.__conn.cursor()
            self.__sql = """select password from Account where username=?;"""
            self.__result = self.__cur.execute(self.__sql, (self.__user,))
            self.__st = self.__result.fetchone()
            if self.__st[0] == self.__pwd:
                print("账号登录成功!\n")
                self.__st = GradeTable()
                self.__st.Main2()
            else:
                print("账号密码错误!\n")
                self.__Login()
    
        def __Register(self):
            print("\n-------------- 2.账号注册 --------------")
            self.__cur = self.__conn.cursor()
            self.__user = input("请输入账号:").strip()
            self.__pwd = input("请输入密码:").strip()
            self.__repwd = input("请确认密码:").strip()
            self.__sql = "select count(*) from Account where username=?;"
            self.__result = self.__cur.execute(self.__sql, (self.__user,))
            self.__st = self.__result.fetchone()
            while True:
                if self.__user == "":
                    self.__user = input("账号不得为空!\n请输入账号:").strip()
                elif self.__pwd == "":
                    self.__pwd = input("密码不得为空!\n请输入密码:").strip()
                elif self.__repwd == "" or self.__pwd != self.__repwd:
                    repwd = input("请重新确认密码:").strip()
                elif self.__st[0] == True:
                    print("该账号已存在!请重新注册!")
                    self.__Register()
                else:
                    self.__SaveRegister(self.__user, self.__pwd)
    
        def __SaveRegister(self, user, pwd):
            self.__cur = self.__conn.cursor()
            self.__sql = "insert into Account (username,password) values (?,?);"
            self.__cur.execute(self.__sql, (self.__user, self.__pwd,))
            self.__conn.commit()
            print("账号注册成功!\n")
            self.Main()
    
        def __Change(self):
            print("\n-------------- 3.修改密码 --------------")
            self.__cur = self.__conn.cursor()
            self.__user = input("请输入账号:").strip()
            self.__oldpwd = input("请输入密码:").strip()
            self.__newpwd = input("请输入新密码:").strip()
            sql = """select count(*) from Account where username=?;"""
            self.__result = self.__cur.execute(sql, (self.__user,))
            self.__st = self.__result.fetchone()
            while True:
                if self.__user == "":
                    self.__user = input("账号不得为空!\n请输入账号:").strip()
                elif self.__oldpwd == "":
                    self.__oldpwd = input("密码不得为空!\n请输入密码:").strip()
                elif self.__oldpwd == self.__newpwd or self.__newpwd == "":
                    newpwd = input("请重新输入新密码:").strip()
                elif self.__st[0] == False:
                    print("账号不存在!\n")
                    self.Main()
                else:
                    self.__VerifyChange(self.__user, self.__oldpwd, self.__newpwd)
    
        def __VerifyChange(self, user, oldpwd, newpwd):
            self.__cur = self.__conn.cursor()
            self.__sql = """select password from Account where username=?;"""
            self.__result = self.__cur.execute(self.__sql, (user,))
            self.__st = self.__result.fetchone()
            if self.__st[0] == self.__oldpwd:
                self.__SaveChange(self.__user, self.__newpwd)
            else:
                print("账号密码错误!\n")
                self.__Change()
    
        def __SaveChange(self, user, newpwd):
            try:
                print("账号密码修改成功!\n")
                self.__cur = self.__conn.cursor()
                self.__sql = """update Account set password=? where username=?;"""
                self.__cur.execute(self.__sql, (self.__newpwd, self.__user))
                self.__conn.commit()
                self.Main()
            except:
                print("账号密码修改失败!\n")
                self.Main()
    
        def __Cancel(self):
            print("\n-------------- 4.账号注销 --------------")
            self.__cur = self.__conn.cursor()
            self.__user = input("请输入账号:").strip()
            self.__pwd = input("请输入密码:").strip()
            self.__sql = """select count(*) from Account where username=?;"""
            self.__result = self.__cur.execute(self.__sql, (self.__user,))
            self.__st = self.__result.fetchone()
            if self.__user == "" or self.__pwd == "":
                print("账号或密码不得为空!\n")
                self.__Cancel()
            elif self.__st[0] == False:
                print("账号不存在!\n")
                self.Main()
            else:
                self.__VerifyCancel(self.__user, self.__pwd)
    
        def __VerifyCancel(self, user, pwd):
            self.__cur = self.__conn.cursor()
            self.__sql = """select password from Account where username=?;"""
            self.__result = self.__cur.execute(self.__sql, (self.__user,))
            self.__st = self.__result.fetchone()
            if self.__st[0] == self.__pwd:
                self.__DeleteCancel(user)
            else:
                print("账号密码错误!\n")
                self.Main()
    
        def __DeleteCancel(self, user):
            try:
                cur = self.__conn.cursor()
                sql = """delete from Account where username=?;"""
                cur.execute(sql, (self.__user,))
                self.__conn.commit()
                print("账号注销成功!\n")
                self.Main()
            except:
                print("账号注销失败!\n")
                self.Main()
    
        def Main(self):
            print("1、账号登录;2、账号注册;3、修改密码;4、账号注销;0、退出.")
            self.__num = input("请输入选择:").strip()
            if self.__num == "1":
                self.__Login()
            elif self.__num == "2":
                self.__Register()
            elif self.__num == "3":
                self.__Change()
            elif self.__num == "4":
                self.__Cancel()
            elif self.__num == "0":
                print("程序已退出!")
                self.__conn.close()
                sys.exit(0)
            else:
                self.Main()
    
    #学生成绩管理类
    class GradeTable:
        def __init__(self):
            __conn = sqlite3.connect(database="SQLite3.db")
            self.__conn = __conn
    
        def __GradeInput(self):
            print("\n------------------ 1.学生成绩输入 -----------------")
            self.__cur = self.__conn.cursor()
            self.__number = input("请输入学生学号:").strip()
            self.__name = input("请输入学生姓名:").strip()
            self.__chinese = input("请输入语文成绩:").strip()
            self.__math = input("请输入数学成绩:").strip()
            self.__english = input("请输入英语成绩:").strip()
            self.__sql = """select count(*) from GradeTable where Number=?;"""
            self.__reslut = self.__cur.execute(self.__sql, (self.__number,))
            self.__st = self.__reslut.fetchone()
            while True:
                if self.__name == "":
                    self.__number = input("学生学号不得为空!\n请输入学生学号:").strip()
                elif self.__number == "":
                    self.__name = input("学生姓名不得为空!\n请输入学生姓名:").strip()
                elif self.__chinese == "":
                    chinese = input("语文成绩不得为空!\n请输入语文成绩:").strip()
                elif self.__math == "":
                    self.__math = input("数学成绩不得为空!\n请输入数学成绩:").strip()
                elif self.__english == "":
                    self.__english = input("英语成绩不得为空!\n请输入英语成绩:").strip()
                elif self.__st[0] == True:
                    print("该学生的成绩信息已输入!\n")
                    self.__GradeInput()
                else:
                    self.__Input(self.__number, self.__name, self.__chinese, self.__math, self.__english)
    
        def __Input(self, number, name, chinese, math, english):
            try:
                self.__cur = self.__conn.cursor()
                self.__sql = """insert into GradeTable(Number,Name,Chinese,Math,English) values (?,?,?,?,?)"""
                self.__cur.execute(self.__sql, (self.__name, self.__number, self.__chinese, self.__math, self.__english))
                self.__conn.commit()
                print("学生成绩输入成功!\n")
                self.__GradeOutput()
            except:
                print("学生成绩输入失败!\n")
                self.Main2()
    
        def __GradeOutput(self):
            print("\n************************* 2.学生成绩输出 *****************************")
            print("-----------------------------------------------------------------------------")
            print("    学号    |    姓名    |    语文    |    数学    |    英语    |    总分    |    平均分    ")
            print("------------------------------------------------------------------------------")
            try:
                self.__cur = self.__conn.cursor()
                self.__sql = """select* from GradeTable"""
                self.__result = self.__cur.execute(self.__sql)
                self.__st = self.__result.fetchall()
                for i in self.__st:
                    self.__sum = int(i[2]) + int(i[3]) + int(i[4])
                    self.__avg = self.__sum / 3.0
                    print("    " + i[0] + "   |   " + i[1] + "    |     " + i[2] + "      |      " + i[3] + "     |      " +
                          i[4] + "     |    " + str(self.__sum) + "    |     " + str(round(self.__avg, 2)) + "  ")
                    print("------------------------------------------------------------------------------")
                print()
                self.Main2()
            except:
                print("学生成绩信息输出失败!\n")
                self.Main2()
    
        def __GradeSearch(self):
            print("\n------------------ 3.学生成绩查询 -----------------")
            print("1、按学生姓名查询;2、按学生学号查询;0、返回.")
            self.__num = input("请输入选择:")
            if self.__num == "1":
                self.__SelectName()
            elif self.__num == "2":
                self.__SelectNumber()
            elif self.__num == "0":
                self.Main2()
            else:
                self.__GradeSearch()
    
        def __SelectName(self):
            self.__cur = self.__conn.cursor()
            self.__name = input("请输入学生姓名:").strip()
            self.__sql = """select count(*) from GradeTable where Name=?;"""
            self.__result = self.__cur.execute(self.__sql, (self.__name,))
            self.__st = self.__result.fetchall()
            if self.__st[0] == (0,):
                print("查无此人!")
                self.__GradeSearch()
            elif self.__st[0] == (1,):
                self.__OutputName(self.__name)
            else:
                print("该学生姓名有多个!请按学号查询!")
                self.__GradeSearch()
    
        def __OutputName(self, name):
            print("\n-----------------------------------------------------------------------------")
            print("    学号    |    姓名    |    语文    |    数学    |    英语    |    总分    |    平均分    ")
            print("------------------------------------------------------------------------------")
            try:
                self.__cur = self.__conn.cursor()
                self.__sql = """select * from GradeTable where Name =?;"""
                self.__result = self.__cur.execute(self.__sql, (self.__name,))
                self.__st = self.__result.fetchall()
                for i in self.__st:
                    self.__sum = int(i[2]) + int(i[3]) + int(i[4])
                    self.__avg = self.__sum / 3.0
                    print("    " + i[0] + "   |   " + i[1] + "    |     " + i[2] + "      |      " + i[3] + "     |      " +
                          i[4] + "     |    " + str(self.__sum) + "    |     " + str(round(self.__avg, 2)) + "  ")
                    print("------------------------------------------------------------------------------")
                self.__GradeSearch()
            except:
                print("学生成绩查询失败!\n")
                self.__GradeSearch()
    
        def __SelectNumber(self):
            self.__cur = self.__conn.cursor()
            self.__number = input("请输入学生学号:").strip()
            self.__sql = """select count(*) from GradeTable where Number =?;"""
            self.__result = self.__cur.execute(self.__sql, (self.__number,))
            self.__st = self.__result.fetchall()
            if self.__number == "":
                print("学号不得为空!")
                self.__SelectNumber()
            elif self.__st[0] == True:
                self.__OutputNumber(self.__number)
            else:
                print("该学号不存在!\n")
                self.__GradeSearch()
    
        def __OutputNumber(self, number):
            print("\n-----------------------------------------------------------------------------")
            print("    学号    |    姓名    |    语文    |    数学    |    英语    |    总分    |    平均分    ")
            print("------------------------------------------------------------------------------")
            try:
                self.__cur = self.__conn.cursor()
                self.__sql = """select* from GradeTable where Number=?;"""
                self.__result = self.__cur.execute(self.__sql, (self.__number,))
                self.__st = self.__result.fetchall()
                for i in self.__st:
                    self.__sum = int(i[2]) + int(i[3]) + int(i[4])
                    self.__avg = self.__sum / 3.0
                    print("    " + i[0] + "   |   " + i[1] + "    |     " + i[2] + "      |      " + i[3] + "     |      " +
                          i[4] + "     |    " + str(self.__sum) + "    |     " + str(round(self.__avg, 2)) + "  ")
                    print("------------------------------------------------------------------------------")
                self.__GradeSearch()
            except:
                print("学生成绩查询失败!\n")
                self.__GradeSearch()
    
        def __GradeChange(self):
            self.__cur = self.__conn.cursor()
            print("\n------------------ 4.学生成绩修改 -----------------")
            self.__number = input("请输入学生学号:").strip()
            self.__name = input("请输入学生姓名:").strip()
            self.__sql = """select count(*) from GradeTable where Number=? and Name=?;"""
            self.__result = self.__cur.execute(self.__sql, (self.__number, self.__name,))
            self.__st = self.__result.fetchone()
            if self.__number == "" or self.__name == "":
                print("学号或姓名不得为空!\n")
                self.__GradeChange()
            elif self.__st[0] == True:
                self.__ChangeNumber(self.__number)
            else:
                print("查无此人!\n")
                self.Main2()
    
        def __ChangeNumber(self, number):
            print("\n1、语文;2、数学;3、英语;0、返回.")
            self.__num = input("请选择要修改成绩的学科:").strip()
            if self.__num == "1":
                self.__chinese = input("请输入修改后的语文成绩:").strip()
                self.__AlterChineser(self.__num, number, self.__chinese)
            elif self.__num == "2":
                self.__math = input("请输入修改后的数学成绩:").strip()
                self.__AlterMath(self.__num, self.__number, self.__math)
            elif self.__num == "3":
                self.__english = input("请输入修改后的英语成绩:")
                self.__AlterEnglish(self.__num, self.__number, self.__english)
            elif self.__num == "0":
                self.Main2()
            else:
                self.__ChangeNumber(self.__number)
    
        def __AlterChineser(self, num, number, chinese):
            self.__cur = self.__conn.cursor()
            try:
                self.__sql = """update GradeTable set Chinese=? where Number =?;"""
                self.__cur.execute(self.__sql, (self.__chinese, self.__number))
                self.__conn.commit()
                print("语文成绩修改成功!\n")
                self.__ChangeNumber(number)
            except:
                print("语文成绩修改失败!\n")
                self.__ChangeNumber(self.__number)
            finally:
                self.__ChangeNumber(self.__number)
    
        def __AlterMath(self, num, number, math):
            try:
                self.__cur = self.__conn.cursor()
                self.__sql = """update GradeTable set Math=? where Number =?;"""
                self.__cur.execute(self.__sql, (self.__math, self.__number))
                self.__conn.commit()
                print("数学成绩修改成功!\n")
                self.__ChangeNumber(self.__number)
            except:
                print("数学成绩修改失败!\n")
                self.__ChangeNumber(self.__number)
            finally:
                self.__ChangeNumber(self.__number)
    
        def __AlterEnglish(self, num, number, english):
            try:
                self.__cur = self.__conn.cursor()
                self.__sql = """update GradeTable set English=? where Number =?;"""
                self.__cur.execute(self.__sql, (self.__english, self.__number))
                self.__conn.commit()
                print("英语成绩修改成功!\n")
                self.__ChangeNumber(number)
            except:
                print("英语成绩修改失败!\n")
                self.__ChangeNumber(number)
            finally:
                self.__ChangeNumber(number)
    
        def __DeleteGrade(self):
            print("\n------------------ 5.学生成绩删除 -----------------")
            self.__cur = self.__conn.cursor()
            self.__number = input("请输入学生学号:").strip()
            self.__name = input("请输入学生姓名:").strip()
            self.__sql = """select count(*) from GradeTable where Number=? and Name=?;"""
            self.__result = self.__cur.execute(self.__sql, (self.__number, self.__name,))
            self.__st = self.__result.fetchone()
            if self.__number == "":
                print("学号或姓名不得为空!\n")
                self.__DeleteGrade()
            elif self.__st[0] == True:
                self.__CancelDelete(self.__number)
            else:
                print("查无此人!\n")
                self.Main2()
    
        def __CancelDelete(self, number):
            try:
                self.__cur = self.__conn.cursor()
                self.__sql = """delete from GradeTable where Number =?;"""
                self.__cur.execute(self.__sql, (self.__number,))
                self.__conn.commit()
                print("学生成绩信息删除成功!\n")
                self.Main2()
            except:
                print("学生成绩信息删除失败!\n")
                self.Main2()
    
        def Main2(self):
            print("**************************************************************************")
            print("1、学生成绩输入;2、学生成绩输出;3、学生成绩查询;4、学生成绩修改;5、学生成绩删除;6、返回登录界面;0、退出当前程序.")
            print("**************************************************************************")
            self.__num = input("请输入选择:").strip()
            if self.__num == "1":
                self.__GradeInput()
            elif self.__num == "2":
                self.__GradeOutput()
            elif self.__num == "3":
                self.__GradeSearch()
            elif self.__num == "4":
                self.__GradeChange()
            elif self.__num == "5":
                self.__DeleteGrade()
            elif self.__num == "6":
                sd = Account()
                sd.Main()
            elif self.__num == "0" or self.__num == "":
                self.__conn.close()
                print("程序已退出!")
                sys.exit(0)
            else:
                self.Main2()
    
    
    if __name__ == '__main__':
        st = Account()
        st.Main()
    
    
    
    
    

    可借阅:
    http://t.csdn.cn/4X7V1

    评论

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 修改了问题 12月6日
  • 修改了问题 12月6日
  • 创建了问题 12月6日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。