模拟实现基于文本界面的《客户信息管理软件》
- 实现对客户对象的插入、删除、修改(用数组实现),并能够打印客户明细表
- 主菜单:
1 添加客户(姓名、性别、年龄、电话、邮箱)
2 修改客户
3 删除客户
4 客户列表
5 退出
一共有三个界面
CustomerManager
import java.util.Scanner;
public class CustomerManager {
//属性
private Customer[] customer;
private int numberOfCustomer;
private Scanner scan=new Scanner(System.in);
//构造器
public CustomerManager() {
customer=new Customer[10000];
this.numberOfCustomer=0;
//super();
// TODO Auto-generated constructor stub
}
//菜单函数
public void menu() {
System.out.println("欢迎光临客户信息管理系统");
System.out.println("1.添加客户");
System.out.println("2.修改客户");
System.out.println("3.删除客户");
System.out.println("4.打印客户列表");
System.out.println("5.退出");
System.out.println("请输入你的选择:");
}
//添加客户函数
public void addCustomer() {
Customer c=new Customer();
c.setId(this.numberOfCustomer);
System.out.println("请输入客户姓名:");
c.setName(scan.next());
System.out.println("请输入客户性别:");
c.setSex(scan.next());
System.out.println("请输入客户年龄:");
c.setAge(scan.nextInt());
System.out.println("请输入客户电话:");
c.setTel(scan.next());
System.out.println("请输入客户邮箱:");
c.setEmail(scan.next());
customer[this.numberOfCustomer]=c;
this.numberOfCustomer++;
System.out.println("添加成功");
}
//查找函数
public int findCustomer(String nameString,int idString) {
//boolean isFind=false;
int num=-1;
for(int i=0;i<this.numberOfCustomer;i++) {
//System.out.println(customer[i].getId()+customer[i].getAge());
if((nameString.toLowerCase()).equals(customer[i].getName())&&customer[i].getId()==idString) {//toLowerCase()大写变小写
// isFind=true;
num=i;
break;
}
//isFind=false;
}
return num;
}
//修改客户函数
public void modifyCustomer() {
System.out.println("请输入需要修改的客户的姓名:");
String nameString=scan.next();
System.out.println("请输入需要修改的客户的编号:");
int idString=scan.nextInt();
if(findCustomer(nameString,idString)>=0)//查找客户
{
//找到了
modefy(findCustomer(nameString, idString));
}else {
System.out.println("该客户不存在");
}
}
//修改函数
public void modefy(int i) {
System.out.println("请输入要修改的客户信息");
System.out.println("1.姓名");
System.out.println("2.性别");
System.out.println("3.年龄");
System.out.println("4.电话");
System.out.println("5.邮箱");
int choice=scan.nextInt();
switch (choice) {
case 1:{
//修改姓名
System.out.println("请重新输入客户的姓名");
customer[i].setName(scan.next());
System.out.println("修改完毕,客户信息为:");
printTitle();
System.out.print(i);
print(customer[i]);
break;
}case 2:{
//修改性别
System.out.println("请重新输入客户的性别");
customer[i].setSex(scan.next());
System.out.println("修改完毕,客户信息为:");
printTitle();
System.out.print(i);
print(customer[i]);
break;
}case 3:{
//修改年龄
System.out.println("请重新输入客户的年龄");
customer[i].setAge(scan.nextInt());
System.out.println("修改完毕,客户信息为:");
printTitle();
System.out.print(i);
print(customer[i]);
break;
}case 4:{
//修改电话
System.out.println("请重新输入客户的电话");
customer[i].setTel(scan.next());
System.out.println("修改完毕,客户信息为:");
printTitle();
System.out.print(i);
print(customer[i]);
break;
}case 5:{
//修改邮箱
System.out.println("请重新输入客户的邮箱");
customer[i].setEmail(scan.next());
System.out.println("修改完毕,客户信息为:");
printTitle();
System.out.print(i);
print(customer[i]);
break;
}
default:{
System.out.println("输入有误");
break;}
}//switch
}
//打印标题函数
public void printTitle() {
System.out.println("编号\t姓名\t性别\t年龄\t电话\t\t邮箱");
}
//打印客户信息函数
public void print(Customer c) {
System.out.println("\t"+c.getName()+"\t"+c.getSex()+"\t"+c.getAge()+"\t"+c.getTel()+"\t"+c.getEmail());
}
//删除客户函数
public void deleteCustomer() {
System.out.println("请输入要删除的客户的编号和姓名");
int idString=scan.nextInt();
String nameString=scan.next();
//查找客户
if(findCustomer(nameString, idString)>=0) {
//删除客户
for(int i=findCustomer(nameString, idString);i<this.numberOfCustomer;i++) {
customer[i]=customer[i+1];
}
this.numberOfCustomer--;
System .out.println("删除完毕");
}else {
System.out.println("该客户不存在");
}
}
//打印客户列表
public void printCustomerList() {
printTitle();
for(int i=0;i<this.numberOfCustomer;i++) {
System.out.print(i);
print(customer[i]);
}
System.out.println("打印完毕");
}
}
Customer
public class Customer {
private int id;//客户编号
private String name;//客户姓名
private String sex;//客户性别
private int age;//年龄
private String tel;//电话
private String email;//客户邮箱
//构造器
public Customer() {
//super();
// TODO Auto-generated constructor stub
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name.toLowerCase();
}
public void setName(String name) {
this.name = name.toLowerCase();
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
CustomerView
import java.util.Scanner;
//import com.sun.java_cup.internal.runtime.Symbol;
public class CustomerView {
public static void main(String[] args) {
CustomerManager customerManager = new CustomerManager();
Scanner scanner = new Scanner(System.in);
int choice;
// boolean flag=true;
while (true) {
// 与switch和if无关,是Scanner类读取缓冲的问题
// 目前尚未解决,(今天,明天计划解决),先改成next就没事
// 已解决,具体问题的分析,详见另一个文章
/*
* //打印菜单 customerManager.menu(); choice=scanner.nextInt(); switch (choice) {
* case 1:{ //添加客户 System.out.println("添加客户"); break; } case 2:{ //修改客户
* System.out.println("修改客户"); break; } case 3:{ //删除客户
* System.out.println("删除客户"); break; } case 4:{ //打印客户列表
* System.out.println("打印客户列表"); break; } case 5:{ //退出
* System.out.println("是否确认退出 Y/N"); String cString=scanner.next();
* if(cString=="Y"||cString=="y") { System.out.println("确认退出"); //flag=false;
* i=100; break; }else { break;//退出Switch循环体的 意思 }
*
* } default:{ System.out.println("输入有误,请重新输入"); break; }
*
* }//switch
*/
// 打印菜单
customerManager.menu();
choice = scanner.nextInt();
// scanner.close();
if (choice == 1) {
// 添加客户
System.out.println("添加客户");
customerManager.addCustomer();
System.out.println("请按任意键继续");
scanner.nextLine();
String str = scanner.nextLine();
} else if (choice == 2) {
// 修改客户
System.out.println("修改客户");
customerManager.modifyCustomer();
System.out.println("请按任意键继续");
String str = scanner.nextLine();
} else if (choice == 3) {
// 删除客户
System.out.println("删除客户");
customerManager.deleteCustomer();
System.out.println("请按任意键继续");
scanner.nextLine();
String str = scanner.nextLine();
} else if (choice == 4) {
// 打印客户列表
System.out.println("打印客户列表");
customerManager.printCustomerList();
System.out.println("请按任意键继续");
scanner.nextLine();
String str = scanner.nextLine();
} else if (choice == 5) {
// 退出
System.out.println("是否确认退出 Y/N");// 与switch和if无关,是Scanner类读取缓冲的问题
// 目前尚未解决,(今天,明天计划解决),先改成nextInt就没事
// 问题解决了,不是next的问题,是判断问题,详见另一个文章
// scanner=new Scanner(System.in);
// scanner.nextLine();
String cString = scanner.next();
char c = cString.toUpperCase().charAt(0);//toUpperCase()小写便大写
if (c == 'Y') {
System.out.println("退出");
scanner.close();
System.exit(0);
}
} else {
System.out.println("输入有误,请重新输入");
System.out.println("请按任意键继续");
scanner.nextLine();
String str = scanner.nextLine();
}
// scanner.close();
} // while
}
}
总结:遇见了一些问题
- 在后面判断是否退出时,执行了else里的语句,一开始以为是next()和nextInt()连用的问题
- 后来发现其实是两个判断的字符不一样,以为是System.in读入的字符又换行回车等问题 然后又不是
- 最后发现其实是String类其实是new在堆区的,直接用“==”判断使其会判断地址和字符串,自然不相等
- 利用字符串的equals函数判断两个字符串的内容是否相等
- 新学的函数 String类的 toUpperCase()函数 :小写换大写 toLowerCase() 大写变小写 trim()函数去除多余的转义字符 字符串两侧的空白字符等