栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python学生信息管理系统

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python学生信息管理系统

学生成绩管理系统的设计与实现

一、 课题内容和要求
1.目的:
通过二周程序设计的实践,使学生熟悉Python开发环境和编程方法, 在程序设计过程中,运用软件工程的概念和方法,进系统进行分析与设计,通过编码和调试,完成课题的任务要求。
2. 开发环境和工具
(1) 环境
开发环境 Windows /Linux发行版
(2) 编程语言
Python
3. 功能要求:

    数据结构:
    本课题涉及三个文件,分别用于存放学生、课程和选课信息,基本结构如下
    (1) 学生文件 student.dat

学号 姓名 年龄 性别
S1 WANG 20 M
S2 LIU 19 F
S3 CHEN 22 M
S4 WU 19 M
S5 LI 21 F

(2) 课程文件 course.dat

课程号 课程名 学时 学分 课程性质
C2 MATHS 64 4 基础
C4 PHYSICS 48 3 基础
C3 C 32 2 专业基础
C1 DB 48 3 专业
C5 0S 32 2 专业

(3) 选课文件sc.dat
学号 课程号 成绩
S1 C2 89
S2 C1 70
S3 C2
S1 C5 80
S4 C3
S5 C4 78
S2 C4 79

    宏能要求:
    四、功能要求
    (1) 信息录入,包括:学生、课程和选课信息
    (2) 信息查询,包括:学生、课程和选课信息
    (3) 信息修改, 包括:学生、课程和选课信息
    (4) 统计每门课程的最高、最低和平均成绩、
    (5) 统计某门课程考试成绩各分数段的人数
    (6) 计算每门考试课程的方差。

二、需求分析
使用结构化/面向对象方法对系统进行分析与设计。

分别对三个文件录入信息
能分别查询三个文件的信息
分别修改三个文件的信息
计算选中的某门课程的最大值 最小值 平均值和方差
根据获取到的某门课程的分数来对分数进行分段
三、概要设计
总体设计使用模块图
详细设计使用程序流图/盒图

import os

filename1 = 'student.text'
filename2 = 'course.text'
filename3 = 'sc.text'

#函数
def main():
    #无限循环
    while True:
        #调用显示主菜单
        menm()
        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('谢谢你的使用')
                    break  #退出系统
                else:
                    continue
            elif choice == 1:
                insert()  # 了录入学生信息
            elif choice == 2:
                search()
            elif choice == 3:
                modify()
            elif choice == 4:
                sort()  # 排序
            elif choice == 5:
                 total()
            elif choice == 6:
                 show()  # 了录入学生信息
#菜单 就是一个显示页面 引导用户使用
def menm():
    print('============================学生信息管理系统=================================')
    print('-------------------------------功能菜单-------------------------------------')
    print('tttttt1.录入学生信息')
    print('tttttt2.查找学生信息')
    print('tttttt3.修改学生信息')
    print('tttttt4.统计每门课程的最高、最低和平均成绩以及计算对应考试课程的方差')
    print('tttttt5.统计某门课程考试成绩各分数段的人数')
    print('tttttt0.退出')
    print('------------------------------------------------------------------------')
def insert():
    while True:
        print('1.录入学生文件n')
        print('2.录入课程文件n')
        print('3.录入选课文件n')
        choice = int(input('请选择 输入0返回主界面'))
        if choice in [0, 1, 2, 3,]:
            if choice == 0:
                answer = input('确定要退出录入吗?y/n')
                if answer == 'y' or answer == 'Y':
                    print('已退出录入')
                    break  # 退出系统
                else:
                    continue
            if choice==1:
                insert1()
            elif choice == 2:
                insert2()  # 了录入学生信息
            elif choice == 3:
                insert3()
def insert1():
    # 创建一个空列表 用来存储输入的信息
    student_list = []
    while True:
        id = input('请输入学号ID(s1)')
        if not id:
            break
        name = input('请输入姓名:')
        if not name:
            break
        sex = input('请输入性别:')
        if not sex:
            break
        # 输入异常处理
        try:
            age = int(input('请输入年龄'))
        except:
            print('输入无效,不是整数类型,请重新输入')
            continue
            # 将录入的学生信息保存到字典中
        student = {'学号': id, '姓名': name, '性别': sex, '年龄': age}
        # 将录入的学生信息添加到列表当中
        student_list.append(student)
        answer = input('是否继续添加?y/nn')
        if answer == 'y':
            continue
        else:
            break
    # 调用函数保存 传入列表
    save1(student_list)
    print('学生信息录入完毕')
def insert2():
    student_list = []
    while True:
        id = input('请输入课程号')
        if not id:
            break
        name = input('请输入课程名:')
        if not name:
            break
        xingzhi = input('请输入课程性质:')
        if not xingzhi:
            break

        try:
            xueshi = int(input('请输入学时'))
            xuefen = int(input('请输入学分'))
        except:
            print('输入无效,不是整数类型,请重新输入')
            continue
            # 将录入的学生信息保存到字典中
        student = {'课程号': id, '课程名': name, '学时': xueshi, '学分': xuefen, '课程性质':xingzhi}
        student_list.append(student)
        answer = input('是否继续添加?y/nn')
        if answer == 'y':
            continue
        else:
            break
    # 调用函数保存
    save2(student_list)
    print('学生信息录入完毕')
def insert3():
    student_list = []
    while True:
        id = input('请输入学号')
        if not id:
            break
        kechenghao = input('请输入课程号:')
        if not kechenghao:
            break

        try:
            chengji = int(input('请输入成绩'))
        except:
            print('输入无效,不是整数类型,请重新输入')
            continue
            # 将录入的学生信息保存到字典中
        student = {'学号': id, '课程号': kechenghao,'成绩': chengji}
        student_list.append(student)
        answer = input('是否继续添加?y/nn')
        if answer == 'y':
            continue
        else:
            break
    # 调用函数保存
    save3(student_list)
    print('学生信息录入完毕')
def save1(lst):
    try:
        # 以追加的模式打开
        stu_txt = open(filename1, 'a', encoding='utf-8')
    except:
        # 没有这个文件的时候 就用写入的方式打开
        stu_txt = open(filename1, 'w', encoding='utf-8')
        #遍历lst 转换成字符型写入
    for item in lst:
        stu_txt.write(str(item)+'n')
        #将打开的文件关闭
    stu_txt.close()
def save2(lst):
    try:
        stu_txt = open(filename2, 'a', encoding='utf-8')
    except:
        stu_txt = open(filename2, 'w', encoding='utf-8')
    for item in lst:
        stu_txt.write(str(item)+'n')
    stu_txt.close()
def save3(lst):
    try:
        stu_txt = open(filename3, 'a', encoding='utf-8')
    except:
        stu_txt = open(filename3, 'w', encoding='utf-8')
    for item in lst:
        stu_txt.write(str(item)+'n')
    stu_txt.close()
def search():
    while True:
        print('1.查询学生文件n')
        print('2.查询课程文件n')
        print('3.查询选课文件n')
        choice = int(input('请选择 输入0返回主界面'))
        if choice in [0, 1, 2, 3,]:
            if choice == 0:
                answer = input('确定要退出查找吗?y/n')
                if answer == 'y' or answer == 'Y':
                    print('已退出查询')
                    break  # 退出系统
                else:
                    continue
            if choice == 1:
                search1()
            elif choice == 2:
                search2()  # 了录入学生信息
            elif choice == 3:
                search3()
def search1():
    student_query = []
    while True:
        id = ''
        name = ''
        if os.path.exists(filename1):
            mode = input('按ID查找请输入1,按姓名查找请输入2')
            if mode == '1':
                id = input('请输入学生ID')
            elif mode == '2':
                name = input('请输入学生的姓名')
            else:
                print('您输入的信息有误,请重新输入')
                search1()
            with open(filename1, 'r', encoding='utf-8') as rfile:
                student = rfile.readlines()
                for item in student:
                    d = dict(eval(item))
                    if id!='':
                        if d['学号'] == id:
                            student_query.append(d)
                    elif name!='':
                        if d['姓名'] == name:
                            student_query.append(d)
            # 显示查询结果
            for index in range(len(student_query)):
                print(student_query[index],'n')
            # 清空列表
            student_query.clear()
            answer = input('是否要继续查询?y/nn')
            if answer == 'y':
                continue
            else:
                break
        else:
            print('暂未保存学生信息')
            return
def search2():
    student_query = []
    while True:
        id = ''
        name = ''
        if os.path.exists(filename2):
            mode = input('按课程号查找请输入1,按课程名查找请输入2')
            if mode == '1':
                id = input('请输入学生ID')
            elif mode == '2':
                name = input('请输入学生的姓名')
            else:
                print('您输入的信息有误,请重新输入')
                search2()
            with open(filename2, 'r', encoding='utf-8') as rfile:
                student = rfile.readlines()
                for item in student:
                    d = dict(eval(item))
                    if id!='':
                        if d['课程号'] == id:
                            student_query.append(d)
                    elif name!='':
                        if d['课程名'] == name:
                            student_query.append(d)
            # 显示查询结果
            for index in range(len(student_query)):
                print(student_query[index], 'n')
            # 清空列表
            student_query.clear()
            answer = input('是否要继续查询?y/nn')
            if answer == 'y':
                continue
            else:
                break
        else:
            print('暂未保存学生信息')
            return
def search3():
    student_query = []
    while True:
        id = ''
        name = ''
        if os.path.exists(filename3):
            mode = input('按学号查找请输入1,按课程号查找请输入2')
            if mode == '1':
                id = input('请输入学生学号')
            elif mode == '2':
                name = input('请输入学生的课程号')
            else:
                print('您输入的信息有误,请重新输入')
                search3()
            with open(filename3, 'r', encoding='utf-8') as rfile:
                student = rfile.readlines()
                for item in student:
                    d = dict(eval(item))
                    if id!='':
                        if d['学号'] == id:
                            student_query.append(d)
                    elif name!='':
                        if d['课程号'] == name:
                            student_query.append(d)
            # 显示查询结果
            for index in range(len(student_query)):
                print(student_query[index],'n')            # 清空列表
            student_query.clear()
            answer = input('是否要继续查询?y/nn')
            if answer == 'y':
                continue
            else:
                break
        else:
            print('暂未保存学生信息')
            return
def modify():
    while True:
        print('1.修改学生文件n')
        print('2.修改课程文件n')
        print('3.修改选课文件n')
        choice = int(input('请选择 输入0返回主界面'))
        if choice in [0, 1, 2, 3,]:
            if choice == 0:
                answer = input('确定要退出查找吗?y/n')
                if answer == 'y' or answer == 'Y':
                    print('已退出修改')
                    break  # 退出系统
                else:
                    continue
            if choice == 1:
                modify1()
            elif choice == 2:
                modify2()  # 了录入学生信息
            elif choice == 3:
                modify3()
def modify1():
    show()
    # 判断文件是否存在
    if os.path.exists(filename1):
        with open(filename1, 'r', encoding='utf-8') as rfile:
            # 打开问文件 读取信息 存入列表
            student_old = rfile.readlines()
    else:
        # 不存在就结束函数
        return
    student_id = input('请输入要修改的学员的ID')
    with open(filename1, 'w', encoding='utf-8') as wfile:
        for item in student_old:
            # 把读取到的字符串转换成字典
            d = dict(eval(item))
            if d['学号']==student_id:
                print('找到学生的信息,可以修改他的相关信息了!')
                while True:
                    try:
                        d['姓名'] = input('请输入姓名')
                        d['性别'] = input('请输入性别')
                        d['年龄'] = input('请输入年龄')
                    except:
                        print('您的输入有误,请重新输入!!!')
                    else:
                        break
                wfile.write(str(d)+'n')
                print('修改成功')
            else:
                wfile.write(str(d)+'n')
        answer = input('是否继续修改其他学生信息?y/nn')
        if answer == 'y':
            modify1()
def modify2():
    show()
    if os.path.exists(filename2):
        with open(filename2, 'r', encoding='utf-8') as rfile:
            student_old = rfile.readlines()
    else:
        return
    student_id = input('请输入要修改的课程号')
    with open(filename2, 'w', encoding='utf-8') as wfile:
        for item in student_old:
            d = dict(eval(item))
            if d['课程号']==student_id:
                print('找到学生的信息,可以修改他的相关信息了!')
                while True:
                    try:
                        d['课程名'] = input('请输入课程名')
                        d['学时'] = input('请输入学时')
                        d['学分'] = input('请输入学分')
                        d['课程性质'] = input('请输入课程性质')
                    except:
                        print('您的输入有误,请重新输入!!!')
                    else:
                        break
                wfile.write(str(d)+'n')
                print('修改成功')
            else:
                wfile.write(str(d)+'n')
        answer = input('是否继续修改其他学生信息?y/nn')
        if answer == 'y':
            modify2()
def modify3():
    show()
    if os.path.exists(filename3):
        with open(filename3, 'r', encoding='utf-8') as rfile:
            student_old = rfile.readlines()
    else:
        return
    student_id = input('请输入要修改的学员的ID')
    with open(filename3, 'w', encoding='utf-8') as wfile:
        for item in student_old:
            d = dict(eval(item))
            if d['学号']==student_id:
                print('找到学生的信息,可以修改他的相关信息了!')
                while True:
                    try:
                        d['课程号'] = input('请输入课程号')
                        d['成绩'] = input('请输入成绩')
                    except:
                        print('您的输入有误,请重新输入!!!')
                    else:
                        break
                wfile.write(str(d)+'n')
                print('修改成功')
            else:
                wfile.write(str(d)+'n')
        answer = input('是否继续修改其他学生信息?y/nn')
        if answer == 'y':
            modify3()
def sort():
    student_query = []
    while True:
        id = ''
        if os.path.exists(filename3):
            id = input('请输入要查询的课程号')
            with open(filename3, 'r', encoding='utf-8') as rfile:
                student = rfile.readlines()
                for item in student:
                    d = dict(eval(item))
                    if id != '':
                        if d['课程号']==id:
                            student_query.append(d)
                            # 显示查询结果
                            if student_query[0]!='':
                                L = ()
                                p = 0
                                for item in student_query:
                                    i = int(item.get('成绩'))
                                    p = i+p
                                    x=item.get('成绩')
                                    h = (x,)
                                    L = (L) + (h)
                                    print('执行过了')
                    else:
                        print('请不要输入空值')
                        sort()
            # 清空列表
                if len(student_query)==0:
                    print('没找到对应课程')
                    sort()
                else:
                    print('本课程最高分数为', max(L))
                    print('本课程最低分数为', min(L))
                    print('平均', p / len(L))
                    s = 0
                    for index in range(len(L)):
                        n = float(p / len(L)) - float(L[index])
                        s = n * n + s
                        s = float(s)
                    print('方差为', s)
                    del L


                answer = input('是否要继续查询?y/nn')
                if answer == 'y':
                    sort()
                else:
                    break
        else:
            print('暂未保存学生信息')
            return
def total():
    student_query = []
    while True:
        id = ''
        if os.path.exists(filename3):
            id = input('请输入要查询的课程号')
            with open(filename3, 'r', encoding='utf-8') as rfile:
                student = rfile.readlines()
                for item in student:
                    d = dict(eval(item))
                    if id != '':
                        if d['课程号'] == id:
                            student_query.append(d)
                            # 显示查询结果
                            if student_query[0] != '':
                                L = ()
                                T = ()
                                p = 0
                                for item in student_query:
                                    if int(item.get('成绩'))>59:
                                        x = item.get('成绩')
                                        h = (x,)
                                        L = (L) + (h)
                                    else:
                                        x = item.get('成绩')
                                        h = (x,)
                                        T = (T) + (h)
                    else:
                        print('请不要输入空值')
                        total()
                # 清空列表
                if len(student_query) == 0:
                    print('没找到对应课程')
                    total()
                else:
                    print('不及格的有',T)
                    print('及格的有', L)

                    del L

                answer = input('是否要继续查询?y/nn')
                if answer == 'y':
                    total()
                else:
                    break
        else:
            print('暂未保存学生信息')
            return
def show():
    pass

#以主程序的形式进行
if __name__=='__main__':
    main()

python实训报告

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757994.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号