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