#pragma hdrstop
#include <iostream> //引用输入输出流
#include <string>
using namespace std;
const int MaxSize=100; //100只是示例性的数据,可以根据实际问题具体定义
struct Myfrinde
{
string name; //姓名
string tel; //电话号
string born; //出生日期
string qq; //qq或MSN号
string addr; //住址
};
template < class T >
class SeqList
{
public:
SeqList() {length=0;} //无参构造函数
SeqList(T a[ ], int n); //有参构造函数
~SeqList( ) { } //析构函数为空
int Length( ) {return length;} //求顺序表的长度
T Get(int i); //取顺序表的第i个元素
void Insert(int i, T x); //在顺序表中第i个位置插入值为x的元素
T Delete(int i); //删除顺序表的第i个元素
void Exchange(int i); //修改顺序表第i个元素
void PrintList( ); //遍历顺序表,按序号依次输出各元素
void PrintMyfrinde(T x); //有参输出函数
private:
T data[MaxSize]; //存放数据元素的数组
int length; //顺序表的长度
};
template <class T > SeqList<T>:: SeqList(T a[ ], int n)
{
int i;
if (n>MaxSize) throw "参数非法";
for (i=0; i<n; i++)
data[i]=a[i];
length=n;
}
/*
* 插入函数Insert,将x插入到顺序表第i个位置
*/
template <class T > void SeqList<T>::Insert(int i, T x)
{
int j;
if (length>=MaxSize) throw "上溢";
if (i<1 || i>length+1) throw "位置错误";
for (j=length; j>=i; j--)
data[j]=data[j-1]; //注意第j个元素存在数组下标为j-1处
data[i-1]=x;
length++;
}
template <class T > void SeqList<T>::Exchange(int i)
{
int which;
string name; //姓名
string born; //生日
string qq; //qq或MSN号
string tel; //手机号
string addr; //住址
system("color f9");
cout << "\n";
cout << "\t\t★★★★★★★★★★★★★★★★★★★★★★★"<< "\n";
cout << "\n";
cout << "\t\t★ 需要修改朋友名字请按1 ★" << "\n";
cout << "\n";
cout << "\t\t★ 需要修改朋友电话号请按2 ★" << "\n";
cout << "\n";
cout << "\t\t★ 需要修改朋友生日请按3 ★" << "\n";
cout << "\n";
cout << "\t\t★ 需要修改朋友QQ或MSN请按4 ★" << "\n";
cout << "\n";
cout << "\t\t★ 需要修改朋友的地址请按5 ★" << "\n";
cout << "\n";
cout << "\t\t★ 需要返回请按6 ★" << "\n";
cout << "\n";
cout << "\t\t★★★★★★★★★★★★★★★★★★★★★★★" << "\n";
cin >> which;
system("cls");
switch( which )
{
case 1:
cout << endl;
cout << "修改后朋友姓名:" << "\n";
cin >> name;
data[i].name=name;
system("cls");
break;
case 2:
cout << endl;
cout << "修改后朋友电话号:" << "\n";
cin >> tel;
data[i].tel=tel;
system("cls");
break;
case 3:
cout << "修改后朋友生日:" << "\n";
cin >> born;
data[i].born=born;
system("cls");
break;
case 4:
cout << endl;
cout << "修改后朋友qq或MSN号:" << "\n";
cin >> qq;
data[i].qq=qq;
system("cls");
break;
case 5:
cout << "修改后朋友地址:" << "\n";
cin >> addr;
cout << endl;
data[i].addr=addr;
system("cls");
break;
case 6:
break;
}
}
/*
* 删除函数Delete,删除顺序表中第i个元素
*/
template <class T > T SeqList<T>::Delete(int i)
{
int j;
if (length==0 ) throw "下溢";
if (i<1 || i>length) throw "位置错误";
T x=data[i-1];
for (j=i; j<length; j++)
data[j-1]=data[j]; //注意此处j已经是元素所在的数组下标
length--;
return x;
}
/*
* 遍历输出函数PrintList,输出所有顺序表中元素
*/
template <class T > void SeqList<T>::PrintList( )
{
int i;
for (i=0; i<length; i++)
{
cout << endl;
cout << "姓名:" << data[i].name << endl;
cout << endl;
cout << "电话号:" << data[i].tel << endl;
cout << endl;
cout << "出生日期:" << data[i].born << endl;
cout << endl;
cout << "qq或MSN: " << data[i].qq << endl;
cout << endl;
cout << "住址:" << data[i].addr << endl;
}
}
/*
* 输出函数PrintStudent,输出顺序表中元素x
*/
template <class T > void SeqList<T>::PrintMyfrinde(T x)
{
cout << endl;
cout << "姓名:" << x.name << endl;
cout << endl;
cout << "电话号:" << x.tel<< endl;
cout << endl;
cout << "出生日期:" << x.born << endl;
cout << endl;
cout << "qq或MSN:" << x.qq << endl;
cout << endl;
cout << "住址:" << x.addr << endl;
}
//取函数Get,从顺序表中返回第i个元素,并作为返回值返回
template <class T> T SeqList<T>::Get(int i)
{
if (i>=0 && i<=length-1)
return data[i];
else
{
T stu;
return stu;
}
}
int main(int argc, char* argv[])
{
int which; //功能选择变量
int i;
int choose=0; //控制
string name; //姓名
string born; //生日
string qq; //qq或MSN号
string tel; //手机号
string addr; //住址
int where; //插入位置
int length; //链表长度
SeqList< Myfrinde > s; //创建模版类的实例s
Myfrinde temp;
system("color 9f");
cout << "\n"<< "\n"<< "\n"<< "\n"<< "\n";
cout << " ------------------------------------------" << "\n";
cout << " ******************************************" <<"\n";
cout << " **** 欢迎使用 ****" << "\n";
cout << " **** ****" << "\n";
cout << " **** 个人通讯录 ****" << "\n";
cout << " **** ****" << "\n";
cout << " **** 管理系统 ****" << "\n";
cout << " **** ****" << "\n";
cout << " **** 输入Enter键继续 ****" << "\n";
cout << " ******************************************" << "\n";
cout << " ------------------------------------------" << "\n";
getchar();
system("cls");
while ( choose==0 )
{
cout << "\n";
cout << "\t\t★★★★★★★★★★★★★★★★★★★★★★★"<< "\n";
cout << "\n";
cout << "\t\t★ 需要插入朋友信息请按1 ★" << "\n";
cout << "\n";
cout << "\t\t★ 需要删除朋友信息请按2 ★" << "\n";
cout << "\n";
cout << "\t\t★ 需要修改朋友信息请按3 ★" << "\n";
cout << "\n";
cout << "\t\t★ 需要查询朋友信息请按4 ★" << "\n";
cout << "\n";
cout << "\t\t★ 需要输出全部朋友信息请按5 ★" << "\n";
cout << "\n";
cout << "\t\t★ 需要退出请按6 ★" << "\n";
cout << "\n";
cout << "\t\t★★★★★★★★★★★★★★★★★★★★★★★" << "\n";
cin >> which;
system("cls");
switch( which )
{
case 1:
cout << endl;
cout << "需要插入朋友姓名:" << "\n";
cin >> name;
cout << endl;
cout << "需要插入朋友电话号:" << "\n";
cin >> tel;
cout << endl;
cout << "需要插入朋友出生日期:" << "\n";
cin >> born;
cout << endl;
cout << "需要插入朋友qq或MSN号:" << "\n";
cin >> qq;
cout << endl;
cout << "需要插入朋友地址:" << "\n";
cin >> addr;
cout << endl;
cout << "需要插入朋友位置:" << "\n";
cin >> where;
评论0