C++课程设计通讯录.docx
《C++课程设计通讯录.docx》由会员分享,可在线阅读,更多相关《C++课程设计通讯录.docx(30页珍藏版)》请在冰豆网上搜索。
C++课程设计通讯录
.
课程设计报告
设计名称:
C++程序设计课程设计
姓名:
______学号:
专业班级:
系(院):
计算机工程学院
设计时间:
设计地点:
计算机203机房
成绩:
指导教师评语:
签名:
年月日
1、课程设计目的
C++程序设计课程设计是计算机科学与技术专业重要的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C++的知识点,又接近工程实际需要。
目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C++程序设计这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。
2、课程设计任务与要求:
本次课程设计利用《C++程序设计》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。
要求:
1、对系统进行功能需求分析
2、设计合理的数据结构和系统框架
3、编程简练,程序功能齐全,能正确运行
4、说明书、流程图要清楚
5、课题完成后必须按要求提交课程设计报告
任务:
以本班同学的具体数据为背景,设计一个本班同学通讯录。
实现功能:
1) 通讯录编辑(添加、删除)。
2) 按不同的项进行查找。
3) 对已存在的通讯录按不同的项排序。
4) 将通讯录写入文件
5)从文件读入通讯录
备注:
通讯录至少应该有以下数据项:
姓名,地址,电话,邮编,E-mail。
概要设计
总体来说,我的程序设计有几个部分组成,主函数,编辑联系人,查找联系人,写入联系人,显示所有联系人,文件读入程序,清空同学录等功能组成,各个函数之间虽然单独运行,但通过case语句把各个函数紧密的结合在一起,使他们之间的联系更加紧密。
总流程图:
详细设计
从整体上来看,我这次的程序设计流程和上面的流程图一样,先是建立类,定义数据成员和成员函数,然后由主函数开始运行,主函数中运用了case语句,通过用户所需输入不同的选项来执行不同的函数,这些功能都是由case语句来执行,另外,通过在网上查询信息,运用了一些书本上没有的函数,比如我觉得很有用的一个就是清屏函数system(“cls”),这个函数就是清理掉上次先是过的信息,使屏幕信息看起来清晰整洁,下面逐个介绍各个函数的功能及使用。
1)case语句:
又叫switch开关语句,主要是通过输入不同的信息来执行不同的语句,在这个程序中就是通过用户所需选择编辑,查找等功能,在这里它起到了一个桥梁的作用,这个函数的运用需要把各种情况都考虑好,不要漏掉哪种情况。
cin>>select1;
switch(select1)
{
case'1':
cout<<"
(1)添加:
"<2)编辑联系人:
这个函数就是对联系人进行编辑,在这个函数下,又通过case语句分为三种情况,添加、删除、修改,这个功能是很常用的这里的输入还用到了一个语法,就是for循环,将输入的数据赋给对应的数据成员,这个语法要注意括号里面是以分号相隔的,而不是逗号。
cout<<"输入学号:
"<cin>>no;
3)查找联系人:
在通讯录中找到想要的联系人,这个查找分为2类来查找:
按姓名查找和按学号查找,在这里用到对字符进行操作的函数strcmp函数,比较两个字符串的大小,如果两个字符串相等,就等于找到了这个联系人,输出此联系人即可。
4)写入联系人:
用通俗的话讲,就是把联系人的信息保存到文件里面,方便以后进行查询,这里使用的函数主要就是对文件的操作,这里要注意,文件的名字要写清楚,方便以后查找,还有就是当文件打开后不用时一定要记得用outfile.close()把文件关闭掉,否则会影响到后来文件的操作
ofstreamsavefile(name);
savefile<<"学号:
"<savefile.close();
5)显示所有的联系人:
将通讯录中的信息输出出来,可以让使用者清楚了解信息,这里分两种方式输出,也可以说是按两种方式进行排序,按姓名排序和按学号排序,这里运用了strcmp和strcpy两个对字符进行操作的函数,功能分别是比较和复制,复制用于交换比较的两个信息的位置,从而达到排序的功能。
if(strcmp(st[j].no,st[j+1].no)>0)
strcpy(no,st[j].no);
strcpy(st[j].no,st[j+1].no);
strcpy(st[j+1].no,no);
6)文件读入程序:
它的功能和写入文件是相反的,把文件里面的内容输入到程序中,是能通过函数先是在屏幕上,使使用者能够方便的了解到文件里面存储的联系人的信息,这里同样运用的是文件的操作,可见这个知识点挺重要的,要好好掌握住。
ifstreamfile(name1);
file.getline(line,120);
file.close();
7)清空联系人:
这个功能类似于格式化,将信息全部清除掉,调用时,将所有信息进行初始化,是一切信息的值变为空,即清除掉了联系人的信息
voidinter:
:
format()//清空联系人
{
for(inti=0;i<35;i++)
{
strcpy(st[i].address,"0");
strcpy(st[i].e_mail,"0");
strcpy(st[i].name,"0");
strcpy(st[i].no,"0");
strcpy(st[i].post_code,"0");
strcpy(st[i].tel_no,"0");
}
}
4.课程设计成果
程序源代码
#include
#include
#include
#include//用于清屏system("cls")
structstudent
{
charno[9];
charname[20];
charaddress[100];
chartel_no[11];
charpost_code[6];
chare_mail[30];
};
classinter
{
private:
studentst[35];
public:
voidadd(charno[9],charname[20],charaddress[100],chartel_no[11],charpost_code[6],chare_mail[30]);
voiddel(charname[20]);
voidfind1(charno[9]);
voidfind2(charname[20]);
voidlist1();
voidlist2();
intcorrect(charname[20]);
voidread();
voidwrite();
voidformat();
intback()
{
cout<<"T为退出,R为回到主菜单请选择:
";
charback;
cin>>back;
if(back=='R'||back=='r')
return1;
else
return0;
}
voidprint(inti)
{
cout<<"学号:
"<cout<<"姓名:
"<cout<<"地址:
"<cout<<"电话号码:
"<cout<<"邮编:
"<cout<<"E_MAIL:
"<}
};
//主函数
intmain()
{
intera;
a.format();
charselect1;
top:
system("cls");
cout<<"\n\t\t\t★★欢迎使用通讯录★★"<cout<<"\t\t◤≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈≈◥"<cout<<"\t\t卍卍"<cout<<"\t\t卍①编辑联系人②查找联系人卍"<cout<<"\t\t卍卍"<cout<<"\t\t卍③写入联系人④显示所有联系人卍"<cout<<"\t\t卍卍"<cout<<"\t\t卍⑤文件读入程序⑥清空通讯录卍"<cout<<"\t\t卍卍"<cout<<"\t\t◣▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄◢"<cout<<"\t\t\t\t\t\t\t制作人:
****"<cout<<"☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<cout<<"请输入所需选项并回车:
";
cin>>select1;
switch(select1)
{
case'1':
cout<<"
(1)添加联系人:
"<cout<<"
(2)删除联系人:
"<cout<<"(3)修改联系人:
"<charselect2;
cout<<"请选择:
"<cin>>select2;
switch(select2)
{
case'1':
cout<<"输入添加的资料:
"<charno[9];
charname[20];
charaddress[100];
chartel_no[11];
charpost_code[6];
chare_mail[30];
cout<<"输入学号:
"<cin>>no;
cout<<"输入姓名:
"<cin>>name;
cout<<"输入地址:
"<cin>>address;
cout<<"输入电话号码:
"<cin>>tel_no;
cout<<"输入邮编:
"<cin>>post_code;
cout<<"输入E_mail:
"<cin>>e_mail;
a.add(no,name,address,tel_no,post_code,e_mail);
b:
cout<<"T为退出,R为回到主菜单请选择:
";
charback_add;
cin>>back_add;
if(back_add=='R'||back_add=='r')
gototop;
else
cout<<"输入错误,请重新输入!
!
"<gotob;
break;
case'2':
cout<<"输入要删除人的姓名:
"<charname2[20];
cin>>name2;
a.del(name2);
cout<<"T为退出,R为回到主菜单请选择:
";
charback_del;
cin>>back_del;
if(back_del=='R'||back_del=='r')
gototop;
else
gotobottom;
break;
case'3':
cout<<"输入需要修改人的姓名:
"<charname3[20];
cin>>name3;
if(a.correct(name3))
gototop;
elsegotobottom;
break;
}
break;
case'2':
cout<<"
(1)根据姓名查找"<cout<<"
(2)根据学号查找"<charselect3;
cout<<"请选择:
";
cin>>select3;
switch(select3)
{
case'1':
charname4[20];
cout<<"输入姓名:
";
cin>>name4;
a.find2(name4);
cout<<"T为退出,R为回到主菜单请选择:
";
charback_f1;
cin>>back_f1;
if(back_f1=='R'||back_f1=='r')
gototop;
else
gotobottom;
break;
case'2':
charno4[9];
cout<<"输入学号:
";
cin>>no4;
a.find1(no4);
cout<<"T为退出,R为回到主菜单请选择:
";
charback_f2;
cin>>back_f2;
if(back_f2=='R'||back_f2=='r')
gototop;
else
gotobottom;
break;
}
break;
case'3':
a.write();//将联系人输入到文件里面
cout<<"T为退出,R为回到主菜单请选择:
";
charback_w;
cin>>back_w;
if(back_w=='R'||back_w=='r')
gototop;
else
gotobottom;
break;
case'4':
cout<<"
(1)按学号排序:
"<cout<<"
(2)按姓名排序:
"<cout<<"请选择:
";
charselect4;
cin>>select4;
switch(select4)
{
case'1':
a.list1();
cout<<"T为退出,R为回到主菜单请选择:
";
charback;
cin>>back;
if(back=='R'||back=='r')
gototop;
else
gotobottom;
break;
case'2':
a.list2();
cout<<"T为退出,R为回到主菜单请选择:
";
charback1;
cin>>back1;
if(back1=='R'||back1=='r')
gototop;
else
gotobottom;
break;
}
break;
case'5':
a.read();//将文件读入到程序里面
cout<<"T为退出,R为回到主菜单请选择:
";
charback_r;
cin>>back_r;
if(back_r=='R'||back_r=='r')
gototop;
else
gotobottom;
break;
case'6':
cout<<"请确认删除所有资料!
(Y/N)";//清空联系人
charselect5;
cin>>select5;
if(select5=='Y'||select5=='y')
a.format();
cout<<"联系人已删除!
!
!
"<cout<<"T为退出,R为回到主菜单请选择:
";
charback_f;
cin>>back_f;
if(back_f=='R'||back_f=='r')
gototop;
else
gotobottom;
break;
}
bottom:
cout<<"★★★★★★★★欢迎使用本软件!
★★★★★★★★"<return0;
}
voidinter:
:
add(charno[9],charname[20],charaddress[100],chartel_no[11],charpost_code[6],chare_mail[30])//将从键盘输入的数据复制给成员数据
{
intx=1;
for(inti=0;i<35;i++)
{
if(!
strcmp(st[i].no,"0"))
{
strcpy(st[i].address,address);
strcpy(st[i].e_mail,e_mail);
strcpy(st[i].name,name);
strcpy(st[i].no,no);
strcpy(st[i].post_code,post_code);
strcpy(st[i].tel_no,tel_no);
x=0;
}
if(x==0)
break;
}
}
voidinter:
:
del(charname[20])//删除联系人
{intx=1;
for(inti=0;i<35;i++)
{
if(strcmp(st[i].name,name)==0)
{
strcpy(st[i].address,"0");
strcpy(st[i].e_mail,"0");
strcpy(st[i].name,"0");
strcpy(st[i].no,"0");
strcpy(st[i].post_code,"0");
strcpy(st[i].tel_no,"0");
}
else
x=0;
}
if(x==0)
cout<<"联系人已删除!
!
"<else
cout<<"error:
输入姓名错误!
"<}
intinter:
:
correct(charname[30])//修改联系人
{
intx;
for(inti=0;i<35;i++)
{
if(!
strcmp(st[i].name,name))
x=i;
}
charselect;
cout<<"
(1)修改姓名:
"<cout<<"
(2)修改学号:
"<cout<<"(3)修改地址:
"<cout<<"(4)修改邮编:
"<cout<<"(5)修改电话号码:
"<cout<<"(6)修改E_MAIL:
"<cout<<"请选择:
";
cin>>select;
switch(select)
{
case'1':
cout<<"输入要修改的姓名:
";
charname1[30];
cin>>name1;
strcpy(st[x].name,name1);
cout<<"修改成功!
"<returnback();
break;
case'2':
cout<<"输入要修改的学号:
";
charno1[9];
cin>>no1;
strcpy(st[i].no,no1);
cout<<"修改成功!
"<returnback();
break;
case'3':
cout<<"输入要修改的地址:
";
charaddress1[100];
cin>>address1;
strcpy(st[x].address,address1);
cout<<"修改成功!
"<returnback();
break;
case'4':
cout<<"输入要修改的邮编:
";
charpost_code1[6];
cin>>post_code1;
strcpy(st[x].post_code,post_code1);
cout<<"修改成功!
"<returnback();
break;
case'5':
cout<<"输入要修改的电话号码:
";
chartel_no1[11];
cin>>tel_no1;
strcpy(st[x].tel_no,tel_no1);
cout<<"修改成功!
"<returnback();
break;
case'6':
cout<<"输入要修改的E_MAIL:
";
chare_mail1[30];
cin>>e_mail1;
strcpy(st[x].e_mail,e_mail1);
cout<<"修改成功!
"<returnback();
break;
}
return0;
}
//查找
voidinter:
:
find1(charno[9])
{
intx,y=1,z=1;
for(inti=0;i<35;i++)
{
if(!
strcmp(st[i].no,no))
{
x=i;
z=0;
}
elsey=0;
if(z==0)
break;
}
if(y==0)
{
cout<<"输入的学号查找不到!
!
!
"<}
else
print(x);
}
voidinter:
:
find2(charname[20])
{
intx,y=1,z=1;
for(inti=0;i<35;i++)
{
if(!
strcmp(st[i].name,name))
{
x=i;
z=0;
}
elsey=0;
if(z==0)
break;
}
if(y==0)
cout<<"输入的姓名查找不到!
!
!
"<print(x);
}
voidinter:
:
read()//导入文件到程序
{
charname1[20];
cout<<"输入你要导入的文件名:
";
cin