函数总结以及学员管理系统的代码实现

199_了解引用之不可变类型

引用
了解引用:在Python中,值是靠引用来传递的。
我们可以用id()来判断两个变量是否为同一个值的引用。我们可以将id值理解为那块内存的地址标识。

#可变  和  不可变数据类型

#1.不可变数据类型测试:int
#1.1 声明变量保存整型数据,把这个数据赋值到另一个变量:id()检测两个变量的id值(内存的十进制值)
a = 1
b = a

print(b)

#发现a和b的id值是相同的
print(id(a))
print(id(b))

#修改a的数据测试id值
a = 2

print(b)
#因为修改了a的数据,内存要开辟另外一份内存地址存储数据,导致此时id检测a和b的地址不同
print(id(a))
print(id(b))

不可变数据类型的引用
运行结果:
运行结果

200_了解引用之可变类型

可变数据类型的引用,代码实现如下所示:

#2.可变数据类型的测试:列表
aa = [10,20]
bb = aa

print(bb)

print(id(aa))
print(id(bb))

aa.append(30)
print(aa)
print(bb)

print(id(aa))
print(id(bb))

可变数据类型的引用
运行结果:
运行结果

201_引用当做实参传入

#需求:引用是否可以单做实参
"""
1.定义函数:有形参
    1.1 访问和打印形参,查看是否有数据
    1.2 访问形参的id
    1.3 改变形参的数据,查看这个形参并打印id,看id是否相同
2. 调用函数--把可变和不可变两种类型数据依次当做实参传入
"""

def test1(a):
    print(a)
    print(id(a))

    a +=a
    print(a)
    print(id(a))

#int:计算前后id值不同
b = 100
test1(b)

#列表:计算前后id值相同
c = [11,22]
test1(c)

引用当做实参传入
运行结果:
运行结果

202_可变和不可变类型

所谓可变类型与不可变类型是指:数据是否能够直接进行修改,如果能直接进行修改就是可变数据类型,否则就是不可变数据类型。

  • 可变数据类型如下所示:
    • 列表
    • 字典
    • 集合
  • 不可变数据类型如下所示:
    • 整型
    • 浮点型
    • 字符串
    • 元组

203_函数二总结

  • 变量作用域名
    • 全局:函数体内外都能生效
    • 局部:当前函数体内部生效
  • 函数多返回值写法
    return 表达式1,表达式2…
  • 函数的参数
    位置参数
    * 形参和实参的个数和书写顺序必须一致
    关键字参数
    * 写法:key = value
    * 特点:形参和实参的书写顺序可以不一致;关键字参数必须书写在位置参数的后面
    缺省参数
    * 缺省参数就是默认参数
    * 写法:key = value
    不定长位置参数
    * 收集所有位置参数,返回一个元组
    不定长关键字参数
    * 收集所有关键字参数,返回一个字典
    引用:Python中,数据的传递都是通过引用

204_函数加强简介

目标

  • 应用:学员管理系统
  • 递归
  • lambda表达式
  • 高阶函数

205_学员管理系统需求和步骤分析

1.1 系统简介
需求:进入系统显示系统功能界面,功能如下:

  • 1.添加学员
  • 2.删除学员
  • 3.修改学员信息
  • 4.查询学员信息
  • 5.显示所有学员信息
  • 6.退出系统
    系统共有6个功能,用户根据自己需求选取。
    1,2 步骤分析
    -1.显示功能界面
    2.用户输入功能序号
    3.根据用户输入的功能序号,执行不同的功能(函数)
    3.1 定义函数
    3.2 调用函数

206_学员管理系统框架搭建

1.3 需求实现
1.3.1 显示功能界面
定义函数print_info,负责显示系统功能。

#定义功能界面函数
def info_print():
    print('请选择功能------------')
    print('1.添加学员')
    print('2.删除学员')
    print('3.修改学员')
    print('4.查询学员')
    print('5.显示所有学员')
    print('6.退出系统')
    print('-'*20)
    
#系统功能需要循环使用,直到用户输入6,才退出系统
while True:
     #1.显示功能界面
     info_print()

     #2.用户输入功能序号
     user_num = int(input('请输入功能序号:'))

    #3.按照用户输入的功能序号,执行不同的功能(函数)
     #如果用户输入1.执行添加;如果用户输入2.执行删除。。。。。多重功能
     if user_num ==1:
         print('添加')
     elif user_num == 2:
         print('删除')
     elif user_num == 3:
         print('修改')
     elif user_num == 4:
         print('查询')
     elif user_num == 5:
         print('显示所有学员')
     elif user_num == 6:
         print('退出系统')

学员管理系统框架搭建
运行结果:

运行结果

207_代码调优

工作中,需要根据实际需求调优代码。
1.用户选择系统功能的代码需要循环使用,直到用户主动退出系统。
2。如果用户输入1-6以外的数字,需要提示用户。
代码调优

208_学员管理系统数据形式的分析

所有功能函数都是操作学员信息,所有存储所有学员信息应该是一个全局变量,数据类型为列表。

info = []

209_添加学员功能分析

1.3.4.1 添加学员

  • 需求分析
  • 1.接收用户输入学员信息,并保存
  • 2.判断是否添加学员信息
    2.1 如果学员姓名已经存在,则报错提示
    2.2 如果学员姓名不存在,则准备空字典,将用户输入的数据追加到字典,然后在列表追加字典数据
  • 3.对应的If条件成立的位置调用该函数
    添加学员功能分析

210_添加学员之用户输入

代码实现:

def add_info():
	"""添加学员"""
	#接收用户输入学员信息
	new_id = input('请输入学号:')
	new_name = input('请输入姓名:')
	new_tel = input('请输入手机号:')

# 声明info是全局变量
global info

#检测用户输入的姓名是否存在,若存在则报错显示
for i in info:
	if new_name == i [''name]:
	print('该用户已经存在!')
	return

#如果用户输入的姓名不存在,则添加该学员信息
info_dict = {}

#将用户输入的数据追加到字典
info_dict['id'] = new_id
info_dict['name'] = new_name
info_dict['name'] = new_tel

添加学员之用户输入,实现代码如下所示:

#定义功能界面函数
def info_print():
    print('请选择功能------------')
    print('1.添加学员')
    print('2.删除学员')
    print('3.修改学员')
    print('4.查询学员')
    print('5.显示所有学员')
    print('6.退出系统')
    print('-'*20)

#等等待存储所有学员的信息
info = []

#添加学员信息的函数
def add_info():
    """添加学员函数"""
    #1.用户输入:学号、姓名、手机号
    new_id = input('请输入学号:')
    new_name = input('请输入姓名:')
    new_tel = input('请输入手机号:')

    #2.判断是否添加这个学员:如果学员姓名已经存在,则报错提示;如果姓名不存在,则添加新增数据。

#系统功能需要循环使用,直到用户输入6,才退出系统
while True:
     #1.显示功能界面
     info_print()

     #2.用户输入功能序号
     user_num = int(input('请输入功能序号:'))

    #3.按照用户输入的功能序号,执行不同的功能(函数)
     #如果用户输入1.执行添加;如果用户输入2.执行删除。。。。。多重功能
     if user_num ==1:
         #print('添加')
        add_info()
     elif user_num == 2:
         print('删除')
     elif user_num == 3:
         print('修改')
     elif user_num == 4:
         print('查询')
     elif user_num == 5:
         print('显示所有学员')
     elif user_num == 6:
         print('退出系统')
     else:
         print('输入的功能序号有误')

添加学员之用户输入
运行结果:
运行结果

211_添加学员之新增数据

#定义功能界面函数
def info_print():
    print('请选择功能------------')
    print('1.添加学员')
    print('2.删除学员')
    print('3.修改学员')
    print('4.查询学员')
    print('5.显示所有学员')
    print('6.退出系统')
    print('-'*20)

#等等待存储所有学员的信息
info = []

#添加学员信息的函数
def add_info():
    """添加学员函数"""
    #1.用户输入:学号、姓名、手机号
    new_id = input('请输入学号:')
    new_name = input('请输入姓名:')
    new_tel = input('请输入手机号:')

    #2.判断是否添加这个学员:如果学员姓名已经存在,则报错提示;如果姓名不存在,则添加新增数据。
    global info

    #2.2 如果输入的姓名不存在,则添加数据;准备空字典,字典新增数据,然后在列表中追加字典
    info_dict = {}

    #字典新增数据
    info_dict['id'] = new_id
    info_dict['name'] = new_name
    info_dict['tel'] = new_tel
    print(info_dict)

    #列表追加字典
    info.append(info_dict)
    print(info)

#系统功能需要循环使用,直到用户输入6,才退出系统
while True:
     #1.显示功能界面
     info_print()

     #2.用户输入功能序号
     user_num = int(input('请输入功能序号:'))

    #3.按照用户输入的功能序号,执行不同的功能(函数)
     #如果用户输入1.执行添加;如果用户输入2.执行删除。。。。。多重功能
     if user_num ==1:
         #print('添加')
        add_info()
     elif user_num == 2:
         print('删除')
     elif user_num == 3:
         print('修改')
     elif user_num == 4:
         print('查询')
     elif user_num == 5:
         print('显示所有学员')
     elif user_num == 6:
         print('退出系统')
     else:
         print('输入的功能序号有误')

添加学员之新增数据的情况
运行结果:
运行结果

212_添加学员之重名提示

添加学员之重名提示的情况,实现代码如下所示:

#定义功能界面函数
def info_print():
    print('请选择功能------------')
    print('1.添加学员')
    print('2.删除学员')
    print('3.修改学员')
    print('4.查询学员')
    print('5.显示所有学员')
    print('6.退出系统')
    print('-'*20)

#等等待存储所有学员的信息
info = []

#添加学员信息的函数
def add_info():
    """添加学员函数"""
    #1.用户输入:学号、姓名、手机号
    new_id = input('请输入学号:')
    new_name = input('请输入姓名:')
    new_tel = input('请输入手机号:')

    #2.判断是否添加这个学员:如果学员姓名已经存在,则报错提示;如果姓名不存在,则添加新增数据。
    global info
    #2.1 不允许姓名重复:判断用户输入的姓名和列表里面字典的name对应的value值是否相等,如果相等,则提示用户输入数据已经存在。
    for i in info:
        if new_name == i['name']:
            print('此用户已经存在')
            #return作用:退出当前函数,后面添加信息的代码不执行
            return

    #2.2 如果输入的姓名不存在,则添加数据;准备空字典,字典新增数据,然后在列表中追加字典
    info_dict = {}

    #字典新增数据
    info_dict['id'] = new_id
    info_dict['name'] = new_name
    info_dict['tel'] = new_tel
    print(info_dict)

    #列表追加字典
    info.append(info_dict)
    print(info)

#系统功能需要循环使用,直到用户输入6,才退出系统
while True:
     #1.显示功能界面
     info_print()

     #2.用户输入功能序号
     user_num = int(input('请输入功能序号:'))

    #3.按照用户输入的功能序号,执行不同的功能(函数)
     #如果用户输入1.执行添加;如果用户输入2.执行删除。。。。。多重功能
     if user_num ==1:
         #print('添加')
        add_info()
     elif user_num == 2:
         print('删除')
     elif user_num == 3:
         print('修改')
     elif user_num == 4:
         print('查询')
     elif user_num == 5:
         print('显示所有学员')
     elif user_num == 6:
         print('退出系统')
     else:
         print('输入的功能序号有误')

添加学员之重名提示的情况
运行结果:
运行结果

213_删除学员思路分析

1.3.4.2 删除学员

  • 需求分析
    按用户输入的学员姓名进行删除
    1.用户输入目标学员姓名
    2.检查这个学员是否存在
    2.1 如果存在,则列表删除这个数据
    2.2 如果不存在,则提示“该用户不存在”
    3.对应的if条件成立的位置调用该函数
    代码实现:
# 删除学员
def del_info():
	"""删除学员"""
	#1.用户输入要删除的学员的姓名
	del_name = input('请输入要删除的学员的姓名:')

	global info
	#2.判断学员是否存在:如果输入的姓名存在则删除,否则报错提示
	for i in info:
		if del_name == i['name']:
			info.remove(i)
			break
	else:
		print('该学员不存在')

    print(info)

214_删除学员代码实现

#定义功能界面函数
def info_print():
    print('请选择功能------------')
    print('1.添加学员')
    print('2.删除学员')
    print('3.修改学员')
    print('4.查询学员')
    print('5.显示所有学员')
    print('6.退出系统')
    print('-'*20)

#等等待存储所有学员的信息
info = []

#添加学员信息的函数
def add_info():
    """添加学员函数"""
    #1.用户输入:学号、姓名、手机号
    new_id = input('请输入学号:')
    new_name = input('请输入姓名:')
    new_tel = input('请输入手机号:')

    #2.判断是否添加这个学员:如果学员姓名已经存在,则报错提示;如果姓名不存在,则添加新增数据。
    global info
    #2.1 不允许姓名重复:判断用户输入的姓名和列表里面字典的name对应的value值是否相等,如果相等,则提示用户输入数据已经存在。
    for i in info:
        if new_name == i['name']:
            print('此用户已经存在')
            #return作用:退出当前函数,后面添加信息的代码不执行
            return

    #2.2 如果输入的姓名不存在,则添加数据;准备空字典,字典新增数据,然后在列表中追加字典
    info_dict = {}

    #字典新增数据
    info_dict['id'] = new_id
    info_dict['name'] = new_name
    info_dict['tel'] = new_tel
    print(info_dict)

    #列表追加字典
    info.append(info_dict)
    print(info)

#删除学员
def  del_info():
    """删除学员"""
    #1.用户输入要删除的学员姓名
    del_name = input('请输入要删除的学员的姓名:')
    #2.判断学员是否存在:存在则删除,不存在则给出相应提示
    #2.1 声明Info是全局变量
    global info
    #2.2 遍历列表
    for i in info:
        #2.3 判断学员是否存在:存在执行删除(列表里面的字典),break:这个系统不允许重名,删除了一个数据,后面的不需要在遍历;不存在则给出相应提示
        if del_name ==i['name']:
            #列表删除数据 --按数据删除remove
            info.remove(i)
            break
    else:
        print('该学员不存在')

    print(info)

#系统功能需要循环使用,直到用户输入6,才退出系统
while True:
     #1.显示功能界面
     info_print()

     #2.用户输入功能序号
     user_num = int(input('请输入功能序号:'))

    #3.按照用户输入的功能序号,执行不同的功能(函数)
     #如果用户输入1.执行添加;如果用户输入2.执行删除。。。。。多重功能
     if user_num ==1:
         #print('添加')
        add_info()
     elif user_num == 2:
         #print('删除')
         del_info()
     elif user_num == 3:
         print('修改')
     elif user_num == 4:
         print('查询')
     elif user_num == 5:
         print('显示所有学员')
     elif user_num == 6:
         print('退出系统')
     else:

删除学员代码实现
运行结果:
运行结果

215_修改学员思路分析

1.3.4.3. 修改学员信息

  • 需求分析
    1.用户输入目标学员姓名
    检查这个学员是否存在
    2.1 如果存在,则修改这位学员的信息,例如手机号
    2.2 如果不存在,则报错
    3.对应的if条件成立的位置调用该函数
    代码实现:
#修改函数
def modify_info()
	"""修改函数"""
	#1.用户输入要修改的学院的姓名
	modify_name = input('请输入要修改的学员的姓名:')

	global info
	#2.判断学员是否存在:如果输入的姓名存在,则修改手机号,否则报错提示
	for i in info:
		if modify_name == i['name']:
		i['tel'] = input('请输入新的手机号:')
		break
	else:
		print('该学员不存在')

print(info)

216_修改学员代码实现

#定义功能界面函数
def info_print():
    print('请选择功能------------')
    print('1.添加学员')
    print('2.删除学员')
    print('3.修改学员')
    print('4.查询学员')
    print('5.显示所有学员')
    print('6.退出系统')
    print('-'*20)

#等等待存储所有学员的信息
info = []

#添加学员信息的函数
def add_info():
    """添加学员函数"""
    #1.用户输入:学号、姓名、手机号
    new_id = input('请输入学号:')
    new_name = input('请输入姓名:')
    new_tel = input('请输入手机号:')

    #2.判断是否添加这个学员:如果学员姓名已经存在,则报错提示;如果姓名不存在,则添加新增数据。
    global info
    #2.1 不允许姓名重复:判断用户输入的姓名和列表里面字典的name对应的value值是否相等,如果相等,则提示用户输入数据已经存在。
    for i in info:
        if new_name == i['name']:
            print('此用户已经存在')
            #return作用:退出当前函数,后面添加信息的代码不执行
            return

    #2.2 如果输入的姓名不存在,则添加数据;准备空字典,字典新增数据,然后在列表中追加字典
    info_dict = {}

    #字典新增数据
    info_dict['id'] = new_id
    info_dict['name'] = new_name
    info_dict['tel'] = new_tel
    print(info_dict)

    #列表追加字典
    info.append(info_dict)
    print(info)

#删除学员
def  del_info():
    """删除学员"""
    #1.用户输入要删除的学员姓名
    del_name = input('请输入要删除的学员的姓名:')
    #2.判断学员是否存在:存在则删除,不存在则给出相应提示
    #2.1 声明Info是全局变量
    global info
    #2.2 遍历列表
    for i in info:
        #2.3 判断学员是否存在:存在执行删除(列表里面的字典),break:这个系统不允许重名,删除了一个数据,后面的不需要在遍历;不存在则给出相应提示
        if del_name ==i['name']:
            #列表删除数据 --按数据删除remove
            info.remove(i)
            break
    else:
        print('该学员不存在')

    print(info)

#修改函数
def modify_info():
    """修改学员信息"""
    #1.用户输入想要修改的学员的姓名
    modify_name = input('请输入要修改的学员的姓名:')

    #2.判断学员是否存在:存在则修改手机号;不存在则由系统给出相应提示
    #2.1 声明info是全局变量
    global info
    #2.2 遍历列表,判断输入的姓名是否与列表中已有名字相同
    for i in info:
        if modify_name == i['name']:
            #将tel这个key修改值,并终止此循环操作
            i['tel'] = input('请输入新的手机号:')
            break
    else:
        #学员不存在
        print('该学员不存在')

    #3.打印info
    print(info)

#系统功能需要循环使用,直到用户输入6,才退出系统
while True:
     #1.显示功能界面
     info_print()

     #2.用户输入功能序号
     user_num = int(input('请输入功能序号:'))

    #3.按照用户输入的功能序号,执行不同的功能(函数)
     #如果用户输入1.执行添加;如果用户输入2.执行删除。。。。。多重功能
     if user_num ==1:
         #print('添加')
        add_info()
     elif user_num == 2:
         #print('删除')
         del_info()
     elif user_num == 3:
         #print('修改')
        modify_info()
     elif user_num == 4:
         print('查询')
     elif user_num == 5:
         print('显示所有学员')
     elif user_num == 6:
         print('退出系统')
     else:
         print('输入的功能序号有误')

修改学员信息代码实现
运行结果:
运行结果

217_查询学员思路分析

1.3.4.4 查询学员信息

  • 需求分析
  1. 用户输入目标学员姓名
  2. 检查学员是否存在
    2.1 如果存在,则显示这个学员的信息
    2.2 如果不存在,则报错显示
    3.对应的if条件成立的位置调用该函数
    代码实现:
# 查询学员
def search_info():
	"""查询学员"""
	#1.输入要查找的学员的姓名
	search_name = input('请输入要查找的学员的姓名:')
	
	global info
	#2.判断学员是否存在:如果输入的姓名存在,则显示这位学员信息,否则报错提示
	for i in info:
		if search_name == i['name']
			print('查找到的学员信息如下:--------------')
			print(f"该学员的学号是{i['id']},姓名是{i['name']},手机号是{i['tel']}")
			break
	else:
		print('该学员不存在')

218_查询学员代码实现

#定义功能界面函数
def info_print():
    print('请选择功能------------')
    print('1.添加学员')
    print('2.删除学员')
    print('3.修改学员')
    print('4.查询学员')
    print('5.显示所有学员')
    print('6.退出系统')
    print('-'*20)

#等等待存储所有学员的信息
info = []

#添加学员信息的函数
def add_info():
    """添加学员函数"""
    #1.用户输入:学号、姓名、手机号
    new_id = input('请输入学号:')
    new_name = input('请输入姓名:')
    new_tel = input('请输入手机号:')

    #2.判断是否添加这个学员:如果学员姓名已经存在,则报错提示;如果姓名不存在,则添加新增数据。
    global info
    #2.1 不允许姓名重复:判断用户输入的姓名和列表里面字典的name对应的value值是否相等,如果相等,则提示用户输入数据已经存在。
    for i in info:
        if new_name == i['name']:
            print('此用户已经存在')
            #return作用:退出当前函数,后面添加信息的代码不执行
            return

    #2.2 如果输入的姓名不存在,则添加数据;准备空字典,字典新增数据,然后在列表中追加字典
    info_dict = {}

    #字典新增数据
    info_dict['id'] = new_id
    info_dict['name'] = new_name
    info_dict['tel'] = new_tel
    print(info_dict)

    #列表追加字典
    info.append(info_dict)
    print(info)

#删除学员
def  del_info():
    """删除学员"""
    #1.用户输入要删除的学员姓名
    del_name = input('请输入要删除的学员的姓名:')
    #2.判断学员是否存在:存在则删除,不存在则给出相应提示
    #2.1 声明Info是全局变量
    global info
    #2.2 遍历列表
    for i in info:
        #2.3 判断学员是否存在:存在执行删除(列表里面的字典),break:这个系统不允许重名,删除了一个数据,后面的不需要在遍历;不存在则给出相应提示
        if del_name ==i['name']:
            #列表删除数据 --按数据删除remove
            info.remove(i)
            break
    else:
        print('该学员不存在')

    print(info)

#修改函数
def modify_info():
    """修改学员信息"""
    #1.用户输入想要修改的学员的姓名
    modify_name = input('请输入要修改的学员的姓名:')

    #2.判断学员是否存在:存在则修改手机号;不存在则由系统给出相应提示
    #2.1 声明info是全局变量
    global info
    #2.2 遍历列表,判断输入的姓名是否与列表中已有名字相同
    for i in info:
        if modify_name == i['name']:
            #将tel这个key修改值,并终止此循环操作
            i['tel'] = input('请输入新的手机号:')
            break
    else:
        #学员不存在
        print('该学员不存在')

    #3.打印info
    print(info)

#查询学员信息函数
def search_info():
    """查询学员信息"""
    #1.用户输入目标学员姓名
    search_name = input('请输入要查询的学员的姓名:')

    #2.检查学员是否存在:存在打印这个学员的信息,不存在系统则给出相应提示
    #2.1 声明info为全局
    global info
    #2.2 遍历info, 判断输入的学员是否存在
    for i in info:
        if search_name == i['name']:
            #学员存在:打印信息并终止循环
            print('查询到的学员信息如下所示------------------')
            print(f"学员的学号是{i['id']},姓名是{i['name']},手机号是{i['tel']}")
            break
    else:
        #学员不存在的提示
        print('查无此人-----')


#系统功能需要循环使用,直到用户输入6,才退出系统
while True:
     #1.显示功能界面
     info_print()

     #2.用户输入功能序号
     user_num = int(input('请输入功能序号:'))

    #3.按照用户输入的功能序号,执行不同的功能(函数)
     #如果用户输入1.执行添加;如果用户输入2.执行删除。。。。。多重功能
     if user_num ==1:
         #print('添加')
        add_info()
     elif user_num == 2:
         #print('删除')
         del_info()
     elif user_num == 3:
         #print('修改')
        modify_info()
     elif user_num == 4:
         #print('查询')
        search_info()
     elif user_num == 5:
         print('显示所有学员')
     elif user_num == 6:
         print('退出系统')
     else:
         print('输入的功能序号有误')

查询学员代码实现
运行结果:
运行结果

219_显示所有学员信息

1.3.4.5 显示所有学员信息
-需求分析:打印所有学员信息
代码实现:

#显示所有学员信息
def print_all():
	"""显示所有学员信息"""
	print('学号\t姓名\t手机号')
	for i in info:
		print(f'{i['id']}\t{i["name"}'\t{i["tel"]})

显示所有学员信息,实现代码如下所示:

#定义功能界面函数
def info_print():
    print('请选择功能------------')
    print('1.添加学员')
    print('2.删除学员')
    print('3.修改学员')
    print('4.查询学员')
    print('5.显示所有学员')
    print('6.退出系统')
    print('-'*20)

#等等待存储所有学员的信息
info = []

#添加学员信息的函数
def add_info():
    """添加学员函数"""
    #1.用户输入:学号、姓名、手机号
    new_id = input('请输入学号:')
    new_name = input('请输入姓名:')
    new_tel = input('请输入手机号:')

    #2.判断是否添加这个学员:如果学员姓名已经存在,则报错提示;如果姓名不存在,则添加新增数据。
    global info
    #2.1 不允许姓名重复:判断用户输入的姓名和列表里面字典的name对应的value值是否相等,如果相等,则提示用户输入数据已经存在。
    for i in info:
        if new_name == i['name']:
            print('此用户已经存在')
            #return作用:退出当前函数,后面添加信息的代码不执行
            return

    #2.2 如果输入的姓名不存在,则添加数据;准备空字典,字典新增数据,然后在列表中追加字典
    info_dict = {}

    #字典新增数据
    info_dict['id'] = new_id
    info_dict['name'] = new_name
    info_dict['tel'] = new_tel
    print(info_dict)

    #列表追加字典
    info.append(info_dict)
    print(info)

#删除学员
def  del_info():
    """删除学员"""
    #1.用户输入要删除的学员姓名
    del_name = input('请输入要删除的学员的姓名:')
    #2.判断学员是否存在:存在则删除,不存在则给出相应提示
    #2.1 声明Info是全局变量
    global info
    #2.2 遍历列表
    for i in info:
        #2.3 判断学员是否存在:存在执行删除(列表里面的字典),break:这个系统不允许重名,删除了一个数据,后面的不需要在遍历;不存在则给出相应提示
        if del_name ==i['name']:
            #列表删除数据 --按数据删除remove
            info.remove(i)
            break
    else:
        print('该学员不存在')

    print(info)

#修改函数
def modify_info():
    """修改学员信息"""
    #1.用户输入想要修改的学员的姓名
    modify_name = input('请输入要修改的学员的姓名:')

    #2.判断学员是否存在:存在则修改手机号;不存在则由系统给出相应提示
    #2.1 声明info是全局变量
    global info
    #2.2 遍历列表,判断输入的姓名是否与列表中已有名字相同
    for i in info:
        if modify_name == i['name']:
            #将tel这个key修改值,并终止此循环操作
            i['tel'] = input('请输入新的手机号:')
            break
    else:
        #学员不存在
        print('该学员不存在')

    #3.打印info
    print(info)

#查询学员信息函数
def search_info():
    """查询学员信息"""
    #1.用户输入目标学员姓名
    search_name = input('请输入要查询的学员的姓名:')

    #2.检查学员是否存在:存在打印这个学员的信息,不存在系统则给出相应提示
    #2.1 声明info为全局
    global info
    #2.2 遍历info, 判断输入的学员是否存在
    for i in info:
        if search_name == i['name']:
            #学员存在:打印信息并终止循环
            print('查询到的学员信息如下所示------------------')
            print(f"学员的学号是{i['id']},姓名是{i['name']},手机号是{i['tel']}")
            break
    else:
        #学员不存在的提示
        print('查无此人-----')

#显示所有学员信息
def print_all():
    """显示所有学员信息"""
    #1.打印提示字
    print('学号\t姓名\t手机号')
    #2.打印所有学员的数据
    for i in info:
        print(f"{i['id']},{i['name']},{i['tel']}")

#系统功能需要循环使用,直到用户输入6,才退出系统
while True:
     #1.显示功能界面
     info_print()

     #2.用户输入功能序号
     user_num = int(input('请输入功能序号:'))

    #3.按照用户输入的功能序号,执行不同的功能(函数)
     #如果用户输入1.执行添加;如果用户输入2.执行删除。。。。。多重功能
     if user_num ==1:
         #print('添加')
        add_info()
     elif user_num == 2:
         #print('删除')
         del_info()
     elif user_num == 3:
         #print('修改')
        modify_info()
     elif user_num == 4:
         #print('查询')
        search_info()
     elif user_num == 5:
         #print('显示所有学员')
        print_all()
     elif user_num == 6:
         print('退出系统')
     else:
         print('输入的功能序号有误')

显示所有学员信息代码
运行结果:

运行结果

220_退出系统

1.3.4.6 退出系统
在用户输入功能序号6的时候要退出系统,代码如下:

......
elif user_num == '6':
	exit_flag = input('确定要退出吗?yes  or  no ')
	if exit_flag == 'yes':
		break

退出系统,实现代码如下所示:

#定义功能界面函数
def info_print():
    print('请选择功能------------')
    print('1.添加学员')
    print('2.删除学员')
    print('3.修改学员')
    print('4.查询学员')
    print('5.显示所有学员')
    print('6.退出系统')
    print('-'*20)

#等等待存储所有学员的信息
info = []

#添加学员信息的函数
def add_info():
    """添加学员函数"""
    #1.用户输入:学号、姓名、手机号
    new_id = input('请输入学号:')
    new_name = input('请输入姓名:')
    new_tel = input('请输入手机号:')

    #2.判断是否添加这个学员:如果学员姓名已经存在,则报错提示;如果姓名不存在,则添加新增数据。
    global info
    #2.1 不允许姓名重复:判断用户输入的姓名和列表里面字典的name对应的value值是否相等,如果相等,则提示用户输入数据已经存在。
    for i in info:
        if new_name == i['name']:
            print('此用户已经存在')
            #return作用:退出当前函数,后面添加信息的代码不执行
            return

    #2.2 如果输入的姓名不存在,则添加数据;准备空字典,字典新增数据,然后在列表中追加字典
    info_dict = {}

    #字典新增数据
    info_dict['id'] = new_id
    info_dict['name'] = new_name
    info_dict['tel'] = new_tel
    print(info_dict)

    #列表追加字典
    info.append(info_dict)
    print(info)

#删除学员
def  del_info():
    """删除学员"""
    #1.用户输入要删除的学员姓名
    del_name = input('请输入要删除的学员的姓名:')
    #2.判断学员是否存在:存在则删除,不存在则给出相应提示
    #2.1 声明Info是全局变量
    global info
    #2.2 遍历列表
    for i in info:
        #2.3 判断学员是否存在:存在执行删除(列表里面的字典),break:这个系统不允许重名,删除了一个数据,后面的不需要在遍历;不存在则给出相应提示
        if del_name ==i['name']:
            #列表删除数据 --按数据删除remove
            info.remove(i)
            break
    else:
        print('该学员不存在')

    print(info)

#修改函数
def modify_info():
    """修改学员信息"""
    #1.用户输入想要修改的学员的姓名
    modify_name = input('请输入要修改的学员的姓名:')

    #2.判断学员是否存在:存在则修改手机号;不存在则由系统给出相应提示
    #2.1 声明info是全局变量
    global info
    #2.2 遍历列表,判断输入的姓名是否与列表中已有名字相同
    for i in info:
        if modify_name == i['name']:
            #将tel这个key修改值,并终止此循环操作
            i['tel'] = input('请输入新的手机号:')
            break
    else:
        #学员不存在
        print('该学员不存在')

    #3.打印info
    print(info)

#查询学员信息函数
def search_info():
    """查询学员信息"""
    #1.用户输入目标学员姓名
    search_name = input('请输入要查询的学员的姓名:')

    #2.检查学员是否存在:存在打印这个学员的信息,不存在系统则给出相应提示
    #2.1 声明info为全局
    global info
    #2.2 遍历info, 判断输入的学员是否存在
    for i in info:
        if search_name == i['name']:
            #学员存在:打印信息并终止循环
            print('查询到的学员信息如下所示------------------')
            print(f"学员的学号是{i['id']},姓名是{i['name']},手机号是{i['tel']}")
            break
    else:
        #学员不存在的提示
        print('查无此人-----')

#显示所有学员信息
def print_all():
    """显示所有学员信息"""
    #1.打印提示字
    print('学号\t姓名\t手机号')
    #2.打印所有学员的数据
    for i in info:
        print(f"{i['id']}\t{i['name']}\t{i['tel']}")

#系统功能需要循环使用,直到用户输入6,才退出系统
while True:
     #1.显示功能界面
     info_print()

     #2.用户输入功能序号
     user_num = int(input('请输入功能序号:'))

    #3.按照用户输入的功能序号,执行不同的功能(函数)
     #如果用户输入1.执行添加;如果用户输入2.执行删除。。。。。多重功能
     if user_num ==1:
         #print('添加')
        add_info()
     elif user_num == 2:
         #print('删除')
         del_info()
     elif user_num == 3:
         #print('修改')
        modify_info()
     elif user_num == 4:
         #print('查询')
        search_info()
     elif user_num == 5:
         #print('显示所有学员')
        print_all()
     elif user_num == 6:
         #print('退出系统')
        #程序要想结束,退出循环终止while  True  --  break
         exit_flag = input('确定要退出吗?yes or no')
         if exit_flag == 'yes':
             break
     else:
         print('输入的功能序号有误')

实现退出系统的代码
运行结果:
运行结果

学生信息管理系统# include # include # include #include #include using namespace std; struct Student1 { char *num;//学号 char *subnum;//课程编号 char *subname;//课程编号 char *grade;//学分 char *score1;//平时成绩 char *score2;//实验成绩 char *score3;//卷面成绩 float m;//综合成绩 float n;//实得学分 Student1 *next; };//学号 姓名 性别 宿舍号码 电话号码 struct Student2 { char *num;//学号 char *name;//姓名 char *sex;//性别 char *roomnum;//宿舍号码 char *tel;//电话号码 Student2 * next; }; struct InfList { Student2* head; int size; }; struct CourseList { Student1 * head; int size; }; InfList create2()//创建一个空链表 { InfList list; list.head=0; list.size=0; return list; } CourseList create1()//创建一个空链表 { CourseList list; list.head = 0; list.size = 0; return list; } void deleteAll1(Student1 * p)//cc { delete []p->num; delete []p->grade; delete []p->subnum; delete []p->subname; } void deleteAll(Student2* p1)//in { delete []p1->name; delete []p1->num; delete []p1->roomnum; delete []p1->sex; delete []p1->tel; } void removeAll1 (CourseList & list) { Student1 *p1; while(list.head != NULL) { p1 = list.head; list.head = list.head->next; delete p1; } list.size = 0; } void removeAll (InfList & list) { Student2 *p1; while(list.head != NULL) { p1 = list.head; list.head = list.head->next; delete p1; } list.size = 0; } double getM(char* a,char *b,char *c)//计算综合成绩 { double m; double a1=atof(a); double b1=atof(b); double c1=atof(c); if(!strcmp(b,"-1")) { m=a1*(0.3)+c1*(0.7); return m; } else { m=a1*(0.15)+b1*(0.15)+c1*(0.7); return m; } } double getN(char *a,double b)//计算实得学分 { double n; double a1=atof(a); switch(int(b)/10) { case 10: case 9:n=a1*1;return n;break; case 8:n=a1*(0.8);return n;break; case 7:n=a1*(0.75);return n;break; case 6:n=a1*(0.6);return n;break; default:n=0;return n; } } CourseList LoadData1 (CourseList & list) //将成绩数据读入数组中,动态变量管理 { list=create1(); ::ifstream infile("b.txt",ios::in|ios::nocreate);//打开成绩文件 if(!infile) { cout<<"不能打开文件:b.txt"<>buff; if(infile.eof()) break; p1->num=new char[strlen(buff)+1]; strcpy(p1->num,buff); infile>>buff; p1->subnum=new char[strlen(buff)+1]; strcpy(p1->subnum,buff); infile>>buff; p1->subname=new char[strlen(buff)+1]; strcpy(p1->subname,buff); infile>>buff; p1->grade=new char[strlen(buff)+1]; strcpy(p1->grade,buff); infile>>buff; p1->score1=new char[strlen(buff)+1]; strcpy(p1->score1,buff); infile>>buff; p1->score2=new char[strlen(buff)+1]; strcpy(p1->score2,buff); infile>>buff; p1->score3=new char[strlen(buff)+1]; strcpy(p1->score3,buff); p1->m=getM(p1->score1,p1->score2,p1->score3); p1->n=getN(p1->grade,p1->m); p1->next=NULL; if (list.head==0) list.head=p1; else p2->next=p1; p2=p1; n++; } list.size=n; infile.close(); return list; } InfList LoadData (InfList & list) //将基本信息数据读入数组中,动态变量管理 { list=create2(); ::ifstream infile("a.txt",ios::in|ios::nocreate);//打开信息文件 if(!infile) { cout<<"不能打开文件:a.txt"<>buff; if(infile.eof()) break; p1->num=new char[strlen(buff)+1]; strcpy(p1->num,buff); infile>>buff; p1->name=new char[strlen(buff)+1]; strcpy(p1->name,buff); infile>>buff; p1->sex=new char[strlen(buff)+1]; strcpy(p1->sex,buff); infile>>buff; p1->roomnum=new char[strlen(buff)+1]; strcpy(p1->roomnum,buff); infile>>buff; p1->tel=new char[strlen(buff)+1]; strcpy(p1->tel,buff); p1->next=NULL; if (list.head==0) list.head=p1; else p2->next=p1; p2=p1; n++; } list.size=n; return list; infile.close(); } char * getChar(const char * sen) { cout<<sen<>c; while(!cin.good()) { cin.clear(); cin.getline(buffer, 80); cout<>c; } return c; } int getInt( const char * msg) { cout<<msg<>n; while(!cin.good()) { cin.clear(); cin.getline(buffer, 80); cout<>n; } return n; } void print(CourseList &list;)//输出所有数据 { system("cls");//清屏 LoadData1(list); cout<<setiosflags(ios::left); cout<<"学生成绩录入:"<<endl<<'\n'; Student1 *p = list.head; cout<<"学号"<<setw(10)<<"课程编号"<<setw(10)<<"课程名称"<<setw(9)<<"学分"; cout<<setw(8)<<"平时成绩"<<setw(10)<<"实验成绩"<<setw(10)<<"卷面成绩"; cout<<setw(10)<<"综合成绩"<<setw(10)<<"实得学分"<<endl; while (p!= NULL) { cout<<setw(3)<num<<setw(10)<subnum<<setw(12)<subname<<setw(9)<grade; cout<<setw(8)<score1<<setw(10)<score2<<setw(10)<score3; cout<<setw(10)<m<<setw(10)<n<next; } cout<<"size(学生个数)="<<list.size/3<<endl; cout<next; deleteAll1(p1); } removeAll1(list); } void Numprint(InfList & list) { LoadData(list); char num[20]; int m=0; strcpy(num,getChar("请输入学号:")); cout<num,num)) { cout<<"学号"<<setw(8)<<"宿舍号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"电话号"<<endl; cout<<setw(4)<num<<setw(8)<roomnum<<setw(8)<name<<setw(8)<sex<<setw(8)<tel<next; } if(m==0) { cout<<"未找到学生学号"<<num<<endl; cout<<endl; if(getInt("是否继续查询:(1/0)")==1) Numprint(list); cout<<endl; return; } cout<<endl; if(getInt("是否继续查询:(1/0)")==1) Numprint(list); cout<next; deleteAll(p1); } removeAll(list); } void Nameprint(InfList & list) { LoadData (list); char name [20]; int m=0; strcpy(name,getChar("输入姓名:")); Student2 * p = list.head; for(int i = 0; p != NULL; i++) { if (!strcmp(p->name,name)) { cout<<"学号"<<setw(8)<<"宿舍号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"电话号"<<endl; cout<<setw(4)<num<<setw(8)<roomnum<<setw(8)<name<<setw(8)<sex<<setw(8)<tel<next; } if(m==0) { cout<<"未找到学生"<<name<<'\n'; cout<<endl; if(getInt("是否继续查询:(1/0)")==1) Nameprint(list); cout<<endl; return; } cout<<endl; if(getInt("是否继续查询:(1/0)")==1) Nameprint(list); cout<next; deleteAll(p1); } removeAll(list); } void Rnumprint(InfList & list) { LoadData (list); char rnum [20]; int m=0; strcpy(rnum,getChar("输入宿舍号:")); Student2 * p = list.head; for(int i = 0; p != NULL; i++) { if (!strcmp(p->roomnum,rnum)) { cout<<"学号"<<setw(8)<<"宿舍号"<<setw(8)<<"姓名"<<setw(8)<<"性别"<<setw(8)<<"电话号"<<endl; cout<<setw(4)<num<<setw(8)<roomnum<<setw(8)<name<<setw(8)<sex<<setw(8)<tel<next; } if(m==0) { cout<<"未找到宿舍号"<<rnum<<'\n'; cout<<endl; if(getInt("是否继续查询:(1/0)")==1) Rnumprint( list); cout<<endl;return; } cout<<endl; if(getInt("是否继续查询:(1/0)")==1) Rnumprint(list); cout<next; deleteAll(p1); } removeAll(list); } void NumPrint(CourseList & list) { LoadData1(list); char num[20]; int s=0; double sum=0; strcpy(num,getChar("请输入学号:")); cout<num,num)) { if(s==0) { cout<<' '<<"学号"<<setw(10)<<"课程编号"<<setw(9)<<"课程名称"<<setw(10)<<"综合成绩"<<setw(10)<<"实得学分"<<endl; } cout<<setw(4)<num<<setw(10)<subnum<<setw(10)<subname<<setw(10)<m<<setw(10)<n<n; } p=p->next; } cout<<"共修:"<<s<<"科,"<<"实得总学分为:"<<sum<<endl; if(s==0) { cout<<"未找到学生学号"<<num<<endl; if(getInt("是否继续查询:(1/0)")==1) NumPrint(list); cout<<endl; return; } cout<<endl; if(getInt("是否继续查询:(1/0)")==1) NumPrint(list); cout<next; deleteAll1(p1); } removeAll1(list); } int Gochoice () { system("cls"); cout<<" \n\n"; cout<<" 学 生 基 本 信 息 查 询"; cout<<"\n\n \n\n"; cout<< "输入命令编号:\n\n"; cout<<" 1. 学号查询\n"<<endl; cout<<" 2. 姓名查询\n"<<endl; cout<<" 3. 宿舍号查询\n"<<endl; cout<<" 0. 返回菜单\n"<<endl; return getInt("选择命令:"); } void GetAll() { CourseList list; print(list); } void LookInf()//查询学生信息 { int choice; InfList list1; while((choice = Gochoice()) != 0) { switch(choice) { case 1: Numprint(list1); break; case 2: Nameprint(list1); break; case 3: Rnumprint(list1); break; default:cout<<"输入命令不存在\n"; } } } void LookGrade()//查询成绩 { CourseList list; NumPrint(list); } void Remove1 (InfList &list;, const int index)//删除a.txt中的数据 { system("cls"); cout<<setiosflags(ios::left); if (list.size == 0 || index list.size) return ; if (index == 0) { list.size--; Student2 *p = list.head; list.head = list.head->next; cout<<"删除文件a.txt中:"<<endl; cout<<' '<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"宿舍号"<<setw(10)<<"电话"<<endl; cout<<setw(4)<num<<setw(10)<name<<setw(10)<sex<<setw(10)<roomnum<<setw(10)<tel<<endl<<'\n'; delete p; return ; } Student2 *p1 = list.head, *p2 = p1; for(int i = 0; i next; } list.size--; p1->next = p2->next; cout<<"删除文件a.txt中:"<<endl; cout<<"学号"<<setw(8)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"宿舍号"<<setw(10)<<"电话"<<endl; cout<<setw(4)<num<<setw(10)<name<<setw(10)<sex<<setw(10)<roomnum<<setw(10)<tel<<endl<<'\n'; delete p2; } void Remove2 (CourseList & list2, const int index) { cout<<setiosflags(ios::left); if (list2.size == 0 || index = list2.size) return ; if (index == 0) { list2.size--; Student1 *p = list2.head; list2.head = list2.head->next; cout<<"删除文件b.txt中:"<<endl; cout<<"学号"<<' '<<"课程编号"<<' '<<"课程名称"<<' '<<"综合成绩"<<' '<<"实得学分"<<endl; cout<<setw(4)<num<<setw(10)<subnum<<setw(10)<subname<<setw(10)<m<<setw(10)<n<<endl<<'\n'; deleteAll1(p); delete p; return ; } Student1 *p1 = list2.head, *p2 = p1; for(int i = 0; i next; } list2.size--; p1->next = p2->next; cout<<"删除文件b.txt中:"<<endl; cout<<"学号"<<' '<<"课程编号"<<' '<<"课程名称"<<' '<<"综合成绩"<<' '<<"实得学分"<<endl; cout<<setw(4)<num<<setw(10)<subnum<<setw(10)<subname<<setw(10)<m<<setw(10)<n<<endl<num,num)==0) return i; p=p->next; } return -1; } int SearchList( CourseList & list, char * num) { Student1 *p = list.head; for(int i = 0; p != NULL; i++) { if (strcmp(p->num,num)==0) return i; p = p -> next; } return -1; } void DeleteOne()//删除函数 { cout<<setiosflags(ios::left); CourseList list1;//b.txt成绩 InfList list;//a.txt LoadData (list); LoadData1(list1); Student1 * pp=list1.head; Student2 * p=list.head; char num [20]; int sen,lin; strcpy(num,getChar("输入学号:")); sen=SearchData(list,num); if(sen==-1) cout<<"未找到学生"<<num; Remove1(list,sen); for(;;) { lin=SearchList(list1,num); if(lin==-1) break; Remove2(list1,lin); } ::ofstream outfile("a.txt"); if (!outfile ) { cout << "不能打开目的文件:"<<"a.txt"<<'\n'; return; } if((list.size)!=0) outfile<<"学号"<<'\t'<<"姓名"<<'\t'<<"性别"<<'\t'<<"宿舍号码"<<'\t'<<"电话号码"<<'\n'; else cout<<"文件已空"<<endl; Student2 * p1=list.head; while(p1!=NULL) { outfile<num<<'\t'<name<<'\t'<sex<<'\t'<roomnum<<'\t'<<'\t'<tel<next; } outfile.close(); ::ofstream outfile2("b.txt",ios::out); if (!outfile2 ) { cout << "不能打开目的文件:"<<"b.txt"<<'\n'; return; } if((list1.size)!=0) { outfile2<<"学号"<<' '<<"课程编号"<<' '<<"课程名称"<<' '<<"学分"<<' '<<"平时成绩"<<' '<<"实验成绩"; outfile2<<' '<<"卷面成绩"<<' '<<"综合成绩"<<' '<<"实得学分"<<'\n'; } else cout<<"文件已空"<subname,"VC++")==0) { if(pp1->next==NULL) { outfile2<num<<setw(6)<subnum; outfile2<<setw(6)<<' '<subname<<setw(5)<<' '<grade<<setw(4)<<' '<score1; outfile2<<setw(7)<<' '<score2<<setw(7)<<' '<score3; } else { outfile2<num<<setw(6)<subnum; outfile2<<setw(6)<<' '<subname<<setw(5)<<' '<grade<<setw(4)<<' '<score1; outfile2<<setw(7)<<' '<score2<<setw(7)<<' '<score3<<'\n';} } else { outfile2<num<<setw(6)<subnum; outfile2<<setw(6)<<' '<subname<<' '<grade<<setw(4)<<' '<score1; outfile2<<setw(7)<<' '<score2<<setw(7)<<' '<score3<next; } outfile2.close(); cout<<endl; if(getInt("是否继续删除:(1/0)")==1) DeleteOne(); cout<next; deleteAll1(p1); } removeAll1(list1); while(list.head!=NULL) { Student2*p1; p1=list.head; list.head=list.head->next; deleteAll(p1); } removeAll(list); } CourseList sortM(CourseList & list)//综合成绩降序排序 { LoadData1(list); Student1 *p1,*p2; char * data1; float data2; int n; n=list.size; p1=list.head; if (n==0||n==1) return list; for(;p1->next!=NULL;p1=p1->next) { p2=p1->next; for(;p2!=NULL;p2=p2->next) { if (p1->mm) { data1=p1->num; p1->num=p2->num; p2->num=data1; data1=p1->subnum; p1->subnum=p2->subnum; p2->subnum=data1; data1=p1->subname; p1->subname=p2->subname; p2->subname=data1; data1=p1->grade; p1->grade=p2->grade; p2->grade=data1; data1=p1->score1; p1->score1=p2->score1; p2->score1=data1; data1=p1->score2; p1->score2=p2->score2; p2->score2=data1; data1=p1->score3; p1->score3=p2->score3; p2->score3=data1; data2=p1->m; p1->m=p2->m; p2->m=data2; data2=p1->n; p1->n=p2->n; p2->n=data2; } } } return list; } CourseList sortN(CourseList & list)//实得学分降序排序 { LoadData1(list); Student1 *p1,*p2; char * data1; float data2; int n; n=list.size; p1=list.head; if (n==0||n==1) return list; for(p1=list.head;p1->next!=NULL;p1=p1->next) { p2=p1->next; for(;p2!=NULL;p2=p2->next) { if (p1->nn) { data1=p1->num; p1->num=p2->num; p2->num=data1; data1=p1->subnum; p1->subnum=p2->subnum; p2->subnum=data1; data1=p1->subname; p1->subname=p2->subname; p2->subname=data1; data1=p1->grade; p1->grade=p2->grade; p2->grade=data1; data1=p1->score1; p1->score1=p2->score1; p2->score1=data1; data1=p1->score2; p1->score2=p2->score2; p2->score2=data1; data1=p1->score3; p1->score3=p2->score3; p2->score3=data1; data2=p1->m; p1->m=p2->m; p2->m=data2; data2=p1->n; p1->n=p2->n; p2->n=data2; } } } /*while(list.head!=NULL) { Student1*p1; p1=list.head; list.head=list.head->next; deleteAll1(p1); } removeAll1(list);*/ return list; } CourseList sortMM(CourseList & list)//综合成绩升序排序 { LoadData1(list); Student1 *p1,*p2; char * data1; float data2; int n; n=list.size; p1=list.head; if (n==0||n==1) return list; for(p1=list.head;p1->next!=NULL;p1=p1->next) { p2=p1->next; for(;p2!=NULL;p2=p2->next) { if (p1->m>p2->m) { data1=p1->num; p1->num=p2->num; p2->num=data1; data1=p1->subnum; p1->subnum=p2->subnum; p2->subnum=data1; data1=p1->subname; p1->subname=p2->subname; p2->subname=data1; data1=p1->grade; p1->grade=p2->grade; p2->grade=data1; data1=p1->score1; p1->score1=p2->score1; p2->score1=data1; data1=p1->score2; p1->score2=p2->score2; p2->score2=data1; data1=p1->score3; p1->score3=p2->score3; p2->score3=data1; data2=p1->m; p1->m=p2->m; p2->m=data2; data2=p1->n; p1->n=p2->n; p2->n=data2; } } } return list; } CourseList sortNN(CourseList & list)//实得学分升序排序 { LoadData1(list); Student1 *p1,*p2; char * data1; float data2; int n; n=list.size; p1=list.head; if (n==0||n==1) return list; for(p1=list.head;p1->next!=NULL;p1=p1->next) { p2=p1->next; for(;p2!=NULL;p2=p2->next) { if (p1->n>p2->n) { data1=p1->num; p1->num=p2->num; p2->num=data1; data1=p1->subnum; p1->subnum=p2->subnum; p2->subnum=data1; data1=p1->subname; p1->subname=p2->subname; p2->subname=data1; data1=p1->grade; p1->grade=p2->grade; p2->grade=data1; data1=p1->score1; p1->score1=p2->score1; p2->score1=data1; data1=p1->score2; p1->score2=p2->score2; p2->score2=data1; data1=p1->score3; p1->score3=p2->score3; p2->score3=data1; data2=p1->m; p1->m=p2->m; p2->m=data2; data2=p1->n; p1->n=p2->n; p2->n=data2; } } } /*while(list.head!=NULL) { Student1*p1; p1=list.head; list.head=list.head->next; deleteAll1(p1); } removeAll1(list);*/ return list; } void sortPrint (char * c,CourseList & list,char *cc)//输出实得学分排名 { system("cls"); Student1 * p = list.head; if (p==0) { cout<<"数据为空"<subname,c)&&!strcmp(cc,"实得学分")) { cout<<"第"<<n+1<<"名:"<<"学号:"<num<<'\t'<<"课程名称:"<subname<<'\t'<<"实得学分:"<n<subname,c)&&!strcmp(cc,"综合成绩")) { cout<<"第"<<n+1<<"名:"<<"学号:"<num<<'\t'<<"课程名称:"<subname<<'\t'<<"综合成绩:"<m<next; } if (n==0) cout<<"未找到"<<c<<'\n'; } int Select(){ cout<<"选择排序方式:"<<endl; cout<<" 1.升序"<<endl; cout<<" 2.降序"<<endl; cout<<" 0.退出"<<endl; return getInt("选择命令:"); } void Arrange1()//实得学分 { char str[3][10]={"大学物理","高等数学","VC++"}; char xf[]={"实得学分"}; int j=0; CourseList list1; char c[256]; strcpy(c,getChar("输入学科:")); for(int i=0;i<3;i++) { if (!strcmp(str[i],c)) j++; } if(j==0) cout<<"查无此学科"<<endl; else { int choice; while((choice= Select())!=0) { switch(choice) { case 1:sortPrint(c,sortNN(list1),xf);break; case 2:sortPrint(c,sortN(list1),xf);break; default:cout<<"输入命令不存在\n";cout<<"请重输:\n"<<endl;} } } if(getInt("是否继续排序:(1/0)")==1) Arrange1(); cout<next; deleteAll1(p1); } removeAll1(list1); } void Arrange2()//综合成绩 { char str[3][10]={"大学物理","高等数学","VC++"}; char zh[]={"综合成绩"}; int j=0; CourseList list1; char c[256]; strcpy(c,getChar("输入学科:")); for(int i=0;i<3;i++) { if (!strcmp(str[i],c)) j++; } if(j==0) cout<<"查无此学科"<<endl;//return; else { int choice; while((choice= Select())!=0) { switch(choice) { case 1:sortPrint(c,sortMM(list1),zh);break; case 2:sortPrint(c,sortM(list1),zh);break; default:cout<<"输入命令不存在\n"; cout<<"请重输:\n"<<endl; } } } if(getInt("是否继续排序:(1/0)")==1) Arrange2(); cout<next; deleteAll1(p1); } removeAll1(list1); } int enterChoice() { cout<<"\n\n"; cout<<" 学 生 信 息 管 理 系 统"; cout<<"\n\n\n\n"; cout<<"请输入命令编号:\n\n"; cout<<" 1. 学生成绩录入\n"; cout<<" 2. 学生信息查询\n"; cout<<" 3. 学生成绩查询\n"; cout<<" 4. 学生信息删除\n"; cout<<" 5. 实得学分排名\n"; cout<<" 6. 综合成绩排名\n"; cout<<" 0. 退出\n"; return getInt("选择命令:"); } void main() { int choice; while((choice = enterChoice()) != 0) { switch(choice) { case 1: GetAll();break; //学生成绩录入 case 2: LookInf(); system("cls"); break;//学生基本信息查询 case 3: LookGrade(); system("cls");break;//学生成绩查询 case 4: DeleteOne(); system("cls");break;//学生信息删除 case 5: Arrange1(); system("cls");break;//实得学分排名 case 6: Arrange2(); system("cls");break;//综合成绩排名 default:cout<<"输入命令不存在\n"; cout<<"请重输:\n"<<endl; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌上花开,静待绽放!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值