关于图书馆无聊的时候写的Python程序设计
就写网上都比较爱写的学生成绩管理系统
- 前提
- 不导入额外的第三方库
- 我使用的是Vsc来编写的
- 建议使用Pycharm,毕竟需要输入的时候,Vsc只能在终端输入
导入对应的库,设置简易小动画
# 设置小动画,便于加载美观
def ani(info,start,end):
for x in '--------->>>':
time.sleep(random.uniform(start,end))
print(x,end='')
else:
time.sleep(0.2)
print(f"{info}成功!",end="")
print("\n")
- 不得不说,是由一点点的粗糙….
- 如果你有好的简易小动画可以交流交流
设置函数
- 设置小菜单
menu_ls = """
************************
** 学生成绩管理系统 **
** 作者:一远. **
** **
** 增加学生信息 ---1 **
** 查询学生信息 ---2 **
** 输出学生信息 ---3 **
** 退出管理系统 ---0 **
"""
print(menu_ls)
#菜单
def menu():
while 1:
ipt = input("请输入对应的功能键(数字):")
try:
if ipt in "1 2 3 4 5 0".split(" "):
return int(ipt)
else:
print("输入超出范围!请重新输入!")
except:
print("输入错误,重新输入")
- 对于主函数
#主函数1
def main():
# 进行菜单选择0-5
ipt=1
while ipt:
ipt = menu()
if ipt == 0:
return 0
elif ipt == 1:
end_file()
elif ipt == 2:
read_file(2)
elif ipt == 3:
read_file(1)
ipt=int(input("是否继续运行Y:1/n:0-->"))
if __name__ == '__main__':
main()
- 设置end_file的小函数
#提交
def write_file():
print("-->增加学生信息")
infos=[]
for i in ['学号','姓名','性别','语文成绩','数学成绩','英语成绩']:
infos.append(input(f"请输入{i}-->"))
#如果想删除
check=input("确认成功-->(q为销毁数据/其余按键均为确认成功):")
if check=="q" or check=="Q":
del infos
ani("数据销毁",0.1,0.2)
else:
infos.append(str(sum([int(i) for i in infos[3:]]))) # 添加数据总和
ani("数据提交",0.2,0.4)
return infos
#写入文件
def end_file():
with open("StdInfo.txt",'a+',encoding='utf-8')as fp:
infos=write_file()
fp.write('\n'+' '.join(infos))
fp.write("\n")
ani("数据写入",0.2,0.26)
- 设置读取的函数,考虑到设置查考函数时候,可以代码复用
#读取
def read_file(num):#输入姓名和代码
with open("StdInfo.txt", 'r', encoding='utf-8')as fp:
info_list=[]
for x in fp.read().split('\n'):
ls=tuple(x.split(' '))
if ls[0]!='':#为了避免换行出现的split分割错误,引起的报错所以进行一个数据判断
info_list.append(ls)
#对于数据排序处理
infos=sorted(info_list, key=lambda x: x[-1], reverse=True)
if num==1:
#调用排名函数
ranking=rank01(infos)
rank(ranking,infos,"all") #输出排名时候name默认为all 内容长度为全输出或者是前列输出,有内容长度决定的内容,所有数据
else:
#进行数据查找
name=input("输入需要查询的学生姓名:")
rank(len(infos),infos,name) #输出排名时候默认三个条件是 内容长度 ,内容,要查找的姓名
#数据排列,是否使用优先排名
def rank01(infos):
#如果人数超过五人,则只输出前五名成绩;
#如果人数小于五人,则只输出人数-1人的成绩
#如果人数为1,则只输出这一人的成绩
while 1:
result = input("全部数据:a/前列排行:q-->:")
if result == "a" or result == 'A':
ranking = len(infos)
break
elif result == "q" or result == 'Q':
if len(infos) >= 5:
ranking = 5
elif len(infos) < 5:
ranking = len(infos)-1
elif len(infos) == 1:
ranking = 1
break
else:
print("输入错误,请重新输入!")
return ranking
# 定义排名函数,在查3找中寻找
def rank(ranking,infos,name):#可能会出现报错,删除后面的文本文件后的空行即可
#格式化输出信息
ani("数据准备", 0.2, 0.4)
print("{:^5}{:<4}{:4}{:4}{:4}{:4}{:4}{:4}".format(
"学号", '姓名', '性别', '语文', '数学', '英语', "总分", '排名'))
count=0
for r in range(ranking):
#对于数据的查找
# print(r,name,infos)
if name == infos[r][1]:
print("{:<7}{:5}{:^4}{:>4} {:^6} {:^4} {:^6} ".format(
infos[r][0],infos[r][1], infos[r][2], infos[r][3], infos[r][4], infos[r][5], infos[r][-1]),r+1)
count+=1
#如果仅仅是输出排名
if name=="all":
print("{:<7}{:5}{:^4}{:>4} {:^6} {:^4} {:^6} ".format(
infos[r][0], infos[r][1], infos[r][2], infos[r][3], infos[r][4], infos[r][5], infos[r][-1]), r+1)
#对于数据的汇总
print(f"总共{count}条数据")
这便是基础逻辑,但不得不说:做下来还有点费时间!
- 主要是纠正了很多错误