目录

功能模块:

运行功能演示:

具体代码实现过程:

创建sqlite数据库

Python代码

引入os和sqlite3包:

初始化数据库:

连接数据库:

关闭并提交数据到数据库:

查询数据并显示:

添加并插入数据到数据库:

更新数据到数据库:

删除数据并更新数据库:

导入和导出数据

学生成绩统计:

关联数据库文件:


本文为在之前学生信息及成绩管理系统(Python)完整版的基础上增加数据库功能,数据库我们直接使用并连接Sqlite。

学生信息管理系统(Python)完整版_python学生信息管理系统_李威威wiwi的博客-CSDN博客基本信息管理和学生成绩管理。基本信息管理模块的主要功能有学生信息的添加、删除、修改、显示和学生数据的导入导出,学生成绩管理模块的主要功能有统计课程最高分、最低分和平均分。https://blog.csdn.net/agelee/article/details/126832608

功能模块:

核心功能模块如下:

运行功能演示:

学生信息管理系统启动后,首先进入系统主界面,等待用户输入命令选择相应的功能。

如果用户输入“info”命令,则进入学生基本信息管理子功能模块。

在学生基本信息管理界面,用户通过输入相应的命令进行学生基本信息的增、删、改、显示等操作。

学生基本信息菜单

添加学生信息

删除学生信息

修改学生信息

显示学生信息

如果用户输入“score”命令,则进入学生成绩管理子功能模块。

在学生成绩管理界面用户可选择相应的功能进行成绩处理。

平均分:

最高分

最低分

具体代码实现过程:

创建sqlite数据库

直接在Pycharm中创建一个sqlite数据库,名字为StuDB。

name和File都填StuDB。

成功创建数据库

Python代码

新建Python文件:学生信息管理(sqlite).py

引入os和sqlite3包:

import osimport sqlite3

定义一个主类:StuDB,然后在类里面实现具体的功能函数。

初始化数据库:

def __init__(self):self.con = ''self.cur = ''

连接数据库:

def connect(self,db):self.con = sqlite3.connect(db)self.cur = self.con.cursor()try:sql = '''create table student (no text,name text,chinese integer,math integer,english integer )'''self.cur.execute(sql)except:pass

关闭并提交数据到数据库:

def close(self):self.con.commit()self.cur.close()self.con.close()

查询数据并显示:

def show(self):format_head = '{:8}\t{:8}\t{:8}\t{:8}\t{:8}'print(format_head.format('学号','姓名','语文','数学','英语'))sql = 'select * from student' self.cur.execute(sql)rows = self.cur.fetchall()format_con = '{:8}\t{:8}\t{:<8}\t{:<8}\t{:<8}'for row in rows:print(format_con.format(row[0],row[1],row[2],row[3],row[4]))

添加并插入数据到数据库:

def __insert(self,no,name,chinese,math,english): sql='insert into student(no,name,chinese,math,english) values(" />更新数据到数据库: 
def __update(self,no,name,chinese,math,english): sql='update student set name=?,chinese=?,math=?,english=? where no=?'self.cur.execute(sql,(name,chinese,math,english,no))if self.cur.rowcount > 0:print('修改成功')else:print('修改失败') def update(self):while True:no = input('请输入要修改的学号:')if not self.__exists(no):print('该学号不存在')else:name = input('姓名:')chinese = self.__enterScore('语文成绩:')math = self.__enterScore('数学成绩:')english = self.__enterScore('英语成绩:')if no != '' and name != '' :self.__update(no,name,chinese,math,english)else:print('请将信息输入完整')choice = input('继续修改(y/n)?').lower()if choice == 'n':break

删除数据并更新数据库:

def __delete(self,no): sql = 'delete from student where no = ?'self.cur.execute(sql,(no,))if self.cur.rowcount > 0:print('删除成功')else:print('删除失败')def delete(self):while True:no = input('请输入要删除的学号:')if not self.__exists(no):print('该学号不存在')else:self.__delete(no)choice = input('继续删除(y/n)?').lower()if choice == 'n':break

导入和导出数据

def save(self):fn = input('请输入要导出的文件名:')with open(fn,'w',encoding = 'utf-8') as fp:self.cur.execute('select * from student')rows = self.cur.fetchall()for row in rows:fp.write(row[0] + ',' )fp.write(row[1] + ',' )fp.write(str(row[2]) + ',' )fp.write(str(row[3]) + ',' )fp.write(str(row[4])+ '\n')print('导出完毕')def load(self):fn = input('请输入要导入的文件名:')if os.path.exists(fn):with open(fn,'r',encoding = 'utf-8') as fp:while True:s = fp.readline().strip('\n')if s == '':breakstu = s.split(',')no = stu[0]name = stu[1]chinese = int(stu[2])math = int(stu[3])english = int(stu[4])if self.__exists(no):print('该学生已存在')else:self.__insert(no,name,chinese,math,english)print('导入完毕')else:print('要导入的文件不存在')

学生成绩统计:

def scoreavg(self):sql = 'select avg(chinese),avg(math),avg(english) from student'self.cur.execute(sql)result = self.cur.fetchone()print('语文成绩平均分是:%.2f'%result[0])print('数学成绩平均分是:%.2f'%result[1])print('英语成绩平均分是:%.2f'%result[2])def scoremax(self):sql = 'select max(chinese),max(math),max(english) from student'self.cur.execute(sql)result = self.cur.fetchone()print('语文成绩最高分是:%d'%result[0])print('数学成绩最高分是:%d'%result[1])print('英语成绩最高分是:%d'%result[2])def scoremin(self):sql = 'select min(chinese),min(math),min(english) from student'self.cur.execute(sql)result = self.cur.fetchone()print('语文成绩最低分是:%d'%result[0])print('数学成绩最低分是:%d'%result[1])print('英语成绩最低分是:%d'%result[2])

主函数及菜单函数:

def main(self,db):while True:print('学生信息管理系统(数据库版)'.center(20,'='))print('info-------学生基本信息管理')print('score -------学生成绩统计')print('exit-------退出系统')print(''.center(32,'='))s = input('main>').strip().lower()if s == 'info':self.infoprocess(db)elif s == 'score':self.scoreprocess(db)elif s == 'exit':breakelse:print('输入错误')def infoprocess(self,db):self.connect(db)print('学生基本信息管理'.center(24,'='))print('load -----------导入学生数据')print('insert -----------插入学生信息')print('delete -----------删除学生信息')print('update -----------修改学生信息')print('show -----------显示学生信息')print('save -----------导出学生数据')print('return -----------返回并更新数据库')print(''.center(32,'='))while True:s = input('info>').strip().lower()if s == 'load':self.load()elif s == 'insert':self.insert()elif s == 'delete':self.delete()elif s == 'update':self.update()elif s == 'show':self.show()elif s == 'save':self.save()elif s =='return':breakelse:print('输入错误')self.close()def scoreprocess(self,db):self.connect(db)print('学生成绩统计'.center(24,'='))print('avg--------课程平均分')print('max--------课程最高分')print('min--------课程最低分')print('return --------返回')print(''.center(30,'='))while True:s = input('score>').strip().lower()if s == 'avg':self.scoreavg()elif s == 'max':self.scoremax()elif s == 'min':self.scoremin()elif s == 'return':breakelse:print('输入错误')self.close()

关联数据库文件:

最后单独定义函数指定本次连接的数据库的文件地址。

if __name__ == '__main__':sd = StuDB()sd.main('数据库文件夹路径\StuDB')

完整代码:

import osimport sqlite3class StuDB:def __init__(self):self.con = ''self.cur = ''def connect(self,db):self.con = sqlite3.connect(db)self.cur = self.con.cursor()try:sql = '''create table student (no text,name text,chinese integer,math integer,english integer )'''self.cur.execute(sql)except:passdef close(self):self.con.commit()self.cur.close()self.con.close()def show(self):format_head = '{:8}\t{:8}\t{:8}\t{:8}\t{:8}'print(format_head.format('学号','姓名','语文','数学','英语'))sql = 'select * from student' self.cur.execute(sql)rows = self.cur.fetchall()format_con = '{:8}\t{:8}\t{:<8}\t{:<8}\t{:<8}'for row in rows:print(format_con.format(row[0],row[1],row[2],row[3],row[4]))def __enterScore(self,message):while True:try:score = input(message)if 0 <= int(score)  0:return Trueelse:return Falsedef __insert(self,no,name,chinese,math,english): sql='insert into student(no,name,chinese,math,english) values(?,?,?,?,?)'self.cur.execute(sql,(no,name,chinese,math,english))if self.cur.rowcount > 0:print('插入成功')else:print('插入失败')def __update(self,no,name,chinese,math,english): sql='update student set name=?,chinese=?,math=?,english=? where no=?'self.cur.execute(sql,(name,chinese,math,english,no))if self.cur.rowcount > 0:print('修改成功')else:print('修改失败')def __delete(self,no): sql = 'delete from student where no = ?'self.cur.execute(sql,(no,))if self.cur.rowcount > 0:print('删除成功')else:print('删除失败')def insert(self):while True:no = input('学号:')if self.__exists(no):print('该学号已存在')else:name = input('姓名:')chinese = self.__enterScore('语文成绩:')math = self.__enterScore('数学成绩:')english = self.__enterScore('英语成绩:')if no != '' and name != '':self.__insert(no,name,chinese,math,english)else:print('请将信息输入完整')choice = input('继续添加(y/n)?').lower()if choice == 'n':breakdef delete(self):while True:no = input('请输入要删除的学号:')if not self.__exists(no):print('该学号不存在')else:self.__delete(no)choice = input('继续删除(y/n)?').lower()if choice == 'n':breakdef update(self):while True:no = input('请输入要修改的学号:')if not self.__exists(no):print('该学号不存在')else:name = input('姓名:')chinese = self.__enterScore('语文成绩:')math = self.__enterScore('数学成绩:')english = self.__enterScore('英语成绩:')if no != '' and name != '' :self.__update(no,name,chinese,math,english)else:print('请将信息输入完整')choice = input('继续修改(y/n)?').lower()if choice == 'n':breakdef save(self):fn = input('请输入要导出的文件名:')with open(fn,'w',encoding = 'utf-8') as fp:self.cur.execute('select * from student')rows = self.cur.fetchall()for row in rows:fp.write(row[0] + ',' )fp.write(row[1] + ',' )fp.write(str(row[2]) + ',' )fp.write(str(row[3]) + ',' )fp.write(str(row[4])+ '\n')print('导出完毕')def load(self):fn = input('请输入要导入的文件名:')if os.path.exists(fn):with open(fn,'r',encoding = 'utf-8') as fp:while True:s = fp.readline().strip('\n')if s == '':breakstu = s.split(',')no = stu[0]name = stu[1]chinese = int(stu[2])math = int(stu[3])english = int(stu[4])if self.__exists(no):print('该学生已存在')else:self.__insert(no,name,chinese,math,english)print('导入完毕')else:print('要导入的文件不存在')def scoreavg(self):sql = 'select avg(chinese),avg(math),avg(english) from student'self.cur.execute(sql)result = self.cur.fetchone()print('语文成绩平均分是:%.2f'%result[0])print('数学成绩平均分是:%.2f'%result[1])print('英语成绩平均分是:%.2f'%result[2])def scoremax(self):sql = 'select max(chinese),max(math),max(english) from student'self.cur.execute(sql)result = self.cur.fetchone()print('语文成绩最高分是:%d'%result[0])print('数学成绩最高分是:%d'%result[1])print('英语成绩最高分是:%d'%result[2])def scoremin(self):sql = 'select min(chinese),min(math),min(english) from student'self.cur.execute(sql)result = self.cur.fetchone()print('语文成绩最低分是:%d'%result[0])print('数学成绩最低分是:%d'%result[1])print('英语成绩最低分是:%d'%result[2])def main(self,db):while True:print('学生信息管理系统(数据库版)'.center(20,'='))print('info-------学生基本信息管理')print('score -------学生成绩统计')print('exit-------退出系统')print(''.center(32,'='))s = input('main>').strip().lower()if s == 'info':self.infoprocess(db)elif s == 'score':self.scoreprocess(db)elif s == 'exit':breakelse:print('输入错误')def infoprocess(self,db):self.connect(db)print('学生基本信息管理'.center(24,'='))print('load -----------导入学生数据')print('insert -----------插入学生信息')print('delete -----------删除学生信息')print('update -----------修改学生信息')print('show -----------显示学生信息')print('save -----------导出学生数据')print('return -----------返回并更新数据库')print(''.center(32,'='))while True:s = input('info>').strip().lower()if s == 'load':self.load()elif s == 'insert':self.insert()elif s == 'delete':self.delete()elif s == 'update':self.update()elif s == 'show':self.show()elif s == 'save':self.save()elif s =='return':breakelse:print('输入错误')self.close()def scoreprocess(self,db):self.connect(db)print('学生成绩统计'.center(24,'='))print('avg--------课程平均分')print('max--------课程最高分')print('min--------课程最低分')print('return --------返回')print(''.center(30,'='))while True:s = input('score>').strip().lower()if s == 'avg':self.scoreavg()elif s == 'max':self.scoremax()elif s == 'min':self.scoremin()elif s == 'return':breakelse:print('输入错误')self.close()if __name__ == '__main__':sd = StuDB()sd.main('数据库所在文件夹\StuDB')