python编程语言对于新手来说极其友好,利用少量的代码就可以开发出一些极具实用性的小程序来,本期作者带大家用python写一个命令端的python学生管理系统。
写完这个简单的学生管理系统,你将掌握比如导包、函数的使用、简单的循环判断语句、列表和字典的用法、读取文件、Json等知识点。
运行程序进入学生管理系统菜单界面,输入不同的数字进行不同的功能操作,比如输入2查询系统学生名单。本系统主要具有添加学生、学生名单、查询学生、保存退出这四个功能。运行效果如下视频所示:
在编写代码的时候,为了使得程序结构层次比较清晰,一般会将功能函数打包封装到单独的一个工具类中,这样使得主程序结构简单清晰,在拓展程序功能时也方便修改维护,本程序主要分为主程序和工具类两个部分。
主程序文件
cards_main.py
工具类文件
cards_tools.py
三、主函数
主函数主要进行菜单无线循环,当用户输入对应的功能的数字,便执行对应的功能函数,直到用户输入退出菜单对应的数字后,整个程序退出循环,程序运行结束。
cards_main.py
#! /usr/bin/python3import cards_toolsdef main(): """主函数,程序入口""" # 无限循环,由用户主动决定什么时候退出循环! while True: # 显示功能菜单 cards_tools.show_menu() action_str = input("请选择希望执行的操作:") print("您选择的操作是【%s】" % action_str) # 1,2,3 针对名单的操作 if action_str in ["1", "2", "3"]: # 新增学生信息 if action_str == "1": cards_tools.new_card() # 显示全部名单 elif action_str == "2": cards_tools.show_all() # 查询学生信息 elif action_str == "3": cards_tools.search_card() # 0 退出系统 elif action_str == "0": save = cards_tools.saveToJson() if save: print("数据保存到本地成功,欢迎再次使用学生管理系统!") break else: print("数据保存到本地失败,程序终止!") break # 其他内容输入错误,需要提示用户 else: print("您输入的不正确,请重新选择")if __name__ == '__main__': main()
工具类中主要封装着主程序需要的各种功能函数,例如读取本地Json文件到程序、显示菜单、添加学习名片、显示所有学生名单、查询某个学生并修改其值,最后退出程序时将系统中的名单保存到本地Json文件。
# 记录所有的学生列表card_list = []# 统一查询所有学生,每一项占用的长度,主要使输出对齐gLen = 15# 保存在本地的学生Json数据名称filename = "stdent.json"
def GetFromJson(): """读取本地json文件到列表""" # 判断文件是否存在,不存在直接退出函数 if not os.path.exists(filename): return # 异常处理,读取文件出错抛出异常 try: file = open(filename, 'r') list = json.load(file) flag = True except: print("从%s读取取json数据出错!" % (filename)) finally: file.close() # print(type(list)) return list
4.3 显示菜单
def show_menu(): """显示菜单""" print("*" * 60) print("学生管理系统 -- 【版本:1.0】") print("1. 添加学生") print("2. 学生名单") print("3. 查询学生") print("0. 保存退出") print("*" * 60)
4.4 新增学生
def new_card(): """新增学生""" print("-" * 60) print("添加学生信息") # 1. 提示用户输入学生的详细信息 name_str = input("请输入姓名:") num_str = input("请输入学号:") sex_str = input("请输入性别:") age_str = input("请输入年龄:") # 2. 使用用户输入的信息建立一个名单字典 card_dict = {"name": name_str, "num": num_str, "sex": sex_str, "age": age_str} # 3. 将名单字典添加到列表中 card_list.append(card_dict) # 4. 提示用户添加成功 print("成功添加 %s 同学的信息!" % name_str)
为了在显示学生信息时,保证每一个字段对齐,必须判断是否输入了有中文,一个汉字=2个英文字母=2字节,故将每个每项输出固定为15个字节,多余的用空格补齐。显示效果如下:
# 判断是否有中文def isChinese(ch): if ch >='\u4e00' and ch <= '\u9fa5': return True else: return False# 统计中英文字符串长度def lenStr(string): count = 0 for line in string: if isChinese(line): count = count + 2 else: count = count + 1 return count# 显示所有学生信息def show_all(): """显示所有名单""" print("-" * 60) print("显示所有学生名单") # 判断是否存在名单记录,如果没有,提示用户并且返回 if len(card_list) == 0: print("当前系统没有任何学生信息,请选择 1.添加学生!") return # 打印表头 headList = ["姓名", "学号", "性别", "年龄"] headStr = "".join([x + " " * (gLen - lenStr(x)) for x in headList]) print(headStr) # 打印分隔线 print("=" * 60) # 遍历名片列表依次输出字典信息 for card_dict in card_list: lineList = [card_dict["name"], card_dict["num"], card_dict["sex"], card_dict["age"]] lineStr = "".join([x + " " * (gLen - lenStr(x)) for x in lineList]) print(lineStr)
搜索到对应学生后再进行修改或删除操作,这里单独将修改删除封装成deal_card函数
def search_card(): """搜索名片""" print("-" * 60) print("搜索名片") # 1. 提示用户输入要搜索的姓名 find_name = input("请输入要搜索的姓名:") # 2. 遍历名单列表,查询要搜索的姓名,如果没有找到,需要提示用户 for card_dict in card_list: if card_dict["name"] == find_name: print("姓名\t\t学号\t\t性别\t\t年龄") print("=" * 60) print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"], card_dict["num"], card_dict["sex"], card_dict["age"])) # 针对找到的名单记录执行修改和删除的操作 deal_card(card_dict) break else: print("抱歉,没有找到 %s" % find_name)
为了简化函数,将输入学生功能input_card_info单独封装
def deal_card(find_dict): """处理查找到的学生 :param find_dict: 查找到的学生 """ action_str = input("请选择要执行的操作 " "[1] 修改 [2] 删除 [0] 返回上级菜单") if action_str == "1": find_dict["name"] = input_card_info(find_dict["name"], "姓名:") find_dict["num"] = input_card_info(find_dict["num"], "学号:") find_dict["sex"] = input_card_info(find_dict["sex"], "性别:") find_dict["age"] = input_card_info(find_dict["age"], "年龄:") print("修改学生信息成功!") elif action_str == "2": card_list.remove(find_dict) print("删除学生信息成功!")
def input_card_info(dict_value, tip_message): """输入学生信息 :param dict_value: 字典中原有的值 :param tip_message: 输入的提示文字 :return: 如果用户输入了内容,就返回内容,否则返回字典中原有的值 """ # 1. 提示用户输入内容 result_str = input(tip_message) # 2. 针对用户的输入进行判断,如果用户输入了内容,直接返回结果 if len(result_str) > 0: return result_str # 3. 如果用户没有输入内容,返回 `字典中原有的值` else: return dict_value
def saveToJson(): """将列表card_list写入到JSON文件中""" # 设立标志位,只运行转换list到json数据类型 flag = False if type(card_list) != list: return flag try: file = open(filename, 'w') json.dump(card_list, file, ensure_ascii=False) flag = True except: print("往%s写数据出错!" % (filename)) finally: if flag: file.close() return flag
4.8 最后不要忘记再程序运行时将读取到的本地文件到程序列表中
# 读取json文件不为空,将函数返回值赋值给card_listif GetFromJson(): card_list = GetFromJson()
到这里整个学生管理系统就写完了,虽然程序比较简单,但是能学到很多的基础知识点:比如导包、函数的使用、简单的循环判断语句、列表和字典的用法、读取文件、Json等知识点。同时也通过这个程序初步了解程序开发模型等思想等。往往单纯的学习编程语法枯燥又无趣,小编觉得学习编程最好的方式就是多练,把学到的知识与实践开发结合起来,这样才会对知识点记忆深刻,理解通透!
加星标不错过每一篇好文
扫码关注更多精彩