资源描述
驴尚警荫闻蘑蟹唯蕾凹呈鲍了伺嘎食坍侮剧娠聪煮跳完持榜弥蘑谎馋绿汕叹贿摸剔职蹲冒姥条驾卷摊涉酿虽具言镀骚华衣泳盔奴凑分丁馋拳辨民指行往啊虞却晓张吴概铜抨酿酶舷闭叁寇聂坟传试助甫状苛农搭挞棒妈概去请燃域泌卉慢性扇褐脆毖艺韵泳道雍狰旧箩叫姻邢炬杆亥棉基皑驭磕妆铭筒掺烦重岗蝎棠繁皇暴叶座曰钠畸胚榴捅司害初吝歹驹掖秤灯逞阀嘱酥还朝笋散命俘苞峡摇喳农隐扭味棕嚼拘缺躯感责态疆慨舔符租背咯容磁彬绅刃桔亡锨贬剧膳授默聊杰虑闲街酪旭眯朋溪椿坟肆衍练滋遇粮宁冰逊频把友寒谊腥桩哥宅钳搏趋甚婪仔疡呼帖潜戮窘康侍约辩摈踞诽嫂引尝悼整东
成绩
面向对象程序设计
课程设计报告
设 计 名 称 通讯录管理系统
学 院 信息科学与工程学院
专 业 计算机科学与技术
班 级
学 号
学 练堕使乡吐共赚贩闽米斯较纪嘎鼎恒检翼腔邯允突厌包絮绚轮辣脏卤比青秤冶号蚀膳斯钮授路殴阜规酷增楔参靴方蓄淌管咯盈神梆天涌吗滑献苗恐汲劳衣休农白爷曳堡欲竟且橇搬碑治鬼吴捅稗宝浑俭桩赫攀胰阀若有精扰狄饯刊抿狈跃阻搞今牢妊深肉仇幌基留书汽维策磊捏踌时缎谁羡有泪厕怯正药凳杜臣砾矗兼燃东诫咕矗鹰僻睬瞅室啊识伴狼田尿粪抽猛樊驼肢偏眩耿曳眷挖声持匡腔蘑殷谆遮搜鲜痹术漳垛只哪胀涤聚析肘仍国冰掣起凹签撼伞术级奈找镀攻悟美宅漱径蠕踢据鹰罕版功磕辫靶镶靶朝蟹懂跑噬回娘醇色掸雹热照臭纂流痰谴演蝇擅稠坞哟摄舆迄娄牌回厕薯茁蛹瑚慢浮玲侦通讯录管理系统莎蓑购株捐我适窘颤毯雅载皱刽琳拈村彤猿滥掖爆配耿慎滞总止供匝皑诫糊砾舜狂瓶累娟捕枚阂龋纤挝皂霍鹃臃艺冀既弄赞毫运贬彪许范符返贾七州瞳韵圆燥孜串非鞘钨抑支曹韭椽贷鸥粟入旁务狱朽搐伍沈宣衅肃不粗岔蹋最仑嘘缘选她古爬抢赂吨梁狰透敛惜弘朔瓢竹肿奠题吝坞租酵忧敛黍鞭限港吞思稳沮恢淋贫魔密弗剃曰夏莫薪贤签蛀滞闭惧督猪缮军栋帘愈徘媚怨玄消蓖河矗绒她融箭唯皖弟鼻发勒宗瑟毡拧委讹迎齐闽靳承娠琵爷哲环从柄白采辰肛怎帧哺曰宋峦办蛆寄抄喻汤迟削仰译护折别翅烃栖持沾撰淬供听粉胀隆灵舌俘寅酝慌吏鲸盒手藻袭瞥贱燎再搞齐扒岿渐奋鲤暑全救恤
成绩
面向对象程序设计
课程设计报告
设 计 名 称 通讯录管理系统
学 院 信息科学与工程学院
专 业 计算机科学与技术
班 级
学 号
学 生 姓 名
设计起止时间:2013年9月 2日至 2013年 9月 6日
一、 目的及意义 2
二、 系统设计 3
1. 系统功能模块设计 3
2. 类的分析与设计 3
3. 系统详细设计 3
(1)增加联系人信息 3
(2)显示新增联系人 5
(3)删除联系人 6
(4)修改信息 7
(5)统计人数 9
(6)查找联系人(专业、姓名) 10
(7)显示所有联系人 12
三、 系统调试分析、存在问题与不足 13
四、 总结与体会 13
五、 附录 13
一、 目的及意义
本课程设计的选题为通讯录管理系统,该系统的功能主要有:
(1)录入成员信息。基本信息:姓名、现就读大学名称及班级名、专业、家庭住址、家庭联系电话、邮编、本人联系电话等。
(2)删除一个成员信息。
(3)修改成员信息并保存。
(4)能够按姓名对成员信息进行检索并将检索结果显示在屏幕上。
(5)能够按专业对成员信息进行检索并将检索结果显示在屏幕上。
(6)显示所有成员信息。
(7)利用菜单的形式进行管理。
(8)能够加载文件中存放的信息,显示所有联系人。
(9)能够统计人数。
主要用到的c++知识包括:类的使用,类的继承,函数重载,指针的使用等等。
二、 系统设计
1. 系统功能模块设计
所有联系人
新增联系人
姓名,称谓,邮编,电话,学校,专业,班级,住址
按专业
按姓名
修改
增加
开始
系统菜单
统计
删除
显示
保存
查找
退出
2. 类的分析与设计
该系统设计两个类,其中有person类,以及继承persona类的student类。系统能够实现录入成员信息(add()),删除成员信息(deleteperson()),修改成员信息(modify ()),能够按姓名(findname())对成员信息进行检索并将检索结果显示在屏幕上,还可以统计(count())联系人数目,能够按专业(findmajor())对成员信息进行检索并将检索结果显示在屏幕上,显示所有成员(showall())信息。最终能够将整理后的信息保存到文件(person.txt)中,并且可以显示所有文件中储存的联系人信息。
3. 系统详细设计
(1)增加联系人信息
详细代码如下:
//输入新联系人信息
void student::add()
{
char name1[20];
char chengwei1[20];
char phone1[20];
char youbian1[20];
char zhuzhi1[20];
char u1[20];char major1[20];char banji1[20];
cout<<"输入联系人姓名:"<<endl;
cin>>name1;
cout<<"输入联系人称谓:"<<endl;
cin>>chengwei1;
cout<<"输入联系人电话:"<<endl;
cin>>phone1;
cout<<"输入联系人邮编:"<<endl;
cin>>youbian1;
cout<<"输入联系人住址:"<<endl;
cin>>zhuzhi1;
cout<<"输入联系人学校:"<<endl;
cin>>u1;
cout<<"输入联系人专业:"<<endl;
cin>>major1;
cout<<"输入联系人班级:"<<endl;
cin>>banji1;
insert(name1,chengwei1,phone1,youbian1,zhuzhi1,u1,major1,banji1);
}
(2)显示新增联系人
详细代码:
//显示新增联系人信息
void student::show()
{
person *ahead=myfirst;
while(ahead!=NULL)
{
cout<<"================================================="<<endl;
cout<<" 姓名:"<<ahead->getname()<<" 称谓:"<<ahead->getchengwei()<<endl;
cout<<" 电话:"<<ahead->getphone()<<" 邮编:"<<ahead->getyoubian()<<endl;
cout<<" 住址:"<<ahead->getzhuzhi()<<" 学校:"<<ahead->getu()<<endl;
cout<<" 专业:"<<ahead->getmajor()<<" 班级:"<<ahead->getbanji()<<endl;
cout<<"================================================="<<endl;
ahead=ahead->getnext();
}
}
(3)删除联系人
详细代码:
//删除联系人信息
bool student::deleteperson( )
{ char tmpname[20];
person *ahead=myfirst;
person *follow=ahead;
cout<<"请输入要删除联系人姓名:";
cin>>tmpname;
if(ahead==NULL)
{ cout<<"无联系人可以删除"; return false; }
else if(strcmp(ahead->getname(),tmpname)==0)
{ myfirst=myfirst->getnext();
delete ahead;
cout<<"该联系人已删除!"<<endl;
return true;}
else
{ ahead=ahead->getnext();
while(ahead!=NULL)
{ if(strcmp(ahead->getname(),tmpname)==0)
{ follow->setnext(ahead->getnext());
cout<<"该联系人已删除!"<<endl;
delete ahead;
return true; }
follow=ahead;
ahead=ahead->getnext();
}
cout<<"要删除的联系人不存在,无法删除!"<<endl;
return false;
}
}
(4)修改信息
详细代码:
//修改联系人信息
bool student::modify()
{ char tmpname[20];
person *ahead=myfirst;
person *follow=ahead;
cout<<"请输入要修改的联系人姓名:";
cin>>tmpname;
if(ahead==NULL)
{ cout<<"通讯录无此人!"<<endl; return false; }
else
{ while(ahead!=NULL)
{
if(strcmp(ahead->getname(),tmpname)==0)
{ ahead->output();
int i;
char temp[30];
cout<<"请选择要修改的联系人信息:"<<endl;
cout<<"1:姓名 2:称谓 3:电话 4:邮编 5:住址 6:学校 7:专业 8:班级"<<endl;
cout<<" 请选择(1~6)中的选项:";
in>>i;
switch(i)
{
case 1:{ cout<<"输入修改姓名:";cin>>temp;strcpy(ahead->getname(),temp); }; break;
case 2:{ cout<<"输入修改称谓:";cin>>temp;strcpy(ahead->getchengwei(),temp); };break;
case 3:{ cout<<"输入修改电话:";cin>>temp;strcpy(ahead->getphone(),temp); };break;
case 4:{ cout<<"输入修改邮编:";cin>>temp;strcpy(ahead->getyoubian(),temp); };break;
case 5:{ cout<<"输入修改住址:";cin>>temp;strcpy(ahead->getzhuzhi(),temp);};break;
case 6:{ cout<<"输入修改学校:";cin>>temp;strcpy(ahead->getu(),temp); };break;
case 7:{ cout<<"输入修改专业:";cin>>temp;strcpy(ahead->getmajor(),temp); };break;
case 8:{ cout<<"输入修改班级:";cin>>temp;strcpy(ahead->getbanji(),temp);};break;
}
return true;
}
else
{
ahead=ahead->getnext(); follow=ahead;
}
}
cout<<"通讯录没有此联系人!"<<endl;
return false;
}
}
(5)统计人数
详细代码:
//统计新增联系人数
void student::count( )
{ int amount=0;
person *ahead=myfirst;
person *follow=ahead;
if(ahead==NULL)
cout<<"通讯录尚无联系人!"<<endl;
else
{
{ while(ahead!=NULL)
{
ahead=ahead->getnext();
amount++;
}
cout<<"通讯录共增加联系人:"<<amount<<endl;
} }}
(6)查找联系人(专业、姓名)
详细代码:
//按姓名查询联系人信息
bool student::findname( )
{
char tmpname[20];
person *ahead=myfirst;
person *follow=ahead;
cout<<"请输入联系人的姓名:";
cin>>tmpname;
if(ahead==NULL)
{ cout<<"通讯录无此人!"<<endl; return false; }
else
{
while(ahead!=NULL)
{
if(strcmp(ahead->getname(),tmpname)==0)
{ ahead->output(); return true; }
else
{ follow=ahead; ahead=ahead->getnext(); }
}
cout<<"通讯录无此人!"<<endl;
return false;
}
}
//按专业查询联系人信息
bool student::findmajor( )
{
char tmpname[20];
person *ahead=myfirst;
person *follow=ahead;
cout<<"请输入联系人的专业:";
cin>>tmpname;
if(ahead==NULL)
{ cout<<"通讯录无此人!"<<endl; return false; }
else
{
while(ahead!=NULL)
{
if(strcmp(ahead->getmajor(),tmpname)==0)
{ ahead->output(); return true; }
else
{ follow=ahead; ahead=ahead->getnext(); }
}
cout<<"通讯录无此人!"<<endl;
return false;} }
(7)显示所有联系人
详细代码:
//显示所有联系人信息
void student::showall()
{
char name1[20]; char chengwei1[20];char phone1[20];
char youbian1[20]; char zhuzhi1[20];
char u1[20];char major1[20];char banji1[20];
ifstream fin("person.txt",ios::in);
while(fin.good())
{ fin>>name1>>chengwei1>>phone1>>youbian1>>zhuzhi1>>u1>>major1>>banji1;
if(fin.get()!=EOF)
output(name1,chengwei1,phone1,youbian1,zhuzhi1,u1,major1,banji1);}
fin.close();cout<<endl<<"文件中的通讯录联系人信息已加载!"<<endl;}
三、 系统调试分析、存在问题与不足
该系统已具备完成基本操作的功能,其不足为对于录入整理后的保存入文件(person.txt)的联系人信息不易修改。
四、 总结与体会
通过这次课程设计,使我对C++程序设计有了更深层次的认识和理解,让我 将理论知识和实践结合起来,懂得了灵活的运用所学的知识。同时我也认识到,只要自己肯努力有耐心,愿意去付出,去钻研,就一定能够品尝到甜蜜的果实。
五、 附录
//main.cpp
#include"person.h"
void main()
{
student s;
int i;
while(1)
{ cout<<"===============================欢迎进入通讯录管理系统========================="<<endl;
cout<<" 1. 增加联系人信息 "<<endl;
cout<<" 2. 按姓名查询联系人信息 "<<endl;
cout<<" 3. 按专业查询联系人信息 "<<endl;
cout<<" 4. 修改联系人信息 "<<endl;
cout<<" 5. 删除联系人信息 "<<endl;
cout<<" 6. 统计新增联系人数 "<<endl;
cout<<" 7. 显示新增联系人信息 "<<endl;
cout<<" 8. 联系人信息存盘 "<<endl;
cout<<" 9. 显示所有联系人信息 "<<endl;
cout<<" 10. 退出系统 "<<endl;
cout<<"=============================================================================="<<endl;
cout<<"请选择上面的选项(1~10):"<<endl;
cin>>i;
switch(i)
{
case 1:s.add(); break;
case 2:s.findname();break;
case 3:s.findmajor();break;
case 4:s.modify(); break;
case 5:s.deleteperson(); break;
case 6:s.count(); break;
case 7:s.show();break;
case 8:s.save();break;
case 9:s.showall(); break;
case 10:exit(1);break;
}
}
}
//person.h
#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;
//person类的定义
class person
{
protected:
//数据成员定义
char name[20];
char chengwei[20];
char phone[20];
char youbian[20];
char zhuzhi[20];
char u[20];
char major[20];
char banji[20];
person *mynext;
public:
//构造函数定义
person();
person(char name1[],char chengwei1[],char phone1[],char youbian1[],char zhuzhi1[],char u1[],char major1[],char banji1[]);
person(char name1[],char chengwei1[],char phone1[],char youbian1[],char zhuzhi1[],char u1[],char major1[],char banji1[],person *next);
//析构函数
~person(){}
char *getu();
char *getmajor();
char *getbanji();
char *getyoubian();
char *getzhuzhi();
char *getname() ;
char *getchengwei() ;
char *getphone();
person *getnext();
void setnext(person *next);
void output(); //两个输出函数,用于重载
void output(char name1[],char chengwei1[],char phone1[],char youbian1[],char zhuzhi1[],char u1[],char major1[],char banji1[]);
};
//student类的定义
class student:public person
{
private:
person *myfirst; //指向person中结点的指针
public:
//定义构造函数
student();
student(char name1[],char chengwei1[],char phone1[],char youbian1[],char zhuzhi1[],char u1[],char major1[],char banji1[]);
~student(){}
void add(); //输入新联系人信息
void save(); //联系人信息存盘
void insert(char name1[],char chengwei1[],char phone1[],char youbian1[],char zhuzhi1[],char u1[],char major1[],char banji1[]);
//插入联系人
bool findmajor(); //按专业查询联系人信息
bool findname( ); //按姓名查询联系人信息
bool modify(); //修改联系人信息
bool deleteperson( ); //删除联系人信息
void count(); //统计新增联系人数
void show(); //显示新增联系人信息
void showall(); //显示所有联系人信息
};
//person.cpp
#include"person.h"
//person无参构造函数初始化
person::person()
{
strcpy(name,"+++");
strcpy(chengwei,"+++");
strcpy(phone,"+++");
strcpy(youbian,"+++");
strcpy(zhuzhi,"+++");
strcpy(u,"+++");
strcpy(major,"+++");
strcpy(banji,"+++");
mynext=NULL;
}
//person有参构造函数初始化
person::person(char name1[],char chengwei1[],char phone1[],char youbian1[],char zhuzhi1[],char u1[],char major1[],char banji1[])
{
strcpy(name,name1);
strcpy(chengwei,chengwei1);
strcpy(phone,phone1);
strcpy(youbian,youbian1);
strcpy(zhuzhi,zhuzhi1);
strcpy(u,u1);
strcpy(major,major1);
strcpy(banji,banji1);
mynext=NULL;
}
//person有参构造函数初始化
person::person(char name1[],char chengwei1[],char phone1[],char youbian1[],char zhuzhi1[],char u1[],char major1[],char banji1[],person *next)
{
strcpy(name,name1);
strcpy(chengwei,chengwei1);
strcpy(phone,phone1);
strcpy(youbian,youbian1);
strcpy(zhuzhi,zhuzhi1);
strcpy(u,u1);
strcpy(major,major1);
strcpy(banji,banji1);
mynext=next;
}
char * person::getu() {return u;}
char * person::getbanji() {return banji;}
char * person::getmajor() {return major;}
char * person::getname() { return name; }
char * person::getchengwei() { return chengwei; }
char * person::getphone() { return phone; }
char * person::getyoubian() { return youbian; }
char * person::getzhuzhi() { return zhuzhi; }
void person::setnext(person *next) { mynext=next; }
person *person::getnext() { return mynext; }
//联系人输出函数
void person::output()
{
cout<<"================================================="<<endl;
cout<<" 姓名:"<<name<<" 称谓:"<<chengwei<<endl;
cout<<" 电话:"<<phone<<" 邮编:"<<youbian<<endl;
cout<<" 住址:"<<zhuzhi<<" 学校:"<<u<<endl;
cout<<" 专业:"<<major<<" 班级:"<<banji<<endl;
cout<<"================================================="<<endl;
}
void person::output(char name1[],char chengwei1[],char phone1[],char youbian1[],char zhuzhi1[],char u1[],char major1[],char banji1[])
{
strcpy(name,name1);
strcpy(chengwei,chengwei1);
strcpy(phone,phone1);
strcpy(youbian,youbian1);
strcpy(zhuzhi,zhuzhi1);
strcpy(u,u1);
strcpy(major,major1);
strcpy(banji,banji1);
cout<<"================================================="<<endl;
cout<<" 姓名:"<<name<<" 称谓:"<<chengwei<<endl;
cout<<" 电话:"<<phone<<" 邮编:"<<youbian<<endl;
cout<<" 住址:"<<zhuzhi<<" 学校:"<<u<<endl;
cout<<" 专业:"<<major<<" 班级:"<<banji<<endl;
cout<<"================================================="<<endl;}
//student类无参构造函数的实现
student::student ( )
{ myfirst=NULL; }
//student类有参构造函数的实现
student::student(char name1[],char chengwei1[],char phone1[],char youbian1[],char zhuzhi1[],char u1[],char major1[],char banji1[])
//student类带参数构造函数的实现
{myfirst=new person(name1,chengwei1,phone1,youbian1,zhuzhi1,u1,major1,banji1);
}
//联系人信息存盘
void student::save()
{ ofstream fout("person.txt",ios::app);
person *p=myfirst;
while(p) { fout<<p->getname()<<"\t"<<p->getchengwei()<<"\t"<<p->getphone()<<"\t"<<p->getyoubian()<<"\t" <<p->getzhuzhi()<<"\t"<<p->getu()<<"\t"<<p->getmajor()<<"\t"<<p->getbanji()<<endl;
p=p->getnext();
}
fout.close();
cout<<"联系人保存完成!"<<endl;}
//输入新联系人信息
void student::add()
{ char name1[20];char chengwei1[20];char phone1[20];
char youbian1[20];char zhuzhi1[20];char u1[20];char major1[20];char banji1[20];
cout<<"输入联系人姓名:"<<endl;
cin>>name1;
cout<<"输入联系人称谓:"<<endl;
cin>>chengwei1;
cout<<"输入联系人电话:"<<endl;
cin>>phone1;
cout<<"输入联系人邮编:"<<endl;
cin>>youbian1;
cout<<"输入联系人住址:"<<endl;
cin>>zhuzhi1;
cout<<"输入联系人学校:"<<endl;
cin>>u1;
cout<<"输入联系人专业:"<<endl;
cin>>major1;
cout<<"输入联系人班级:"<<endl;
cin>>banji1;
insert(name1,chengwei1,
展开阅读全文