当前位置:   article > 正文

用java语言编写的用户登入模块1_定义用户user抽象类,user抽象类有角色、账号、密码属性 user抽象类有显示功能菜单

定义用户user抽象类,user抽象类有角色、账号、密码属性 user抽象类有显示功能菜单
       今天我们来学习如何用java语言来写一个简单用户登入模块,本次主要利用java中面向对象程序设计的三大特性“封装,继承,多态”来完成代码编写。

(1)要求:通过用户输入,获取用户名和口令;与事先记录在程序中的用户信息进行对比,通过口令验证后登入系统。用户分为系统管理人员、档案录入人员,档案浏览人员三类,相关类图如下所示。

(2)思路:由类图看出,Administrator,Operator,Browser三个类继承于超类User,因此将User类定义为抽象类,将name,passowrd,role三个属性封装在User抽象类中,并通过定义get()方法和set()方法来实现对属性的访问。本部分源代码见下图,代码后有详细注释。     
  1. abstract class User{//定义抽象类class private String name;
  2. private String password;
  3. private String role;//将访问权限设置为私有权限,体现了Java封装的特性
  4. User(String name,String password,String role){//定义构造方法,对name,password,role三个变量赋初值,注意构造方法无方法体
  5. this.name=name;
  6. this.password=password;
  7. this.role=role; //用this关键字代替User类的对象(因为还未创建对象)
  8. }
  9. public boolean changeSelfInfo(String password) {//定义修改用户密码的方法
  10. System.out.println("请输入新密码");
  11. Scanner sc=new Scanner(System.in);
  12. password=sc.next();
  13. if (Dateprocessing.update(name, password, role)){//update方法定义在另外一个类中
  14. this.password=password;
  15. System.out.println("修改成功");
  16. return true;
  17. }else
  18. return false;
  19. }
  20. public boolean downloadFile(String filename) throws IOException{//定义下载文件的方法
  21. System.out.println("下载文件... ...");
  22. return true;
  23. }
  24. public void showFileList(){
  25. System.out.println("列表... ...");
  26. }
  27. public abstract void showMenu();//将showMenu()方法定义为抽象方法,无方法体
  28. public void exitSystem(){//退出系统
  29. System.out.println("系统退出, 谢谢使用 ! ");
  30. System.exit(0);
  31. }
  32. public String getName() {//返回name
  33. return name;
  34. }
  35. public void setName(String name) {设置name值
  36. this.name = name;
  37. }
  38. public String getPassword() {//返回password
  39. return password;
  40. }
  41. public void setPassword(String password) {//定义password值
  42. this.password = password;
  43. }
  44. public String getRole() {//返回role值
  45. return role;
  46. }
  47. public void setRole(String role) {//设置role值
  48. this.role = role;
  49. }
  50. }
    定义完抽象类User类之后,我们要做的是定义三个子类Administrator,Operator,Browser,并且分别实现类中预先的定义方法,源代码如下:
class Administrator extends User{//定义Administrator类	
  1. Administrator(String name,String password,String role) {//定义构造方法
  2. super(name,password,role);}//super关键字用于对父类构造方法的调用
  3. public void showMenu() {//显示菜单
  4. System.out.println("******欢迎进入管理员菜单系统******\n"+ " 1.修改用户\n"
  1. +"2删除用户\n"
  2. +"3新增用户\n"
  3. +"4列出用户\n"
  4. +"5下载文件\n"
  5. +"6文件列表\n"
  6. +"7修改本人密码\n"
  7. +"8退出\n"+"*********");
  8. System.out.print("请选择菜单:"); }
  9. public void changeuser(String name,String password,String role) {//修改用户
  10. System.out.println("修改用户\n请输入用户名");
  11. Scanner Input2=new Scanner(System.in);
  12. name=Input2.next();
  13. System.out.println("请输入密码");
  14. password=Input2.next();
  15. System.out.println("请输入角色");
  16. role=Input2.next();
  17. Dateprocessing.update(name,password,role);//
  18. System.out.println("修改成功!");
  19. Input2.close();//关闭输入流}
  20. public void deluser(String name) {//删除用户
  21. System.out.println("删除用户\n请输入用户名");
  22. Scanner sc=new Scanner(System.in);
  23. name=sc.next();
  24. Dateprocessing.delete(name);//delete方法定义在public类中
  25. sc.close();//关闭输入流
  26. }
  27. public boolean downloadFile(String file) {//下载文件
  28. System.out.println("下载文件\n请输入档案号");
  29. Scanner scc=new Scanner(System.in);
  30. file=scc.next();
  31. System.out.println("下载文件。。。。\n下载成功!!!");
  32. scc.close();
  33. return true;
  34. }
  35. }
定义Operator类
  1. class Operator extends User{
  2. public Operator(String name,String password,String role) {//定义构造方法
  3. super(name,password,role);
  4. }
  5. public void showMenu() {
  6. System.out.println("****欢迎进入档案录入员菜单******\n"
  7. + " 1.上传文件 \n"+
  8. " 2.下载文件 \n"+
  9. " 3.文件列表 \n"+
  10. " 4.修改密码 \n"+
  11. " 5.退 出 \n"+
  12. "********************************");
  13. System.out.print("请选择菜单:");
  14. };
  15. public void uploadFile() {//上传文件
  16. System.out.println("上传文件\n请输入文件名:");
  17. Scanner input2=new Scanner(System.in);
  18. String file_0=input2.nextLine();
  19. System.out.println("请输入档案号:");
  20. String file_1=input2.nextLine();
  21. System.out.println("请输入档案描述:");
  22. String file_2=input2.nextLine();
  23. System.out.println("上传文件... ...\n上传成功!");
  24. input2.close();
  25. };
  26. public boolean downloadFile(String file) {//下载文件
  27. System.out.println("下载文件\n请输入档案号:");
  28. Scanner input2=new Scanner(System.in);
  29. file=input2.nextLine();
  30. System.out.println("下载文件... ...\n下载成功!");input2.close();
  31. return true;
  32. }
  33. public void adduser(String name,String password,String role) {//添加用户
  34. System.out.println("添加用户\n请输入用户名字");
  35. Scanner ssc=new Scanner(System.in);
  36. name=ssc.next();
  37. System.out.println("请输入密码");
  38. password=ssc.next();
  39. System.out.println("请输入角色");
  40. role=ssc.next();
  41. Dateprocessing.insert(name,password,role);ssc.close();//insert方法定义在public类中
  42. }
  43. //列出用户
  44. public void listUser() {//列出用户
  45. System.out.println("列出用户");
  46. Enumeration<User> e = Dateprocessing.users.elements();
  47. while(e.hasMoreElements())
  48. {User a=(User) e.nextElement();
  49. System.out.println("Name:"+a.getName()+" Password:"+
  50. a.getPassword()+" Role:"+
  51. a.getRole());
  52. }
  53. }
  54. }
定义Browser类

  1. class Browser extends User{
  2. public Browser (String name,String password,String role) {//定义 构造方法
  3. super(name,password,role);
  4. }
  5. public void showMenu() {
  6. System.out.println("****欢迎进入档案浏览员菜单******\n"
  7. + " 1.下载文件 \n"+
  8. " 2.文件列表 \n"+
  9. " 3.修改密码 \n"+
  10. " 4.退 出 \n"+
  11. "********************************");
  12. System.out.print("请选择菜单:");
  13. };
  14. public boolean downloadFile(String file) {//下载文件
  15. System.out.println("下载文件\n请输入档案号:");
  16. Scanner input2=new Scanner(System.in);
  17. file=input2.nextLine();
  18. System.out.println("下载文件... ...\n下载成功!");input2.close();return true;
  19. }
  20. }
按照上述方法,我们定义了一个超类User和三个子类Administrator,Operator,Browser,接下来需要定义一个public类来执行main进程,源代码如下:




  1. public class Dateprocessing {
  2. static Hashtable<String, User> users;//定义哈希表类,key项存放name,value项存放抽象类User,User类中存放了name,password,role等属性
  3. static {
  4. users = new Hashtable<String, User>();
  5. users.put("jack", new Operator("jack","123","operator"));
  6. users.put("rose", new Browser("rose","123","browser"));
  7. users.put("kate", new Administrator("kate","123","administrator"));
  8. }
  9. public static User search(String name, String password) //定义搜寻用户是否存在的方法
  10. {
  11. if (users.containsKey(name)) {
  12. User temp =users.get(name);
  13. if ((temp.getPassword()).equals(password))
  14. return temp;
  15. }
  16. return null;
  17. }
  18. public static Enumeration<User> getAllUser() {//列出用户
  19. Enumeration<User> e = users.elements();
  20. return e;
  21. }
  22. public static boolean update(String name, String password, String role) {更改用户的密码和角色
  23. User user;
  24. if (users.containsKey(name)) {
  25. if (role.equalsIgnoreCase("administrator"))
  26. user = new Administrator(name,password, role);
  27. else if (role.equalsIgnoreCase("operator"))
  28. user = new Operator(name,password, role);
  29. else
  30. user = new Browser(name,password, role);
  31. users.put(name, user);
  32. return true;
  33. }else
  34. return false;
  35. }
  36. public static boolean insert(String name, String password, String role) {//添加新用户
  37. User user;
  38. Scanner sc=new Scanner(System.in);
  39. System.out.println("请输入新增用户姓名");name=sc.next();
  40. System.out.println("请输入新增用户密码");password=sc.next();
  41. System.out.println("请输入新增用户角色");role=sc.next();
  42. if(!((role.equalsIgnoreCase("administrator"))||(role.equalsIgnoreCase("operator"))||(role.equalsIgnoreCase("browser")))){
  43. System.out.println("无此角色!");}
  44. if (users.containsKey(name))
  45. {System.out.println("该用户已存在!");sc.close();return false;}
  46. {
  47. if (role.equalsIgnoreCase("administrator"))
  48. user = new Administrator(name,password, role);
  49. else if (role.equalsIgnoreCase("operator"))
  50. user = new Operator(name,password, role);
  51. else
  52. user = new Browser(name,password, role);
  53. users.put(name, user);System.out.println("添加成功!");sc.close();
  54. return true;
  55. }
  56. }
  57. public static boolean delete(String name) {//删除用户
  58. if (users.containsKey(name)){
  59. users.remove(name);
  60. return true;
  61. }else
  62. return false;
  63. }
  64. }
  65. public static void main(String[] args) {//main方法
  66. // TODO Auto-generated method stub
  67. String name,password,role=null;
  68. String tip_system="档案系统";
  69. String tip_menu="请选择菜单";
  70. String tip_exit="退出系统,谢谢您的使用哦亲!!!";
  71. String info="*******欢迎使用"+tip_system+"******\n\t"+"1 登录\n\t"+"2 退出"+"******";
  72. System.out.println(info);
  73. System.out.println(tip_menu);
  74. Scanner Input1=new Scanner(System.in);
  75. int k=Input1.nextInt();
  76. if(k==1) {
  77. System.out.println("请输入用户姓名");
  78. name=Input1.next();
  79. System.out.println("请输入密码");password=Input1.next();
  80. if(!users.containsKey(name)) {System.out.println("不存在该用户哦亲!!!");System.exit(0);}
  81. if(!(users.get(name).getPassword().equals(password))) {System.out.println("密码错误!!!");System.exit(0);}
  82. switch(search(name,password).getRole()){
  83. case("administrator"):Administrator a=new Administrator(name,password,search(name,password).getRole());
  84. a.showMenu();int i=Input1.nextInt();
  85. switch(i) {
  86. case(1):a.changeuser(name,password,role );break;
  87. case(2):a.deluser(name);break;
  88. case(3):insert(name,password,role);break;
  89. case(4):getAllUser();break;
  90. case(5):a.downloadFile(name);break;
  91. case(6):a.showFileList();break;
  92. case(7):a.changeuser(name, password, role);break;
  93. case(8):a.exitSystem();break;
  94. } break;
  95. case("operator"):Operator o=new Operator(name,password,search(name,password).getRole());o.showMenu();int m=Input1.nextInt();
  96. switch(m) {
  97. case(1):o.uploadFile();break;
  98. case(2):o.downloadFile(name );break;
  99. case(3):o.showFileList();break;
  100. case(4):o.changeSelfInfo(password);break;
  101. case(5):o.exitSystem();break;
  102. }break;
  103. case("browser"):Browser b=new Browser(name,password,search(name,password).getRole());b.showMenu(); int n=Input1.nextInt();
  104. switch(n) {
  105. case(1):b.downloadFile(name);break;
  106. case(2):b.showFileList();break;
  107. case(3):b.changeSelfInfo(password);break;
  108. case(4):b.exitSystem();break;
  109. }break;
  110. }
  111. }
  112. else if(k==2) {
  113. System.out.println(tip_exit);
  114. System.exit(0);
  115. }
  116. else System.out.println("输入错误!!");
  117. Input1.close();
  118. }
  119. }
这次我们主要学习了如何利用封装,继承,多态三大特性来编写用户登入模板,代码看上去挺多,但通俗易懂,因本次是面向初学着,故把异常处理,数据库,多线程等方面的代码简化掉,如果读者有兴趣不妨点一波关注 大笑,我会在日后更新这方面的内容。因我正读大二,各方面能力h还不足,希望读者能提供宝贵的建议,我会很高兴的,希望我们一起学习一起进步!!!










声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/67584
推荐阅读
相关标签
  

闽ICP备14008679号