Python使用文件操作实现一个XX信息管理系统的示例


Posted in Python onJuly 02, 2020

写在前面

大家好,我是第一次python学了一个学期,期末要完成一个毕业生信息管理系统大作业的小韩了,由于上次没有仔细看开发实现的要求,实现了一个简单的毕业生信息管理系统,而这次专门整理了两种使用文件进行保存数据实现的毕业生信息管理系统,因为是第一次学python,还不太熟悉python的写法, 而之前是学 c 、c++,感觉我的这个写的有一股 c/c++的内味:

1. 使用excel .xlsx 保存数据实现一个毕业生信息管理系统2. 使用文本文档.txt保存数据实现一个毕业生信息管理系统

以下将会在代码进行详细的介绍

一、 对excel表格操作实现一个毕业生信息管理系统

开发要求

1. 采用 python 语言实现一个XX信息管理系统

2.实现基本的增删改查的基本功能,还可以加上一些如排序,搜索的操作3. 采用文件保存数据(而不是每次从键盘输入)

4. 各个功能界面循环调用环境以及

开发软件

1. python 3.7.0 版本

2. pycharm 2019 中文版

一、 函数模块设计:

1.主函数模块

实现功能

  • 查询搜索毕业生信息列表
  • 增加毕业生信息
  • 修改毕业生信息
  • 删除毕业生信息
  • 毕业生信息排序
  • 退出毕业生信息管理系统
def main(): # 主函数
  arry = [0, 1, 2, 3, 4, 5] # 定义一个选项的列表 用于输入判断
  Menu() # 先打印菜单
  while 1:
    a = input("请输入: ")
    if a.isdigit() and int(a) in arry: # 这里判断输入的是不是数字 且在不在选项的列表中 如果输入合法再进行功能调用
      a = int(a)
      while a:
        if a == 1:
          PrintStudentList() # 查询搜索毕业生信息功能
          Menu()
          break
        if a == 2:
          AddStudent() # 添加毕业生信息功能
          Menu()
          break
        if a == 3:
          ChangeStudent() # 修改毕业生信息功能
          Menu()
          break
        if a == 4:
          DeleteStudent() # 删除毕业生信息功能
          Menu()
          break
        if a == 5:
          SortData() # 毕业生信息排序功能
          Menu()
          break
        elif a > 5 or a < 0:
          print("输入有误!")
          break

      if a == 0: # 按0退出该毕业生信息管理系统
        print("系统已退出!")
        exit()
    else:
      print("请输入0--5!")


main()

这里因为还没有学到python中的字典那部分知识,而pyhton中又没有switch和case所以就使用这个 if 进行判断 虽然比较繁琐,但是看起来还是比较清晰易懂的

二、 数据文件设计

因为这里要采用文件进行保存数据,我第一个想到的就是excel表格,这种.xlsx文件保存数据一目了然,因此本次选择了excel表格进行数据保存,写入,读取,修改,删除等基本功能

主要信息:

本次实现的是一个毕业生信息管理系统,因此给每个毕业生设计的个人信息如下:
学号 姓名 电话 年级 学院 就业 就业公司 邮箱 月薪

Python使用文件操作实现一个XX信息管理系统的示例

关于对excel 表格使用则需要导入两个包:

from openpyxl import Workbook # 导入操作 excel时所用的库
from openpyxl import load_workbook # 用于对本地已经存在的excel文件操作

如果这里导入失败的话,可能需要自己手动进行 openpyxl 的下载 下载方法具体如下

点击 文件 -->> 点击设置(setting) -->> 点击自己的项目 -->> 点击第一个选项 -->> 点击页面的右侧的加号 -->> 输入 想要导入的包 (openpyxl) -->> 点击左下角的 install Package 稍等一会即可完成安装

Python使用文件操作实现一个XX信息管理系统的示例

2.增加毕业生信息模块

从键盘获取输入的信息,信息校验成功后,先将信息保存在一个列表中,然后最后将整个列表插入到excel表格中,然后保存,这样方便写入,否则频繁的打开关闭文件比较繁琐,容易出现错误。
例如:下面插入 学号 id

先建立一个空的列表 然后先对学号进行校验,首先校验学号是否合法,比如长度要求,或者插入的是否和表中的是否重复,当校验成功后才将学号保存到 列表中

r = [] # 建立一个新的列表 在将这个列表插入到excel表中
  ID = None
  wb = load_workbook('StudentList.xlsx')
  sheet = wb.active
  id = input("请输入学号:")
  if CheckIdIsRight(id):
    while 1:
      id = input("请输入正确的学号!")
      if not CheckIdIsRight(id):
        ID = id
        break
  else:
    ID = id
  r.append(ID) # 将输入的ID插入到列表中

其余的其他信息依次类推
最后将整个列表插入到excel表格中,然后关闭并保存文件

sheet.append(r) # 将整个列表插入到excel 表格中 即为插入一行数据
  wb.close()
  wb.save('StudentList.xlsx')

3. 查询搜索毕业生信息模块

Python使用文件操作实现一个XX信息管理系统的示例

该功能主要实现查询和搜索的功能 ,比如查看所有信息列表 ,按相关信息查询毕业生信息,
例如:查询所有毕业生信息:

def PrintAll():
  wb = load_workbook('StudentList.xlsx') # 打开现在已经有的表
  sheet = wb.active # 获取当前活跃的表 也就是当前使用的表
  for row in sheet.rows: # 循环每一行
    for cell in row: # 循环每一行的单元格
      print(cell.value, end="   ") # 打印出每一个单元格的数据
    print()
  print()

只需要将每一个单元格的按顺序打印出来即可

例如:按学号查询该毕业生的信息

def SelectById():
    id = input("请输入需要查询的学号:")
    if id.isdigit() and not CheckIdIsRight(id):
      id1 = int(id) # 将输入的str类型的转换为 int 类型
      wb = load_workbook('StudentList.xlsx') # 打开现在已经有的表
      sheet = wb.active # 获取当前活跃的表 也就是当前使用的表
      r = FindId(id1)
      for i in range(1, 10):
        print(sheet.cell(1, i).value, end="  ") # 打印出表头的信息
      print()
      for i in range(1, 10):
        print(sheet.cell(r, i).value, end="  ") # 打印出该id对应的信息
      print()
    else:
      print("学号输入错误!")

首先应该判断一下输入的学号是不是一串数字,而且 想要查询的学生的学号是存在的,因为我们这里规定学号应该是类似于1700000000 这样的一个数字,而python默认 input 输入的是一个 str 字符串类型的 所以这里防止输入错误导致程序崩溃 因此加入了一些校验,当确认合法之后 再将其 转换为 int 类型的变量 进行使用。
而具体的就是通过一个findid的函数来返回学号所在的行 这样就可以将这一行的信息打印出来即可 ,打印学生信息的同时不要忘了打印表头的信息,这样看起来会更加的清晰。

4. 修改毕业生信息模块

Python使用文件操作实现一个XX信息管理系统的示例

在修改该学生信息之前,同样对其输入的学号进行校验,校验完成之后进行相关信息的修改
修改的基本方法就是,通过学号找到该学生所在的行,然后对特定的列的信息修改(直接赋值),最后保存到文件即可
例如 : 修改姓名

def changename(row, wb): # 修改姓名 # row 为其所在的信息的行 wb 是表格对象
    name = input("请输入修改之后的名字:")
    sheet.cell(row, 2, name)
    wb.save('StudentList.xlsx')

5. 毕业生信息排序

Python使用文件操作实现一个XX信息管理系统的示例

这里排序主要使用了一个冒泡排序的算法 对数据进行排序,虽然python中是有内置的排序算发法的,但是我这里还是自己实现了一个排序(升序),排完序了之后 也可以对升序的进行一个反转 得到一个降序的列表。 因为是对某一项的单一数据进行排序,而排序结果是要求打印出所有信息的,因此先得到一个某一项数据排好序的列表,然后将列表对应的信息进行打印即可。
例如: 按学号进行排序
冒泡排序:

def BubbleSort(l2): # 冒泡排序对列表中的数据进行一个升序的排列
  for i in range(0, len(l2)):
    count = 0
    for j in range(1, len(l2)-i):
      if int(l2[j - 1]) > int(l2[j]):
        temp = l2[j]
        l2[j] = l2[j - 1]
        l2[j - 1] = temp
        count = count + 1
    if count == 0: # 算法优点 当已经有序时就不再进行排序
      return l2
  return l2 # 返回排好序的 列表

按学号从小到大排序并打印学生信息

def GetAllStudentById(): # 按学号排序打印出学生信息(升序)
  l = [] # 建立一个空的列表
  wb = load_workbook('StudentList.xlsx')
  sheet = wb.active
  for column in list(sheet.columns)[0]:
    l.append(column.value) # 将学号插入到列表中 得到一个学号列表
  l2 = l[1:] # 由于第一个是表头 将第二个位置以后的范围 拷贝给 l2
  l3 = BubbleSort(l2) # 进行 学号排序
  # 3 是排好序的列表
  for i in range(1, 10):
    print(sheet.cell(1, i).value, end="   ") # 打印出表头的信息
  print()
  for i in range(0, len(l3)): # 依次找到排好序的学号或年级对应的学生信息即可
    r = FindId(l3[i]) # 找到该行
    for j in range(1, 10):
      print(sheet.cell(r, j).value, end="    ") # 打印出该id对应的信息
    print()

注意 :因为学号是唯一的,因此可以通过找道该行,然后通过行号进行某一行的定向信息打印,但是像年级 ,月薪信息是有可能重复的,就不能再像学号一样查找,打印了,但是我们可以先将年级的列表排好序,然后进行一个去重,这样,就可以将符合满足,排好序的年级列表中的年级对应的学生,信息全部打印出来

6. 删除毕业生信息

非常简单,只需要将要删除的学生的学号输入,然后学号校验合法且存在之后,找到对应的该行,然后将这一行的数据删除就可以了。

def DeleteStudent(): # 删除学生信息
  PrintAll()
  id = input("请输入要删除学生的学号:")
  if not CheckIdIsRight(id): # 判断学号为id的学生是否在StudentList.xlsx中
    print("学号正确!")
    id = int(id)
    row = FindId(id) # 查找其所在的行
    wb = load_workbook('StudentList.xlsx')
    sheet = wb.active
    isdelete = input("是否删除该学生信息?输入是或否:")
    if isdelete == '是':
      sheet.delete_rows(row, 1) # 删除该行
      wb.save('StudentList.xlsx')
      print("删除成功!")
    else:
      print("删除失败!")

  else:
    print("学号输入错误!")

三、 测试

1. 查询搜索测试

Python使用文件操作实现一个XX信息管理系统的示例

Python使用文件操作实现一个XX信息管理系统的示例

Python使用文件操作实现一个XX信息管理系统的示例

Python使用文件操作实现一个XX信息管理系统的示例

2. 添加测试

Python使用文件操作实现一个XX信息管理系统的示例

3.修改测试

Python使用文件操作实现一个XX信息管理系统的示例

4. 信息排序测试

Python使用文件操作实现一个XX信息管理系统的示例

Python使用文件操作实现一个XX信息管理系统的示例

Python使用文件操作实现一个XX信息管理系统的示例

5. 删除信息测试

Python使用文件操作实现一个XX信息管理系统的示例

Python使用文件操作实现一个XX信息管理系统的示例

Python使用文件操作实现一个XX信息管理系统的示例

四、 源码

from openpyxl import Workbook # 导入操作 excel时所用的库
from openpyxl import load_workbook

IsJob = ['是', '否']


def Menu(): # 菜单主界面
  print(end=" " * 45)
  print('*' * 22)
  print(end=" " * 45)
  print("* 查询毕业生信息输入: 1 *")
  print(end=" " * 45)
  print("* 添加毕业生信息输入: 2 *")
  print(end=" " * 45)
  print("* 修改毕业生信息输入: 3 *")
  print(end=" " * 45)
  print("* 删除毕业生信息输入: 4 *")
  print(end=" " * 45)
  print("* 查看排序统计请输入: 5 *")
  print(end=" " * 45)
  print("* 退出系统请输入:  0 *")
  print(end=" " * 45)
  print('*' * 22)


def SelectStudentMenu():
  print(end=" " * 45)
  print('*' * 25)
  print(end=" " * 45)
  print("* 查看所有信息请输入:  1 *")
  print(end=" " * 45)
  print("* 按学号查询信息输入:  2 *")
  print(end=" " * 45)
  print("* 按年级查询信息输入:  3 *")
  print(end=" " * 45)
  print("* 按是否就业查询输入:  4 *")
  print(end=" " * 45)
  print("* 退出查询功能请输入:  0 *")
  print(end=" " * 45)
  print('*' * 25)


def FindId(id): # 在excel中找到该 id 所在的行 返回行数
  i = 0
  wb = load_workbook('StudentList.xlsx')
  sheet = wb.active
  for column in list(sheet.columns)[0]: # 循环学号那一列的数据
    i = i + 1
    if id == column.value: # 找到了返回
      return i # 返回行数


def BubbleSort(l2): # 冒泡排序对列表中的数据进行一个升序的排列
  for i in range(0, len(l2)):
    count = 0
    for j in range(1, len(l2)):
      if int(l2[j - 1]) > int(l2[j]):
        temp = l2[j]
        l2[j] = l2[j - 1]
        l2[j - 1] = temp
        count = count + 1
    if count == 0: # 算法优点 当已经有序时就不再进行排序
      return l2
  return l2 # 返回排好序的 列表


def GetAllStudentByGadeOrMoney(x):
  l = [] # 建立一个空的列表 用于存放数据进行排序
  wb = load_workbook('StudentList.xlsx')
  sheet = wb.active
  for column in list(sheet.columns)[x]:
    l.append(column.value) # 将薪资或年级插入到列表中 得到一个薪资或年级列表
  l2 = l[1:] # 由于第一个是表头 将第二个位置以后的范围 拷贝给 l2
  l3 = BubbleSort(l2) # 进行 薪资或年级排序   # 3 是排好序的列表
  i = 1
  l3.reverse() # 进行一个反转列表 得到一个降序的列表
  while i < len(l3): # 这是为了剔除列表中相同的元素
    if l3[i] == l3[i - 1]:
      del l3[i - 1]
    else:
      i = i + 1
  for i in range(1, 10):
    print(sheet.cell(1, i).value, end="   ") # 打印出表头的信息
  print()
  j = 0
  while j < len(l3): # 按照排好序的列表对应的值 在excel中查找 打印出对应的信息
    for row in sheet.rows: # 循环每一行
      for cell in row: # 循环每一行的单元格
        if cell.value == l3[j]: # 找到年级符合的学生的信息
          for cell in row:
            print(cell.value, end="    ") # 打印出这一行的信息
          print()
    j = j + 1
  print()


def GetAllStudentById(): # 按学号排序打印出学生信息(升序)
  l = [] # 建立一个空的列表
  wb = load_workbook('StudentList.xlsx')
  sheet = wb.active
  for column in list(sheet.columns)[0]:
    l.append(column.value) # 将学号插入到列表中 得到一个学号列表
  l2 = l[1:] # 由于第一个是表头 将第二个位置以后的范围 拷贝给 l2
  l3 = BubbleSort(l2) # 进行 学号排序
  # 3 是排好序的列表
  for i in range(1, 10):
    print(sheet.cell(1, i).value, end="   ") # 打印出表头的信息
  print()
  for i in range(0, len(l3)): # 依次找到排好序的学号或年级对应的学生信息即可
    r = FindId(l3[i]) # 找到该行
    for j in range(1, 10):
      print(sheet.cell(r, j).value, end="    ") # 打印出该id对应的信息
    print()


def PrintAll():
  wb = load_workbook('StudentList.xlsx') # 打开现在已经有的表
  sheet = wb.active # 获取当前活跃的表 也就是当前使用的表
  for row in sheet.rows: # 循环每一行
    for cell in row: # 循环每一行的单元格
      print(cell.value, end="   ") # 打印出每一个单元格的数据
    print()
  print()


def PrintStudentList(): # 打印excel文件中的数据

  def SelectById():
    id = input("请输入需要查询的学号:")
    if id.isdigit() and not CheckIdIsRight(id):
      id1 = int(id)
      wb = load_workbook('StudentList.xlsx') # 打开现在已经有的表
      sheet = wb.active # 获取当前活跃的表 也就是当前使用的表
      r = FindId(id1)
      for i in range(1, 10):
        print(sheet.cell(1, i).value, end="  ") # 打印出表头的信息
      print()
      for i in range(1, 10):
        print(sheet.cell(r, i).value, end="  ") # 打印出该id对应的信息
      print()
    else:
      print("学号输入错误!")

  def SelectByGrade():
    wb = load_workbook('StudentList.xlsx') # 打开现在已经有的表
    sheet = wb.active # 获取当前活跃的表 也就是当前使用的表
    grade = input("请输入要查询的年级:")
    if grade.isdigit():
      for i in range(1, 10):
        print(sheet.cell(1, i).value, end="  ") # 打印出表头的信息
      print()
      # 这里也需要进行优化
      for row in sheet.rows: # 循环每一行
        for cell in row: # 循环每一行的单元格
          if cell.value == int(grade): # 找到年级符合的学生的信息
            for cell in row:
              print(cell.value, end="  ") # 打印出这一行的信息
            print()
      print()
    else:
      print("输入不合法!")

  def SelectByIsJob():
    wb = load_workbook('StudentList.xlsx') # 打开现在已经有的表
    sheet = wb.active # 获取当前活跃的表 也就是当前使用的表
    isjob = input("请输入要查询的学生是否已经就业 :")
    if isjob in IsJob: # 检查输入是否正确
      if isjob == '是': # 如果要查询已经就业的学生
        for i in range(1, 10):
          print(sheet.cell(1, i).value, end="  ") # 打印出表头的信息
        print()
        for row in sheet.rows: # 循环每一行
          for cell in row: # 循环每一行的单元格
            if cell.value == '是': # 找到就业信息是 '是'的学生的那一行
              for cell in row:
                print(cell.value, end="  ") # 打印出这一行的信息
              print()
        print()
      else: # 查询 '否' 还没有就业的学生
        for i in range(1, 10):
          print(sheet.cell(1, i).value, end="  ") # 打印出表头的信息
        print()
        for row in sheet.rows: # 循环每一行
          for cell in row: # 循环每一行的单元格
            if cell.value == '否': # 找到就业信息是 '否'的学生的那一行的内容
              for cell in row:
                print(cell.value, end="  ") # 打印出这一行的信息
              print()
        print()
    else:
      print("输入错误!")

  arry = [0, 1, 2, 3, 4]
  while 1: # 循环查找直到退出
    SelectStudentMenu()
    a = (input("请输入想要执行的操作:"))
    if a.isdigit() and int(a) in arry:
      a = int(a)
      while a:
        if a == 1:
          PrintAll()
          break
        if a == 2:
          SelectById()
          break
        if a == 3:
          SelectByGrade()
          break
        if a == 4:
          SelectByIsJob()
          break
        if a < 0 or a > 4:
          print("输入错误!请重新输入:")
          break
      if a == 0:
        break
    else:
      print("请输入0--4!")


def CheckIdIsRight(id1): # 检查学号ID是否存在或格式不正确
  wb = load_workbook('StudentList.xlsx')
  sheet = wb.active
  if id1.isdigit():
    id2 = int(id1)
    for column in list(sheet.columns)[0]:
      if id2 == column.value:
        print("学号存在")
        return False
    if id2 < 1000000000 or id2 > 10000000000:
      print("学号格式不正确!")
      return True
  else:
    print("学号应该是数字!")
    return True


def AddStudent(): # 添加学生信息模块
  r = [] # 建立一个新的列表 在将这个列表插入到excel表中
  ID = None
  wb = load_workbook('StudentList.xlsx')
  sheet = wb.active
  id = input("请输入学号:")
  if CheckIdIsRight(id):
    while 1:
      id = input("请输入正确的学号!")
      if not CheckIdIsRight(id):
        ID = id
        break
  else:
    ID = id
  r.append(ID) # 将输入的ID插入到列表中
  name = input("请输入你的名字:") # 添加姓名信息
  r.append(name) # 将姓名插入到列表中
  tell = input("请输入你的电话号码:")
  while 1:
    if len(tell) != 11:
      print("电话号码格式不正确!请重新输入:")
      tell = input()
      if len(tell) == 11:
        print("输入成功!")
        break
    if len(tell) == 11:
      break
  r.append(tell) # 将电话号码插入到列表中
  grade = int(input("请输入你的年级:")) # 添加年级信息
  while 1:
    if grade < 2000: # 判断年级是否正确范围内
      print("年级输入不正确!请重新输入:")
      grade = int(input())
      if grade >= 2000:
        print("输入成功!")
        break
    if grade >= 2000:
      break
  r.append(grade) # 将年级插入到列表中
  institute = input("请输入你的学院:") # 添加学院信息
  r.append(institute) # 将学院信息插入到列表中
  isjob = input("是否已经工作:输入 :是或否!") # 添加是否就业信息 当其 是 '是'时才能添加公司
  while 1:
    if isjob in IsJob:
      r.append(isjob)
      break
    else:
      print("输入错误请重新输入:")
      isjob = input()
  if r[5] == '是': # 添加公司信息
    company = input("请输入你的公司名 ")
    r.append(company)
  else:
    company = '无'
    r.append(company)

  e_mail = input("请输入你的电子邮箱:") # 添加邮箱信息
  r.append(e_mail) # 将电子邮箱信息插入到列表中
  if r[5] == '是':
    money = input("请输入你的月薪:") # 添加月薪信息
    r.append(money) # 只有当已经就业时才可以添加月薪信息
  if r[5] == '否':
    money = 0 # 否则 月薪默认为 0
    r.append(money)
  sheet.append(r) # 将整个列表插入到excel 表格中 即为插入一行数据
  wb.close()
  wb.save('StudentList.xlsx')


def StudentPersonalMsg(): # 修改信息界面选择
  print(end=" " * 45)
  print('*' * 23)
  print(end=" " * 45)
  print("* 修改学生姓名请输入: 1 *")
  print(end=" " * 45)
  print("* 修改电话号码请输入: 2 *")
  print(end=" " * 45)
  print("* 修改是否就业请输入: 3 *")
  print(end=" " * 45)
  print("* 修改就业公司请输入: 4 *")
  print(end=" " * 45)
  print("* 修改邮箱信息请输入: 5 *")
  print(end=" " * 45)
  print("* 修改月薪信息请输入: 6 *")
  print(end=" " * 45)
  print("* 退出修改请输入:  0 *")
  print(end=" " * 45)
  print('*' * 23)


def ChangeStudent(): # 修改学生信息模块
  def changename(row, wb): # 修改姓名 # row 为其所在的信息的行 wb 是表格对象
    name = input("请输入修改之后的名字:")
    sheet.cell(row, 2, name)
    wb.save('StudentList.xlsx')

  def changetell(row, wb): # 修改电话号码 同样进行信息格式校对
    tell = input("请输入修改后的电话号码:")
    while 1:
      if len(tell) != 11:
        print("电话号码格式不正确!请重新输入:")
        tell = input()
        if len(tell) == 11:
          print("输入成功!")
          break
      if len(tell) == 11:
        break
    sheet.cell(row, 3, tell)
    wb.save('StudentList.xlsx')

  def changeisjob(row, wb): # 修改是否就业状态信息
    IsJob = ['是', '否']
    isjob = input("是否已经工作:输入 :是或否!")
    while 1:
      if isjob in IsJob:
        sheet.cell(row, 6, isjob)
        wb.save('StudentList.xlsx')
        break
      else:
        print("输入错误请重新输入:")
        isjob = input()

  def changecompany(row, wb): # 修改公司信息
    if sheet.cell(row, 6).value == '是': # 判断是否就业
      company = input("请输入修改后的公司:")
      sheet.cell(row, 7, company)
      wb.save('StudentList.xlsx')
    else:
      print("请先修改是否就业:")
      changeisjob(row, wb)
      changecompany(row, wb)

  def changemail(row, wb): # 修改学生邮箱信息
    mail = input("请输入修改之后的邮箱:")
    sheet.cell(row, 8, mail)
    wb.save('StudentList.xlsx')

  def changemoney(row, wb): # 修改月薪信息
    if sheet.cell(row, 6).value == '是': # 判断是否就业
      money = int(input("请输入修改之后的月薪:"))
      sheet.cell(row, 9, money)
      wb.save('StudentList.xlsx')
    else:
      print("请先修改就业状态及就业公司!")
      changeisjob(row, wb)
      changecompany(row, wb)
      changemoney(row, wb)

  PrintAll()
  arry = [0, 1, 2, 3, 4, 5, 6]
  id = input("请输入你要修改的学生的学号:")
  if not CheckIdIsRight(id): # 检验学号是否存在
    print("学号正确!")
    row = FindId(id)
    wb = load_workbook('StudentList.xlsx')
    sheet = wb.active
    StudentPersonalMsg()
    while 1:
      a = input("请输入:")
      if a.isdigit() and int(a) in arry:
        a = int(a)
        while a > 0:
          if a == 1:
            changename(row, wb)
            print("修改成功!")
            break
          if a == 2:
            changetell(row, wb)
            print("修改成功!")
            break
          if a == 3:
            changeisjob(row, wb)
            print("修改成功!")
            break
          if a == 4:
            changecompany(row, wb)
            print("修改成功!")
            break
          if a == 5:
            changemail(row, wb)
            print("修改成功!")
            break
          if a == 6:
            changemoney(row, wb)
            print("修改成功!")
            break
          elif a > 6 or a < 0:
            print("输入有误!")
            break
        if a == 0:
          break
      else:
        print("请输入正确的选项0--6!")
        break

  else:
    print("请输入正确的学号!")


def DeleteStudent(): # 删除学生信息
  PrintAll()
  id = input("请输入要删除学生的学号:")
  if not CheckIdIsRight(id): # 判断学号为id的学生是否在StudentList.xlsx中
    print("学号正确!")
    id = int(id)
    row = FindId(id) # 查找其所在的行
    wb = load_workbook('StudentList.xlsx')
    sheet = wb.active
    isdelete = input("是否删除该学生信息?输入是或否:")
    if isdelete == '是':
      sheet.delete_rows(row, 1) # 删除该行
      wb.save('StudentList.xlsx')
      print("删除成功!")
      PrintAll()
    else:
      print("删除失败!")

  else:
    print("学号输入错误!")


def SortMenu():
  print(end=" " * 45)
  print('*' * 30)
  print(end=" " * 45)
  print("* 按学号从小到大排序结果输入: 1 *")
  print(end=" " * 45)
  print("* 按年级从大到小排序结果输入: 2 *")
  print(end=" " * 45)
  print("* 按薪资从高到低排序结果输入: 3 *")
  print(end=" " * 45)
  print("* 退出此功能请输入:      0 *")
  print(end=" " * 45)
  print('*' * 30)


def SortData():
  SortMenu()
  arry = [0, 1, 2, 3]
  while 1:
    a = input("请输入: ")
    if a.isdigit() and int(a) in arry:
      a = int(a)
      while a:
        if a == 1:
          GetAllStudentById()
          SortMenu()
          break
        if a == 2:
          GetAllStudentByGadeOrMoney(3)
          SortMenu()
          break
        if a == 3:
          GetAllStudentByGadeOrMoney(8)
          SortMenu()
          break
        elif a > 3 or a < 0:
          print("输入有误!")
          break
      if a == 0:
        break
    else:
      print("请输入正确的选项0--3")


def main(): # 主函数
  arry = [0, 1, 2, 3, 4, 5]
  Menu() # 先打印菜单
  while 1:
    a = input("请输入: ")
    if a.isdigit() and int(a) in arry:
      a = int(a)
      while a:
        if a == 1:
          PrintStudentList()
          Menu()
          break
        if a == 2:
          AddStudent()
          Menu()
          break
        if a == 3:
          ChangeStudent()
          Menu()
          break
        if a == 4:
          DeleteStudent()
          Menu()
          break
        if a == 5:
          SortData()
          Menu()
          break
        elif a > 5 or a < 0:
          print("输入有误!")
          break

      if a == 0: # 按0退出进程
        print("系统已退出!")
        exit()
    else:
      print("请输入0--5!")


main()

文件:

Python使用文件操作实现一个XX信息管理系统的示例

注意:将表格excel文件放在代码相同目录下即可 ,否则应该在使用文件时填上绝对路径,否则会出现文件打不开,或者找不到等错误,在系统运行期间应该讲文件保存并关闭,否则当文件处于打开状态时无法进行修改,插入等操作,出现错误。

二、 采用文本文档保存数据实现的毕业生信息管理系统

基本思想与上述的相似,就不再这里阐述了,以下附上源码。

源码

StudentInfo = ['学号', '姓名', '性别', '毕业年级', '就业公司名称', '电话号码(+86)', '家庭住址']


def GetList(): # 将 StudentMsg.txt 中的数据 拷贝到一个列表中
  fiel = open('StudentMsg.txt', 'r', encoding='utf-8')
  l = []
  for line in fiel:
    l.append(line.strip()) # 将所有的信息以c字符形式插入到列表中
  return l


def PrintAllMsg(): # 打印出所有的信息
  l = GetList()
  print(StudentInfo)
  count = 0
  for i in range(0, len(l)): # 将列表中的所有信息 按7条一行打印
 
    count = count + 1
    print(l[i], end="   ")
    if count % 7 == 0:
      print()
  print()


def ModifyMenu():
  print('-' * 22)
  print("# 修改姓名请输入:   1 *")
  print("# 修改性别请输入:   2 *")
  print("# 修改毕业年级请输入: 3 *")
  print("# 修改公司信息请输入: 4 *")
  print("# 修改电话号码请输入: 5 *")
  print("# 修改家庭住址请输入: 6 *")
  print("# 退出修改请输入: 0 *")
  print('-' * 22)


def ModifyMsg():
  def ModifyName(pos):
    f = open('StudentMsg.txt', 'r+', encoding='utf-8')
    flist = f.readlines()
    name = input("输入修改之后的姓名:")
    name += '\n'
    flist[pos + 1] = name
    f = open('StudentMsg.txt', 'w+', encoding='utf-8')
    f.writelines(flist)
    f.close()
    print("修改成功!")

  def ModifySex(pos):
    Sex = ['男', '女']
    f = open('StudentMsg.txt', 'r+', encoding='utf-8')
    flist = f.readlines()
    sex = input("输入修改之后的性别:")
    if sex in Sex:
      sex += '\n'
      flist[pos + 2] = sex
      f = open('StudentMsg.txt', 'w+', encoding='utf-8')
      f.writelines(flist)
      f.close()
      print("修改成功!")
    else:
      print("输入错误!")
      print("修改失败!")
      ModifySex(pos)

  def ModifyYear(pos):
    f = open('StudentMsg.txt', 'r+', encoding='utf-8')
    flist = f.readlines()
    year = input("输入修改之后的年级:")
    if int(year) > 2000:
      year += '\n'
      flist[pos + 3] = year
      f = open('StudentMsg.txt', 'w+', encoding='utf-8')
      f.writelines(flist)
      f.close()
      print("修改成功!")
    else:
      print("输入错误!")
      print("修改失败!")
      ModifyYear(pos)

  def Modifycompany(pos):
    f = open('StudentMsg.txt', 'r+', encoding='utf-8')
    flist = f.readlines()
    company = input("输入修改之后的公司:")
    company += '\n'
    flist[pos + 4] = company
    f = open('StudentMsg.txt', 'w+', encoding='utf-8')
    f.writelines(flist)
    f.close()
    print("修改成功!")

  def ModifyTell(pos):
    f = open('StudentMsg.txt', 'r+', encoding='utf-8')
    flist = f.readlines()
    tell = input("输入修改之后的电话号码:")
    if len(tell) == 11:
      tell += '\n'
      flist[pos + 5] = tell
      f = open('StudentMsg.txt', 'w+', encoding='utf-8')
      f.writelines(flist)
      f.close()
      print("修改成功!")
    else:
      print("输入错误!")
      print("修改失败!")
      ModifyTell(pos)

  def ModifyAddress(pos):
    f = open('StudentMsg.txt', 'r+', encoding='utf-8')
    flist = f.readlines()
    address = input("输入修改之后的地址:")
    address += '\n'
    flist[pos + 6] = address
    f = open('StudentMsg.txt', 'w+', encoding='utf-8')
    f.writelines(flist)
    f.close()
    print("修改成功!")

  PrintAllMsg()
  id = input("请输入你要修改的学号:")
  if id in IsIdRight():
    l2 = GetList()
    pos = l2.index(id)
    while 1:
      ModifyMenu()
      a = int(input("请输入: "))
      while a:
        if a == 1:
          ModifyName(pos)
          break
        if a == 2:
          ModifySex(pos)
          break
        if a == 3:
          ModifyYear(pos)
          break
        if a == 4:
          Modifycompany(pos)
          break
        if a == 5:
          ModifyTell(pos)
          break
        if a == 6:
          ModifyAddress(pos)
          break
      if a == 0: # 按0退出进程
        break


def DelMsg():
  PrintAllMsg()
  id = input("请输入你要删除的学生的Id:")
  if id in IsIdRight():
    pos = GetList().index(id)
    f = open('StudentMsg.txt', 'r+', encoding='utf-8')
    flist = f.readlines()
    for i in range(0, 7):
      del flist[pos]
    f = open('StudentMsg.txt', 'w+', encoding='utf-8')
    f.writelines(flist)
    f.close()
    print("删除成功!")
    PrintAllMsg()
  else:
    print("学号输入错误!")
    DelMsg()


def IsIdRight(): # 返回学号列表
  l1 = GetList()
  l2 = []
  i = 0
  while i < len(l1):
    l2.append(l1[i])
    i = i + 7
  return l2


def AddMsg(): # 添加信息
  fiel = open('StudentMsg.txt', 'a', encoding='utf-8')

  def Inputid(): # 添加学号判断
    id = (input("请输入你的学号:"))
    l1 = IsIdRight()
    if not (int(id) > 1000 and (id in l1)):
      fiel.write('\n')
      fiel.writelines(id)
    else:
      if int(id) < 1000:
        print("学号输入错误!")
        Inputid()
      if id in IsIdRight():
        print("学号存在!")
        Inputid()

  def Inputname(): # 添加姓名判断
    name = input("请输入你的姓名:")
    fiel.write('\n')
    fiel.writelines(name)

  def InputSex(): # 添加性别判断
    sex = ['男', '女']
    s1 = input("请输入你的性别")
    if s1 in sex:
      fiel.write('\n')
      fiel.writelines(s1)
    else:
      print("性别输入错误!")
      InputSex()

  def InputGaduYear(): # 添加毕业年级判断
    year = (input("请输入你的毕业年级:"))
    if int(year) > 2000:
      fiel.write('\n')
      fiel.writelines(year)
    else:
      print("毕业年级输入错误!")
      InputGaduYear()

  def InputCompany(): # 添加公司信息
    company = input("请输入你的就业公司:")
    fiel.write('\n')
    fiel.writelines(company)

  def InputTell(): # 添加电话判断
    tell = (input("请输入你的电话号码:"))
    if len(tell) == 11:
      fiel.write('\n')
      fiel.writelines(tell)
    else:
      print("电话号码输入错误!")
      InputTell()

  def InputAddress(): # 添加地址信息
    add = input("请输入你的家庭地址:")
    fiel.write('\n')
    fiel.writelines(add)

  Inputid()
  Inputname()
  InputSex()
  InputGaduYear()
  InputCompany()
  InputTell()
  InputAddress()
  fiel.close() # 关闭文件


def Menu(): # 菜单主界面
  print('-' * 22)
  print("# 查看毕业生列表输入: 1 *")
  print("# 添加毕业生信息输入: 2 *")
  print("# 修改毕业生信息输入: 3 *")
  print("# 查找毕业生信息输入:4 *")
  print("# 删除毕业生信息输入: 5 *")
  print("# 退出系统请输入   0 *")
  print('-' * 22)


def FindMenu():
  print('-' * 22)
  print("# 搜索学号请输入: 1 *")
  print("# 搜索姓名请输入: 2 *")
  print("# 退出搜所请输入 0 *")
  print('-' * 22)


def FindStu():
  def FindMsgById():
    id = input("请输入你需要查找的学生的学号:")
    if id in IsIdRight():
      pos = GetList().index(id)
      flist = GetList()
      print(StudentInfo)
      for i in range(0, 7):
        print(flist[pos + i], end="   ")
      print()
    else:
      print("学号输入错误!")
      FindMsgById()

  def FindMsgByName():
    name = input("请输入你需要查找的学生的姓名:")
    if name in GetList():
      pos = GetList().index(name) - 1
      flist = GetList()
      print(StudentInfo)
      for i in range(0, 7):
        print(flist[pos + i], end="   ")
      print()
    else:
      print("姓名输入错误!")
      FindMsgByName()

  while 1:
    FindMenu()
    a = int(input("请输入: "))
    while a:
      if a == 1:
        FindMsgById()
        break
      if a == 2:
        FindMsgByName()
        break
    if a == 0:
      break


def main():
  Menu()
  while 1:
    a = int(input("请输入: "))
    while a:

      if a == 1:
        PrintAllMsg()
        Menu()
        break
      if a == 2:
        AddMsg()
        Menu()
        break
      if a == 3:
        ModifyMsg()
        Menu()
        break
      if a == 4:
        FindStu()
        Menu()
        break
      if a == 5:
        DelMsg()
        Menu()
        break
    if a == 0: # 按0退出进程
      exit()


main()

相应的简要测试:

Python使用文件操作实现一个XX信息管理系统的示例

Python使用文件操作实现一个XX信息管理系统的示例

Python使用文件操作实现一个XX信息管理系统的示例

相应的文件:注意 该文本文件应和代码文件在同一个目录下

Python使用文件操作实现一个XX信息管理系统的示例

注意 : 这里采用分行进行数据的存储,为了方便数据的准确修改,不需要一整行的数据进行修改那么麻烦,插入和修改也更为精确

到此这篇关于Python使用文件操作实现一个XX信息管理系统的示例的文章就介绍到这了,更多相关Python XX信息管理系统内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python 制作糗事百科爬虫实例
Sep 22 Python
Python字典操作详细介绍及字典内建方法分享
Jan 04 Python
Python从数据库读取大量数据批量写入文件的方法
Dec 10 Python
Python 多线程不加锁分块读取文件的方法
Dec 11 Python
详解django中url路由配置及渲染方式
Feb 25 Python
详解Python_shutil模块
Mar 15 Python
关于pymysql模块的使用以及代码详解
Sep 01 Python
基于python3监控服务器状态进行邮件报警
Oct 19 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
Django与pyecharts结合的实例代码
May 13 Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 Python
Python之qq自动发消息的示例代码
Feb 18 Python
keras用auc做metrics以及早停实例
Jul 02 #Python
keras 简单 lstm实例(基于one-hot编码)
Jul 02 #Python
Python装饰器结合递归原理解析
Jul 02 #Python
Python OpenCV读取中文路径图像的方法
Jul 02 #Python
keras.utils.to_categorical和one hot格式解析
Jul 02 #Python
python 使用多线程创建一个Buffer缓存器的实现思路
Jul 02 #Python
浅谈keras中的keras.utils.to_categorical用法
Jul 02 #Python
You might like
ThinkPHP中的三大自动简介
2014/08/22 PHP
PHP实现发送邮件的方法(基于简单邮件发送类)
2015/12/17 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
jquery图片播放浏览插件prettyPhoto使用详解
2014/12/19 Javascript
JavaScript的Number对象的toString()方法
2015/12/18 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中列表(list)操作方法汇总
2014/08/18 Python
python学习数据结构实例代码
2015/05/11 Python
django实现分页的方法
2015/05/26 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
Python及Django框架生成二维码的方法分析
2018/01/31 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
python调试神器PySnooper的使用
2019/07/03 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
遮罩层 + Iframe实现界面自动显示的示例代码
2020/04/26 HTML / CSS
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
优秀团员事迹材料1500字
2014/08/31 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
心灵捕手观后感
2015/06/02 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
少先大队干部竞选稿
2015/11/20 职场文书
服务行业标语口号
2015/12/26 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript