實驗項目名稱電話薄程序
使用了數據庫+JDBC+面向對象知識,主要分爲五個功能頁面,分別爲添加記錄、查找記錄、修改記錄、刪除記錄和排序記錄。
實現這五個功能模塊共創建了六個類:
1.App.java 程序的主類
2.Meau.java 菜單類或窗口類
3.Operate.java 功能實現類
4. Person.java 定義屬性和方法
5. TelNotRegex.java 用戶輸入驗證類
6. Package.java
運行後的信息:
數據庫建table表:
CREATE TABLE telephone(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(32),
age INT,
sex VARCHAR(32),
telNum VARCHAR(32),
address VARCHAR(32)
);
SELECT *FROM telephone
具體代碼實現部分:
App.java 程序的主類
package cn.itcast.datasource.Telephone;
import cn.itcast.datasource.JDBCUtils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;
public class App {
public static void main(String[] args) {
/*獲取連接池方法*/
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
Menu m = new Menu();
m.mainMenu();
}
}
Meau.java 菜單類或窗口類
import cn.itcast.datasource.JDBCUtils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.Scanner;
public class Menu {
static Operate o = new Operate();
Scanner sc = new Scanner(System.in);
/*獲取連接池方法*/
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
public void mainMenu() {
System.out.println("**************電話薄系統**************");
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("** 6 退出記錄 **");
System.out.println("**************************************");
System.out.println("請輸入正確的數字,最小是:1 最大是:6");
int select = sc.nextInt();
switch (select) {
case 1:
addMenu (); //添加用戶菜單
break;
case 2:
searchMenu (); //查找用戶菜單
break;
case 3:
modifyMenu (); //修改用戶信息主菜單
break;
case 4:
deleteMenu ();// 刪除用戶信息菜單
break;
case 5:
orderMenu (); //排序用戶信息菜單
break;
case 6: {
//一旦退出系統自動清空所有的訂單信息
String sql = "TRUNCATE TABLE telephone";
template.update(sql);
System.out.println("歡迎下次使用😀😀😀");
System.exit(0);//退出
}
}
}
public void addMenu (){
System.out.println("****************添加記錄**************");
System.out.println("**************************************");
System.out.println("** 1 添加新記錄 **");
System.out.println("** 2 查找全記錄 **");
System.out.println("** 3 返回上一級 **");
System.out.println("**************************************");
System.out.println("請輸入正確的數字,最小是:1 最大是:3");
o.addLogic();
}
public void searchMenu (){
o.empty();
// searchLogic() 用戶查詢信息業務邏輯控制
System.out.println("****************查找記錄**************");
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("** 6 查看全記錄 **");
System.out.println("** 7 返回上一級 **");
System.out.println("**************************************");
System.out.println("請輸入正確的數字,最小是:1 最大是:7");
o.searchLogic();
}
// modifyMenu () 修改用戶信息主菜單
public void modifyMenu (){
o.empty();
System.out.println("****************修改記錄**************");
System.out.println("**************************************");
System.out.println("** 1 查看全記錄 **");
System.out.println("** 2 修改指定記錄 **");
System.out.println("** 3 返回上一級 **");
System.out.println("**************************************");
System.out.println("請輸入正確的數字,最小是:1 最大是:3");
o.modifyLogicLogic();
}
public void modify(){
System.out.println("****************修改記錄**************");
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("** 6 返回上一級 **");
System.out.println("**************************************");
System.out.println("請輸入正確的數字,最小是:1 最大是:6");
}
// deleteLogic() 刪除信息業務邏輯控制
public void deleteMenu (){
o.empty();
System.out.println("****************刪除記錄**************");
System.out.println("**************************************");
System.out.println("** 1 查看全記錄 **");
System.out.println("** 2 刪除指定記錄 **");
System.out.println("** 3 刪除全部記錄 **");
System.out.println("** 4 返回上一級 **");
System.out.println("**************************************");
System.out.println("請輸入正確的數字,最小是:1 最大是:4");
o.deleteLogic();
}
//排序用戶信息菜單
public void orderMenu (){
o.empty();
System.out.println("****************排序記錄**************");
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("**************************************");
System.out.println("請輸入正確的數字,最小是:1 最大是:5");
o.orderLogic();
}
}
Operate.java 功能實現類
import cn.itcast.datasource.JDBCUtils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class Operate {
/*獲取連接池方法*/
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
static Menu m = new Menu();
TelNoteRegex tel = new TelNoteRegex();
Scanner sc = new Scanner(System.in);
Package pk =new Package();
int count = 100;//電話薄的內存
int s;//定義全局變量s
int choice;
Long tot;
//用戶信息爲空的時候,輸出提示信息
public void empty(){
tot = pk.total();
if(tot==0){
System.out.println("對不起,還未存儲,請存儲後操作!!!");
m.mainMenu();
}
}
//查找是判斷用戶是否存在
public void judge(List list){
if(list != null && !list.isEmpty()){
System.out.println(list);
}else{
System.out.println("查找的用戶不存在,請覈對後查找!");
}
}
// ddLogic() 用戶添加信息業務邏輯控制
public void addLogic() {
int select = sc.nextInt();
select= tel.selectRegex(select);
switch (select) {
case 1:
addOperation();//添加新記錄
m.mainMenu();
case 2:
showAll();//查看全記錄
m.mainMenu();
case 3:
m.mainMenu();//返回上級菜單
break;
}
}
//更新表中的數據
public void addOperation() {
for (int j = s; j <= count; j++) {//限定數據庫表長
++s;
if (s <= count) { //添加電話薄信息
//添加一條記錄,爲每一個電話薄的電話號碼初始置爲123456
String sql = "insert into telephone(telNum )values (?)";
template.update(sql, "123456");
System.out.println("s的值"+s);
System.out.println("輸入姓名,1-10位字母");
String name = sc.next();
tel.nameRegex(name);
//判斷用戶名是否已存在
String sql9= "select *from telephone where name = ?";
List<Map<String, Object>> list1 = template.queryForList(sql9, name);
if(list1 != null && !list1.isEmpty()){
System.out.println("用戶名已存在,請覈對後重新輸入!");
//刪除當前添加的空白行
String sql10 ="delete from telephone where id = ?";
// System.out.println("未減之前的"+s);
template.update(sql10,s);
s--;
// System.out.println("減完之後的"+s);
m.addMenu();
}else{
tel.nameRegex(name);
}
//對數據庫內容重新排序
pk.update();
//更新表中的數據
String sql1 = "update telephone set name = ? where id = ?";
template.update(sql1, name, s);
System.out.println("輸入年齡,1-100歲");
int age = sc.nextInt();
tel.ageRegex(age);
String sql2 = "update telephone set age = ? where id = ?";
template.update(sql2, age, s);
System.out.println("輸入性別,(男 m or M) (女 f or F)");
String sex = sc.next();
tel.sexRegex(sex);
String sql3 = "update telephone set sex = ? where id = ?";
template.update(sql3, sex, s);
System.out.println("輸入電話號碼,6-10位字母");
String telNum = sc.next();
tel.telNumRegex(telNum);
String sql4 = "update telephone set telNum = ? where id = ?";
template.update(sql4, telNum, s);
System.out.println("輸入地址,1-20位字母或數字");
String address = sc.next();
tel.addressRegex(address);
System.out.println(address);
String sql5 = "update telephone set address = ? where id = ?";
template.update(sql5, address, s);
System.out.println("添加成功!");
break;
} else {
System.out.println("對不起,電話薄內存已滿!");
break;
}
}
}
public void showAll() {
//遍歷telephone表
String sql = "select * from telephone";
List<Map<String, Object>> list = template.queryForList(sql);
for (Map<String, Object> stringObjectMap : list) {
System.out.println(stringObjectMap);
}
}
// searchLogic() 用戶查詢信息業務邏輯控制
public void searchLogic(){
int select = sc.nextInt();
select= tel.selectRegex(select);
switch (select){
case 1:
searchByName();//按姓名查詢用戶信息
m.mainMenu();
case 2:
searchByAge();//按年齡查詢用戶信息
m.mainMenu();
case 3:
searchBySex();// 按性別查詢用戶信息
m.mainMenu();
case 4:
searchByTelNum();// 按電話號碼查詢用戶信息
m.mainMenu();
case 5:
searchByAdd();// 按地址查詢用戶信息
m.mainMenu();
case 6:
showAll();// 查詢全部用戶信息
m.mainMenu();
case 7:
m.mainMenu();//返回上級菜單
break;
}
}
public void searchByName(){
System.out.println("輸入姓名,1-10位字母");
String name = sc.next();
tel.nameRegex(name);
String sql = "select *from telephone where name = ?";
List<Map<String, Object>> list = template.queryForList(sql, name);
judge(list);
}
public void searchByAge(){
System.out.println("輸入年齡,1-100歲");
int age = sc.nextInt();
tel.ageRegex(age);
String sql = "select *from telephone where age = ?";
List<Map<String, Object>> list = template.queryForList(sql, age);
judge(list);
}
public void searchBySex(){
System.out.println("輸入性別,(男 m or M) (女 f or F)");
String sex = sc.next();
tel.sexRegex(sex);
String sql = "select *from telephone where sex = ?";
List<Map<String, Object>> list = template.queryForList(sql, sex);
judge(list);
}
public void searchByTelNum(){
System.out.println("輸入電話號碼,6-10位字母");
String telNum = sc.next();
tel.telNumRegex(telNum);
String sql = "select *from telephone where telNum = ?";
List<Map<String, Object>> list = template.queryForList(sql, telNum);
judge(list);
}
public void searchByAdd(){
System.out.println("輸入地址,1-20位字母或數字");
String address = sc.next();
tel.addressRegex(address);
String sql = "select *from telephone where address = ?";
List<Map<String, Object>> list = template.queryForList(sql, address);
judge(list);
}
// modifyLogicLogic() 修改信息業務邏輯控制
public void modifyLogicLogic(){
int select = sc.nextInt();
select= tel.selectRegex(select);
switch (select){
case 1:
showAll();//查看全記錄
m.mainMenu();
case 2:
modify();// 修改指定用戶信息
m.mainMenu();
case 3:
m.mainMenu();//返回上級菜單
}
}
public void modify(){
System.out.println("請輸入記錄序號:");
System.out.println("請輸入正確的數字:最小是 1 最大是 "+tot);
choice=sc.nextInt();
m.modify();
int select = sc.nextInt();
select= tel.selectRegex(select);
switch (select){
case 1:
modifyByName();// 按姓名
m.modifyMenu();
case 2:
modifyByAge();// 按年齡
m.modifyMenu();
case 3:
modifyBySex();// 按性別
m.modifyMenu();
case 4:
modifyByTelNum();// 按電話號碼
m.modifyMenu();
case 5:
modifyByAdd();// 按地址
m.modifyMenu();
case 6:
m.modifyMenu();//返回上級菜單
break;
}
}
public void modifyByName(){
String sql = "update telephone set name = ? where id = ?";
System.out.println("輸入姓名,1-10位字母");
String name = sc.next();
tel.nameRegex(name);
template.update(sql,name,choice);
System.out.println("姓名,修改成功!");
}
public void modifyByAge(){
String sql = "update telephone set age = ? where id = ?";
System.out.println("輸入年齡,1-100歲");
int age = sc.nextInt();
tel.ageRegex(age);
template.update(sql,age,choice);
System.out.println("年齡,修改成功!");
}
public void modifyBySex(){
String sql = "update telephone set sex = ? where id = ?";
System.out.println("輸入性別,(男 m or M) (女 f or F)");
String sex = sc.next();
tel.sexRegex(sex);
template.update(sql,sex,choice);
System.out.println("性別,修改成功!");
}
public void modifyByTelNum(){
String sql = "update telephone set telNum = ? where id = ?";
System.out.println("輸入電話號碼,6-10位字母");
String telNum = sc.next();
tel.telNumRegex(telNum);
template.update(sql,telNum,choice);
System.out.println("電話號碼,修改成功!");
}
public void modifyByAdd(){
String sql = "update telephone set address = ? where id = ?";
System.out.println("輸入地址,1-20位字母或數字");
String address = sc.next();
tel.addressRegex(address);
template.update(sql,address,choice);
System.out.println("地址,修改成功!");
}
public void deleteLogic(){
int select = sc.nextInt();
select= tel.selectRegex(select);
switch (select){
case 1:
showAll();//查看全記錄
m.deleteMenu();
case 2:
delete();// 刪除指定用戶信息
m.deleteMenu();
case 3:
deleteAll();// 刪除全部用戶信息
m.deleteMenu();
case 4:
m.mainMenu();//返回上級菜單
break;
}
}
public void delete(){
System.out.println("請輸入正確的數字:最小是 1 最大是 "+tot);
System.out.println("請輸入記錄序號:");
int select = sc.nextInt();
String sql = "delete from telephone where id = ?";
template.update(sql,select);
System.out.println("刪除成功,請繼續操作!");
//對數據庫內容重新排序
pk.update();
}
public void deleteAll(){
String sql = "TRUNCATE TABLE telephone";
template.update(sql);
System.out.println("電話薄內容已清空,請繼續操作!");
m.mainMenu();
}
// orderLogic() 排序信息業務邏輯控制
public void orderLogic(){
int select = sc.nextInt();
select= tel.selectRegex(select);
switch (select){
case 1:
orderName();//按姓名排序用戶信息
m.orderMenu();
case 2:
orderAge();//按年齡排序用戶信息
m.orderMenu();
case 3:
orderSex();// 按性別排序用戶信息
m.orderMenu();
case 4:
showAll();
case 5:
m.mainMenu();//返回上級菜單
break;
}
}
public void orderName(){
System.out.println("按姓名排序後的結果:");
String sql ="SELECT * FROM telephone ORDER BY name asc";
List<Map<String,Object>> list = template.queryForList(sql);
for (Map<String,Object>stringObjectMap:list){
System.out.println(stringObjectMap);
}
}
public void orderAge(){
System.out.println("按年齡排序後的結果:");
String sql ="SELECT * FROM telephone ORDER BY age DESC";
List<Map<String,Object>> list = template.queryForList(sql);
for (Map<String,Object>stringObjectMap:list){
System.out.println(stringObjectMap);
}
}
public void orderSex(){
System.out.println("按性別排序後的結果:");
String sql ="SELECT * FROM telephone ORDER BY sex asc";
List<Map<String,Object>> list = template.queryForList(sql);
for (Map<String,Object>stringObjectMap:list){
System.out.println(stringObjectMap);
}
}
}
Person.java 定義屬性和方法
public class Person {
private int id; //用戶ID 屬性
private String name;// 用戶姓名屬性
private int age;// 用戶年齡屬性
private String sex; //用戶性別屬性
private String telNum;// 用戶電話號碼屬性
private String address; //用戶地址屬性
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age='" + age + '\'' +
", sex='" + sex + '\'' +
", telNum='" + telNum + '\'' +
", address='" + address + '\'' +
'}';
}
public Person() {
}
public Person(int id, String name, int age, String sex, String telNum, String address) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
this.telNum = telNum;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTelNum() {
return telNum;
}
public void setTelNum(String telNum) {
this.telNum = telNum;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
TelNotRegex.java 用戶輸入驗證類
import cn.itcast.datasource.JDBCUtils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.Scanner;
public class TelNoteRegex {
/*獲取連接池方法*/
static JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
static Scanner sc = new Scanner(System.in);
static Operate o =new Operate();
static Package pk = new Package();
public static int selectRegex(int select){
while (true){
if (select<0||select>10){
System.out.println("您的輸入操作不正確!請重新輸入");
select=sc.nextInt();
selectRegex(select);
}else {
break;
}
}
return select;
}
public static String nameRegex(String name){
while (true){
if(name.length()<1||name.length()>10){
System.out.println("您的輸入操作不正確!請重新輸入");
name = sc.next();
}else {
break;
}
}
return name;
}
public static int ageRegex(int age){
while (true){
if (age<1||age>138){
System.out.println("您的輸入操作不正確!請重新輸入");
age=sc.nextInt();
ageRegex(age);
}else {
break;
}
}
return age;
}
public static String sexRegex(String sex){
while (true){
String str = "m";
if(!(sex.equals("m") || sex.equals("M") || sex.equals("f") || sex.equals("F"))) {
System.out.println("您的輸入操作不正確!請重新輸入");
sex = sc.next();
sexRegex(sex);
}else {
break;
}
}
return sex;
}
public static String telNumRegex(String telNum){
boolean a = false,b;
char[]ch=telNum.toCharArray();
for (int i = 0; i <ch.length ; i++) {
if (ch[i]>='1'&&ch[i]<='9'){
a=true;
}else {
a=false;
}
}
if(telNum.length()<=11||telNum.length()>=6){
b=true;
}else {
b=false;
}
if(!a&&b){
System.out.println("您的輸入操作不正確!請重新輸入");
telNum=sc.next();
telNum=telNumRegex(telNum);
}
return telNum;
}
public static String addressRegex(String address){
while (true){
int len = address.length();
if (len>20||len<1){
System.out.println("您的輸入操作不正確!請重新輸入");
address=sc.next();
address=addressRegex(address);
}else {
break;
}
}
return address;
}
}
Package.java
import cn.itcast.datasource.JDBCUtils.JDBCUtils;
import org.springframework.jdbc.core.JdbcTemplate;
public class Package {
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); /*獲取連接池方法*/
public Long total(){
//查詢telephone表的總記錄數
String sql= "select count(Id) from telephone";
Long total = template.queryForObject(sql,Long.class);
return total;
}
//對數據庫內容按id值重新排序
public void update() {
String sql1="ALTER TABLE telephone DROP id";
String sql2="ALTER TABLE telephone ADD id INT(3) NOT NULL FIRST";
String sql3="ALTER TABLE telephone MODIFY COLUMN id INT( 3 ) NOT NULL AUTO_INCREMENT,ADD PRIMARY KEY(id)";
template.update(sql1);
template.update(sql2);
template.update(sql3);
}
}
如需源碼請訪問百度網盤鏈接:
https://pan.baidu.com/s/1Xs3vpKn2zTNX6ZlAih0UVQ
提取碼:81kw