2021-06-25

C++课程设计通讯录管理系统(含课程设计报告)

本代码就一个文件,对于初学者来说比较适用,不含STL等知识
`#include
#include
#include
#include
using namespace std;
//创建手机和手机卡文本文件时,根据具体情境创建,如创建在D盘中“d://Phone.txt",ios::in
//手机联系人类*
class Phone
{
protected:
string name,telePhone;
public:
Phone(string n1,string t1):name(n1),telePhone(t1) {} //带默认值的构造函数
Phone() {} //无参 构造函数
string Phone_Get_name()
{
return name;
}
string Phone_Get_telePhone()
{
return telePhone;
}

void Phone_set(string n1,string t1)//赋 值
{
    name=n1;
    telePhone=t1;
}
void Phone_modify()//修改
{
    int i;
    string n,t;
    cout<<"请选择要修改的内容: 姓名:1    电话号码:2     姓名和电话号码:3"<<endl;
    cin>>i;
    if(i==1)
    {
        cout<<"请您输入修改后的姓名:"<<endl;
        cin>>n;
        name=n;
        cout<<"修改已完成!!!"<<endl;
    }
    else if(i==2)
    {
        cout<<"请您输入修改后的电话号码:"<<endl;
        cin>>t;
        telePhone=t;
        cout<<"修改已完成!!!"<<endl;
    }
    else if(i==3)
    {
        cout<<"请您输入修改后的姓名和电话号码:"<<endl;
        cout<<"姓名:";
        cin>>n;
        name=n;
        cout<<endl<<"电话号码:";
        cin>>t;
        telePhone=t;
        cout<<"修改已完成!!!"<<endl;
    }
    else
    {
        cout<<"无效指令!"<<endl;
        return;
    }
}
/*以函数为重载函数*/
friend istream& operator>>(istream& in,Phone& a)
{
    in>>a.name>>a.telePhone;
    return in;
}
friend ostream& operator<<(ostream& out,Phone& a)
{
    out<<"姓名: "<<a.name<<" , 电话号码:"<<a.telePhone<<endl;
    return out;
}

};
手机卡联系人类*
class Card:public Phone
{
protected:
string hometown;
string qq;
public:
Card(string n1,string t1,string h1,string q1):Phone(n1,t1)//带默认值的构造函数
{
hometown=h1;
qq=q1;
}
Card() {} // 无参构 造函数
string Card_Get_name2()
{
return name;
}
string Card_Get_telePhone2()
{
return telePhone;
}
string Card_Get_hometown2()
{
return hometown;
}
string Card_Get_qq2()
{
return qq;
}
void Card_set(string n1,string t1,string h1,string q1)//赋值
{
name=n1;
telePhone=t1;
hometown=h1;
qq=q1;
}
void Card_modify()//修改
{
cout<<“请您输入您要修改的信息:”<<endl;
cout<<“姓名:1 , 电话号码:2 , 籍贯:3 , QQ号:4”<<endl;
int i;
string j;
cin>>i;
if(i1)
{
cout<<“请您输入修改 后的姓名:”<<endl;
cin>>j;
name=j;
cout<<“修改已完成!!!”<<endl;
}
else if(i
2)
{
cout<<“请您输入修改后的电话号码:”<<endl;
cin >> j;
telePhone=j;
cout <<“修改已完成!!!”<<endl;
}
else if(i3)
{
cout <<“请您输入修改后的籍贯:”<<endl;
cin >>j;
hometown=j;
cout <<“修改已完成!!!”<<endl;
}
else if(i
4)
{
cout << “请您输入修改后的QQ号:”<<endl;
cin>>j;
qq=j;
cout <<“修改已完成!!!”<<endl;
}
else
{
cout <<“无效指令!”<<endl;
return;
}
}
friend istream& operator>>(istream& in,Card& a)//重载>>
{
in>>a.name>>a.telePhone>>a.hometown>>a.qq;
return in;
}
friend ostream&operator<<(ostream&out,Card&a)//重载<<
{
out<<“姓名:”<<a.name<<" 电话号码: “<<a.telePhone<<” 籍贯: “<<a.hometown<<” QQ号: "<<a.qq<<endl;
return out;
}
};
//通讯簿抽象类*
class Book
{
public://********以下函数 均为纯虚函数
virtual void Add()=0 ;// 增 加
virtual void Del(string telePhone) =0;//删 除
virtual void display() =0; //显示全部信息
virtual void modify(string telePhone) =0; //修改操作
virtual void query(string NAME) =0;//查询操作
};
//手机通讯簿类

class Address:public Book
{
protected:
int number1;//手机联系人的数量
Phone Phone1[1000];//手机通讯录
public:
Address()//构造函数

{
number1=0;
ifstream fp1;
fp1.open(“Phone.txt”,ios::in);
if(!fp1)
{
cout<<“can not open the file!”<<endl;
abort();
}
while(fp1>>Phone1[number1])
{
number1++;
}
fp1.close();
}
~Address()//析构函数

{
ofstream fp2;
fp2.open(“Phone.txt”,ios::out);
if(!fp2)
{
cout<<“can not open the file!”<<endl;
abort();
}
for(int j1=0; j1<=number1; j1++)
{
fp2<<Phone1[j1];
}
fp2.close();
}
Phone Get_Phone1(int ii);//返回手机的某联系人
int Get_number1();//得到总人数数值
void Addnumber1();//总人数自增
string Get_telePhone(int w);//得到某联系人的电话号码
void Add();//增加
void Add(Card a);//增加一个已知的联系人
void Del(string telePhone); //删除
void display(); //显示全部
void modify(string telePhone); //修改
void query(string NAME);//查询
};
Phone Address::Get_Phone1(int ii)//返回手机的某联系人
{
return Phone1[ii];
}
int Address::Get_number1()
{
return number1;
}
void Address::Addnumber1()
{
number1++;
}
string Address::Get_telePhone(int w)//获得某联系人的电话号码
{
return Phone1[w].Phone_Get_telePhone();
}
void Address::Add()//增 加
{
if(number1>=1000)
{
cout<<“内存已满,无法添加!!!”<<endl;
return;
}
else
{
string name1,telePhone1;
cout<<“请依次您输入增加联系人的姓名和电话号码:”<<endl;
cout<<"姓名: ";
cin>>name1;
cout<<endl<<"电话号码: ";
cin>>telePhone1;
cout<<endl;
Phone1[number1++].Phone_set(name1,telePhone1);//调用手机联系人类的赋值函数
cout<<“添加成功!!!”<<endl;
return;
}
}
void Address::Add(Card a)//增加一个 已知 联系人
{
Phone1[number1++].Phone_set(a.Card_Get_name2(),a.Card_Get_telePhone2());
cout<<endl;
}
void Address::Del(string telePhone)//删除操作
{
int j1=0;
int x1;
for(int i1=0;i1<number1;i1++)
{
if(Phone1[i1].Phone_Get_telePhone()telePhone)//找到需要了要删除 的联系人
{
for(x1=i1;x1<number1-1;x1++)
{
Phone1[x1].Phone_Get_name()=Phone1[x1+1].Phone_Get_name();
Phone1[x1].Phone_Get_telePhone()=Phone1[x1+1].Phone_Get_telePhone();
}
number1–;
j1=1;
break;
}
}
if(j1
1)
{
cout<<“删除联系人成功!”<<endl;
}
else
{
cout<<“查无 此人!!!”<<endl;
}

}
void Address::display()//显示全部
{
if(number1<=0)
{
cout<<“无联系人!!”<<endl;
return;
}
else
{
for(int i1=0;i1<number1;i1++)
{
cout<<Phone1[i1];
}
cout<<endl;
}
}
void Address::modify(string telePhone)//修改
{
int j1=0;
for(int i1=0;i1<number1;i1++)
{
if(Phone1[i1].Phone_Get_telePhone()telePhone)//找到了联系人
{
Phone1[i1].Phone_modify();
j1=1;
break;
}
}
if(j1
0)
{
cout<<“查无此人!!”<<endl;
}

}
void Address::query(string NAME)//查 询
{
int j1=0;
for(int i1=0;i1<number1;i1++)
{
if(Phone1[i1].Phone_Get_name()NAME)//找到了 要查询 的联系人
{
j1=1;
cout<<"联系人 : "<<endl;
cout<<Phone1[i1];
}
}
if(j1
0)
{
cout<<“查无此人!!”<<endl;
}
}
//手机卡通讯簿类*
class Card_Address_Book:public Book
{
protected:
int number2;//手机卡中联系人 数量
Card Card1[1000];//手机卡 通讯录
public:
Card_Address_Book()//构造 函数
{
number2=0;
ifstream fp3;
fp3.open(“Card.txt”,ios::in);
if(!fp3)
{
cout<< “can not open the file!”<<endl;
abort();
}
while(fp3>> Card1[number2])
{
number2++;
}
fp3.close();
}
~Card_Address_Book()// *析构函数
{
ofstream fp4;
fp4.open(“Card.txt”,ios::out);
if(!fp4)
{
cout<<“can not open the file!”<<endl;
abort();
}
for(int j2=0;j2<=number2;j2++)
{
fp4<<Card1[j2];
}
fp4.close();
}
Card Get_Card1(int ii);//*****返回某手机卡 联系人
int Get_number2();//***得到 总人数
void Addnumber2();//总人数 自增
string Get_telePhone(int w);//获得某联系人的 电话号码
void Add();//增加
void Add(Phone a);//增加一个 已知的联系人
void Del(string telePhone); //删除
void display(); // 显示 全部
void modify(string telePhone); //修 改
void query(string NAME);//查 询
};
Card Card_Address_Book::Get_Card1(int ii)//返回某手机卡 联系人
{
return Card1[ii];
}
int Card_Address_Book::Get_number2()
{
return number2;
}
void Card_Address_Book::Addnumber2()
{
number2++;
}
string Card_Address_Book::Get_telePhone(int w)
{
return Card1[w].Card_Get_telePhone2();
}
void Card_Address_Book::Add()//增 加
{
if(number2>1000)
{
cout<<“内存已满,无法添加!!!”<<endl;
return;
}
else
{
string name1,telePhone1,hometown1,qq1;
cout<<“请您输入增加联系人的姓名、 电话号码、 籍贯、 QQ号” <<endl;
cout<<“姓名:”;
cin>>name1;
cout<<endl<<“电话号码:”;
cin>>telePhone1;
cout<<endl<<“籍贯:”;
cin>>hometown1;
cout<<endl<<“QQ号:”;
cin>>qq1;
cout<<endl;
Card1[number2++].Card_set(name1,telePhone1,hometown1,qq1);//调用手机卡中联系人类的 赋值函数
cout<<“添加成功!!”<<endl;
return;
}
}
void Card_Address_Book::Add(Phone a)//增加一个已知 的联系人
{
string a1,a2;
a1=a2=“空!”;
Card1[number2++].Card_set(a.Phone_Get_name(),a.Phone_Get_telePhone(),a1,a2);
}
void Card_Address_Book::Del(string telePhone)//删除操作
{
int j2=0;
int x2;
for(int i2=0;i2<number2;i2++)
{
if(Card1[i2].Card_Get_telePhone2()telePhone)//找到了 要删除的 联系人
{
for(x2=i2;x2<number2-1;x2++)
{
Card1[x2].Card_Get_name2()=Card1[x2+1].Card_Get_name2();
Card1[x2].Card_Get_telePhone2()=Card1[x2+1].Card_Get_telePhone2();
Card1[x2].Card_Get_hometown2()=Card1[x2+1].Card_Get_hometown2();
Card1[x2].Card_Get_qq2()=Card1[x2+1].Card_Get_qq2();
}
number2–;
j2=1;
break;
}
}
if(j2
1)
{
cout<<“删除联系人成功!!”<<endl;
}
else
{
cout<<“查无此人!!”<<endl;
}
}
void Card_Address_Book::display()//显示全部
{
if(number2<=0)
{
cout<<“无联系人!!”<<endl;
return;
}
else
{
for(int i2=0;i2<number2;i2++)
{
cout<<Card1[i2];
}
cout<<endl;
}
}
void Card_Address_Book::modify(string telePhone)//修改
{
int j2=0;
for(int i2=0;i2<number2;i2++)
{
if(Card1[i2].Card_Get_telePhone2()telePhone)//*找到联系人
{
Card1[i2].Card_modify();
j2=1;
break;
}
}
if(j2
0)
{
cout<<“查无此人!”<<endl;
}
}
void Card_Address_Book::query(string NAME)//查询
{
int j2 =0;
for(int i2=0;i2<number2;i2++)
{
if(Card1[i2].Card_Get_name2()==NAME)//找到了要查 询的联系人

{
j2=1;
cout<<"联系人: "<< endl;
cout<<Card1[i2];
}
}
if(j2==0)
{
cout<<“查无此人”<< endl;
}
}
//用户类

class User
{
protected:
Address a;
Card_Address_Book s;
public:
void Add( int xx );//增加操作
void Del( int xx) ;//删除操作
void display( int xx) ;//显示全部
void modify( int xx) ;//修改
void query( int xx) ;//查询
void movea_s() ;//手机中信息移动到手机卡中
void moves_a() ;//手机卡中信息移动到手机中
void copya_s() ;//手机中信息复制到手机卡中
void copys_a() ;//手机卡中信息复制到手机中
};
void User::Add(int xx)//增加操作
{
Book *b;//创建基类指针
if(xx1)
{
b =&a;//实现 多态
b-> Add();
}
else if( xx
2)
{
b =&s;//实现 多态
b ->Add();
}
else if(xx0)
{
return;
}
else
{
cout<< “无效 指令”<<endl;
return;
}
}
void User::Del( int xx )//删除
{
Book *b;//创建基类的指针
string telePhones;
cout<<“请您输入要删除的联系人的电话号码:”;
cin>>telePhones;
cout <<endl;
if(xx
1)
{
b =&a;
b ->Del( telePhones );
}
else if(xx2)
{
b=&s;
b->Del( telePhones );
}
else if( xx
0 )
{
return;
}
else
{
cout<<“错误 指令!”<<endl;
return;
}
}
void User::display( int xx )//显示全部
{
Book *b;//创建基类指针
if( xx1 )
{
b =&a;
b ->display();
}
else if( xx
2)
{
b =&s;
b ->display();
}
else if( xx0)
{
return;
}
else
{
cout <<“错误 指令”<<endl;
return;
}
}
void User::modify( int xx )//修 改
{
Book *b;
string telePhones;
cout << “请您输入要修改的联系人的电话号码:”;
cin >> telePhones;
cout << endl;
if( xx
1 )
{
b =&a;
b -> modify( telePhones );
}
else if( xx2 )
{
b =&s;
b ->modify( telePhones );
}
else if( xx
0 )
{
return;
}
else
{
cout<<" 错误指令 "<<endl;
return;
}
}
void User::query( int xx )//查 询
{
Book *b;
string names;
cout << “请您输入要查询的联系人的姓名:”;
cin >> names;
cout << endl;
if(xx1)
{
b =&a;
b ->query(names);
}
else if( xx
2 )
{
b =&s;
b ->query(names);
}
else if(xx0)
{
return;
}
else
{
cout<<“错误指令”<<endl;
}
}
void User::movea_s()//手机信息 移动到手机卡
{
if( a.Get_number1()<=0 )
{
cout<<“手机内无联系人,无法进行此操作”<< endl;
return;
}
else
{
for( int ii=a.Get_number1()-1;ii>=0;ii–)
{
int kk=0;//判断 查 重因数
for( int jj=0;jj<s.Get_number2();jj++)
{
if(a.Get_telePhone(ii)s.Get_telePhone(jj))
{
kk++;
break;//找到了重复的,退出循环
}
}
if( kk!=0 )
{
cout <<“手机卡内已有此联系人”<<endl;
}
else
{
s.Add(a.Get_Phone1(ii));//移动完毕
}
a.Del(a.Get_telePhone(ii));//删除移动完的联系人
}
}
}
void User::moves_a()//手机卡信息移动到手机
{
if( s.Get_number2()<=0 )
{
cout << “手机卡内无联系人,无法进行此操作”<< endl;
return;
}
else
{
for( int ii =s.Get_number2()-1; ii>=0;ii-- )
{
int kk=0;//判断查重因数
for( int jj=0;jj<a.Get_number1() ; jj++ )
{
if( s.Get_telePhone(ii)a.Get_telePhone(jj))
{
kk++;
break;//找到重复的
}
}
if( kk!=0)
{
cout<<“手机内已有此联系人”<<endl;
}
else
{
a.Add(s.Get_Card1(ii));//移动完毕
}
s.Del( s.Get_telePhone(ii));//删除移动完的联系人
}
}
}
void User::copya_s()手机信息复制到手机卡
{
if( a.Get_number1()<=0)
{
cout<<“手机内无联系人,无法进行此操作”<<endl;
return;
}
else
{
for(int ii=a.Get_number1()-1;ii>=0;ii–)
{
int kk=0;//判断查重因数
for( int jj=0;jj<s.Get_number2(); jj++ )
{
if(a.Get_telePhone(ii)s.Get_telePhone(jj))
{
kk++;
break;//找到了重复的,退出循环
}
}
if(kk!=0)
{
cout <<“手机卡内已有此联系人”<<endl;
}
else
{
s.Add(a.Get_Phone1(ii));//移动完毕
}
}
}
}
void User::copys_a()//手机卡信息复制到手机
{
if(s.Get_number2()<=0)
{
cout << “手机卡内无联系人 , 无法进行此操作” << endl;
return;
}
else
{
for(int ii=s.Get_number2()-1;ii>=0;ii–)
{
int kk=0;//判断查重因数
for( int jj=0;jj<a.Get_number1();jj++ )
{
if( s.Get_telePhone(ii)a.Get_telePhone( jj ) )
{
kk++;
break;//找到重复的
}
}
if( kk!=0 )
{
cout<<“手机内已有此联系人”<<endl;
}
else
{
a.Add( s.Get_Card1 ( ii ) );//移动完毕
}
}
}
}
//**菜单类
class Menu
{
public:
void mainMenu();// 主菜单
void AddMenu();//增加 联系人 菜单
void DelMenu();//删除 联系人 菜单
void modifyMenu();//修改 联系人 菜单
void queryMenu();//查询 联系人 菜单
void displayMenu();//显示 联系人 菜单
void moveorcopyMenu();//转移 或 复制 操作
};
void Menu::mainMenu()//主菜单
{
cout<<"-----------欢迎使用小童de手机管理系统--------------"<<endl;
cout<<"--------------请选择服务类型-----------------------"<<endl;
cout<<“1. 新建联系人 ----”<<endl;
cout<<“2. 删除联系人 ----”<<endl;
cout<<“3. 修改联系人信息 ----”<<endl;
cout<<“4. 查询联系人信息 ----”<<endl;
cout<<“5. 浏览所有联系人信息 ----”<<endl;
cout<<“6. 手机和手机卡联系人的转移或复制 ----”<<endl;
cout<<“0. 离开小童的通讯录 ----”<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
void Menu::AddMenu()//增加联系人菜单
{
cout<<"---------------------------------------------------"<<endl;
cout<<“1. 在手机中新建联系人 ----”<<endl;
cout<<“2. 在手机卡中新建联系人 ----”<<endl;
cout<<“0. 返回上一级操作 ----”<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
void Menu::DelMenu()//删除联系人菜单
{
cout<<"---------------------------------------------------"<<endl;
cout<<“1. 在手机中删除联系人 ----”<<endl;
cout<<“2. 在手机卡中删除联系人 ----”<<endl;
cout<<“0. 返回上一级操作 ----”<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
void Menu::modifyMenu()//修改联系人菜单
{
cout<<"---------------------------------------------------"<<endl;
cout<<“1. 修改手机中的联系人 -----”<<endl;
cout<<“2. 修改手机卡中的联系人 -----”<<endl;
cout<<“0. 返回上一级操作 -----”<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
void Menu::queryMenu()//查询联系人菜单
{
cout<<"---------------------------------------------------"<<endl;
cout<<" 1. 查询手机中的联系人 -----"<<endl;
cout<<" 2. 查询手机卡中的联系人 -----"<<endl;
cout<<" 0. 返回上一级操作 -----"<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
void Menu::displayMenu()//显示(浏览)联系人菜单
{
cout<<"---------------------------------------------------"<<endl;
cout<<" 1. 浏览手机中的联系人 -----"<<endl;
cout<<" 2. 浏览手机卡中的联系人 -----"<<endl;
cout<<" 0. 返回上一级操作 -----"<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
void Menu::moveorcopyMenu()//转移or复制操作
{
cout<<"---------------------------------------------------"<<endl;
cout<<" 1. 将手机联系人的信息转移到手机卡上 -----"<<endl;
cout<<" 2. 将手机卡联系人的信息转移到手机上 -----"<<endl;
cout<<" 3. 将手机联系人的信息复制到手机卡上 -----"<<endl;
cout<<" 4. 将手机卡联系人的信息复制到手机上 -----"<<endl;
cout<<" 0. 返回上一级操作 -----"<<endl;
cout<<"---------------------------------------------------"<<endl;
cout<<endl;
}
int main()
{
User User;//定义 一个用户
Menu Menu;//定义 一个菜单
while(111)//重复 进行操作
{
Menu.mainMenu();//调用 主菜单
int chose;
cin>>chose;
//开始判断 操作的类型
if(chose
1)//新建 操作
{
Menu.AddMenu();//调用 新建菜单
int chose1;
cin>>chose1;
User.Add(chose1);
cout<<endl;
}
else if(chose
2)// 删除操作
{
Menu.DelMenu();// 调用删除菜单
int chose1;
cin>>chose1;
User.Del(chose1);
cout<<endl;
}
else if(chose
3)// 修改操作
{
Menu.modifyMenu();// 调用修改菜单
int chose1;
cin>>chose1;
User.modify(chose1 );
cout<<endl;
}
else if(chose
4 )// 查询操作
{
Menu.queryMenu();//调用查询菜单caozuo
int chose1;
cin>>chose1;
User.query(chose1);
cout<<endl;
}
else if(chose
5 )//显示操作(浏览)
{
Menu.displayMenu();//调用查询菜单
int chose1;
cin>>chose1;
User.display( chose1);
cout<< endl;
}
else if(chose6)//转移或复制操作
{
Menu.moveorcopyMenu();//调用转移 复制菜单
int chose1;
cin>>chose1;
if(chose1
0)
{
cout<< endl;
}
else if(chose11)
{
User.movea_s();
cout<< endl;
}
else if(chose1
2)
{
User.moves_a();
cout<< endl;
}
else if(chose13)
{
User.copya_s();
cout<< endl;
}
else if(chose1
4)
{
User.copys_a();
cout<< endl;
}
}
else if(chose==0)
{
cout<<“再见~See You Again~~”<<endl;
system(“pause”);
break;
}
}
return 0;
}
`

课程设计报告(含图片)

一、设计要求
根据通用的手机通讯录的使用方式,采用OOP(Object Oriented Programming,面向对象编程)方法编写手机通讯录管理系统。
(1)创建文本文件,在手机和手机卡(根据具体环境创建,如创建在D盘中)中创建两个文本文件,分别存储手机和手机卡上的联系人信息。
(2)以菜单方式工作(字符界面即可)。
(3)存储在手机上的联系人的信息包括:姓名和电话号码;存储在手机卡上的联系人的信息包括姓名,籍贯,电话号码,QQ号等信息。
(4)通讯录管理系统的功能包括:
a)新建联系人:添加新的联系人,添加时确定是添加到手机上还是手机卡中。
b)删除操作:删除一个联系人,通过输入电话号码,删除该联系人。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作
c)修改操作:修改某个联系人的信息,通过输入电话号码,查询到联系人之后进行信息的修改。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作。
d)查询操作:通过名字查询联系人信息,查询结果不唯一。
e)浏览操作:显示所有联系人的信息。
f)将联系人的信息从手机转存到手机卡上,同时要避免重复数据的存在。并且在转存时要检查容量是否受限。
g)将联系人的信息从手机卡上准存到手机上,同时要避免重复数据的存在。
(5)要支持继承、多态、重载(运算符重载、函数重载)等面向对象的基本特点。
二、总体设计
(1)系统由一个.cpp文件和两个文本文件组成:.cpp文件用于程序的实现;两个文本文件分别用于存储手机联系人和手机卡联系人信息。
(2)系统由7个类组成:
手机类
手机卡类(继承于手机类)
通讯簿类(抽象类)
手机通讯簿类(继承于通讯簿类)
手机卡通讯簿类(继承于通讯簿类)
用户类(操作类,用于完成通讯簿的操作)
界面菜单类(用来给出显示提示)
(3)每个类的具体声明
class Phone(手机类)
class Card:public Phone(手机卡类)
class Book(通讯簿类)
class Address:public Book(手机通讯簿类)
class Card_Address_Book:public Book(手机卡通讯簿类)
class User(用户类)
class Menu(界面菜单类)
三、界面设计与各功能模块实现
(1)主页面(主菜单):
在这里插入图片描述

(2)新建联系人:

在这里插入图片描述
在这里插入图片描述

(3)删除联系人:

在这里插入图片描述
在这里插入图片描述

(4)修改联系人信息:
在这里插入图片描述

(5)查询联系人信息:
在这里插入图片描述

(6)浏览所有联系人信息:
在这里插入图片描述

(7)手机或手机卡联系人的转移和复制:

在这里插入图片描述

四、编程体会
通过这次通讯录管理系统的课程设计的编写,将自己近一年的C++程序设计的知识有机地结合在了一起,特别是现在学习的面向对象的相关知识,一开始学习的类贯彻始终,实现了类的封装,代码中充分体现了保护继承和公有继承、运用了纯虚函数和抽象类、体现了多态性、用友元函数实现了运算符的重载,建立了用户类、菜单类将其他类结合在一起,锻炼了自己的思维和编程能力。同时,在编写过程中发现自己仍有一些知识点没有课下及时复习,导致在编写的过程中仍然需要看笔记本和课件,而且在这次编写的过程中,意识到了在写代码前,一定要保存创建到自己的U盘中,否则如果遇到特殊情况,前面写的代码可能全都会消失;还有一点就是,在写代码的过程中要适当地添加注释,帮助自己更好地编写程序。反思:在平时的学习过程中要及时复习学过去的知识,不仅是刚刚学的,还有以前学习过的;而且写代码时要有恒心、有毅力,在编写的过程中要不断修改、不断完善。
五、附件
源代码

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用python中的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
06-03
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值