大数据结构CC++学生通讯录管理系统Word文档格式.docx
《大数据结构CC++学生通讯录管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《大数据结构CC++学生通讯录管理系统Word文档格式.docx(38页珍藏版)》请在冰豆网上搜索。
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<
iostream>
string>
conio.h>
iomanip>
fstream>
windows.h>
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结束通讯录的建立"
endl<
----------------------------"
endl;
while(!
flag)
{
cout<
编号:
;
cin>
>
NUM;
if(NUM!
="
0"
)
{
p=newListNode;
p->
data.num=NUM;
cout<
姓名:
cin>
p->
data.name;
性别:
data.sex;
电话:
data.phone;
地址:
data.addr;
next=head->
next;
head->
next=p;
-------------------"
}
else
system("
cls"
);
break;
}
3.3.5析构函数释放空间
StudentRecords:
~StudentRecords()
ListNode*p,*q;
p=head;
q=p->
deletep;
while(q)
p=q;
q=p->
deletep;
3.3.6通讯录的添加
Add()
boolflag=true;
while(flag)
p=newListNode;
分别输入编号,姓名,性别,电话,地址:
data.num;
p->
head->
是否继续添加(Y/N):
charYN;
YN;
system("
if(YN=='
Y'
||YN=='
y'
)flag=true;
elseflag=false;
3.3.7通讯录的查询
Check()
inti;
boolflag1,flag2,flag3,flag;
flag=true;
charYN='
stringNAME;
if(!
next)
通信录为空!
while(YN=='
{
intj=0;
flag3=false;
cout<
请选择查询的方式(1编号,2姓名):
cin>
i;
switch(i)
{
case1:
cout<
请输入编号:
cin>
break;
case2:
请输入姓名:
NAME;
default:
输入错误,请重新输入!
flag3=true;
}
if(!
flag3)
p=head->
flag1=false;
while(p)
{
flag2=false;
switch(i)
{
case1:
if(NUM==p->
data.num){flag2=flag1=true;
q=p;
p=p->
case2:
if(NAME==p->
data.name){flag2=flag1=true;
default:
}
if(flag2)
if(j==0)
查询到学生信息如下:
cout<
q->
data.num<
data.name<
data.sex<
data.phone<
data.addr<
j++;
}
if(!
flag1)cout<
查无此人!
cout<
共查询到"
j<
条记录..."
是否继续查询(Y/N):
cin>
system("
if(YN=='
elseflag=false;
}
3.3.8通讯录的删除
Delete()
boolflag,flag1;
flag1=true;
while(flag1)
while(YN=='
inti=0;
flag=false;
p=head;
q=p->
if(!
q)
通讯录已为空,按任意键返回主界面..."
while(chara=getch())
return;
输入删除编号:
while(q)
if(NUM==q->
data.num)
if(i==0)cout<
删除学生信息如下:
-----------------"
p->
next=q->
deleteq;
flag=true;
i++;
q=p->
continue;
else{p=p->
flag){cout<
if(p)
共删除"
i<
是否继续删除(Y/N):
system("
if(YN=='
)flag1=true;
elseflag1=false;
3.3.9通讯录的输出
PrintList()
ListNode*p,*q,*s,*Max,*Min,*first;
intcount=0;
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"
┃★通讯录的全部信息★┃"
┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫"
┃编号姓名性别电话地址┃"
┃----------------------------------------------------------------------------┃"
if(head->
first=newListNode;
s=first;
while(head->
Min=head->
next;
Max=Min->
q=head;
while(Max&
&
Min)
if(Max->
data.num<
Min->
data.num)
Min=Max;
Max=Max->
elseMax=Max->
while(q->
next!
=Min)q=q->
q->
next=Min->
s->
next=Min;
s=Min;
next=NULL;
deletehead;
head=first;
p=head->
while(p)
┃"
setw(8)<
data.num
<
setw(17)<
data.name
setw(13)<
data.sex
setw(16)<
data.phone
setw(21)<
┃"
p=p->
count++;
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"
elsecout<
┃通讯录为空!
共"
count<
按任意键返回主界面..."
while(chara=getch())
return;
3.3.10读取文件信息
Preservation_file()
ofstreamoutfile("
RD.txt"
ios:
out);
if(!
outfile)
cerr<
openerror!
exit
(1);
ListNode*p;
p=head->
while(p)
outfile<
setw(22)<
p=p->
记录已保存..."
outfile.close();
3.3.11主函数
intmain()
system("
color5f"
StudentRecordsRD;
intn=1;
fstreamoutfile("
out|ios:
app);
abort();
outfile.close();
RD.cin_file("
while(n)
intm;
┃★欢迎进入学生通讯录管理系统★┃"
┃(*_*)(*_*)(*_*)★1→通讯录的建立★(*_*)(*_*)(*_*)┃"
┃(*_*)(*_*)(*_*)★2→通讯录的添加★(*_*)(*_*)(*_*)┃"
┃(*_*)(*_*)(*_*)★3→通讯录的查询★(*_*)(*_*)(*_*)┃"
┃(*_*)(*_*)(*_*)★4→通讯录的删除★(*_*)(*_*)(*_*)┃"
┃(*_*)(*_*)(*_*)★5→通讯录的输出★(*_*)(*_*)(*_*)┃"
┃(*_*)(*_*)(*_*)★6→通讯录的保存★(*_*)(*_*)(*_*)┃"
┃(*_*)(*_*)(*_*)★0→退出管理系统★(*_*)(*_*)(*_*)┃"
功能调用(0~6):
m;
switch(m)
case1:
RD.Build();
case2:
RD.Add();
case3:
RD.Check();
case4:
RD.Delete();
case5:
RD.PrintList();
case6:
RD.Preservation_file();
case0:
n=0;
★感谢您的使用,再见!
★"
default:
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”结束删除:
当通讯录中没有任何记录时系统提示如下可