需求:
1.用户输入姓名,年龄,手机号,身份证号,所选课程,然后为学员完成注册。
2.手机号身份证号唯一
3.可选课程只能从python,linux,网络安全,前端,数据分析这几门课里选择
4.学员信息存入文件
今天第一次自己尝试编写,后续改进模块化,代码优化,最后参考课程讲的代码进行总结。
思路:
1.创建字典结构
dict{
"序号":{"姓名":aaa,"年龄""111,"手机号":12345678,"身份证号":1234567890,"所选课程":python}
}
创建列表
list = ["python","linux","网络安全","前端","数据分析"]
创建本地文件
f.write("stu_info","a")
2.循环现有的dict判断手机号是否等于value[2][2],若等于则退出当前循环,提示重复。
3.循环现有的dict判断身份证是否等于value[3][2],若等于则退出当前循环,提示重复。
4.判断输入的课程是否in课程列表,若是则判断有效。
5.循环存入文件。
info_dict = {}
class_list = ["python", "linux", "网络安全", "前端", "数据分析"]
count = 0
print("请进行学籍注册".center(50, '-'))
while True:
f = open("stu_info", mode="a", encoding='UTF-8') # 追加模式
name = input("输入姓名:").strip()
age = input("输入年龄:").strip()
phone_num = input("输入手机号:").strip()
id_card = input("输入身份证:").strip()
classes = input("输入选择课程:").strip()
if classes not in class_list:
print("请重新输入课称")
classes = input("输入选择课程:").strip()
phone_num_error_time = 0
id_card_error_time = 0
for cnt, info_values in info_dict.items():
if int(info_values["手机号"]) == int(phone_num):
print("手机号重复,请重新输入")
phone_num = input("输入手机号:").strip()
if phone_num_error_time > 5:
exit("手机号重复次数超过5次,请重新注册..")
phone_num_error_time += 1
if int(info_values["身份证号"]) == int(id_card):
print("身份证号重复,请重新输入")
id_card = input("输入身份证:").strip()
if id_card_error_time > 5:
exit("身份证号重复次数超过5次,请重新注册..")
id_card_error_time += 1
info_dict[f"{count}"] = {
"姓名": name,
"年龄": age,
"手机号": phone_num,
"身份证号": id_card,
"所选课程": classes
}
# # 第一种写入方式,不太好有bug
# f.write(str(f"第{count}位学员").center(50, '-') + '\n')
# for key, val in info_dict[f"{count}"].items():
# info_str = key + ':' + val + '\n'
# f.write(info_str)
# 第二种写入方式 横排写入
info_str = f"{name},{age},{phone_num},{id_card},{classes}\n"
f.write(info_str)
f.close()
print("信息已存入本地文件")
count += 1
第一次总结:大体需求可以实现,但函数模块化,逻辑优化,功能优化,bug还需要修改,改进后继续更新。
今晚听的歌曲是哥哥的《共同渡过》,他活在我们的心中,分开也像共同渡过。
更新:第一阶段课程代码,函数模块化之后的样子
db_file = "student_data.db"
def register_api():
stu_data = {} # 为了存学员信息,初始化字典
print("欢迎来到路飞学程".center(50, '-'))
print("请完成学籍注册")
name = input("姓名:").strip()
age = input("年龄:").strip()
phone_num = input("手机号:").strip()
id_card = input("身份证:").strip()
course_list = ['python开发', 'linux云计算', '网络安全', '数据分析&机器学习', '前端开发']
for index, course in enumerate(course_list):
print(f"{index}.{course}")
selected_course = input("想学习的课:")
if selected_course.isdigit():
selected_course = int(selected_course)
if selected_course >= 0 and selected_course < len(course_list):
picked_course = course_list[selected_course] # 选中的课程
else:
exit("不合法的选项。。")
else:
exit("非法输入。。")
stu_data['name'] = name
stu_data['age'] = age
stu_data['phone'] = phone_num
stu_data['id_num'] = id_card
stu_data['course'] = picked_course
return stu_data
def commit_to_db(filename, stu_data):
"""
把学员数据存到数据库里
:param filename:学员数据库文件
:param stu_data:单个学员的数据
:return:
"""
f = open(filename, "a", encoding='UTF-8')
row = f"{stu_data['name']},{stu_data['age']},{stu_data['phone']},{stu_data['id_num']},{stu_data['course']}\n"
f.write(row)
f.close()
student_data = register_api()
print(student_data)
commit_to_db(db_file, student_data)
唯一性验证的问题待更新
更新唯一性验证和手机号合法性验证
def register_api(): """ 学籍注册函数 :return: """ stu_data = {} # 为了存学员信息,初始化字典 print("欢迎来到路飞学程".center(50, '-')) print("请完成学籍注册") name = input("姓名:").strip() age = input("年龄:").strip() phone_num = input("手机号:").strip() if phone_num in phone_list: exit("手机号重复.") valid_phone_num(phone_num) id_card = input("身份证:").strip() if id_card in id_card_list: exit("身份证号重复.") course_list = ['python开发', 'linux云计算', '网络安全', '数据分析&机器学习', '前端开发'] for index, course in enumerate(course_list): print(f"{index}.{course}") selected_course = input("想学习的课:") if selected_course.isdigit(): selected_course = int(selected_course) if 0 <= selected_course < len(course_list): picked_course = course_list[selected_course] # 选中的课程 else: exit("不合法的选项。。") else: exit("非法输入。。") stu_data['name'] = name stu_data['age'] = age stu_data['phone'] = phone_num stu_data['id_num'] = id_card stu_data['course'] = picked_course return stu_data def commit_to_db(filename, stu_data): """ 把学员数据存到数据库里 :param filename:学员数据库文件 :param stu_data:单个学员的数据 :return: """ f = open(filename, "a", encoding='UTF-8') row = f"{stu_data['name']},{stu_data['age']},{stu_data['phone']},{stu_data['id_num']},{stu_data['course']}\n" f.write(row) f.close() def load_valid_data(filename): """ 把注册文件加载到内存,保存手机号和身份证号为两个列表 供用户输入时查询是否有重复 :param filename:文件名 :return:phone和idcard的列表 """ f = open(filename, encoding='UTF-8') phone_list = [] id_card_list = [] for line in f: line = line.split(',') phone = line[2] id_card = line[3] phone_list.append(phone) id_card_list.append(id_card) return phone_list, id_card_list def valid_phone_num(num): """ 验证手机号是不是数字是不是11位 :param num: 手机号 :return: """ if not num.isdigit(): exit("手机号必须是数字.") if len(num) != 11: exit("手机号必须是11位.") if __name__ == '__main__': db_file = "student_data.db" phone_list, id_card_list = load_valid_data(db_file) student_data = register_api() commit_to_db(db_file, student_data)