偷学Python第十五天:使用Python完成学生管理系统
古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。——苏轼
学生管理系统
案例要求:设计一个存放学生信息的系统,里面存放着学生的各种信息,可以对学生的信息进行增删改查。
思路:设置一个列表用来存放每个学生的信息,列表的每个元素用来存放具体学生的信息(学号、姓名、性别),通过判断键入的值来选择是什么功能。
第一步:设计一个大体的结构,分别是菜单、添加学生信息、删除学生信息、修改学生信息、查询学生信息、查询全部信息、程序入口;分别定义一个函数体
"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/13
"""
def menu(): # 菜单
pass
def add_stu(stu_list): # 添加学生信息
pass
def del_stu(stu_list): # 删除学生信息
pass
def change_stu(stu_list): # 修改学生信息
pass
def query_stu(stu_list): # 查询学生信息
pass
def query_all_stu(stu_list): # 查询全部信息
pass
def main(stu_list): # 程序入口
pass
if __name__ == '__main__':
students_list = [] # 存放学生信息的列表
main(students_list) # 调用程序开始函数
第二步:定义一个菜单,打印需要显示的内容
def menu(): # 菜单
print("-" * 30)
print("""
学生管理系统
1.添加学生信息
2.删除学生信息
3.修改学生信息
4.查询学生信息
5.查询所有学生信息
6.退出系统
""")
print("-" * 30)
第三步:完成添加学生信息的函数。通过input
函数来通过键盘来键入学生的信息,然后判断该学号是否存在,不存在的话将信息加入到列表中
def add_stu(stu_list): # 添加学生信息
print("您选择了添加学生信息功能")
stu_id = input("请输入您要添加学生的学号:")
stu_name = input("请输入您要添加学生的姓名:")
stu_sex = input("请输入您要添加学生的性别:")
skip = False # 判断学号是否重复的条件
for stu in stu_list:
if stu["stu_id"] == stu_id:
skip = True
break
if skip: # 如果学号重复,则为执行下面这一句
print("该学生已经已经被添加了")
else:
stu_info = {"stu_id": stu_id, "stuName": stu_name, "stuSex": stu_sex} # 定义一个字典存放学生信息
stu_list.append(stu_info)
print("学生信息添加成功")
第四步:完成删除学生信息的函数。判断学号是否在系统中,如果不在,则提示;在就将其删除
def del_stu(stu_list): # 删除学生信息
print("您选择了删除学生信息功能")
del_stu_id = input("请输入您要删除的学号:")
skip = True # 设置一个条件,记录该学生是否不再系统中
record_index = 0 # 记录索引
for stu in stu_list:
if stu["stu_id"] == del_stu_id:
skip = False # 该学生在系统中,就返回重新执行for循环
continue
else:
record_index += 1 # 找不到一次每次索引+1
if skip:
print("系统中没有该学生的信息")
else:
stu_list.pop(record_index)
print("该学生已经从该系统中删除")
第五步:完成修改学生信息的函数。因为一个学生有多个信息,所以修改要通过不同的函数对每个信息进行修改,通过键入的值来判断每个需要实现什么功能,在具体对某个信息进行修改。
def change_stu(stu_list): # 修改学生信息
print("""--选择你要修改的信息--
1. 修改学号
2. 修改姓名
3. 修改性别
4. 退出修改
""")
def change_id():
print("您选择了修改学号信息功能")
change_stu_id = input("请输入您要修改的学号:")
new_stu_id = input("请输入修改后的学号:")
skip = True
record_index = 0
for stu in stu_list:
if stu["stu_id"] == change_stu_id:
skip = False
continue
else:
record_index += 1
if skip:
print("系统中没有该学生的信息")
else:
stu["stu_id"] = new_stu_id
print("学号修改完毕")
def change_name():
print("您选择了修改姓名信息功能")
change_stu_id = input("请输入您要修改姓名的学号:")
new_stu_name = input("请输入修改后的姓名:")
skip = True
record_index = 0
for stu in stu_list:
if stu["stu_id"] == change_stu_id:
skip = False
continue
else:
record_index += 1
if skip:
print("系统中没有该学生的信息")
else:
stu["stuName"] = new_stu_name
print("姓名修改完毕")
def change_sex():
print("您选择了修改性别信息功能")
change_stu_id = input("请输入您要修改性别的学号:")
new_stu_sex = input("请输入修改后的性别:")
skip = True
record_index = 0
for stu in stu_list:
if stu["stu_id"] == change_stu_id:
skip = False
continue
else:
record_index += 1
if skip:
print("系统中没有该学生的信息")
else:
stu["stuSex"] = new_stu_sex
print("性别修改完毕")
while True:
alter_num = int(input("请输入功能序号:"))
if alter_num == 1:
change_id()
elif alter_num == 2:
change_name()
elif alter_num == 3:
change_sex()
elif alter_num == 4:
break
else:
print("输入有误")
第六步:完成查询学生信息函数。通过上面的方法得到某个信息,将其输出。
def query_stu(stu_list): # 查询学生信息
print("您选择了查询学生信息功能")
del_stu_id = input("请输入您要查询的学号:")
skip = True
record_index = 0
for stu in stu_list:
if stu["stu_id"] == del_stu_id:
skip = False
continue
else:
record_index += 1
if skip:
print("系统中没有该学生的信息")
else:
print("找到此学生,信息如下:")
print("学号:%s\n姓名:%s\n年龄:%s\n" % (stu["stu_id"], stu["stuName"], stu["stuSex"]))
第七步:完成查询全部信息,将列表里的内容格式化后输出
def query_all_stu(stu_list): # 查询全部信息
print("以下是所有学生信息")
print("≡" * 30)
print("\t学号\t\t姓名\t\t性别")
for stu in stu_list:
print('\t', stu["stu_id"], '\t', stu["stuName"], '\t', stu["stuSex"])
print("≡" * 30)
最后一步:根据键入的值来判断调用哪个函数,为了防止输入的时候输入错误,完成系统不能完成的计算,将判断条件改为字符串型。
def main(stu_list): # 程序入口
while True:
menu()
number = input("请输入想要的功能:")
if number == str(1):
add_stu(stu_list)
elif number == str(2):
del_stu(stu_list)
elif number == str(3):
change_stu(stu_list)
elif number == str(4):
query_stu(stu_list)
elif number == str(5):
query_all_stu(stu_list)
elif number == str(6):
whether_to_quit = input("是否退出(y/n)")
while True:
if whether_to_quit == 'y' or whether_to_quit == 'Y' or whether_to_quit == 'yes':
print("已退出")
exit()
elif whether_to_quit == 'n' or whether_to_quit == 'N' or whether_to_quit == 'no':
print("取消取出")
break
else:
print("输入错误,退出失败")
break
else:
print("输入错误,请重新输入")
完整代码
"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/13
"""
def menu(): # 菜单
print("-" * 30)
print("""
学生管理系统
1.添加学生信息
2.删除学生信息
3.修改学生信息
4.查询学生信息
5.查询所有学生信息
6.退出系统
""")
print("-" * 30)
def add_stu(stu_list): # 添加学生信息
print("您选择了添加学生信息功能")
stu_id = input("请输入您要添加学生的学号:")
stu_name = input("请输入您要添加学生的姓名:")
stu_sex = input("请输入您要添加学生的性别:")
skip = False # 判断学号是否重复的条件
for stu in stu_list:
if stu["stu_id"] == stu_id:
skip = True
break
if skip: # 如果学号重复,则为执行下面这一句
print("该学生已经已经被添加了")
else:
stu_info = {"stu_id": stu_id, "stuName": stu_name, "stuSex": stu_sex} # 定义一个字典存放学生信息
stu_list.append(stu_info)
print("学生信息添加成功")
def del_stu(stu_list): # 删除学生信息
print("您选择了删除学生信息功能")
del_stu_id = input("请输入您要删除的学号:")
skip = True # 设置一个条件,记录该学生是否不再系统中
record_index = 0 # 记录索引
for stu in stu_list:
if stu["stu_id"] == del_stu_id:
skip = False # 该学生在系统中,就返回重新执行for循环
continue
else:
record_index += 1 # 找不到一次每次索引+1
if skip:
print("系统中没有该学生的信息")
else:
stu_list.pop(record_index)
print("该学生已经从该系统中删除")
def change_stu(stu_list): # 修改学生信息
print("""--选择你要修改的信息--
1. 修改学号
2. 修改姓名
3. 修改性别
4. 退出修改
""")
def change_id():
print("您选择了修改学号信息功能")
change_stu_id = input("请输入您要修改的学号:")
new_stu_id = input("请输入修改后的学号:")
skip = True
record_index = 0
for stu in stu_list:
if stu["stu_id"] == change_stu_id:
skip = False
continue
else:
record_index += 1
if skip:
print("系统中没有该学生的信息")
else:
stu["stu_id"] = new_stu_id
print("学号修改完毕")
def change_name():
print("您选择了修改姓名信息功能")
change_stu_id = input("请输入您要修改姓名的学号:")
new_stu_name = input("请输入修改后的姓名:")
skip = True
record_index = 0
for stu in stu_list:
if stu["stu_id"] == change_stu_id:
skip = False
continue
else:
record_index += 1
if skip:
print("系统中没有该学生的信息")
else:
stu["stuName"] = new_stu_name
print("姓名修改完毕")
def change_sex():
print("您选择了修改性别信息功能")
change_stu_id = input("请输入您要修改性别的学号:")
new_stu_sex = input("请输入修改后的性别:")
skip = True
record_index = 0
for stu in stu_list:
if stu["stu_id"] == change_stu_id:
skip = False
continue
else:
record_index += 1
if skip:
print("系统中没有该学生的信息")
else:
stu["stuSex"] = new_stu_sex
print("性别修改完毕")
while True:
alter_num = int(input("请输入功能序号:"))
if alter_num == 1:
change_id()
elif alter_num == 2:
change_name()
elif alter_num == 3:
change_sex()
elif alter_num == 4:
break
else:
print("输入有误")
def query_stu(stu_list): # 查询学生信息
print("您选择了查询学生信息功能")
del_stu_id = input("请输入您要查询的学号:")
skip = True
record_index = 0
for stu in stu_list:
if stu["stu_id"] == del_stu_id:
skip = False
continue
else:
record_index += 1
if skip:
print("系统中没有该学生的信息")
else:
print("找到此学生,信息如下:")
print("学号:%s\n姓名:%s\n年龄:%s\n" % (stu["stu_id"], stu["stuName"], stu["stuSex"]))
def query_all_stu(stu_list): # 查询全部信息
print("以下是所有学生信息")
print("≡" * 30)
print("\t学号\t\t姓名\t\t性别")
for stu in stu_list:
print('\t', stu["stu_id"], '\t', stu["stuName"], '\t', stu["stuSex"])
print("≡" * 30)
def main(stu_list): # 程序入口
while True:
menu()
number = input("请输入想要的功能:")
if number == str(1):
add_stu(stu_list)
elif number == str(2):
del_stu(stu_list)
elif number == str(3):
change_stu(stu_list)
elif number == str(4):
query_stu(stu_list)
elif number == str(5):
query_all_stu(stu_list)
elif number == str(6):
whether_to_quit = input("是否退出(y/n)")
while True:
if whether_to_quit == 'y' or whether_to_quit == 'Y' or whether_to_quit == 'yes':
print("已退出")
exit()
elif whether_to_quit == 'n' or whether_to_quit == 'N' or whether_to_quit == 'no':
print("取消取出")
break
else:
print("输入错误,退出失败")
break
else:
print("输入错误,请重新输入")
if __name__ == '__main__':
students_list = []
main(students_list)
输出效果
练习的小案例
设计一个函数返回指定日期是这一年的第几天
"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/13
"""
def is_leap_year(year):
"""判断指定的年份是不是闰年,平年返回False也就是0,闰年返回True也就是1"""
return year % 4 == 0 and year % 100 != 0 or year % 400 == 0
def which_day(year, month, date):
# 用嵌套的列表保存平年和闰年每个月的天数
days_of_month = [
[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
[31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
]
days = days_of_month[is_leap_year(year)] # 根据上一个函数的返回值,来选择那个列表
total = 0
for index in range(month - 1):
total += days[index]
return total + date
print(which_day(2000, 12, 31)) # 366
print(which_day(241, 3, 23)) # 82
print(which_day(12341, 6, 4)) # 155
print(which_day(2222, 8, 6)) # 218
print(which_day(6666, 11, 8)) # 312
知识点:
return
返回值的运用
今日学习总结
用Python完成了学生管理系统,练习了return的返回值