python实现一个学生管理系统
新手开始学习,跟着网上教程敲出一个学生管理系统
主要学习与熟悉:1、学习如何使用函数封装实现系统功能
2、熟悉对txt文本文件的增删改查
3、熟悉对字典、列表、字符串的处理
目录
一、需求分析
二、系统功能结构——学生信息系统的7大模块
三、系统业务流程
四、开发环境
五、主函数的业务流程
六、实现代码如下(只是实现了主流程,很多细节上的东西还需要调整)
七、实现效果如下
一、需求分析
学生管理系统应具备的功能
- 添加学生及成绩信息
- 将学生信息保存到文件中
- 修改和删除学生信息
- 查询学生信息
- 根据学生成绩进行排序
- 统计学生的总分
二、系统功能结构——学生信息系统的7大模块
- 录入学生信息
- 查找学生信息
- 删除学生信息
- 修改学生信息
- 学生成绩排名模块
- 统计学生总人数模块
- 显示全部学生信息模块
三、系统业务流程
四、开发环境
系统开发环境:
操作系统:win10
Python解释器版本:python3.10
开发工具:Pycharm
Python内置模块:os,re
项目目录结构:
五、主函数的业务流程
主函数主要是以上这些,在开发过程中,因为涉及到重复性的操作,我又写了一些函数封装了
六、实现代码如下(只是实现了主流程,很多细节上的东西还需要调整)
友情提示,最开始写的时候我一头雾水不知道从何下手,跟着教程来,首先是写好的主函数,然后再针对主函数中需要调用的方法再进行类的封装,也就是先搭好框架,然后再进行具体功能实现
类似于这种:
具体代码实现如下(我尽量都写了注释,方便自己理解):
import os.pathfilename = 'students.txt' #将文件名用变量保存起来,如果文件有变动,方便直接修改
def main(): #系统运行过程中可循环选择使用系统哪个功能while True:menum() #执行menum()函数choice = int(input('请选择:'))if choice in [0,1,2,3,4,5,6,7]:if choice == 0:answer = input('您确定要退出系统吗?y/n:')if answer == 'y' or answer == 'Y':print('感谢您的使用!!!')breakelse:continueelif 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:print('输入有误,请重新输入')def menum(): #打印显示出系统有哪些功能print('===========================学生信息管理系统=========================')print('-------------------------------功能菜单--------------------------------')print('\t\t\t\t\t\t\t1、录入学生信息')print('\t\t\t\t\t\t\t2、查找学生信息')print('\t\t\t\t\t\t\t3、删除学生信息')print('\t\t\t\t\t\t\t4、修改学生信息')print('\t\t\t\t\t\t\t5、排序')print('\t\t\t\t\t\t\t6、统计学生总人数')print('\t\t\t\t\t\t\t7、显示所有学生信息')print('\t\t\t\t\t\t\t0、退出')print('-------------------------------------------------------------------------')def insert():# 调用get_student() 函数,读取当前存储学生信息的txt文本中学生的信息,并将学生信息转换为字符串,具体可看get_student() 函数#因为多次地方会涉及到读取,所以我就直接将这个方法封装到类中了,可直接调用student_list = get_student()while True:# 断输入的学生ID是否为整数,也可以写到一个类中进行封装while True:try:id = int(input('请输入学生ID(如1001):'))breakexcept:print('输入有误,请重新输入学生ID!')# 判断输入的学生姓名是否为空,也可以写到一个类中进行封装while True:name = input('请输入姓名:')if name == '':print('输入有误,请重新输入姓名!')else:breaktry: #依次输入各科成绩,如果输入不是整数,则输入失败,并弹出提示english = int(input('请输入英语成绩:'))python = int(input('请输入python成绩:'))Java = int(input('请输入Java成绩:'))except:print('输入无效,不是整数类型,请重新输入')continue#将录入的学生信息保存到字典中student = {'id':id,'name':name,'english':english,'python':python,'java':Java}student_list.append(student)answer = input('是否继续添加学生信息(y/n):')if answer == 'y' or answer == 'Y':continueelse:# print('输入信息有误!!!')break#调用save()函数,保存当前添加学生信息save(student_list)print('学生信息录入完毕!')def save(list): #保存方法,把字典转换为字符串保存到存储学生信息的文本中students_new = '' #定义一个空字符串for i in list: #遍历list中每个元素,并将元素都存储到students_new字符串中students_new = students_new + str(i) + '\n'#将字符串students_new写入文本文件中存储起来,'w'表示如果存在这一个文件,则直接覆盖文件内容,如果不存在此文件,则新建这个文件with open(filename,'w',encoding='utf-8') as wfile:wfile.write(students_new)return students_newdef search(): #查询学生信息student_query = [] #定义一个查询的空字符串while True:id = ''name = ''if os.path.exists(filename):mode = input('按照ID查找请输入1,按姓名查找请输入2:')if mode == '1':id = input('请输入学生ID:')elif mode == '2':name = input('请输入学生姓名:')else:print('输入有误,请重新输入!')continuelist = get_student() #调用get_student()函数,该函数将当前保存的所有学生信息转换为了一个字典列表for d in list: #遍历列表中的字典元素if id != '':if str(d['id']) == id: #判断字典元素的ID是否为输入的ID,是则将该条学生信息保存到新建的查询字符串中student_query.append(d)elif name != '':if d['name'] == name: #判断字典元素的ID是否为输入的name,是则将该条学生信息保存到新建的查询字符串中student_query.append(d)#显示查询结果show_student(student_query) #调用show_student()函数,显示当前的查询结果#清空列表student_query.clear() #清空查询列表,方便下次调用此功能模块时又会新增新的查询元素answer = input('是否要继续查询(y/n):')if answer == 'y' or answer == 'Y':continueelse:breakelse:print('暂未保存学生信息')returndef show_student(list): #显示学生信息if len(list) == 0:print('没有查到学生信息,无数据显示!!!')else:#定义标题显示格式format_title = '{:^6}\t{:^8}\t{:^8}\t{:^8}\t{:^8}\t{:^8}'print(format_title.format('ID','姓名','英语成绩','Python成绩','Java成绩','总成绩'))#定义内容显示格式format_data = '{:^6}\t{:^8}\t{:^8}\t{:^8}\t{:^8}\t{:^8}'for i in list: #注意字典ID不要写错了# print(type(i.get('english')))# print(type(i.get('python')))# print(type(i.get('Java')))print(format_data.format(i.get('id'),i.get('name'),i.get('english'),i.get('python'),i.get('java'),i.get('english') + i.get('python') + i.get('java')))def delete(): #删除学生信息while True:student_id = input('请输入需要删除的学生ID:')if student_id != '': #判断学生ID不为空student_old = get_student() #调用get_student()获取当前所有学生信息,并保存为字典列表flag = False #标记是否删除if student_old: #列表中有数据时,即存储学生信息的文件内容不为空时student_new = []for stu in student_old: #遍历所有学生信息,将除需要删除的学生ID那一条信息外的所有学生信息保存到一个新列表if str(stu['id']) != student_id:student_new.append(stu)save(student_new) #调用save()函数,保存除需要删除的学生ID那一条信息外的所有信息到文本文件中else: #列表中无数据时,即存储学生信息的列表为空时print('无学生信息!!!')breakshow() #学生信息删除完毕后需要显示当前所有学生信息answer = input('是否继续删除学生信息?y/n:')if answer == 'y' or answer == 'Y':continueelse:breakdef modify(): #修改学生信息student_old = get_student() #调用get_student()函数获取当前所有学生信息show_student(student_old) #显示当前所有学生信息student_id = input('请输入要修改的学生ID:')for d in student_old: #遍历列表中所有字典元素,对字典元素中的值做修改if str(d['id']) == student_id:print('找到学生{}信息,可以修改他的相关信息了'.format(student_id))while True:try:d['name'] = input('请输入学生修改后姓名:')d['english'] = int(input('请输入学生修改后英语成绩:'))d['python'] = int(input('请输入学生修改python成绩:'))d['java'] = int(input('请输入学生修改后Java成绩:'))except:print('您的输入有误,请重新输入!!!')breakprint('修改成功!!')save(student_old) #修改后调用save()函数保存该列表中的学生信息answer = input('是否继续修改其他学生信息?y/n:')if answer == 'y' or answer == 'Y':modify()def sort(): #对学生信息排序show() #显示所有学生信息student_new = get_student() #获取所有学生信息,并保存为字典列表asc_or_desc = input('请选择升序还是降序(0升序,1降序):')if asc_or_desc == '0':asc_or_desc_bool = Falseelif asc_or_desc == '1':asc_or_desc_bool = Trueelse:print('您的输入有误,请重新输入:')sort()mode = input('请选择排序方式(1.按英语成绩排序 2.按python成绩排序 3.按Java成绩排序 0.按照总成绩排序):')if mode == '1':student_new.sort(key=lambda x:int(x['english']),reverse=asc_or_desc_bool)elif mode == '2':student_new.sort(key=lambda x:int(x['python']),reverse=asc_or_desc_bool)elif mode == '3':student_new.sort(key=lambda x:int(x['java']),reverse=asc_or_desc_bool)elif mode == '0':student_new.sort(key=lambda x:int((x['english']) + (x['python']) + (x['java'])), reverse=asc_or_desc_bool)else:print('您的输入有误,请重新输入!!!')sort()show_student(student_new)def total(): #统计学生人数list = get_student()print('共有{}名学生'.format(len(list)))show_student(list) #统计后显示学生信息def show(): #显示所有学生信息list = get_student() #调用函数get_student()获取当前所有学生信息show_student(list) #以列表方式显示当前所有学生信息def get_student(): #统计全部学生student_list = []if os.path.exists(filename): # 若是存在保存学生信息的文件with open(filename, 'r', encoding='utf-8') as rfile: # 打开文件students = rfile.readlines() # 将文件中的信息以每行保存到students中for item in students: #遍历列表中的字符串元素student_list.append(eval(item)) #将字符串元素转换为字典else:print('暂无学生数据!!!')return student_list# def search_Id(id): #按照ID检索,封装好了但是未引用
# students = get_student()
# searchId_result = []
# for s in students:
# if id == s['id']:
# searchId_result.append(s)
# return searchId_result
#
# def search_Name(id): #按照Name检索,封装好了但是未引用
# students = get_student()
# searchName_result = []
# for s in students:
# if id == s['name']:
# searchName_result.append(s)
# return searchName_resultif __name__ == '__main__':main() #调用主函数
七、实现效果如下
1、录入学生信息
2、查找学生信息
3、删除学生信息
4、修改学生信息
5、查询学生信息,1009是刚刚修改的学生信息(没做相同的学生ID修改功能)
6、排序
7、统计学生总人数
8、退出功能
python实现一个学生管理系统相关推荐
- 用python做一个学生管理系统
最终效果如上 下面开始教程: 首先画一个菜单,没什么好说的 def menu():print('=======================学生信息管理系统===================== ...
- 用 Python 做个学生管理系统,并打包成exe文件
由于Python都会了,学校教的确实基础,平时就没怎么去上课,让美女老师天天脑壳痛,这不快毕业了,让我做一个学生管理系统出来,还要打包成exe发给她,她就不追究我不上课的问题了~ 话说这能难倒我吗?赶 ...
- 快毕业了,老师说用Python做个学生管理系统打包成exe文件发给她,就不追究我旷课的事情了,这不简简单单?
文章目录 一.准备工作 二.代码流程 三.打包exe可执行程序 由于Python都会了,学校教的确实基础,平时就没怎么去上课,让美女老师天天脑壳痛,这不快毕业了,让我做一个学生管理系统出来,还要打包成 ...
- 用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)(二)
本文上接用JDBC写一个学生管理系统(添加.删除.修改.查询学生信息) 这次主要是对上一文中的查询方法做一下调整,用创建内部类的方法来实现学生信息的查询. 我们先要定义一个接口IRowMapper: ...
- 用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)
首先需要用Navicat Premium创建一个student表 用Java连接好MySQL数据库(需要copy一个mysql-connector-java-5.1.44-bin.jar包,该包可在网 ...
- C语言程序设计——设计一个学生管理系统(完美运行的程序(●‘◡‘●))
目录 一.设计目的 二.原理及相关功能 (一)基本框架 (二)功能实现 三.完整代码 四.运行结果 一.设计目的 通过c语言设计一个学生管理系统,要求有直观的主菜单,可以录入学生的信息,实现添加学生信 ...
- 名片管理系统python详解_详解Python做一个名片管理系统
详解Python做一个名片管理系统 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 详解Python做一个名片管理系统.txt ] (友情提示:右键点上行txt文 ...
- 使用Qt5编写一个学生管理系统
程序使用Qt5编写了一个学生管理系统 首先介绍一下项目框架,项目包含一个主窗口mainwindow Mainwindow使用的就是最常见的Mainwindow带对话框的,带标题栏等等的窗口 两个子窗口 ...
- 创建一个学生管理系统数据库_建立一个问答系统
创建一个学生管理系统数据库 Over three months we had the chance to design and implement a question answering proje ...
最新文章
- 转 mac svn用法
- 视频目标检测跟踪--Detect to Track and Track to Detect
- BC #49 1001 Untitled
- libstrophe 安装
- python代码模块与模块之间空1行_Day006|Python语法基础
- 鼠标经过替换背景和文字
- Android学习总结00之废话
- CCF201412-1 门禁系统(100分)
- matlab2c使用c++实现matlab函数系列教程-deconv函数
- iOS 开发中常见的设计模式
- 站在5G潮头 爱立信如何重描金字招牌 | MWC 2019
- UniWebView3.8
- 希尔伯特空间、欧几里德空间
- 直播带货这么火,如何在小程序中实现视频通话及直播互动功能?
- sgfdgfadsg
- Git学习笔记之时光穿梭机
- buildroot快速入门
- pytorch:交叉熵(cross entropy)
- 如何理解云安全态势管理(CSPM)
- 火狐的搜索引擎_将Firefox搜索引擎整理到文件夹中
热门文章
- innerText 与 innerHtml的区别 (一)
- “好奇号”现在距离地球有多远?
- 【MYSQL】foreign key 外键约束(详解)
- 2023年“科学探索奖”申报启动及指南
- 【C++初阶】C++入门一(命名空间、输入输出、缺省参数、函数重载等)
- 网站被黑了该如何解决?网站被黑了怎么办
- JSON 的文档数据库 RedisJson 介绍
- Qt/C++ 加载数据库出现qt_sql_default_connection提醒
- 绍兴14岁女孩被德云社录取,她究竟有什么来历呢?
- CouchDB小全 --- 网上很棒的介绍CouchDB的博文