学生成绩管理系统

Pyhton+txt文本 学生成绩管理系统

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”:

建议在文件下建一个包类似于这样:
在这里插入图片描述

代码部分:

model.py(t1.py)

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(t2.py)

*代码注释的语句就待着吧,当时测试用的。*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)

ui.py(t3.py)

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("输入错误!")

main.py(t4.py)

from 包二.t3 import*
if __name__=="__main__":
    n=StudentManagerView()
    n.shixian()

以上就是代码部分,本代码可能不太稳定(把删除后剩余的信息读入txt部分代码)。还有就是控制台显示信息之后总是间隔一个空行,这是因为把\n也显示了。这就要追到添加信息部分,因为写入txt文件时,也要把\n写入txt,读出来的时候又读了出来。至于如何消除,可以采用正则表达式从txt读数据时把\n去掉。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值