新手开始学习,跟着网上教程敲出一个学生管理系统

主要学习与熟悉:1、学习如何使用函数封装实现系统功能

2、熟悉对txt文本文件的增删改查

3、熟悉对字典、列表、字符串的处理

目录

一、需求分析

二、系统功能结构——学生信息系统的7大模块

三、系统业务流程

四、开发环境

五、主函数的业务流程

六、实现代码如下(只是实现了主流程,很多细节上的东西还需要调整)

七、实现效果如下

一、需求分析

学生管理系统应具备的功能

  1. 添加学生及成绩信息
  2. 将学生信息保存到文件中
  3. 修改和删除学生信息
  4. 查询学生信息
  5. 根据学生成绩进行排序
  6. 统计学生的总分

二、系统功能结构——学生信息系统的7大模块

  1. 录入学生信息
  2. 查找学生信息
  3. 删除学生信息
  4. 修改学生信息
  5. 学生成绩排名模块
  6. 统计学生总人数模块
  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实现一个学生管理系统相关推荐

  1. 用python做一个学生管理系统

    最终效果如上 下面开始教程: 首先画一个菜单,没什么好说的 def menu():print('=======================学生信息管理系统===================== ...

  2. 用 Python 做个学生管理系统,并打包成exe文件

    由于Python都会了,学校教的确实基础,平时就没怎么去上课,让美女老师天天脑壳痛,这不快毕业了,让我做一个学生管理系统出来,还要打包成exe发给她,她就不追究我不上课的问题了~ 话说这能难倒我吗?赶 ...

  3. 快毕业了,老师说用Python做个学生管理系统打包成exe文件发给她,就不追究我旷课的事情了,这不简简单单?

    文章目录 一.准备工作 二.代码流程 三.打包exe可执行程序 由于Python都会了,学校教的确实基础,平时就没怎么去上课,让美女老师天天脑壳痛,这不快毕业了,让我做一个学生管理系统出来,还要打包成 ...

  4. 用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)(二)

    本文上接用JDBC写一个学生管理系统(添加.删除.修改.查询学生信息) 这次主要是对上一文中的查询方法做一下调整,用创建内部类的方法来实现学生信息的查询. 我们先要定义一个接口IRowMapper: ...

  5. 用JDBC写一个学生管理系统(添加、删除、修改、查询学生信息)

    首先需要用Navicat Premium创建一个student表 用Java连接好MySQL数据库(需要copy一个mysql-connector-java-5.1.44-bin.jar包,该包可在网 ...

  6. C语言程序设计——设计一个学生管理系统(完美运行的程序(●‘◡‘●))

    目录 一.设计目的 二.原理及相关功能 (一)基本框架 (二)功能实现 三.完整代码 四.运行结果 一.设计目的 通过c语言设计一个学生管理系统,要求有直观的主菜单,可以录入学生的信息,实现添加学生信 ...

  7. 名片管理系统python详解_详解Python做一个名片管理系统

    详解Python做一个名片管理系统 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  详解Python做一个名片管理系统.txt ] (友情提示:右键点上行txt文 ...

  8. 使用Qt5编写一个学生管理系统

    程序使用Qt5编写了一个学生管理系统 首先介绍一下项目框架,项目包含一个主窗口mainwindow Mainwindow使用的就是最常见的Mainwindow带对话框的,带标题栏等等的窗口 两个子窗口 ...

  9. 创建一个学生管理系统数据库_建立一个问答系统

    创建一个学生管理系统数据库 Over three months we had the chance to design and implement a question answering proje ...

最新文章

  1. 转 mac svn用法
  2. 视频目标检测跟踪--Detect to Track and Track to Detect
  3. BC #49 1001 Untitled
  4. libstrophe 安装
  5. python代码模块与模块之间空1行_Day006|Python语法基础
  6. 鼠标经过替换背景和文字
  7. Android学习总结00之废话
  8. CCF201412-1 门禁系统(100分)
  9. matlab2c使用c++实现matlab函数系列教程-deconv函数
  10. iOS 开发中常见的设计模式
  11. 站在5G潮头 爱立信如何重描金字招牌 | MWC 2019
  12. UniWebView3.8
  13. 希尔伯特空间、欧几里德空间
  14. 直播带货这么火,如何在小程序中实现视频通话及直播互动功能?
  15. sgfdgfadsg
  16. Git学习笔记之时光穿梭机
  17. buildroot快速入门
  18. pytorch:交叉熵(cross entropy)
  19. 如何理解云安全态势管理(CSPM)
  20. 火狐的搜索引擎_将Firefox搜索引擎整理到文件夹中

热门文章

  1. innerText 与 innerHtml的区别 (一)
  2. “好奇号”现在距离地球有多远?
  3. 【MYSQL】foreign key 外键约束(详解)
  4. 2023年“科学探索奖”申报启动及指南
  5. 【C++初阶】C++入门一(命名空间、输入输出、缺省参数、函数重载等)
  6. 网站被黑了该如何解决?网站被黑了怎么办
  7. JSON 的文档数据库 RedisJson 介绍
  8. Qt/C++ 加载数据库出现qt_sql_default_connection提醒
  9. 绍兴14岁女孩被德云社录取,她究竟有什么来历呢?
  10. CouchDB小全 --- 网上很棒的介绍CouchDB的博文