'''
@Author: Kris Shin
@Date: 2018-07-23 15:48:12
@Last Modified by: Kris Shin
@Last Modified time: 2018-07-23 15:48:12
'''
import time # 导入time库,方便使用sleep函数
import random # 随机生成id要用
import os
global allStus # 声明全局变量列表,存储所有学生信息
allStus = []
def mainView(): # 定义主界面
print('''
****************************************
* 1. 添加学生
* 2. 查找学生
* 3. 更新学生
* 4. 删除学生
* 5. 查看所有学生
* 6. 求学生平均成绩
* 0. 退出系统
****************************************''')
def randomId(): # 定义随机id生成方法
id = ''
for _ in range(4):
id += str(random.randint(0, 9))
return id
def ctnAndExView(): # 将继续操作的界面和方法封装
print('继续操作(任意键继续)\n0. 返回上级(0键返回上级)')
return int(input('>>> ')) # 返回输入的值
def addView(): # 添加学生功能实现
id = randomId() # 随机生成4为数字id
print('* 添加学生')
name = input('请输入姓名:\n>>> ')
age = input('请输入年龄:\n>>> ')
gender = input('请输入性别:\n>>> ')
tel = input('请输入电话:\n>>> ')
stu = [] # id,姓名,年龄,性别,电话存为列表
scores = {'Math': 0, 'English': 0, 'Python': 0} # 定义一个scores字典来存储各科成绩
scores['Math'] = int(input('数学成绩:\n>>> '))
scores['English'] = int(input('英语成绩:\n>>> '))
scores['Python'] = int(input('Python成绩:\n>>> ')) # 修改字典的成绩值
stu.extend([id, name, age, gender, tel, scores]) # 将所有输入值存储进stu列表对象
print("编号\t姓名\t年龄\t性别\t电话\t数学\t英语\tPython") # 输出
print('%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\t添加成功' % (stu[0], stu[1], stu[2], stu[3], stu[4], scores['Math'], scores['English'], scores['Python']))
return stu # 返回stu列表
def addStu(): # 添加学生方法
global allStus # 声明全局变量
allStus.append(addView()) # 调用添加功能实现,将返回的列表对象存入allStu列表
def searchStu(): # 定义查找方法
print('* 查找学生')
global allStus
flag = False # 声明标识变量,标识是否查找到学生
name = input('请输入姓名:\n>>> ')
print("编号\t姓名\t年龄\t性别\t电话\t数学\t英语\tPython")
for x in allStus: # 遍历allStu
if name in x: # 判断是否有该姓名的学生
flag = True # 查找到学生则赋值该标识为True
print('%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d' % (x[0], x[1], x[2], x[3], x[4], x[5]['Math'], x[5]['English'], x[5]['Python'])) # 输出学生信息
if not flag: # 如果没查找到学生则给出提示
print('未查找到该姓名的学生')
return name # 返回输入的姓名,便于其他函数调用查找函数
def updateStu(): # 定义更新学生函数
print('* 修改学生')
searchStu() # 调用查找学生函数
global allStus
id = input('请输入你要修改学生的编号:\n>>> ') # 得到要修改的学生的id
for x in allStus:
if id in x:
name = input('请输入姓名:\n>>> ')
age = input('请输入年龄:\n>>> ')
gender = input('请输入性别:\n>>> ')
tel = input('请输入电话:\n>>> ')
stu = []
scores = {'Math': 0, 'English': 0, 'Python': 0}
scores['Math'] = int(input('数学成绩:\n>>> '))
scores['English'] = int(input('英语成绩:\n>>> '))
scores['Python'] = int(input('Python成绩:\n>>> '))
stu.extend([id, name, age, gender, tel, scores])
allStus[allStus.index(x)] = stu # 通过index方法找到该id的学生的索引 并将更新后的stu对象赋值到allStu来更新学生信息
print('修改成功!!')
return -1 # 返回-1 表示该函数结束
print('修改失败,该编号不存在') # 如果上面查找到id那么这一步不会执行 否则提示无此id
def deleteStu(): # 定义删除学生方法
print('* 删除学生')
name = searchStu() # 调用查找学生方法 并得到返回的name
global allStus
cho = int(input('1.全部删除\n2.按编号删除\n>>> ')) # 提示删除的类型(对有重名的学生的情况的判断和处理)
if cho == 2:
id = input('请输入你要删除学生的编号:\n>>> ')
for x in allStus:
if id in x:
del allStus[allStus.index(x)] # 通过输入id,来找到该id的索引,进行删除该学生的操作
print('删除成功!!')
return - 1
elif cho == 1: # 全部删除
for _ in range(len(allStus)): # 增加一次循环 因为通过name索引只能删除同名学生的第一个,需要重复操作
for x in allStus:
if name in x:
del allStus[allStus.index(x)] # 通过之前接收的查找学生的name来查找索引并删除
print('删除完成')
return -1
print('删除失败,该编号不存在') # 判断编号不存在的情况
def showAllStu(): # 定义显示所有学生信息的方法
print('* 查找学生')
global allStus # 声明调用全局变量
print("编号\t姓名\t年龄\t性别\t电话\t数学\t英语\tPython")
for x in allStus: # 直接遍历学生信息,直接输出x,类型和标题无法对齐,所以取值进行输出
print('%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d' % (x[0], x[1], x[2], x[3], x[4], x[5]['Math'], x[5]['English'], x[5]['Python']))
def getAvgSco(): # 定义查看平均成绩
print('* 查看学生平均成绩')
global allStus
print("编号\t姓名\t年龄\t性别\t电话\t平均成绩")
for x in allStus: # 直接将最后一项做平均数计算操作
print('%s\t%s\t%s\t%s\t%s\t%.2f' % (x[0], x[1], x[2], x[3], x[4], (x[5]['Math']+x[5]['English']+x[5]['Python'])/len(x[5])))
def mainSlc(): # 主操作函数
while True: # 便于循环操作
mainView() # 调用主界面
slc = int(input('请选择操作:\n>>> '))
if slc == 1: # 判断选择 并进行相应操作
while True: # 便于重复操作
addStu()
select = ctnAndExView() # 判断是否继续操作
if select == 0: # 选择为0 返回主循环
break
elif slc == 2:
while True:
searchStu()
select = ctnAndExView()
if select == 0:
break
elif slc == 3:
while True:
updateStu()
select = ctnAndExView()
if select == 0:
break
elif slc == 4:
while True:
deleteStu()
select = ctnAndExView()
if select == 0:
break
elif slc == 5:
while True:
showAllStu()
select = ctnAndExView()
if select == 0:
break
elif slc == 6:
while True:
getAvgSco()
select = ctnAndExView()
if select == 0:
break
elif slc == 0:
print('退出中......')
time.sleep(1) # 暂停一秒钟
return -1 # 返回-1 结束主循环 退出系统
else:
print('输入有误!!!')
time.sleep(1) # 每次操作完成暂停一秒钟
os.system('cls') # 清屏
def main(): # 主函数
while True:
ex = mainSlc() # 主操作界面
if ex == -1:
return -1 # 结束并退出
if __name__ == '__main__':
main() # 启动主函数
网友评论