写在前面
大家好,我是第一次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()
相应的简要测试:
相应的文件:注意 该文本文件应和代码文件在同一个目录下
注意 : 这里采用分行进行数据的存储,为了方便数据的准确修改,不需要一整行的数据进行修改那么麻烦,插入和修改也更为精确