利用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

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签