Python实现学生名册管理系统:模糊匹配、成绩录入、Excel保存
首先需要安装xlwt库来进行xls文件的操作:
!pip install xlwt
然后根据题目需求,可以先定义一个学生类来存储学生的信息:
class Student:
def __init__(self, id, name, number):
self.id = id
self.name = name
self.number = number
self.score = None
def set_score(self, score):
self.score = score
接着读取名册文件,将每个学生信息存储在列表中:
import xlrd
workbook = xlrd.open_workbook('名册.xls')
sheet = workbook.sheet_by_index(0)
students = []
for i in range(1, sheet.nrows):
id, name, number = sheet.row_values(i)[:3]
student = Student(id, name, number)
students.append(student)
定义一个函数来根据学号或姓名进行模糊匹配:
def search_students(keyword):
result = []
for student in students:
if keyword in student.number or keyword in student.name:
result.append(student)
return result
然后就可以实现主程序的逻辑了:
import xlwt
while True:
keyword = input('请输入学号或姓名:')
matches = search_students(keyword)
if not matches:
print('没有找到匹配的学生')
elif len(matches) == 1:
student = matches[0]
print('学号:{},姓名:{}'.format(student.number, student.name))
score = input('请输入成绩:')
student.set_score(score)
else:
print('找到了{}个匹配的学生:'.format(len(matches)))
for i, student in enumerate(matches):
print('{}. 学号:{},姓名:{}'.format(i+1, student.number, student.name))
choice = input('请选择序号或按q退出:')
if choice == 'q':
break
try:
index = int(choice) - 1
student = matches[index]
print('学号:{},姓名:{}'.format(student.number, student.name))
score = input('请输入成绩:')
student.set_score(score)
except:
print('输入有误,请重新输入')
# 保存xls文件
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('成绩单')
worksheet.write(0, 0, '序号')
worksheet.write(0, 1, '学号')
worksheet.write(0, 2, '姓名')
worksheet.write(0, 3, '成绩')
for i, student in enumerate(students):
worksheet.write(i+1, 0, student.id)
worksheet.write(i+1, 1, student.number)
worksheet.write(i+1, 2, student.name)
worksheet.write(i+1, 3, student.score)
workbook.save('成绩单.xls')
完整代码如下:
!pip install xlwt
import xlrd
import xlwt
class Student:
def __init__(self, id, name, number):
self.id = id
self.name = name
self.number = number
self.score = None
def set_score(self, score):
self.score = score
workbook = xlrd.open_workbook('名册.xls')
sheet = workbook.sheet_by_index(0)
students = []
for i in range(1, sheet.nrows):
id, name, number = sheet.row_values(i)[:3]
student = Student(id, name, number)
students.append(student)
def search_students(keyword):
result = []
for student in students:
if keyword in student.number or keyword in student.name:
result.append(student)
return result
while True:
keyword = input('请输入学号或姓名:')
matches = search_students(keyword)
if not matches:
print('没有找到匹配的学生')
elif len(matches) == 1:
student = matches[0]
print('学号:{},姓名:{}'.format(student.number, student.name))
score = input('请输入成绩:')
student.set_score(score)
else:
print('找到了{}个匹配的学生:'.format(len(matches)))
for i, student in enumerate(matches):
print('{}. 学号:{},姓名:{}'.format(i+1, student.number, student.name))
choice = input('请选择序号或按q退出:')
if choice == 'q':
break
try:
index = int(choice) - 1
student = matches[index]
print('学号:{},姓名:{}'.format(student.number, student.name))
score = input('请输入成绩:')
student.set_score(score)
except:
print('输入有误,请重新输入')
# 保存xls文件
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('成绩单')
worksheet.write(0, 0, '序号')
worksheet.write(0, 1, '学号')
worksheet.write(0, 2, '姓名')
worksheet.write(0, 3, '成绩')
for i, student in enumerate(students):
worksheet.write(i+1, 0, student.id)
worksheet.write(i+1, 1, student.number)
worksheet.write(i+1, 2, student.name)
worksheet.write(i+1, 3, student.score)
workbook.save('成绩单.xls')
原文地址: https://www.cveoy.top/t/topic/nfKZ 著作权归作者所有。请勿转载和采集!