声明
题目:实现登录和注册功能
登录成功后可以查看所有商品的信息(商品名称,价格,销量)
第一步:
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编程语言,涉及Goods类、Account类及其DAO类的设计,通过Service类整合业务逻辑。
7万+

被折叠的 条评论
为什么被折叠?



