C通讯录课程设计报告资料Word下载.docx
《C通讯录课程设计报告资料Word下载.docx》由会员分享,可在线阅读,更多相关《C通讯录课程设计报告资料Word下载.docx(33页珍藏版)》请在冰豆网上搜索。
(1)需求分析(功能设计)
本通讯录包括编辑、查找、排序、录入文件、读取文件和格式化六项总功能。
其中
编辑通讯录又包括添加联系人、修改联系人和删除联系人三项功能;
查找联系人包括“按学号查找”和“按姓名查找”两项功能;
排列联系人也包括“按姓名查找”和“按学号查找”两项功能。
联系人的具体信息包括:
学号、姓名、地址、电话、邮编、邮箱。
每执行完一项功能,按相应的提示键返回主界面。
具体功能模块图介绍:
图
(1)
图
(2)
系统流程图:
R
T
图(3)
(2)详细设计(各模块流程图)
(1)主函数:
是通过一个多分支语句switch(select)实现的,其中有的分支语句中,又包含有一个多分支语句switch(selecti)[i=1,2,3],每一个分支语句结束通过输入T/t回到界面底部,或输入R/r回到主界面。
1
2
3
4
5
6
图(4)
(2)添加联系人:
addition()函数
利用for循环,和strcmp函数进行学号的比较,当学号不为0时,开始录入信息;
当,当学号为0结束
否
是
图(5)
(3)删除联系人:
del函数()
For循环,strcmp比较,定义一个变量x,并赋值为1,如果输入的姓名与通讯录中的相同,然后就将学生的所有基本信息都赋予0,如果输入的姓名不相同,就将变量的值赋为0,再用if()判断,如果变量值为0,就输出输入姓名有错这一信息。
(4)修改联系人:
correct()函数图(6)
For循环,strcmp比较,定义一个变量,如果输入的姓名与通讯录中已有的相同,就将改序号赋给变量,输出一个修改的内容界面,然后用switch()语句,输入相应的选项,分别修改学生的基本信息。
图(7)
(5)查找联系人:
find()函数
按学号进行查找,定义三个变量x,y,x,y,z分别赋值为1,字符串比较函数,如果输入的学号与通讯录的相同,将学生数组的序号赋给变量x,z赋值为0,如果相等,将y的值赋为0,如果z的值为0,break语句,跳出整个for循环,然后执行下面的语句,输出那个序号学生的信息,如果学号不相同,说明没有此人,则输入的学号找不到。
同理按姓名查找也是这样。
图(8)
(6)按序排列:
list()函数
若按姓名排序,通过冒泡排序法,n个数从小到大排序,总共要比较n-1趟,每趟比较要比较n-1次,通过一个中间变量将两个字符串调换位置,进行排序。
现将姓名排序,然后再将对应学生的基本信息分别排序。
图(9)
(3)代码设计(函数主要代码及注释)
(1)//头文件
#include<
iostream.h>
fstream.h>
string.h>
iomanip.h>
windows.h>
(2)//结构体和类的定义
structstudent
{
charnum[12];
charname[30];
charaddress[100];
chartel[12];
charpost[7];
charemail[30];
};
classinter
private:
studentst[35];
public:
voidaddition(charnum[12],charname[30],charaddress[100],chartel[12],charpost[7],charemail[30]);
voiddel(charname[30]);
voidfind1(charnum[12]);
voidfind2(charname[30]);
voidlist1();
voidlist2();
intcorrect(charname[30]);
voidformat();
voidwrite();
voidread();
voidprint(inti);
intback();
(3)//添加联系人
voidinter:
:
addition(charnum[12],charname[30],charaddress[100],chartel[12],charpost[7],charemail[30])
intx=1;
//定义一个整型变量用于判断
for(inti=0;
i<
35;
i++)
{
if(!
strcmp(st[i].num,"
0"
))
{
strcpy(st[i].num,num);
strcpy(st[i].name,name);
strcpy(st[i].address,address);
strcpy(st[i].tel,tel);
strcpy(st[i].post,post);
strcpy(st[i].email,email);
x=0;
}
if(x==0)
break;
}
}
(4)//删除联系人
del(charname[30])
booltemp=0;
//定义一个布尔变量用于判断
strcmp(st[i].name,name))//如果姓名相同
temp=1;
strcpy(st[i].address,"
);
//将0复制给数组
strcpy(st[i].email,"
strcpy(st[i].name,"
strcpy(st[i].num,"
strcpy(st[i].post,"
strcpy(st[i].tel,"
cout<
<
"
*****删除成功!
*******"
endl;
if(!
temp)
cout<
*****查无此人!
}
}
(5)//修改联系人
intinter:
correct(charname[30])
intx;
strcmp(st[i].name,name))
x=i;
*修改内容*"
**************************"
*
(1)修改姓名:
*"
*
(2)修改学号:
*(3)修改地址:
*(4)修改邮编:
*(5)修改电话号码:
*(6)修改email:
***请选择:
***"
;
charselect;
cin>
>
select;
switch(select)//多分支语句
{
case'
1'
cout<
***输入要修改的姓名:
//选择1开始修改姓名
charname1[30];
cin>
name1;
strcpy(st[x].name,name1);
***修改成功!
***"
returnback();
break;
2'
***输入要修改的学号:
charnum1[12];
num1;
strcpy(st[x].num,num1);
3'
***输入要修改的地址:
charaddress1[100];
address1;
strcpy(st[x].address,address1);
4'
***输入要修改的邮编:
charpost1[7];
post1;
strcpy(st[x].post,post1);
5'
***输入要修改的电话号码:
chartel1[12];
tel1;
strcpy(st[x].tel,tel1);
6'
***输入要修改的email:
charemail1[30];
email1;
strcpy(st[x].email,email1);
}
return0;
(6)//按学号查找
find1(charnum[12])
strcmp(st[i].num,num))//字符串比较如果学号相同
{temp=1;
print(i);
//调用print()成员函数输出基本信息
***输入的学号查找不到!
!
(7)//按学号排序
list1()
34;
i++)//冒泡法排序
for(intj=0;
j<
34-i;
j++)
if(strcmp(st[j].num,st[j+1].num)>
0)//比较两个字符串的大小
charnum[12];
strcpy(num,st[j].num);
//将学号信息交换
strcpy(st[j].num,st[j+1].num);
strcpy(st[j+1].num,num);
strcpy(name,st[j].name);
//将姓名信息交换
strcpy(st[j].name,st[j+1].name);
strcpy(st[j+1].name,name);
strcpy(address,st[j].address);
//将地址信息交换
strcpy(st[j].address,st[j+1].address);
strcpy(st[j+1].address,address);
strcpy(tel,st[j].tel);
//将号码信息交换
strcpy(st[j].tel,st[j+1].tel);
strcpy(st[j+1].tel,tel);
strcpy(post,st[j].post);
//将邮编信息交换
strcpy(st[j].post,st[j+1].post);
strcpy(st[j+1].post,post);
strcpy(email,st[j].email);
//将邮箱信息交换
strcpy(st[j].email,st[j+1].email);
strcpy(st[j+1].email,email);
for(intk=0;
k<
k++)
if(strcmp(st[k].num,"
print(k);
(8)//导入文件
write()
inti;
ofstreamoutfile("
通讯录.txt"
ios:
out);
//打开文件
outfile)//打开文件
cerr<
open通讯录.txterror!
exit
(1);
for(i=0;
i++)//导入文件
{
outfile<
setiosflags(ios:
left)<
setw(4)<
st[i].num<
"
setw(6)<
st[i].name<
st[i].address<
setw(12)<
st[i].tel<
setw(7)<
st[i].post<
setw(15)<
st[i].email<
outfile.close();
//关闭文件
资料已保存"
(9)//读取文件
read()
ifstreaminfile("
infile)//打开文件
cerr<
exit
(1);
i<
35;
i++)//读取文件
infile>
st[i].num;
st[i].name;
st[i].address;
st[i].tel;
st[i].post;
st[i].email;
print(i);
(10)//删除全部文件
format()
strcpy(st[i].address,"
strcpy(st[i].email,"
strcpy(st[i].name,"
strcpy(st[i].num,"
strcpy(st[i].post,"
strcpy(st[i].tel,"
(11)//输出联系人
print(inti)
cout<
setw(6)
<
st[i].post
(12)//返回
back()
***退出请按T,回到主菜单请按R(不计大小写):
***"
charback;
cin>
back;
if(back=='
R'
||back=='
r'
)
return1;
else
return0;
(13)//输出菜单(自定义函数)
voiddisplay()
{cout<
***通讯录¥***"
***功能选择***:
********************************"
*
(1)通讯录编辑*"
//功能列表
*
(2)查找联系人*"
*(3)排列联系人*"
*(4)录入文件*"
*(5)读取文件*"
*(6)格式化*"
********************************"
***请选择***:
(14)//设置颜色
voidSetColor(unsignedshortForeColor=6,unsignedshortBackGroundColor=6)//给参数默认值//可以接受0/1/2个参数
HANDLEhCon=GetStdHandle(STD_OUTPUT_HANDLE);
//关于颜色的输入输出语句
SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);
(15)//主函数
intmain()
intera;
a.format();
SetColor(3,0);
top:
display();
SetColor(5,0);
charselect1;
select1;
switch(select1)
case'
*通讯录编辑*"
*****************"
*
(1)添加:
<
*
(2)删除:
*(3)修改:
SetColor(2,0);
charselect2;
cin>
select2;
switch(select2)
case'
***请输入要添加的资料:
charnum[12];
输入学号:
num;
输入姓名:
name;
输入地址:
address;
输入电话号码:
tel;
输入邮编:
post;
输入email:
email;
a.addition(num,name,address,tel,post,email);
添加成功!
charback_addition;
back_addition;
if(back_addition=='
||back_addition=='
{system("
cls"
SetColor(3,0);
gototop;
else
gotobottom;
***输入要删除人的姓名:
charname2[30];
name2;
a.del(name2);
charback_del;
back_del;
if(back_del=='
||back_del=='
{cout<
****输入有误!
*****"
gotobottom;
c