电话簿管理系统(超详细)

这篇博客之前从另外一个博客发过一次,只不过那个博客被我注销了,于是再发一次。这个小作业是在自学javase八成之后向老师要的一个小项目,练练手,也让自己学过的知识更加巩固,当时上网查找这个项目的代码什么的发现很多都需要费用,写这篇博客也是想把这个东西分享给大家,博客上所写的代码仅供参考,有什么不足的地方请各位大牛们随时指正,下面的图片是从项目指导书里面复制过来的,为了给大家看的更清楚,也更明白编写的结构和需求。好了,废话不多说,详细请看下方

一、项目描述

该项目是用于日常生活中记录联系人信息的一款小工具。

实现了对联系人的姓名、年龄、性别、电话号码、住址的添加及修改、查找、删除、排序等功能。该项目是以windows控制台为运行平台,所有的操作都应在控制台上进行。

1.1、编写目的

1、该项目编写的主要目的使学员对以往所学过的知识点做一个统一的复习,将平时所学的内容综合到一起并运用到实际代码编写中。

2、 该项目能够充分的体现出一些简单的业务流程处理,能够使学员掌握基本的业务流程控制。

二、项目流程图

2.1业务流程结构图

2.2基本操作流程图

2.2.1当运行主程序后可在控制台显示主菜单,用户可选择菜单中的选项进行相应的操作如用户输入的菜单选项超出当前菜单所规定的范围外,程序不予以执行,并返回当前菜单,用户需要重新输入。见(图表1)

2.2.2用户选择1 可进入添加记录的下级子菜单见(图表2)

2.2.3当进入下级子菜单后,用户可根据提示进行用户的添加见(图表3)

 

2.2.4在添加新联系人时应对所添加的选项进行验证,如果有输入错误应提示见(图表4)

2.2.5添加完毕后可查看电话薄内的全部记录见(图表5)

2.2.6选择返回选项时,可返回上级主菜单见(图表6)

 

2.2.7选择2进入查找记录子菜单见(图表7)

 

2.2.8用户可根据具体内容进行相关查询见(图表8)

2.2.9选择3进入修改记录子菜单见(图表9)

 

2.2.10通过查看全记录,找到要修改联系的ID号对联系人的内容进行相应的修改见(图表10,11)

 

 

2.2.11选择4进入删除记录子菜单见(图表12)。

 

2.2.12删除共分为删除指定记录和删除全部两种操作。删除指定记录时需要输入被删除

人的ID序号。删除成功后可继续操作见(图表13,14)

 

此时ID为1的ZhangSan用户已被删除,ID为2的LiSi的ID序号会制动增长为1

 

2.2.13删除全部用户。选择该选项可将电话薄清空见(图表15)

 

2.2.14用户可选择不同的选项对电话薄内的信息进行任意排序见(图表16,17,18,19)

 

按姓名排序结果

按年龄排序结果

 按性别排序结果

 

三、设计流程图

四、类设计流程图

五、技术要求

键盘输入Scanner类

正则表达式Pattern类

容器ArrayList类

排序方式(比较器排序)Comparator接口,Collections类

六、编码规范

1、类名

App 对应 Application(程序入口函数)

Menu 对应 Menu (菜单类)

Operate 对应 Operate (业务处理类)

Person 对应 Person (实体类)

TelNoteRegex 对应 TelNoteRegex(用户输入验证类)

OrderByName 对应 OrderByName (姓名排序比较器)

OrderByAge 对应 OrderByAge (年龄排序比较器)

OrderBySex 对应 OrderBySex(性别排序比较器)

2、方法名

2.1、App类中方法(无成员变量)

main() 程序入口函数

start() 主菜单控制

2.2、Operate类中方法及成员变量

*private* Vector<Person> v 集合

addLogic() 用户添加信息业务逻辑控制

searchLogic() 用户查询信息业务逻辑控制

modifyLogicLogic() 修改信息业务逻辑控制

deleteLogic() 删除信息业务逻辑控制

orderLogic() 排序信息业务逻辑控制

addOperation () 添加新用户信息

showAll() 查询全部用户信息

searchByName() 按姓名查询用户信息

searchByAge() 按年龄查询用户信息

searchBySex() 按性别查询用户信息

searchByTelNum() 按电话号码查询用户信息

searchByAdd() 按地址查询用户信息

modify() 修改指定记录信息

delete() 删除指定用户信息

deleteAll() 删除全部用户信息

orderName() 按用户姓名排序信息

orderAge() 按用户年龄排序信息

orderSex() 按用户性别排序信息

2.3、TelNoteRegex类中方法(无成员变量)

menuRegex (int min, int max ) 对菜单输入选项的验证

nameRegex ( ) 对用户输入姓名的验证

ageRegex ( ) 对用户输入年龄的验证

sexRegex ( ) 对用户输入性别的验证

telNumRegex ( ) 对用户输入电话号码的验证

addressRegex ( ) 对用户输入地址的验证

2.4、Menu类中的方法(无成员变量)

mainMenu() 主菜单

addMenu () 添加用户菜单

searchMenu () 查找用户菜单

modifyMenu () 修改用户信息主菜单

subModifyMenu () 修改用户信息子菜单

deleteMenu () 删除用户信息菜单

orderMenu () 排序用户信息菜单

2.5、Person类中的方法及成员变量

*private* *int* id; 用户ID 属性

*private* String name; 用户姓名属性

*private* String age; 用户年龄属性

*private* String sex; 用户性别属性

*private* String telNum; 用户电话号码属性

*private* String address; 用户地址属性

Person() 无参数构造方法

Person(String name, String age, String sex, String telNum, String address) 有参数构造方法

getName() 读取用户名

setName(String name) 设置用户名

getAge() 读取用户年龄

setAge(String age) 设置用户年龄

getSex() 读取用户性别

setSex(String sex) 设置用户性别

getTelNum() 读取用户电话号码

setTelNum (String telNum) 设置用户电话号码

getAddress() 读取用户地址

setAddress(String address) 设置用户地址

getID () 读取用户ID号

setID (int ID) 设置用户ID号

toString() 连接字符串方法

七、项目开发

1、创建项目

2、创建类(先搭建框架,再往里面填代码)

2.1、创建App类

 
 /*
     电话本项目入口类
     */
 public class APP {
    
     public static void main(String[] args) {
         
 ​
     }
     /*
     控制主菜单
     */
     public void start(){
        
 }
 ​

2.2、创建菜单类

 public class Menu {
   
     //主菜单
     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("*********************");
 ​
 ​
     }
     //添加用户菜单
     public void addMenu(){
         System.out.println("     添加记录子菜单     ");
         System.out.println("**********************");
         System.out.println("**    1.添加新记录    **");
         System.out.println("**    2.查看全记录    **");
         System.out.println("**    3.返回上一级    **");
         System.out.println("**********************");
 ​
     }
     //查找用户菜单
     public void searchMenu(){
         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("**********************");
 ​
 ​
     }
     //modifyMenu () 修改用户信息主菜单
     public void modifyMenu(){
         System.out.println("     修改记录子菜单     ");
         System.out.println("**********************");
         System.out.println("**    1.查看全记录    **");
         System.out.println("**    2.修改指定记录  **");
         System.out.println("**    3.返回上一级    **");
         System.out.println("**********************");
 ​
     }
     //subModifyMenu () 修改用户信息子菜单
     public void subModifyMenu(){
         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("**********************");
 ​
     }
     // deleteMenu () 删除用户信息菜单
     public void deleteMenu(){
         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("**********************");
 ​
     }
     //orderMenu () 排序用户信息菜单
     public void orderMenu(){
         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("**********************");
 ​
     }
 }
 

2.3、创建实体类

 package telDirectory.person;
 ​
 public class Person {
     private int id;         //用户ID属性,可以在添加list对象之后用list的长度来对应id
     private String name;    //用户姓名属性
     private String age;     //用户年龄属性
     private String sex;     //用户性别属性: 男:m或M 女:f或F
     private String telNum;  //用户电话号码属性
     private String address; //用户地址属性
 ​
     public Person() {
     }
 ​
     public Person(String name, String age, String sex, String telNum, String address) {
         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 String getAge() {
         return age;
     }
 ​
     public void setAge(String 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;
     }
 ​
     @Override
     public String toString() {
         StringBuffer sb = new StringBuffer();
         sb.append("序号").append(this.id).append("#").append("\t");
         sb.append("姓名").append(this.name).append("\t\t");
         sb.append("年龄").append(this.age).append("\t\t");
         sb.append("性别").append(this.sex).append("\t\t");
         sb.append("电话号码").append(this.telNum).append("\t\t");
         sb.append("地址").append(this.address);
         return sb.toString();
     }
 }
 ​
2.4、创建核心业务类
 package telDirectory.operate;
 ​
 import telDirectory.menu.Menu;
 import telDirectory.person.Person;
 import telDirectory.telNoteRegex.TelNoteRegex;
 ​
 import javax.swing.plaf.SplitPaneUI;
 import java.util.*;
 ​
 /**
  * Operate类中方法及成员变量
  * private Vector<Person> v 集合
  *
  * addLogic() 用户添加信息业务逻辑控制
  * searchLogic() 用户查询信息业务逻辑控制
  * modifyLogicLogic() 修改信息业务逻辑控制          这些是用来控制业务功能的二级子菜单的
  * deleteLogic() 删除信息业务逻辑控制
  * orderLogic() 排序信息业务逻辑控制
  *
  * addOperation () 添加新用户信息
  * showAll() 查询全部用户信息
  * searchByName() 按姓名查询用户信息
  * searchByAge() 按年龄查询用户信息
  * searchBySex() 按性别查询用户信息
  * searchByTelNum() 按电话号码查询用户信息
  * searchByAdd() 按地址查询用户信息
  * modify() 修改指定记录信息
  * delete() 删除指定用户信息
  * deleteAll() 删除全部用户信息
  *
  *
  * orderName() 按用户姓名排序信息
  * orderAge() 按用户年龄排序信息
  * orderSex() 按用户性别排序信息
  */
 ​
 /**
  * 三个内比较器
  * 定义为内部类
  */
 public class Operate {
     private List<Person> list ;
     public Operate(){
         this.list = new ArrayList<>();
     }
     // 用户添加信息业务逻辑控制
     public void addLogic(){
     }
     //用户查询信息业务逻辑控制
     public void searchLogic() {
     }
     //修改信息业务逻辑控制
     public void modifyLogicLogic(){   
     }
     //删除信息业务逻辑控制
     public void deleteLogic(){    
     }
     //排序信息业务逻辑控制
     public void orderLogic() {      
     }
     //添加新用户信息
     public void addOperation(){      
     }
     //查询全部用户信息
     public void showAll(){      
     }
     //按姓名查询用户信息
     public void searchByName(){      
     }
     //按年龄查询用户信息
     public void searchByAge(){
     }
     // 按性别查询用户信息
     public void searchBySex(){   
     }
     //按电话号码查询用户信息
     public void searchByTelNum(){    
     }
     //按地址查询用户信息
     public void searchByAdd(){
     }
     //修改指定记录信息
     public void modify(){
     }
     //删除指定用户信息
     public void delete(){   
     }
     //删除全部用户信息
     public void deleteAll(){
     }
     //按用户姓名排序信息
     public void orderName(){
     }
     //按用户年龄排序信息
     public void orderAge(){
      
     }
     //按用户性别排序信息
     public void orderSex(){
       
     }
   
 }
 ​

2.5、创建数据校验类

 
package telDirectory.telNoteRegex;
 ​
 import java.sql.PreparedStatement;
 import java.util.Scanner;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 /**
  * TelNoteRegex类中方法(无成员变量)
  * menuRegex (int min, int max ) 对菜单输入选项的验证
  * nameRegex ( ) 对用户输入姓名的验证
  * ageRegex ( ) 对用户输入年龄的验证
  * sexRegex ( ) 对用户输入性别的验证
  * telNumRegex ( ) 对用户输入电话号码的验证
  * addressRegex ( ) 对用户输入地址的验证
  */
 public class TelNoteRegex {
 ​
     /**
      * 对菜单输入选项的验证
      * @param min
      * @param max
      * @return
      */
     public  int  menuRegex(int min,int max){
        
     }
 ​
     /**
      * 对用户输入姓名的验证
      * 字母长度1-10,可大小写
      * @return
      */
     public String nameRegex(){
       
     }
 ​
     /**
      * 对用户输入年龄的验证
      * @return
      */
     public String ageRegex (){
         
     }
 ​
     /**
      * 对用户输入性别的验证
      * 要求 :(男 m or M) (女 f or F)
      * @return
      */
     public String sexRegex (){
        
     }
 ​
     /**
      * 对用户输入电话号码的验证
      * 要求 : 6-10个数字
      * @return
      */
     public String telNumRegex (){
         
     }
 ​
     /**
      * 对用户输入地址的验证
      * 要求: 1-50位的字母或数字
      * @return
      */
     public String addressRegex (){
     }
 }
 ​

2.6、创建比较器类

Comparator中文API文档: Java 8 中文版 - 在线API中文手册 - 码工具

排序其只能再电话本种对电话本所存储的记录进行排序,不具备通用性,缩影定义成Operate的内部类

2.6.1、按姓名排序的比较器

  /**
      * 姓名排序的比较器
      */
     class OrderByName implements Comparator<Person>{
 ​
         @Override
         public int compare(Person o1, Person o2) {
             return 0;
         }
     }

2.6.2、按年龄排序的比较器

  /**
      * 按年龄排序的比较器
      */
     class OrderByAge implements Comparator<Person>{
 ​
         @Override
         public int compare(Person o1, Person o2) {
             return 0;
         }
     }

2.6.3、按性别排序的比较器

  /**
      * 按性别排序的比较器
      */
     class OrderBySex implements Comparator<Person>{
 ​
         @Override
         public int compare(Person o1, Person o2) {
             return 0;
         }
     }

3、正则表达式

3.1、正则表达式介绍

3.1.1、什么是正则表达式

正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

3.1.2、正则表达式的作用

给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)。

可以通过正则表达式,从字符串中获取我们想要的特定部分。

3.1.2.1、匹配

使用String类的matches方法可以进行整个字符串的匹配,判断某些字符串是否符合相关的规则。只要有一处不符合规则就会返回false,如果都符合返回true。 如:

 public static void main(String[] args) {//用来判断是否符合是6-9位的1-9的数字
 ​
 String str = ”6666666”;//被匹配的字符串
 ​
 String regex =”[1-9]{6,9}”; // 定义正则表达式,即匹配规则
 ​
 Boolean b =str.matches(regex);// 通过matches方法进行判断str是否符合regex制定的规则
 ​
 System.out.println(b);//matches()方法返回的是boolean值
 ​
 }

3.1.2.2、切割

使用string类的split()方法对字符串进行切割(split中的参数是正则表达式),可以进行复杂的字符串切割。 如:

 public static void main(String[] args) {//用来切割一串数字,去除多余的空格
 ​
 String str =” 1 2    3   4  4”;
 ​
 String regex=” +”;
 ​
 String [] arr = str. split(regex); //split ()方法返回的是字符串数组
 ​
                         //注意分隔符部分不会进入arr数组中      
 ​
 for( String s:arr ){
 ​
 System.out.println(s);//打印出数字中的每个元素
 ​
 }
 ​
 }

3.1.2.3、替换

使用string类的replacAll(),使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。replaceAll方法的参数有两个,第一个是正则表达式,用于定义被替换字符串的规则,第二个参数是替换的字符串。

 public static void main(String[] args){//替换掉字符串中叠词的重复部分
 ​
 String str =”张张张谢谢哦哦哦”;
 ​
 String strnew= str.replaceAll( “(.)\\1+”,”$1”);//替换掉重复部分,$1表示取前一个规则的第一组
 ​
 System.out.println(strnew);//打印出新的字符串
 ​
  
 ​
 }

3.1.2.4、获取

将字符串中符合正则表达式的规则字符串取出来。获取的步骤是:

  1. 将正则表达式封装成对象;

  2. 让正则表达式和要操作的字符串相关联;

  3. 关联后,获取正则匹配引擎 ;

  4. 通过引擎对符合规则的字符串进行操作,比如取出。

(其实前三个功能也可以用这个步骤进行处理,只是最后一步不同。这样变复杂了,所以前三个功能没有使用这个步骤,而是简化了操作。)

 
public static void main(String[] args){//将一句话中有四个字母的单词
 ​
 String str =” ming tian jiu yao fang jia le ”;
 ​
 String reg =”\\b[a-x]{4}\\b”;
 ​
 Patter  p =Patter.complie(reg);//将规则封装成对象
 ​
 Matcher  m =p.matcher(str);//让正则表达式和要操作的字符串相关联,获取匹配器对象
 ​
 System.out.println(m.matches());//其实string类中的matches方法、replaceAll()方法,用的就是Pattern和Matcher对象来完成的。只是被String的方法封装了,用起来比较简单。
 ​
 while(m,find()){
 ​
 Boolean b =m.find();将规则作用到字符串上,并进行符合规则的子串查找
 ​
 System.out.println(m.group());//用于获取匹配后的字符串
 ​
 System.out.println(m.start() +”….” + m.end());//用于获取匹配后的字符串的索引位置
 ​
 }
 ​
 }
 ​

3.2、正则表达式的语法规则

[内容限定]{长度限定}

3.1、内容限定

在定义限定内容时,如果没有长度限定,那么默认长度为1

3.2、单个字符限定

[a]表示当前内容必须时字母a

3.3、范围字符限定

[a-z0-9]:表示内容可以是a-z之间的任意字母或者是0-9之间的任意数字,不分先后

3.4、取反限定

[^abc]:表示内容不能是a或b或c

3.5、长度限定

在正则表达式中通过{ }来限定内容长度

固定长度:{固定长度值}

范围长度:{最小长度值,最大长度值}

[a-z]{5}:表示内容范围为小写字母a到z且长度必须为5

[a-z]{3,8}:表示内容范围为小写字母a到z且长度在3到8之间,包含2与8

[a-z]{5,}:表示内容范围为小写字母a到z且最小长度为5,最大长度无限制

[a-z]{0,8}:表示内容范围为小写字母a到z且最小长度为0,最大长度为8

3.6、长度限定符号

长度限定符号是指通过预定义符号来完成长度限定的。

?:零次或一次,等同于{0,1}

+:一次或多次,等同于{1,}

*:零次或多次,等同于{0,}

3.3、预定义字符

在正则表达式中通过一些预定义字符来表示内容限定,目的是为了简化内容限定的定义

img

3.4、常用的正则表达式

这里附上链接:最常用的正则表达式大全_未曾远去的博客-CSDN博客

4、实现验证类中的方法

思路:因为App类中有两个方法,一个是程序入口,另一个是start()方法,用来控制主菜单的,而控制主菜单需要有菜单输入项,用户从控制台进行菜单项的输入,输入之后需要进行菜单项的数据校验,如果输入的菜单项不对,那么程序就无法向下执行,那么就要一直循环,直到拿到正确的菜单项为止,继续程序的执行,而程序继续执行之后,也要从控制太获取姓名,年龄或者其他等等数据,我们也要先进行数据合理性的校验才能接着下一步的执行,因此要先编写数据校验类中的方法代码

4.1、对菜单项的验证

所用:返回一个合法的菜单项

键盘输入应该定义在哪里?App中还是验证方法中

定义在对菜单项验证的方法中,因为当用户输入菜单项时,有可能是不合法的,第一种是输入的不是数字,第二种是输入的数字不在菜单项的数字范围内。当用户输入的数据不合法时,要进行让用户再次输入,直到用户输入正确的数据为止,也就是说要进行循环操作,把键盘输入对象定义在验证方法中会比较好。

思路:

首先定义一个符合格式限定要求的正则表达式,然后创建键盘输入对象,提示用户输入,对从控制台获取用户输入的数据进行验证,假如验证不通过,则继续提示获取,直到获取到符合限定要求的菜单项数据并返回

 
  /**
      * 对菜单输入选项的验证
      * @param min
      * @param max
      * @return
      */ 
 public  int  menuRegex(int min,int max){
         //定义菜单验证项的正则表达式
         String regex = "[1-9]{1}";
         //创建键盘输入对象
         Scanner sc = new Scanner(System.in);
         while (true){
             System.out.println("请输入正确的数字,最小是:"+min+"\t最大是:"+max);
             String input = sc.nextLine();
             if (input.matches(regex)){
                 int inputNum = Integer.parseInt(input);  //把输入的字符串转换成整形
                 if (inputNum >= min && inputNum <=max){ //能进行到这里,说明输入的合法
                     return inputNum;
                 }else {
                     System.out.println("您输入的数字不符,请重新上输入!");
                 }
             }else {
                 System.out.println("输入数字错误,请检查!");
             }
         }
 ​
     }

4.2、对姓名的验证

作用:返回一个符合限定格式的姓名字符串

 
 /**
      * 对用户输入姓名的验证
      * 字母长度1-10,可大小写
      * @return
      */
     public String nameRegex(){
         //验证姓名的正则表达式
         String regex = "[a-zA-Z]{1,10}";
         //创建Scanner对象
         Scanner sc = new Scanner(System.in);
         while (true){
             System.out.println("请输入姓名,1-10个字母:");
             String input = sc.nextLine();
             if (input.matches(regex)){
                 return input;
             }else {
                 System.out.println("您当前输入的姓名有误,请重新输入!");
             }
         }
     }

4.3、对年龄的验证

作用:返回一个符合限定格式的年龄字符串

 
 /**
      * 对用户输入年龄的验证
      * @return
      */
     public String ageRegex (){
         //验证年龄的正则表达式
         String regex = "[1-9]{1}[0-9]?";
         //创建Scanner对象
         Scanner sc = new Scanner(System.in);
         while (true){
             System.out.println("请输入年龄,1-99 :");
             String input = sc.nextLine();
             if (input.matches(regex)){
                 return input;
             }else {
                 System.out.println("您当前输入的年龄有误,请重新输入!");
             }
         }
     }

4.4、对性别的验证

作用:返回一个符合限定格式的性别

  
/**
      * 对用户输入性别的验证
      * 要求 :(男 m or M) (女 f or F)
      * @return
      */
     public String sexRegex (){
         //验证年龄的正则表达式
         String regex = "[m|M|f|F]{1}";
         //创建Scanner对象
         Scanner sc = new Scanner(System.in);
         while (true){
             System.out.println("请输入性别,(男 m or M) (女 f or F) :");
             String input = sc.nextLine();
             if (input.matches(regex)){
                 return input;
             }else {
                 System.out.println("您当前输入的性别有误,请重新输入!");
             }
         }
     }

4.5对电话号码的验证

 
 /**
      * 对用户输入电话号码的验证
      * 要求 : 6-10个数字
      * @return
      */
     public String telNumRegex (){
         //验证电话号的正则表达式
         String regex = "[0-9]{6,10}";
         //创建Scanner对象
         Scanner sc = new Scanner(System.in);
         while (true){
             System.out.println("请输入电话号码,6-10个数字 :");
             String input = sc.nextLine();
             if (input.matches(regex)){
                 return input;
             }else {
                 System.out.println("您当前输入的电话有误,请重新输入!");
             }
         }
     }

4.6对地址的验证

  
/**
      * 对用户输入地址的验证
      * 要求: 1-50位的字母或数字
      * @return
      */
     public String addressRegex (){
         //验证电话号的正则表达式 \\w表示可用于标识符的字符
         String regex = "\\w{1,50}";
         //创建Scanner对象
         Scanner sc = new Scanner(System.in);
         while (true){
             System.out.println("请输入地址,1-50个字母或数字 :");
             String input = sc.nextLine();
             if (input.matches(regex)){
                 return input;
             }else {
                 System.out.println("您当前输入的地址有误,请重新输入!");
             }
         }
     }

4.7、测试验证类中的方法

 
 public static void main(String[] args) {  
         TelNoteRegex regex = new TelNoteRegex();
         int menuItem = regex.menuRegex(1,6);
         System.out.println(menuItem);
         String name = regex.nameRegex();
         System.out.println(name);
         String age = regex.ageRegex();
         System.out.println(age);
         String sex = regex.sexRegex();
         System.out.println(sex);
         String telnum = regex.telNumRegex();
         System.out.println(telnum);
         String address = regex.addressRegex();
         System.out.println(address);
     }

5、实现APP类中的方法

5.1、实现start方法

思路:

1、实例化Menu、TelNoteRegex、Operate对象

2、通过对象调用方法

3、调用显示主菜单后,要实现对控制台提示用户输入,这个功能在信息验证类中完成了,因此只需要调用信息验证类中的方法,获取到一个菜单项即可,接着进入二级子菜单的业务逻辑操作,而业务逻辑的操作在Operate类中有对应的方法去实现,因此可以进行方法调用

4、二级子菜单中有一个返回上一级的功能,要保证这个功能的实现,就要保证主菜单一直存在,因此要用到死循环,然后在调用二级子菜单的方法时,用return关键字,结束二级子菜单的方法,就可以返回上一级

 
 public void start(){
         Menu menu = new Menu();
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         Operate operate = new Operate();
         //二级主菜单返回主菜单的功能要实现,要保证主菜单一直存在,要用死循环
         while (true){
             menu.mainMenu();
             int item = telNoteRegex.menuRegex(1,6);
             switch (item){
                 case 1:operate.addLogic();break;
                 case 2:operate.searchLogic();break;
                 case 3:operate.modifyLogicLogic();break;
                 case 4:operate.deleteLogic();break;
                 case 5:operate.orderLogic();break;
                 case 6:System.exit(0);
             }
         }
     }
 }

5.2、实现main方法

 
 public static void main(String[] args) {
          APP app = new APP();
          app.start();
     }

6、实现Operate类中的方法

6.1、实现用户添加信息业务逻辑控制的方法

思路:

1、在start方法执行并获取到添加记录的菜单项后,就会进入到添加信息业务的逻辑控制的方法中

2、在逻辑控制的方法中要打印出二级子菜单,然后再获取对应的菜单操作,然后执行具体的动作,具体的动作在Operate类中有对应的方法,因此在获取对应的菜单项后调用对应的方法,思路与start()方法相似,综上,要打印菜单需要创建Menu类对象,信息验证需要创建TelNoteRegex()对象,然后二级子菜单显示后还不能让这个方法结束掉,否则就是展示了一下二级子菜单就返回主菜单了,就不能进行下一步操作,因此要用到死循环

 // 用户添加信息业务逻辑控制
     public void addLogic(){
         Menu menu = new Menu();
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         while (true){
             menu.addMenu();
             int item = telNoteRegex.menuRegex(1,3);
             switch (item){
                 case 1:this.addOperation();break; //添加新纪录
                 case 2:this.showAll();break; //查看全记录
                 case 3:return; //返回上一级 结束当前方法
             }
         }
     }

6.2、实现用户查找信息业务逻辑控制的方法

思路:

与用户添加信息业务逻辑控制方法思路相似

 //用户查询信息业务逻辑控制
     public void searchLogic() {
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        while(true){
            menu.searchMenu();
            int item = telNoteRegex.menuRegex(1,7);
            switch (item){
                case 1:searchByName();break;
                case 2:searchByAge();break;
                case 3:searchBySex();break;
                case 4:searchByTelNum();break;
                case 5:searchByAdd();break;
                case 6:showAll();break;
                case 7:return;
            }
        }
     }

6.3、实现用户修改信息业务逻辑控制的方法

  
//修改信息业务逻辑控制
     public void modifyLogicLogic(){
         Menu menu = new Menu();
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         while (true){
             menu.modifyMenu();
             int item = telNoteRegex.menuRegex(1,3);
             switch (item){
                 case 1:showAll();break;
                 case 2:modify();break;
                 case 3:return;
             }
         }
     }

6.4、实现用户删除信息业务逻辑控制的方法

  
//删除信息业务逻辑控制
     public void deleteLogic(){
         Menu menu = new Menu();
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         while (true){
             menu.deleteMenu();
             int item = telNoteRegex.menuRegex(1,4);
             switch (item){
                 case 1:showAll();break;
                 case 2:delete();break;
                 case 3:deleteAll();break;
                 case 4:return;
             }
         }
     }

6.5、实现用户排序信息业务逻辑控制的方法

  
//排序信息业务逻辑控制
     public void orderLogic() {
         Menu menu = new Menu();
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         while (true){
             menu.orderMenu();
             int item = telNoteRegex.menuRegex(1,5);
             switch (item){
                 case 1:orderName();break;
                 case 2:orderAge();break;
                 case 3:orderSex();break;
                 case 4:showAll();break;
                 case 5:return;
             }
         }
     }

到此,控制二级子菜单及相关业务逻辑的方法已经全部实现了,接下去要实现相关的具体操作了

6.6、实现添加记录业务功能

思路

1、添加用户要往集合list中添加用户即Person对象,实例化Person对象需要属性值,这些是从控制台获取的,这些属性值也要进行数据合理性校验

2、用校验完的数据进行对象创建,然后添加到集合中

3、person对象中有ID这个属性,第一个添加进去的ID是1,第二个是二,以此类推,而ID是电话簿系统给的,不是用户进行输入的,这里想到可以用集合的长度来一一对应

 
public void addOperation(){
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         String name = telNoteRegex.nameRegex();
         String age = telNoteRegex.ageRegex();
         String sex = telNoteRegex.sexRegex();
         String telnum = telNoteRegex.telNumRegex();
         String address = telNoteRegex.addressRegex();
         Person person = new Person(name,age,sex,telnum,address);
         this.list.add(person);
         person.setId(this.list.size());
     }

6.7、实现查看全部用户信息的功能

思路:

1、记录存储在list中,要查看全部信息,只要把list中的元素打印出来即可

2、集合中可能没有元素,因此在打印之前先进行判断集合中有没有记录

3、遍历集合打印有多种方法可以实现:for循环,增强for,迭代器

(增强for的底层支持就是迭代器)

 
 //查询全部用户信息
     public void showAll(){
         //添加person对象后打印list的所有内容
         //如果list里面有元素,就打印,没有就输出提示错误
         //1.迭代器  2、增强for 3.for循环
         if(list.size() == 0) {
             System.out.println("没有任何记录");
             return;
         }
         for (Person person : list) {
             System.out.println(person.toString());
         }
        /* for (int i = 0; i < list.size(); i++) {
             System.out.println(this.list.get(i));
         }*/
 ​
         /*//迭代器
         //根据集合对象获取迭代器对象
         Iterator it = list.iterator();
         //判断集合中是否有元素
         while (it.hasNext()){
             Person p = (Person) it.next();
             System.out.println(p.toString());
         }*/
 ​
     }

6.8、实现查找的业务功能

思路:

1、从控制台获取到一个合法的要查找的数据,因此要进行数据合理性校验

2、遍历集合中的对象,用要查找的数据与每一个对象的属性值比较

3、若有一致的说明找到了,打印该对象的全部信息

4、若找不到则提示找不到

5、找不到饿提示信息只打印一次,因此可以通过一个变量来控制他,默认找不到

假如找到了就改变该变量的值

6.8.1、按姓名查找

 
 public void searchByName(){
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         String searchName = telNoteRegex.nameRegex();
         boolean b = true; //默认找不到
         for (Person person : list) {
             if (searchName.equals(person.getName())){//能进行到这里说明找到
                 System.out.println(person.toString());
                 b = false;
             }
         }
         if (b){
             System.out.println("找不到对应信息!");
         }
     }

6.8.2、按年龄查找

 
 //按年龄查询用户信息
     public void searchByAge(){
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         String searchAge = telNoteRegex.ageRegex();
         boolean b = true; //默认找不到
         for (Person person : list) {
             if (searchAge.equals(person.getAge())){//能进行到这里说明找到
                 System.out.println(person.toString());
                 b = false;
             }
         }
         if (b){
             System.out.println("找不到对应信息!");
         }
     }

6.8.3、按性别查找

  
 // 按性别查询用户信息
     public void searchBySex(){
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         String searchSex = telNoteRegex.sexRegex();
         boolean b = true; //默认找不到
         for (Person person : list) {
             if (searchSex.equalsIgnoreCase(person.getSex())){//性别大小写都可以,因此比较方法要用不区分大小写,否则f和F会区分开,找不到
                 System.out.println(person.toString());
                 b = false;
             }
         }
         if (b){
             System.out.println("找不到对应信息!");
         }
     }

6.8.4、按电话号码查找

  
 public void searchByTelNum(){
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         String searchTelNum = telNoteRegex.telNumRegex();
         boolean b = true; //默认找不到
         for (Person person : list) {
             if (searchTelNum.equals(person.getTelNum())){//能进行到这里说明找到
                 System.out.println(person.toString());
                 b = false;
             }
         }
         if (b){
             System.out.println("找不到对应信息!");
         
     }

6.8.5、按地址查找

  
 //按地址查询用户信息
     public void searchByAdd(){
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         String searchAdd = telNoteRegex.addressRegex();
         boolean b = true; //默认找不到
         for (Person person : list) {
             if (searchAdd.equals(person.getAddress())){//能进行到这里说明找到
                 System.out.println(person.toString());
                 b = false;
             }
         }
         if (b){
             System.out.println("找不到对应信息!");
         }
     }
 ​

6.9、实现修改指定记录的功能

思路:

1、打印三级菜单

2、获取合法的菜单项

3、根据获取的菜单项进行对应的操作

  
//修改指定记录信息
     //先询问并获取要修改的对象的序号,再询问要修改该对象的具体信息
     /**
      * 修改信息的具体操作
      *   1.获取要修改信息的对应菜单编号
      *   2.先获取到要修改信息的正确格式
      *   3.调用person类的setXXX方法,对相应的值进行设置
      */
     public void modify(){
         Menu menu = new Menu();
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         System.out.println("请输入要修改对象的序号");
         int itemNum = telNoteRegex.menuRegex(1,this.list.size());
         while (true){
             menu.subModifyMenu();
             int item = telNoteRegex.menuRegex(1,6);
             switch (item){
                 case 1:{
                     String name = telNoteRegex.nameRegex();
                     this.list.get(itemNum-1).setName(name);
                     break;
                 }
                 case 2:{
                     String age = telNoteRegex.ageRegex();
                     this.list.get(itemNum).setAge(age);
                     break;
                 }
                 case 3:{
                     String sex = telNoteRegex.sexRegex();
                     this.list.get(itemNum).setSex(sex);
                     break;
                 }
                 case 4:{
                     String telNum = telNoteRegex.telNumRegex();
                     this.list.get(itemNum).setTelNum(telNum);
                     break;
                 }
                 case 5:{
                     String add = telNoteRegex.addressRegex();
                     this.list.get(itemNum).setAddress(add);
                     break;
                 }
                 case 6:return;
             }
         }
 ​
     }

6.10、实现删除记录的业务功能

思路:

1、询问要删除的对象的序号

2、序号要进行验证,不能超过集合list的长度,在这里可以借助菜单验证的方法来进行验证

3、序号是集合长度对应的,要删除的对象的下标应该是长度-1

  //删除指定用户信息
     public void delete(){
         TelNoteRegex telNoteRegex = new TelNoteRegex();
         System.out.println("请输入要删除的对象的序号");
         int itemNum = telNoteRegex.menuRegex(1,this.list.size());
         this.list.remove(itemNum-1);
         //删除完之后里边的序号也就是ID会乱,要重新设置
         for (int i = 0; i < list.size(); i++) {
             this.list.get(i).setId(i+1);
         }
         System.out.println("删除成功!");
 ​
     }
     //删除全部用户信息
     public void deleteAll(){
        list.clear();
         System.out.println("信息删除成功!");
 ​
     }

6.11、实现排序器

 
 /**
      * 姓名排序的比较器
      */
     class OrderByName implements Comparator<Person>{
 ​
         @Override
         public int compare(Person o1, Person o2) {
             return o1.getName().compareTo(o2.getName());
         }
     }
     /**
      * 按年龄排序的比较器
      */
     class OrderByAge implements Comparator<Person>{
 ​
         @Override
         public int compare(Person o1, Person o2) {
             return o1.getAge().compareTo(o2.getAge());
         }
     }
     /**
      * 按性别排序的比较器
      */
     class OrderBySex implements Comparator<Person>{
 ​
         @Override
         public int compare(Person o1, Person o2) {
             return o1.getSex().compareTo(o2.getSex());
         }
     }
 ​}
 

6.12、实现排序信息的业务功能

思路:

1、给定一个外部的比较器,通过这个比较器的规则对list中的对象进行排序

2、使用Collections类下的sort方法

3、排序后ID是乱的的要重新设置排序

6.12.1、按用户姓名排序信息

  
//按用户姓名排序信息
     public void orderName(){
         Collections.sort(this.list,new OrderByName());
         for (int i = 0; i < list.size(); i++) {
             this.list.get(i).setId(i+1);
         }
        System.out.println("排序成功");
 ​
     }

6.12.2、按用户性别排序信息

  
 //按用户性别排序信息
     public void orderAge(){
         Collections.sort(this.list,new OrderByAge());
         for (int i = 0; i < list.size(); i++) {
             this.list.get(i).setId(i+1);
         }
         System.out.println("排序成功");
     }

6.12.3、按用户性别排序信息

 
  //按用户性别排序信息
     public void orderSex(){
         Collections.sort(this.list,new OrderBySex());
         for (int i = 0; i < list.size(); i++) {
             this.list.get(i).setId(i+1);
         }
         System.out.println("排序成功");
     }

 

 

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
关于系统:建议本系统在800×600显示分辨率下运行; 关于使用UPS稳压电源:本系统经过全面破坏性测试,本系统能够修复突然断电而造成的数据表损坏,但是为了以防万一,建议用户使用UPS不间断电 源,以免非正常退出本系统而造成数据被破坏。 关于开机顺序:如果是网络化运行,每此启动本系统前必须先运行服务器,然后再运行客户机系统。服务器系统在运行时会运行服务器程序特有的系 统操作,不管任何原因造成的重开机,都必须先运行服务器。 关于系统版本:本版本在继续开发完善中,请您经常访问我们的网站了解最新版本信息。希望您能够及时反馈给我们,以便我们及时修正和改进,对 于您的支持,我们深表感谢。 关于数据备份:为了预防数据因某种原因被破坏而造成的损失,建议用户经常对系统进行数据备份操作。(建议每天做多次,以防万一。) 虽然本系统在夜审时对夜审前的数据和夜审后的数据均进行了备份,但建议用户仍然需要操作数据备份模块,将数据备份到另外一台机器上,以防万 一。 其他 关于“系统定义中代码的设置”:在“系统” 模块中的数据表的“代码”字段是为了方便在其他模块中录入数据时不必记住编号,直接输入代码可以 定位到所需得项目。 关于“餐饮管理系统中菜单定义”:“末级”字段是为了区分菜单分类,如果是大类,请录入空,如果是最终末级菜单,请录入“*”。 关于“房态刷新”按钮:“刷新”是为了调用服务器中当前的最新数据,建议用户在模块中经常进行“刷新”操作。 关于“结帐中的预交款”:如果在结帐中的帐单中出现预交款消费项目,是因为有预先结帐或客户预交款或持贵宾卡消费的情况,请不要在预交款项 目中进行优惠操作。 关于“系统定义中记录的删除”:使用键盘Ctr+De组合键。请不要轻易删除。 ------------------------------------------------------------------- 立方酒店管理系统 Cubic Hote Management System 功能说明 预定 -------------------------------------------------------------------------- 2 接待 -------------------------------------------------------------------------- 5 结账 -------------------------------------------------------------------------- 8 查询 --------------------------------------------------------------------------12 夜审 --------------------------------------------------------------------------14 报表 --------------------------------------------------------------------------15 系统 --------------------------------------------------------------------------18 餐饮 --------------------------------------------------------------------------20 贵宾卡 -----------------------------------------------------------------------21 电话 --------------------------------------------------------------------------22 洗浴 娱乐 预定 内容丰富的预定单 1、 可以完成散客、团队的预定,预定方法简单。 2、 可以完成对客房、餐厅、会议室的预定 3、 客房预定 预定房态盘操作,简便直观,可以用不同颜色显示预定状态; 可以方便的切换到任何一天的预定房态盘,是否有预定信息一目了然; 可以预定任何时间的客房,预定和占房冲突自动提示; 可以自动查询预定客人是否是历史客人,来店次数和消费金额,以便为老客户提供优惠和感情服务; 客房预定可以只是意向性,可以确认预定,可以取消预定; 预定信息在预定时间到达时,自动显示在接待房态盘中,提示接待员当天有预定客人; 可以从预定信息直接转接待,无需再录入客人信息; 预定转接待后,预定信息自动清除; 打印预定回执,令预定者满意; 团队预定时可以快速批处理,可以手工分房也可以自动分房; 团队预定时可以统一修改房价,也可以单独对某些房价进行修改; 可以进行加房、减房、换房处理; 预定客房的同时,可以利用相同的客人信息直接预定餐饮和会议室; 客人信息没有任何预定时,系统自动清除客人信息; 柱状显示某天预定客房的模拟出租率; 预定列表查询预定客人信息,预定房信息,预定时间,到店时间,离店时间; 4、 餐饮预定 预定餐厅盘操作,简便直观,可以用不同颜色显示预定状态; 可以方便的切换到任何一天的餐厅房态盘,是否有预定信息一目了然; 可以预定任何时间的餐厅,预定和占餐厅冲突自动提示; 餐厅预定可以只是意向性,可以确认预定,可以取消预定; 预定信息在预定时间到达时,自动显示在餐厅状态盘中,提示接待员当天有预定客人; 在餐厅系统中,可以直接使用预定餐厅信息进行开台操作; 餐厅系统中确认预定信息后,预定信息自动清除; 打印预定回执,令预定者满意; 团队预定时可以预定任何日期段的一日三餐; 散客预定时可以录入婚房、司仪等信息; 预定的用餐标准可以是 元/每桌,元/人,点菜; 可以进行加、减、换处理; 预定餐厅的同时,可以利用相同的客人信息直接预定客房和会议室; 客人信息没有任何预定时,系统自动清除客人信息; 柱状显示某天预定餐厅的模拟出租率; 预定列表查询预定客人信息,预定餐厅信息,预定时间,用餐时间,用餐标准; 5、 会议室预定 预定会场盘操作,简便直观,可以用不同颜色显示预定状态; 可以方便的查看到所有会议室的所有预定情况,是否有预定信息一目了然; 可以预定任何时间的会议室,预定和占会场冲突自动提示; 会议室预定可以只是意向性,可以确认预定,可以取消预定; 可以录入会场人数、主席台人数、租金、横幅、鲜花、水果、话筒等大量信息; 会场结算后,预定信息自动清除; 打印预定回执,令预定者满意; 预定会场的同时,可以利用相同的客人信息直接预定餐饮和客房; 客人信息没有任何预定时,系统自动清除客人信息; 柱状显示某天预定会场的模拟出租率; 预定列表查询预定客人信息,预定会场信息,预定时间,使用时间; 接待 以客房状态盘为中心的客人接待 1、 内容丰富的客房状态盘 在客房状态盘中可以完成几乎所有的接待功能,方便快捷; 客房状态盘用不同的颜色显示空房、散客、团队、维修、脏空、免费房; 房态的颜色用户可以按照自己的喜好进行修改; 各种房态也可以用形象的标表示出来; 客房状态盘可以使多达10个团队的客房用不同的颜色表示出来,同时标示团队名称和对应的颜色,使操作者对各个团队的用房准确掌握; 柱状显示当前的客房出租率,包括总客房数、出租数、出租率等信息; 对空房双击鼠标左键,可以直接进入散客接待; 对使用房双击鼠标左键,可以查询散客或团队的消费情况,押金情况,押金余额; 对空房单击鼠标右键弹出下拉菜单,可以进行内宾接待,外宾接待,免费接待,团队接待,调换房间,寓客收银,散客结账,帐单查询,设置维修房 ,设置空房等一系列操作; 按住Shift+鼠标左键可以对散客直接结账; 单击相应客房时,显示该客房的客人姓名和房价; 当客房被预定时,客房状态盘显示相应的信息,提示接待员; 当客人的押金不足时,客房状态也显示相应的信息,提示接待员发催交通知单; 可以对所有脏空房批量进行设置成空房,也可以单一设置; 客房状态盘一屏可以显示250个客房信息; 2、快捷的客人信息页 列表显示所有客房的信息,包括客人姓名,实际房价,到店日期,到店时间,半全价的情况; 信息补登可以对快速入住的客人的信息进行补充录入; 馅饼显示当前散客、团队、空房、免费房、维修房、脏空房的比例; 房价修改需要经过权限认证后,进行房加变更; 客人列表可以快速列出客人的详细信息; 3、 快速的散客入住 只需要录入客人的姓名和房价以及押金方式,就可以快速入住了,其他信息可以以后补登; 自动判别客人是否为历史客人,显示来店次数,提供友情服务; 自动判别客人是否在黑名单中,自动提示; 如果是VIP客户可以自动显示以前的协议房价; 多种押金方式,包括人民币,信用卡,支票,记账等; 民族,地区,国家等许多信息可以采用拼音码自动定位; 自动判别15位,18位身份证号码的合法性,自动计算出生年月和性别; 可以打印房卡,制作IC房卡; 4、 集中的团队管理 在团队管理页中可以集中完成团队接待,团队补登房间,团队取消房间,团队退房,团队结账,团账查询,补交押金,变更押金方式,团队预结账等 一系列操作; 方便快捷的查询团队的所有用房情况; 团队接待时可以录入多达4个的可签单人,供团队成员消费签单时查询; 5、 灵活的房态导航器 可以使客房状态盘只显示其中一种房态,快速显示相应信息; 可以使客房状态盘按照几号楼第几楼层显示相应的客房; 可以使客房状态盘只显示某个团队的所有客房; 快速切换回全部客房; 6、 信息修改 可以更改客人的相关信息; 7、 信息导出 可以将客人信息按照一定格式导出为文本文件,便于向当地公安机关传送信息; 结帐 完善的结帐功能 1、 散客结帐 可以在房态盘中操作,也可以在主菜单中操作,也可以在右键菜单中操作; 可以单独结帐,也可以多个客房合并结帐; 多达8种的结帐方式,包含人民币、信用卡、支票、记帐、挂散客、挂团队、未结帐、贵宾卡结帐; 可以对逃帐的客人进行未结帐结帐,以便空出客房用于接待; 根据结帐方式不同,押金可以自动退还,也可以抵冲消费; 可以预先结帐; 下午结帐时,系统自动加收半价房费,晚上结帐时,系统自动加收全价房费; 实结金额可以根据系统的设置,在一定范围内调整; 实结金额根据结算金额自动取整(加),多收的余额作为额外费项目统计; 可以对帐单中除预交款的所有消费项目分别给予优惠; 实结金额根据押金情况、消费情况、优惠金额、预结金额自动计算; 结帐时可以打印对帐单和发票; 贵宾卡结帐时,自动扣除贵宾卡金额,贵宾卡金额不足时,可以选择余额部分的结帐方式,系统自动分解帐单; 电话费自动统计,累加到帐单中; 2、 团队退房和结帐 团队可以退全部客房,也可以退部分客房,退房的客房不再累计房费; 可以在房态盘中操作,也可以在主菜单中操作,也可以在右键菜单中操作; 多种的结帐方式,包含人民币、信用卡、支票、记帐、未结帐、贵宾卡结帐; 根据结帐方式不同,押金可以自动退还,也可以抵冲消费; 可以预先结帐; 下午结帐时,系统自动加收半价房费,晚上结帐时,系统自动加收全价房费; 实结金额可以根据系统的设置,在一定范围内调整; 实结金额根据结算金额自动取整(加),多收的余额作为额外费项目统计; 可以对帐单中除预交款的所有消费项目分别给予优惠; 实结金额根据押金情况、消费情况、优惠金额、预结金额自动计算; 结帐时可以打印对帐单和发票; 贵宾卡结帐时,自动扣除贵宾卡金额,贵宾卡金额不足时,可以选择余额部分的结帐方式,系统自动分解帐单; 电话费自动统计,累加到帐单中; 3、 寓客收银 住店客人的其他消费可以挂帐到自己的账户上,离店时统一结算; 可以对酒店所有的消费项目收费,并可单独优惠; 散客收银时显示客人姓名等信息,以便查询; 团队客人签单时,自动显示可签单人,以便查询; 4、 非寓客结帐 对非住店客人的消费进行结帐处理; 可以对酒店所有的消费项目收费,并可单独优惠; 多种的结帐方式,包含人民币、信用卡、支票、贵宾卡结帐; 5、 预先结帐 散客和团队可以预先结帐,实际结帐时扣除预结金额; 多种的结帐方式,包含人民币、信用卡、支票、贵宾卡结帐; 预先结帐时,可以根据押金方式选择是否退还押金; 6、 押金补交和方式变更 押金不足时,可以补交押金; 系统分别记录预交的押金和补交的押金; 客人可以随时变更押金的方式; 7、 零客未结帐结帐 当做了未结帐结帐处理的客人又回到酒店结帐,系统可调出客人的帐单进行结帐; 8、 客户结帐 对在酒店设立特殊帐户的团体和个人进行结帐; 可以预交款; 可以全部结帐,也可以部分结帐; 可以按消费明细逐个对帐结帐; 可以按消费项目汇总结帐; 可以按照时间段选择结帐; 对每个消费项目可以选择结或不结,并单独给予优惠; 对预交款可以全部扣除,也可以部分扣除; 查询 1、 查询客人 按房号、帐号、姓名查询; 按地区、国别等组合查询; 查询客人的详细信息,并可以修改; 历史客人查询; 历史客人组合查询; 可以打印当前客人列表,也可以打印客人信息; 2、 帐单查询 可以按照客房号查询散客帐单; 可以按照团队名称查询团队帐单; 帐单查询时,自动根据当前时间预算房费; 同时可以查询押金总额,押金明细; 可以查询帐单总额,帐单明细; 自动计算押金余额,押金余额不足时自动提示; 历史客人的帐单查询; 可以打印帐单信息; 3、 客人留言 寓客可以留言; 访客可以留言; 可以按房号、姓名定位到客人留言; 4、 电话号码簿 可以输入需要经常使用的电话号码,以备查询; 可以按姓名和电话号码检索; 5、 列车、航班时刻表 可以按列车车次查询; 可以按区间站查询车次; 可以按航班号查询; 可以按中转站查询; 6、 世界钟 显示当前数十个重要城市的时间; 夜审 规范化的夜审程序 1、夜间审核 核对房金、帐单等所有当日操作的正确性、有效性、和合法性; 自动房金滚帐; 核对滚帐是否正确; 两种计算平衡方式,今日应收是否等于昨日应收加上本日营业减去上交财务,今日应收是否等于零客应收款加上记帐应收款加上总台未结的发票额; 察看两种方式的今日应收是否相等; 系统自动判断外围站点是否全部结帐,否则不能夜审; 统计楼层出租率; 统计所有消费项目的营业、优惠、应收; 夜审前后自动备份,如果夜审发生错误,可以恢复到夜审前的状态; 打印夜审工作报告; 2、 餐厅上交 餐厅的收入在总台上结算; 3、 财务结单 总台上的收入和财务结算; 报表 文并茂的报表功能 1、 当前收回表 统计当前的收回情况,显示收回明细; 显示当前的未结发票额,餐厅收回额,餐厅上交额,上交财务额,计算是否平衡; 可以打印; 2、 日收明细表 可查询任何时间的收回明细,消费金额,优惠金额,收回金额; 可以打印; 3、 零客应收款 用表方式显示各个消费项目的应收金额和总额; 可以打印列表,也可以打印形; 4、 非寓客消费报表 可以统计任何时间段的消费情况; 可以按照明细显示,也可以按照消费项目显示; 可以打印; 5、 当前半全价报表 统计当前房价的半价和全价情况,计算当前房价的构成情况; 可以打印; 6、 客房日报表 统计夜审后的客房的营业,收回、优惠的情况; 可以查询任何一天的客房营业情况; 可以打印列表,也可以打印形; 7、 今日营业表 统计夜审后的酒店所有营业情况; 统计今日、昨日的营业,收回,优惠,应收的情况; 统计上个月同期的营业情况; 显示宾馆当前的营业收支平衡表; 用柱状和列表两种方式表达; 可以单独查询营业、收回、优惠、应收的情况; 可以打印列表,也可以打印形; 8、 历史营业表 可以查询任何日期的酒店所有营业情况; 其他功能同今日营业表; 9、 结帐统计表 按结帐方式统计收回、优惠情况; 可以查询任何一天的情况; 10、 消费项目表 按消费项目显示消费明细和总额; 可以查询任何时间段的情况; 11、 楼层出租表 按照柱状和列表两种方式统计各个楼层的出租率和半全价情况; 统计客房总数,和出租数; 12、 电话统计表 按客房号统计客人的电话费、附加费、服务费; 13、 半全价报表 统计累计的所有半全价情况; 14、 餐厅上交表 统计所有餐厅上交到总台的情况; 15、 财务结单表 统计所有总台上交到财务的情况; 16、 员工开房表 统计各个接待员和结帐员的工作量; 统计开房数量、开房金额、开房比例、金额比例,便于核算工作量; 17、 客户应收总帐 统计特殊客户的所有应收款和按消费项目列表显示; 打印对帐单,便于客户对帐; 18、 客户应收明细 统计特殊客户的所有应收款的消费明细; 打印对帐单,便于客户对帐; 19、 客户结帐明细 统计特殊客户的结帐的明细; 打印对帐单,便于客户对帐; 系统 1、 系统定义 楼层定义; 房型定义; 地区定义; 国别定义; 民族定义; 证件定义; 签证定义; 客户分类; 餐厅定义; 会场定义; 信用卡; 2、 部门设置 3、 员工档案 可以设置员工的口令; 可以设置员工的操作权限; 4、 客户档案 可以设置特殊客户; 按照客户分类归档; 5、 客房定义 6、 消费项目定义 7、 黑名单 8、 数据备份 用户可以使用数据备份功能将数据库备份到本地或网络上的任何一台电脑; 9、 数据恢复 当夜审出错时,可以使用该功能恢复到夜审前的状态; 10、 口令设置 当前操作员可以通过该功能修改自己的密码; 11、 重新登录 不需要退出系统,利用该功能可以快速重新登录; 12、 系统设置 可设置酒店名称、数据库备份路径、房态盘的显示等; 餐饮 1、 日常营业 餐厅状态盘显示当前所有餐厅餐台的营业情况; 用不同的颜色和标表示餐台的状态; 双击鼠标左键可以进行开台操作; 可以开一个餐台,也可以开多个餐台; 可以方便的进行转台操作; 可以方便的进行并台操作; 馅饼显示当前餐台的使用率; 餐厅状态盘显示客人的姓名和用餐金额; 用餐列表用不同的颜色显示当天所有的用餐情况; 预定列表可以快速开台; 其他餐费可以对非点菜项目的消费进行结帐处理; 可以对客人一次使用的多个餐台分别进行点菜操作; 快速的点菜功能,可以使用代码、拼音码通过键盘快速点菜,也可以通过鼠标左键双击菜单,用右键确认,快速点菜; 方便的菜单操作,菜单分大类和实际菜谱,定位菜单快速; 多种结帐方式,人民币、信用卡、支票、挂散客、挂团队、贵宾卡、记帐和宾馆招待; 结帐时可以按折扣计算,也可以直接录入优惠金额; 可以录入服务费等其他消费; 可以对菜单进行退菜、删菜、恢复等操作,用不同颜色显示; 2、 查询统计 可以查询统计任何时间段内的菜的消耗量; 可以查询统计点菜变动情况,包括删菜、退菜操作; 可以查询餐厅的营业情况,营业流水帐和营业统计报表; 3、 系统设置 餐厅消费项目定义; 餐厅餐台定义; 餐厅菜单定义; 口令设置; 重新登录; 贵宾卡 1、 读卡 读取贵宾卡的客人信息,资金信息; 2、 发卡 将卡号、写卡金额、客人姓名、身份证号码等信息写入贵宾卡; 录入写卡人信息,以便日后查询; 3、 充值 对旧卡进行充值操作 4、 数据库查询 可以查询写卡总额,写卡明细; 可以查询贵宾卡的总额、消费金额、余额的情况; 5、 消费查询 可以查询贵宾卡的消费明细、消费金额,以便对帐使用; 电话 1、 话费设置 设有国际电话、国内长途、市内电话、农话等收费等级,可以根据酒店需要自动开关; 备有国际、国内长话区号、农话区号和标准话价数据库,可以随时增补修改; 可以设置服务费、附加费,168服务台的收取标准; 可以设置国际、国内、农话、市话、港澳台的收费标准,可按通话时间长短制定标准; 晚间和周末电话折扣设置; 每部电话可以设置不同的收费标准; 2、 话费计费 显示每次通话的呼叫号码,时长,服务费、附加费、和总金额; 一屏可以显示40条通话记录; 进行其他操作如查询话单等操作时,不影响计费; 3、 话费查询 可以按分机号查询; 可以按部门查询; 可以查询任何时间段的话费明细;
一、服务器要求 ASP语言+Access数据库 支持ASP语言、支持Jmail组件(如果您不需要邮件发送功能可不用); 开通FSO权限,推荐Windows Server 2003 SP1(IIS6.0)+ Jmail 4. 后台管理员: 管理员帐号:admin 管理员密码:admin888 二、功能简介 1、 网站基本功能 1)网站基本信息后台设置: 网站名称、关键字、描述、联系方式、版权信息、ICP证书、Logo 设置是否显示浮动客服窗口,同时可以设置透明度 在线客服账户管理:支持多个QQ、MSN、旺旺、Skype 设置是否显示53kf客服窗口 设置是否显示:流量信息、报价单、发货单、赠品、优惠券、管理进入链接等 2)邮件发送系统:支持Jmail、ObjCdoMail、Aspemail、Cdo.Message组件 管理员可选择组件和设置SMTP发件信息 3)后台管理账户维护功能,管理员分为总管理员、订单管理员、产品管理员 管理员后台可设置添加、修改、删除信息成功后的处理方式 可选后台管理上下、左右显示模式 4)管理员后台可以查看服务器组件信息:脚本支持、组件支持、安全配置、运行速度 5)友情链接管理:管理员可以添加友情链接,支持片和文字形式 2、 网站模板管理 1)网站支持多种界面,后台可以自由切换 2)每个大类可以设置不同风格的模板 3)目前支持的模板包括: 黑底深蓝、黑底炫彩、黑底深灰、黑底棕色、混合苍青、经典蓝色、朴素蓝色、 明亮蓝色、 精美浅蓝、 韵味深蓝、 品味棕色、 简洁灰色、 明亮银灰、 健康绿色、 植物绿色、 混合黄绿、 混合蓝绿、 可爱泡泡、 可爱洋红、 精美鲜花、 可爱浅红、 姹紫嫣红、 混合紫蓝、 精美深紫、 精致淡紫、 精美嫣红、 仿京东红、 稳重暗红、 火热红色、 深色紫红、 淘宝金黄、 清新浅黄 3、 产品功能模块 1)商品二级分类系统,支持分类排序 每个大类可选不同模板 商品大类、小类页面可以单独添加广告 2)产品品牌功能,品牌介绍支持html在线编辑器 3)产品一级分类、二级分类、品牌页面的搜索引擎优化 4)商品添加、修改、以及独创的复制功能,支持名称价格、库存、积分等批量修改 商品批量删除、批量转移分类、设置推荐、设置特价、设置分类推荐等 5)价格批量处理:可以将整站商品价格加、减、乘、除一定的值或者比例 6)商品自定义参数:商品可以按照大类设置最多50个参数,方便经营不同类型的产品 管理员可设置商品参数显示位置:商品片右侧或者商品介绍底部 7)商品可选参数:同一款商品可以设置不同的参数如颜色、尺码让客户选择 8)商品积分、编号可以选手动输入或者按照规则自动生成,库存可设置默认值 9)商品价格体系 市场价格-仅供参考不参与订购计算 本站价格-实际成交价格 成本价格-用于后台计算成本和利润 10)商品多功能,每个商品可以添加任意多商品片支持自动加水印,可选文字或者片形式; 商品介绍支持html编辑器,支持片、Flash、视频、音频、表格、文字格式等 11)管理员可以开启商品大小功能,开启大小可以优化显示效果同时加快打开速度 管理员可设置首页、分类页、产品内页商品缩略尺寸 12)商品库存在客户成功订购自动减少,库存为0的商品无法订购 后台管理员登录后可以管理缺货商品 13)商品配件功能:可实现买产品送配件、买产品加*元送配件的功能 每个商品最多加五个配件(在2008之前版本此功能名称为“套装”) 14)商品页面的搜索引擎优化 15)商品评论功能:客户可以发表针对具体商品的评论或提问,管理员可以回复 管理员可以设置客户发表评论后直接显示在网站或者管理员回复后显示在网站 16)商品对比功能:用户可选多个商品进行资料的详细对比 17)管理员可以设置商品搜索范围是否包含: “商品名称、编号、关键字、简单介绍、详细介绍” 客户搜索关键字记录功能,后台可以查看、删除、批量删除、批量修改搜索次数 修正老版本关键字乱码的问题; 高级搜索功能:出关键字搜索外还支持按照分类、品牌、价格范围搜索商品 18)用户可选商品排序方式,支持按照以下方式排序: 网站推荐、销量、价格升序、价格降序、浏览量、上架时间 19)商品显示方式支持:每行多片显示或者每行单片显示 管理员可以设置默认方式,同时可以设置每行、每页显示商品数量 20)管理员可以设置首页各栏目是否显示,每栏目显示商品数量、每行显示商品数量 21)前台商品分类可选三种显示方式: 普通显示:直接显示大类小类 点击大类显示小类:默认只显示大类、鼠标点击后显示小类 鼠标移至大类显示小类:默认只显示大类、鼠标移至大类标题后显示小类 22)商品报价单功能,支持打印和分页,管理员可以关闭商品报价单 23)最近浏览商品功能:用户可以看到自己最近浏览的相关商品 24)商品收藏功能 4、 用户功能模块 1)用户基本功能:注册、登录、修改基本信息 管理员在后台管理可以按等级、用户名查找管理用户 管理员可以修改用户基本信息 管理员设置用户注册协议 2)找回密码功能:如果用户忘记了密码,可以通过预设的问题和答案重设密码 后台管理员也可以为用户修改密码 3)注册邮件功能:用户注册可以收到网站的提醒邮件,具体内容由管理员设置 4)用户积分和兑换积分:用户成功购物可以获得相应积分和兑换积分 具体积分由管理员添加商品时设置,积分和兑换积分可以自动累计 5)用户等级和折扣: 管理员可以预设多个等级,设置每个等级的折扣和升级需要达到的积分 当用户积分达到等级指定积分可以升级到该等级,享受更低的折扣价 管理员也可以手动设置每个用户的积分、等级 6)兑换优惠券: 用户的兑换积分可以用于兑换优惠券,兑换后可以获得一定金额的优惠券 优惠券有时间和使用期限的限制 7)邮件群发功能:管理员可以给注册用户群发邮件,也可以针对具体用户单独发邮件 8)用户订单管理:注册用户购物后可以在线管理订单:查看配送状态、打印订单 9)缺货登记功能:如果网站没有找到用户想要的产品,用户填写缺货登记单, 管理员后台可以回复,用户可以查看自己登记的缺货登记单以及管理员的回复 10)收藏夹功能:客户可以收藏自己感兴趣的产品,方便下次查看或订购 11)客户反馈、留言簿功能,客户可以发表建议或者问题,管理员可以回复 管理员可以设置客户留言后直接显示在网站或者管理员回复后显示在网站 12)商品评论或提问:客户可以发表针对具体商品的评论或提问,管理员可以回复 管理员可以设置客户发表评论后直接显示在网站或者管理员回复后显示在网站 5、 订单功能模块 1)管理员可设置是否提供发票、选择发票增加多少税点 可以设置结算货币、货币单位、符号 2)管理员可选5种运费计算方式,可设置订购满一定金额免运费: 根据订单计算:每订单一个运费 根据商品设置:每个商品设置一个运费,运费=基本运费+订购商品运费总和 根据重量计算:运费=基本运费+重重量*续费价格 根据商品件数:运费=基本运费+商品件数*单件运费 不计算运费:所有订单免运费 3)管理员可以设置送货方式、付款方式、到货时间,由客户下单时选择 4)用户选择商品加入购物车,选择完毕结算下单,运费根据管理员设置自动计算 5)用户订单管理功能,支持订单打印、订单状态处理、无效订单删除 6)订单投诉功能:用户如果遇到未收到货、货物有问题,可以在线投诉 管理员可回复、用户可以看到管理员回复信息 7)订单合并功能:同一用户的多个未处理订单可以合并为一个订单,方便收货管理 8)订单状态管理,支持以下状态: 未处理、已处理等待付款、已付款、已收款、已发货、已收货、无效订单 每个状态可以添加相关说明,如发货后可以说明发货方式、快递单号、发货时间 管理员确认收款后客户积分自动增加,管理员确认发货后商品库存自动减少 9)管理员按照时间段、用户名、订单状态查询管理订单,支持订单打印 可以进行销售汇总统计,计算销售额、利润等 10)管理员可以修改订单商品价格、商品数量、运费 11)订单支持优惠券功能,客户输入优惠券号码可以减去相应金额 优惠券可以管理员添加、也可以由客户用积分换取 优惠券可设置使用期限和使用条件 12)订购邮件提醒:客户订购成功后可以收到网站自动发出的邮件 具体邮件内容由管理员后台设置 13)管理员发货后系统自动发送邮件提醒客户,具体邮件内容由管理员后台设置 14)后台可以分配专门的订单管理员,权限仅限于订单管理 15)管理员可设置是否允许未登录用户下单,未注册用户下单获得积分 16)发货单功能:在订单系统外,管理员可以单独发布发货信息,提醒客户注意收货 17)垃圾数据删除:管理员可以批量删除客户加入购物车单并未结算的数据 6、 搜索引擎优化 1)网站的标题、关键字、描述支持后台自定义 2)产品一级分类页面的标题、关键字、描述支持后台自定义 标题、关键字、描述也可以设置按照一定规则自动生成 3)产品二级分类页面的标题、关键字、描述支持后台自定义 标题、关键字、描述也可以设置按照一定规则自动生成 4)产品品牌页面的标题、关键字、描述支持后台自定义 标题、关键字、描述也可以设置按照一定规则自动生成 5)产品介绍页面的标题、关键字、描述支持后台自定义 标题、关键字、描述也可以设置按照一定规则自动生成 6)新闻一级分类页面的标题、关键字、描述支持后台自定义 标题、关键字、描述也可以设置按照一定规则自动生成 7)新闻二级分类页面的标题、关键字、描述支持后台自定义 标题、关键字、描述也可以设置按照一定规则自动生成 8)新闻内容页面的标题、关键字、描述支持后台自定义 标题、关键字、描述也可以设置按照一定规则自动生成 9)帮助信息栏目页面的标题、关键字、描述支持后台自定义 标题、关键字、描述也可以设置按照一定规则自动生成 10)帮助信息页面的标题、关键字、描述支持后台自定义 标题、关键字、描述也可以设置按照一定规则自动生成 11)网站地功能 12)针对Google的Sitemap功能,地地址sitemap_google.asp 13)支持RSS功能 14)前台页面符合W3C标准 15)产品介绍关键字内链功能:后台可以设置关键字和对应的链接 如果产品介绍包含该关键字,会自动加上设置的链接 16)新闻介绍关键字内链功能:后台可以设置关键字和对应的链接 如果新闻内容包含该关键字,会自动加上设置的链接 17)后台搜索引擎优化管理收集了常见搜索引擎的登录地址,方便网站管理员提交网站 7、 促销功能模块 1)优惠券功能:客户下单时输入优惠券号码和密码可以从订单减去相应金额 2)后台支持批量添加优惠券,可以设置使用条件和使用期限 3)注册用户可以使用购物获得的积分兑换优惠券,兑换比例有后台管理员设置 4)管理员可以查看优惠券使用情况:订单号、用户 5)赠品功能:客户订单满一定金额可以选择相应的赠品 6)管理员可以添加、修改赠品,设置获取赠品需要购物满多少金额 7)商品配件功能:可实现买产品送配件、买产品加*元送配件的功能 每个商品最多加五个配件(在2008之前版本此功能名称为“套装”) 8)不同等级的用户可以享受不同的购物折扣 如一般会员不打折,VIP客户可以打98折,具体折扣由管理员设置 管理员还可以设置用户积分达到一定数量自动升级更高等级的会员 8、 在线支付系统 1)中文版支持六种支付平台: 支付宝、财付通、网银、云网支付@网、快钱、贝宝 英文版支持国际Paypal,货币可后台设置,支持美元、欧元等常见货币 2)支付宝集成了标准商家服务接口、纯担保交易接口,后台可选账户类型 其中标准接口需要开通商家服务,最低年费600 (含6万内提成,出部分按1.5%收取提成) 纯担保交易接口0年费,单比交易提成1.5% 3)财付通集成了直接到帐交易接口:0年费,单比交易提成1% 4)网银:0年费,单比交易提成1%,需要在首页添加网银LOGO广告 5)云网支付@网:0年费,单比交易提成1%,支持免费短信提醒 6)快钱支付:收费项目不祥,网站没有具体说明,建议电话咨询 7)贝宝:完全免费,客户需要有贝宝账户才能支付 8)国际Paypal:货币根据后台设置的货币自动获取 支持美元、欧元、澳元、港币、日元等常见货币,提成:2.4% 到 3.4% + $ 0.30 USD 9)各个支付平台可以单独开启、关闭,使用相应的平台需要先申请相应的账户 9、 新闻发布系统 1)新闻分类管理:支持二级分类,支持分类排序 2)新闻大类、新闻小类页面的搜索引擎优化 3)新闻管理:新闻添加、删除、修改,支持按大类查询修改新闻 新闻支持html在线编辑器,支持片、Flash、视频、音频、表格、文字格式等 4)顶部公告管理,前台公告滚动显示 5)新闻大类、新闻小类、新闻页面的搜索引擎优化 6)新闻查询功能 10、 帮助信息系统 1)帮助信息栏目管理:栏目添加、修改、删除 2)帮助信息栏目的搜索引擎优化 3)帮助信息管理:添加、修改、删除 支持html在线编辑器,支持片、Flash、视频、音频、表格、文字格式等 4)帮助信息页面的搜索引擎优化 5)帮助信息中包含“付款”、“支付”的栏目将被直接读取到商品页面付款方式 6)帮助信息中包含“送货”、“配送”的栏目将被直接读取到商品页面送货方式 11、 流量统计系统 1)总体数据:总访问量、在线人数、今日访问量、昨日访问量、今年访问量 本月访问量、统计天数、平均日访量、预计今日访问量 2)详细浏览记录:详细记录每次访问的时间、IP、地区、来源、操作系统、浏览器 3)按小时统计:最近24小时以小时为单位利用标进行流量分析 4)按日统计:最近31天以天为单位利用标进行流量分析 5)按周统计:最近一周以天为单位利用标进行流量分析 6)按月统计:最近12个月以月为单位利用标进行流量分析 7)访客来路统计:统计来源的网址,如百度、Google、互联网广告、合作网站等 8)被访问页面:统计来访用户针对网站各个具体页面的访问量 9)来自地区:统计访问者地区以及各个地区的访问量 10)IP统计:统计访问者IP以及各个IP的访问量 11)客户软件:统计来访用户使用的操作系统、浏览器版本 12)自定义统计:按照时间段、IP、地区、操作系统、浏览器、来源页面、 访问页面进行查询统计 13)使用帮助:统计系统使用帮助 14)数据归零:删除所有统计数据,统计将被初始化从零开始 15)前台可选统计显示的方式,支持:不显示、文字、标、片、Flash显示 12、 广告模块 1)支持首页变幻广告 2)弹窗广告 3)左右对联广告 4)多处固定位置广告,支持片和Flash,可以定义尺寸 5)商品大类、小类页面可以单独添加广告 13、 数据库维护系统(仅限Access数据库) 1)查看数据库大小: 查看当前网站数据库大小 Access数据库大于30M时建议升级成MSSQL 2)压缩数据库:在线压缩数据库,压缩前建议备份数据库 3)备份数据库:将数据库备份成Bak文件,用于突发状况的还原 建议备份后通过ftp下载备份文件到本地机器备份 4)数据库恢复:慎用,一旦恢复数据库,所有数据将被恢复到备份数据库对应的内容
西部浪花公文传输系统为智能ASP集公文收发、文件资料归档查询、短信会务通、会议报名、网络电话号码薄为一体的办公系统,是基某市党政机关公文传输系统系列的升级版,本系统结合之前版所有的版本的优势,风格上重新排版,真对党机关适用性强的,总结了以前版本,去除了少用或无用的功能,真正做到强化简化,不管是在程序的内部结构还是界面风格及CSS上都做了大量优化及性能提升,特别是在发送文件过程中能够自动生成文件编号,自动按后台设置好手机号码发送短信提醒用户接收文件,为用户体验提高一个台阶,本程序适合党政机关架设公文传输系统、二次开发使用。本程序具有体积小巧、程序文件结构严谨、界面清爽简单、功能强大、非专业人士使用入门快、中小企业使用投资小等实用特点。 功能说明: 西部浪花公文传输系统V2.0基本模块有: 收文模块、发文模块、收发文件查询模块、短信会务通模块、会议报名模块、网络电话号码薄模块、服务项目等。 主要功能如下: 系统设置:对网站全局进行设置。一键更改网站状态、网站头部风格、修改网站标题、设置网站基本资料和网站系统属性等。 用户设置:管理员分为级管理员或普通管理员(共4级),级管理员具有网站最高权限,普通管理员部分功能被限制。 短信号码:可设置各单位接收手机短信的手机号码(服务端需要架设短信网关或短信猫设备,如果是涉密网络可做到物理隔离架设短信网关或短信猫设备)。 文电编号:可让用户发文时自动按格式文号(实现文件编号每次自动加1)。 文电类型:用户可以自己任意设置。 归档管理:管理员可以查询管理已经归档的文电。 会议管理:管理员可以先在后台发布召集会议的标题,以及参加会议的单位、报名截止时间等,用户上线后自动提醒报名参会人员信息。管理员可以导出EXECL会议报名表格,并含有会议签到数据库。 电话号码薄:管理员可以导出EXECL自动排版好的电话号码薄。 特色:发文单位可以随时查看收文情况,如:哪些单位已经签收了文件,还有哪些单位没有签收文件,同样可查看哪些单位还没有报名参会人员信息等。试用版没有任何功能限制,只有试用时间限制。
电话簿管理系统是一个用于存储和管理联系人信息的程序。在C语言中,可以使用结构体和链表来实现电话簿管理系统。 首先,我们可以定义一个结构体来表示联系人的信息,包括姓名、电话号码等字段。例如: ```c struct Contact { char name[50]; char phone[20]; // 其他字段... }; ``` 然后,我们可以使用链表来存储联系人信息。每个节点表示一个联系人,包含一个指向下一个节点的指针。可以定义一个指向链表头节点的指针来表示整个电话簿。例如: ```c struct Node { struct Contact contact; struct Node* next; }; struct Node* phoneBook = NULL; // 链表头节点指针 ``` 接下来,我们可以实现一些基本的功能,如添加联系人、删除联系人、查找联系人等。以下是一个简单的示例: ```c // 添加联系人 void addContact(const char* name, const char* phone) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); strcpy(newNode->contact.name, name); strcpy(newNode->contact.phone, phone); newNode->next = phoneBook; phoneBook = newNode; } // 删除联系人 void deleteContact(const char* name) { struct Node* currNode = phoneBook; struct Node* prevNode = NULL; while (currNode != NULL) { if (strcmp(currNode->contact.name, name) == 0) { if (prevNode == NULL) { phoneBook = currNode->next; } else { prevNode->next = currNode->next; } free(currNode); return; } prevNode = currNode; currNode = currNode->next; } } // 查找联系人 struct Contact* findContact(const char* name) { struct Node* currNode = phoneBook; while (currNode != NULL) { if (strcmp(currNode->contact.name, name) == 0) { return &(currNode->contact); } currNode = currNode->next; } return NULL; } ``` 以上只是一个简单的电话簿管理系统的示例,你可以根据实际需求进行扩展和修改。例如,可以添加编辑联系人、显示所有联系人等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安也有星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值