HM292 登录接口封装

HM292 登录接口封装

HM292 登录接口封装

来源: 第 292 集 机房预约系统-登录函数接口封装

难度: 普及-

时间限制: 1s

空间限制: 64MB

题目描述

在入口文件里封装全局函数 login(fileName, type):第一个参数是要读的文件名,第二个参数是身份类型——\(1\) 学生,\(2\) 教师,\(3\) 管理员。主菜单选 \(1\) 时调用 login(STUDENT_FILE, 1),选 \(2\) 时 login(TEACHER_FILE, 2),选 \(3\) 时 login(ADMIN_FILE, 3)。三个宏分别展开为 student.txtteacher.txtadmin.txt

函数内部先准备一个身份基类指针 Identity* person,初值空指针,用来在验证成功后以多态方式指向具体派生对象(本问验证分支尚未填写,指针保持为空)。

然后用读方式打开 fileName。若文件不存在:输出 文件不存在 并立即返回,后面不再读。

文件存在时再接收登录信息:

  • 类型 \(1\):先读学号(提示语义为学号);
  • 类型 \(2\):先读职工号(提示语义为职工号);
  • 类型 \(3\):管理员没有编号,不读这一项。

无论哪种身份,都还要读用户名和密码。接着按类型进入学生 / 教师 / 管理员三条验证分支。本问三条分支都还是空的,因此只要文件存在,最后一律走到失败路径,输出 验证登录失败。类型不是 \(1,2,3\) 时同样输出 验证登录失败,且不去打开文件。

用内存模拟“哪些文件存在”。先给出已存在的文件名列表,再给出若干次登录尝试。每次尝试先输出打开的文件名(若有打开),再输出读到的编号语义与字段,最后输出失败信息。

输入格式

第一行一个整数 \(k\),表示已存在的文件个数。

接下来 \(k\) 行,每行一个文件名。

下一行一个整数 \(q\)。

接下来 \(q\) 行:

  • 类型为 \(1\) 或 \(2\):type id name pwd
  • 类型为 \(3\):type name pwd
  • 其他类型:一行一个整数 type

输出格式

对每次尝试:

  • 类型不是 \(1,2,3\):只输出一行 验证登录失败
  • 对应文件不存在:只输出一行 文件不存在
  • 否则第一行输出打开的文件名;第二行:学生为 学号 id,教师为 职工号 id,管理员为 无编号;第三行输出 name pwd;第四行 验证登录失败

样例

输入 #1

2
student.txt
admin.txt
4
1 1 Zhang 123
2 1 Wang 123
3 admin 123
4

输出 #1

student.txt
学号 1
Zhang 123
验证登录失败
文件不存在
admin.txt
无编号
admin 123
验证登录失败
验证登录失败

输入 #2

1
teacher.txt
2
2 8 Zhao 111
1 1 Zhang 123

输出 #2

teacher.txt
职工号 8
Zhao 111
验证登录失败
文件不存在

说明

\(0 \le k \le 5\),\(1 \le q \le 100\)。本问故意不做核对:即使姓名密码将来能对上,现在也必须输出失败,因为三条验证分支还是空实现。

信息

ID
1291
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者