Python 学生管理

Stella981
• 阅读 791

原文链接: Python 学生管理

python3 练手 

#coding=utf-8
#学生类
class Stu:
    #三个字段id字符串,name字符串,score小数
    def __init__(self, id, name, score):
        self.id = id
        self.name = name
        self.score = score
    #将类作为字符串输出
    def __str__(self):
        return self.id + '\t' + self.name + '\t' + str(self.score)

#管理学生的类
class StuMgr:
    #由给定路径初始化stus列表
    def __init__(self, path):
        self.path = path
        self.stus = []
        with open(self.path, 'r+', encoding='utf-8') as f:
            n = int(f.readline())
            for i in range(n):
                s = f.readline().split()  # 默认空格分割
                stu = Stu(str(s[0]), str(s[1]), float(s[2]))
                self.stus.append(stu)
    #由给定的id查找具体学生,不存在返回None
    def findById(self, id):
        for s in self.stus:
            if s.id == id:
                return s
        return None
    #由给定的id删除具体学生
    def delById(self, id):
        if self.findById(id) != None:
            for s in range(len(self.stus)):
                if self.stus[s].id == id:
                    self.stus.pop(s)
            return True
        else:
            return False

    def add(self, stu):
        if self.findById(stu.id) != None:
            return False
        else:
            self.stus.append(stu)
            return True
    #按照id排序
    def sortById(self):
        self.stus.sort(key=lambda Stu: Stu.id)

    #保存到文件,编码utf--8码
    def saveToFile(self):
        with open(self.path, 'w+', encoding='utf-8') as f:
            f.write(str(len(self.stus)))
            f.write('\n')
            for s in self.stus:
                f.write(str(s) + '\n')

    def show(self):
        print('共 %d 名学生' % (len(self.stus)))
        for s in self.stus:
            print(s)
    #用于绘制界面,提供操作
    def start(self):
        while True:
            try:
                print("1,显示\t2,添加\t3,删除\t4,查找\t5,排序\t6,保存\t -by ahao")
                opt = input();
                if opt == '1':
                    self.show()
                elif opt == '2':
                    print('请输入要添加的学生信息,空格隔开\n学号\t\t姓名\t成绩')
                    ss = input().split(' ')
                    stu = Stu(str(ss[0]), str(ss[1]), float(ss[2]))
                    self.add(stu);
                elif opt == '3':
                    print('请输入需要删除的学生id')
                    id = input()
                    if self.findById(id) != None:
                        self.delById(id)
                        print('删除成功')
                    else:
                        print('删除失败,该学号不存在')
                elif opt == '4':
                    print('请输入查找的学生学号')
                    id = input()
                    if self.findById(id) != None:
                        s = self.findById(id)
                        print(s)
                    else:
                        print('该学生不存在')
                elif opt == '5':
                    self.sortById()
                    print('排序成功')
                elif opt == '6':
                    self.saveToFile()
                    print('保存成功')
                else:
                    print('请输入有效命令')
            except BaseException:
                print('非法数据,请检查输入是否合法')

#初始化文件路径
stuMgr = StuMgr('stu.txt')
stuMgr.start();

stu. 

6
2150500094    陈文梁    85.79
2160500079    崔致琪    83.44
2160500080    侯玥林    86.53
2160500081    刘佳雯    92.33
2160500082    石可心    86.72
2160500111    yyh    123.0
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Easter79 Easter79
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_