1、创建4个.py模块,在一个包内,模块命名分别为main.py,ui.py,model.py,bll.py。
2、(1)实现学生管理系统在控制台的输出显示界面如图1所示。
(2)在model.py模块中建立学生类,其中包含的属性有name,age,score,id。
(3)在bll.py模块中建立学生管理业务逻辑类,即在此模块中实现增加、显示、删除、修改和成绩排序等功能。可以在增加修改中判断输入学号是否重复,删除时也可以判断是否存在此人等功能。
(4)在ui.py模块中建立学生管理显示界面。
(5)在main.py模块中实现建立if name == “main”:
class Students(object):
"""对一个学生的简单表示"""
def __init__(self,stu_id,stu_name,stu_age,stu_score):
"""设置属性的初始值"""
self.stu_name = stu_name #姓名
self.stu_id=stu_id#学号
self.stu_age=stu_age#年龄
self.stu_score=stu_score#分数
*代码注释的语句就待着吧,当时测试用的。*bll.py在py文件中是以t1.py命名的
from 包二.t1 import *
import re
class Dayitong(object):
def __init__(self):
self.stu_list = []
def add(self):
a = 0
while True:
try:
if len(self.stu_list) == 0:
id1 = int(input("请输入学号:")) # 写一个判断id是否在列表的函数
break
else:
id1 = int(input("请输入学号:")) # 写一个判断id是否在列表的函数
for i in range(len(self.stu_list)):
if id1 != int(self.stu_list[i].stu_id):
a = 1
else:
a = 0
break
# print('判断',a)
if a == 1:
break
if a == 0:
print('重复,重新输入!')
continue
except ValueError:
print('输入有误,重新输入!')
while True:
try:
name = input("请输入姓名:")
if name !='':
break
else:
print('重新输入')
except ValueError:
print('输入有误,重新输入!')
while True:
try:
age = int(input('请输入年龄(1-140):'))
if age in range(1,141):
break
else:
print('输入有误,重新输入!')
except ValueError:
print('输入类型有误,重新输入!')
continue
while True:
try:
grade = int(input("请输入分数:"))
if grade in range(0,101):
break
else:
print('输入有误,重新输入!')
except ValueError:
print('输入类型有误,重新输入!')
#添加
stu = Students(id1, name, age,grade)
self.stu_list.append(stu)
f = open('students massage2.txt', 'a',encoding='UTF-8')
f.write(str(stu.stu_id)+' '+stu.stu_name+' '+str(stu.stu_age)+' '+str(stu.stu_score))
f.write('\n')
f.close()
#显示
def show1(self):
f2 = open('students massage2.txt', 'r', encoding='UTF-8')
content1 = f2.readlines()
for temp in content1:
str1 = re.split(r' ', temp)
stu1 = Students(int(str1[0]), str1[1], int(str1[2]), int(str1[3]))
self.stu_list.append(stu1)
f2.close()
def show(self):
if len(self.stu_list)==0:
print('无学生记录!')
else:
print('学号 姓名 年龄 成绩')
f1 = open('students massage2.txt', 'r',encoding='UTF-8')
content = f1.readlines()
for temp in content:
print("%s" % temp)
f1.close()
#删除
def shanchu(self):
b=0
# print(id(self.stu_list))
while True:
id9=int(input('输入要删除的学号:'))
for i9 in range(len(self.stu_list)):
if id9 == int(self.stu_list[i9].stu_id):
del self.stu_list[i9]
b=1
break
else:
b=0
if b==1:
print('删除成功!')
break
if b==0:
print('无此人!')
continue
lins = [i for i in open('students massage2.txt', 'r+', encoding='UTF-8') if str(id9) not in i]
# print(lins)
# print(self.stu_list)
f1 = open('students massage2.txt', 'w', encoding='UTF-8')
f1.writelines(lins)
f1.close()
# print(len(self.stu_list))
#修改
def xiugai(self):
z=0
a = 0
i1=0
id1 = int(input('输入要修改学生的学号:'))
for i in range(len(self.stu_list)):
if id1 == int(self.stu_list[i].stu_id):
z=1
i1=i
break
else:
z=0
if z==1:
while True:
try:
id2 = int(input("请输入学号:")) # 写一个判断id是否在列表的函数
for i1 in range(len(self.stu_list)):
if id2 != self.stu_list[i1].stu_id:
a = 1
break
else:
a = 0
if a == 1:
break
if a == 0:
print('重复,重新输入!')
continue
except ValueError:
print('输入有误,重新输入!')
while True:
try:
name1 = input("请输入姓名:")
break
except ValueError:
print('输入有误,重新输入!')
while True:
try:
age1 = int(input('请输入年龄(1-140):'))
if age1 in range(1, 141):
break
except ValueError:
print('输入有误,重新输入!')
while True:
try:
grade1 = int(input("请输入分数:"))
if grade1 in range(0, 101):
break
except ValueError:
print('输入有误,重新输入!')
stu = Students(id2, name1, age1, grade1)
self.stu_list[i1] = stu
else:
print('无此人信息')
f = open('students massage2.txt', 'w', encoding='UTF-8')
for i3 in range(len(self.stu_list)):
f.write(str(self.stu_list[i3].stu_id) + ' ' + self.stu_list[i3].stu_name + ' '
+ str(self.stu_list[i3].stu_age) + ' ' + str(self.stu_list[i3].stu_score))
f.write('\n')
f.close()
#排序
def paixv(self):
self.sort_stu(key=lambda s: s.stu_score, reverse=True) # 按照分数排列
print("学号 姓名 年龄 分数")
for i in range(len(self.stu_list)):
print(self.stu_list[i].stu_id,' ',self.stu_list[i].stu_name,' ',
self.stu_list[i].stu_age,' ',self.stu_list[i].stu_score)
def sort_stu(self,key=None,reverse=False):#排序 key=lambda 变量:变量[维数] 。维数可以按照自己的需要进行设置。
self.stu_list.sort(key=key,reverse=reverse)
from 包二.t2 import *
class StudentManagerView(object):
def __init__(self):
#实例化
self.mamager2=Dayitong()
def shixian(self):
self.mamager2.show1()#首先调用这个函数把原来信息读入到列表
while True:
print('*' * 20)
print('1)添加学生')
print('2)显示学生')
print('3)删除学生')
print('4)修改学生')
print('5)按照成绩降序排列')
# print('6)读入列表')
print('0)退出程序')
print('*' * 20)
key=int(input("请输入功能:"))
if key in range(0, 6):
if key==1:
self.mamager2.add()
elif key==2:
self.mamager2.show()
elif key==3:
self.mamager2.shanchu()
elif key==4:
self.mamager2.xiugai()
elif key==5:
self.mamager2.paixv()
else:
print("退出程序")
break
else:
print("输入错误!")
from 包二.t3 import*
if __name__=="__main__":
n=StudentManagerView()
n.shixian()
以上就是代码部分,本代码可能不太稳定(把删除后剩余的信息读入txt部分代码)。还有就是控制台显示信息之后总是间隔一个空行,这是因为把\n也显示了。这就要追到添加信息部分,因为写入txt文件时,也要把\n写入txt,读出来的时候又读了出来。至于如何消除,可以采用正则表达式从txt读数据时把\n去掉。