项目1-学生信息管理系统

1.需求分析

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

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

2.系统设计

系统功能结构,学生信息管理系统的7大模块:

  • 录入学生信息模块
  • 查找学生信息模块
  • 删除学生信息模块
  • 修改学生信息模块
  • 学生成绩排名模块
  • 统计学生总人数模块
  • 显示全部学生信息模块

 3.主函数设计

创建了一个,Student_Information_main.py的文件作为主程序。将其他各个功能作为模块使用,通过主程序调用各个功能模块来实现相应功能;

import Student_Information_exit
import Student_Information_insert
import Student_Information_delete
import Student_Information_modify
import Student_Information_search
import Student_Information_total
import Student_Information_show
import Student_Information_sort

def student_information_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 student_information_main():
    while True:
        student_information_menum()
        try:
            choice = int(input("请选择功能菜单编号....:"))
            if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
                pass
        except:
            print("你输入有误!!!!!")
        else:
            if choice == 0:
                #调用退出系统模块
                Student_Information_exit.student_information_exit()
            elif choice == 1:
                #调用录入学生信息系统模块
                Student_Information_insert.student_information_insert()
            elif choice == 2:
                Student_Information_search.student_information_search()
            elif choice == 3:
                #调用删除学生信息模块
                Student_Information_delete.student_information_delete()
            elif choice == 4:
                #调用修改学生信息模块
                Student_Information_modify.student_information_modify()
            elif choice == 5:
                Student_Information_sort.student_information_sort()
            elif choice == 6:
                Student_Information_total.student_information_total()
            elif choice == 7:
                Student_Information_show.student_information_show()

if __name__ == "__main__":
    student_information_main()

 

3.1退出程序模块

创建Student_Information_exit文件,实现退出系统功能

import sys
def student_information_exit():
    answer = input("你确定要退出系统吗?y/n")
    if answer == 'y' or answer == 'Y':
        print("谢谢你的使用")
        sys.exit()

3.2录入学生信息模块

从控制台中录入学生信息,并把他们的信息保存到文件中。

具体实现:

  • save(student)函数,用于将学生信息保存到文件中
  • insert()函数,用于录入学生信息学生

创建Student_Information_insert文件,实现学生信息录入和保存到文件的功能,代码如下:

filename = 'student.txt'

def student_information_insert():
    #定义学生录入信息函数
    student_information_list = []
    while True:
        id = input("请输入学生id(如:1001):")
        if not id:
            print("你输入的有误,请重新输入!")
            continue
        name = input("请输入学生姓名:")
        if not name:
            print("你输入的有误,请重新输入!")
            continue
        try:
            english = input("请输入英语成绩:")
            math = input("请输入数学成绩:")
            chinese = input("请输入语文成绩:")
        except:
            print("你输入的有误,请重新输入!")
            continue

        student_information = {'id':id,'name':name,'english':english,'math':math,'chinese':chinese}
        student_information_list.append(student_information)

        answer = input("你确认要退出输入吗?y/n")
        if answer == 'y' or answer == 'Y':
            break
        else:
            continue
    #insert函数调用save函数
    student_information_save(student_information_list)
    print("学生信息录入完毕!!!")

def student_information_save(lst):
    #如果文件存储则追加,如果不存在则创建写入
    try:
        stu_txt = open(filename,'a+')
    except:
        stu_txt = open(filename,'w')
    for item in lst:
        stu_txt.write(str(item) + '\n')
    stu_txt.close()

3.3 删除学生信息模块

从控制台中录入学生ID,到磁盘文件中找到相应学生信息,并将其删除。

创建Student_Information_delete文件,实现学生信息删除功能,代码如下:

import os
filename = 'student.txt'

def student_information_delete():
    while True:
        student_id = input("请输入要删除的学生ID:")
        if student_id != '':
            if os.path.exists(filename):
                with open(filename,'r') as student_file:
                    student_list = student_file.readlines()  #读取student.txt文件并赋值给student_list变量,是一个列表形式
            else:
                student_list = []
            flag = False #标记是否为删除
            if student_list:
                with open(filename,'w') as write_student_file:
                    d={}
                    for item in student_list:
                        d = dict(eval(item)) #将字符串转成字典
                        if d['id'] != student_id: #通过获取字典id与用户输入id进行比较
                            write_student_file.write(str(d) + '\n')
                        else:
                            flag = True
                    if flag:
                        print(f"ID为{student_id}的学生信息已经删除")
                    else:
                        print(f"没有找到ID为{student_id}的学生信息")
        else:
            print("无学生信息!!")
            break

        answer = input("是否还继续删除?y/n")
        if answer == 'y' or answer == 'Y':
            continue
        else:
            break

3.4修改学生信息模块

从控制台中录入学生ID,到磁盘文件中找到相应学生信息,并将其修改。

创建Student_Information_modify文件,实现学生信息删除功能,代码如下:

import os
filename = 'student.txt'


def student_information_modify():
    while True:
        student_id = input("请输入要修改的学生ID:")
        if student_id != '':
            if os.path.exists(filename):
                with open(filename, 'r') as student_file:
                    student_list = student_file.readlines()  # 读取student.txt文件并赋值给student_list变量,是一个列表形式
            else:
                return

        if student_list:
            with open(filename, 'w') as write_student_file:
                d = {}
                for item in student_list:
                    d = dict(eval(item))  # 将字符串转成字典
                    if d['id'] == student_id:  # 通过获取字典id与用户输入id进行比较
                        print("找到了学生信息,可以修改他的相关信息!")
                        try:
                            d['name'] = input("请输入学生姓名:")
                            d['english'] = input("请输入英语成绩:")
                            d['math'] = input("请输入数学成绩:")
                            d['chinese'] = input("请输入语文成绩:")
                        except:
                            print("输入有误请重新输入!!!")
                        write_student_file.write(str(d) + '\n')
        else:
            print("没有学员信息!!!")

        answer = input("是否还继续修改?y/n")
        if answer == 'y' or answer == 'Y':
            continue
        else:
            break

3.5查询学生信息功能

从控制台中输入学生ID或姓名,到磁盘文件中找到对应学生信息

创建Student_Information_search文件,实现学生信息查询,代码如下:

import os
filename = 'student.txt'

def student_information_search():
    query_list = []
    while True:
        id = ''
        name = ''
        if os.path.exists(filename):
            model = input("按ID查找请输入1,按姓名查找请输入2: ")
            if model == '1':
                id = input("请输入学员ID:")
            elif model == '2':
                name = input("请输入学员姓名")
            else:
                print("你输入的有误,请重新输入!!!")
            with open(filename,'r') as student_file:
                    student_list = student_file.readlines()  #读取student.txt文件并赋值给student_list变量,是一个列表形式
                    for item in student_list:
                        d = dict(eval(item)) #将字符串转成字典
                        if id != '':
                            if d['id'] == id:
                                query_list.append(d)
                        elif name != '':
                            if d['name'] == name:
                                query_list.append(d)

            #显示查询结果
            show_student(query_list)
            #清空列表
            query_list.clear()

            answer = input("是否还继续查找学生信息?y/n")
            if answer == 'y' or answer == 'Y':
                continue
            else:
                break

def show_student(lst):
    if len(lst) == 0:
        print("没有学员信息....")
    #定义标题显示格式
    format_tile = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^9}\t{:^6}'
    print(format_tile.format('ID','姓名','英语成绩','数学成绩','语文成绩','总成绩'))
    #定义内容显示格式
    format_data = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^14}\t{:^13}'
    for item in lst:
        print(format_data.format(item['id'],item['name'],item['english'],item['math'],item['chinese'],int(item['english'])+int(item['math'])+int(item['chinese'])))

3.6统计学生总人数

根据保存学生信息文件,统计学生人数,中心思想就是判断列表长度

创建Student_Information_total文件,实现学生信息查询,代码如下

import os
filename = 'student.txt'

def student_information_total():
    if os.path.exists(filename):
        with open(filename,'r') as student_file:
            student_list = student_file.readlines()  #读取student.txt文件并赋值给student_list变量,是一个列表形式
            if student_list:
                print(f"一共有{len(student_list)}名学生")
            else:
                print("还没有录入学员信息....")
    else:
        print("学员信息暂未保存......")

3.7显示所有学生信息

创建Student_Information_show文件,实现展示学生信息,代码如下

import os
filename = 'student.txt'

def student_information_show():
    student = []
    if os.path.exists(filename):
        with open(filename,'r') as student_file:
            student_list = student_file.readlines()  #读取student.txt文件并赋值给student_list变量,是一个列表形式

            for item in student_list:
                student.append(eval(item))
            if student:
                show_student(student)

def show_student(lst):
    if len(lst) == 0:
        print("没有学员信息....")
    # 定义标题显示格式
    format_tile = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^9}\t{:^6}'
    print(format_tile.format('ID', '姓名', '英语成绩', '数学成绩', '语文成绩', '总成绩'))
    # 定义内容显示格式
    format_data = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^14}\t{:^13}'
    for item in lst:
        print(format_data.format(item['id'], item['name'], item['english'], item['math'], item['chinese'],int(item['english']) + int(item['math']) + int(item['chinese'])))

3.8成绩排序

主要是针对英语,数学,语文,总成绩进行升序降序排序

创建Student_Information_sort文件,实现学生信息排序,代码如下

import os
import Student_Information_show
filename = 'student.txt'

def student_information_sort():
    Student_Information_show.student_information_show()
    if os.path.exists(filename):
        with open(filename,'r') as student_file:
            student_list = student_file.readlines()  #读取student.txt文件并赋值给student_list变量,是一个列表形式
        new_student_list = []
        for item in student_list:
            d = dict(eval(item))
            new_student_list.append(d)
    else:
        return
    asc_or_desc = input("请选择‘0’升序或‘1’降序:")
    if asc_or_desc == '0':
        asc_or_desc_bool = False
    elif asc_or_desc == '1':
        asc_or_desc_bool = True
    else:
        print("输入有误,请重新输入")
        student_information_sort()

    model = input("请选择排序方式,‘1.按英语排序’,‘2.按数学排序’,‘3.按语文排序’,‘0.按总成绩排序’")
    if model == '1':
        new_student_list.sort(key=lambda x: int(x['english']),reverse=asc_or_desc_bool)
    elif model == '2':
        new_student_list.sort(key=lambda x: int(x['math']), reverse=asc_or_desc_bool)
    elif model == '3':
        new_student_list.sort(key=lambda x: int(x['chinese']), reverse=asc_or_desc_bool)
    elif model == '0':
        new_student_list.sort(key=lambda x: int(x['chinese'])+int(x['english'])+int(x['math']), reverse=asc_or_desc_bool)
    else:
        print("输入有误,请重新输入!!!!!")
        student_information_sort()

    show_student(new_student_list)

def show_student(lst):
    if len(lst) == 0:
        print("没有学员信息....")
    # 定义标题显示格式
    format_tile = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^9}\t{:^6}'
    print(format_tile.format('ID', '姓名', '英语成绩', '数学成绩', '语文成绩', '总成绩'))
    # 定义内容显示格式
    format_data = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^14}\t{:^13}'
    for item in lst:
        print(format_data.format(item['id'], item['name'], item['english'], item['math'], item['chinese'],int(item['english']) + int(item['math']) + int(item['chinese'])))

4.项目打包生成exe可执行文件

  1. 在线安装PyInstaller模块
# pip install PyInstaller

   2. 执行打包操作

pyinstaller -F 主程序python文件

 

posted @ 2023-07-07 16:41  摩天居士-谢烟客  阅读(65)  评论(0编辑  收藏  举报