大数据结构CC++学生通讯录管理系统.docx
《大数据结构CC++学生通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《大数据结构CC++学生通讯录管理系统.docx(38页珍藏版)》请在冰豆网上搜索。
大数据结构CC++学生通讯录管理系统
第1部分题目及功能说明
1.1设计目的
通过本课程设计的实践,全面总结课程学习中的数据类型、程序结构、数组、函数、指针、结构体等基本概念、使用方法。
培养编写计算机应用程序的能力。
通过本次实训使自己在实际应用中熟悉并掌握编程方法,并具有初步的编程能力。
1.2设计题目
学生通讯录管理系统
功能:
新建、添加、查询、删除、输出、保存、退出。
1.3系统功能简介
1.通讯录的建立
2.通讯录的添加
3.通讯录的查询
4.通讯录的删除
5.通讯录的输出
6.通讯录的保存
0.退出管理系统
第2部分环境要求
2.1硬件要求
电脑型号技嘉台式电脑
操作系统Windows8专业版64位(DirectX11)
处理器AMDA8-3870APUwithRadeonHDGraphics四核
主板技嘉A55M-DS2(AMDK12)
内存8GB(金士顿DDR31600MHz)
主硬盘希捷ST500DM002-1BD142(500GB/7200转/分)
显卡ATIRadeonHD6550D(512MB/ATI)
显示器飞利浦PHLC0A9227E4Q(21.7英寸)
声卡ATIK12高保真音频
网卡瑞昱RTL8168EPCI-EGigabitEthernetNIC/技嘉
2.2软件要求
Windows8专业版64位
MicrosoftVC++6.0
第3部分系统详述
3.1需求分析
本软件是学生通讯录管理系统,为了更好地方便大家之间的联系,更加有效地提取在程序中的每个人的信息和随时都能添加和删除信息,及时地将信息存盘和保留数据,并且为了方便使用本软件,系统分了7个备选项,功能强大,管理方便。
具体功能如下:
【新建】建立一个新的通讯录,每条记录包含编号、姓名、性别、电话、地址,输入编号为“0”时结束。
【添加】添加一条通讯录记录,包含编号、姓名、性别、电话、地址,可选择是否继续添加。
【查询】选择按编号或姓名进行查询,输出所有相符合的记录,可选择是否继续查询。
【删除】输入要删除记录的编号,删除并显示所有符合条件的记录,可选择是否继续删除。
【输出】输出通讯录的所有记录。
【保存】保存当前通讯录信息到“RD.txt”文件中。
【退出】退出通讯录管理系统。
3.2概要设计
3.2.1总体设计思路(主流程图)
为了更好地方便大家之间的联系,更加有效地管理通讯信息,本通讯录系统共设计了新建、添加、查询、删除、输出、保存、退出7个模块。
下面是设计框图:
3.2.2主函数(main())
程序采用结构化,模块化设计。
主函数是程序的入口,各模块相互独立,并且可以分块调试,均由主函数控制调用。
控制功能的实现通过执行一个while()循环语句和一个switch()分支语句。
3.2.3新建函数(voidStudentRecords:
:
Build())
本函数用于建立一个新的通讯录。
依次输入编号、姓名、性别、电话、地址添加一条记录,直到输入的编号为“0”时结束通讯录的建立。
流程图如下:
3.2.4添加函数(voidStudentRecords:
:
Add())
本函数用于添加记录,依次输入编号、姓名、性别、电话、地址添加一条记录,输入“Y/N(不区分大小写)”选择是否继续添加。
流程图如下:
3.2.5查询函数(voidStudentRecords:
:
Check())
本函数用于查询指定通讯记录。
可选择按编号或姓名进行查询,输出所有符合条件的记录,输入“Y/N(不区分大小写)”选择是否继续查询。
流程图如下:
3.2.6删除函数(voidStudentRecords:
:
Delete())
本函数用于删除指定编号的记录,并显示删除的所有记录。
输入“Y/N(不区分大小写)”选择是否继续查询。
流程图如下:
3.2.7输出函数(voidStudentRecords:
:
PrintList())
此函数用来显示当前通讯录中的所有记录。
流程图如下:
3.2.8保存函数(voidStudentRecords:
:
Preservation_file())
此函数用于保存当前通讯录信息到“RD.txt文档中”。
3.2.9读取文件信息(voidStudentRecords:
:
cin_file(char*filename))
此函数在其他函数执行过程中自动读取。
3.3详细设计
3.3.1预编译部分
#include
#include
#include
#include
#include
#include
usingnamespacestd;
3.3.2结构体框架
typedefstruct
{
stringnum;
stringname;
stringsex;
stringphone;
stringaddr;
}DataType;
typedefstructnode
{
DataTypedata;
structnode*next;
}ListNode;
typedefListNode*LinkList;
3.3.3类的定义
classStudentRecords
{
public:
StudentRecords(){head=newListNode;head->next=NULL;}
~StudentRecords();
voidBuild();
voidAdd();
voidCheck();
voidDelete();
voidPrintList();
voidcin_file(char*filename);
voidPreservation_file();
private:
LinkListhead;
};
3.3.4通讯录的建立
voidStudentRecords:
:
Build()
{
stringNUM;
boolflag=false;
ListNode*p;
cout<<"输入编号为0结束通讯录的建立"<while(!
flag)
{
cout<<"编号:
";
cin>>NUM;
if(NUM!
="0")
{
p=newListNode;
p->data.num=NUM;
cout<<"姓名:
";
cin>>p->data.name;
cout<<"性别:
";
cin>>p->data.sex;
cout<<"电话:
";
cin>>p->data.phone;
cout<<"地址:
";
cin>>p->data.addr;
p->next=head->next;
head->next=p;
cout<<"-------------------"<}
else
{
system("cls");
break;
}
}
}
3.3.5析构函数释放空间
StudentRecords:
:
~StudentRecords()
{
ListNode*p,*q;
p=head;
q=p->next;
deletep;
while(q)
{
p=q;
q=p->next;
deletep;
}
}
3.3.6通讯录的添加
voidStudentRecords:
:
Add()
{
ListNode*p;
boolflag=true;
while(flag)
{
p=newListNode;
cout<<"分别输入编号,姓名,性别,电话,地址:
"<cout<<"编号:
";
cin>>p->data.num;
cout<<"姓名:
";
cin>>p->data.name;
cout<<"性别:
";
cin>>p->data.sex;
cout<<"电话:
";
cin>>p->data.phone;
cout<<"地址:
";
cin>>p->data.addr;
p->next=head->next;
head->next=p;
cout<cout<<"是否继续添加(Y/N):
";
charYN;
cin>>YN;
system("cls");
if(YN=='Y'||YN=='y')flag=true;
elseflag=false;
}
}
3.3.7通讯录的查询
voidStudentRecords:
:
Check()
{
ListNode*p,*q;
inti;
boolflag1,flag2,flag3,flag;
flag=true;
charYN='Y';
stringNUM;
stringNAME;
while(flag)
{
if(!
head->next)
{
cout<<"通信录为空!
"<break;
}
else
{
while(YN=='Y'||YN=='y')
{
intj=0;
flag3=false;
cout<<"请选择查询的方式(1编号,2姓名):
";
cin>>i;
switch(i)
{
case1:
cout<<"请输入编号:
";cin>>NUM;break;
case2:
cout<<"请输入姓名:
";cin>>NAME;break;
default:
cout<<"输入错误,请重新输入!
"<}
if(!
flag3)
{
p=head->next;
flag1=false;
while(p)
{
flag2=false;
switch(i)
{
case1:
if(NUM==p->data.num){flag2=flag1=true;q=p;}
p=p->next;break;
case2:
if(NAME==p->data.name){flag2=flag1=true;q=p;}
p=p->next;break;
default:
break;
}
if(flag2)
{
if(j==0)
cout<<"查询到学生信息如下:
"<cout<<"编号:
"<data.num<cout<<"姓名:
"<data.name<cout<<"性别:
"<data.sex<cout<<"电话:
"<data.phone<cout<<"地址:
"<data.addr<j++;
}
}
if(!
flag1)cout<"<cout<<"共查询到"<cout<<"是否继续查询(Y/N):
";
cin>>YN;
system("cls");
if(YN=='Y'||YN=='y')flag=true;
elseflag=false;
}
}
}
}
}
3.3.8通讯录的删除
voidStudentRecords:
:
Delete()
{
ListNode*p,*q;
stringNUM;
charYN='Y';
boolflag,flag1;
flag1=true;
while(flag1)
{
while(YN=='Y'||YN=='y')
{
inti=0;
flag=false;
p=head;q=p->next;
if(!
q)
{
cout<<"通讯录已为空,按任意键返回主界面...";
while(chara=getch())
{
system("cls");
return;
}
}
cout<<"输入删除编号:
";
cin>>NUM;
while(q)
{
if(NUM==q->data.num)
{
if(i==0)cout<"<cout<"<data.num<cout<<"姓名:
"<data.name<cout<<"性别:
"<data.sex<cout<<"电话:
"<data.phone<cout<<"地址:
"<data.addr<p->next=q->next;
deleteq;
flag=true;
i++;
q=p->next;
continue;
}
else{p=p->next;q=p->next;}
}
if(!
flag){cout<<"查无此人!
"<if(p)
{
cout<cout<<"是否继续删除(Y/N):
";
cin>>YN;
system("cls");
if(YN=='Y'||YN=='y')flag1=true;
elseflag1=false;
}
}
}
}
3.3.9通讯录的输出
voidStudentRecords:
:
PrintList()
{
ListNode*p,*q,*s,*Max,*Min,*first;
intcount=0;
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓";
cout<<"┃★通讯录的全部信息★┃";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫";
cout<<"┃编号姓名性别电话地址┃";
cout<<"┃----------------------------------------------------------------------------┃";
if(head->next)
{
first=newListNode;
s=first;
while(head->next)
{
Min=head->next;Max=Min->next;q=head;
while(Max&&Min)
{
if(Max->data.numdata.num)
{
Min=Max;
Max=Max->next;
}
elseMax=Max->next;
}
while(q->next!
=Min)q=q->next;
q->next=Min->next;
s->next=Min;
s=Min;
s->next=NULL;
}
deletehead;
head=first;
p=head->next;
while(p)
{
cout<<"┃"<data.num
<data.name
<data.sex
<data.phone
<data.addr<<"┃";
p=p->next;count++;
if(p)
cout<<"┃----------------------------------------------------------------------------┃";
}
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛";
}
elsecout<<"┃通讯录为空!
┃"
<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛";
cout<cout<<"按任意键返回主界面..."<while(chara=getch())
{
system("cls");
return;
}
}
3.3.10读取文件信息
voidStudentRecords:
:
Preservation_file()
{
ofstreamoutfile("RD.txt",ios:
:
out);
if(!
outfile)
{
cerr<<"openerror!
"<exit
(1);
}
ListNode*p;
p=head->next;
while(p)
{
outfile<data.num
<data.name
<data.sex
<data.phone
<data.addr<p=p->next;
}
cout<<"记录已保存..."<<"按任意键返回主界面..."<while(chara=getch())
{
system("cls");
outfile.close();
return;
}
}
3.3.11主函数
intmain()
{
system("color5f");
StudentRecordsRD;
intn=1;
fstreamoutfile("RD.txt",ios:
:
out|ios:
:
app);
if(!
outfile)
{
cerr<<"openerror!
"<abort();
}
outfile.close();
RD.cin_file("RD.txt");
while(n)
{
intm;
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓";
cout<<"┃★欢迎进入学生通讯录管理系统★┃";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫";
cout<<"┃(*_*)(*_*)(*_*)★1→通讯录的建立★(*_*)(*_*)(*_*)┃";
cout<<"┃(*_*)(*_*)(*_*)★2→通讯录的添加★(*_*)(*_*)(*_*)┃";
cout<<"┃(*_*)(*_*)(*_*)★3→通讯录的查询★(*_*)(*_*)(*_*)┃";
cout<<"┃(*_*)(*_*)(*_*)★4→通讯录的删除★(*_*)(*_*)(*_*)┃";
cout<<"┃(*_*)(*_*)(*_*)★5→通讯录的输出★(*_*)(*_*)(*_*)┃";
cout<<"┃(*_*)(*_*)(*_*)★6→通讯录的保存★(*_*)(*_*)(*_*)┃";
cout<<"┃(*_*)(*_*)(*_*)★0→退出管理系统★(*_*)(*_*)(*_*)┃";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛";
cout<<"功能调用(0~6):
";
cin>>m;
system("cls");
switch(m)
{
case1:
RD.Build();break;
case2:
RD.Add();break;
case3:
RD.Check();break;
case4:
RD.Delete();break;
case5:
RD.PrintList();break;
case6:
RD.Preservation_file();break;
case0:
n=0;cout<<"★感谢您的使用,再见!
★"<default:
cout<<"输入错误,请重新输入!
"<}
}
return0;
}
3.4调试分析
3.4.1主界面效果图
下图为程序编译完成后运行所得界面,可以输入“0~6”进行不同功能的调用:
当输入了“0~6”之外的内容时系统提示错误并要求重新输入,如下图:
3.4.2通讯录的建立
建立一个新的通讯录,直到输入编号为“0”时结束通讯录的建立。
如下图共新建了4记录:
编号分别为:
001
002
003
004
3.4.3通讯录的添加
添加一条记录并选择是否继续添加。
如下图(左)添加了一条记录并输入“Y”继续添加,下图(右)继续添加一条记录并输入“N”结束添加:
3.4.4通讯录的删除
按编号删除通讯录中已存在的指定记录。
如下图(左)删除了一条记录并输入“Y”继续删除,下图(右)继续删除一条记录并输入“N”结束删除:
当通讯录中没有任何记录时系统提示如下可