C++课程设计电话簿管理_c课程设计通讯录
C++课程设计电话簿管理由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c课程设计通讯录”。
C++课程设计
————简单电话簿管理
报告内容: 一.程序功能简介 二.课程设计要求 三.课程设计说明 四.参考数据结构 五.具体功能及实现六.源程序及注释 七.感想与心得
学号:050930109 姓名:陈浩 指导老师:臧洌 日期:2010年6月20日
一.程序功能简介
一个基本的电话簿管理程序,具有插入、删除、显示、修改和查询联系人电话码的功能。主菜单如右图所示,每个菜单项功能如下:
1.增加记录菜单:请输入用户姓名,如果该用户已经存在则添加失败,否则,输入用户的电话号码,进行添加。
2.修改某条记录:请输入用户姓名,如果没有该用户显示“ 该用户不存在”信息,否则,输出原电话号码,然后输入新的电话号码,进行修改。3.删除记录:
输入用户姓名,进行删除(删除时要进行确认)。4.查询:输入用户姓名,进行查找。
5.排序:根据子菜单,选择不同的排序方式。6.显示:逐屏显示(每屏显示10条记录)。7.全删:进行全部删除(要确认)。
二.课程设计要求
请选择以下功能 1-增加记录 2-修改记录 3-删除记录
4-查找(按姓名)5-排序 6-显示记录
1.用汉化菜单实现。
2.提供按姓名查询电话号码的功能。
3.显示功能(提供逐屏显示的功能,每屏显示10条记录)。4.删除和修改时要进行确认。
5.将电话簿记录以文件的形式存在磁盘上;每次操作时将电话簿调出,操作完毕后存盘。
三.课程设计说明
1.程序采用数组数据结构实现。2.用类来实现数据的封装。
四.参考数据结构
1.“电话簿”称为用户信息表,用数组实现。用户信息表由若干用户信息构成,每个用户信息是一个数组元素。
2.“user.txt”是一个文件,用于保存“用户信息表”中的信息。当系统启动时,从该文件中读入信息,当退出系统时,将“用户信息表”中的信息写到该文件中。该文件中信息存放形式如下:
ZhangHong 5221369 LiLi 84891112
ZhaoQiang 5221498
其中 name(姓名)占20列 phone_num(电话号码)占12列
五.具体功能及实现
定义Fphone类,通过其私有成员数组name[20]和phone[12]分别记录用户姓名与电话号码,定义UserDatabase类记录用户信息,通过公有成员函数实现对数据的操作。
六.源程序及注释
#include #include #include #include #include #define M 20 #define N 12 #define MAX 100 cla Fphone
//用户信息类的定义 {
char name[M];
// 姓名
char phone_num[N];
//电话号码 public: Fphone(char *na=“”,char *ph=“”){ strcpy(name,na);
strcpy(phone_num,ph);} char*getname();
//获取姓名
char*getphone_num();
//获取电话号码
void setname(char*a);
//设置姓名
void setphone_num(char*a);//设置电话号码
void disp();
//显示用户信息 };char *Fphone::getname()
{ return name;} char *Fphone::getphone_num(){ return(phone_num);} void Fphone::setname(char *a){ strcpy(name,a);
} void Fphone::setphone_num(char*a){ strcpy(phone_num,a);} void Fphone::disp(){ cout
//用户信息表类的定义 { int nElem;
//用户信息表中的元素个数,即当前记录总数
int Maxu;
//最多的用户
Fphone *user;
//指向用户信息表的指针
public: UserDatabase()
//构造函数,初始化用户信息表,将user.txt文件中数据读到User[]中
{ nElem=0;
Maxu=50;
user=new Fphone[Maxu];
fstream in;
in.open(“user.txt”,ios::in|ios::nocreate);//打开文件
for(int i=0;(!in.eof());i++)
{ in>>user[i].getname();in>>user[i].getphone_num();
nElem++;
}
in.close();}
~UserDatabase()
//析构函数,将user[]写入user.txt文件中
{ fstream out;
Fphone *p=NULL;
p=user;
out.open(“user.txt”,ios::out,filebuf::sh_none);
for(int i=0;i
{ outgetname())
getphone_num())
}delete []user;
out.close();} void clear()
//删除所有用户信息
{ char ord;
cout
do
{ cin>>ord;
if(ord=='N'||ord=='n')return;
else if(ord=='Y'||ord=='y')
{ delete[Maxu]user;
} user=0;cout
user->setname(na);
user->setphone_num(ph_num);
} else if(nElem=0;i--)
{ if(strcmp((user+i)->getname(),na)>0)
{(user+i+1)->setname(((user+i)->getname()));
(user+i+1)->setphone_num(((user+i)->getphone_num()));
}
else break;
}
(user+i+1)->setname(na);
(user+i+1)->setphone_num(ph_num);
nElem++;} else cout
//返回user指针 { return(user);} void delete_record(Fphone *p,int k)
//删除用户信息 { char con;cout>con;if(con=='N'||con=='n')return;else if(con=='Y'||con=='y'){ for(int i=k;i
{ user[i]=user[i+1];}
nElem--;
cout
return;} else
{ cout
system(“pause”);
return;} } void modify_record(Fphone *p,char*ph_num)//修改用户信息 { p->setphone_num(ph_num);} Fphone *query(char *na)
//按姓名查找 顺序查找,这里也可以用折半 { Fphone *p=user;
int i=0;
while(1)
{ if(strcmp(p->getname(),na)==0)
return p;
p++;
if(i++==nElem)
break;} return NULL;} void sorta_name()//按姓名升序排序 插入排序法 { Fphone temp;int i,j;for(i=1;i
for(j=i-1;j>=0&&(strcmp(temp.getname(),user[j].getname())
{ strcpy(user[j+1].getname(),user[j].getname());
strcpy(user[j+1].getphone_num(),user[j].getphone_num());
}
strcpy(user[j+1].getname(),temp.getname());
strcpy(user[j+1].getphone_num(),temp.getphone_num());} } void sorta_phonenum()//按电话号码升序排序 选择排序法 { int i,j,p;Fphone temp;for(i=0;i
for(j=i+1;j
if(strcmp(user[j].getphone_num(),user[p].getphone_num())
if(p!=i)
{ strcpy(temp.getname(),user[p].getname());
strcpy(temp.getphone_num(),user[p].getphone_num());
strcpy(user[p].getname(),user[i].getname());
strcpy(user[p].getphone_num(),user[i].getphone_num());
strcpy(user[i].getname(),temp.getname());
strcpy(user[i].getphone_num(),temp.getphone_num());
} } } void sort_name()//按姓名降序排序,将排成升序的对象数组逆向放置 { Fphone temp;int i,m=(nElem+1)/2;for(i=0;i
strcpy(temp.getphone_num(),user[i].getphone_num());
strcpy(user[i].getname(),user[nElem-i-1].getname());
strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num());
strcpy(user[nElem-i-1].getname(),temp.getname());
strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());} } void sort_phonenum()//按电话号码降序排序 冒泡排序法 { Fphone temp;int i,m=(nElem+1)/2;for(i=0;i
strcpy(temp.getphone_num(),user[i].getphone_num());
strcpy(user[i].getname(),user[nElem-i-1].getname());
strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num());
strcpy(user[nElem-i-1].getname(),temp.getname());
strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());} } void disp(){ int i,n=0;cout
coutgetname()
getphone_num()
n++;
if(n%10==0)
{ system(“pause”);
system(“cls”);
} }
cout
请选择以下功能:“
1-增加记录”
2-修改记录“
3-删除记录”
4-查找(按姓名)“
5-排序”
6-显示记录“
7-全删”
0-退出“
输入选择:”
“
”
欢迎使用电话簿管理系统
“
祝您使用愉快
”
“
system(”cls“);
menu();
int k;
cin>>k;
switch(k)
{ case 1:
{ system(”cls“)
cout
cout
增加记录
”
Fphone *t=NULL;
char w;
do
{ cout
cin>>na;
t=(s.query(na));
if(t)
{ cout
else
{ cout
cin>>ph_num;
s.add_record(na,ph_num);cout
cout
}
cout
cin>>w;} while(w=='Y');break;}
case 2: { system(“cls”);
cout
修改记录
“
char na[M],ph_num[N];
Fphone *t=NULL;
char w;
do
{ cout
cin>>na;
t=s.query(na);
if(!t)
cout
else
{ coutgetphone_num()
cout
cin>>ph_num;
s.modify_record(t,ph_num);
cout
}
cout
cin>>w;
}
while(w=='Y');
break;} case 3: { system(”cls“);
cout
删除记录
”
cout
char w;
char na[M];
int k;
Fphone *p;
do
{ cout
cin>>na;
p=s.query(na);
if(p==0)
cout
else
{(*p).disp();
k=p-s.getuser();
s.delete_record(p,k);
}
cout
cin>>w;
}
while(w=='Y');
break;} case 4: { system(“cls”);
cout
cout
查询记录
“
cout
char na[M];int p=1;
Fphone *t=NULL;
char w;
do
{ cout
cin>>na;
t=s.query(na);
if(t)
{
coutgetname()
coutgetphone_num()
}
else
cout
cout
cin>>w;}
} case 5: { while(w=='Y');break;system(”cls“);
cout
请选择排序方式
”
cout
1.按姓名(升序)
“
cout
2.按电话号码(升序)
”
cout
3.按姓名(降序)
“
cout
4.按电话号码(降序)
”
cout
请输入你的选择:
“
int k;
cin>>k;
switch(k)
{ case 1:
s.sorta_name();
cout
system(”cls“);
break;
case 2:
s.sorta_phonenum();
cout
system(”cls“);
break;
case 3:
s.sort_name();
cout
system(”cls“);
break;
case 4:
s.sort_phonenum();
cout
system(”cls“);
break;
} }
case 6: { system(”cls“);
cout
cout
显示记录
”
cout
s.disp();
system(“pause”);break;
}
} } case 7: { system(“cls”);
cout
char q;
cin>>q;
if(q=='Y'||q=='y')
{ cout
cout
全部删除记录
“
cout
s.clear();
}
else break;
system(”pause“);
break;} case 0: { system(”cls“);
cout
exit(0);} default:
cout
system(”pause");
break;} 七.感想与心得
1.电话簿管理程序较长,算法比较复杂,调试的过程中遇到了各种各样的问题。各种各样的小错误寻找起来十分困难。在今后编写程序时应当随编随找错。
2.课设让我们把这一学期所学的C++知识得到了很好的应用,开拓了我们的思路,所谓温故而而知新,这次课设也让我们对以前的知识有了一个全面的回顾,加深了对已学知识的理解。
3.课设过程艰辛,花费时间很长,需要很强的耐力和信心。而这也是对我们的一次考验,养成了坚持不懈和吃苦耐劳的精神。总之,C++课设让我们学到了很多,也收获了很多,这必将成为我人生中的一个深刻的回忆。