用 C⼀C++模拟手机通信录管理系统。在线等!!!!!!

2025-03-04 07:58:51
推荐回答(1个)
回答1:

//可供参考的代码,一般做这个都是有偿的

#include
#include
#include
#include
#include

using namespace std;

namespace NameRecord{

    struct friend_node{
        char last_name[20];
        char phone_num[12];
        friend_node* next;
        friend_node* prior;
    };
    friend_node *head_ptr;
    friend_node *tail_ptr;
    friend_node *current_ptr;
    char pause;
    class record{
    public:
        void UserChoice(int choice);
        void InsertRecord();
        void InsertNode(friend_node *new_ptr);
        void InsertNodeAtHead(friend_node *new_ptr);
        void InsertNodeAtEnd(friend_node *new_ptr);
        void ShowList();
        void DeleteRecord();
        void DeleteNodeAtHead();
        void DeleteNodeAtEnd();
        void DeleteNodeAtMiddle();
        int  VerifyDelete();
        void DeleteNode();
        void DeleteList();
        void SearchByLastName();
        void SaveFile();
        void LoadFile();
        void Help();
        void ModifyRecord();
        void UserInput();
    };
}

using namespace NameRecord;

int main(){
    record myrecord;
    cout<<"欢迎使用PhoneBook"<    cout<<"按Enter键继续"<    cin.get(pause);
    system("cls");//清屏
    int choice;
    head_ptr = NULL;
    tail_ptr = NULL;
    myrecord.LoadFile();
    do{
        cout<<"1_新增记录"<        cout<<"2_显示所有记录"<        cout<<"3_按姓氏搜索记录"<        cout<<"4_删除记录"<        cout<<"5_修改记录"<        cout<<"6_帮助"<        cout<<"7_退出程序"<        cout<<"输入您的选择:";
        cin>>choice;
        myrecord.UserChoice(choice);//处理选择
    }while(choice!=7);
    return 0;
}

/***************************************************/
//处理选择的函数
//通过输入的选项进行函数调用
void record::UserChoice(int choice){
    switch(choice){
    case 1:
        InsertRecord();
        break;
    case 2:
        ShowList();
        break;
    case 3:
        SearchByLastName();
        break;
    case 4:
        DeleteRecord();
        break;
    case 5:
        ModifyRecord();
        break;
    case 6:
        Help();
        break;
    case 7:
        SaveFile();
        if(head_ptr==NULL)
            DeleteList();
        break;
    default:
        cout<<"选择无效"<        break;
    }
}
/***************************************************/
//插入记录的函数
void record::InsertRecord(){
    friend_node *new_ptr;
    new_ptr = new friend_node;
    if(new_ptr!=NULL){
        system("cls");
        cin.ignore(20,'\n');
        cout<<"名字:";
        cin.getline(new_ptr->last_name,15);
        cout<<"电话号码:";
        cin.getline(new_ptr->phone_num,15);
        InsertNode(new_ptr);
    }
    else 
        cout<<"警告,申请存储空间失败,不能创建新结点。"<    system("cls");
}

void record::InsertNode(friend_node * new_ptr){
    system("cls");
    //friend_node *temp_ptr;
    //情况一:双向链表为空
    if(head_ptr==NULL){
        new_ptr->next = NULL;
        new_ptr->prior = NULL;
        head_ptr = new_ptr;
        tail_ptr = new_ptr;
        return;
    }
    //情况二:如果链表中只有一个结点
    if(head_ptr->next==NULL){
        if(strcmp(new_ptr->last_name,head_ptr->last_name)<0)
            InsertNodeAtHead(new_ptr);
        else 
            InsertNodeAtEnd(new_ptr);
        return;
    }
    //情况三:链表中不为一个链表
    if(head_ptr->next!=NULL){
        current_ptr = head_ptr;
        while((current_ptr!=NULL)//这两个判断条件不能颠倒,否则会出现严重错误 !!!
            &&(strcmp(new_ptr->last_name,current_ptr->last_name)>0))
            current_ptr = current_ptr->next;
        
        if(current_ptr == head_ptr)
            InsertNodeAtHead(new_ptr);
        else if(current_ptr == NULL )
            InsertNodeAtEnd(new_ptr);
        else//如果没有查找完整个表,并且满足排序条件推出,
            //欲插入结点应该插入current_ptr之前
        {
            new_ptr->next = current_ptr;
            new_ptr->prior = current_ptr->prior;
            current_ptr->prior->next = new_ptr;
            current_ptr->prior = new_ptr;
        }
        return ;
    }        
}

void record::InsertNodeAtHead(friend_node*new_ptr){
    new_ptr->next = head_ptr;
    new_ptr->prior = NULL;
    head_ptr->prior = new_ptr;
    head_ptr = new_ptr;
}

void record::InsertNodeAtEnd(friend_node*new_ptr){
    new_ptr->prior = tail_ptr;
    new_ptr->next = NULL;
    tail_ptr->next = new_ptr;
    tail_ptr = new_ptr;
}
/*****************************************************/
void record::ShowList(){
    system("cls");
    int n;
    cout<<"请输入每屏显示的数目(不得大于20):"<    cin>>n;
    system("cls");
    int i;
    current_ptr = head_ptr;
    if(head_ptr ==NULL){
        cout<<"记录为空,还未添加记录 !"<        return;
    }
    do{
        i=1;//分屏显示
        cout<        do{
            cout<last_name<phone_num<            current_ptr = current_ptr->next;
            i++;
        }while(current_ptr!=NULL&&i<=n);

        cin.get(pause);
        if(current_ptr!=NULL){
            cout<<"请按Enter键继续";
            cin.get(pause);
            system("cls");
        }
        else cout<<"文件结束"<    }while(current_ptr!=NULL);

    cin.get(pause);
    cin.ignore(1,pause);
    system("cls");
}
/*****************************************************/
void record::SearchByLastName(){
    system("cls");
    int flag =0;
    char search_string[20];
    current_ptr = head_ptr;
    if(current_ptr==NULL)
        cout<<"电话记录为空 !"<    else{
        cin.ignore(20,'\n');
        cout<<"输入您要搜索的名字:";
        cin.getline(search_string,20);
        while(current_ptr!=NULL){
            if(strcmp(current_ptr->last_name,search_string)==0){
                if(flag==0)cout<<"找到记录"<                flag = 1;
                cout<last_name<<"\t\t";
                cout<phone_num<            }
            current_ptr=current_ptr->next;
        }
        if(flag == 0){
            cout<<"无该记录"<            cin.get(pause);
            system("cls");
        }
    }
}