项目一:学生成绩管理系统(控制台程序)
使用Python语言开发一个学生成绩管理系统。系统可以帮助教师快速对学生的成绩信息进行基本的增添、删除、修改、查找等管理操作,并实时地将学生的成绩信息保存到磁盘文件;系统还可以实现一定的排序显示功能。
目 录
1.功能需求分析
根据项目要求,学生系统成绩管理系统应该具备以下几个功能:
(1)系统的登录与注册:
(2)学生成绩添加:
(3)学生成绩修改:
(4)学生成绩删除:
(5)学生成绩查询:
(6)学生成绩排序及显示:
(7)系统退出:
2. 系统设计
2.1 系统功能结构
系统主要功能分为三大模块,分别为:系统的登录与注册模块、学生成绩管理模块和学生成绩排序及显示模块。其中学生成绩管理模块功能包括学生学绩的录入、删除、修改和查询;学生成绩排序显示模块功能包括按学号排序、按总分排序、按各科目成绩排序显示。系统功能图如图1所示。
图1 系统功能结构图
2.2 系统业务流图
根据学生管理系统的需求分析和功能结构图,设计如下系统业务流图,如图2所示。
图2 系统业务流图
3. 详细设计
3.1 系统菜单功能的设计实现
(1)功能描述
系统的操作主界面是通过主函数main()的运行实现,在主函数中,通过循环调用函数meun()生成功能菜单,以及使用if控制各功能子函数的调用,从而实现系统各功能模块。
(2) 业务流程
根据学生管理系统的主函数要实现的功能和实现技术,设计如下系统业务流图,如图3所示。
图3-1 主函数功能业务流图
(3) 相关函数功能定义
系统主中界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时,通过输入数字进行功能选择。菜单中的数字与功能定义如表1所示。
编号 | 功能 |
0 | break():退出 |
1 | manage_menu()函数:学生成绩管理 |
2 | show_menu()函数:排序及显示 |
实现代码:
实现效果:
功能1和2的子函数如图所示。
3.2 登录与注册功能模块
3.2.1系统的登录设计实现
功能描述:
用户可以登录程序,然后进行下一步操作
业务流程:
输入2即可进行登录步骤
相关函数功能定义:
def User_Login():
with open(user_file) as f:
dic = {}
for item in f.readlines():
item = item.replace("\n", "")
li = item.split(",")
dic[li[0]]=li[1]
f.close()
#print("用户加载成功!")
return dic
具体实现代码
def login():
user=input("登录用户:")
passwd=input("登录密码:")
users= User_Login()
users.get(user,"0")
k=users.get(user,"0")
if k==passwd:
print("登录成功")
input("按任意键继续!")
mash_menu()
else:
if k=="0":
print("用户不存在!",end=",")
else:
print("密码错误!",end=",")
input("按任意键继续!")
Return ok
实现效果图
3.2.2系统的注册设计实现
功能描述
用户可以注册程序,然后进行下一步操作
业务流程
输入1即可进行注册步骤
相关函数功能定义
def User_Login():
with open(user_file) as f:
dic = {}
for item in f.readlines():
item = item.replace("\n", "")
li = item.split(",")
dic[li[0]]=li[1]
f.close()
#print("用户加载成功!")
return dic
具体实现代码
def regist():
user=input("注册用户:")
pswd=input("注册密码:")
users= User_Login()
if users.get(user,0)==0:
user_write(user,pswd)
print("注册成功!",end=",")
else:
print("用户已存在!",end=",")
input("按任意键返回")
实现效果图
3.3 成绩管理功能模块
3.3.1 添加学生信息设计实现
功能描述
添加学生信息
业务流程
登录后输入选择学生成绩管理再选1
相关函数功能定义
def stuinform_add(studs):
file=open(stud_file,"a")
if file.tell()==0:
li=["学号", "姓名", "英语", "Python", "C语言", "总分","\n"]
li_str=",".join(li)
file.write(li_str)
for item in studs:
item_str=",".join(item)+"\n"
file.write(item_str)
file.close()
return
具体实现代码
def add():
count=0
ctrl=True
studs = []
while ctrl:
a = os.system("cls")
id=input("请输入学号:")
name=input("请输入姓名:")
try:
english =input("请输入英语成绩:")
python = input("请输入Python成绩:")
c= input("请输入C语言成绩:")
total=str(int(english)+int(python)+int(c))
except:
print("成绩录入无效,重新输入信息")
continue
a = os.system("cls")
count+=1
print("------------------------------输入的是第【{}】条记录内容--------------------------".format(count))
print("{:^10}{:^10}{:^10}{:^10}{:^10}{:^10}".format("学号","姓名", "英语","Python","C语言","总分"))
print("{:^12}{:^12}{:^11}{:^11}{:^11}{:^11}".format(id,name,english,python,c,total))
print("--------------------------------------------------------------------------------")
inputOK = input("确认输入?(y/n)")
if inputOK == "y":
studs.append([id,name,english,python,c,total])
else:
count -= 1
inputCtrl = input("是否继续添加?(y/n)")
if inputCtrl == "y":
ctrl = True
else:
ctrl = False
studs_write(studs)
print("删除成功")
Return ok
实现效果图
3.3.2 删除学生信息设计实现
功能描述:删除学生信息
业务流程:登录后输入选择学生成绩管理再选3
相关函数功能定义
def User_Login():
with open(stud_file) as f:
studs = []
for item in f.readlines():
item = item.replace("\n", "")
li = item.split(",")
studs.append(li)
f.close()
#print("学生加载成功!")
return studs
具体实现代码
def Delet_grades():#删除成绩
ctrl=True
while ctrl:
a=os.system("cls")
show_id()
del_id=input("请输入要删除的学生学号(放弃直接按Enter键):")
if del_id=="":
return
studs = User_Login()
flag=0
for item in studs:
if item[0]==del_id:
delOK=input("确认删除该记录(y/n):")
if delOK=="n":
break
else:
flag=1
studs.remove(item)
del_write(studs)
show_id()
break
if flag==0:
input("无该学号,按任意键继续")
inputCtrl=input("是否继续删除(y/n)")
if inputCtrl=="y":
ctrl=True
else:
ctrl=False
input("按任意键返回")
return
实现效果图
3.2.3 修改学生信息设计实现
(1)功能描述:修改学生信息
(2)业务流程:登录后输入选择学生成绩管理再选2
(3)相关函数功能定义
def User_Login():
with open(stud_file) as f:
studs = []
for item in f.readlines():
item = item.replace("\n", "")
li = item.split(",")
studs.append(li)
f.close()
#print("学生加载成功!")
return studs
(4)具体实现代码
def update():
show_id()
ctrl=True
studs= User_Login()
while ctrl:
a = os.system("cls")
flag=0
ls=[]
upid=input("查询人的学号为")
upkemu=input("修改的科目(英语 Python C语言)")
upgarde=input("修改的成绩")
for item in studs[1:]:
if upid == item[0]:
flag=1
if upkemu == item[1:]:
print("修改科目为{}",upkemu)
ls.replace("item[i]","upgrade")
break
else:
print("输入错误,重新输入!")
continue
if flag==0:
print("不存在这名学生!")
else:
a = os.system("cls")
print("------------------------------修改结果--------------------------")
print("{:^10}{:^10}{:^10}{:^10}{:^10}{:^10}".format("学号","姓名", "英语","Python","C语言","总分"))
print("{:^12}{:^12}{:^11}{:^11}{:^11}{:^11}".format(item[0],item[1],item[2],item[3],item[4],item[5]))
print("--------------------------------------------------------------------------------")
inputOK = input("继续修改吗?(y/n)")
if inputOK == "y":
ctrl=True
else:
ctrl = False
print("按任意键返回")
Return
(5)实现效果图
3.2.4 查询学生信息设计实现
(1)功能描述:查询学生信息
(2)业务流程:登录后输入选择学生成绩管理再选4
(3)相关函数功能定义
def User_Login():
with open(stud_file) as f:
studs = []
for item in f.readlines():
item = item.replace("\n", "")
li = item.split(",")
studs.append(li)
f.close()
#print("学生加载成功!")
return studs
(4)具体实现代码
def search():
ctrl=True
studs = User_Login()
while ctrl:
a=os.system("cls")
print("1.学号查找 2.姓名查找")
n=eval(input("请输入数字(1 or 2):"))
flag=0
ls=[]
if n==1:
seacid=input("查询人的学号为")
for item in studs[1:]:
if seacid==item[0]:
flag=1
ls.append(item)
break
elif n==2:
seacname=input("查询人的姓名为")
for item in studs[1:]:
if seacname==item[1]:
flag=1
ls.append(item)
break
else:
input("输入错误 请重新输入数字(1或2)")
continue
if flag==0:
print("不存在这名学生!")
else:
a=os.system("cls")
print("查找结果")
print("{:^10}{:^10}{:^10}{:^10}{:^10}{:^10}".format("学号","姓名","英语","python","c语言","总分"))
for item in studs:
print("{:^12}{:^12}{:^11}{:^11}{:^11}{:^11}".format(item[0],item[1],item[2],item[3],item[4],item[5]))
inctrl=input("是否继续(y/n):")
if inctrl=="y":
ctrl= True
else:
ctrl=False
input("按任意键返回")
return
(5)实现效果图
3.4 排序及显示功能模块
(1)功能描述:排序及显示
(2)业务流程:登录后选2
(3)相关函数功能定义
(4)具体实现代码
def show_menu():
ctrl=True
while ctrl:
a=os.system("cls")
print('''
┌───学生成绩管理系统───┐
====排序与显示功能菜单===
1.按学号排序显示
2.按总分排序显示
3.按科目排序显示
4.返回上一级
======================
说明:使用数字选择功能
└──────────────┘
''')
op=eval(input("请输入数字[1-4]:"))
if op==1:
show_id()
input("按任意键继续!")
elif op==2:
show_total()
elif op==3:
show_score()
elif op==4:
ctrl=False
else:
print("输入错误",end=",")
input("按任意键继续!")
(5)实现效果图
3.4.1按学号排序显示
(1)功能描述:按学号排序显示
(2)业务流程:登录后选2再选1
(3)相关函数功能定义
def User_Login():
with open(stud_file) as f:
studs = []
for item in f.readlines():
item = item.replace("\n", "")
li = item.split(",")
studs.append(li)
f.close()
#print("学生加载成功!")
return studs
(4)具体实现代码
def show_id():
count=0
studs = load_studs()[1:]
studs.sort(key=lambda x:x[0],reverse=False)
print("--------------------------------文件共【{}】条记录-------- --------------------".format(len(studs)))
print("{:^10}{:^10}{:^10}{:^10}{:^10}{:^10}".format("学号", "姓名", "英语", "Python", "C语言", "总分"))
for item in studs[1:]:
print("{:^12}{:^12}{:^11}{:^11}{:^11}{:^11}".format(item[0], item[1], item[2], item[3], item[4], item[5]))
count+=1
if count%10==0:
input("按任意键继续!")
print("--------------------------------------end--------------------------------------")
#input("按任意键继续!")
return
(5)实现效果图
3.4.2 按总分排序显示
(1)功能描述:按总分排序显示
(2)业务流程:登录后选2再选2
(3)相关函数功能定义
def User_Login():
with open(stud_file) as f:
studs = []
for item in f.readlines():
item = item.replace("\n", "")
li = item.split(",")
studs.append(li)
f.close()
#print("学生加载成功!")
return studs
(4)具体实现代码
def show_total():
count=0
studs = load_studs()[1:]
studs.sort(key=lambda x: x[5], reverse=True)
print("--------------------------------文件共【{}】条记录-------- --------------------".format(len(studs)))
print("{:^10}{:^10}{:^10}{:^10}{:^10}{:^10}".format("学号", "姓名", "英语", "Python", "C语言", "总分"))
for item in studs:
print("{:^12}{:^12}{:^11}{:^11}{:^11}{:^11}".format(item[0], item[1], item[2], item[3], item[4], item[5]))
count += 1
if count%10 == 0:
input("按任意键继续!")
print("--------------------------------------end--------------------------------------")
input("按任意键返回!")
return
(5)实现效果图
3.4.3按各科目成绩排序显示
(1)功能描述:按各科目成绩排序显示
(2)业务流程:登录后选2再选3
(3)相关函数功能定义
def load_studs():
with open(stud_file) as f:
studs = []
for item in f.readlines():
item = item.replace("\n", "")
li = item.split(",")
studs.append(li)
f.close()
#print("学生加载成功!")
return studs
(4)具体实现代码
def show_score():
count=0
studs = User_Login()[1:]
print("【1】按英语成绩 【2】按Python成绩 【3】按C语言成绩")
n=eval(input("请输入数字[1-3]:"))
studs.sort(key=lambda x: x[n+1], reverse=True)
print("--------------------------------文件共【{}】条记录-------- --------------------".format(len(studs)))
print("{:^10}{:^10}{:^10}{:^10}{:^10}{:^10}".format("学号", "姓名", "英语", "Python", "C语言", "总分"))
for item in studs[1:]:
print("{:^12}{:^12}{:^11}{:^11}{:^11}{:^11}".format(item[0], item[1], item[2], item[3], item[4], item[5]))
count += 1
if count%10 == 0:
input("按任意键继续!")
print("--------------------------------------end--------------------------------------")
input("按任意键返回!")
return
(5)实现效果图