python:学生管理系统程序(可运行)

历经几天终于完成了自己写的第一个程序,在这个过程中可谓艰辛啊
没写注释,所以大家自己领悟吧,有需要的朋友别抄袭哦!

class SqList:
    def __init__(self):
        self.init_capacity = 1
        self.capacity = self.init_capacity
        self.data = [None] * self.capacity
        self.size = 0

    def student(self, number, name, course, grade):
        self.number = number
        self.name = name
        self.course = course
        self.grade = grade
        return f'学号为{self.number},名字为{self.name},课程为{self.course},成绩为{self.grade}'

    def resize(self, new_capacity):
        assert new_capacity >= 0
        old_data = self.data
        self.data = [None] * new_capacity
        self.capacity = new_capacity
        for i in range(self.size):
            self.data[i] = old_data[i]

    def add_to(self, data):
        if self.size == self.capacity:
            self.resize(2 * self.size)
        self.data[self.size] = data
        self.size += 1

    def add_stu(self):
        if self.size == self.capacity:
            self.resize(2 * self.size)
        number_stu, name_stu, course_stu, grade_stu = input("输入学号,姓名,科目,成绩:(以空格为间)").split(" ")
        self.add_to(number_stu)
        self.add_to(name_stu)
        self.add_to(course_stu)
        self.add_to(grade_stu)
        print("添加成功")

    def all_stu(self):
        if self.data == [None]:
            print("暂时无学生的信息")
        else:
            stu = 0
            for i in range(self.size // 4):
                print(self.student(self.data[stu], self.data[stu + 1], self.data[stu + 2], self.data[stu + 3]))
                stu += 4
            # print(self.data)
            # print(self.size)

    def pop_number(self, op):
        num = 0
        while num < self.size and self.data[num] != op:
            num += 1
        for j in range(num + 4, self.size):
            self.data[j - 4] = self.data[j]
        self.size -= 4
        if self.capacity > self.init_capacity and self.size <= self.capacity / 4:
            self.resize(self.capacity // 2)

    def pop_course(self,pop):
        num = 0
        while num < self.size and self.data[num] != pop:
            num += 1
        for j in range(num + 4, self.size):
            self.data[j - 4] = self.data[j]
        self.size -= 4

    def delete_stu(self):
        select=int(input("请选择删除方式(1.学号删除,2.课程删除):"))
        if select==1:
            id_stu = str(input("输入需要删除的学生的学号:"))
            if id_stu in self.data:
                self.pop_number(id_stu)
            else:
                print("无此学生信息")
        elif select==2:
            course_in=str(input("输入要删除的学生的对应课程:"))
            if course_in  in self.data:
                self.pop_course(course_in)
            else:
                print("无此课程")
        else:
            print("请输入正确指令")

    def sort_number(self):
        for i in range(self.size // 4):
            exchange = False
            for j in range(self.size - 4,0, -4):
                if int(self.data[j]) > int(self.data[j - 4]):
                    number, name, course, grade = self.data[j], self.data[j - 1], self.data[j - 2], self.data[j - 3]
                    self.data[j], self.data[j - 1], self.data[j - 2], self.data[j - 3] = self.data[j - 4], self.data[j - 5], self.data[j - 6], self.data[j - 7]
                    self.data[j - 4], self.data[j - 5], self.data[j - 6], self.data[j - 7] = number, name, course, grade
                    exchange = True
            if exchange==False:return

    def sort_grade(self):
        for i in range(self.size // 4):
            exchange = False
            for j in range(self.size - 4,4,-4):
                if int(self.data[j]) < int(self.data[j - 4]):
                    number, name, course, grade = self.data[j], self.data[j - 1], self.data[j - 2], self.data[j - 3]
                    self.data[j], self.data[j -1], self.data[j - 2], self.data[j - 3] = self.data[j - 4], self.data[
                        j - 5], self.data[j - 6], self.data[j - 7]
                    self.data[j - 4], self.data[j - 5], self.data[j - 6], self.data[j - 7] = number, name, course, grade
            if exchange == False: return
        print(self.data)

    def menu_stu(self):
        try:
            while True:
                print('1.显示学生记录\n2.添加一个学生信息\n3.输入学号或课程删除学生记录\n4.按学号递减排序输出学生记录\n5.递减查看学生成绩\n6.退出系统\n')
                select = int(input("输入对应功能数字:"))
                if select == 1:
                    self.all_stu()
                if select == 2:
                    self.add_stu()
                if select == 3:
                    self.delete_stu()
                if select == 4:
                    self.sort_number()
                if select == 5:
                    self.sort_grade()
                if select == 6:
                    print("欢迎下一次使用")
                    break
        except ValueError:
            print("输入有效内容,please!")

use = SqList()
use.menu_stu()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈鸣coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值