7.4.1 用户登录案例
许多应用都会涉及数据的存储,文件作为存储数据的基本形式,与各种应用密不可分。特别是在各类层出不穷的App中,用户登录是最基本的模块。
1.功能分析
一般来说,用户登录分为管理员登录和普通用户登录,在用户使用软件时,系统会判断用户是否存在,若存在,则验证用户名与密码是否正确,从而决定是否登录成功,否则,询问用户是否注册。用户登录流程图如图7-1所示。
图7-1 用户登录流程图
根据以上功能需求,用户管理模块应该包含以下文件(由于数据库连接知识未进行介绍,此处全用CSV文件)。
·管理员用户文件admin.csvv:用于保存管理员的账户信息。
·普通用户文件user.csv:用于保存普通用户注册的信息。
2.程序设计
结合功能需求,设计程序接口,用户登录模块应包含的函数功能分别如下。
·main():程序的入口。
·menu():登录菜单。
·login():登录模块。
·register():用户注册。
·get_user():获取管理员或用户的账号信息。
·user_exist:判断用户名是否存在。
(1)主函数:main()
为用户提供程序入口,先调用主菜单,让用户根据菜单进行选择,如果用户输入的选项不存在,则给出提示,让用户重新输入选择,再根据用户的选择调用登录函数。
(2)显示主菜单:menu()
menu()主要用于显示界面,提供提示给用户。
(3)获取用户信息:get_user()
传递一个文件参数,指明打开哪个文件,以决定是获取管理员还是用户的账号信息。如果获取信息只需要账号、密码,则可以使用切片方式。
函数返回值为获取到的存放用户信息的列表。
(4)登录判断:login()
登录函数也设置一个参数,传递用户选择的用户类型。根据传递的参数,决定调用获取用户信息的函数get_user()时传递哪一个文件信息给函数。如果用户选择“1”,则以管理员身份登录,传递文件参数“admin.csv”给函数get_user();如果用户选择“2”,则以学生身份登录,传递文件参数“user.csv”给函数get_user()。调用函数get_user()时会得到用户信息的列表,将用户输入的账号与密码进行判断,先判断用户名是否存在,即调用函数user_exist(),并将输入的用户名和文件名作为参数传递过去。
如果调用函数user_exist()获得的返回值为真,则判断密码与列表中的密码是否相同,相同,则登录成功,不同,则给出提示。
如果调用函数user_exist()获得的返回值为假,则表示用户名不存在,询问是否要注册新用户。要注册,则调用注册函数,并将用户名和用户类型作为参数传递过去。不需注册,则输出提示信息。
(5)判断用户是否存在:user_exist()
设定用户名和文件名作为参数,根据文件名,调用get_user()函数,获得用户信息列表,再查看用户名是否在列表中存在,存在,返回真,不存在,返回假。
(6)用户注册:register()
将用户账号和用户类型作为参数,如果用户类型是管理,只要求用户输入密码,将用户账号和密码作为一个列表元素追加写入文件admin.csv中,如果是学生,则还需输入姓名、性别、年龄信息,将这些信息组合成一个列表元素,追写到文件user.csv中。
注意:写完文件,一定要关闭,否则会影响下次读取数据。
运行结果如图7-2所示。
图7-2 运行结果