利用python开发一个竞争情报系统_Python使用文件操作实现一个XX信息管理系统的示例...-程序员宅基地

技术标签: 利用python开发一个竞争情报系统  

写在前面

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

主要信息:

本次实现的是一个毕业生信息管理系统,因此给每个毕业生设计的个人信息如下:

学号 姓名 电话 年级 学院 就业 就业公司 邮箱 月薪

2020070210353940.jpg

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

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

from openpyxl import load_workbook # 用于对本地已经存在的excel文件操作

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

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

2020070210353941.jpg

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

2020070210353942.jpg

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

例如:查询所有毕业生信息:

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

2020070210353943.jpg

在修改该学生信息之前,同样对其输入的学号进行校验,校验完成之后进行相关信息的修改

修改的基本方法就是,通过学号找到该学生所在的行,然后对特定的列的信息修改(直接赋值),最后保存到文件即可

例如 : 修改姓名

def changename(row, wb): # 修改姓名 # row 为其所在的信息的行 wb 是表格对象

name = input("请输入修改之后的名字:")

sheet.cell(row, 2, name)

wb.save('StudentList.xlsx')

5. 毕业生信息排序

2020070210353944.jpg

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

2020070210353945.jpg

2020070210354046.jpg

2020070210354047.jpg

2020070210354048.jpg

2. 添加测试

2020070210354049.jpg

3.修改测试

2020070210354050.jpg

4. 信息排序测试

2020070210354051.jpg

2020070210354052.jpg

2020070210354053.jpg

5. 删除信息测试

2020070210354054.jpg

2020070210354055.jpg

2020070210354056.jpg

四、 源码

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

文件:

2020070210354057.jpg

注意:将表格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()

相应的简要测试:

2020070210354158.jpg

2020070210354159.jpg

2020070210354160.jpg

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

2020070210354161.jpg

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39629617/article/details/110345514

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文