文章目录

  • 声明
  • 第一步:
  • 第二步:
  • 第三步:
  • 第四步:
  • 第五步
  • 第六步:
  • 第七步:

声明

题目:实现登录和注册功能
登录成功后可以查看所有商品的信息(商品名称,价格,销量)

第一步:

package myproject;public class goods {private String name;private int price;private int consume;public goods(String name, int price, int consume) {this.name = name;this.price = price;this.consume = consume;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public int getConsume() {return consume;}public void setConsume(int consume) {this.consume = consume;}
}

创建一个goods类,然后把商品属性(名字,价格以及销量)然后把构造函数写上,以及各自属性的setter和getter函数,紧接着写下一个的goodsDao类

第二步:

package myproject;public class goodsDao {private  database database1;public goodsDao(database database1) {this.database1 = database1;}public goods findbyname(String goods){goods goods3=null;for(goods goods1:database1.getLists()){if(goods1.getName().equals(goods)){goods3=goods1;break;}}return goods3;}
}

这个类我感觉是用来操作数据库里面的goods 的list ,以至于想要增删改查时,不需要直接去动数据库,直接来操作goodDao类即可

第三步:

package myproject;public class Account {private int accountID;private String accountName;private String password;public Account(int accountID, String accountName, String password) {this.accountID = accountID;this.accountName = accountName;this.password = password;}public int getAccountID() {return accountID;}public void setAccountID(int accountID) {this.accountID = accountID;}public String getAccountName() {return accountName;}public void setAccountName(String accountName) {this.accountName = accountName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

这个的话,也就是跟goods那个性质一样的,也是属于数据库里面的一样东西。一个是物品,一个账户,这个类呢,也就是用来搞账户属性的,但这个类不和数据库接边,同理,这个是放在数据库里的,但是要和它接边的话,那就是有了下面一个类,AccountDao类

第四步:

package myproject;public class AccountDao {private database database1;public AccountDao(database database1) {this.database1 = database1;}public Account findbyname(String name){Account account=null;for (Account account2:database1.getAccounts()) {if(account2.getAccountName().equals(name)){account=account2;break;}}return account;}public void insert(Account account1){database1.getAccounts().add(account1);}}

和那个goodsDao一样,它也就是和数据接边的Account操作的一系列函数所放的类

第五步

package myproject;import java.util.ArrayList;
import java.util.List;public class database {List    <goods> lists=new ArrayList<>();List    <Account>  accounts =new ArrayList<>();public List<Account> getAccounts() {return accounts;}public List<goods> getLists() { return lists; }public database(List<goods> lists) {this.lists = lists;}public database(List<goods> lists, List<Account> accounts) {this.lists = lists;this.accounts = accounts;}public void setLists(List<goods> lists) {this.lists = lists;}public database(){goods goods1=new goods("香蕉",20,50);goods goods2=new goods("苹果",15,65);goods good3=new goods("火龙果",30,100);Account account1=new Account(100,"丘比特","123");lists.add(goods1);lists.add(goods2);lists.add(good3);accounts.add(account1);}}

这个也就是数据库喽,把goods和accounts放进lists里,然后new出来,两个list都作为database 的成员属性,即可写出getter函数和sette函数进行关于数据库里面的成员操作,另外需要把需要初始化的东西,放在database构造函数里面去即可。

第六步:

package myproject;import javax.swing.text.StyledEditorKit;
import java.awt.*;
import java.util.List;
import java.util.Scanner;public class service {Scanner input1=new Scanner(System.in);private  database  database1;private  goodsDao   goodsDao1;private  AccountDao   accountDao1;private int accountID =100;public service(database database1) {this.accountDao1 = new AccountDao(database1);this.goodsDao1 = new goodsDao(database1);this.database1=database1;}public void start(){System.out.println("1. 登录");System.out.println("2. 注册");int  choices =input1.nextInt();switch (choices){case 1: login();break;case 2:register();break;default: System.out.println("无效的选项,请重新输入!");start();}}public void login(){System.out.println("请输入注册的用户名:");String userName = input1.next();System.out.println("请输入注册的密码:");String password = input1.next();Account account= accountDao1.findbyname(userName);if(account != null){//将数据库中找到的账户,再根据其密码和输入的密码比较if(account.getPassword().equals(password)){System.out.println("登录成功!");showgoods();}else{System.out.println("密码错误!");login();}}else{System.out.println("用户名不存在!请重新输入");login();}}public void register(){System.out.println("请输入注册的用户名:");String userName = input1.next();System.out.println("请输入注册的密码:");String password = input1.next();//判断用户名是否被注册Account account = accountDao1.findbyname(userName);if(account != null){System.out.println("该用户名已被注册!输入0返回上一层菜单,其他任意键继续注册");String result = input1.next();if(result.equals("0")){start();}else{register();}}else{//根据注册的信息创建一个账户对象Account registAccount = new Account(accountID,userName,password);registAccount.setAccountName(userName);registAccount.setPassword(password);registAccount.setAccountID(++accountID);//将注册的信息写入数据库accountDao1.insert(registAccount);//返回起始菜单start();}}public void showgoods(){List <goods> goods2= database1.getLists();for (int i = 0; i < goods2.size(); i++) {goods a=goods2.get(i);System.out.println("商品名称:"+a.getName()+"   商品价格:"+a.getPrice()+"元"+"   商品销量:"+a.getConsume()+"箱");}}
}

这一步也就是最关键的一步,是一个service函数,按照我的理解也就是用来封装一系列的操作(即服务器端所需要的做的操作),用来判断 登录 以及注册等等操作,刚开始的话,我一直难以区别Dao类和service类感觉有点相像,都是操作数据库,而且他们的类里面都有database1 数据,都可以直接去操作数据库。

但是我们一般通过service类去对数据库进行增删改查的话,都是通过 Dao类去间接操作的,并非通过service里面的database1直接去,如果直接通过database1的话,那么我们的Dao类写得就没意义了。这是我个人总结吧。

第七步:

package myproject;public class main1 {public static void main(String[] args) {database database1 = new database();service services = new service(database1);services.start();}
}

说实话,我感觉我的逻辑应该没问题的,但一直搞不懂为什么那个最后show的时候它说我的database1是null,搞了一小时的报错,等我研究一下,待会给大家答复

解决了,就眼瞎,忘了构造函数里面的一个this还没写,终究还是我太菜

java项目(注册和登录(成功后查看商品的信息))相关推荐

  1. 登录成功后怎么跳转页面html,怎么设置登录成功后跳转到相应的页面

    想要用angularjs实现的功能是 一进入就是一个登录页面(login.html),如果没有账号密码就注册,登录成功后跳转到相应的页面(shopcart.html) 碰到的问题 1.一进入页面没有显 ...

  2. html登陆成功后跳转页面跳转,怎么设置登录成功后跳转到相应的页面

    想要用angularjs实现的功能是 一进入就是一个登录页面(login.html),如果没有账号密码就注册,登录成功后跳转到相应的页面(shopcart.html) 碰到的问题 1.一进入页面没有显 ...

  3. Vue项目登录成功后返回到原操作页面

    登录超时或者由于其它原因,造成必须重新登录的情况,相信大家都见过这种场景,比较偷懒的办法是登陆成功厚直接回到主页面,但其实我们有更好的解决办法. 作为vue的标配,我们可以利用axios的全局拦截器做 ...

  4. Spring Boot Security + Vue 登录成功后重定向无 Access-Control-Allow-Origin 问题解决办法

    需要明确: 已正确配置跨域资源共享(CORS)(不然也不可能看到登录成功了). 已正确配置了跨站请求伪造(CSRF)(登录时需要携带 _csrf.token). 全部使用 POST 提交的数据. 本文 ...

  5. Java项目实现手机令牌登录Google

    Java项目实现手机令牌登录Google 一.项目背景: 二.代码原理: 三.使用说明(重要): 四.源代码: 一.项目背景: 客户需求:使用Java作为后台,编写一个Java网页系统,其中包含登录功 ...

  6. JSP/Servlet基础——登录成功后返回之前的页面

    笔记,只供自己参考,水平相当菜 配置过滤器,拦截用户请求,如果用户没有登录,就转到登录页面,登录成功后再返回到之前的页面 1 在web.xml中加入过滤器的配置 <?xml version=&q ...

  7. 使用wrapper将java程序注册程windows服务后不生效

    使用wrapper将java程序注册程windows服务后不生效 使用add.bat或test***.bat测试通过了, 然后使用install***.bat注册后cmd显示注册成功. 但是程序到了运 ...

  8. 怎么在html显示已登录状态,登录成功后,返回时不再显示登录等已经没用的页面...

    wap2app适配的时候,常碰到的一个场景就是登录,wap站登录成功后,比较差的体验主要有两个: 1.back依然可以看到登录页,效果很差 2.首页如果有登录入口,返回首页,首页依然显示未登录的状态 ...

  9. 如何使用Shiro实现不同用户登录成功后跳转到不同主页?

    0 如何使用Shiro实现不同用户登录成功后跳转到不同主页?10 Shiro配置文件中successUrl指定的页面只有一个: Java代码   <bean id="shiroFilt ...

最新文章

  1. 华为对边缘计算的思考与理解
  2. 【.net深呼吸】动态类型(高级篇)
  3. JSON 之 SuperObject(16): 实例 - 解析 Google 关键字搜索排名
  4. idea插件手动安装
  5. 写sql语句的经验之谈
  6. pandas 提取某几列_用Pandas做数据清洗,我一般都这么干……
  7. linux脚本编程教程,shell脚本编程基础教程
  8. 【音效处理】Reverb 混响算法简介
  9. vue 日程表组件_VUE也有自己的日历组件
  10. USB3300速度调试
  11. linux音响会产生pulse文件,Linux声音系统和PulseAudio简介
  12. Openstack rocky 部署四: neutron 部署与验证(控制节点)
  13. 人机交互如何改变人类生活 | 公开课笔记
  14. his系统服务器选择,我院完成HIS服务器及数据库的升级改造
  15. 什么是数学建模?如何在数学建模中拿奖?通过建模学到了啥?
  16. Android 项目必备(二十六)-->获取手机中所有 APP
  17. 小米电视4s通过adb调试删除原装软件笔记
  18. 工作学习正确坐姿坐姿提升注意力
  19. 黑苹果安装界面选择语言
  20. Python-pip与模块安装

热门文章

  1. 成功解决将python的列表格式输出数值(如pandas.read_excel().describe()),批量转到表格内daiding
  2. Python编程语言学习:两行代码输出根目录下所有子文件夹的绝对路径、相对路径
  3. 成功解决ModuleNotFoundError: No module named 'torch.utils.tensorboard'
  4. CV之face_recognition:Py之face_recognition库安装、介绍、使用方法详细攻略
  5. 蓝桥杯_算法训练_关联矩阵
  6. bzoj1951 组合数取模 中国剩余定理
  7. linux软件管理(Vim编辑器使用) ——(七)
  8. vue脚手架---vue-cli
  9. WinCE 系统刚启动时运行应用,在应用启动时偶尔出现异常
  10. leetcode 211. Add and Search Word - Data structure design Trie树