C通讯录课程设计报告资料.docx
《C通讯录课程设计报告资料.docx》由会员分享,可在线阅读,更多相关《C通讯录课程设计报告资料.docx(33页珍藏版)》请在冰豆网上搜索。
![C通讯录课程设计报告资料.docx](https://file1.bdocx.com/fileroot1/2023-1/21/7843f1f6-d83f-47bb-aa70-4a0f10b66909/7843f1f6-d83f-47bb-aa70-4a0f10b669091.gif)
C通讯录课程设计报告资料
淮海工学院计算机工程学院
课程设计报告
设计名称:
C++程序设计课程设计
姓名:
学号:
专业班级:
系(院):
计算机工程学院
设计时间:
2014.6.9——2014.6.20
设计地点:
计算机网络技术室
成绩:
指导教师评语:
签名:
年月日
1.课程设计目的
本课程设计是网络工程专业重要的实践性环节之一,是在学生学习完《C++程序设计》课程后进行的一次全面的综合练习。
本课程设计的目的和任务:
(1)巩固和加深学生对C++课程的基本知识的理解和掌握;
(2)掌握C++编程和程序调试的基本技能;(3)利用C++进行简单软件设计的基本思路和方法;(4)提高运用C++解决实际问题的能力;(5)掌握书写程序设计说明文档的能力。
2.课程设计任务与要求:
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。
以本班同学的具体数据为背景,设计一个本班同学通讯录。
实现功能:
1) 通讯录编辑(添加、删除)。
2) 按不同的项进行查找。
3) 对已存在的通讯录按不同的项排序。
4) 将通讯录写入文件
5) 从文件读入通讯录
备注:
通讯录至少应该有以下数据项:
姓名,地址,电话,邮编,E-mail。
3.课程设计说明书
(1)需求分析(功能设计)
本通讯录包括编辑、查找、排序、录入文件、读取文件和格式化六项总功能。
其中
编辑通讯录又包括添加联系人、修改联系人和删除联系人三项功能;查找联系人包括“按学号查找”和“按姓名查找”两项功能;排列联系人也包括“按姓名查找”和“按学号查找”两项功能。
联系人的具体信息包括:
学号、姓名、地址、电话、邮编、邮箱。
每执行完一项功能,按相应的提示键返回主界面。
具体功能模块图介绍:
图
(1)
图
(2)
系统流程图:
R
T
图(3)
(2)详细设计(各模块流程图)
(1)主函数:
是通过一个多分支语句switch(select)实现的,其中有的分支语句中,又包含有一个多分支语句switch(selecti)[i=1,2,3],每一个分支语句结束通过输入T/t回到界面底部,或输入R/r回到主界面。
1
1
2
3
2
1
2
3
1
2
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()语句,输入相应的选项,分别修改学生的基本信息。
1
2
4
5
6
图(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
#include
#include
#include
#include
(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)//删除联系人
voidinter:
:
del(charname[30])
{
booltemp=0;//定义一个布尔变量用于判断
for(inti=0;i<35;i++)
{
if(!
strcmp(st[i].name,name))//如果姓名相同
{
temp=1;
strcpy(st[i].address,"0");//将0复制给数组
strcpy(st[i].email,"0");
strcpy(st[i].name,"0");
strcpy(st[i].num,"0");
strcpy(st[i].post,"0");
strcpy(st[i].tel,"0");
cout<<"*****删除成功!
*******"<}
}
if(!
temp)
{
cout<<"*****查无此人!
*******"<}
}
(5)//修改联系人
intinter:
:
correct(charname[30])
{
intx;
for(inti=0;i<35;i++)
{
if(!
strcmp(st[i].name,name))
{
x=i;
cout<<"*修改内容*"<cout<<"**************************"<cout<<"*
(1)修改姓名:
*"<cout<<"*
(2)修改学号:
*"<cout<<"*(3)修改地址:
*"<cout<<"*(4)修改邮编:
*"<cout<<"*(5)修改电话号码:
*"<cout<<"*(6)修改email:
*"<cout<<"**************************"<cout<<"***请选择:
***";
charselect;
cin>>select;
switch(select)//多分支语句
{
case'1':
cout<<"***输入要修改的姓名:
***";//选择1开始修改姓名
charname1[30];
cin>>name1;
strcpy(st[x].name,name1);
cout<<"***修改成功!
***"<returnback();
break;
case'2':
cout<<"***输入要修改的学号:
***";
charnum1[12];
cin>>num1;
strcpy(st[x].num,num1);
cout<<"***修改成功!
***"<returnback();
break;
case'3':
cout<<"***输入要修改的地址:
***";
charaddress1[100];
cin>>address1;
strcpy(st[x].address,address1);
cout<<"***修改成功!
***"<returnback();
break;
case'4':
cout<<"***输入要修改的邮编:
***";
charpost1[7];
cin>>post1;
strcpy(st[x].post,post1);
cout<<"***修改成功!
***"<returnback();
break;
case'5':
cout<<"***输入要修改的电话号码:
***";
chartel1[12];
cin>>tel1;
strcpy(st[x].tel,tel1);
cout<<"***修改成功!
***"<returnback();
break;
case'6':
cout<<"***输入要修改的email:
***";
charemail1[30];
cin>>email1;
strcpy(st[x].email,email1);
cout<<"***修改成功!
***"<returnback();
break;
}
}
}
return0;
}
(6)//按学号查找
voidinter:
:
find1(charnum[12])
{
booltemp=0;
for(inti=0;i<35;i++)
{
if(!
strcmp(st[i].num,num))//字符串比较如果学号相同
{temp=1;print(i);}
//调用print()成员函数输出基本信息
}
if(!
temp)
cout<<"***输入的学号查找不到!
!
!
***"<}
(7)//按学号排序
voidinter:
:
list1()
{
for(inti=0;i<34;i++)//冒泡法排序
{
for(intj=0;j<34-i;j++)
{
if(strcmp(st[j].num,st[j+1].num)>0)//比较两个字符串的大小
{
charnum[12];
charname[30];
charaddress[100];
chartel[12];
charpost[7];
charemail[30];
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<35;k++)
{
if(strcmp(st[k].num,"0"))
print(k);
}
}
(8)//导入文件
voidinter:
:
write()
{
inti;
ofstreamoutfile("通讯录.txt",ios:
:
out);//打开文件
if(!
outfile)//打开文件
{
cerr<<"open通讯录.txterror!
"<exit
(1);
}
for(i=0;i<35;i++)//导入文件
{
outfile<:
left)<}
outfile.close();//关闭文件
cout<cout<<"资料已保存"<}
(9)//读取文件
voidinter:
:
read()
{
ifstreaminfile("通讯录.txt",ios:
:
out);//打开文件
if(!
infile)//打开文件
{
cerr<<"open通讯录.txterror!
"<exit
(1);
}
for(inti=0;i<35;i++)//读取文件
{
infile>>st[i].num;
infile>>st[i].name;
infile>>st[i].address;
infile>>st[i].tel;
infile>>st[i].post;
infile>>st[i].email;
print(i);
}
}
(10)//删除全部文件
voidinter:
:
format()
{
for(inti=0;i<35;i++)
{
strcpy(st[i].address,"0");
strcpy(st[i].email,"0");
strcpy(st[i].name,"0");
strcpy(st[i].num,"0");
strcpy(st[i].post,"0");
strcpy(st[i].tel,"0");
}
}
(11)//输出联系人
voidinter:
:
print(inti)
{
cout<<<<""<}
(12)//返回
intinter:
:
back()
{
cout<<"***退出请按T,回到主菜单请按R(不计大小写):
***"<charback;
cin>>back;
if(back=='R'||back=='r')
return1;
else
return0;
}
(13)//输出菜单(自定义函数)
voiddisplay()
{cout<<"***通讯录¥***"<cout<<"***功能选择***:
"<cout<<"********************************"<cout<<"*
(1)通讯录编辑*"<cout<<"*
(2)查找联系人*"<cout<<"*(3)排列联系人*"<cout<<"*(4)录入文件*"<cout<<"*(5)读取文件*"<cout<<"*(6)格式化*"<cout<<"********************************"<cout<<"***请选择***:
";
}
(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;
cin>>select1;
switch(select1)
{
case'1':
cout<<"*通讯录编辑*"<cout<<"*****************"<cout<<"*
(1)添加:
*"<cout<<"*
(2)删除:
*"<cout<<"*(3)修改:
*"<cout<<"*****************"<SetColor(2,0);
cout<<"***请选择***:
";
charselect2;
cin>>select2;
switch(select2)
{
case'1':
cout<<"***请输入要添加的资料:
***"<charnum[12];
charname[30];
charaddress[100];
chartel[12];
charpost[7];
charemail[30];
cout<<"输入学号:
";
cin>>num;
cout<<"输入姓名:
";
cin>>name;
cout<<"输入地址:
";
cin>>address;
cout<<"输入电话号码:
";
cin>>tel;
cout<<"输入邮编:
";
cin>>post;
cout<<"输入email:
";
cin>>email;
a.addition(num,name,address,tel,post,email);
cout<<"添加成功!
"<cout<<"***退出请按T,回到主菜单请按R(不计大小写):
***"<charback_addition;
cin>>back_addition;
if(back_addition=='R'||back_addition=='r')
{system("cls");SetColor(3,0);gototop;}
else
gotobottom;
break;
case'2':
cout<<"***输入要删除人的姓名:
***"<charname2[30];
cin>>name2;
a.del(name2);
cout<<"***退出请按T,回到主菜单请按R(不计大小写):
***"<charback_del;
cin>>back_del;
if(back_del=='R'||back_del=='r')
{system("cls");SetColor(3,0);gototop;}
else
{cout<<"****输入有误!
*****"<break;
c