C++课程设计通讯录.docx
《C++课程设计通讯录.docx》由会员分享,可在线阅读,更多相关《C++课程设计通讯录.docx(29页珍藏版)》请在冰豆网上搜索。
![C++课程设计通讯录.docx](https://file1.bdocx.com/fileroot1/2023-1/9/0bbf2cd8-5ee3-4f45-8d92-5ada39ee580c/0bbf2cd8-5ee3-4f45-8d92-5ada39ee580c1.gif)
C++课程设计通讯录
C++语言课程设计
学生姓名:
学号:
121404121
系(院):
信息工程学院
专业:
计算机科学与技术
设计(论文)题目:
通讯录
完成日期:
2014年1月10日
指导教师:
课程设计评估
程序
设计报告
回答问题
等级
功能完善,规范,代码量大,有难度
符合规范,内容与程序一致
完全正确
优
功能较完善,较规范,代码量较大,有一定难度
规范性较好,内容与程序一致度较好
较正确
良
功能基本完善,较规范,代码量中等,难度中等
基本符合规范,内容与程序一致度一般
基本正确
中
功能一般,不够规范,代码量小,难度小
规范性不够,内容与程序一致度不好
部分正确
及格
功能一般,不规范,代码量小,难度小
不符合规范,内容与程序不一致
错误
不及格
注:
“程序”部分和“设计报告”部分的评分是在“回答问题”评分的基础上进行的。
1.课程设计目的........................................1
2.课程设计内容........................................1
3.总体设计............................................1
4.详细设计............................................2
5.运行结果............................................6
6.程序调试............................................9
7.编程体会............................................10
一、课程设计目的
(1)通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
(2)通过课程设计,进一步掌握C++及类和对象。
掌握类的特点并熟练类的封装、继承和多态。
(3)通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。
(4)通过课程设计,培养C++语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个中小型系统。
(5)通过课程设计,加强了自己的程序分析能力,同时让自己对C++有了更深刻的了解。
二、课程设计内容
此系统提供对通讯录信息的录入、编辑、查找、统计等功能。
具体功能实现如下:
(1)信息录入、添加:
实现人员通讯录信息的录入、添加功能。
(2)信息存储:
能将录入的信息以文件形式加以保存。
(3)编辑功能:
对指定人员的通讯录信息进行删除或修改等功能,也可对所有录入的信息进行一次性删除。
(4)信息浏览功能:
实现对全部人员的通讯录信息浏览及详细查看。
(5)查询功能:
实现按学号查询、按姓名查询通讯录信息的功能。
(6)统计功能:
实现对男生、女生人数及总人数的统计功能。
(7)系统以菜单方式工作,界面清晰易于操作。
三、总体设计
本系统的功能模块如下图
(1)所示,主要有以下模块:
(1)课程名称界面:
在主函数intmain()中,实现课程设计名称以及作者的显示。
(2)主菜单界面:
在主函数intmain()中,实现系统主菜单的显示。
(3)通讯录信息录入:
构造函数voidAdd(),实现学生通讯录信息的录入及显示。
并通过调用函数voidCount(),实现对学生简历信息的添加录入以及对学生总数的统计。
(4)通讯录信息修改:
构造函数voidModify(stringID),实现对需要修改通讯录信息的学生的查找,并实现通讯录信息修改界面的显示并对其简历信息进行修改。
(5)通讯录信息查询:
构造函数voidSearch(),实现查询界面的显示。
并通过对按学号查询函数voidFind(stringID)、按姓名查询函数voidFind(charName[20])的调用,实现相应的通讯录信息的查询。
(6)通讯录信息删除:
构造函数voidDelete(),实现对指定学生的通讯录信息的删除。
(7)通讯录信息浏览:
构造函数voidLook(),实现通讯录信息粗略浏览界面的显示。
并通通讯录查询函数voidsearch()的调用,实现相应的通讯录详细信息的浏览。
(8)统计男女人数:
构造函数voidCount(),实现对不同性别的人数及总人数统计。
(9)通讯录保存:
构造函数voidSave(),实现将信息保存到文件。
图
(1)
四、详细设计
(1)数据结构设计
本程序用到的数据结构主要有:
指针、链表、类、文件等。
先创建一个类型为Person的基类,其成员为人员的通讯录信息,再创建一个继承类Manage实现各种功能。
然后通过对指针、链表、文件等数据结构的操作,实现对通讯录信息的录入,插入,存盘,查询,浏览,删除,修改等一系列操作。
(2)模块接口声明
1.所有函数模块声明如下
voidFind(charName[20]);//按姓名查找
voidFind(stringID);//按编号查找
voidAdd();//添加加信息
voidDelete();//删除信息
voidModify(stringID);//修改信息
voidSearch();//查询信息
voidCount();//统计信息
voidSave();//保存数据
voidLoad();//读入数据
voidLook();//预览
voidDeAll();//删除通讯录
voidOutput(Person*p)//输出信息
2.并定义了一个全局变量
stringID;//(全局变量)具有唯一性
3.主要模块的实现
系统以主函数intmain()为入口,首先·1通过system("colorf0");将文本颜色置为黑色,背景颜色置为白色。
在主函数intmain()中,显示课程设计名称,显示系统欢迎界面,进入主菜单界面。
系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作。
1 以下是主菜单的流程图:
图
(2)
2 以下为录入信息的实现:
N
Y
N
Y
N
Y
N
Y
Y
N
图(3)
3 以下为按学号查询的实现
图(4)
4 以下为统计模块的实现
图(5)
五、运行结果
(1)主菜单界面:
图(6)
输入功能选择,系统自动进入相应功能界面。
(2)信息录入界面:
图(7)
录入各种信息。
(3)信息浏览界面:
图(8)
可预览部分信息,也可查询详细信息。
(4)信息修改界面:
图(9)
可分别修改各类信息。
(5)信息清除界面:
图(10)
清除全部信息时会有警告。
七、编程体会
经过对通讯录的分析与编写,我得到了很大的收获。
自主学习的必要性更是解决问题的基础。
这次设计使我重温了以前学过的各科知识,让我对C++编程有了更深刻的认识。
这次我所做的通讯录系统中包含了输入、输出、保存、删除、查询、修改等多种功能,系统操作灵活性较强,功能较强大;可以随意地选择不同的指令进行操作;排版效果清晰明了,美观;由于该系统对数据采用文本保存方式,所以安全性不可靠;采用链表结构操作,不能支持超大量的数据,否则运行缓慢。
通过这次课程设计,我了解到学习c++需要有活跃的思维,灵活运用已有的知识,对于程序更是要有相当的耐心去调试,要有探索的精神,不断钻研,不断思考。
这次C++系统设计作业,提升了我分析问题的能力和思考问题的逻辑能力,更明白实际调研的重要性。
从这次设计学到的东西,相信会对我们日后的学习工作起到很大的指导作用。
八、源程序
/////////////////////////////////////////////////
//////通讯录///////////////////
/////计科120121殷学梅///////////////////////
/////////////////////////////////////////////////
#include
#include
#include
#include
#include//#include
usingnamespacestd;
stringID;//(全局变量)具有唯一性
classPerson
{
protected:
stringNo;//学号
stringAge;//年龄
charName[20];//姓名
charSex[10];//性别
stringTel;//联系方式
Person*next;
public:
Person(stringID,char*Name,char*Sex,stringAge,stringTel)//构造函数
{
strcpy(this->Name,Name);
strcpy(this->Sex,Sex);
this->Tel=Tel;
this->No=ID;
this->Age=Age;
}
friendclassManage;//类Manage是类Person的一个友元类,类Manage中的所有成员函数为类Person的友元函数
};
classManage
{
private:
Person*person;
public:
Manage()//构造函数
{
person=0;
Load();//数据读入
}
~Manage()
{
Person*p;
p=person;
while(p)
{
p=p->next;
deleteperson;
person=p;
}
person=0;
}
voidFind(charName[20]);//按姓名查找
voidFind(stringID);//按编号查找
voidAdd();//添加加信息
voidDelete();//删除信息
voidModify(stringID);//修改信息
voidSearch();//查询信息
voidCount();//统计信息
voidSave();//保存数据
voidLoad();//读入数据
voidLook();//预览
voidDeAll();//删除通讯录
voidOutput(Person*p);//预览信息
};
voidManage:
:
Output(Person*p)
{
cout<<"\t\t学号:
"<No<cout<<"\t\t姓名:
"<Name<cout<<"\t\t性别:
"<Sex<cout<<"\t\t年龄:
"<Age<cout<<"\t\t联系电话:
"<Tel<cout<}
voidManage:
:
Add()
{
system("cls");
Person*p2;//新结点指针
Person*p;//新结点指针
stringNo,Age,Tel;
charName[20],Sex[10];
charc;
cout<<"\n**新增学生通讯录**\n";//输入学生信息
cout<<"输入学号:
\t";
cin>>No;
cout<Person*p1;//指向头结点
p1=person;
while(p1)
{
if(p1->No==No)
{
break;
}
else
{
p1=p1->next;
}
}
if(p1!
=NULL)
{
cout<<"该学号已存在,是否修改该学生信息(Y/N)"<cin>>c;
if(toupper(c)=='Y')
{
cout<<"该学生信息为:
"<Find(No);
cout<Modify(No);//调用修改函数
return;
}
else
return;
}
cout<<"输入姓名:
\t";
cin>>Name;
cout<cout<<"输入性别:
\t";
cin>>Sex;
cout<cout<<"输入年龄:
\t";
cin>>Age;
cout<cout<<"输入联系方式:
\t";
cin>>Tel;
cout<p=newPerson(No,Name,Sex,Age,Tel);
p->next=0;//学生结点加入链表
if(person)//若已经存在结点
{
p2=person;
while(p2->next)//查找尾结点
{
p2=p2->next;
}
p2->next=p;//连接
}
else//若不存在结点(表空)
{
person=p;//连接
}
system("cls");
cout<<"\t\t\t***添加成功***\n"<cout<<"是否继续添加(Y/N)"<cin>>c;
if(toupper(c)=='Y')
{
Add();
return;
}
else
return;
}
voidManage:
:
Delete()//删除人员
{
system("cls");
charc;
stringNo;
cout<<"\n**删除信息**\n";
cout<<"输入要删除的学生ID:
\t";
cin>>No;
cout<Person*p1,*p2;
p1=person;
while(p1)
{
if(p1->No==No)
break;
else
{
p2=p1;
p1=p1->next;
}
}//删除结点
if(p1!
=NULL)//若找到结点,则删除
{
cout<<"所要删除的学生的信息如下:
\n"<Output(p1);
cout<<"确定是否删除(Y/N):
";
cin>>c;
if(toupper(c)!
='Y')
return;
if(p1==person)//若要删除的结点是第一个结点
{
person=p1->next;
deletep1;
}
else//若要删除的结点是后续结点
{
p2->next=p1->next;
deletep1;
}
cout<<"\t\t***删除成功***\n";
cout<<"是否继续删除(Y/N)"<cin>>c;
if(toupper(c)=='Y')
{
Delete();
return;
}
else
{
return;
}
}
else//未找到结点
{
cout<<"未找到该学生!
\n";
}
getch();
}
voidManage:
:
Modify(stringID)
{
Person*p1;
charc;
p1=person;
while(p1)
{
if(p1->No==ID)
break;
else
{
p1=p1->next;
}
}
if(p1!
=NULL)//若找到结点
{
system("cls");
cout<<"所要修改的学生的信息如下:
\n"<Output(p1);
do
{
cout<<"1.修改姓名2.修改性别3.修改年龄4.修改联系方式5.退出修改\n"<cout<<"请选择(1-5)要修改的信息\n"<cin>>c;
if(c!
='5')
cout<<"请输入新的信息:
";
switch(c)
{
case'1':
cin>>p1->Name;
break;
case'2':
cin>>p1->Sex;
break;
case'3':
cin>>p1->Age;
break;
case'4':
cin>>p1->Tel;
break;
default:
break;
}
}
while(c!
='5');
system("cls");
cout<<"\t***修改成功***\n"<cout<<"是否继续修改(Y/N):
"<cin>>c;
if(toupper(c)=='Y')
{
cout<<"请输入要修改人员的ID:
";
cin>>ID;
cout<Modify(ID);
return;
}
else
return;
}
else//未找到结点
cout<<"未找到该学生!
\n";
getch();//暂停
}
voidManage:
:
Save()//数据写入到文件
{
ofstreamfPerson("Person.txt",ios:
:
out);//文件以输出方式打开(内存数据输出到文件)
charc;
cout<<"\n保存数据,是否继续?
[Y/N]:
";
cin>>c;
if(toupper(c)!
='Y')
return;
Person*p=person;
while(p)
{
fPerson<No<<""<Name<<""<Sex<<""<Age<<""<Tel<p=p->next;
}
fPerson.close();
cout<<"\n保存成功...\n";
system("pause");//暂停程序的退出
}
voidManage:
:
Load()//数据读入
{
ifstreamfPerson;
Person*p=person;
stringNo,Age,Tel;
charName[20],Sex[10];
fPerson.open("person.txt",ios:
:
in);//文件以输入方式打开(文件数据输入到内存)
fPerson>>No>>Name>>Sex>>Age>>Tel;
while(fPerson.good())
{
p=newPerson(No,Name,Sex,Age,Tel);
p->next=0;//员工结点加入链表
if(person)//若已经存在结点
{
Person*p2;
p2=person;
while(p2->next)//查找尾结点
{
p2=p2->next;
}
p2->next=p;//连接
}
else//若不存在结点(表空)
{
person=p;//连接
}
fPerson>>No>>Name>>Sex>>Age>>Tel;
}
fPerson.close();
}
voidManage:
:
Find(stringID)
{
Person*p1;
p1=person;
while(p1)
{
if(p1->No==ID)
break;
else
{
p1=p1->next;
}
}
if(p1!
=NULL)
{
Output(p1);
}
else
cout<<"未找到该学生"<}
voidManage:
:
Find(charName[20])
{
Person*p1;
intcount=0;
p1=person;
while(p1)
{
if(strcmp(p1->Name,Name)==0)
{
count++;
Output(p1);
}
p1=p1->next;
}
if(count)
{
cout<<"\t查询成功!
!
!
"<cout<<"\n共找到"<}
else
cout<<"\n\t\t未找到该学生!
!
!
\n"<}
voidManage:
:
Search()
{
charc;
stringID,Tel;
charName[20];
do{
cout<<"1.按学号查找2.按名字查找3.退出查找"<cin>>c;
cout<switch(c)
{
case'1':
{
cout<<"输入学号ID:
";
cin>>ID;
Find(ID);
};
break;
case'2':
{
cout<<"输入姓名Name:
";
cin>>Name;
Find(Name);
};
break;
case'3':
{
break;
}
default:
{
cout<<"输入有误请重新输入!
!
!
\n"<