zoukankan      html  css  js  c++  java
  • Python之小型信息管理系统

    #Author:msq
    #Time:2019/11/16
    
    
    import re
    import os
    
    filename = "person.txt"
    
    def menu():
        #输出菜单
        print(' '*5+'-'*15+"信息管理系统"+'-'*15)
        print(' '*5+'='*16+"功能菜单"+'='*16)
        print('''     1 录入个人信息
         2 查找个人信息
         3 删除个人信息
         4 修改个人信息
         5 排序
         6 统计总人数
         7 显示所有信息
         0 退出系统 ''')
        print(' '*5+'='*36)
        print(' '*5+"提示:通过数字选择菜单")
        print(' '*5+'-'*36)
    
    #1.录入个人信息
    def insert():
        personList = []
        make =True
        while make:
            name = input("请输入姓名(如张三):")
            sex = input("请输入性别:")
            age = int(input("请输入年龄:"))
            id = input("请输入身份证号:")
            occupation = input("请输入职业(如学生):")
    
            person = {"name": name, "sex": sex, "age": age, "id": id, "occupation": occupation}
            personList.append(person)
            inputList = input("是否继续添加?(y/n):")
            if inputList == 'y':
                make = True
            else:
                make = False
            save(personList)
            print("信息录入完毕!!!")
    
    #保存信息到文件
    def save(person):
        try:
            person_txt = open(filename, 'a')#以追加的模式打开
        except Exception as e:
            person_txt = open(filename, 'w')#文件不存在就创建文件并打开
        for info in person:
            person_txt.write(str(info)+"
    ") #执行存储,添加换行符
        person_txt.close()
    
    #2.查找个人信息
    def search():
        make =True
        person_query = []
        while make:
            name = ''
            if os.path.exists(filename):
                mode = input("按照姓名查询输入1:按照身份证号查询输入2:")
                if mode == '1':
                    name = input("请输入姓名(如张三):")
                elif mode == '2':
                    id = input("请输入身份证号:")
                else :
                    print("您的输入有误,请重新输入!")
                    search()
                with open(filename, 'r') as file:
                    person = file.readlines()
                    for list in person:
                        d = dict(eval(list))
                        if name is not "":
                            if d['name'] == name:
                                person_query.append(d)
                        elif id is not "":
                            if d["id"] == id:
                                person_query.append(d)
                    show_person(person_query)
                    person_query.clear()
                    inputMark = input("是否继续查询?(y/n):")
                    if inputMark == 'y':
                         make = True
                    else:
                         make = False
            else:
                print("暂未保存数据信息...")
                return
    
    
    
    #3.删除个人信息
    def delete():
        mark =True
        while mark:
            person_name = input("请输入要删除人的姓名:")
            if person_name is not "":
                if os.path.exists(filename):
                    with open(filename,'r') as rfile:
                        person_old = rfile.readlines()
                else:
                    person_old = []
                ifdel = False #标记是否删除
                if person_old: #如果存在
                    with open(filename,'w') as wfile:
                        d = {} #定义空字典
                        for list in person_old:
                            d = dict(eval(list))
                            if d["name"] != person_name: #找到该条数据并替换成空字典
                                wfile.write(str(d)+"
    ")
                            else:
                                ifdel = True #标记已经删除
                    if ifdel:
                        print("name为%s个人信息已经被删除了..." % person_name)
                    else:
                        print("没有找到name为%s的个人信息" %person_name)
                else:
                    print("不存在这个人的信息")
                    break
                show()
                inputMark = input("是否继续删除?(y/n):")
                if inputMark == 'y':
                    mark = True
                else:
                    mark = False
    
    #4.修改个人信息
    def modify():
        show() #显示全部数据
        if os.path.exists(filename):
            with open(filename,'r') as rfile:
                person_old = rfile.readlines()
        else:
            return
        person_name = input("请输入要修改的人的姓名:")
        with open(filename, 'w') as wfile:
            for person in person_old:
                d =dict(eval(person))
                if d["name"] == person_name:
                    print("找到了该条信息可以修改^_^")
                    while True: #输入要修改的信息
                        d["name"] = input("请输入姓名:")
                        d["sex"] = input("请输入性别")
                        d["age"] = input("请输入年龄")
                        d["id"] =input("请输入身份证号")
                        d["occupation"] = input("请输入职业")
                    else:
                        break
                    person = str(d)
                    wfile.write(person+"
    ")
                    print("修改成功^_^")
                else:
                    wfile.write(person)
            mark = input("是否继续修改其他信息?(y/n)")
            if mark == 'y':
                modify()
    
    #5.排序
    def sort():
        if os.path.exists(filename):
            with open(filename, 'r') as rfile:
                person_old = rfile.readlines()
                person_new = []
            for list in person_old:
                d = dict(eval(list))
                person_new.append(d)
        else:
            return
        asOrder = input("请选择(0升序;1降序):")
        if asOrder == '0':
            asOrderBool = False
        elif asOrder == '1':
            asOrderBool = True
        else:
            print("您输入的信息有误,请重新输入!")
            sort()
        mode = input("请输入排序方式(1按名字排序;2按身份证号排序):")
        if mode == '1':
            person_new.sort(key=lambda x: x["name"], reverse=asOrderBool)
        elif mode == '2':
            person_new.sort(key=lambda x: x["id"], reverse=asOrderBool)
        else:
            print("您输入的信息有误,请重新输入!")
            sort()
        show_person(person_new)
    
    #6.统计总人数
    def total():
        if os.path.exists(filename):
            with open(filename, 'r') as rfile:
                person_old = rfile.readlines()
                if person_old:
                    print("一共有%d条数据"%len(person_old))
                else:
                    print("还没录入学生信息")
        else:
            print("暂未保存数据信息")
    
    
    #7.显示所有信息
    def show():
        person_new = []
        if os.path.exists(filename):
            with open(filename, 'r') as rfile:
                person_old = rfile.readlines()
            for list in person_old:
                person_new.append(eval(list))
            if person_new:
                show_person(person_new)
        else:
                print("暂未保存数据信息")
    #显示某个人信息
    def show_person(personList):
        if not personList:
            print("无效的数据")
            return
        '''
        format_title = "{:^5}	{:^5}	{:^5}	{:^10}	{:5}"
        print(format_title.format("名字", "性别", "年龄", "身份证号", "职业"))
        format_data = "{:^5}	{:^5}	{:^5}	{:^10}	{:5}"
        for info in personList:
            print(format_data.format((info.get("name"), info.get("sex"), info.get("age"), info.get("id"), info.get("occupation"))))
        '''
    
        print("名字", " 性别", " 年龄", "身份证号", "            职业")
        for info in personList:
            print(info.get("name")+'  ', info.get("sex")+'   ', str(info.get("age"))+'  ', info.get("id")+' ', info.get("occupation"))
    
    
    
    #0.退出系统
    def main():
        ctrl = True #标记是否退出系统
        while(ctrl):
            menu()
            option = input("请选择:")
            option_str = re.sub("D", "", option) #提取数字
            if option_str in ['0','1','2','3','4','5','6','7']:
                option_int = int(option_str)
                if option_int == 0:
                    print("您已经退出信息管理系统!")
                    ctrl = False
                elif option_int == 1:
                    insert()
                elif option_int == 2:
                    search()
                elif option_int == 3:
                    delete()
                elif option_int == 4:
                    modify()
                elif option_int == 5:
                    sort()
                elif option_int == 6:
                    total()
                elif option_int == 7:
                    show()
    
    if __name__=='__main__':
        main()
    

     

  • 相关阅读:
    MySQL-3(练习题)-三套知识点看完SQL没问题
    MySQL知识点-2(超详细)
    MySQL知识点-1(超详细)
    MySQL表结构笔记9
    MySQL增删改查&数据类型笔记8
    07:表联结MySQL笔记7
    spring事务传播机制
    MySQL查看两个查询的差集
    python连接数据库
    chrome一款可以在浏览器编辑hosts文件的插件HostAdmin App
  • 原文地址:https://www.cnblogs.com/msq2000/p/11872465.html
Copyright © 2011-2022 走看看