用c++写的简易学生通讯录

http://blog.csdn.net/yuzhihui_no1/article/details/43530445

昨天我一大学室友找到我说他亲戚要个学生通讯录程序,一定要c++来写,而他是学Java的,对c++的基本语法都忘干净了。因为我是做c方面开发的,所以问我能不能搞定。虽然我也半年多没用c++写过东西了,但作为室友怎么能拒绝呢,再个看了下他的需求感觉挺简单的(没涉及到数据库操作),于是就应承下来了。
        他给我的需求是这样的:
        学生通讯录系统
        学生通信录信息包括:姓名、学号、年龄、性别、家庭住址、联系电话、寝室号等信息。
        系统以菜单方式工作,使之能提供以下功能::
        学生通信录信息的输入
        学生的通信录信息删除和修改
        学生的通信录信息查询和统计功能
        学生的通信录信息输出显示 
        而且数据都保存在内存中;

我在Linux下用了半上午时间给他写了个简易的通讯录程序,下面我把代码贴出来,希望可以给那些大一大二想写这个程序的同学一点思路。其中不规范的地方还望大家指出了(因为为了尽快完成功能,所以一些规范就没太注意),谢谢!
[cpp] view plain copy
#include<iostream>  
#include<cstdlib> //主要是用到exit()退出进程函数   
#include<string.h>//字符串头文件  
  
#define NoFind -1  
#define NoOperation -2  
#define Fill  -3  
#define Exist -4  
  
using namespace std;  
  
class student  
{  
  public:  
    void printStudent(); // print a student information  
  
    void setName();  
    string getName();  
      
    void setId();  
    unsigned int getId();  
  
    void setAge();  
    unsigned int getAge();  
  
    void setSex();  
    char getSex();   
  
    void setAddr();  
    string getAddr();  
  
    void setPhone();  
    string getPhone();  
  
    void setRoom();  
    string getRoom();  
  
  private:  
    string name;  
    unsigned int  id;  
    unsigned int  age;  
    char sex;  
    string addr;  
    string phone;  
    string room;  
};  
  
void student::setId()  
{  
  cout<<"Id:";  
  cin>>id;  
}  
  
unsigned int student::getId()  
{  
  return id;  
}  
  
void student::setName()  
{  
  cout<<"Name:";  
  cin>>name;  
}  
  
string student::getName()  
{  
  return name;  
}  
  
void student::setAge()  
{  
  cout<<"Age:";  
  cin>>age;  
}  
  
unsigned int student::getAge()  
{  
  return age;  
}  
  
void student::setSex()  
{  
  cout<<"Sex:";  
  cin>>sex;  
}  
  
char student::getSex()  
{  
  return sex;  
}  
  
void student::setAddr()  
{  
  cout<<"Addr:";  
  cin>>addr;  
}  
  
string student::getAddr()  
{  
  return addr;  
}  
  
void student::setPhone()  
{  
  cout<<"Phone:";  
  cin>>phone;  
}  
  
string student::getPhone()  
{  
  return phone;  
}  
  
void student::setRoom()  
{  
  cout<<"Room:";  
  cin>>room;  
}  
  
string student::getRoom()  
{   
  return room;  
}  
  
void student::printStudent()  
{  
  cout<<"Id:"<<id<<endl;  
  cout<<"Name:"<<name<<endl;  
  cout<<"Age:"<<age<<endl;  
  cout<<"Sex:"<<sex<<endl;  
  cout<<"Addr:"<<addr<<endl;  
  cout<<"Phone:"<<phone<<endl;  
  cout<<"Room:"<<room<<endl;  
  cout<<endl;  
}  
//上面都是学生类,以及类的属性设置和获取函数  
 
  
#define LEN 1024  
  
//定义一个结构体,保存类对象和数据有效性标志  
typedef struct Node{  
     student s;  
     int flag;//如果为0 表示该结构体中的对象无效  
}Node;  
  
static int studentNum = 0;  
static Node buff[LEN] = {};//用来存放上面结构体对象的,一个对象表示一个同学的信息  
  
//在数组中得到一个空闲的元素,返回数组小标;是否空闲可以查看flag标志位  
int getArrayFree()  
{  
    int i;  
    for(i = 0; i < LEN; i++)  
    {  
        if(0 == buff[i].flag)  
            return i;  
    }  
    return Fill;  
}  
  
//在数组中查找指定学生的信息,该函数被删除和修改函数调用  
//用学号查询和姓名查询两种方式,返回查找到的学生在数组中下标号  
int getArrayIndex()  
{  
    unsigned int select;  
    unsigned int id = 0;  
    string name = "";  
  
    cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;  
    cout<<"select operation student way, id or name?"<<endl;  
    cout<<"****************************"<<endl;  
    cout<<"       1   Use  id          "<<endl;  
    cout<<"       2   Use  name        "<<endl;  
    cout<<"       3   Break            "<<endl;  
    cout<<"       4   Exit             "<<endl;  
    cout<<"****************************"<<endl;  
    cin>>select;  
  
    switch(select)  
    {  
        case 1:  
            cout<<"please enter the student Id:";  
            cin>>id;  
            break;  
        case 2:  
            cout<<"please enter the student Name:";  
            cin>>name;  
            break;  
        case 3:  
            return NoOperation;  
        case 4:  
            cout<<"exit process!"<<endl;exit(0);  
        default:  
            cout<<"other select will go break!"<<endl;  
            return NoOperation;  
    }  
  
    int i;  
    for(i = 0; i < LEN; i++)  
    {  
        if(!(buff[i]).flag) continue;  
        if(0 == id)  
        {  
            if(name == buff[i].s.getName())  
                return i;  
        }  
  
        if(id == buff[i].s.getId())  
            return i;  
    }  
    return NoFind;  
}  
  
//判断该id是否存在,姓名可以相同,但学号一定不能相同  
int isExist(int id)  
{  
    int i;  
    int count = 0;  
    for(i = 0; i < LEN; i++)  
    {  
        if(id == buff[i].s.getId())  
           count++;  
    }  
    return count;  
}  
  
//增加一个学生的信息到数组中,也即是通讯录中增加一条通讯录  
int addStudentInfo()  
{  
    student newStd;  
    string name;  
    int i;  
    int index;  
    char yORn;  
      
    cout<<endl;  
    cout<<"-----------------------------------"<<endl;    
    cout<<"addStudentInfo:"<<endl;  
    newStd.setId();  
    newStd.setName();  
    newStd.setAge();  
    newStd.setSex();  
    newStd.setAddr();  
    newStd.setPhone();  
    newStd.setRoom();  
  
    cout<<endl;  
    newStd.printStudent();  
  
    cout<<"Are you sure this information is correct?[y or N]"<<endl;  
    cin>>yORn;  
    if(!(('y' == yORn) || ('Y' == yORn)))  
        return 0;  
  
    if( -1 == (index = getArrayFree()) )  
    {  
        cout<<"The contacts filled!"<<endl;  
        return Fill;  
    }  
  
    if(isExist(newStd.getId()))  
    {  
        cout<<"The id is exist!"<<endl;  
        return Exist;  
    }  
  
    buff[index].s = newStd;  
    buff[index].flag = 1;  
    studentNum++;  
    cout<<endl;  
    cout<<"Success"<<endl;cout<<endl;  
    return 0;  
  
}  
  
//删除指定学生的通讯录信息,只要flag置0  
int delStudentInfo()  
{  
    int index;  
  
    index = getArrayIndex();  
  
    if(NoFind == index)  
    {  
        cout<<"No find the student!"<<endl;  
        return 0;  
    }  
  
    if(NoOperation == index) return 0;  
  
    buff[index].flag = 0;  
    studentNum--;  
  
    cout<<"--------------------------------------"<<endl;  
    cout<<"Success"<<endl;  
    return 0;     
}  
  
//修改指定学生的信息  
int updateStudentInfo()  
{  
    int index;  
    int select;  
    int count = 2;  
  
    cout<<endl;  
    cout<<"---------------------------------"<<endl;  
    cout<<"update the student information:"<<endl;  
  
    index = getArrayIndex();  
  
    if(NoFind == index)  
    {  
        cout<<"No find the student!"<<endl;  
        return NoFind;  
    }  
  
    if(NoOperation == index) return 0;  
      
    while(1)  
    {  
        cout<<endl;  
        cout<<"~~~~~~~~~~~~~~~~~~~~"<<endl;  
        cout<<"   1  Id            "<<endl;  
        cout<<"   2  Name          "<<endl;  
        cout<<"   3  Age           "<<endl;  
        cout<<"   4  Sex           "<<endl;  
        cout<<"   5  Addr          "<<endl;  
        cout<<"   6  Phone         "<<endl;  
        cout<<"   7  Room          "<<endl;  
        cout<<"   8  Break         "<<endl;  
        cout<<"   9  Exit          "<<endl;  
        cout<<"~~~~~~~~~~~~~~~~~~~~"<<endl;  
        cout<<endl;  
        cout<<"please select update informaton:"<<endl;  
        cin>>select;  
  
        switch(select)  
        {  
            case 1://下面循环要判断id(学号)是否重合,如果重合就再选择一个学号,直到没有重合的  
                while((count-1))  
                {  
                    buff[index].s.setId();  
                    count = isExist(buff[index].s.getId());  
                    if(count >= 2) cout<<"id is exist!"<<endl;  
                }  
                break;  
  
            case 2: buff[index].s.setName();break;  
            case 3: buff[index].s.setAge();break;  
            case 4: buff[index].s.setSex();break;  
            case 5: buff[index].s.setAddr();break;  
            case 6: buff[index].s.setPhone();break;  
            case 7: buff[index].s.setRoom();break;  
            case 8: return NoOperation;  
            case 9: cout<<"exit process!"<<endl;exit(0);  
            default:return NoOperation;  
        }  
    }  
    return 0;  
}  
  
//统计通讯录中有多少个学生  
int accoutStudent() // accout Student number  
{  
   cout<<endl;  
   cout<<"---------------------------------"<<endl;  
   cout<<"student number:"<<studentNum<<endl;  
   return 0;  
}  
  
//打印指定学生信息  
void printStudentInfo()  
{  
    int index;  
      
    index = getArrayIndex();  
  
    if(NoFind == index)  
    {  
        cout<<"No find the student!"<<endl;  
        return;  
    }  
  
    if(NoOperation == index) return;  
  
    cout<<endl;  
    cout<<"---------------------------------"<<endl;  
    buff[index].s.printStudent();  
  
    return;  
      
}  
  
//打印所有学生的信息  
void showAllStudentInfo()  
{  
    int i;  
    cout<<endl;  
    cout<<"show all stduent information:"<<endl;  
    for(i = 0; i < LEN; i++)  
    {  
        if(1 == buff[i].flag)  
            buff[i].s.printStudent();  
    }  
    return;  
}  
  
//根据菜单选择调用对应函数  
void select(int number)  
{  
   switch(number)  
   {  
     case 1:  
           addStudentInfo();break;  
     case 2:  
           delStudentInfo();break;  
     case 3:  
           updateStudentInfo();break;  
     case 4:  
           accoutStudent();break;  
     case 5:  
           printStudentInfo();break;  
     case 6:  
           showAllStudentInfo();break;  
     default:  
           cout<<"error"<<endl;return;  
   }    
}  
  
//选择菜单函数  
void menu()  
{  
    unsigned int number = 7;  
    while(1)  
     {        
        cout<<endl;  
        cout<<"**********************************"<<endl;  
        cout<<"    1 Add student information"     <<endl;  
        cout<<"    2 Del student information"     <<endl;  
        cout<<"    3 Update student information"  <<endl;  
        cout<<"    4 Accout student number"       <<endl;  
        cout<<"    5 Printf a student information"<<endl;  
        cout<<"    6 Show all student information"<<endl;  
        cout<<"    7 Exit                        "<<endl;  
        cout<<"**********************************"<<endl;  
        cout<<endl;  
        cout<<"please enter the number:<1~7>"<<endl;  
  
        cin>>number;  
       
        if(7 == number)   
          return;     
        if((1 <= number)&&(7 > number))  
            select(number);  
        sleep(1);  
     }  
}  
  
  
int main(int argc, char **argv)  
{  
   menu();  
   return 0;  
}  
        程序基本就是这样的,在Linux系统上测试通过,没问题。在其他系统上应该没有大问题,如果有的话就是头文件的问题(听室友说在mac上sleep()函数是没有的,Windows下要添加一个头文件,具体什么头文件需要的可以百度下);
        程序还有个问题,就是在menu()函数中输入值给number时,如果你输入字符就会出现死循环(这个死循环不是因为while(1)造成的,如果正常死循环,每循环一次就会等待用户输入一个值),在我预计中不会出现这个问题的,因为输入字符也是转化成ascii码,然后也会被剔除的。可惜,不是这样,我打印了下number(当输入字符A时),结果却是0,而不是64;还有当输入学生信息时,如果在id输入时,不小心输入名字时(其实就是字符串)也会出现未知的错误。查了资料说是c++中类型不能混用,本应该要有防止这种失误操作的处理方法,但我实验了下,没成功,如果谁有好的办法希望可以告诉我一声,共同学习嘛。谢谢!
         转载请注明作者和原文出处,原文地址:http://blog.csdn.net/yuzhihui_no1/article/details/43530445
========

C++ 通讯录实现

http://blog.csdn.net/ky_heart/article/details/55045996

昨晚实现了用C++编写通讯录,深刻的感受到了封装的便利性啊,vector真是太方便了!!!

代码如下:

info.h

[cpp] view plain copy print?
#ifndef _PERSON_H_  
#define _PERSON_H_  
  
#include <iostream>  
#include <vector>  
#include <string>  
using namespace std;  
  
class Info  
{  
private:  
    int id;  
    string name;  
    string tel;  
    string addr;  
public:  
    Info();  
    ~Info();  
    static int count; //记录通讯录中的人数  
    int GetId();  
    void SetName();  
    string GetName() const;  
    void SetTel();  
    string GetTel() const;  
    void SetAddr();  
    string GetAddr() const;  
    void choose();  
    void insert();  
    void show();  
    void search();  
    void interface();  
    void delete_info();  
    void exit_info();  
    void modify();  
};  
  
#endif

info.cpp

[cpp] view plain copy print?
#include "info.h"  
  
  
vector<Info> per;  
int Info::count = 0;  
  
  
int Info::GetId()  
{  
    return id;  
}  
  
  
void Info::SetName()  
{  
    cout << "姓名:";   
    cin >> name;  
}  
string Info::GetName() const  
{  
    string tmp = name;  
    return tmp;  
}  
  
  
void Info::SetTel()  
{  
    cout << "电话:";  
    cin >> tel;  
}  
string Info::GetTel() const  
{  
    string tmp = tel;  
    return tmp;  
}  
  
  
void Info::SetAddr()  
{  
    cout << "地址:";  
    cin >> addr;  
}  
string Info::GetAddr() const  
{  
    string tmp = addr;  
    return tmp;  
}  
  
  
Info::Info()  
{  
  
  
}  
  
  
Info::~Info()  
{  
  
  
}  
  
  
void Info::insert()  
{  
    Info tmp;  
    vector<Info>::iterator it;  
loop:  
    count++;  
    cout << "ID: " << count << endl;  
    tmp.SetName();  
    for(it = per.begin(); it != per.end(); ++it)  
    {  
        if(!((it->GetName()).compare(tmp.GetName())))  
{  
   cout << "与已有联系人重名,请重新输入。" << endl;  
   count--;  
   goto loop;  
}  
    }  
    tmp.SetTel();  
    tmp.SetAddr();  
    tmp.id = count;  
      
    per.push_back(tmp);  
  
  
    cout << "是否继续添加联系人 y/n :";  
    char ch;  
    cin >> ch;  
    if('y' == ch || 'Y' == ch)  
    {  
        goto loop;  
    }  
     
}  
  
  
void Info::show()  
{  
    vector<Info>::iterator it;  
    if(per.empty())  
    {  
        cout << "通讯录暂无联系人!" << endl;  
    }  
    else  
    {  
        for(it = per.begin(); it != per.end(); ++it)  
{  
   cout << "ID: " << it->GetId() << endl;  
   cout << "姓名:" << it->GetName() << endl;  
   cout << "电话:" << it->GetTel() << endl;  
   cout << "地址:" << it->GetAddr() << endl;  
}  
cout << "请按任意键退出" << endl;  
char ch;  
cin >> ch;  
    }  
}  
  
  
void Info::search()  
{  
    vector<Info>::iterator it;  
    if(per.empty())  
    {  
        cout << "通讯录暂无联系人!" << endl;  
    }  
    else  
    {  
    search_loop:  
int tp =  0; //查询方式选择位  
int num = 0; //查找的ID  
string tn; //查找的姓名  
int flag = 0; //查找成功与否标志位  
        cout << "查找方式:1.ID 2.姓名" << endl;  
        cin >> tp;  
        if(1 == tp)  
{  
   cout << "请输入查找的ID:";  
   cin >> num;  
            for(it = per.begin(); it != per.end(); ++it)  
   {  
       if(it->GetId() == num)  
{  
                    flag = 1;  
   cout << "你要找的联系人为:" <<endl;  
           cout << "ID: " << it->GetId() << endl;  
           cout << "姓名:" << it->GetName() << endl;  
           cout << "电话:" << it->GetTel() << endl;  
           cout << "地址:" << it->GetAddr() << endl;  
}  
   }  
}  
else if(2 == tp)  
{  
   cout << "请输入查找的姓名:";  
            cin >> tn;  
            for(it = per.begin(); it != per.end(); ++it)  
   {  
       if(!((it->GetName()).compare(tn)))  
{  
                    flag = 1;  
   cout << "你要找的联系人为:" <<endl;  
           cout << "ID: " << it->GetId() << endl;  
           cout << "姓名:" << it->GetName() << endl;  
           cout << "电话:" << it->GetTel() << endl;  
           cout << "地址:" << it->GetAddr() << endl;  
}  
   }  
}  
else  
{  
   cout << "查找方式选择错误,请重新选择。" << endl;  
   goto search_loop;  
}  
  
  
if(0 == flag)  
{  
   cout << "无找到此联系人" << endl;  
}  
else  
{  
   cout << "查找成功"  << endl;  
}  
cout << "请按任意键退出" << endl;  
char ch;  
cin >> ch;  
    }  
      
}  
  
  
void Info::delete_info()  
{  
    vector<Info>::iterator it;  
    if(per.empty())  
    {  
        cout << "通讯录暂无联系人!" << endl;  
    }  
    else  
    {  
    delete_loop:  
int tp =  0; //删除方式选择位  
int num = 0; //删除的ID  
string tn; //删除的姓名  
int flag = 0; //删除成功与否标志位  
        cout << "删除方式:1.ID 2.姓名" << endl;  
        cin >> tp;  
        if(1 == tp)  
{  
   cout << "请输入删除的ID:";  
   cin >> num;  
            for(it = per.begin(); it != per.end();)  
   {  
       if(it->GetId() == num)  
{  
                    flag = 1;  
   cout << "你要删除的联系人为:" <<endl;  
           cout << "ID: " << it->GetId() << endl;  
           cout << "姓名:" << it->GetName() << endl;  
           cout << "电话:" << it->GetTel() << endl;  
           cout << "地址:" << it->GetAddr() << endl;  
             
   cout << "确定删除此联系人吗?y/n : ";  
           char ch1;  
           cin >> ch1;  
           if (ch1 == 'y' || ch1 == 'Y')  
           {  
               it = per.erase(it);  
           }  
}  
else  
{  
   ++it;  
}  
   }  
}  
else if(2 == tp)  
{  
   cout << "请输入删除的姓名:";  
            cin >> tn;  
            for(it = per.begin(); it != per.end(); )  
   {  
       if(!((it->GetName()).compare(tn)))  
{  
                    flag = 1;  
   cout << "你要删除的联系人为:" <<endl;  
           cout << "ID: " << it->GetId() << endl;  
           cout << "姓名:" << it->GetName() << endl;  
           cout << "电话:" << it->GetTel() << endl;  
           cout << "地址:" << it->GetAddr() << endl;  
     
   cout << "确定删除此联系人吗?y/n : ";  
           char ch1;  
           cin >> ch1;  
           if (ch1 == 'y' || ch1 == 'Y')  
           {  
               it = per.erase(it);  
           }  
}  
else  
{  
   ++it;  
}  
   }  
}  
else  
{  
   cout << "删除方式选择错误,请重新选择。" << endl;  
   goto delete_loop;  
}  
  
  
if(0 == flag)  
{  
   cout << "没有找到此联系人" << endl;  
        }  
else  
{  
   cout << "删除成功" << endl;  
}  
cout << "请按任意键退出" << endl;  
char ch;  
cin >> ch;  
    }  
      
}  
void Info::modify()  
{  
    vector<Info>::iterator it;  
    if(per.empty())  
    {  
        cout << "通讯录暂无联系人!" << endl;  
    }  
    else  
    {  
    modify_loop:  
        string tn;  
int flag2 = 0;  
int flag = 0; //修改对象查找成功与否标志位  
        cout << "请输入你要编辑的人的姓名:" ;  
        cin >> tn;  
        for(it = per.begin(); it != per.end(); )  
{  
   if(!((it->GetName()).compare(tn)))  
            {  
       flag = 1;  
cout << "你要修改的联系人为:" <<endl;  
       cout << "ID: " << it->GetId() << endl;  
       cout << "姓名:" << it->GetName() << endl;  
       cout << "电话:" << it->GetTel() << endl;  
       cout << "地址:" << it->GetAddr() << endl;  
     
cout << "确定修改此联系人吗?y/n : ";  
       char ch1;  
       cin >> ch1;  
char ch2;  
       if (ch1 == 'y' || ch1 == 'Y')  
       {  
           cout << "你要修改的是:1.姓名 2.电话 3.地址:";  
   cin >> ch2;  
                    switch(ch2)  
   {  
       case '1':  
{  
                            it->SetName();  
   cout << "修改成功!该联系人信息改为:" << endl;  
                   cout << "ID: " << it->GetId() << endl;  
                   cout << "姓名:" << it->GetName() << endl;  
                   cout << "电话:" << it->GetTel() << endl;  
                   cout << "地址:" << it->GetAddr() << endl;  
   flag2 = 1;  
   break;  
}  
case '2':  
{  
   it->SetTel();  
   cout << "修改成功!该联系人信息改为:" << endl;  
                   cout << "ID: " << it->GetId() << endl;  
                   cout << "姓名:" << it->GetName() << endl;  
                   cout << "电话:" << it->GetTel() << endl;  
                   cout << "地址:" << it->GetAddr() << endl;  
   flag2 = 1;  
   break;  
}  
case '3':  
{  
   it->SetAddr();  
   cout << "修改成功!该联系人信息改为:" << endl;  
                   cout << "ID: " << it->GetId() << endl;  
                   cout << "姓名:" << it->GetName() << endl;  
                   cout << "电话:" << it->GetTel() << endl;  
                   cout << "地址:" << it->GetAddr() << endl;  
   flag2 = 1;  
   break;  
}  
default :  
{  
   cout << "指令输入错误!" << endl;  
   break;  
}  
   }  
       }  
else  
{  
   break;  
}  
            }  
            else  
   {  
++it;  
            }  
}  
if(0 == flag)  
{  
   cout << "没有找到此联系人" << endl;  
}  
if(1 == flag2)  
{  
   cout << "修改成功!" << endl;  
}      
cout << "请按任意键退出" << endl;  
char ch3;  
cin >> ch3;  
    }      
}  
  
  
  
  
void Info::exit_info()  
{  
    cout << "确定退出此通讯录吗?y/n: " ;  
    char ch1;  
    cin >> ch1;  
    if (ch1 == 'y' || ch1 == 'Y')  
    {  
        exit(1);  
    }  
  
  
}  
  
  
void Info::choose()  
{  
    char action;  
    Info tmp;  
    cout << "请输入你要实现的功能(0-4):" ;  
    cin >> action;  
  
  
    switch(action)  
    {  
        case '1':  
{  
   tmp.insert();  
   tmp.interface();  
            choose();  
   break;   
}  
case '2':  
{  
   tmp.show();  
   tmp.interface();  
   choose();  
   break;  
}  
case '3':  
{  
            tmp.delete_info();  
   tmp.interface();  
   choose();  
}  
case '4':  
{  
   tmp.search();  
   tmp.interface();  
   choose();  
   break;  
}  
case '5':  
{  
   tmp.modify();  
   tmp.interface();  
   choose();  
   break;  
}  
case '6':  
{  
   tmp.exit_info();  
   break;  
}  
default:  
{  
   cout << "输入指令有误,请重新输入!" << endl;  
   choose();  
   break;  
}  
    }  
}  
  
  
  
  
void Info::interface()  
{  
    system("clear");  
  
  
    printf("\n");  
    printf("\n");  
    printf("          |***********************************************|\n");  
    printf("          |*          多 功 能 电 子 通 讯 录            *|\n");  
    printf("          |*                                             *|\n");  
    printf("          |*                              版本号:V_1.0.0*|\n");  
    printf("          |***********************************************|\n");  
    printf("          |*                                             *|\n");  
    printf("          |*      功能选择:   1. 添加好友信息            *|\n");  
    printf("          |*                  2. 查看好友信息            *|\n");  
    printf("          |*                  3. 删除好友信息            *|\n");  
    printf("          |*                  4. 搜索好友信息            *|\n");  
    printf("          |*                  5. 修改好友信息            *|\n");  
    printf("          |***********************************************|\n");  
    printf("          |*      请输入你想要实现的功能:               *|\n");  
    printf("          |*                                             *|\n");  
    printf("          |*    1添加 2查看 3删除 4搜索 5修改 6退出      *|\n");  
    printf("          |***********************************************|\n");  
  
  
}

main.cpp
[cpp] view plain copy print?
#include "info.h"  
  
  
int main()  
{  
    Info s;  
    s.interface();  
    s.choose();  
  
  
    return 0;  

========

C++通讯录

http://www.cnblogs.com/orangebook/p/3514452.html
C++通讯录1.0

历时一天,终于把通讯录写好了。

项目要求:

复制代码
编写一个通讯录管理程序。
有一已存在的通讯录文件,数据内容为各联系人信息。
每个联系人信息的组成部分为:
    姓名、电话号码和住址
                            等个人基本信息,
                            并假设已有两个联系人。
                            并假设已有两个联系人。

(1)输出联系人:打开通讯录文件并显示其中的数据;
(2)添加联系人;
(3)查找联系人:利用字符串函数,按“姓名”查找;
(4)修改联系人:可以修改该联系人的任一个信息;
(5)保存到文件:将操作结果保存到已存在的通讯录文件;
(6)用子函数实现各个子功能。
复制代码

通讯录的

核心类:VAdressBook

数据库:SQLite

编程语言:C++

常用函数:sprintf

常用SQLiteAPI函数:sqlite3_exec

还存在技术问题:重命问题(在翻译完SQLite高级教程后可解决)

未使用UI(计划使用wxWidgets或Java的图形库 或 SDL)

还存在的程序设计问题:使用了简单工厂设计模式,扩展性不佳,维护性不佳。(重构代码)

现在的皱形效果图为:

复制代码
  1 #include"sqlite3.h"
  2 #include<cstdlib>
  3 #include<cstdio>
  4 #include<iostream>
  5 #include <cstdio>
  6 
  7 using namespace std;
  8 /*
  9 格式化输出命令
 10 sqlite>.header on
 11 sqlite>.mode column
 12 sqlite>.timer on
 13 */
 14 
 15 static int callback(void *data, int argc, char **argv, char **azColName){
 16    int i;
 17    for(i=0; i<argc; i++){
 18       printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
 19    }
 20    printf("\n");
 21    return 0;
 22 }
 23 
 24 class VAdressBook
 25 {
 26     public:
 27         virtual bool Display_ContactPerson()=0;
 28         virtual bool Add_ContactPerson()=0;
 29         virtual bool Find_ContactPerson()=0;
 30         virtual bool Change_ContactPerson()=0;
 31         //virtual bool SaveToText_ContactPerson()=0;
 32         //virtual VAdressBook(){};
 33 };
 34 
 35 class AdressBook :public VAdressBook
 36 {
 37     private:
 38         sqlite3 *db;
 39         int rc;
 40         char *ErrorMsg;
 41         string sql;
 42         string m_strName;
 43         string m_strAdress;
 44         int m_iTelNum;
 45 
 46     public:
 47         AdressBook();
 48         bool Display_ContactPerson();
 49         bool Add_ContactPerson();
 50         bool Find_ContactPerson();
 51         bool Change_ContactPerson();
 52         //bool SaveToText_ContactPerson();
 53         virtual ~AdressBook()
 54         {
 55             sqlite3_close(db);
 56         }
 57 };
 58 AdressBook::AdressBook()
 59 {
 60     ErrorMsg=0;
 61     rc = sqlite3_open("adressbook.db", &db);
 62     if( rc )
 63     {
 64       fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
 65       exit(0);
 66     }
 67     else
 68     {
 69       cout<<"Opened database successfully\n"<<endl;;
 70     }
 71      /*** Create SQL statement ***/
 72      /***    姓名、电话号码和住址    ***/
 73     sql =     "CREATE TABLE adress("  \
 74             "NAME           TEXT    NOT NULL," \
 75             "TELNUM         INT     NOT NULL," \
 76             "ADRESS        CHAR(100) );";
 77 
 78    /* Execute SQL statement */
 79     rc = sqlite3_exec(db, sql.c_str(), 0, 0, &ErrorMsg);
 80     if( rc != SQLITE_OK )
 81     {
 82         fprintf(stderr, "SQL error: %s\n", ErrorMsg);
 83     }
 84     else
 85     {
 86       cout<<"Table created successfully\n"<<endl;
 87     }
 88 
 89    /* Create SQL statement */
 90    sql = "INSERT INTO adress (NAME,TELNUM,ADRESS)" \
 91          "VALUES ('WANGCHENG',18061623491,'081101-3-4');" \
 92          "INSERT INTO adress (NAME,TELNUM,ADRESS)" \
 93          "VALUES ('LIYUAN',18061623492,'081101-3-3');";
 94 
 95    /* Execute SQL statement */
 96    rc = sqlite3_exec(db, sql.c_str(),0, 0, &ErrorMsg);
 97    if( rc != SQLITE_OK )
 98    {
 99       fprintf(stderr, "SQL error: %s\n", ErrorMsg);
100       sqlite3_free(ErrorMsg);
101    }else
102    {
103       cout<<"Records created successfully\n"<<endl;;
104    }
105 }
106 
107 bool AdressBook::Display_ContactPerson()
108 {
109 
110        /* Create SQL statement */
111    sql = "SELECT * FROM adress";
112    /* Execute SQL statement */
113    rc = sqlite3_exec(db, sql.c_str(), callback, 0, &ErrorMsg);
114    if( rc != SQLITE_OK )
115    {
116       fprintf(stderr, "SQL error: %s\n", ErrorMsg);
117       sqlite3_free(ErrorMsg);
118       return false;
119    }
120    else
121    {
122       cout<<"Operation done successfully\n"<<endl;;
123       return true;
124    }
125 }
126 bool AdressBook::Add_ContactPerson()
127 {
128 
129     cout<<"please input Name,Contact phone number,Adress"<<endl;
130     cin>>m_strName>>m_iTelNum>>m_strAdress;
131     sprintf((char *)sql.data(),"INSERT INTO adress VALUES(\'%s\',%d,\'%s\');",(const char *)m_strName.c_str(),m_iTelNum,(const char *)m_strAdress.c_str());
132 
133     rc = sqlite3_exec(db, sql.c_str(),0, 0, &ErrorMsg);
134     if( rc != SQLITE_OK )
135     {
136       fprintf(stderr, "SQL error: %s\n", ErrorMsg);
137       sqlite3_free(ErrorMsg);
138       return false;
139     }else
140     {
141       cout<<"Records created successfully\n"<<endl;
142       return true;
143     }
144 }
145 
146 bool AdressBook::Find_ContactPerson()
147 {
148     cout<<"please input Name you want find"<<endl;
149     cin>>m_strName;
150     sprintf((char *)sql.data(),"SELECT * FROM adress WHERE NAME Like \'%%%s%%\';",(const char *)m_strName.c_str());
151     rc=sqlite3_exec(db,sql.c_str(),callback,0,&ErrorMsg);
152     if( rc != SQLITE_OK )
153     {
154       fprintf(stderr, "SQL error: %s\n", ErrorMsg);
155       sqlite3_free(ErrorMsg);
156       return false;
157     }
158     else
159     {
160       cout<<"Operation done successfully\n"<<endl;
161       return true;
162     }
163 }
164 bool AdressBook::Change_ContactPerson()
165 {
166     int flag=0;
167     string strTemp;
168     cout<<"please input name to To change Information"<<endl;
169     cin>>m_strName;
170     do
171     {
172         cout<<"please input 一个数字:\n"\
173            "1:Name\n" \
174            "2:TelNum\n"\
175            "3:Adress"<<endl;
176         cin>>flag;
177     }
178     while(1>flag||flag>3);
179 
180     switch(flag)
181     {
182         case 1:
183         cin>>strTemp;
184         sprintf((char *)sql.data(),"UPDATE adress set NAME=\'%s\' WHERE NAME LIKE \'%%%s%%\';",(const char *)strTemp.c_str(),(const char *)m_strName.c_str());
185         break;
186         case 2:
187         cin>>m_iTelNum;
188         sprintf((char *)sql.data(),"UPDATE adress set TELNUM=\'%d\' WHERE NAME LIKE \'%%%s%%\';",m_iTelNum,(const char *)m_strName.c_str());
189         break;
190         case 3:
191         cin>>strTemp;
192         sprintf((char *)sql.data(),"UPDATE adress set ADRESS=\'%s\' WHERE NAME LIKE \'%%%s%%\';",(const char *)strTemp.c_str(),(const char *)m_strName.c_str());
193         break;
194         default:cout<<"input error,please restart input"<<endl;
195 
196     }
197     rc=sqlite3_exec(db,sql.c_str(),callback,0,&ErrorMsg);
198     if( rc != SQLITE_OK )
199     {
200       fprintf(stderr, "SQL error: %s\n", ErrorMsg);
201       sqlite3_free(ErrorMsg);
202       return false;
203     }
204     else
205     {
206       cout<<"Operation done successfully\n"<<endl;
207       return true;
208     }
209     return true;
210 
211 }
复制代码

复制代码
 1 #include "VAdressBook.h"
 2 
 3 int main()
 4 {
 5     AdressBook test;
 6     int userchoice;
 7     while(true)
 8     {
 9     do{
10         cout<<"****************WELCOME USE FDA 通录讯***************"<<endl;
11         cout<<"*                  1. Display     All               *"<<endl;
12         cout<<"*                  2. Add     Contact               *"<<endl;
13         cout<<"*                  3. Change  Contact               *"<<endl;
14         cout<<"*                  4  Find    Contact               *"<<endl;
15         cout<<"*****************************************************"<<endl;
16         cin>>userchoice;
17         }while(userchoice<1||userchoice>4);
18         switch(userchoice)
19         {
20             case 1:test.Display_ContactPerson();
21             break;
22             case 2:test.Add_ContactPerson();
23             break;
24             case 3:test.Change_ContactPerson();
25             break;
26             case 4:test.Find_ContactPerson();
27             break;
28         }
29     }
30     return 0;
31 }
复制代码

想改进这个项目的,请持续关注FDA—orangebook.
========

c/c++通讯录

http://blog.csdn.net/rushierer/article/details/54633233
第二个程序是C语言实训的程序
其实和第一个学生成绩管理系统程序差不多,只是多了文件功能!
[cpp] view plain copy
<span style="color: rgb(51, 51, 51); font-family: "Source Code Pro", monospace; font-size: 14px; white-space: pre; background-color: rgba(128, 128, 128, 0.0470588);">Copyright ©Rushierer</span>  
[cpp] view plain copy
#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>  
#define N 60  
typedef struct s_teleBook  
{  
    int number;         /*编号*/  
    char name[15];      /*姓名*/  
    char phone[12];     /*手机*/  
    char qq[15];        /*QQ号*/  
}TELE;  
typedef struct date  
{  
    int infoCount;      /*统计数据个数*/  
}DATE;  
  
void showMenu();                                      /*显示菜单*/  
void mainMenu(TELE myBook[],int n,DATE date[]);       /*显示首页*/  
void showdate(TELE myBook[],int n,DATE date[]);       /*只显示数据*/  
void input(TELE myBook[],int n,DATE date[]);          /*从键盘输入数据*/  
void searchR(TELE myBook[],int n,DATE date[]);        /*查询信息*/  
void searchByNumber(TELE myBook[],int n,DATE date[]); /*按编号查询信息*/  
void searchByName(TELE myBook[],int n,DATE date[]);   /*按名字查询信息*/  
void deleteR(TELE myBook[],int n,DATE date[]);        /*删除信息*/  
void insertR(TELE myBook[],int n,DATE date[]);        /*插入信息*/  
void modify(TELE myBook[],int n,DATE date[]);         /*修改信息*/  
void sortR(TELE myBook[],int n,DATE date[]);          /*排序信息*/  
void sortByName(TELE myBook[],int n,DATE date[]);     /*按名字排序*/  
void sortByNumber(TELE myBook[],int n,DATE date[]);   /*按编号排序*/  
void save(TELE myBook[],int n,DATE date[]);           /*保存数据到文件*/  
void display(TELE myBook[],int n,DATE date[]);        /*显示数据*/  
void read(TELE myBook[],int n,DATE date[]);           /*从文件读取数据*/  
  
int main()  
{  
    int choice;  
    TELE myBook[N];  
    DATE date[1];  
    showMenu();  
    printf("\n");  
    printf("欢迎使用通讯录!\n");  
    printf("\n");  
    printf("首次使用通讯录,请输入要添加联系人的个数:");  
    scanf("%d",&date[0].infoCount);  
    printf("\n");  
    printf("1进行录入数据  0退出:");  
    scanf("%d",&choice);  
    switch(choice)  
    {  
        case 1:  
            system("cls");  
            input(myBook,date[0].infoCount,date);break;  
        case 0:  
            exit(0);break;  
    }  
    return 0;  
  
}  
  
  
/*显示选项Menu*/  
void showMenu()  
{  
    printf("                  通讯录管理系统             \n");  
    printf("  *******************************************\n");  
    printf("  *                                         *\n");  
    printf("  *  1 input   record     2 search  record  *\n");  
    printf("  *  3 delete  record     4 insert  record  *\n");  
    printf("  *  5 modify  record     6 sort    record  *\n");  
    printf("  *  7 save    record     8 display record  *\n");  
    printf("  *  9 read    record     0 quit    system  *\n");  
    printf("  *                                         *\n");  
    printf("  *******************************************\n");  
}  
  
  
/*显示主菜单*/  
void mainMenu(TELE myBook[],int n,DATE date[])  
{  
    int choice;  
    showMenu();  
    printf("请输入选项(0~9):");  
    scanf("%d",&choice);  
    switch(choice)  
    {  
        case 1:  
            system("cls");  
            input(myBook,n,date);break;  
        case 2:  
            system("cls");  
            searchR(myBook,n,date);break;  
        case 3:  
            system("cls");  
            deleteR(myBook,n,date);break;  
        case 4:  
            system("cls");  
            insertR(myBook,n,date);break;  
        case 5:  
            system("cls");  
            modify(myBook,n,date);break;  
        case 6:  
            system("cls");  
            sortR(myBook,n,date);break;  
        case 7:  
            system("cls");  
            save(myBook,n,date);break;  
        case 8:  
            system("cls");  
            display(myBook,n,date);break;  
        case 9:  
            system("cls");  
            read(myBook,n,date);break;  
        case 0:  
            exit(0);break;  
  
    }  
}  
  
  
/*从键盘输入联系人信息*/  
void input(TELE myBook[],int n,DATE date[])  
{  
    int j,i;  
    printf("                   Input record                      \n");  
    printf("*****************************************************\n");  
    printf("\n");  
    printf("数据录入格式提示:\n");  
    printf("1.数据内容:编号、姓名、手机号码、QQ号\n");  
    printf("2.数据间以空格做间隔,最后回车录入数据结束!\n");  
    printf("\n");  
    for(i=0;i<n;i++)  
    {  
        printf("请输入第%d个联系人的信息:",i+1);  
        scanf(" %d",&myBook[i].number);  
        scanf("%s",myBook[i].name);  
        scanf("%s",myBook[i].phone);  
        scanf("%s",myBook[i].qq);  
    }  
    printf("\n");  
    printf("数据录入完成!\n");  
    printf("\n");  
    printf("1显示录入的信息  2返回主菜单  0退出:");  
    scanf("%d",&j);  
    if(j==1)  
    {  
        printf("\n");  
        display(myBook,n,date);  
    }  
    else if(j==2)  
    {  
        system("cls");  
        mainMenu(myBook,n,date);  
    }  
    else  
        exit(0);  
}  
  
  
/*显示所有信息*/  
void display(TELE myBook[],int n,DATE date[])  
{  
    int i,j;  
    printf("所有信息:\n");  
    printf("\n");  
    printf("编号   姓名          电话号码        QQ号    \n");  
    for(i=0;i<n;i++)  
    {  
        printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,  
                                    myBook[i].name,  
                                    myBook[i].phone,  
                                    myBook[i].qq);  
  
    }  
    printf("\n");  
    printf("1返回主菜单  0退出:");  
    scanf("%d",&j);  
    if(j==1)  
    {  
        system("cls");  
        mainMenu(myBook,n,date);  
    }  
    else  
        exit(0);  
  
}  
  
/*只显示数据*/  
void showdate(TELE myBook[],int n,DATE date[])  
{  
    int i;  
    printf("已录入的信息:\n");  
    printf("\n");  
    printf("编号   姓名          电话号码        QQ号    \n");  
    for(i=0;i<n;i++)  
    {  
        printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,  
                                   myBook[i].name,  
                                   myBook[i].phone,  
                                   myBook[i].qq);  
  
    }  
}  
  
/*查找数据*/  
void searchR(TELE myBook[],int n,DATE date[])  
{  
    int k;  
    printf("                   Search record                     \n");  
    printf("*****************************************************\n");  
    printf("\n");  
    printf("查找方式:1.按编号查找 2.按姓名查找\n");  
    printf("请选择查找方式(1/2):");  
    scanf("%d",&k);  
    printf("\n");  
    if(k==1)  
    {  
        searchByNumber(myBook,n,date);  
    }  
    else  
    {  
        searchByName(myBook,n,date);  
    }  
}  
  
  
/*按编号查询*/  
void searchByNumber(TELE myBook[],int n,DATE date[])  
{  
    int i,j,k=0;  
    int number1;  
    printf("请输入想查找的编号:");  
    scanf("%d",&number1);  
    printf("\n");  
    printf("查找结果:");  
    printf("\n");  
    for(i=0;i<n;i++)  
    {  
        if(myBook[i].number==number1)  
        {  
            printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,  
                                        myBook[i].name,  
                                        myBook[i].phone,  
                                        myBook[i].qq);  
  
            k+=1;  
        }  
    }  
    if(k==0)  
        printf("输入的编号不存在或输入格式不对!\n");  
    printf("\n");  
    printf("1重新查询  2返回主菜单  0退出:");  
    scanf("%d",&j);  
    switch(j)  
    {  
        case 1:  
            system("cls");  
            searchR(myBook,n,date);break;  
        case 2:  
            system("cls");  
            mainMenu(myBook,n,date);break;  
        case 0:  
            exit(0);break;  
    }  
}  
  
  
/*按姓名查询*/  
void searchByName(TELE myBook[],int n,DATE date[])  
{  
    int i,j,k=0;  
    char name1[15];  
    printf("请输入想查找的姓名:");  
    scanf("%s",name1);  
    printf("\n");  
    printf("查找结果:");  
    printf("\n");  
    for(i=0;i<n;i++)  
    {  
        if(strcmp(myBook[i].name,name1)==0)  
        {  
            printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,  
                                        myBook[i].name,  
                                        myBook[i].phone,  
                                        myBook[i].qq);  
  
            k+=1;  
        }  
    }  
    if(k==0)  
        printf("输入的姓名不存在或输入格式不对!\n");  
    printf("\n");  
    printf("1重新查询  2返回主菜单  0退出:");  
    scanf("%d",&j);  
    switch(j)  
    {  
        case 1:  
            system("cls");  
            searchR(myBook,n,date);break;  
        case 2:  
            system("cls");  
            mainMenu(myBook,n,date);break;  
        case 0:  
            exit(0);break;  
    }  
}  
  
/*删除信息*/  
void deleteR(TELE myBook[],int n,DATE date[])  
{  
    int i,k,j;  
    printf("                   Delete record                     \n");  
    printf("*****************************************************\n");  
    printf("\n");  
    showdate(myBook,n,date);  
    printf("已经录入%d个联系人的信息,你想删除第几联系人个的信息:",n);  
    scanf("%d",&k);  
    i=k-1;  
    for(;i<=n-2;i++)  
    {  
        strcpy(myBook[i].name,myBook[i+1].name);  
        strcpy(myBook[i].phone,myBook[i+1].phone);  
        strcpy(myBook[i].qq,myBook[i+1].qq);  
        myBook[i].number=myBook[i+1].number;  
    }  
    printf("\n");  
    printf("已成功删除!\n");  
    date[0].infoCount=date[0].infoCount-1;  
    n=n-1;  
    printf("\n");  
    printf("1显示修改后的信息  2返回主菜单  0退出:");  
    scanf("%d",&j);  
    switch(j)  
    {  
       case 1:  
            printf("\n");  
            display(myBook,n,date);break;  
        case 2:  
            system("cls");  
            mainMenu(myBook,n,date);break;  
        case 0:  
            exit(0);break;  
    }  
}  
  
/*插入信息*/  
void insertR(TELE myBook[],int n,DATE date[])  
{  
    int i,k,j;  
    int number;  
    char name[15];      /*姓名*/  
    char phone[12];     /*电话*/  
    char qq[15];        /*QQ号*/  
    printf("                   Insert record                     \n");  
    printf("*****************************************************\n");  
    printf("\n");  
    showdate(myBook,n,date);  
    printf("\n");  
    printf("你想在第几个数据之后插入数据:");  
    scanf("%d",&k);  
    if(k>n||k<=0)  
    {  
        printf("\n");  
        printf("输入错误!\n");  
        printf("请重新输入你想在第几个数据之后插入数据:");  
        scanf("%d",&i);  
        k=i;  
    }  
    printf("\n");  
    printf("请输入插入的信息:");  
    scanf("%d",&number);  
    scanf("%s",name);  
    scanf("%s",phone);  
    scanf("%s",qq);  
    for(i=n;k+1<=i;i--);  
    {  
        strcpy(myBook[i].name,myBook[i-1].name);  
        strcpy(myBook[i].phone,myBook[i-1].phone);  
        strcpy(myBook[i].qq,myBook[i-1].qq);  
        myBook[i].number=myBook[i-1].number;  
    }  
    strcpy(myBook[k].name,name);  
    strcpy(myBook[k].phone,phone);  
    strcpy(myBook[k].qq,qq);  
    myBook[k].number=number;  
    date[0].infoCount=date[0].infoCount+1;  
    n=n+1;  
    printf("\n");  
    printf("插入完成!\n");  
    printf("\n");  
    printf("1显示修改后的信息输入  2返回主菜单  0退出:");  
    scanf("%d",&j);  
    switch(j)  
    {  
       case 1:  
            printf("\n");  
            display(myBook,n,date);break;  
        case 2:  
            system("cls");  
            mainMenu(myBook,n,date);break;  
        case 0:  
            exit(0);break;  
    }  
  
}  
  
  
/*修改信息*/  
void modify(TELE myBook[],int n,DATE date[])  
{  
    int i,k,j;  
    int number;  
    char name[15];      /*姓名*/  
    char phone[12];     /*电话*/  
    char qq[15];        /*QQ号*/  
    printf("                   Modify record                     \n");  
    printf("*****************************************************\n");  
    printf("\n");  
    showdate(myBook,n,date);  
    printf("\n");  
    printf("已经录入%d个联系人的信息,你想修改第几个联系人的记录:",n);  
    scanf("%d",&k);  
    if(k>n||k<=0)  
    {  
        printf("\n");  
        printf("输入错误,无这条记录!\n");  
        printf("请重新输入你想修改第几个联系人的记录:");  
        scanf("%d",&i);  
        k=i;  
    }  
    printf("\n");  
    printf("请输入修改后的信息:");  
    scanf("%d",&number);  
    scanf("%s",name);  
    scanf("%s",phone);  
    scanf("%s",qq);  
    strcpy(myBook[k-1].name,name);  
    strcpy(myBook[k-1].phone,phone);  
    strcpy(myBook[k-1].qq,qq);  
    myBook[k-1].number=number;  
    printf("\n");  
    printf("修改完成!\n");  
    printf("\n");  
    printf("1显示修改后的信息  2返回主菜单  0退出:");  
    scanf("%d",&j);  
    switch(j)  
    {  
       case 1:  
            printf("\n");  
            display(myBook,n,date);break;  
        case 2:  
            system("cls");  
            mainMenu(myBook,n,date);break;  
        case 0:  
            exit(0);break;  
    }  
}  
  
  
/*排序信息*/  
void sortR(TELE myBook[],int n,DATE date[])  
{  
    int k;  
    printf("                     Sort record                     \n");  
    printf("*****************************************************\n");  
    printf("\n");  
    printf("排序方式:1.按编号排序  2.按姓名排序\n");  
    printf("请选择排序方式(1/2):");  
    scanf("%d",&k);  
    printf("\n");  
    if(k==1)  
    {  
        sortByNumber(myBook,n,date);  
    }  
    else  
    {  
        sortByName(myBook,n,date);  
    }  
}  
  
  
/*按姓名排序信息*/  
void sortByName(TELE myBook[],int n,DATE date[])  
{  
    int i,j;  
    TELE temp;  
    for(j=1;j<n;j++)  
        for(i=0;i<n-j;i++)  
        if(strcmp(myBook[i].name,myBook[i+1].name)>0)  
        {  
            temp=myBook[i];  
            myBook[i]=myBook[i+1];  
            myBook[i+1]=temp;  
        }  
    printf("排序后的信息:\n");  
    printf("\n");  
    printf(" 姓名        编号    电话号码        QQ号    \n");  
    for(i=0;i<n;i++)  
    {  
        printf("%-15s%-6d%-15s%-15s\n",myBook[i].name,  
                                       myBook[i].number,  
                                       myBook[i].phone,  
                                       myBook[i].qq);  
    }  
    printf("\n");  
    printf("1重新排序  2返回主菜单  0退出:");  
    scanf("%d",&j);  
    switch(j)  
    {  
        case 1:  
            system("cls");  
            sortR(myBook,n,date);break;  
        case 2:  
            system("cls");  
            mainMenu(myBook,n,date);break;  
        case 0:  
            exit(0);break;  
    }  
}  
  
/*按编号排序信息*/  
void sortByNumber(TELE myBook[],int n,DATE date[])  
{  
    int i,j;  
    TELE temp;  
    for(j=1;j<n;j++)  
        for(i=0;i<n-j;i++)  
        if(myBook[i].number>myBook[i+1].number)  
        {  
            temp=myBooki[];  
            myBook[i]=myBook[i+1];  
            myBook[i+1]=temp;  
        }  
    printf("排序后的信息:\n");  
    printf("\n");  
    printf("编号   姓名          电话号码        QQ号    \n");  
    for(i=0;i<n;i++)  
    {  
        printf("%-6d%-15s%-15s%-15s\n",myBook[i].number,  
                                       myBook[i].name,  
                                       myBook[i].phone,  
                                       myBook[i].qq);  
    }  
    printf("\n");  
    printf("1重新排序  2返回主菜单  0退出:");  
    scanf("%d",&j);  
    switch(j)  
    {  
        case 1:  
            system("cls");  
            sortR(myBook,n,date);break;  
        case 2:  
            system("cls");  
            mainMenu(myBook,n,date);break;  
        case 0:  
            exit(0);break;  
    }  
}  
  
  
/*保存信息*/  
void save(TELE myBook[],int n,DATE date[])  
{  
    FILE *fp;  
    int i,j;  
    TELE temp;  
    printf("                     Save record                     \n");  
    printf("*****************************************************\n");  
    if((fp=fopen("teleBook.txt","w"))==NULL)        /*以写方式打开文本文件*/  
    {  
        printf("Failure to open teleBook.txt!\n");  
        printf("1返回主菜单  0退出:");  
        scanf("%d",&j);  
        if(j==1)  
        {  
            system("cls");  
            mainMenu(myBook,n,date);  
        }  
        else  
            exit(0);  
    }  
    for(j=1;j<n;j++)  //对全部信息按序号排序后再保存到文件  
        for(i=0;i<n-j;i++)  
        if(myBook[i].number>myBook[i+1].number)  
        {  
            temp=myBook[i];  
            myBook[i]=myBook[i+1];  
            myBook[i+1]=temp;  
        }  
    for(i=0;i<n;i++)  
    {  
        fprintf(fp," %-6d%-15s%-15s%-15s",myBook[i].number,  
                                       myBook[i].name,  
                                       myBook[i].phone,  
                                       myBook[i].qq);  
        fprintf(fp,"\n");  
    }  
    fclose(fp);  
    printf("\n");  
    printf("保存通讯录信息成功!\n");  
    printf("\n");  
    printf("可在文件目录查看teleBook.txt文件!\n");  
    printf("\n");  
    printf("1返回主菜单  0退出:");  
    scanf("%d",&j);  
    if(j==1)  
    {  
        system("cls");  
        mainMenu(myBook,n,date);  
    }  
    else  
        exit(0);  
}  
  
  
/*从文件读取数据*/  
void read(TELE myBook[],int n,DATE date[])  
{  
    FILE *fp;  
    int i,j;  
    TELE myBook1[N];  
    printf("                      Read record                    \n");  
    printf("*****************************************************\n");  
    printf("\n");  
    printf("读取信息结果:\n");  
    printf("\n");  
    if((fp=fopen("teleBook.txt","r"))==NULL)        /*以读方式打开文本文件*/  
    {  
        printf("Failure to open teleBook.txt!\n");  
        printf("可能没有保存数据,可以返回主菜单先保存数据!\n");  
        printf("1返回主菜单  0退出:");  
        scanf("%d",&j);  
        if(j==1)  
        {  
            system("cls");  
            mainMenu(myBook,n,date);  
        }  
        else  
            exit(0);  
    }  
    for(i=0;!feof(fp);i++)              /*若未读到文件末尾,则继续读*/  
    {  
        fscanf(fp," %6d",&myBook1[i].number);  
        fscanf(fp,"%15s",myBook1[i].name);  
        fscanf(fp,"%15s",myBook1[i].phone);  
        fscanf(fp,"%15s",myBook1[i].qq);  
    }  
    fclose(fp);  
    printf("编号   姓名          电话号码        QQ号    \n");  
    for(i=0;i<n;i++)  
    {  
        printf("%-6d%-15s%-15s%-15s",myBook1[i].number,  
                                   myBook1[i].name,  
                                   myBook1[i].phone,  
                                   myBook1[i].qq);  
        printf("\n");  
    }  
    printf("\n");  
    printf("读取通讯录文件信息成功!\n");  
    printf("\n");  
    printf("1返回主菜单  0退出:");  
    scanf("%d",&j);  
    if(j==1)  
    {  
        system("cls");  
        mainMenu(myBook,n,date);  
    }  
    else  
        exit(0);  

========

C++ 通讯录学习总结相关推荐

  1. Android 通讯录学习笔记之——目标:调用系统通讯录的编辑功能

    资料来源:http://www.eoeandroid.com/thread-37271-1-1.html 代码功能:调用系统自带的编辑联系人功能 代码片段 // 如下用法在ANADOIR 2.3.6上 ...

  2. ui进阶第三天,私人通讯录的创建(元宵节快乐)

    1.演示私人通讯录 • 学习目标:控制器跳转,控制器之间传值,数据存储 2.项目演示:(4个界面, 交给4个控制器管理, 每个界面一个控制器.) 0> 先搭建项目的界面.(使用自动布局搭建界面) ...

  3. [学习笔记] Cordova+AmazeUI+React 做个通讯录 - 单页应用 (With Router)

    [学习笔记] Cordova+AmazeUI+React 做个通讯录 系列文章 目录 准备 联系人列表(1) 联系人列表(2) 联系人详情 单页应用 (With Router) 使用 SQLite 传 ...

  4. [学习笔记] Cordova+AmazeUI+React 做个通讯录 - 使用 SQLite

    [学习笔记] Cordova+AmazeUI+React 做个通讯录 系列文章 目录 准备 联系人列表(1) 联系人列表(2) 联系人详情 单页应用 (With Router) 使用 SQLite 传 ...

  5. C++ MFC 学习笔记+小型通讯录系统实现

    MFC 最详细入门教程 [MFC常用函数总结](https://www.cnblogs.com/jiu0821/p/4606639.html) [C++ & MFC]https://www.c ...

  6. Auto.js学习笔记2:真机连接vscode开发工具进行调试,自动开启微信app,自动切换通讯录和微信界面

    实战代码演示启动微信并切换微信和通讯录界面 申明本人使用的autojs是4.1.1版本 1. 安装autojsapp:4.1.1版本 这个不用多说,找到app安装到手机上 启动autojs的app,开 ...

  7. Dorado学习- 企业通讯录初级教程理论部分笔记

    Dorado学习资料: Dorado官方教程 Dorado开发问答-官网 Dorado入门教程 Dorado7实战-企业通讯录(初级 本文为Dorado7实战-企业通讯录(初级)笔记 更新Dorado ...

  8. 学习使用php获取企业微信通讯录管理接口代码

    学习企业微信接口开发之通讯录管理接口 登陆企业微信 具体代码 登陆企业微信 点击管理工具 如下图: 选择通讯录同步 点击开启api接口同步,进入配置页面 获取到对应的Secret,点击查看 点击发送, ...

  9. 学习爬虫的第一天(公司内部oa通讯录初爬)

    用了requests和BeautifulSoup import requests from bs4 import BeautifulSoup import re#首先通过chrome获得headers ...

最新文章

  1. HDU2594 KMP next数组的应用
  2. 数组中只出现一次的数字
  3. 木马——本质就是cs socket远程控制,反弹木马是作为c端向外发起网络请求
  4. ubuntu-10.04硬盘安装挫折略记
  5. Android Settings中显示自定义dialog
  6. HttpClient 学习整理
  7. 如何使用两个堆栈实现队列_使用两个队列实现堆栈
  8. 【转】SharePoint 2010 Search Service -- 管理中心配置
  9. tensorflow tfrecoder read write
  10. python 数据结构转换层_python – 具有Maxpooling1D和channel_first的Keras模型
  11. 多特蒙德主题本地个人任务清单小demo,你值得尝试!
  12. java中的深复制和浅复制
  13. Could not mount the media/drive ‘VBoxGuestAdditions.iso‘解决方案
  14. c语言中竖线的作用,竖线符号
  15. 博途wincc 与 sql 连接操作(博途V14 wincc advanced)
  16. 故障:PDF 文件打印失败
  17. qq企业邮箱创建过程
  18. Ext cookies设置、获取和清除
  19. 查了一下平板电视的价格行情
  20. Unity3D-iOS创建本地视频

热门文章

  1. mybatis执行查询的所有分析和创建代理对象的分析
  2. 用python pandas按块读取超大csv/txt
  3. c# winform实现2048游戏
  4. C++——拷贝构造函数
  5. poj3258 River Hopscotch (二分搜索,考虑最大值最小问题)
  6. 高精度数取余(C\C++)
  7. 卷积、相关(matlab)
  8. android如何使用xml资源文件,Android-使用xml文件资源定义菜单
  9. Java8 Map中新增的方法使用总结
  10. ArrayListLinkedList 性能比较