00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)

编程入门 行业动态 更新时间:2024-10-28 15:25:23

-## 一、项目架构分析

今天我们来学习第一个意义类的小项目,对数据的增删改查,甚至都暂时不涉及数据库
在登录注册中,添加数据是哪一个过程呢?
其实我们注册,就是一个添加用户的过程,那么登录又是什么操作呢?登录其实就是查询,判断你的用户名密码
展示数据也是一个查询的过程,添加购物车,如果你的购物车是用数据库来存的话,那么也是一个添加操作,结算是一个修改操作
各种复杂的项目都可以分解为增删改查

分析项目要求,我们暂时连继承和多态都没有用到,
引用数据也叫对象数组
分析一下架构

那么由于我们不使用数据库,数据访问层在这里就暂时不要了

数据的存储我们这里使用数组
业务逻辑搞清楚了,就可以开始搭建项目了


怎么体现呢?先不建类,我们先建包

那么他们两层直接是怎么传数据的呢?
直接调用方法就行了,那么这里·我们又引入了另外一种知识,实体类
Javabean实体

再建立一个包

我们还可以建一个测试


二、主界面



框架大致搭好


新建一个测试类,把主方法放进去,然后调用前面写的方法,让它运行起来

创建实体类

/*
String name :客户姓名
char gender  :性别
int age      :年龄
String phone:电话号码
String email :电子邮箱*/
package .atguigu.bean;public class Customer {//成员变量private String name;private char gender;private int age;private String phone;private String email;//无参构造public Customer(){super();}//有参构造public Customer(String name,char gender,int age,String phone,String email){this.name=name;this.gender=gender;this.age=age;this.phone=phone;this.email=email;}//get/setpublic String getName(){return name;}public void setName(String name){this.name=name;}public char getGender(){return gender;}public void setName(char gender){this.gender=gender;}public int getAge(){return age;}public void setAge(int age){this.age=age;}public String getPhone(){return phone;}public void SetEmail(String email){this.email=email;}//public String getEmail(){return email;}public void SetName(String email){this.email=email;}
}

三、添加功能

//(1)键盘输入客户信息
//(2)创建Customer对象
//(3)调用CustomerService的 addCustomer(Customer c)
架构如下

实际上前面已经有分析过
增加的部分具体全部代码如下:
test里面,我们的测试类,test主类里面去调用菜单

package .atguigu.test;import .atguigu.view.CustomerView;public class test {public static void main(String[] args) {// TODO Auto-generated method stubCustomerView c=new CustomerView();c.menu();}}

CustomerView里面,我们加载和展示菜单,让用户可以进行菜单的选择,以及我们自己做好对应的功能(当然,不直接写在这,我们去调Service业务逻辑层)

package .atguigu.view;import .atguigu.bean.Customer;
import .atguigu.utils.CMUtility;
import .atguigu.service.CustomerService;public class CustomerView {private CustomerService cs=new CustomerService();//不应该是局部变量public void menu() {System.out.println("------客户信息管理软件-----------");System.out.println("/t/t 1、添加客户");System.out.println("/t/t 2、修改客户");System.out.println("/t/t 3、删除客户");System.out.println("/t/t 4、查看客户列表");System.out.println("/t/t 5、退                出");System.out.println("请选择1-5");char select =CMUtility.readMenuSelection();switch (select) {case '1':add();break;case '2':update();break;case '3':delete();break;case '4':list();break;case '5':System.out.println("确定要退出吗?Y/N");char confirm=CMUtility.readConfirmSelection();if(confirm=='Y'){return;}}}private void add() {//第一步:键盘输入客户信息System.out.println("-------添加客户--------- ");System.out.print("姓名: ");String name=CMUtility.readString(20);//限制String类型且长度不超过20System.out.print("性别: ");char gender=CMUtility.readChar();//限定是charSystem.out.print("年龄");int age=CMUtility.readInt();//限定是数字System.out.print("电话:");String tel = CMUtility.readString(11);//限制String类型且长度不超过11,一般手机都是11位System.out.print("邮箱:");String email=CMUtility.readString(32);//限制String类型且长度不超过32//(2)创建Customer对象Customer c=new Customer(name,gender,age,tel,email);//(3)调用CustomerService的addCustomerService cs=new CustomerService();//不应该是局部变量cs.addCustomer(c);System.out.println("-------------添加完成");menu();}public void delete(){}public void list(){}public void update(){}}

CMUtility类,直接复制就行,这个公共类,提供给我们用户输入的功能以及对应的数据验证,我们暂时不考虑它怎么具体实现,我们只要知道它怎么用就行了
,源码如下

package .atguigu.utils;import java.util.*;//static修饰的方法,可以通过"类名.方法"进行调用,当然也可以创建对象,再用"对象.方法"调用
public class CMUtility {private static Scanner scanner = new Scanner(System.in);public static char readMenuSelection() {char c;for (; ; ) {String str = readKeyBoard(1, false);c = str.charAt(0);if (c != '1' && c != '2' && c != '3' && c != '4' && c != '5') {System.out.print("输入有误");} else break;}return c;}public static char readChar() {String str = readKeyBoard(1, false);return str.charAt(0);}public static char readChar(char defaultValue) {String str = readKeyBoard(1, true);return (str.length() == 0) ? defaultValue : str.charAt(0);}public static int readInt() {int n;for (; ; ) {String str = readKeyBoard(2, false);try {n = Integer.parseInt(str);break;} catch (NumberFormatException e) {System.out.print("��������������������룺");}}return n;}public static int readInt(int defaultValue) {int n;for (; ; ) {String str = readKeyBoard(2, true);if (str.equals("")) {return defaultValue;}try {n = Integer.parseInt(str);break;} catch (NumberFormatException e) {System.out.print("��������������������룺");}}return n;}public static String readString(int limit) {return readKeyBoard(limit, false);}public static String readString(int limit, String defaultValue) {String str = readKeyBoard(limit, true);return str.equals("")? defaultValue : str;}public static char readConfirmSelection() {char c;for (; ; ) {String str = readKeyBoard(1, false).toUpperCase();c = str.charAt(0);if (c == 'Y' || c == 'N') {break;} else {System.out.print("输入有误");}}return c;}private static String readKeyBoard(int limit, boolean blankReturn) {String line = "";while (scanner.hasNextLine()) {line = scanner.nextLine();if (line.length() == 0) {if (blankReturn) return line;else continue;}if (line.length() < 1 || line.length() > limit) {System.out.print("长度为" + limit + ",已经超出限制,请重新输入");continue;}break;}return line;}
}

下面我们看重点对象 Customer实体类,这个非常重要,我们需要依赖这个实体类对象来进行各种数据传值,我们把它放在这个包下面 .atguigu.bean

/*
String name :客户姓名
char gender  :性别
int age      :年龄
String phone:电话号码
String email :电子邮箱*/
package .atguigu.bean;public class Customer {//成员变量private String name;private char gender;private int age;private String phone;private String email;//无参构造public Customer(){//super();}//有参构造public Customer(String name,char gender,int age,String phone,String email){this.name=name;this.gender=gender;this.age=age;this.phone=phone;this.email=email;}//get/setpublic String getName(){return name;}public void setName(String name){this.name=name;}public char getGender(){return gender;}public void setName(char gender){this.gender=gender;}public int getAge(){return age;}public void setAge(int age){this.age=age;}public String getPhone(){return phone;}public void SetEmail(String email){this.email=email;}//public String getEmail(){return email;}public void SetName(String email){this.email=email;}
}

下面就是业务逻辑层了,目前写得很简单

package .atguigu.service;import .atguigu.bean.Customer;public class CustomerService {private Customer[]all;//用来存储客户对象private int total;//记录实际存储的客户的数量public CustomerService(){all=new Customer[2];}public CustomerService(int initSize){all = new Customer[initSize];}public void addCustomer(Customer c){//(1)判断数组是否已满if(total>all.length){System.out.println("数组已满");return;}//(2)把c存储all数组中all[total+1]=c;}
}

然后再跳到视图层CustomerView


这样添加功能就完成了

四、、Debug调试

代码调试是java的基础中的基础,我们就此项目来进行代码Debug调试的学习
1、我们怎么去Debug呢?
当你遇到了不知道哪里错的时候就需要Debug了,那么怎么调试(Debug)呢,在左边空格地方双击一下

你打的那个点就叫断点,那么我们又引入了另外一个概念,什么叫做单步调试呢?
调试点击“小虫子”

点击之后1出现调试画面




五、项目结束、删改查


最终代码如下:
test类

package .atguigu.test;import .atguigu.view.CustomerView;public class Test {public static void main(String[] args) {CustomerView view = new CustomerView();view.menu();}}

Customer 类

/*
String name :客户姓名
char gender  :性别
int age      :年龄
String phone:电话号码
String email :电子邮箱*/
package .atguigu.bean;public class Customer {//成员变量private String name;private char gender;private int age;private String phone;private String email;//无参构造public Customer(){//super();}//有参构造public Customer(String name,char gender,int age,String phone,String email){this.name=name;this.gender=gender;this.age=age;this.phone=phone;this.email=email;}//get/setpublic String getName(){return name;}public void setName(String name){this.name=name;}public char getGender(){return gender;}public void setName(char gender){this.gender=gender;}public int getAge(){return age;}public void setAge(int age){this.age=age;}public String getPhone(){return phone;}public void SetEmail(String email){this.email=email;}//public String getEmail(){return email;}public void SetName(String email){this.email=email;}public String getInfo(){return name+"\t"+gender+"\t"+age+"\t"+phone+"\t"+email;}
}

CMUtility 公共方法类,用于接收用户输入

package .atguigu.utils;import java.util.*;//static修饰的方法,可以通过"类名.方法"进行调用,当然也可以创建对象,再用"对象.方法"调用
public class CMUtility {private static Scanner scanner = new Scanner(System.in);public static char readMenuSelection() {char c;for (; ; ) {String str = readKeyBoard(1, false);c = str.charAt(0);if (c != '1' && c != '2' && c != '3' && c != '4' && c != '5') {System.out.print("选择错误,请重新输入:");} else break;}return c;}public static char readChar() {String str = readKeyBoard(1, false);return str.charAt(0);}public static char readChar(char defaultValue) {String str = readKeyBoard(1, true);return (str.length() == 0) ? defaultValue : str.charAt(0);}public static int readInt() {int n;for (; ; ) {String str = readKeyBoard(2, false);try {n = Integer.parseInt(str);break;} catch (NumberFormatException e) {System.out.print("数字输入错误,请重新输入:");}}return n;}public static int readInt(int defaultValue) {int n;for (; ; ) {String str = readKeyBoard(2, true);if (str.equals("")) {return defaultValue;}try {n = Integer.parseInt(str);break;} catch (NumberFormatException e) {System.out.print("数字输入错误,请重新输入:");}}return n;}public static String readString(int limit) {return readKeyBoard(limit, false);}public static String readString(int limit, String defaultValue) {String str = readKeyBoard(limit, true);return str.equals("")? defaultValue : str;}public static char readConfirmSelection() {char c;for (; ; ) {String str = readKeyBoard(1, false).toUpperCase();c = str.charAt(0);if (c == 'Y' || c == 'N') {break;} else {System.out.print("选择错误,请重新输入:");}}return c;}private static String readKeyBoard(int limit, boolean blankReturn) {String line = "";while (scanner.hasNextLine()) {line = scanner.nextLine();if (line.length() == 0) {if (blankReturn) return line;else continue;}if (line.length() < 1 || line.length() > limit) {System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");continue;}break;}return line;}
}

CustomerService 类

package .atguigu.service;import java.util.Arrays;import .atguigu.bean.Customer;public class CustomerService {private Customer[]all;//用来存储客户对象private int total;//记录实际存储的客户的数量public CustomerService(){all=new Customer[2];}public CustomerService(int initSize){all = new Customer[initSize];}//添加一个客户对象到当前数组中public void addCustomer(Customer c){//(1)判断数组是否已满if(total>=all.length){System.out.println("数组已满");return;}//(2)把c存储all数组中all[total]=c;total++;//all[total++]=c;}//返回所有已经存储的客户对象public Customer[]getAll(){//方法一推荐使用:直接用复制数据的方式,一行代码搞定//return Arrays.copyOf(all, total);//复制一个新数组,长度为total//方法二:Customer[] result=new Customer[total];for(int i=0; i<total;i++){result[i]=all[i];}return result;}//根据客户的编号进行删除客户对象操作public void removeById(int id){//(1)确定下标int index =id-1;//(2)检查下标合理性if(index<0||index>total){System.out.println(id+"对应的客户不存在");//以后这个可以抛异常解决return;}//(3)把[index]后面的元素往前移动System.arraycopy(all, index+1, all, index, total-index-1);all[--total]=null;}//根据客户编号查询一个客户对象的方法public Customer getById(int id){//(1)确定下标int index =id-1;//(2)考虑下标的合理性if(index<0||index>=total){System.out.println(id+"对应的客户不存在");//以后这个可以抛异常解决\return null;}//(3)返回[index]位置的客户对象return all[index];}//根据客户编号,替换原原来的客户对象public void replace(int id,Customer newCustomer){//(1)先确定index下标int index =id-1;//(2)检查下标if(index<0||index>=total){System.out.println(id+"对应的客户不存在");//以后这个可以抛异常解决\return;}//(3)替换all[index]= newCustomer;}
}
package .atguigu.view;import .atguigu.bean.Customer;
import .atguigu.utils.CMUtility;
import .atguigu.service.CustomerService;public class CustomerView {private CustomerService cs=new CustomerService();//不应该是局部变量,而应该是成员变量//cs=new CustomerService();//不应该是局部变量public void  menu() {System.out.println("------客户信息管理软件-----------");System.out.println("/t/t 1、添加客户");System.out.println("/t/t 2、修改客户");System.out.println("/t/t 3、删除客户");System.out.println("/t/t 4、查看客户列表");System.out.println("/t/t 5、退                出");System.out.println("请选择1-5");char select =CMUtility.readMenuSelection();switch (select) {case '1':add();break;case '2':update();break;case '3':delete();break;case '4':list();break;case '5':System.out.println("确定要退出吗?Y/N");char confirm=CMUtility.readConfirmSelection();if(confirm=='Y'){return;}}}public void list(){//(1)调用CustomService类的getAll方法获取 已经存储的所有客户对象Customer[]all=cs.getAll();//遍历显示System.out.println("--------客户列表--------------");System.out.println("编号\t姓名 \t性别\t年龄\t电话\t邮箱");for (int i = 0; i < all.length; i++) {System.out.println((i+1)+"\t"+ all[i].getInfo());}System.out.println();System.out.println("-------------客户列表完成-----------------------");menu();}public void delete(){System.out.println("-------------删除客户-----------------------");System.out.println("请选择要删除的客户编号(-1)退出");int id =CMUtility.readInt();//获取用户输入的客户编号if(id==-1){//如果是-1就结束return;}System.out.print("确认删除(Y/N):");char confirm=CMUtility.readConfirmSelection();if(confirm=='N'){//如果不删除就结束//return;menu();}//调用CustomService的 removeById(int id)进行删除操作cs.removeById(id);System.out.println("-------------删除完成-----------------------");menu();}//修改public void update(){System.out.println("-------------修改客户-----------------------");System.out.println("请选择要修改的客户编号(-1)退出");int id =CMUtility.readInt();//获取用户输入的客户编号if(id==-1){//如果是-1就结束return;}//调用CustomService的 getById(int id)获取该客户对象的原来的信息Customer oldcustomer= cs.getById(id);//输入新的数据System.out.print("姓名("+oldcustomer.getName()+")");String name=CMUtility.readString(20, oldcustomer.getName());System.out.print("性别("+oldcustomer.getGender()+")");char gender=CMUtility.readChar(oldcustomer.getGender());System.out.print("年龄("+oldcustomer.getAge()+")");int age=CMUtility.readInt(oldcustomer.getAge());System.out.print("电脑("+oldcustomer.getPhone()+")");String phone=CMUtility.readString(11,oldcustomer.getPhone());System.out.print("邮箱("+oldcustomer.getEmail()+")");String email=CMUtility.readString(32,oldcustomer.getEmail());//获取完输入的数据后//创建 一个新的客户对象Customer newCustomer = new Customer(name,gender,age,phone,email);//替换数组中原来的数组对象cs.replace(id, newCustomer);System.out.print("-------------修改完成-----------------------");menu();}private void add() {//第一步:键盘输入客户信息System.out.println("-------添加客户--------- ");System.out.print("姓名: ");String name=CMUtility.readString(20);//限制String类型且长度不超过20System.out.print("性别: ");char gender=CMUtility.readChar();//限定是charSystem.out.print("年龄:");int age=CMUtility.readInt();//限定是数字System.out.print("电话:");String tel = CMUtility.readString(11);//限制String类型且长度不超过11,一般手机都是11位System.out.print("邮箱:");String email=CMUtility.readString(32);//限制String类型且长度不超过32//(2)创建Customer对象Customer c=new Customer(name,gender,age,tel,email);//(3)调用CustomerService的addcs.addCustomer(c);System.out.println("-------------添加完成---------------");menu();}
}

搭建好就能直接运行

更多推荐

基础,意义,客户,数据库,项目

本文发布于:2023-05-30 09:21:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/365376.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:基础   意义   客户   数据库   项目

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!