C++课程设计电话簿管理_c课程设计通讯录

2020-02-28 其他范文 下载本文

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++课设让我们学到了很多,也收获了很多,这必将成为我人生中的一个深刻的回忆。

《C++课程设计电话簿管理.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
C++课程设计电话簿管理
点击下载文档
相关专题 c课程设计通讯录 电话簿 课程设计 c课程设计通讯录 电话簿 课程设计
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文