客户信息管理系统
程序员文章站
2022-04-16 08:47:03
这几天在家,复习了了一下 Java SE ,到面向对象那边找了个简单数组项目做了一下,还是有收获的。 只为记录,好记性不如烂笔头 有误请指正 ありがとうございます。 我的公众号 作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1.首先,项目是客户信息管理系统,需求如下: 2.涉及知识点 Ø 类结构 ......
这几天在家,复习了了一下 java-se ,到面向对象那边找了个简单数组项目做了一下,还是有收获的。
只为记录,好记性不如烂笔头
有误请指正
ありがとうございます。
我的公众号
作者:晨钟暮鼓c
个人微信公众号:程序猿的月光宝盒
个人微信公众号:程序猿的月光宝盒
1.首先,项目是客户信息管理系统,需求如下:
2.涉及知识点
ø 类结构的使用:属性、方法及构造器
ø 对象的创建与使用
ø 类的封装性
ø 声明和使用数组
ø 数组的插入、删除和替换
ø 关键字的使用:this
3.源码
实体类:
customer.java
package pers.jsc.customer.pojo; /** * @author 金聖聰 * @title: customer * @projectname customerinfo * @description: 实体对象,用来封装客户信息 * @date 2019/4/2718:28 */ public class customer { /** * 客户姓名 */ private string name; /** * 性别 */ private char gender; /** * 年龄 */ private int age; /** * 电话号码 */ private string phone; /** * 电子邮箱 */ private string email; /** *空构造 */ public customer() { } public string getname() { return name; } public void setname(string name) { this.name = name; } public char getgender() { return gender; } public void setgender(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 setphone(string phone) { this.phone = phone; } public string getemail() { return email; } public void setemail(string email) { this.email = email; } @override public string tostring() { return "customer{" + "name='" + name + '\'' + ", gender=" + gender + ", age=" + age + ", phone='" + phone + '\'' + ", email='" + email + '\'' + '}'; } }
控制类:
customerlist.java
package pers.jsc.customer.control; import pers.jsc.customer.pojo.customer; /** * @author 金聖聰 * @title: customerlist * @projectname customerinfo * @description: customer对象的管理模块, * 内部用数组管理一组customer对象, * 并提供相应的添加、修改、删除和遍历方法, * 供customerview调用 * @date 2019/4/2718:30 */ public class customerlist { /** * 保存客户对象的数组 */ private customer[] customers; /** * 记录已保存客户对象的数量 */ private int total = 0; /** * @description 构造器,用来初始化customers数组 * @param totalcustomer:指定customers数组的最大空间 */ public customerlist(int totalcustomer){ customers = new customer[totalcustomer]; } /** * @description 将参数customer添加到数组中最后一个客户对象记录之后 * @param customer 指定要添加的客户对象 * @return 添加成功返回true;false表示数组已满,无法添加 */ public boolean addcustomer(customer customer){ //判断数组满没满 if (customers[customers.length-1] == null) { int i; for (i = 0 ; i < customers.length ; i++){ if (customers[i] == null) { customers[i] = customer; break; } } total += 1; return true; }else{ return false; } } /** * @description 用参数customer替换数组中由index指定的对象 * @param index 指定所替换对象在数组中的位置,从0开始 * @param cust 指定替换的新客户对象 * @return 替换成功返回true;false表示索引无效,无法替换 */ public boolean replacecustomer(int index, customer cust){ if (index < 0 || index >= total) { return false; } //遍历数组,找到对应下标后替换 for (int i = 0; i < total ; i++) { if ( i == index ){ customers[i] =cust; //跳出所在循环(for) break; } } return true; } /** * @description 从数组中删除参数index指定索引位置的客户对象记录 * @param index 指定所删除对象在数组中的索引位置,从0开始 * @return 删除成功返回true;false表示索引无效,无法删除 */ public boolean deletecustomer(int index){ if(index < 0 || index >= total){ return false; } //total -1 是因为 不-1 ,i+1 就要 = total for (int i = index; i < total -1; i++) { customers[i] = customers[i+1]; } customers[total-1] = null; total --; return true; } /** * @description 返回数组中记录的所有客户对象 * @return 数组中包含了当前所有客户对象,该数组长度与对象个数相同 */ public customer[] getallcustomers(){ //新建一个数组,用来copy customer[] newcustomers = new customer[total]; int i; //copy for (i = 0 ; i < total ; i++){ newcustomers[i] = customers[i]; } return newcustomers; } /** * * @param index 指定所要获取的客户在数组中的索引位置,从0开始 * @return 封装了客户信息的customer对象 */ public customer getcustomer(int index){ //判断形参是否符合标准 if (index < 0 || index >= total){ //不符合 return null; }else { int i; for (i = 0 ; i < total ; i++) { //下标相等,返回这个对象 if (i == index) { return customers[i]; } } } return null; } /** * * @return 返保存客户对象的数量 */ public int gettotal(){ //this 直接返回这个类里面的total字段 return this.total; } }
视图类:
customerview.java
package pers.jsc.customer.views; import pers.jsc.customer.control.customerlist; import pers.jsc.customer.pojo.customer; import pers.jsc.customer.utils.cmutility; /** * @author 金聖聰 * @title: customerview * @projectname customerinfo * @description: 为主模块,负责菜单的显示和处理用户操作 * @date 2019/4/2718:29 */ public class customerview { /** * 创建最大包含10个客户对象的customerlist 对象,供以下各成员方法使用 */ private customerlist customerlist = new customerlist(10); /** * 显示主菜单,响应用户输入, * 根据用户操作分别调用其他相应的成员方法(如addnewcustomer), * 以完成客户信息处理 */ private void entermainmenu() { boolean flag = true; do { system.out.println("-----------------客户信息管理软件-----------------"); 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 readmenuselection = cmutility.readmenuselection(); switch (readmenuselection) { case '1': addnewcustomer(); break; case '2': modifycustomer(); break; case '3': deletecustomer(); break; case '4': listallcustomers(); break; case '5': flag = isexit(); break; default: system.out.println("input error!"); } } while (flag); } /** * 添加客户 */ private void addnewcustomer() { boolean flag; do { system.out.println("---------------------添加客户---------------------"); customer customer = new customer(); system.out.print("姓名:"); string username = cmutility.readstring(5, null); customer.setname(username); system.out.print("性别:"); string usergender = cmutility.readstring(5, null); if (usergender != null){ customer.setgender(usergender.charat(0)); } system.out.print("年龄:"); int userage = cmutility.readint(0); customer.setage(userage); system.out.print("电话:"); string userphone = cmutility.readstring(11, null); customer.setphone(userphone); system.out.print("邮箱:"); string useremail = cmutility.readstring(100, null); customer.setemail(useremail); //判断输入是否有空 if (username == null || usergender == null || userage == 0 || userphone == null || useremail == null) { flag = true; system.out.println("关键信息不能为空"); //跳过本次do-while循环,进入下一次 continue; } //是否添加成功 boolean issuccess = customerlist.addcustomer(customer); if (issuccess) { system.out.println("---------------------添加完成---------------------\n"); flag = false; } else { //添加失败 system.out.println("数组已满,无法添加"); flag = false; } } while (flag); } /** * 修改客户 */ private void modifycustomer() { system.out.println("---------------------修改客户---------------------"); boolean flag; do { system.out.print("请选择待修改客户编号(-1退出):"); string nums = cmutility.readstring(1000, null); if (nums != null) { //string to int if (integer.parseint(nums) == -1) { system.out.println(); return; } int num = integer.parseint(nums) - 1; customer customer = customerlist.getcustomer(num); if (customer != null) { system.out.print("姓名(" + customer.getname() + "):"); string username = cmutility.readstring(5, null); customer.setname(username); system.out.print("性别(" + customer.getgender() + "):"); string usergender = cmutility.readstring(5, null); customer.setgender(usergender.charat(0)); system.out.print("年龄(" + customer.getage() + "):"); int userage = cmutility.readint(0); customer.setage(userage); system.out.print("电话(" + customer.getphone() + "):"); string userphone = cmutility.readstring(11, null); customer.setphone(userphone); system.out.print("邮箱(" + customer.getemail() + "):"); string useremail = cmutility.readstring(100, null); customer.setemail(useremail); //是否修改成功 boolean isrep = customerlist.replacecustomer(num, customer); if (isrep) { system.out.println("---------------------修改完成---------------------\n"); flag = false; } else { //失败 system.out.println("索引无效,无法替换"); flag = true; } } else { system.out.println("查无此人。"); flag = false; } } else { system.out.print("您没有输入任何编号,请重新输入!"); flag = true; } } while (flag); } /** * 删除客户 */ private void deletecustomer() { system.out.println("---------------------删除客户---------------------"); boolean flag; do { system.out.print("请选择待删除客户编号(-1退出):"); string nums = cmutility.readstring(1000, null); //有输入 if (nums != null) { //string to int if (integer.parseint(nums) == -1) { system.out.println(); return; } int num = integer.parseint(nums) - 1; customer customer = customerlist.getcustomer(num); //不为空,有值 if (customer != null) { system.out.print("确认是否删除(y/n):"); char isdeletes = cmutility.readconfirmselection(); switch (isdeletes) { case 'y': boolean isdelete = customerlist.deletecustomer(num); flag = !isdelete; if (isdelete) { system.out.println("---------------------删除完成---------------------\n"); } break; default: system.out.println("您没有删除任何客户数据,请重新输入!"); flag = true; } } else { //为空,没值 system.out.println("查无此人。"); flag = true; } } else { //无输入 system.out.print("您没有输入任何编号,请重新输入!"); flag = true; } } while (flag); } /** * 客户列表 */ private void listallcustomers() { system.out.println("---------------------------客户列表---------------------------"); system.out.println("编号 姓名 性别 年龄 电话 邮箱"); int i; customer[] customers = customerlist.getallcustomers(); for (i = 0; i < customerlist.gettotal(); i++) { system.out.println((i + 1) + " " + customers[i].getname() + " " + customers[i].getgender() + " " + customers[i].getage() + " " + customers[i].getphone() + " " + customers[i].getemail() ); } system.out.println("-------------------------客户列表完成--------------------------"); } /** * @return true exit,false continue */ private boolean isexit() { system.out.print("确认是否退出(y/n):"); char readconfirmselection = cmutility.readconfirmselection(); switch (readconfirmselection) { case 'y': system.out.println("ありがとうございます\nではまた"); return false; default: return true; } } public static void main(string[] args) { customerview customerview = new customerview(); customerview.entermainmenu(); } }
工具类:
cmutility.java
package pers.jsc.customer.utils; import java.util.*; /** cmutility工具类:将不同的功能封装为方法,就是可以直接通过调用方法使用它的功能,而无需考虑具体的功能实现细节。 */ public class cmutility { private static scanner scanner = new scanner(system.in); /** * 用于界面菜单的选择。该方法读取键盘,如果用户键入’1’-’5’中的任意字符,则方法返回。返回值为用户键入字符。 */ 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); } /** * 从键盘读取一个字符,并将其作为方法的返回值。 * 如果用户不输入字符而直接回车,方法将以defaultvalue 作为返回值。 */ public static char readchar(char defaultvalue) { string str = readkeyboard(1, true); return (str.length() == 0) ? defaultvalue : str.charat(0); } /** *从键盘读取一个长度不超过2位的整数,并将其作为方法的返回值。 */ 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; } /** * 从键盘读取一个长度不超过2位的整数,并将其作为方法的返回值。 * 如果用户不输入字符而直接回车,方法将以defaultvalue 作为返回值。 */ 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; } /** * 从键盘读取一个长度不超过limit的字符串,并将其作为方法的返回值。 */ public static string readstring(int limit) { return readkeyboard(limit, false); } /** * 从键盘读取一个长度不超过limit的字符串,并将其作为方法的返回值。 * 如果用户不输入字符而直接回车,方法将以defaultvalue 作为返回值。 */ public static string readstring(int limit, string defaultvalue) { string str = readkeyboard(limit, true); return str.equals("")? defaultvalue : str; } /** *用于确认选择的输入。该方法从键盘读取‘y’或’n’,并将其作为方法的返回值。 */ 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; } }
4.项目结构
以上。
上一篇: 亲吻,还可以唱歌牛B啦
下一篇: 面向对象电梯系列总结