电话簿项目

简介: //项目一:电话簿 //有个父类Book,有成员变量:书本的名字,书本的路径,有4个纯虚函数,分别是增删查改。类PhoneBook继承了类Book,并扩展了电话号码,姓名,扩展了登陆接口,实现了父类的4个纯虚函数。

//项目一:电话簿

//有个父类Book,有成员变量:书本的名字,书本的路径,有4个纯虚函数,分别是增删查改。类PhoneBook继承了类Book,并扩展了电话号码,姓名,扩展了登陆接口,实现了父类的4个纯虚函数。数据信息使用文本的方式存储!


#include <iostream>

using namespace std;

#include <string>

#include <stdlib.h>

#include <fstream>

#include <vector>

#include <time.h>


class Book

{

private:

    string _bookname;//书名

    string _bookpath;//当前文件的路径

public:

    void setbookname(string name)

    {

        _bookname = name;

    }

    string getbookname()

    {

        return _bookname;

    }

    void setpath(string path)

    {

        _bookpath = path;

    }

    string path()

    {

        return _bookpath;

    }

    //定义四个增删查改的纯虚函数

    virtual void add() = 0;

    virtual void del(string &name) = 0;

    virtual void sel(string &name) = 0;

    virtual void alt(string &name) = 0;

};


class PhoneBook:public Book

{    

private:

    string _phoneNumber;//电话号码

    string _name;//姓名

public:

    PhoneBook(){};

    void setphonenumber(string phonenumber)

    {

        _phoneNumber=phonenumber;

    }

    string getphonenumber()

    {

        return _phoneNumber;

    }

    void setname(string name)

    {

        _name=name;

    }

    string getname()

    {

        return _name;

    }

    

    void add(){};

    void del(string &name){};

    void sel(string &name){};

    void alt(string &name){};

    

};


typedef struct PB

{

    string name;

    string tel;

    string bookname;

}PB;


PB phonebook[20];

int num=0;

class ManagePhoneBook:public PhoneBook

{

public:

    

    int total;//总记录数

    vector<PhoneBook> PhoneBook;

    //添加

    void add()

    {

        char f='y';

        string sTemp;

        ofstream onfile;//写入文件类

        //onfile.open("phonebook.txt",ios::out|ios::app);

        onfile.open("phonebook.txt");

        do {

            cout<<"输入姓名:";

            cin>>sTemp;

            phonebook[num].name = sTemp;

            onfile<<sTemp<<"    ";

            cout<<"输入电话号码:";

            cin>>sTemp;

            phonebook[num].tel = sTemp;

            onfile<<sTemp<<"    ";

            cout<<"输入喜欢的书籍:";

            cin>>sTemp;

            phonebook[num].bookname = sTemp;

            onfile<<sTemp<<"    "<<"\n";

            num++;

            cout<<"还要输出吗?y/n"<<endl;

            cin>>f;

            

        } while (f=='y');

        onfile.close();

    }

    //根据姓名删除

    void del(string &name,int &num1)

    {

        ofstream onfile;//写入文件类

        onfile.open("phonebook.txt");

        int i;

        int j=0;

        for (i=0; i<num1; i++) {

            if (phonebook[i].name == name) {

                for (j=i; j<num1-1; j++) {

                    phonebook[j]=phonebook[j+1];

                }

                num1--;

                i--;

                cout<<"删除成功!"<<endl;

            }

        }

        //重写到文件

        for (int i=0; i<num1; i++) {

            onfile<<phonebook[i].name<<"    "<<phonebook[i].tel<<"  "<<phonebook[i].bookname<<"\n";

        }

        onfile.close();

    }

    //根据姓名查询

    void sel(string &name,int &num1)

    {

        int i;

        int j=0;

        cout<<"------------------------------------\n";

        cout<<"  姓名     电话         喜欢的书籍     \n";

        cout<<"------------------------------------\n";

        for (i=0; i<num1; i++) {

            if (phonebook[i].name == name) {

                cout<<phonebook[i].name<<"  "<<phonebook[i].tel<<"  "<<phonebook[i].bookname<<endl;

            }

        }

    }

    //根据姓名修改

    void alt(string &name,int &num1)

    {

        string s;

        for (int i=0; i<num1; i++) {

            if (phonebook[i].name == name) {

                cout<<"输入姓名:";

                cin>>s;

                phonebook[i].name=s;

                cout<<"输入电话:";

                cin>>s;

                phonebook[i].tel = s;

                cout<<"输入书名:";

                cin>>s;

                phonebook[i].bookname = s;

            }

            break;

        }

        ofstream onfile;//写入文件类

        onfile.open("phonebook.txt");

        //重写到文件

        for (int i=0; i<num1; i++) {

            onfile<<phonebook[i].name<<"    "<<phonebook[i].tel<<"  "<<phonebook[i].bookname<<"\n";

        }

        onfile.close();

    }

    

};


//char password[20];//密码


/*******************函数申明******************************************/

void set_psw();//设置密码

int psw_check();//密码验证

void Show_menu();//显示菜单

int get_menu_choice();//接受菜单选择

void InputIntoFile(vector<PhoneBook> PhoneBook);//将vector写入文件

void PrintTitle();//打印头信息

void menu();//菜单相应


/********************函数定义*****************************************/

//菜单相应

void menu(ManagePhoneBook &mphonebook)

{

    while(1)

    {

        Show_menu();//显示菜单

        switch (get_menu_choice()) {

            case 1://增加记录

                mphonebook.add();

                break;

            case 2://删除记录

            {

                string s;

                cout<<"输入要删除的学生姓名:";

                cin>>s;

                mphonebook.del(s,num);

            }

                break;

            case 3://查询记录

            {

                string ss;

                cout<<"输入要查询的学生姓名:";

                cin>>ss;

                mphonebook.sel(ss,num);

            }

                break;

            case 4://修改记录

            {

                string sss;

                cout<<"输入要修改的学生姓名:";

                cin>>sss;

                mphonebook.alt(sss,num);

            }

                break;

            case 5://查询所有记录

            {

                cout<<"------------------------------------\n";

                cout<<"  姓名     电话         喜欢的书籍     \n";

                cout<<"------------------------------------\n";

                for (int i=0; i<num; i++) {

                    

                        cout<<phonebook[i].name<<"  "<<phonebook[i].tel<<"  "<<phonebook[i].bookname<<endl;

                    

                }

            }

                break;

            default:

                printf("*********************\n");

                printf("     欢迎使用本系统     \n");

                printf("**********************\n");

                break;

        }

    }

}

//打印头信息

void PrintTitle()

{

    cout<<"------------------------------------\n";

    cout<<"  姓名     电话         喜欢的书籍     \n";

    cout<<"------------------------------------\n";

}

//将结构体写入文件

void InputIntoFile(PB phonebook[20])

{

    ofstream onfile;//写入文件类

    onfile.open("phonebook.txt");

    for (int i=0; i<num; i++) {

        onfile<<phonebook[i].name<<"  "<<phonebook[i].tel<<"   "<<phonebook[i].bookname;

    }

}


//设置密码

void set_psw()

{

    ofstream onfile;//写入文件类

    string psw_set ,psw_check;

    do

    {

        cout<<"You must set password first!\n";    

        cin>>psw_set;

        cout<<"---------------------------\n";

        cout<<"conform password:";

        cin>>psw_check;

        if(psw_check == psw_check)

        {

            cout<<"set password success!\n";

        }

        else

        {

                cout<<"error!\n";

        }

    }

    while(psw_check != psw_set);

    onfile.open("password.txt",ios::out);

    onfile<<psw_set;

    onfile.close();

}



//密码验证

int psw_check()

{

    ifstream infile;//读取文件类

    ofstream onfile;//文件写入类

    unsigned int j=1;

    string pword;

    string password;

    infile.open("password.txt",ios::in);

    if (!infile.is_open())//如果打开失败,则重新设置密码

    {

        set_psw();//重新设置密码

    }

    //取值

    infile>>password;

    //打开成功验证密码

    do {

        cout<<"输入密码,你将有三次机会:"<<j<<"/3次机会"<<endl;

        cin>>pword;

        j++;

    } while (password != pword && j<=3);

    if (j<=3) {

        cout<<"恭喜登陆成功!"<<endl;

        return 1;//打开成功

    }

    else

    {

        cout<<"你已经输入了三次了,打开文件失败!"<<endl;

        return 0;

    }

    

}

//显示菜单

void Show_menu()

{

    cout<<">>>>>>>>>>>>>>>>>>>欢迎使用电话簿<<<<<<<<<<<<<<<<<<<<<<<\n";

    cout<<"******************************************************\n";

    cout<<"          1.增加记录      |        2.删除记录            \n";

    cout<<"          3.查询单个记录   |        4.修改记录            \n";

    cout<<"          5.查询所有记录   |        0.退出               \n";

    cout<<"******************************************************\n";

}

//接受菜单选择

int get_menu_choice()

{

    int menu_ch;//菜单选项

    do {

        cout<<"请选择菜单:";

        cin>>menu_ch;

        if (menu_ch<0||menu_ch>5) {

            cout<<"error";

        }

    } while (menu_ch<0||menu_ch>5);

    return menu_ch;

}

int main(int argc, const char * argv[])

{

    ManagePhoneBook m;

    if (psw_check()) {

        menu(m);

    }

    return 0;

}

相关文章
|
3月前
|
开发工具 git 开发者
[译] 🙏 请把 .gitattributes 加入你的项目
[译] 🙏 请把 .gitattributes 加入你的项目
[译] 🙏 请把 .gitattributes 加入你的项目
|
4月前
|
机器学习/深度学习 Linux 计算机视觉
项目介绍
【7月更文挑战第30天】项目介绍。
40 1
|
开发框架 .NET API
如何在现有项目中使用`Masa MiniApi`?
如何在现有项目中使用`Masa MiniApi`?
82 0
如何在现有项目中使用`Masa MiniApi`?
|
搜索推荐 开发者
关于AskBlog项目存在的问题
关于AskBlog项目存在的问题
71 0
|
IDE Java Linux
tbfetcher项目小结
tbfetcher项目小结
97 0
A2021-A2022年度项目总结(二)
A2021-A2022年度项目总结(二)
93 0
|
SQL 前端开发 数据库
如何在码云上Down一个项目
如何在码云上Down一个项目
如何在码云上Down一个项目
|
JavaScript 前端开发
项目生成
项目生成
160 0