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

写在前面

大家好,我是第一次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表格进行数据保存,写入,读取,修改,删除等基本功能

主要信息:

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

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

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

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

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

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. 查询搜索毕业生信息模块

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

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. 修改毕业生信息模块

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

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

5. 毕业生信息排序

这里排序主要使用了一个冒泡排序的算法 对数据进行排序,虽然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. 查询搜索测试

2. 添加测试

3.修改测试

4. 信息排序测试

5. 删除信息测试

四、 源码

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()

文件:

注意:将表格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信息管理系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 学生信息管理系统python版

    本文实例为大家分享了python学生信息管理系统的具体代码,供大家参考,具体内容如下 #!/usr/bin/env python # @Time : 2018/3/30 17:37 # @Author : KiritoLiu # @Contact : kiritoliuyhsky@gmail.com # @Site : # @File : 学生信息管理系统.py # @Software: PyCharm import pymysql import datetime import re def C

  • python学生信息管理系统(初级版)

    本文为大家分享了python学生信息管理系统的初级实现代码,供大家参考,具体内容如下 学生信息管理项目,要求带操作界面,并完成每项操作: +----------------------+ | 1)添加学生信息 | | 2)显示所有学生的信息     | | 3)删除学生信息     | | 4)修改学生信息            | | 5)按学生成绩高-低显示学生信息         | | 6)按学生成绩低-高显示学生信息      | | 7)按学生年龄高-低显示学生信息   | | 8)

  • Python实现一个简单的毕业生信息管理系统的示例代码

    写在前面: 从昨晚的梦里回忆起数据管理的作业: 实现一个自己的选题---- 毕业生信息管理系统,实现学生个人信息基本的增删改查, 我想了想前段时间刚学习的列表,这个简单啊 ,设计一个学生信息列表,然后列表里面再存每个学生详细信息的列表,然后来实现一个基本的增删查改,这个不难啊!直接开始撸代码! 上代码! def Menu():##菜单主界面 print('*'*22) print("* 查看毕业生列表输入: 1 *") print("* 添加毕业生信息输入: 2 *"

  • python学生信息管理系统实现代码

    1.本人第一次学python做出来的,当时满满的成就感,当作纪念!!!!! 非常简单,复制即可使用 代码块 import json#把字符串类型的数据转换成Python基本数据类型或者将Python基本数据类型转换成字符串类型. def login_user(): while True: register=input('学生姓名:') try: with open(register+'.json')as file_object: user_message=json.load(file_objec

  • python实现外卖信息管理系统

    本文为大家分享了python实现外卖信息管理系统的具体代码,供大家参考,具体内容如下 一.需求分析 需求分析包含如下: 1.问题描述 以外卖信息系统管理员身份登陆该系统,实现对店铺信息.派送员信息.客服人员信息.订单信息.配送信息等进行有条件查询以及信息的录入.修改.删除等功能. 2.系统功能描述 (1)信息录入:使用wxpython设计排版编写窗口界面,给出录入信息的接口,通过python语句实现与数据库的连接,从而向数据库中插入相应数据. (2)信息修改:使用wxpython设计排版编写窗口

  • 学生信息管理系统Python面向对象版

    本文实例为大家分享了python学生信息管理系统的具体代码,供大家参考,具体内容如下 """ 程序名称:学生信息管理系统 版本信息:0.1 开发者:飞宇 开始时间:2018.3.23 19:45 版本更新时间:2018.4.2 23:08 格式:IPO OOP面向对象 """ # 学生类 class Student: def __init__(self, stuId, name, age, sex, dept, nation): self.stu

  • python实现简单学生信息管理系统

    python简单的学生信息管理系统-文件版,供大家参考,具体内容如下 功能如下 主函数部分 增加学生信息 修改学生信息 删除学生信息 查询学生 显示所有学生的信息 将数据录入文件 读取文件数据 学习文件模块后,将之前做的学生信息管理系统添加文件模块. 功能如下 1.新增学生信息: 2.修改学生信息: 3.删除学生信息: 4.查询学生信息: 5.显示学生信息; 6.将数据录入文件: 7.读取文件数据: 8.退出系统. 主函数部分 这里定义一个列表L,用来存储学生信息. 增加学生信息 将学生信息保存

  • python学生信息管理系统

    本文实例为大家分享了python学生信息管理系统的具体代码,供大家参考,具体内容如下 #编译环境为python3 #学生信息管理系统包括基本的信息功能,能够实现学生信息的输入,查询,增添和删除 #基本框架:开始操作菜单,接收输入选项,调用相应的函数实现对应的功能,循环回到开始菜单, #操作菜单: student = [] def studentMeau(): print('-'*30) print('-------学生信息管理系统-------') print(' 1.添加学生信息') prin

  • python实现简易学生信息管理系统

    本文实例为大家分享了python实现学生信息管理系统的具体代码,供大家参考,具体内容如下 简易学生信息管理系统主要功能有 1 录入学生信息 2 查找学生信息 3 删除学生信息 4 修改学生信息 5 排序 6 统计学生总人数 7 显示所有学生信息 0 退出系统 系统运行效果 主菜单的代码方法: # Author: dry # 开发时间:2019/9/11 # 开发工具:PyCharm import re # 导入正则表达式模块 import os # 导入操作系统模块 filename = "st

  • python实现学生信息管理系统

    继上篇博客Python实现简易通讯录后,我就想写一个复杂点的学生信息管理系统,这次实现的功能有 1.学生信息的录入管理: 2.学生选课操作: 3.学生选课情况查询: 这次仍然用到sqlite3模块.虽然看着挺简单,但是也踩了不少坑,毕竟刚开始实战,有些细节的还需要多多磨炼啊! 好了,废话不多说,直接上代码,欢迎感兴趣的朋友私信讨论~~~ #-*- coding:utf-8 -*- import sqlite3 #打开本地数据库用于存储用户信息 conn = sqlite3.connect('st

  • Python学生信息管理系统修改版

    在学习之前先要了解sqlite游标的使用方法python使用sqlite3时游标的使用方法 继上篇博客Python实现学生信息管理系统后,我就觉得写的太复杂了,然后又是一通优化.优化.优化: 本次优化主要修改了: 1.使用游标的方法连接.增.删.改.查数据库: 2.一般二级菜单是不能直接退出程序的,所以去掉了二级菜单退出程序的功能: 3.增加了连表查询: 4.但是还有一点很不满意,就是每次退出后都退出到主菜单而不是当前菜单,这点还没改好,希望小伙伴能一起学习交流! #-*- coding:utf

随机推荐