python编写学生成绩管理系统的逻辑结构及功能实现
作者:南风不竞: 发布时间:2021-08-23 18:32:21
标签:python,学生成绩,管理系统,结构逻辑
学生信息系统
提示:python编写的学生成绩管理系统,包括8个功能和打包教程
一、功能界面
def menum():
print('==================student_manger=================')
print('---------------------功能界面---------------------')
print('\t\t1.录入学生信息')
print('\t\t2.查找学生信息')
print('\t\t3.删除学生信息')
print('\t\t4.修改学生成绩')
print('\t\t5.排序')
print('\t\t6.统计学生总人数')
print('\t\t7.显示所有学生信息')
print('\t\t8.显示功能介绍按钮')
print('\t\t0.退出')
print('================================================')
二 、主函数
def main():
menum()
while True:
try:
choice = int(input('请选择你想进行的操作: '))
except ValueError:
print('输入的数据存在错误,只能输入0到7的整数!')
try:
choice = int(input('请重新输入: '))
except ValueError:
print('重复输入错误,退出系统!')
break
if choice in [0, 1, 2, 3, 4, 5, 6, 7, 8]:
if choice == 0:
answer = input('你确定要退出系统吗?(Y/N): ')
if answer == 'Y' or answer == 'y':
print('谢谢使用!')
break
elif answer == 'N' or answer == 'n':
print('即将返回上一步操作!')
continue
else:
input('输入错误,即将返回主界面!')
continue
elif choice == 1:
insert()
elif choice == 2:
search()
elif choice == 3:
delete()
elif choice == 4:
modify()
elif choice == 5:
sort()
elif choice == 6:
total()
elif choice == 7:
show()
else:
menum()
else:
print('你选择的操作无效,请重新输入!:')
三 、学生信息录入功能
逻辑结构图
def insert():
student_list = []
id_list = []
while True:
id = input('请输入ID: ')
if not id:
break
name = input('请输入姓名:')
if not name:
break
try:
english = float(input('请输入英语成绩:'))
math = float(input('请输入数学成绩:'))
python = float(input('请输入Python成绩:'))
except ValueError:
print('数据输入错误!')
continue
# 将录入的学生信息存放到字典中
student = {'id': id, 'name': name, 'english': english, 'math': math, 'Python': python}
# 将每个学生的信息存放在列表中
if student['id'] in id_list: # student['id'] = value(id)
print('已存在相同ID:')
for i in range(len(student_list)):
if student_list[i][id] == student[id]: # 输出重复id元素
print(student_list[i].items())
break
print('请重新录入!')
else:
id_list.append(str(student['id']))
student_list.append(student)
# 是否继续添加学生信息
answer = input('是否继续添加学生信息?(Y/N): ')
if answer == 'Y' or answer == 'y':
continue
elif answer == 'N' or answer == 'n':
# 存储学生信息
save(student_list, filename)
print('学生信息录入完毕!')
break
else:
print('输入错误,即将返回主界面!')
break
四 、学生信息查找功能
逻辑结构图
代码
def search():
while True:
if os.path.exists(filename):
with open(filename, 'r', encoding = 'utf-8') as s_file:
student_qurey = s_file.readlines() # 将学生信息全部取出
id_list = []
name_list = []
for i in student_qurey:
d = dict(eval(i))
id_list.append(d['id']) # 将所有学生的id存放在id_list中
name_list.append(d['name']) # 将所有学生的name存放在id_list中
try:
mode = int(input('请选择查询模式: 1.按照ID查询 / 2.按照姓名查询 '))
except ValueError:
print('数据类型输入错误!请重新输入!')
else:
if mode == 1: # 按照ID查询
id = input('请输入学生id: ')
if id in id_list:
print('已经查找到该名学生:')
print('ID\t\t\t姓名:\t\t英语成绩:\t\t数学成绩:\t\tPython成绩:\t\t总成绩:')
for item in student_qurey:
if dict(eval(item))['id'] == id:
p = dict(eval(item))
print('{0}\t\t{1}\t\t {2}\t\t {3}\t\t {4}\t\t {5}'.format(
p['id'], p['name'], p['english'], p['math'], p['Python'],
float(p['english'])+float(p['math'])+float(p['Python'])))
else:
print('查无此人!')
elif mode == 2: # 按照姓名查询
name = input('请输入学生姓名: ')
if name in name_list:
print('已经查找到该名学生:')
print('ID\t\t\t姓名:\t\t英语成绩:\t\t数学成绩:\t\tPython成绩:\t\t总成绩:')
for item in student_qurey:
if dict(eval(item))['name'] == name:
p = dict(eval(item))
print('{0}\t\t{1}\t\t {2}\t\t {3}\t\t {4}\t\t {5}'.format(
p['id'], p['name'], p['english'], p['math'], p['Python'],
float(p['english']) + float(p['math']) + float(p['Python'])))
else:
print('查无此人!')
else:
print('输入错误,只能选择1/2两种模式!')
answer = input('是否继续查询? (Y/N)')
if answer == 'Y' or answer == 'y':
continue
elif answer == 'N' or answer == 'n':
print('正在退出查询..')
break
else:
print('输入错误,即将返回主界面!')
break
else:
print('无学生信息文件!')
return
五 、删除学生信息
逻辑结构图
代码
def delete():
while True:
student_id = input('请输入想要删除的学生的ID: ')
if student_id != '':
if os.path.exists(filename):
with open(filename, 'r', encoding = 'utf-8') as file:
student_old = file.readlines()
else:
student_old = []
flag = False # 标记是否删除
if student_old:
with open(filename, 'w', encoding = 'utf-8') as wfile:
for item in student_old:
d = dict(eval(item)) # 转化为字典类型
if d['id'] != student_id:
wfile.write(str(d)+'\n')
else:
flag = True
if flag:
print(f'id为{student_id}的学生信息已被删除!')
else:
print(f'没有找到id为{student_id}的学生信息!')
else:
print('无学生信息')
break
show() # 显示更新后的文件信息
answer = input('是否继续删除学生信息?(Y/N): ')
if answer == 'Y' or answer == 'y':
continue
elif answer == 'N' or answer == 'n':
break
else:
print('输入错误,即将返回主界面!')
break
六 、学生信息修改功能
逻辑结构图
代码
def modify():
show()
if os.path.exists(filename):
with open(filename, 'r', encoding = 'utf-8') as rfile:
student_old = rfile.readlines() # 直接将文本文件的内容整行读取到列表中
else:
print('学生文件信息不存在!')
student_id = input('请输入想要修改的学生的ID: ')
with open(filename, 'w', encoding = 'utf-8') as just_file: # 判断学生是否在该系统中
id_list = []
for i in student_old:
d = dict(eval(i))
id_list.append(d['id']) # 将所有学生的id存放在id_list中
if student_id in id_list: # 要修改的学生存在时
for item in student_old:
e = dict(eval(item))
if e['id'] == student_id:
print('已找到该名学生!')
while True:
try:
e['name'] = input('请输入姓名: ')
e['english'] = input('请输入英语成绩: ')
e['math'] = input('请输入数学成绩: ')
e['Python'] = input('请输入Python成绩: ')
except ValueError:
print('数据类型输入错误!请重新输入!')
else:
break # try...except..else: 输入为出错时,执行else语句
just_file.write(str(e) + '\n')
print('修改成功!')
else:
just_file.write(str(e) + '\n')
else:
answer1 = input('查无此人!,是否执行插入操作? (Y/N)')
if answer1 == 'Y' or answer1 == 'y':
insert()
else:
print('结束当前操作')
answer = input('是否继续修改其余学生信息?(Y/N): ')
if answer == 'Y' or answer == 'y':
modify()
elif answer == 'N' or answer == 'n':
print('结束修改,即将返回主界面..')
else:
print('输入错误,即将返回主界面!')
七 、学生成绩排序
逻辑结构图
代码
def sort():
student_new = []
if os.path.exists(filename):
with open(filename, 'r', encoding = 'utf-8') as sort_file:
student_list = sort_file.readlines() # 无序的学生信息列表
for item in student_list:
d = dict(eval(item))
student_new.append(d) # 列表元素转化为字典
while True:
try:
sort_choice = int(input('请选择排序方式: 0:升序 / 1:降序\t'))
except ValueError:
print('输入的数据类型错误,请重新输入')
else:
if sort_choice == 0:
Flag = False
break
elif sort_choice == 1:
Flag = True
break
else:
print('输入错误,只能在0/1中选择!')
continue
while True:
try:
asc_choice = int(input('请选择按照哪一门成绩进行排序: 英语:0 / 数学:1 / python:2\t\t'))
except ValueError:
print('输入的数据类型错误,请重新输入')
else:
if asc_choice == 0:
student_new.sort(key = lambda x: int(x['english']), reverse = Flag) # 根据列表中的元素进行排序
show()
break
elif asc_choice == 1:
student_new.sort(key = lambda x: int(x['math']), reverse = Flag)
show()
break
elif asc_choice == 2:
student_new.sort(key = lambda x: int(x['Python']), reverse = Flag)
show()
break
elif asc_choice == 3:
student_new.sort(key = lambda x: int(x['Python'])+int(x['english'])+int(x['math']), reverse = Flag)
show()
break
else:
print('输入错误,只能在0/1/2中选择!')
continue
else:
print('学生信息文件不存在!')
八 、 学生人数统计
逻辑结构图
代码
def total():
nums = 0
if os.path.exists(filename):
with open(filename, 'r', encoding = 'utf-8') as t_file:
len_list = t_file.readlines()
for i in range(len(len_list)):
if len_list[i] != '':
nums += 1
print('当前学生总人数为: ', nums)
print('请选择你想进行的下一步操作: ')
else:
print('暂无学生信息文件')
九 、显示所有学生信息
逻辑结构图
代码
def show():
if os.path.exists(filename):
with open(filename, 'r', encoding = 'utf-8') as show_file:
student_list = show_file.readlines()
if student_list:
print('----全部学生信息如下----')
print('ID\t\t\t姓名:\t\t英语成绩:\t\t数学成绩:\t\tPython成绩:\t\t总成绩:')
for item in student_list:
p = dict(eval(item))
print('{0}\t\t{1}\t\t {2}\t\t {3}\t\t {4}\t\t {5}'.format(
p['id'], p['name'], p['english'], p['math'], p['Python'],
float(p['english']) + float(p['math']) + float(p['Python'])))
else:
print('暂无学生信息!')
else:
print('暂无学生信息!')
程序打包
在 pycharm 终端 或者 python命令界面, 使用:
pip install PyInstaller
下载python打包程序,下载完成后, 执行以下操作:
pyinstaller —F F:\xxxx\xxx\xx\x.py
其中:
-F 代表将程序打包为单个exe文件,
F:\xxx\xxx\xx.py 为你的学生成绩管理系统文件的绝对地址
打包完成后,提示信息倒数第二行:Appending语句后面即为exe文件位置,若无特殊显示,则在当前目录父文件下
来源:https://blog.csdn.net/qq_44001342/article/details/124352657
0
投稿
猜你喜欢
- 调用函数:#!/usr/bin/env python3 # -*- coding: utf-8 -*- # 函数调用 >>>
- **截止文章发布chinese_calendar版本为1.8.0,大约在每年的11月份更新次年的节假日新版本import datetimef
- 前言在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引
- 举例如下:<HTML> <HEAD>  
- 向量点乘 (dot) 和对应分量相乘 (multiply) :>>> aarray([1, 2, 3])>>&
- 本文使用css结合js技术给网页背景background 插入flash播放器播放音乐,想法很大胆,呵呵!刚刚乱试一翻搞出这个,有意思吗?请
- 1.导入模块tkinter:ttk覆盖tkinter部分对象,ttk对tkinter进行了优化copy:深拷贝时需要用到copy模块tkin
- 具体特征如下: 1、通过模板实现俄文正常。 2、通过后台数据库生成的静态俄文信息,后台显示正常, 前台乱码。 3、英文正常。 和该主题相关的
- 如下所示:' '.join(line.split())例如:'line dd',运行line.split()
- 加在< head>中< SCRIPT LANGUAGE="JavaScript">//more
- 1、目标场景用过Mac OS的朋友应该都遇到过,日常的文件操作会在同级目录下产生一些特定的临时文件。平常将文件夹打包成压缩包或拷贝文件夹到移
- df.dropna()函数用于删除dataframe数据中的缺失数据,即 删除NaN数据.官方函数说明:DataFrame.dropna(a
- js也是可以做出狂炫的图形的,恭请超级高手分析。给大家看个例子吧。http://www.p01.org/releases/DHTML_con
- 前言在《设计模式》一书中工厂模式提到了:工厂方法模式(Factory Method)抽象工厂模式 (Abstract Factory)但是在
- Python的绘图库也允许用户创建优雅的图形,本章给大家介绍的是关于ggplot绘制画图的技巧,ggplot2建立在grid系统上,这个系统
- 首先来看看这个php字符串替换函数 strtr()的两种用法:strtr(string,from,to) 或者strtr(string,ar
- 微服务架构中收集通常大家都采用ELK进行日志收集,同时我们还采用了SkyWalking进行链路跟踪,而SkyWalking数据存储也用到了E
- 很多SQL Server程序员对子查询(subqueries)的使用感到困惑,尤其对于嵌套子查询(即子查询中包含一个子查询)。现在,就让我们
- 一、进程介绍进程:正在执行的程序,由程序、数据和进程控制块组成,是正在执行的程序,程序的一次执行过程,是资源调度的基本单位。程序:没有执行的
- 前言在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能请求,否则会提示请登录,那么怎样解决呢?我们可以通过Cookie绕过登录,其