用python来实现简单的学生信息管理系统

用python来实现简单的学生信息管理系统

                        1.功能介绍

                        2.使用步骤

                        3.模块介绍

                        4.具体代码实现

                        5.各模块运行效果

                        6.源码

一、功能介绍

含有以下功能:

0.退出系统

1.录入学生信息 

2.查找学生信息

3.删除学生信息

4.修改学生信息

5.将学生进行排序

6.统计学生总人数

7.显示全部学生信息

二、使用步骤

1.开始时会显示功能界面,只要按数字选择功能即可

2.输入数字

3.按照提示操作即可

三、模块介绍

1.定义主函数:def main()

2.显示功能界面:def menu()

3.录入学生信息 :def insert():

4.查找学生信息:def search():

5.删除学生信息:def delete():

6.修改学生信息:def modify():

7.将学生进行排序:def sort():

8.统计学生总人数:def total():

9.显示全部学生信息:def show():

四、具体代码实现

1.定义主函数:(退出系统包含在内)用python来实现简单的学生信息管理系统_第1张图片

2.功能界面:用python来实现简单的学生信息管理系统_第2张图片 

3. 录入学生信息 :用python来实现简单的学生信息管理系统_第3张图片

 4.查找学生信息:用python来实现简单的学生信息管理系统_第4张图片

                                                                     5.删除学生信息:用python来实现简单的学生信息管理系统_第5张图片

 6.修改学生信息:用python来实现简单的学生信息管理系统_第6张图片

                                                                7.将学生进行排序:用python来实现简单的学生信息管理系统_第7张图片

8.统计学生总人数:用python来实现简单的学生信息管理系统_第8张图片

9.显示全部学生信息:用python来实现简单的学生信息管理系统_第9张图片 

五、各模块运行效果

0.退出系统用python来实现简单的学生信息管理系统_第10张图片

1.录入学生信息 用python来实现简单的学生信息管理系统_第11张图片

2.查找学生信息用python来实现简单的学生信息管理系统_第12张图片

3.删除学生信息用python来实现简单的学生信息管理系统_第13张图片

4.修改学生信息用python来实现简单的学生信息管理系统_第14张图片

5.将学生进行排序用python来实现简单的学生信息管理系统_第15张图片

6.统计学生总人数用python来实现简单的学生信息管理系统_第16张图片

7.显示全部学生信息用python来实现简单的学生信息管理系统_第17张图片

六、源码

filename = 'student.txt'#创建文件filename用以存储学习信息
import os#导入os模块


def main():  # 定义主函数
    while True:  # while中的语句将被反复执行,直到条件式为False才会退出循环
        menu()  # 调用menu()函数
        choice = int(input('请选择功能:'))
        if choice in [0, 1, 2, 3, 4, 5, 6, 7]:  # 总条件语句,不满足条件直接输出else
            if choice == 0:
                answer = input('此举动将退出系统,是否确认?y/n')
                if answer == 'y' or answer == 'Y':  # 确保小写和大写都被识别
                    print('感谢您的使用!')
                    break
                else:
                    continue
            elif choice == 1:
                insert()  # 调用insert()函数
            elif choice == 2:
                search()  # 调用search()函数
            elif choice == 3:
                delete()  # 调用delete()函数
            elif choice == 4:
                modify()  # 调用modify()函数
            elif choice == 5:
                sort()  # 调用sort()函数
            elif choice == 6:
                total()  # 调用total()函数
            elif choice == 7:
                show()  # 调用show()函数
        else:
            print('对不起,无此功能')
            break


def menu():  # 定义menu()函数
    print('**********************学生信息管理系统**************************')
    print('--------------------------功能菜单----------------------------')
    print('\t\t\t\t\t\t1.录入学生信息')
    print('\t\t\t\t\t\t2.查找学生信息')
    print('\t\t\t\t\t\t3.删除学生信息')
    print('\t\t\t\t\t\t4.修改学生信息')
    print('\t\t\t\t\t\t5.将学生信息进行排序')
    print('\t\t\t\t\t\t6.统计学生总人数')
    print('\t\t\t\t\t\t7.显示全部学生信息')


def insert():
    student_list = []
    while True:
        id = input('请输入学生id:')
        if not id:  # 即ID的布尔值为False,比如输入了一个空字符串,那么便不满足条件式,直接break
            break
        name = input('请输入学生姓名:')
        if not name:  # 与ID一样道理
            break
        try:  # try...except语句可以防止程序因操作失误而崩溃报错,如果程序错误,将会执行except语句,不会影响程序的运行
            english = int(input('请输入学生的英语成绩:'))
            python = int(input('请输入学生的python成绩:'))
            java = int(input('请输入学生的java成绩:'))
        except:
            print('输入无效,不是int类型,请重新输入')
            continue
        student = {'id': id, 'name': name, 'english': english, 'python': python, 'java': java}  # 将学生信息放入字典中
        student_list.append(student)  # 将存放信息的字典添加到列表中
        answer = input('是否继续添加?y/n')
        if answer == 'y':
            continue
        else:
            break
    save(student_list)  # 利用save()函数保存录入的学生信息
    print('学生信息录入完毕')


def save(lst):  # 定义save()函数
    stu_txt = open(filename, 'a', encoding='utf_8')  # ’a‘为追加信息 add,encoding='utf_8'可以防止中文乱码
    for item in lst:
        # 如果下面语句不加\n换行,txt里的列表会挤在一起
        stu_txt.write(str(item) + '\n')  # 如果不对item使用str()函数,将会出现以下错误:TypeError: write() argument must be str, not dict
    stu_txt.close()


def search():
    student_query=[]#列表可以存储同名元素
    while True:
        id=''
        name=''#申明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('输入有误,请重新输入:')
                search()#调用search()函数,输入错误之后可以重新输入
            with open(filename,'r',encoding='utf_8')as rfile:#定义一个rfile去暂时存放目标文件中信息
                student=rfile.readlines()#读取数据
                for item in student:#遍历student中元素
                    d=dict(eval(item))#创建一个字典储存student中元素
                    if id!='':#如果id不为空值,程序才可接着运行
                        if d['id']==id:#如果id与你要查找的学生id符合
                            student_query.append(d)#将查找的学生信息添加至新创建的列表中
                    elif name!='':#与id原理相同
                        if d['name']==name:
                            student_query.append(d)
            show_student(student_query)#展示查询结果
            student_query.clear()#第二次查找 防止列表当中有元素,所以要清空列表
            answer=input('是否继续查找?')
            if answer=='y':
                continue
            else:
                print('查找完毕')
                break
        else:
            print('暂未保存学生信息')
            return
def show_student(lst):
    if len(lst)==0:
        print('没有查询到学生信息')
        return
    format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'#格式,可自定义
    print(format_title.format('id','姓名','英语成绩','Python成绩','java成绩','总成绩'))
    formate_data='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
    for item in lst:
        print(formate_data.format(item.get('id'),
                                  item.get('name'),
                                  item.get('english'),
                                  item.get('python'),
                                  item.get('java'),
                                  int(item.get('english'))+int(item.get('python'))+int(item.get('java'))
                                  ))

def delete():
    while True:
        student_id = input('请输入要删除学生id:')
        if student_id != '':  # 即不为空值
            if os.path.exists(filename):  # 即filename存在,那么布尔值就不会为false,程序就可以继续运行。
                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:#‘w’以只写模式进行覆盖
                    d={}
                    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\n')
            if answer=='y'or answer=='Y':
                continue
            else:
                break


def modify():
    show()
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf_8')as  rfile:
            student_old=rfile.readlines()
    else:
        return#RETURN 后面什么都不接表示函数运行完毕
    student_id=input('请输入要修改的学员的id:')
    with open(filename,'w',encoding='utf_8')as wfile:#wfile用于存储执行修改操作之后的学生信息
        for item in student_old:
            d=dict(eval(item))
            if d['id']==student_id:
                print('找到学生信息,可以修改')
                while True:
                    try:#防止输入错误导致程序崩溃
                        d['name'] = input('请输入学生姓名:')
                        d['english'] = input('请输入英语成绩:')
                        d['python'] = input('请输入python成绩:')
                        d['java'] = input('请输入java成绩:')
                    except:
                        print('输入有误,请重新输入:')
                    else:
                        break
                wfile.write(str(d)+'\n')#id符合要修改的学生的学生信息的写入
                print('修改成功')
            else:
                wfile.write(str(d)+'\n')#虽然没有修改成功,也要写入学生信息,因为write写入会覆盖原有记录
        answer=input('是否继续修改?y/n')
        if answer=='y':
            modify()

def sort():
    show()#显示元素
    student_new=[]
    if os.path.exists(filename):#文件存在是前提
        with open(filename,'r',encoding='utf_8')as rfile:#与前面类似
            students=rfile.readlines()
            for item in students:
                d=dict(eval(item))
                student_new.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('您的输入有误,请重新输入')
        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)#lambda语法:
    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'])+int(x['python'])+int(x['java']), reverse=asc_or_desc_bool)
    else:
        print('您的输入有误,请重新输入:')
        sort()
    show_student(student_new)#展示排序之后的信息



def total():
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf_8')as rfile:
            students=rfile.readlines()#读取数据
            if students:#列表是否为空,不为空就继续
                print(f'一共有{len(students)}名学生')#要在字符串中插入变量的值,可以在前引号前加上字母f。这种字符串名为f字符串。f是format(设置格式)的简写
            else:
                print('还没有录入数据')
    else:
        print('暂未保存数据')


def show():
    student_lst=[]
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf_8')as rfile:#以只读模式打开文件
            students=rfile.readlines()#读取数据到students
            for item in students:#将students中的元素遍历出来
                student_lst.append(eval(item))#将item添加到列表中
            if student_lst:#列表是否不为空
                show_student(student_lst)
            else:
                print('暂无数据')
    else:
        print('暂未保存数据')


if __name__ == '__main__':
    main()

你可能感兴趣的:(python)