#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)+"\n") #执行存储,添加换行符
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)+"\n")
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+"\n")
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}\t{:^5}\t{:^5}\t{:^10}\t{:5}"
print(format_title.format("名字", "性别", "年龄", "身份证号", "职业"))
format_data = "{:^5}\t{:^5}\t{:^5}\t{:^10}\t{: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()

Python之小型信息管理系统的更多相关文章

  1. python 简单的信息管理系统

    #!/usr/bin/python #coding=utf-8 import io import os import time FileRead = io.open('callingcard','r' ...

  2. python 04 学生信息管理系统

    今天任务不多,做了学生信息管理系统1.0,使用字典存储学生个体信息,列表存储学生字典.注意dict定义要在循环体内,若定义成全局变量或循环体外,则旧数据会被新数据覆盖.dict属于可变类型数据,内容改 ...

  3. 1、纯python编写学生信息管理系统

    1.效果图 2.python code: class studentSys(object): ''' _init_(self) 被称为类的构造函数或初始化方法, self 代表类的实例,self 在定 ...

  4. python之学生信息管理系统

    1 #!usr/bin/python 2 #encoding=utf-8 3 4 #1. 打印学生管理系统界面 5 def printStd(): 6 print ("*"*50) ...

  5. 用C语言制作小型商品信息管理系统过程中的问题

    大神请默默飘过... 以下是第一次制作时的源码: // 商品信息管理.cpp : 定义控制台应用程序的入口点. // // 小型商品信息管理系统.cpp : 定义控制台应用程序的入口点. // #in ...

  6. Python 员工信息管理系统

    学Python将近一个月了,第一次写了两百多行代码,一个很简单的脚本. 员工信息管理系统: 需求: 1.管理员账户能够增加,删除,修改,查询员工信息,并且设置管理员账户. 2.普通账户可以查看所有员工 ...

  7. Python基础案例练习:制作学生信息管理系统

    一.前言 学生信息管理系统,相信大家或多或少都有做过 最近看很多学生作业都是制作一个学生信息管理系统 于是,今天带大家做一个简单的学生信息管理系统 二.开发环境: 我用到的开发环境 Python 3. ...

  8. Python学生信息管理系统的开发

    # 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...

  9. python 写简单的职员信息管理系统

    职员信息管理系统要求依次从键盘录入每位员工的信息,包括姓名.员工id.身份证号要求:1.身份证号十八位,要求除了第18位可以为x,其余都只能为数字2.id须由5位数字组成3.否则提示用户重新输入不符合 ...

随机推荐

  1. Python第十一章-常用的核心模块01-collections模块

    python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...

  2. 第 k 小的数

    一.寻找两个有序数组的中位数 1.1 问题描述 给定两个大小为 m 和 n 的不同时为空的有序数组 nums1 和 nums2.找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m ...

  3. Spring中的设计模式:模板模式

    导读 模板模式在是Spring底层被广泛的应用,比如事务管理器的实现,JDBC模板的实现. 文章首发于作者的微信公众号[码猿技术专栏] 今天就来谈谈「什么是模板模式」.「模板模式的优缺点」.「模板模式 ...

  4. elasticesearch搜索返回高亮关键字

    pre_tags 前缀标签 post_tags 后缀标签 tags_schema 设置为styled可以使用内置高亮样式 require_field_match 多字段高亮需要设置为false 使用h ...

  5. 解读windows认证

    0x00 前言 dll劫持的近期忙,没时间写,先给大家写个windows认证的水文. 0x01 windows认证协议 windows上的认证大致分为本地认证,ntlm协议,和Kerberos协议. ...

  6. Java中的形参和实参的区别以及传值调用和传引用调用

    名词解析: 1.形参:用来接收调用该方法时传递的参数.只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间.因此仅仅在方法内有效. 2.实参:传递给被调用方法的值,预先创建并赋予确定值. 3 ...

  7. python--Django(三)视图

    Django的视图 不同于其他语言的MVC模式,Django采用的是MVT模式,即Model.View.Template,这里的View其实质就是其他语言中的Controller(emmm.....) ...

  8. android的volley学习

    更简单的一种方式是在build.gradle中引入依赖[推荐这种方式] compile 'com.android.volley:volley:1.1.1' StringRequest的用法接下来我们看 ...

  9. c#声明数组

    声明二维数组时候,出现报错: string[][] dataTable; dataTable = new string[rows][cols]; 无效的秩说明符: 应为","或&q ...

  10. java day04记录

    本文主要记录arr数组用法.count计算.arr倒排序技巧案例 package day4homework; import java.util.Scanner; /* 从键盘上输入10个整数,合法值位 ...