c++课程设计报告通讯录样本.docx
《c++课程设计报告通讯录样本.docx》由会员分享,可在线阅读,更多相关《c++课程设计报告通讯录样本.docx(33页珍藏版)》请在冰豆网上搜索。
![c++课程设计报告通讯录样本.docx](https://file1.bdocx.com/fileroot1/2023-2/3/10d67851-6011-4102-897a-1022833e8872/10d67851-6011-4102-897a-1022833e88721.gif)
c++课程设计报告通讯录样本
C++程序设计课程设计报告
题目:
通讯录管理系统的设计与开发
学生姓名:
学号:
院(系):
专业:
2011年9月9日
目录
一、系统开发相关情况1
(一)开发背景1
(二)系统开发的目标1
二、系统以及需求分析1
(一)系统目标1
三、程序功能描述以及模块结构2
(一)功能模块描述及主要类描述2
(二)程序流程图3
(三)数据结构表4
四、用户使用说明与调试结果4
(一)使用说明4
(二)调试结果4
(三)优缺点分析8
五、总结8
参考文献:
9
附录:
职工信息管理系统源码(C++)9
随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。
管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。
本文介绍了在MicrosoftVisualC++6.0环境下开发一个通讯录的过程。
本系统界面友好,操作简单,比较实用。
一、系统开发相关情况
(一)开发背景
随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。
管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。
(二)系统开发的目标
为了更好地适应我校的要求,进一步提供全方位的信息服务通讯录在实施后应该能够达到以下的目标:
★能够准确地记录职工的相关信息。
★系统界面友好、操作简单易行,查询灵活方便,数据储存安全可靠。
★系统维护安全、方便、可靠,并且能够实现实用性,先进性的要求。
二、系统以及需求分析
(一)系统目标
除了前面所述,我们所开发的系统还应该具有以下功能:
⑴原始数据修改简单方便;
⑵方便的数据查询;
⑶删除数据方便简单,稳定性好;
⑷数据计算自动完成,尽量减少人工干预;
三、程序功能描述以及模块结构
(一)功能模块描述及主要类描述
模块一:
增加人员函数Add();增加通讯录基本信息。
模块二:
删除人员函数Delete();删除指定的学生的基本信息。
模块三:
修改人员函数Modify();修改指定的通讯录基本信息。
模块四:
查询人员信息函数Query();查询指定的学生信息。
模块五:
数据存盘,载入函数Save()以及Load();储存与载入基本信息。
模块六:
预览数据voidLook();预览比较详细的信息。
模块七:
删除通讯录voidDesTory();删除已载入的所有的信息。
模块八:
基础数据设置函数voidTJ();;统计男女的人数,以及总人数。
本通讯录采用了面向对象的程序设计方法。
所有的方法均以类为基础。
所涉及到的类包括:
classPerson基本员工类;该类是一个基类,设置了属于保护类的职工基本属性,以及构造函数Person(charID,char*Name,intDuty)。
可以给职工类型继承。
ClassManage管理类;该类定义了管理函数,即前文所述八个模块功能的实现方法,链表的使用也包括其中。
此类的作能在于将所有功能模块集成并定义本系统使用的主要方法。
(二)程序流程图
(三)数据结构表
序号
成员名
数据类型
长度
字段含义
1
No
string
学号
2
Name
char
20
名字
3
Sex
char
10
性别
4
Tel
string
20
联系方式
5
Age
string
年龄
表3-1数据结构表
四、用户使用说明与调试结果
(一)使用说明
这是一个关于职工信息管理系统,具有录入、输出、删除、查询、修改、保存、统计等功能,建立了一个含有学号、姓名、性别、联系方式等成员的类的变量classPerson。
已从文本录入了范例数据。
调试过程中,可按照有关提示进行相关操作:
增加通讯录按“1”键;
删除通讯录按“2”键;
修改通讯录按“3”键;
查询详细通讯录按“4”键;
保存通讯录数据设置按“5”键;
预览通讯录按“6”键;
清除通讯录按“7”键;
统计数据按“8”键。
(二)调试结果
★代码中运用了switch语句调用各子函数,数字1、2、3、4、5、6、7、8等七个数字代表不同的指令。
★系统启动时,会自动在存放该系统的磁盘根目录之下装入一个数据文件:
person.txt,调试时一个数据文件都已经写入部分数据,使用功能“6-预览通讯录”,显示如下:
★指令“n”为退回主界面,“y”代表进入查询详细信息界面:
可以按照学号、名字、电话号码查找较详细信息
★指令“2-删除通讯录”代表调用删除人员函数Delete(),要求操作者输入职工的相关ID,系统根据操作者输出的ID,找出对应的记录,然后删除该职工的信息,如果删除的是第一个结点,则p1->next,指向第二个结点;下图示范了删除第一个节点之后的显示结果:
如果删除的是第i个(0
”。
★指令“3-修改人员”代表调用修改人员函数Modify(),体统根据操作者输入的ID找到对应的记录,将新输入的数据对应地赋给要修改的各成员。
★指令“5-保存数据”表示调用存盘函数Save(),输入“Y”或者“N”以进一步操作。
★指令“8-统计”,调用TJ();函数,按照男、女统计人数:
★指令“7-清除通讯录”,调用DesTory()清除已存数据:
(三)优缺点分析
优点:
★系统中包含了输入、输出、保存、删除、查询、修改等多种功能,系统操作灵活性较强,功能较强大;
★可以随意地选择不同的指令进行操作;
★排版效果清晰明了,美观;
★操作简单方便。
缺点:
★由于该系统对数据采用文本保存方式,所以安全性不可靠。
★采用链表结构操作,不能支持超大量的数据,否则运行缓慢。
五、总结
本次设计我们选择的题目是通讯录。
因为事先的计划非常明确,所以我们在完成这个设计的过程也是比较顺利的。
在系统分析和设计的部分仍然花了比较多的时间。
模块设计部分因为涉及功能的实现,要从抽象的设计转化成实际的代码,因此对于某项功能的实现方法都思考得比较详尽。
加上在开发系统之前,我们阅读很多与本系统有相关内容的书籍以做参考,使得此次系统编写能顺利进行。
由于班里每个人都需要做一份设计,所以我们经常互相交流。
在交流的时候经常能够互相提出更好的建议。
经过对通讯录的分析与编写,我得到了很大的收获。
自主学习的必要性更是解决问题的基础。
这次设计使我重温了以前学过的各科知识,让我对C++编程有了更深刻的认识。
除了对系统作出正确的分析,实际的调查工作对系统的整体设计有着至关重要的作用。
所以在分析系统之前,我花了一些时间在公司的实际管理工作调查上。
也因为这样,如何编写代码逐渐变得明朗。
每一个功能模块经过调查后后,各个功能逐渐显露出来,然后,反复探讨,验证这项功能是否有存在的必要,是否可以改进得更好。
在这样的前提下,最后顺利完成了这份设计。
这次C++系统设计作业,提升了我分析问题的能力和思考问题的逻辑能力,更明白实际调研的重要性。
从这次设计学到的东西,相信会对我们日后的学习工作起到很大的指导作用
附录:
通讯录系统源码(C++)
#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;
};
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);//修改信息
voidQuery();//查询信息
voidTJ();//清除文件信息
voidSave();//保存数据
voidLoad();//读入数据
voidLook();//预览
voidDesTory();
voidOutput(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*p,*p2;//新结点指针
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;
//system("pause");
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:
:
Query()
{
charc;
stringID,Tel;
charName[20];
do{
cout<<"1.按学号查找2.按名字查找3.按电话号码查找4.退出查找"<cin>>c;
//system("cls");
cout<switch(c)
{
case'1':
{
cout<<"输入学号ID:
";
cin>>ID;
Find(ID);
};break;
case'2':
{
cout<<"输入姓名Name:
";
cin>>Name;
Find(Name);
};break;
case'3':
{
cout<<"输入电话号码Tel"<cin>>Tel;
Find(Tel);
};break;
case'4':
break;
default:
cout<<"输入有误请重新输入!
!
!
\n"<}
}while(c!
='1'&&c!
='2'&&c!
='3'&&c!
='4');
cout<<"\t\t\t***查找成功***\n"<cout<<"是否继续查找(Y/N)"<cin>>c;
if(toupper(c)=='Y')
{
Query();
return;
}
else
return;
system("pause");
}
voidManage:
:
Look()
{
//设置字体颜色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED|FOREGROUND_GREEN);
system("cls");
Person*p1;
intcount=0