用Python完成一个学生管理系统,看不懂你打我啊!!
程序员文章站
2022-05-06 12:39:06
...
此学生管理系统的功能
- 查看所有学生
- 新增学生
- 修改年龄
- 删除学生
- 按姓名查找学生
- 按学号排序(升序和降序)
- 保存
- 退出
具体代码如下,赶紧来看看吧~
# -*- coding: utf-8 -*-
import os#判断文件是否存在
#生成学生类(存储学生个人信息)
class student:#生成学生类
def __init__(self,id,name,age,sex,height):#学生类的定义将学号、姓名、年龄、性别、身高作为参数传给类
self.id=id
self.name=name
self.age=age
self.sex=sex
self.height=height
def printMe(self):#便于打印自己的类
print("学号:%d,姓名:%s,年龄:%d,性别:%s,身高:%f" % (self.id, self.name, self.age, self.sex, self.height))#打印需要的内容,便于后面文件的调用
#生成管理类(对学生的各种管理)
class StudentManager:#定义学生管理类
def __init__(self):
self.allStudentList=[]
#显示所有学生信息
def allStudentShow(self):#定义学生显示函数
for one in self.allStudentList:#利用for循环进行遍历
one.printMe()#调用前面的内容,方便打印
#定义新增学生函数
def addNewStudent(self,newStudent):
for one in self.allStudentList:
if one.id==newStudent.id:
return -1#学号重复
self.allStudentList.append(newStudent)
return 1
#定义修改学生的年龄函数
def updateStudent(self,id,newAge):
for one in self.allStudentList:
if one.id == id:
one.age = newAge
break #一个学生的年龄修改过后自动跳出循环
else:
return -1 #此学生不存在
return 1
#定义删除学生函数
def deleteStudent(self,id):
index = 0#利用index计数
for one in self.allStudentList:
if one.id == id:#利用if语句进行查找删除那个学生
del self.allStudentList[index]
index += 1
else:
return -1#找不到这个学生
return 1
#定义按姓名查找函数
def searchName(self,name):
flag=0 #利用flag区别有没有找到学生
for one in self.allStudentList:
if one.name==name:#利用if语句判断查找那个学生
one.printMe()#打印学生信息
flag=1
if flag==0:
return -1#查无此人
return 1
#定义按学号排序函数
#def sortMe(onelist):
#return onelist[0]
def orderById(self,flag):#flag=1升序,flag=2降序
if flag==1:#升序
self.allStudentList.sort(reverse=False,key=lambda x:x.id)#利用python中的sort
#self.allStudentList.sort(reverse=False, key=sortMe.id)#利用python中的key 和value
else:
self.allStudentList.sort(reverse=True, key=lambda x:x.id)#X为一个参数
#定义从文件中读取数据函数
def readFormFile(self,fileName):#从文件中读取所需的文件名
if not os.path.exists(fileName):#如果文件不存在新建一个空文件
f=open(fileName,"w")#打开并清空
f.close()
with open(fileName,"r",encoding="utf-8")as f:#文件读写功能都有,其中"utf-8"表示只读以下文件的中文
for oneStr in f:#利用for循环在文件中进行遍历
oneList = oneStr.strip("\n").split(",")#列表进行换行并用,隔开
stu=student(int(oneList[0]),oneList[1],int(oneList[2]),oneList[3],float(oneList[4]))#定义一个str用于存储一个学生的信息
self.allStudentList.append(stu)#将读取的信息增加到文件中
#将数据写入文件的函数
def writeToFile(self,fileName):#将数据写入文件
f=open(fileName,"w")#文件打开并清空
f.close()
with open(fileName,"a",encoding="utf-8")as f:#文件读写功能都有,其中"utf-8"表示只读以下文件的中文
for one in self.allStudentList:#利用for循环在学生列表中进行遍历
oneStr=str(one.id)+","+one.name+","+str(one.age)+","+one.sex+","+str(one.height)#用oneStr来接收一个同学的信息,同时强制转换学号、年龄为int型,将身高强制转换为float型
f.write(oneStr)#将数据写入文件
#定义一个功能菜单函数
def menu():
print("**************************")
print("*1.查看所有学生***********")
print("*2.新增学生***************")
print("*3.修改年龄***************")
print("*4.删除学生***************")
print("*5.按姓名查找*************")
print("*6.按学号排序*************")
print("*7.保存*******************")
print("*8.退出*******************")
print("**************************")
if __name__ == '__main__':#从这个地方开始
stuManager=StudentManager()#定义学生管理类
# 从文件中读取数据
stuManager.readFormFile("students.txt")
while True:#避免一直循环
#显示主菜单
menu()
select = int(input("请选择一个选项:"))
if select == 1:#查看所有学生
stuManager.allStudentShow()
elif select == 2:#新增学生
while True:
try:#避免功能缺陷
id = int(input("请输入学号"))
name = input("请输入姓名")
age = int(input("请输入年龄"))
sex = input("请输入性别")
height = float(input("请输入身高"))
stu=student(id,name,age,sex,height)
if stuManager.addNewStudent(stu)==-1:
print("学号重复,请重新输入")
else:
flag = input("恭喜,新增成功,是否继续新增(Y/N)")
if flag != "Y":
break
except:
print("请重新输入;")
elif select == 3:#修改学生年龄
while True:
id = int(input("请输入学号:"))
newAge = int(input("请输入新年龄:"))
if stuManager.updateStudent(id, newAge) == -1:
print("找不到此学生,请重新输入")
else:
flag = input("恭喜,修改成功,是否继续修改(Y/N)")
if flag != "Y":
break
elif select == 4:#删除学生
while True:
id = int(input("请输入删除学号:"))
if stuManager.deleteStudent(id) == -1:
print("找不到此学生的学号,请重新输入")
else:
flag = input("恭喜,删除成功,是否继续删除(Y/N)")
if flag.lower() != "y":
break
elif select == 5:#按姓名查找
while True:
name = input("请输入姓名")
if stuManager.searchName(name) == -1:
print("查无此人")
flag = input("是否继续查找(Y/N)")
if flag != "Y":
break
elif select == 6:#排序
flag = int(input("请选择排序方式(1.升序。2.降序)"))
stuManager.orderById(flag)
stuManager.allStudentShow()
elif select == 7:#保存
stuManager.writeToFile("students.txt")
print("保存成功")
else:#退出
exit()
代码运行结果是这样的
下面就去试试它的各个功能吧,记着提前录入一些学生的信息哦,不然一开始就查看所有的同学的功能是查不到的哦!!
这是很久以前的写的一个管理系统了,不知道这次有没有把什么细节丢掉。如果有的话,欢迎交流和改正呀!!!