C通讯录课程设计报告资料.docx

上传人:b****5 文档编号:7733006 上传时间:2023-01-26 格式:DOCX 页数:33 大小:434.83KB
下载 相关 举报
C通讯录课程设计报告资料.docx_第1页
第1页 / 共33页
C通讯录课程设计报告资料.docx_第2页
第2页 / 共33页
C通讯录课程设计报告资料.docx_第3页
第3页 / 共33页
C通讯录课程设计报告资料.docx_第4页
第4页 / 共33页
C通讯录课程设计报告资料.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

C通讯录课程设计报告资料.docx

《C通讯录课程设计报告资料.docx》由会员分享,可在线阅读,更多相关《C通讯录课程设计报告资料.docx(33页珍藏版)》请在冰豆网上搜索。

C通讯录课程设计报告资料.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1