Python简单学生信息管理系统
'''
实验一 顺序表的实现
实验目的: 理解顺序表的基本原理,掌握顺序表的基本操作的编程实现
实验内容:
(1)建立一个顺序表,表中存储学生的成绩数据(包括姓名,学号,数据结构成绩,外语成绩,数学建模成绩,体育成绩,总成绩)作为数据元素;
(2)实现顺序表的基本操作: 建立顺序表,求顺序表的长度,遍历顺序表,插入元素,删除元素,查找元素,清空顺序表等基本操作;
(3)编写一个测试主函数来测试该顺序表是否能实现相应的功能.
'''
'''
本人创建的表名为:students
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| 序号 | int(10) | NO | | NULL | |
| 姓名 | varchar(255) | NO | | NULL | |
| 学号 | varchar(255) | NO | PRI | NULL | |
| 数理统计 | varchar(255) | NO | | NULL | |
| 英语 | varchar(255) | NO | | NULL | |
| 数学建模 | varchar(255) | NO | | NULL | |
| 体育 | varchar(255) | NO | | NULL | |
| 总成绩 | varchar(255) | NO | | NULL | |
+--------------+--------------+------+-----+---------+-------+
'''
import pymysql
class Stu_gather(object): #获取数据库里里面信息
def get_studata(self):
db=pymysql.connect('localhost','root','123456','student')
cursor=db.cursor()
sql="select * from students"
cursor.execute(sql)
results = cursor.fetchall()
for i in range(len(results)):
count=results[i][0]
name=results[i][1]
id=results[i][2]
sltj_score=results[i][3]
english_score=results[i][4]
math_score=results[i][5]
sprit_score=results[i][6]
all_score=results[i][7]
sj={'name': name, 'id': int(id), '数理统计': float(sltj_score), '英语':float(english_score), '数学建模':float(math_score), '体育':float(sprit_score), '总成绩':all_score}
stu_data.append(sj)
db.close()
return stu_data
def get_dd(self):
db=pymysql.connect('localhost','root','123456','student')
cursor=db.cursor()
sql="select * from students"
cursor.execute(sql)
results = cursor.fetchall()
for i in range(len(results)):
id=results[i][2]
dd.append(id)
db.close()
return dd
class Stu_real(Stu_gather): #功能类
global stu_data
global dd
#学生数据处理类
def in_id(self): #输入判断学生id并且添加函数
ids=input('学号:') #录入学生学号且设置数据类型为字典型
if ids=='': #如果没输入,则为空
ids='0'
if ids not in dd: #判断学号是否存在
dd.append(ids) #将数据插入学号列表存储
else:
print('学号输入重复,请重新输入') #学号存在则重新调用该方法
return student.in_id()
return ids #返回学生id
def insert_id(self,insert_data): #输入判断学生id并且插入dd学号列表函数
self.insert_data = insert_data
print(self.insert_data)
id=input('学号:') #录入学生学号且设置数据类型为字典型
if id=='': #如果没输入,则为空
id='0'
if id not in dd: #判断学号是否存在
dd.insert(self.insert_data,id) #将数据插入学号列表存储
else:
print('学号输入重复,请重新输入') #学号存在则重新调用该方法
return student.insert_id(insert_data)
return id
def add_stu(self): #添加学生信息
stu=input('请输入你要录入信息的学生人数: ')
while stu=='' or int(stu)<=0:
print('输入有误,请重新输入:')
stu=input('请输入你要录入信息的学生人数: ')
print('\n——————————————————成功打开,请开始录入学生信息——————————————————\n')
for i in range(int(stu)):
print('\n')
name=input('姓名:') #录入学生姓名
id = student.in_id()
sltj_score=input('数理统计成绩:')
if str(sltj_score)=='':
sltj_score='0'
english_score=input('英语成绩:')
if str(english_score)=='':
english_score='0'
math_score=input('数学建模成绩:')
if str(math_score)=='':
math_score='0'
sprit_score=input('体育成绩:')
if str(sprit_score)=='':
sprit_score='0'
all_score=float(sltj_score)+float(english_score)+float(math_score)+float(sprit_score)
add_data={'name': name, 'id': int(id), '数理统计': float(sltj_score), '英语':float(english_score), '数学建模':float(math_score), '体育':float(sprit_score), '总成绩':all_score}
stu_data.append(add_data)
def del_stu(self): #删除学生信息
print('学号有:')
print(dd)
print('\n')
idss=input('请输入要删除同学信息学号:') #录入学生学号且设置数据类型为整型
if idss=='':
idss='0'
if idss in dd:
for i in range(len(dd)):
if idss == dd[i]:
print('你需要删除的同学信息为:',stu_data[i])
dd.pop(i)
stu_data.pop(i)
break
else:
continue
else:
print('学号不存在,请重新输入')
return student.del_stu()
def xgdel_stu(self): #删除学生信息配合插入功能实现
print('学号有:')
print(dd)
print('\n')
idss=input('请输入要修改同学信息学号:') #录入学生学号且设置数据类型为整型
if idss=='':
idss='0'
if idss in dd:
for i in range(len(dd)):
if idss == dd[i]:
print('你需要修改的同学信息为:',stu_data[i])
dd.pop(i)
stu_data.pop(i)
inser_data=i
break
else:
continue
else:
print('学号不存在,请重新输入')
return student.del_stu()
return inser_data
def alter_data(self): #修改学生信息
insert_data=student.xgdel_stu()
print('——————————————————————重新录入该条学生数据——————————————————————')
name=input('姓名:') #录入学生姓名
id = student.insert_id(insert_data)
sltj_score=input('数理统计成绩:')
if str(sltj_score)=='':
sltj_score='0'
english_score=input('英语成绩:')
if str(english_score)=='':
english_score='0'
math_score=input('数学建模成绩:')
if str(math_score)=='':
math_score='0'
sprit_score=input('体育成绩:')
if str(sprit_score)=='':
sprit_score='0'
all_score=float(sltj_score)+float(english_score)+float(math_score)+float(sprit_score)
cxx={'name': name, 'id': int(id), '数理统计': float(sltj_score), '英语':float(english_score), '数学建模':float(math_score), '体育':float(sprit_score), '总成绩':all_score}
stu_data.insert(insert_data, cxx)
print(dd)
def search_data(self): #查找学生信息
#根据学号查询该生信息
search_data=int(input('请输入你要查询学生的学号:'))
for i in range(len(stu_data)):
if stu_data[i]['id']==search_data:
print('该生信息为: ')
print(stu_data[i])
break
else:
continue
else:
print('无该生信息')
print(dd)
def insert_stu(self): #插入学生信息
print('\n')
print('数据总长度为:', len(stu_data))
inser_data=int(input('请输入你要将数据插入第几条:'))
if inser_data>len(stu_data)+1 or inser_data<=0:
print('输入有误,请按数据总长度范围进行输入')
return student.insert_stu()
else:
inser_data-=1
print('——————————————————————开始录入该条学生数据——————————————————————')
name=input('姓名:') #录入学生姓名
id = student.insert_id(inser_data)
sltj_score=input('数理统计成绩:')
if str(sltj_score)=='':
sltj_score='0'
english_score=input('英语成绩:')
if str(english_score)=='':
english_score='0'
math_score=input('数学建模成绩:')
if str(math_score)=='':
math_score='0'
sprit_score=input('体育成绩:')
if str(sprit_score)=='':
sprit_score='0'
all_score=float(sltj_score)+float(english_score)+float(math_score)+float(sprit_score)
insxx={'name': name, 'id': int(id), '数理统计': float(sltj_score), '英语':float(english_score), '数学建模':float(math_score), '体育':float(sprit_score), '总成绩':all_score}
stu_data.insert(inser_data, insxx)
print(dd)
def print_data(self): #学生信息显示
print('\n')
print('\n')
tt = '{:<10}\t{:<10}\t{:<10}\t{:<10}\t{:<10}\t{:<10}\t{:<10}\t{:<10}'
print('\n')
print('------------------------------------------------------学生信息表-----------------------------------------------------\n')
print(tt.format('序号','姓名','学号','数理统计','英语','数学建模','体育','总分'))
num = 0
for i in range(len(stu_data)):
num = i+1
print(tt.format(num, stu_data[i]['name'], stu_data[i]['id'], stu_data[i]['数理统计'], stu_data[i]['英语'], stu_data[i]['数学建模'], stu_data[i]['体育'], stu_data[i]['总成绩']))
print('\n')
def save_data(self):
print('是否更改到数据库? (1:是/0:否)')
xz=int(input('请输入数字(1:是/0:否):'))
if xz==1:
# 打开数据库连接
db=pymysql.connect('localhost','root','123456','student')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute()执行任务
sql="delete from students"
cursor.execute(sql)
db.commit()
for i in range(len(stu_data)):
count=i+1
sql = "INSERT INTO students(序号, 姓名, 学号, 数理统计, 英语, 数学建模, 体育, 总成绩) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')" % (count, stu_data[i]['name'], stu_data[i]['id'], stu_data[i]['数理统计'], stu_data[i]['英语'], stu_data[i]['数学建模'], stu_data[i]['体育'], stu_data[i]['总成绩'])
cursor.execute(sql)
# 提交到数据库执行
db.commit()
# 关闭数据库连接
db.close()
print('\n信息已存入数据库,欢迎再次使用')
elif xz==0:
print('欢迎再次使用')
else:
print('输入有误! 请重新输入')
print('\n')
return student.save_data()
def finish_data(self): #调用功能类
print('-----------------------------------------------------------------------------------------\n')
print(' 请选择功能(输入数字) \n')
print(' 1:添加信息 2:删除信息 3:插入信息 4:修改信息 5:查找信息 6:显示信息 7:退出选择是否保存新添数据 ')
print(' ')
print('-----------------------------------------------------------------------------------------')
num=str(input('请选择功能:'))
if num=='':
return student.finish_data()
if int(num)==1:
student.add_stu()
print('添加信息完毕')
print('\n')
return student.finish_data()
elif int(num)==2:
print('数据总长度为:', len(stu_data))
student.del_stu()
print('删除信息完毕')
print('\n')
return student.finish_data()
elif int(num)==3:
print('数据总长度为:', len(stu_data))
student.insert_stu()
print('插入信息完毕')
print('\n')
return student.finish_data()
elif int(num)==4:
print('数据总长度为:', len(stu_data))
student.alter_data()
print('修改信息完毕')
print('\n')
return student.finish_data()
elif int(num)==5:
print('数据总长度为:', len(stu_data))
student.search_data()
print('\n')
print('查找信息完毕')
print('\n')
return student.finish_data()
elif int(num)==6:
student.print_data()
return student.finish_data()
else:
student.save_data()
if __name__=="__main__":
global stu_data
global dd
print('——————————————————————————欢迎来到学生信息管理系统——————————————————————————\n')
stu_data=[] #学生信息总列表
data={} #信息字典
dd=[] #学号列表
student = Stu_real() #调用类Stu_real()
stu_data = student.get_studata() #获取数据库的学生信息
dd = student.get_dd() #获取数据库学生的学号
student.finish_data()