通讯录作业实操(大框架和HNU图书管理系统类似)

通讯录作业实操

这个纯纯就是作者在家做题被摧残了,只能写点简单的去玩玩,轻喷 o.O

需求介绍

1.是从黑马程序员上得到的需求,因为之前也看过课但是没去实操,后面看着需求自己写的,我也建议一开始学c++的同学自己动手写一写,还是有乐趣的,虽然重新性比较强.
2.需求如下

void showmenu()
{
    cout << endl
         << "1.添加联系人" << endl
         << "2.显示联系人" << endl
         << "3.删除联系人" << endl
         << "4.查找联系人" << endl
         << "5.修改联系人" << endl
         << "6.清空联系人" << endl
         << "0.退出通讯录" << endl
         << endl;
}

按照这个showmenu()的要求去写一个自己的通讯录管理系统,当然可以加入一些文件操作,我这里只是将函数的功能完善下,有不足的地方欢迎补充 😃

2.具体代码以及思路

1.我分为了四个c++文件(3个,h 1个.cpp) 这样方便让代码的维护以及修改更加方便
2.具体代码如下:
main.cpp

#include <iostream>
#include "init.h"
#include "func.h"
#include "eg.h"

using namespace std;

int main()
{
    int select;
    vector<person *> resouce = {};
    connect_list cl(resouce);
    while (true)
    {
        showmenu();
        cout << "输入需要选择的服务:";
        cin >> select;
        cout << endl;
        switch (select)
        {
        case 1:
        {
            func1(cl);
            break;
        }

        case 2:
        {
            func2(cl);
            break;
        }

        case 3:
        {
            func3(cl);
            break;
        }

        case 4:
        {
            func4(cl);
            break;
        }

        case 5:
        {
            func5(cl);
            break;
        }

        case 6:
        {
            func6(cl);
            break;
        }

        case 0:
        {
            cout << "欢迎下次使用" << endl;
            return 0;
            break;
        }

        default:
            break;
        }
    }
    return 0;
}

init.h 主要负责菜单的初始化以及相关类的定义

#ifndef INIT_H
#define INIT_H

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <conio.h>

using namespace std;

// 主要用于初始化菜单以及储存联系人信息

class person
{
private:
    string telenumber;
    string name;
    string living_adders; // 住宅
public:
    person();
    person(string tele, string na, string l_a);
    void person_infomation(person *p);
    void change_name(string new_name);
    void change_tel(string tel);
    void change_adder(string adder);
    string person_name();
    string person_tele();
    string person_living_addr();
};

class connect_list
{
private:
    vector<person *> connectList;
    int person_number; // 联系人的总数量
public:
    connect_list();
    connect_list(vector<person *> c);
    void add_person(person *p);          // 添加
    void show_all_person();              // 显示所有 显示之前排序一下
    void del_person(string per_name);    // 删除
    void change_person(string per_name); // 修改
    void clear_person();                 // 清空
    person *name_finder(string pname);
};

void showmenu()
{
    cout << endl
         << "1.添加联系人" << endl
         << "2.显示联系人" << endl
         << "3.删除联系人" << endl
         << "4.查找联系人" << endl
         << "5.修改联系人" << endl
         << "6.清空联系人" << endl
         << "0.退出通讯录" << endl
         << endl;
}

void pause_func()
{
    cout<<"输入任意数字以继续"<<endl;
    string s;
    while(s==""){
        getline(cin,s);
    }
}

#endif

func.h 这个没啥好说的,就是相关函数的实现罢了

#ifndef FUNC_H
#define FUNC_H

#include "init.h"
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

bool cmp(person *p1, person *p2)
{
    return p1->person_name() < p2->person_name();
}

person::person()
{
    this->telenumber = "-1";
    this->name = "NULL";
    this->living_adders = "NULL";
}

person::person(string tele, string na = "NULL", string l_a = "NULL")
{
    this->telenumber = tele;
    this->name = na;
    this->living_adders = l_a;
    // 使用默认参数 这样不添加参数也不会错误
}


string person::person_name()
{
    return name;
}

string person::person_tele(){
    return this->telenumber;
}

string person::person_living_addr()
{
    return this->living_adders;
}

void person::person_infomation(person *p)
{
    cout << "姓名:" << p->name << endl
         << "联系电话位:" << p->telenumber << endl
         << "地址为:" << p->living_adders << endl;
}

void person::change_name(string new_name)
{
    this->name = new_name;
}

void person::change_tel(string tel){
    this->telenumber=tel;
}

void person::change_adder(string adder){
    this->living_adders=adder;
}


connect_list::connect_list()
{
    this->connectList = {};
    this->person_number = 0;
}

connect_list::connect_list(vector<person *> c)
{
    this->connectList = c;
    this->person_number = c.size();
}

person* connect_list::name_finder(string pname){
    vector<person*> temp=this->connectList;
    int l=temp.size();
    for (int i = 0; i < l; i++)
    {
        if(temp[i]->person_name()==pname){
            return temp[i];
        }
    }
    return NULL;
    
}

void connect_list::add_person(person *p)
{
    string pname = p->person_name();
    vector<person *> temp = this->connectList;
    vector<person *>::iterator it = temp.begin();
    for (it; it < temp.end(); it++)
    {
        if ((*it)->person_name() == pname)
        {
            cout << "联系人重复,请重新输入名字" << endl;
            // 此处还可添加修改名字操作
            cout << "姓名为:";
            string new_name;
            cin >> new_name;
            p->change_name(new_name);
            break;
        }
    }
    cout << endl;
    this->connectList.push_back(p);
    this->person_number++;
    cout << "联系人添加成功" << endl;
}

void connect_list::show_all_person()
{
    vector<person *> temp = this->connectList;
    sort(temp.begin(), temp.end(), cmp);
    int l = temp.size();
    for (int i = 0; i < l; i++)
    {
        cout << "姓名为:" << temp[i]->person_name()<<endl
             << "电话为:" <<temp[i]->person_tele()<<endl
             <<"住址为:"<<temp[i]->person_living_addr()<<endl;
    }
    cout<<endl<<"以上为所有联系人"<<endl;
}

void connect_list::del_person(string pname){
    person* tar=name_finder(pname);
    vector<person*>& t=this->connectList;
    if(tar!=NULL){
        // this->connectList.remove(tar);
        // remove(this->connectList.begin(),this->connectList.end(),tar);
        for(vector<person*>::iterator it=t.begin();it!=t.end();it++){
            if(*it==tar){
                this->connectList.erase(it);
                break;
            }
        }
        this->person_number--;
        cout<<"删除成功"<<endl;
    }
    else{
        cout<<"不存在该联系人"<<endl;
    }
}

void connect_list::change_person(string per_name){
    person* tar=name_finder(per_name);
    string tel,adder;
    cout<<"输入需要修改的电话:";
    cin>>tel;
    cout<<"输入需要修改的地址:";
    cin>>adder;
    cout<<endl;
    tar->change_tel(tel);
    tar->change_adder(adder);
    cout<<"修改成功"<<endl;
}

void connect_list::clear_person()
{
    this->connectList.clear();
    this->person_number=0;
    cout<<"清空完成"<<endl;
}



#endif

eg.h 将最后的结果进行封装,实现对应功能即可

#ifndef EG_H
#define EG_H

#include"func.h"
#include"init.h"
#include<string>
#include<iostream>
#include<vector>


using namespace std;

void func1(connect_list& cl)
{
    string tel,name,adder;
    cout<<"输入姓名:";
    cin>>name;
    cout<<endl;
    cout<<"输入电话:";
    cin>>tel;
    cout<<endl;
    cout<<"输入地址:";
    cin>>adder;
    cout<<endl;
    person* temp=new person(tel,name,adder);
    cl.add_person(temp);
    pause_func();
}

void func2(connect_list& cl){  
    cl.show_all_person();
    pause_func();
}

void func3(connect_list& cl){
    cout<<"输出你需要删除的人的姓名:";
    string s;
    cin>>s;
    cout<<endl;
    cl.del_person(s);
    pause_func();
}

void func4(connect_list& cl){
    string s;
    cout<<"输入需要查找联系人的姓名:";
    cin>>s;
    cout<<endl;
    person* temp=cl.name_finder(s);
    if(temp==NULL){
        cout<<"未查找到该联系人"<<endl;
    }
    else{
        cout << "姓名为:" << temp->person_name()
             << "电话为:" <<temp->person_tele()
             <<"住址为:"<<temp->person_living_addr()
             <<endl;
    }
    pause_func();
}

void func5(connect_list& cl){
    cout<<"输入需要修改的联系人名字:";
    string s;
    cin>>s;
    cout<<endl;
    cl.change_person(s);
    pause_func();
}

void func6(connect_list& cl){
    cout<<"请问你是否需要清空联系人,输入1确认";
    string s;
    cin>>s;
    if(s=="1"){
        cl.clear_person();
    }
    else{
        cout<<"即将退回主菜单"<<endl;
    }
    pause_func();
}

#endif

写在后面

1.ifndef/define/endif 这个是使用多个头文件编译时需要注意的点具体可以去看我发的
ifndef等的相关用法
2.像我上面说的,可以加入文件操作等,也可以使用一些前端知识以及自己的服务器去搭建一个简易的网络通讯录管理系统(有点像qq好友??)
3.HNU的计科专业一年级的程序设计也有类似的作业,好像是图书管理系统,记得不清了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值