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

Python实现简单学生信息管理程序(附源码)

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

Python实现简单学生信息管理程序(附源码)

Python实现简单学生信息管理程序 介绍:

本项目编写简单,属于初学者的练手小程序,可以实现学生信息的录入、查找、删除、修改、排序、统计、显示所有学生信息功能,目前数据是保存在文本文件中,后面等我学习了Python数据库,会再出一个保存到数据库版本的学生信息管理程序。

程序展示 主界面

录入学生信息

查找学生信息

可以按照id与姓名查找

删除学生信息

修改学生信息

修改指定学生的成绩

排序

支持升序降序,多种排序方式

统计总数

显示所有学生信息

以列表的方式显示所有学生信息

源码
# 作者: 陈腾
# 开发时间:2022-01-15 21:41
import os.path
import time
from prettytable import PrettyTable

filename = 'student_info.txt'
u = PrettyTable(['ID', '姓名', 'Go', 'Python', 'English'])


def menum():
    print('======================学生信息管理系统==========================')
    print('=========================功能菜单=============================')
    print('1、录入学生信息'.center(50))
    print('2、查找学生信息'.center(50))
    print('3、删除学生信息'.center(50))
    print('4、修改学生信息'.center(50))
    print('5、排序'.center(45))
    print('6、统计学生总人数'.center(52))
    print('7、显示所有学生信息'.center(52))
    print('0、退出'.center(45))
    print('==============================================================')


def main():
    while True:
        menum()
        try:
          choice = int(input('请选择[0-7]:'))
          if choice in range(0, 8):
            if choice == 0:
                answer = input('您确定要退出系统吗?y/n')
                if answer == 'y' or answer == 'Y':
                    print('欢迎下次使用!')
                    break
                else:
                    print('下次摁错就揍你!')
                    time.sleep(1)
                    continue
            elif 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()
        except :
            print('您输入的命令格式有误,请重新输入')
            continue



def insert():
    global golang, python, english
    student_list = []
    while True:
        name = input("请输入学生姓名:")
        if not name:
            print('请输入姓名')
            break
        try:
            id = int(input("请输入学生ID:"))
            golang = int(input("Go语言成绩是:"))
            python = int(input('python语言成绩是:'))
            english = int(input('英语成绩是:'))
        except:
            print('请输入有效的整数,重新输入')
            continue
        student_info = {'id': id, 'name': name, 'golang': golang, 'python': python, 'english': english}
        student_list.append(student_info)
        save(name, student_list)
        answer = input('是否继续添加?y/n')
        if answer == 'y' or answer == 'Y':
            continue
        else:
            break


def save(name, list):
    with open(filename, 'a', encoding='utf-8') as stu_txt:
        for item in list:
            stu_txt.write(str(item) + 'n')
            print('学生{0}信息保存成功'.format(name))


def search():
    while True:
        if os.path.exists(filename):
            answer = int(input("希望根据ID或者姓名查询(0为退出)?(1/2/0)"))
            if answer == 1:
                try:
                    while True:
                        student_id = int(input('请输入学生ID:'))
                        if student_id in Stu.id('id'):
                            Stu.searchid(student_id)
                        else:
                            print('未查询到该学生')
                            break
                except:
                    print('您的输入有误请重新输入')
                    break
            elif answer == 2:
                try:
                    while True:
                        student_name = input('请输入学生姓名:')
                        if student_name in Stu.name('name'):
                            Stu.searchname(student_name)
                        else:
                            print('未查询到该学生')
                            break
                except:
                    print('您的输入有误请重新输入')
                    break
            elif answer == 0:
                break
            else:
                print('请输入0-3的选项内容')
                continue


def exits():
    if os.path.exists(filename):
        a = True
    else:
        a = False
    return a


def table(list):
    for i in list:
        d = dict(eval(str(i)))
        u.add_row([d['id'], d['name'], d['golang'], d['python'], d['english']])
    print(u)
    u.clear_rows()


def delete():
    while True:
        try:
            show()
            student_id = int(input('请输入要删除的ID:'))
        except ValueError:
            print('您输入的ID有误,请重新输入')
            continue
        if student_id != '':
            if os.path.exists(filename):
                with open(filename, 'r', encoding='utf-8') as file:
                    student_old = file.readlines()
            else:
                student_old = []
            flag = False  # 删除标记
            if student_old != '':  # 上面的判断,如果文件存在这个列表才会有值,不存在会为空,进入else的分支
                with open(filename, 'w', encoding='utf-8') as oldfile:
                    d = {}
                    for item in student_old:
                        d = dict(eval(item))
                        if d['id'] != student_id:
                            oldfile.write(str(d) + 'n')
                        else:
                            flag = True
                    if flag:
                        print('ID为{0}的学生信息已被删除'.format(student_id))
                    else:
                        print('没有找到ID为{0}的学生,请重新输入或添加该学生'.format(student_id))
                        time.sleep(1)
                        break
            else:
                print('您还没有录入学生信息,学生信息为空')
                break
            show()
            answer = input('是否继续删除?y/n')
            if answer == 'y' or answer == 'Y':
                continue
            else:
                break


def modify():
        if exits():
            with open(filename, 'r', encoding='utf8') as readfile:
                stu_list = readfile.readlines()
            student_id=int(input('请输入要修改的学生ID:'))
            with open(filename, 'w', encoding='utf8') as writefile:
                for i in stu_list:
                    d=dict(eval(i))
                    if d['id'] == student_id:
                        print('找到学生信息可以修改了')
                        while True:
                            try:
                              new_golang = int(input("Go语言成绩是:"))
                              new_python = int(input('python语言成绩是:'))
                              new_english = int(input('英语成绩是:'))
                              d['golang'] = new_golang
                              d['python'] = new_python
                              d['english'] = new_english
                              break
                            except:
                                print('您的输入有误,请重新输入')
                                continue
                        writefile.write(str(d)+'n')
                        print('修改成功')
                        writefile.close()
                        show()
                    else:
                        writefile.write(str(d)+'n')


def sort():
    while True:
        if exits():
            d = {}
            with open(filename, 'r', encoding='utf8') as file:
                stu_list = file.readlines()
                stu_list_new = []
                if stu_list:
                    for item in stu_list:
                        d = dict(eval(item))
                        stu_list_new.append(d)
                else:
                    print('学生信息为空')
                    break
                asc_or_desc = input('请选择升序(1)降序(2)退出(0)')
                if asc_or_desc == '1':
                    asc_or_desc_bool = False
                elif asc_or_desc == '2':
                    asc_or_desc_bool = True
                elif asc_or_desc == '0':
                    break
                else:
                    print('请输入1或者2选项')
                    continue
                mode = input('请选择排序方式:n1--英语成绩排序n2--Python成绩排序n3--Go成绩培训n4--总成绩排序n:')
                tag = True
                while True:
                    if mode == '1':
                        stu_list_new.sort(key=lambda x: int(x['english']), reverse=asc_or_desc_bool)
                        table(stu_list_new)
                        break
                    elif mode == '2':
                        stu_list_new.sort(key=lambda x: int(x['python']), reverse=asc_or_desc_bool)
                        table(stu_list_new)
                        break

                    elif mode == '3':
                        stu_list_new.sort(key=lambda x: int(x['golang']), reverse=asc_or_desc_bool)
                        table(stu_list_new)
                        break
                    elif mode == '4':
                        stu_list_new.sort(key=lambda x: int(x['golang']) + int(x['english']) + int(x['python']),
                                          reverse=asc_or_desc_bool)
                        table(stu_list_new)
                        break
                    else:
                        print('您输入的有误,请重新输入')
                        break



        else:
            print('您还没有录入学生信息,学生信息为空')
            break


def total():
    if os.path.exists(filename):
        with open(filename, 'r', encoding='utf-8') as file:
            stu_list = file.readlines()
            if stu_list:
                print("当前系统共录入学生{0}人".format(len(stu_list)))
                show()
            else:
                print('学生信息为空')
    else:
        print('您还没有录入学生信息,学生信息为空')


def show():
    while True:
        if os.path.exists(filename):
            Stu.info('info')
            break
        else:
            print('您还没有录入学生信息,学生信息为空')
            break

class Stu():
    def __init__(self,id,name):
        self.id=id
        self.name=name
    def id(self):
        if os.path.exists(filename):
            with open(filename, 'r', encoding='utf-8') as id:
                stu_list = id.readlines()
                d = {}
                list=[]
                for item in stu_list:
                    d = dict(eval(item))
                    list.append(d[str('id')])
        return list
    def name(self):
        if os.path.exists(filename):
            with open(filename, 'r', encoding='utf-8') as id:
                stu_list = id.readlines()
                d = {}
                list=[]
                for item in stu_list:
                    d = dict(eval(item))
                    list.append(d[str('name')])
        return list
    def golang(self):
        if os.path.exists(filename):
            with open(filename, 'r', encoding='utf-8') as id:
                stu_list = id.readlines()
                d = {}
                list=[]
                for item in stu_list:
                    d = dict(eval(item))
                    list.append(d[str('golang')])
        return list
    def python(self):
        if os.path.exists(filename):
            with open(filename, 'r', encoding='utf-8') as id:
                stu_list = id.readlines()
                d = {}
                list=[]
                for item in stu_list:
                    d = dict(eval(item))
                    list.append(d[str('python')])
        return list
    def english(self):
        if os.path.exists(filename):
            with open(filename, 'r', encoding='utf-8') as id:
                stu_list = id.readlines()
                d = {}
                list=[]
                for item in stu_list:
                    d = dict(eval(item))
                    list.append(d[str('english')])
        return list
    def searchid(self):
        with open('student_info.txt', 'r', encoding='utf-8') as id:
            stu_list = id.readlines()
            print(len(stu_list))
            d = {}
            for item in stu_list:
                d = dict(eval(item))
                if d['id'] == self:
                    u.add_row([d['id'], d['name'], d['golang'], d['python'], d['english']])
            print(u)

    def searchname(self):
        with open('student_info.txt', 'r', encoding='utf-8') as file:
            stu_list = file.readlines()
            d = {}
            for item in stu_list:
                d = dict(eval(item))
                if d['name'] == self:
                    u.add_row([d['id'], d['name'], d['golang'], d['python'], d['english']])
            print(u)
    def info(self):
        with open('student_info.txt', 'r', encoding='utf-8') as file:
            stu_list = file.readlines()
            d = {}
            if stu_list:
              for item in stu_list:
                  d = dict(eval(item))
                  u.add_row([d['id'], d['name'], d['golang'], d['python'], d['english']])
              print(u)
              u.clear_rows()
            else:
                print('学生信息为空')
                file=False
        return file
if __name__ == '__main__':
    main()


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

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

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