1.功能需求分析
根据项目要求,学生系统成绩管理系统应该具备以下几个功能:
(1)系统的登录与注册:
(2)学生成绩添加:
(3)学生成绩修改:
(4)学生成绩删除:
(5)学生成绩查询:
(6)学生成绩排序及显示:
(7)系统退出:
2. 系统设计
2.1 系统功能结构
系统主要功能分为三大模块,分别为:系统的登录与注册模块、学生成绩管理模块和学生成绩排序及显示模块。其中学生成绩管理模块功能包括学生学绩的录入、删除、修改和查询;学生成绩排序显示模块功能包括按学号排序、按总分排序、按各科目成绩排序显示。
3. 详细设计
3.1 登录与注册功能模块
3.1.1系统的登录
1.功能描述
实现用户的登录,系统的登录功能是通过函数login()的运行实现。
2.具体实现代码
# 登入功能实现
def login():
user = input(“登录用户:”)
passwd = input(“登录密码:”)
users = load_user()
users.get(user, “0”)
k = users.get(user, “0”)
if k == passwd:
mash_menu()
else:
if k == “0”:
print(“用户不存在!”, end=”,”)
else:
print(“密码错误!”, end=”,”)
input(“按任意键继续!”)
3.实现效果图
3.1.2系统的注册
1.功能描述
实现用户的注册,系统的登录功能是通过函数regist()的运行实现。
2.具体实现代码
# 注册功能实现
def regist():
user = input(“注册用户:”)
pswd = input(“注册密码:”)
users = load_user()
if users.get(user, 0) == 0:
user_write(user, pswd)
print(“注册成功!”, end=”,”)
else:
print(“用户已存在!”, end=”,”)
input(“按任意键继续”)
3.实现效果图
3.2 成绩管理功能模块
3.2.1主函数功能设计实现
1.功能描述
系统的操作主界面是通过主函数main()的运行实现,在主函数中,通过循环调用函数menu()生成功能菜单,以及使用if控制各功能子函数的调用,从而实现系统各功能模块。
2.实现代码
# 主菜单
def main_menu():
ctrl = True
while ctrl:
a = os.system(“cls”)
print(”’
┌───学生成绩管理系统───┐
====主功能菜单===
1.注册
2.登录
3.退出
=================
说明:使用数字选择功能
└──────────────┘
”’)
op = eval(input(“请输入数字[1-3]:”))
if op == 1:
regist()
elif op == 2:
login()
elif op == 3:
print(“系统退出!”)
ctrl = False
else:
print(“输入错误”, end=”,”)
input(“按任意键继续!”)
3. 实现效果
进入主函数即可进入系统主界面如图所示。
3.2.2 添加学生信息设计实现
1.功能描述
添加学生信息,添加学生信息的功能是通过函数add()的运行实现。
2.具体实现代码
# 添加学生信息
def add():
a = os.system(“cls”)
ctrl = True
student_list = load_student() # 读入本地学生信息
while ctrl:
id = input(“请输入学生学号:”)
name = input(“请输入学生姓名:”)
english = input(“请输入英语成绩:”)
math = input(“请输入数学成绩:”)
python = input(“请输入Python成绩:”)
try:
total = str(int(english) + int(math) + int(python))
except:
print(“输入成绩有误,请重新数入!”)
continue
student = [id, name, english, math, python, total]
student_list.append(student)
answer = input(“是否继续添加信息!?:’y/n'”)
if answer == ‘y’:
continue
else:
break
save_stud(student_list) # 存入学生信息到本地
print(“学生信息录入成功!”)
# 保存学生信息
def save_stud(lst):
stu = open(filename, ‘w’)
for i in lst:
stu.write(‘,’.join(i) + ‘\n’)
stu.close()
3.实现效果图
3.2.3 删除学生信息设计实现
1.功能描述
删除学生信息,删除学生信息的功能是通过函数delet()的运行实现。
2.具体实现代码
# 删除学生信息
def delet():
os.system(‘cls’)
stud = load_student()
ctrl = True
while ctrl:
ID = input(‘请输入待删除学生学号:’)
flag = 0
for i in stud:
if i[0] == ID:
flag = 1
stud.remove(i)
if flag:
print(“删除成功!”)
else:
print(‘学生信息不存在!’)
op = input(‘是否继续删除:(y/n)’)
if op == ‘y’:
ctrl = True
else:
ctrl = False
save_stud(stud)
print(‘信息存入成功!’)
input(‘请按任意键继续’)
3.实现效果图
3.2.4 修改学生信息设计实现
1.功能描述
修改学生信息,修改学生信息的功能是通过函数update()的运行实现。
2.具体实现代码
# 修改学生信息
def update():
os.system(‘cls’)
ctrl = True
flag = False
stud = load_student()
while ctrl:
ID = input(“请输入待修改学生的学号:”)
for i in stud:
if i[0] == ID:
flag = True
op = int(
input(”’修改学生姓名请输入1,修改英语成绩请输入2,修改数学成绩请输入3,修改Python成绩请输入4:”’))
if op >= 2:
i[op] = input(‘请输入修改后的信息:’)
i[-1] = str(int(i[2]) + int(i[3]) + int(i[4]))
else:
i[op] = input(‘请输入修改后的信息:’)
break
if flag:
print(‘修改成功!’)
else:
print(‘未查询到学生信息!’)
op = input(‘是否继续修改(y/n)” /> if op == ‘y’:
ctrl = True
else:
ctrl = False
save_stud(stud)
3.实现效果图
3.2.5 查询学生信息设计实现
1.功能描述
查询学生信息,查询学生信息的功能是通过函数search()的运行实现。
2.具体实现代码
# 查询学生信息
def search():
os.system(‘cls’)
stud = load_student()
op = input(‘输入1按学号搜索,输入2按姓名搜索’)
op = int(op) – 1
flag = False
if op == 0:
chrt = input(‘输入待搜索学生的学号:’)
else:
chrt = input(‘输入待搜索学生的姓名:’)
for i in stud:
if i[op] == chrt:
flag = True
print(‘{:10}{:10}{:10}{:10}{:10}{:10}’.format(‘学号’, ‘姓名’, ‘英语’, ‘数学’, ‘Python’, ‘总分’))
print(‘{:12}{:12}{:12}{:12}{:12}{:12}’.format(i[0], i[1], i[2], i[3], i[4], i[-1]))
break
if flag:
print(‘搜索成功!’)
else:
print(‘搜索失败!’)
input(‘请输入任意键继续’)
3.实现效果图
3.3 排序及显示功能模块
1.功能描述
实现排序及显示功能,学生排序及显示的功能是通过函数show_menu()的运行实现。
2.具体实现代码
# 显示功能菜单
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()
elif op == 2:
show_total()
elif op == 3:
show_score()
elif op == 4:
ctrl = False
else:
print(“输入错误”, end=”,”)
input(“按任意键继续!”)
3.实现效果图
3.3.1按学号排序显示
1.功能描述
按学号排序,按学号排序的功能是通过函数show_id()的运行实现。
2.具体实现代码
# 按学号从小到大显示学生信息
def show_id():
os.system(‘cls’)
stud = load_student()[1:]
stud.sort(key=lambda x:int(x[0]), reverse=False)
print(‘————-记录信息{}条———‘.format(len(stud)))
print(‘{:10}{:10}{:10}{:10}{:10}{:10}’.format(‘学号’, ‘姓名’, ‘英语’, ‘数学’, ‘Python’, ‘总分’))
for i in stud:
print(‘{:12}{:12}{:12}{:12}{:12}{:12}’.format(i[0], i[1], i[2], i[3], i[4], i[-1]))
input(‘按任意键以继续’)
3.实现效果图
3.3.2 按总分排序显示
1.功能描述
按总分排序,按总分排序的功能是通过函数show_total()的运行实现。
2.具体实现代码
# 按总分从大到小显示学生信息
def show_total():
os.system(‘cls’)
stud = load_student()[1:]
stud.sort(key=lambda x: int(x[-1]), reverse=True)
print(‘————-记录信息{}条———‘.format(len(stud)))
print(‘{:10}{:10}{:10}{:10}{:10}{:10}’.format(‘学号’, ‘姓名’, ‘英语’, ‘数学’, ‘Python’, ‘总分’))
for i in stud:
print(‘{:12}{:12}{:12}{:12}{:12}{:12}’.format(i[0], i[1], i[2], i[3], i[4], i[-1]))
input(‘按任意键以继续’)
3.实现效果图
3.3.3按各科目成绩排序显示
1.功能描述
按各科目成绩排序,按各科成绩排序的功能是通过函数show_score()的运行实现。
2.具体实现代码
# 按单科分数从大到小显示学生信息
def show_score():
os.system(‘cls’)
stud = load_student()[1:]
op = input(“输入1按英语成绩排序,输入2按数学成绩排序,输入3按Python成绩排序”)
op = int(op) + 1
stud.sort(key=lambda x: int(x[op]), reverse=True)
print(‘————-记录信息{}条———‘.format(len(stud)))
print(‘{:10}{:10}{:10}{:10}{:10}{:10}’.format(‘学号’, ‘姓名’, ‘英语’, ‘数学’, ‘Python’, ‘总分’))
for i in stud:
print(‘{:12}{:12}{:12}{:12}{:12}{:12}’.format(i[0], i[1], i[2], i[3], i[4], i[-1]))
input(‘按任意键以继续’)
3.实现效果图
4. 总代码如下:
import os
username = “user.txt”
filename = ‘students.csv’
# 读取本地用户账号信息
def load_user():
with open(username, ‘r’) as f:
dic = {}
for item in f.readlines():
item = item.replace(“\n”, “”)
li = item.split(“,”)
dic[li[0]] = li[1]
f.close()
return dic
# 读取本地学生的信息
def load_student():
with open(filename, ‘r’) as f:
stud = []
for item in f.readlines():
item = item.replace(“\n”, “”)
li = item.split(“,”)
stud.append(li)
f.close()
return stud
# 保存用户信息到本地
def user_write(user, pswd):
f = open(username, “a”)
f.write(user + “,” + pswd + ‘\n’)
f.close()
# 注册功能实现
def regist():
user = input(“注册用户:”)
pswd = input(“注册密码:”)
users = load_user()
if users.get(user, 0) == 0:
user_write(user, pswd)
print(“注册成功!”, end=”,”)
else:
print(“用户已存在!”, end=”,”)
input(“按任意键继续”)
# 登入功能实现
def login():
user = input(“登录用户:”)
passwd = input(“登录密码:”)
users = load_user()
users.get(user, “0”)
k = users.get(user, “0”)
if k == passwd:
mash_menu()
else:
if k == “0”:
print(“用户不存在!”, end=”,”)
else:
print(“密码错误!”, end=”,”)
input(“按任意键继续!”)
# 添加学生信息
def add():
a = os.system(“cls”)
ctrl = True
student_list = load_student() # 读入本地学生信息
while ctrl:
id = input(“请输入学生学号:”)
name = input(“请输入学生姓名:”)
english = input(“请输入英语成绩:”)
math = input(“请输入数学成绩:”)
python = input(“请输入Python成绩:”)
try:
total = str(int(english) + int(math) + int(python))
except:
print(“输入成绩有误,请重新数入!”)
continue
student = [id, name, english, math, python, total]
student_list.append(student)
answer = input(“是否继续添加信息!?:’y/n'”)
if answer == ‘y’:
continue
else:
break
save_stud(student_list) # 存入学生信息到本地
print(“学生信息录入成功!”)
# 保存学生信息
def save_stud(lst):
stu = open(filename, ‘w’)
for i in lst:
stu.write(‘,’.join(i) + ‘\n’)
stu.close()
# 删除学生信息
def delet():
os.system(‘cls’)
stud = load_student()
ctrl = True
while ctrl:
ID = input(‘请输入待删除学生学号:’)
flag = 0
for i in stud:
if i[0] == ID:
flag = 1
stud.remove(i)
if flag:
print(“删除成功!”)
else:
print(‘学生信息不存在!’)
op = input(‘是否继续删除:(y/n)’)
if op == ‘y’:
ctrl = True
else:
ctrl = False
save_stud(stud)
print(‘信息存入成功!’)
input(‘请按任意键继续’)
# 查询学生信息
def search():
os.system(‘cls’)
stud = load_student()
op = input(‘输入1按学号搜索,输入2按姓名搜索’)
op = int(op) – 1
flag = False
if op == 0:
chrt = input(‘输入待搜索学生的学号:’)
else:
chrt = input(‘输入待搜索学生的姓名:’)
for i in stud:
if i[op] == chrt:
flag = True
print(‘{:10}{:10}{:10}{:10}{:10}{:10}’.format(‘学号’, ‘姓名’, ‘英语’, ‘数学’, ‘Python’, ‘总分’))
print(‘{:12}{:12}{:12}{:12}{:12}{:12}’.format(i[0], i[1], i[2], i[3], i[4], i[-1]))
break
if flag:
print(‘搜索成功!’)
else:
print(‘搜索失败!’)
input(‘请输入任意键继续’)
# 修改学生信息
def update():
os.system(‘cls’)
ctrl = True
flag = False
stud = load_student()
while ctrl:
ID = input(“请输入待修改学生的学号:”)
for i in stud:
if i[0] == ID:
flag = True
op = int(
input(”’修改学生姓名请输入1,修改英语成绩请输入2,修改数学成绩请输入3,修改Python成绩请输入4:”’))
if op >= 2:
i[op] = input(‘请输入修改后的信息:’)
i[-1] = str(int(i[2]) + int(i[3]) + int(i[4]))
else:
i[op] = input(‘请输入修改后的信息:’)
break
if flag:
print(‘修改成功!’)
else:
print(‘未查询到学生信息!’)
op = input(‘是否继续修改(y/n)” /> op = int(op) + 1
stud.sort(key=lambda x: int(x[op]), reverse=True)
print(‘————-记录信息{}条———‘.format(len(stud)))
print(‘{:10}{:10}{:10}{:10}{:10}{:10}’.format(‘学号’, ‘姓名’, ‘英语’, ‘数学’, ‘Python’, ‘总分’))
for i in stud:
print(‘{:12}{:12}{:12}{:12}{:12}{:12}’.format(i[0], i[1], i[2], i[3], i[4], i[-1]))
input(‘按任意键以继续’)
# 显示功能菜单
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()
elif op == 2:
show_total()
elif op == 3:
show_score()
elif op == 4:
ctrl = False
else:
print(“输入错误”, end=”,”)
input(“按任意键继续!”)
# 学生信息管理系统菜单
def manage_menu():
ctrl = True
while ctrl:
a = os.system(“cls”)
print(”’
┌───学生成绩管理系统───┐
====成绩管理功能菜单===
1.学生成绩添加
2.学生成绩修改
3.学生成绩删除
4.学生成绩查询
5.返回上一级
======================
说明:使用数字选择功能
└──────────────┘
”’)
op = eval(input(“请输入数字[1-5]:”))
if op == 1:
add()
elif op == 2:
update()
elif op == 3:
delet()
elif op == 4:
search()
elif op == 5:
ctrl = False
else:
print(“输入错误”, end=”,”)
input(“按任意键继续!”)
# 功能菜单
def mash_menu():
ctrl = True
while ctrl:
a = os.system(“cls”)
print(”’
┌───学生成绩管理系统───┐
====功能菜单===
1.学生成绩管理
2.排序及显示
3.返回上一级
=================
说明:使用数字选择功能
└──────────────┘
”’)
op = eval(input(“请输入数字[1-3]:”))
if op == 1:
manage_menu()
elif op == 2:
show_menu()
elif op == 3:
ctrl = False
else:
print(“输入错误”, end=”,”)
input(“按任意键继续!”)
# 主菜单
def main_menu():
ctrl = True
while ctrl:
a = os.system(“cls”)
print(”’
┌───学生成绩管理系统───┐
====主功能菜单===
1.注册
2.登录
3.退出
=================
说明:使用数字选择功能
└──────────────┘
”’)
op = eval(input(“请输入数字[1-3]:”))
if op == 1:
regist()
elif op == 2:
login()
elif op == 3:
print(“系统退出!”)
ctrl = False
else:
print(“输入错误”, end=”,”)
input(“按任意键继续!”)
main_menu()