学生管理系统代码赏析

# 添加、删除、显示学生信息(保存)

 

# 保存所有学生信息

students = {}

# 创建

ID = 1000

# 控制系统是否退出

flag = True

 

 

# 从文件中读取学生信息

def load_students():

    # 加载学生信息从文件中

    stu_file = open("students.txt","r")

    # 读取文件内容

    stus = stu_file.readlines()

    global students

 

 

    # 解析文件数据

    max_id = 0

    for stu in stus:

        #去掉字符串最尾部的换行符\n

        stu_list =stu[0:-1].split(",")

        #学生信息转成字典类型

        s_info = {}

        s_info["name"] = stu_list[1]

        s_info["score"] = stu_list[2]

 

        #将学生数据写会students字典中

        id = int(stu_list[0])

        students[id] = s_info

        if id > max_id:

            max_id = id

 

        ID = max_id

 

def save_students():

    # 保存学生信息到文件

    # 1.将每一个学生的信息,拼接成一个字符串

    stu_info = []

    stu_file = open("students.txt","w")

    for k, v in students.items():

        stu_info.append(str(k))

        stu_info.append(v["name"])

        stu_info.append(v["score"])

        stu_data = ",".join(stu_info)

        stu_data = stu_data + "\n"

        stu_file.write(stu_data)

        stu_info.clear()

 

    # 关闭文件

    stu_file.close()

 

 

def add_student():

    # 添加新学生

 

    global students

    global ID

 

    stu_name = input("请输入新学生的姓名:")

    stu_score = input("请输入新学生的分数:")

 

    # 构建学生的字典

    stu_info = {}

    stu_info["name"] = stu_name

    stu_info["score"] = stu_score

 

    #递增ID

    ID += 1

    # 将新学生添加学生字典中

    students[ID] = stu_info

 

 

def show_students():

    # 显示所有学生信息

    for k, v in students.items():

        print("学号:%d\t姓名:%s\t分数:%s"%(k, v["name"], v["score"]))

    print("----------------")

 

 

defremove_student():

    # 删除学生信息根据学生编号

    delete_id =int(input("请输入要删除学生的学号:"))

    # 判断要删除学生的编号是否存在

    global students

    if delete_id in students.keys():

        del students[delete_id]

        print("删除编号为%d的学生成功!" % delete_id)

    else:

        print("您输入的编号有误!")

 

 

defshow_operation():

    print("请选择操作:")

    print("1.添加学生")

    print("2.删除学生")

    print("3.显示学生")

    print("4.退出系统")

    print("------------")

 

 

# 加载数据

load_students()

while flag:

    print("欢迎使用学生管理系统v1.0")

    # 显示菜单

    show_operation()

    operation = input("请输入您的操作:")

    if operation == "1":

        add_student()

    elif operation == "2":

        remove_student()

    elif operation == "3":

        show_students()

    elif operation == "4":

        print("欢迎再次使用本系统!")

        flag = False

        save_students()

    else:

        print("操作有误,请重新输入!")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 527. 单词缩写(Trie树)

文章目录1. 题目2. 解题1. 题目 给定一个由n个不重复非空字符串组成的数组,你需要按照以下规则为每个单词生成最小的缩写。 初始缩写由起始字母省略字母的数量结尾字母组成。若存在冲突,亦即多于一个单词有同样的缩写,则使用更长的前缀代替…

POJ 1523 SPF (割点 点双连通分量)

题意:求出割点以及除去割点后的连通分量的数量(附带求出了点双连通分量(块)) [求割点]对图深度优先搜索,定义DFS(u)为u在搜索树(以下简称为树)中被遍历到的次序号。定义Low(u)为u或u的子树中能通过非父子边追溯到的最早的节点&…

质数——python代码赏析

一、求(2—您输入数字)之间的质数: num int(input("请输入您要输入的数字:"))a[] if num 2:a.append(2) elif num >2:for i in range(2,num1):for j in range(2,i):if i %j 0:breakelse:a.append(i)print(a) 二、求2-100之间…

LeetCode 1199. 建造街区的最短时间(优先队列贪心)

文章目录1. 题目2. 解题1. 题目 你是个城市规划工作者,手里负责管辖一系列的街区。在这个街区列表中 blocks[i] t 意味着第 i 个街区需要 t 个单位的时间来建造。 由于一个街区只能由一个工人来完成建造。 所以,一个工人要么需要再召唤一个工人&…

用Android-X86和VirtualBox打造高性能Android开发环境

现在已经采用genymotion替换下面的方法 https://www.genymotion.com转载于:https://www.cnblogs.com/sunzhuo1228/archive/2013/05/30/3109445.html

LeetCode 1088. 易混淆数 II(回溯/BFS)

文章目录1. 题目2. 解题2.1 回溯2.2 BFS1. 题目 本题我们会将数字旋转 180 来生成一个新的数字。 比如 0、1、6、8、9 旋转 180 以后,我们得到的新数字分别为 0、1、9、8、6。 2、3、4、5、7 旋转 180 后,是 无法 得到任何数字的。 易混淆数&#xf…

python——import导入模

1.import 搜索路径 import sys sys.path 路径搜索 从上⾯列出的⽬录⾥依次查找要导⼊的模块⽂件 表示当前路径 程序执⾏时导⼊模块路径 sys.path.append(/home/itcast/xxx) sys.path.insert(0, /home/itcast/xxx) #可以确保先搜索这个路径 I…

timer.schedule定时器用法

Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。 TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。 schedule的意思(时间表、进度表) timer.schedule(new MyTas…

LeetCode 759. 员工空闲时间(排序)

文章目录1. 题目2. 解题1. 题目 给定员工的 schedule 列表,表示每个员工的工作时间。 每个员工都有一个非重叠的时间段 Intervals 列表,这些时间段已经排好序。 返回表示 所有 员工的 共同,正数长度的空闲时间 的有限时间段的列表&#xf…

python——作用域 == is

作⽤域 test.py num 200 def print_num(): print("----print_num func, num%d----"%num) main.py from test import * num 100 def print_num2(): print("----print_num2 func, num%d----…

U-Boot-2009-03移植笔记(移植准备)

因为工作需要,需要在S3C2440板子上移植U-boot和Linux,虽然关于S3c2440移植的文章比较多,但是毕竟全面的不多,而且都是别人的,这次自己动手,以此系列记录全过程。 U-boot1.1.6中有支持smdk2410的代码&#x…

LeetCode 656. 金币路径(DP)

文章目录1. 题目2. 解题1. 题目 给定一个数组 A(下标从 1 开始)包含 N 个整数:A1,A2,……,AN 和一个整数 B。 你可以从数组 A 中的任何一个位置(下标为 i)跳到下标 i1,i…

python中的深浅拷贝

1. 浅拷贝 copy.copy 浅拷贝是对于⼀个对象的顶层拷贝 通俗的理解是:拷贝了引⽤,并没有拷贝内容 浅拷贝只复制第一层数据,更深层的引用不管。 2. 深拷贝 copy.deepcopy 深拷贝是对于⼀个对象所有层次的拷贝(递归) 、 3. 注意点浅…

邻接矩阵的深度优先遍历

废话不多说&#xff0c;直接看代码 t#include<stdio.h> #include<stdlib.h> #include<string.h> #define INFINITY INT_MAX #define MAX_VERTEX_NUM 20 bool visted[MAX_VERTEX_NUM]; typedef char VertexType; typedef int VRType; typedef int QElemT…

Linux中使用GDB调试NS2

在使用ns2过程中&#xff0c;避免不了要修改或者添加一些模块&#xff0c;对C代码进行改动。编写好自己的功能模块以后&#xff0c;进行编译执行。但通常不会这么容易通过&#xff0c;经常会出现编译可以通过&#xff0c;但执行是会出错。比较常见的是“段错误”&#xff0c;因…

LeetCode 291. 单词规律 II(回溯)

文章目录1. 题目2. 解题1. 题目 给你一种规律 pattern 和一个字符串 str&#xff0c;请你判断 str 是否遵循其相同的规律。 这里我们指的是 完全遵循&#xff0c;例如 pattern 里的每个字母和字符串 str 中每个 非空 单词之间&#xff0c;存在着双向连接的对应规律。 示例1:…

python中的可迭代对象

迭代是访问集合元素的⼀种⽅式。迭代器是⼀个可以记住遍历的位置的对象。迭代器对象从集合的第⼀个元素开始访问&#xff0c;直到所有的元素被访问完结束。迭代器只能往前不会后退。 1. 可迭代对象 我们已经知道可以对list、tuple、str等类型的数据使⽤for...in...的循环语…

二叉排序树删除子节点以及遍历

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef int TElemType; int m,n; typedef struct BiTNode {//树节点的建立 TElemType data ;struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; int SearchBST(BiTree T,int key,BiTree f,BiTr…

LeetCode 1548. The Most Similar Path in a Graph(动态规划)

文章目录1. 题目2. 解题1. 题目 We have n cities and m bi-directional roads where roads[i] [ai, bi] connects city ai with city bi. Each city has a name consisting of exactly 3 upper-case English letters given in the string array names. Starting at any city…