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()