0


【 java 面向对象】基于文本界面的客户信息管理系统

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛,全栈领域新星创作者。😜
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:重走 java 路🍁
  • 💬格言:要成为光,因为有怕黑的人!🔥请添加图片描述

目录

前言

对于面向对象这一块的复习,以这个项目为核心复习吧!本项目模拟实现一个基于文本界面的客户信息管理软件,进一步掌握编程技巧和调试技巧,熟悉面向对象编程!

项目涉及知识点

类结的的使用,属性、方法及构造器
对象的创建与使用
类的封装性
声明和使用数组
数组的插入、删除和替换
关键字的使用: this

软件设计结构

在这里插入图片描述
CustomerView 为主模块,负责菜单的显示和处理用户操作。

CustomerList 为 Customer 对象的管理模块,内部用数组管理一组 Customer 对象,并提供相应的添加、修改、删除和遍历方法,供 CustomerView 调用。

Customer 为实体对象,用来封装客户信息。

设计

Customer类的设计

  • Customer 为实体类,用来封装客户信息
  • 该类封装客户的以下信息; String name:客户姓名 char sex : 性别 int age : 年龄 String phone :电话号码 String email :电子邮箱
  • 提供各属性的 get、set 方法
  • 提供所需的构造器

实际上Customer类就是一个javabean !

CustomerList类的设计

  • CustomerList 为 Customer 对象的管理模块,内部使用数组管理一组 Customer 对象
  • 本类封装以下信息: Customer [ ] customers :用来保存客户对象的数组 int total =0 : 记录已保存客户对象的数量
  • 该类至少提供以下构造器和方法: public CustomerList ( int totalCustomer ) public boolean addCustomer ( Customer customer ) public boolean replaceCustomer ( int index , Customer customer ) public boolean deleteCustomer ( int index ) public Customer[] getAllCustomers( ) public Customer getCustomer ( int index ) public int getTotal ()

CustomerView类的设计

  • CustomerView 为主模块,负责菜单的显示和处理用户操作 本类封装以下信息: CustomerList customerList = new CustomerList (10); 创建最大包含10个客户对象的 CustomerList 对象,供以下各成员方法使用。
  • 该类至少提供以下方法: public void enterMainMenu() private void addNewCustomer () private void modifyCustomer () private void deleteCustomer () private void listAllCustomers () public static void main ( String[] args )

CustomerUtil类

这是一个工具类,将不同的功能封装为方法,就是可以直接通过调用方法使用他的功能,无需考虑功能的具体实现细节!

代码

Customer.java

packagemyProject;/*
 * Customer 为实体对象,用来封装客户信息。
 */publicclassCustomer{privateString name;//客户姓名privatechar sex;//性别privateint age;// 年龄privateString phone;//电话号码privateString email;//电子邮箱publicCustomer(){}publicCustomer(String name,char sex,int age,String phone,String email){this.name = name;this.sex = sex;this.age = age;this.phone = phone;this.email = email;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicchargetSex(){return sex;}publicvoidsetSex(char sex){this.sex = sex;}publicintgetAge(){return age;}publicvoidsetAge(int age){this.age = age;}publicStringgetPhone(){return phone;}publicvoidsetPhone(String phone){this.phone = phone;}publicStringgetEmail(){return email;}publicvoidsetEmail(String email){this.email = email;}}

CustomerList.java

packagemyProject;/*
 * CustomerList 为 Customer 对象的管理模块,
 * 内部用数组管理一组 Customer 对象,并提供相应的添加、修改、删除和遍历方法,
 * 供 CustomerView 调用。
 */publicclassCustomerList{privateCustomer[] customers;//用来保存客户对象的数组privateint total =0;//记录已保存客户对象的数量// 用来初始化customer数组的构造器,totalCustomer指定数组长度publicCustomerList(int totalCustomer){
        customers =newCustomer[totalCustomer];}// 将指定的客户添加到数组中publicbooleanaddCustomer(Customer customer){if(total >= customers.length){returnfalse;}
        customers[total]= customer;
        total++;returntrue;}// 修改指定索引位置上的客户信息,customer为修改后的新对象publicbooleanreplaceCustomer(int index,Customer customer){if(index<0|| index>=total){returnfalse;}
        customers[index]= customer;returntrue;}// 删除指定索引位置上的客户publicbooleandeleteCustomer(int index){if(index<0|| index>=total){returnfalse;}for(int i = index;i < total-1;i++){
            customers[i]= customers[i+1];}
        customers[total-1]=null;
        total--;returntrue;}// 获取所有客户信息publicCustomer[]getAllCustomers(){returnthis.customers;}// 按照索引查找客户publicCustomergetCustomer(int index){if(index<0|| index>=total){returnnull;}returnthis.customers[index];}// 获取客户的数量publicintgetTotal(){returnthis.total;}}

CustomerView.java(项目入口文件)

packagemyProject;/*
 * CustomerView 为主模块,负责菜单的显示和处理用户操作。
 */publicclassCustomerView{privateCustomerList customerList =newCustomerList(10);// 显示客户信息管理界面publicvoidenterMainMenu(){boolean flag =true;while(flag){System.out.println("\n------------------客户信息管理-----------------");System.out.println("                  1.添加客户");System.out.println("                  2.修改客户");System.out.println("                  3.删除客户");System.out.println("                  4.客户列表");System.out.println("                  5.退出\n");System.out.print("请选择(1-5): ");char menu =CustomerUtil.readMenuSelect();switch(menu){case'1':addNewCustomer();break;case'2':modifyCustomer();break;case'3':deleteCustomer();break;case'4':listAllCustomers();break;case'5':System.out.println("确认是否退出(Y/N): ");char isExit =CustomerUtil.readConfirmSelect();if(isExit =='Y'){
                        flag =false;}}}}// 添加客户操作privatevoidaddNewCustomer(){System.out.println("------------------添加客户-----------------");System.out.print("姓名:");String name =CustomerUtil.readString(10);System.out.print("性别:");char sex =CustomerUtil.readChar();System.out.print("年龄:");int age =CustomerUtil.readInt();System.out.print("电话:");String phone =CustomerUtil.readString(13);System.out.print("邮箱:");String email =CustomerUtil.readString(30);// 将上述数据封装到对象Customer customer =newCustomer(name,sex,age,phone,email);boolean isSuccess =  customerList.addCustomer(customer);if(!isSuccess){System.out.println("-----------------客户目录已满,添加失败!------------------");}else{System.out.println("-----------------添加完成------------------");}}// 修改客户信息操作privatevoidmodifyCustomer(){System.out.println("------------------修改客户-----------------");Customer cust;int number;while(true){System.out.println("请选择待修改客户编号(-1退出):");
            number =CustomerUtil.readInt();if(number ==-1){return;}
            cust = customerList.getCustomer(number -1);if(cust ==null){System.out.println("无法找到指定客户!");}else{break;}}// 修改客户信息System.out.print("姓名("+ cust.getName()+"): ");String name =CustomerUtil.readString(10,cust.getName());System.out.print("性别("+ cust.getSex()+"): ");char sex =CustomerUtil.readChar(cust.getSex());System.out.print("年龄("+ cust.getAge()+"): ");int age =CustomerUtil.readInt(cust.getAge());System.out.print("电话("+ cust.getPhone()+"): ");String phone =CustomerUtil.readString(13,cust.getPhone());System.out.print("邮箱("+ cust.getEmail()+"): ");String email =CustomerUtil.readString(30,cust.getEmail());Customer newCust =newCustomer(name, sex, age, phone, email);boolean isReplaced = customerList.replaceCustomer(number-1,newCust);if(isReplaced){System.out.println("------------------修改成功-----------------");}else{System.out.println("------------------修改失败!-----------------");}}// 删除客户操作privatevoiddeleteCustomer(){System.out.println("------------------删除客户-----------------");int number;while(true){System.out.println("请选择待修改客户编号(-1退出):");
            number =CustomerUtil.readInt();if(number ==-1){return;}Customer cust = customerList.getCustomer(number -1);if(cust ==null){System.out.println("无法找到指定客户!");}else{break;}}System.out.println("确认是否删除(Y/N): ");char isDelete =CustomerUtil.readConfirmSelect();if(isDelete =='Y'){boolean isSuccess = customerList.deleteCustomer(number-1);if(isSuccess){System.out.println("------------------删除成功-----------------");}else{System.out.println("------------------删除失败-----------------");}}}// 显示客户列表操作privatevoidlistAllCustomers(){System.out.println("--------------------客户列表---------------------");int total = customerList.getTotal();if(total ==0){System.out.println("没有客户记录!");}else{System.out.println("编号 \t姓名 \t性别 \t年龄 \t电话 \t\t 邮箱");Customer[] custs = customerList.getAllCustomers();for(int i =0;i<customerList.getTotal();i++){System.out.println((i+1)+" \t\t"+ custs[i].getName()+" \t"+ custs[i].getSex()+" \t\t"+ custs[i].getAge()+" \t\t"+custs[i].getPhone()+" "+custs[i].getEmail());}}System.out.println("-------------------客户列表完成-------------------");}publicstaticvoidmain(String[] args){CustomerView customerView =newCustomerView();
        customerView.enterMainMenu();}}

CustomerUtil.java

packagemyProject;importjava.util.Scanner;/*
 * 将不同的功能封装为方法,就是可以直接通过调用方法使用他的功能,无需考虑功能的具体实现细节
 */publicclassCustomerUtil{privatestaticScanner scanner =newScanner(System.in);/*
    1、HasNext和HasNextLine会要求用户在控制台输入字符,然后回车,把字符存储到Scanner对象中,不会赋值到变量中,可以用于判断输入的字符是否符合规则要求。
    HasNext会以空格为结束标志,空格后的数字会抛弃掉。
    HasNextLine会以Enter为结束标志

    2、Next和NextLine是直接从Scanner中获取HasNext和HasNextLine存储起来的值给到变量中。如果前面没有HasNext或者HashNextLine获取值,也可以自己获取用户在控制台中输入的字符。

    *///让用户一直输入,直到用户输入符合条件的字符串才退出循环。privatestaticStringreadKeyBoard(int limit,boolean blankreturn){String line ="";while(scanner.hasNextLine()){
            line = scanner.nextLine();if(line.length()==0){if(blankreturn)return line;elsecontinue;}if(line.length()<1|| line.length()>limit){System.out.println("输入长度(不能大于"+ limit +")错误,请重新输入:");continue;}break;}return line;}// 用于界面菜单的选择,该方法读取键盘publicstaticcharreadMenuSelect(){char c;while(true){String str =readKeyBoard(1,false);
            c = str.charAt(0);if(c !='1'&& c !='2'&& c !='3'&& c !='4'&& c !='5'){System.out.println("选择错误,请重新输入:");}else{break;}}return c;}// 从键盘读取一个字符,将其返回publicstaticcharreadChar(){String str =readKeyBoard(1,false);return str.charAt(0);}// 从键盘读取一个字符,将其返回,如果不输入字符直接回车,以defaultValue作为返回值publicstaticcharreadChar(char defaultValue){String str =readKeyBoard(1,true);return(str.length()==0)? defaultValue : str.charAt(0);}// 从键盘读取一个长度不过2的整数并返回publicstaticintreadInt(){int n;while(true){String str =readKeyBoard(2,false);try{
                n =Integer.parseInt(str);break;}catch(NumberFormatException e){System.out.println("数字输入错误,请重新输入:");}}return  n;}// 从键盘读取一个长度不过2的整数并返回,如果不输入字符直接回车,以defaultValue作为返回值publicstaticintreadInt(int defaultValue){int n;while(true){String str =readKeyBoard(2,true);if(str.equals("")){return defaultValue;}try{
                n =Integer.parseInt(str);break;}catch(NumberFormatException e){System.out.println("数字输入错,请重新输入:");}}return  n;}// 从键盘读取一个长度不超过limit的字符串并返回publicstaticStringreadString(int limit){returnreadKeyBoard(limit,false);}// 从键盘读取一个长度不超过limit的字符串并返回,如果不输入字符直接回车,以defaultValue作为返回值publicstaticStringreadString(int limit,String defaultValue){String str =readKeyBoard(limit,true);return str.equals("")? defaultValue : str;}// 用于确认选择的输入,该方法从键盘读取‘Y’或‘N’,并将其作为方法的返回值publicstaticcharreadConfirmSelect(){char c;while(true){String str =readKeyBoard(1,false).toUpperCase();
            c = str.charAt(0);if(c =='Y'|| c =='N'){break;}else{System.out.println("选择错误,请重新输入:");}}return c;}}

运行截图

添加
在这里插入图片描述
查询
在这里插入图片描述

修改
在这里插入图片描述
删除
在这里插入图片描述

结语

如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。

🏰系列专栏
👉软磨 css
👉硬泡 javascript
👉flask框架快速入门

标签: java 数据结构

本文转载自: https://blog.csdn.net/qq_57421630/article/details/126499769
版权归原作者 馆主阿牛 所有, 如有侵权,请联系我们删除。

“【 java 面向对象】基于文本界面的客户信息管理系统”的评论:

还没有评论