C++通讯录管理系统_c通讯录管理系统
C++通讯录管理系统由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c通讯录管理系统”。
黑龙江工程学院
第一章 问题分析和任务定义
1.1 问题分析
问题: 编写一个通讯录管理系统。要求包括通讯录建立、增加号码、删除号码、查询号码(按姓名、按号码)、修改号码、号码分组、打印通讯录(全部或分组号码)等功能,并设计主控菜单和子菜单供用户选择要执行的操作。
分析:
实现以下功能:
1)通讯录编辑(添加、删除); 2)按不同的项进行查找;
3)对已存在的通讯录按不同的项排序; 4)将通讯录写入文件; 5)从文件读入通讯录。
1.2 任务定义
创建一个链表,每个节点有姓名和号码以及关系三个信息。增加号码操作为增加节点,删除号码操作为删除节点,查找号码为链表的遍历。每个功能以函数的形式出现,由主控菜单控制。并以文件的形式对号码信息进行保存。
第二章 详细设计
主函数(main()函数)是通过一个多分支语句(switch(i)语句)实现的。显示菜单函数(displaymenu()函数)显示与用户交互的界面。以下是各个模块实现程序各项功能的函数的详细设计:
1、插入新的记录:insert()函数
定义变量,设计loop模块,模块的功能是用来输入记录:输入姓名、性别、电话号码、地址的信息。用for语句查找是否输入了与原有记录相同的记录,用strcmp 函数比较,if 语句判断,如果输入了重复的记录,提示信息:“此记录已存在,请重新输入!”并且用 goto语句返回到loop,重新输入信息。设计一个a模块:键盘输入一个字符,必须是“Y”“y”“N”“n”,否则重新输入。最后if 语句判断变量的值是否重新输入信息,如果输入的是“Y”或“y”,返回到loop,黑龙江工程学院
用户可以输入下一条信息,直到用户输入“N”或“n”返回主界面。每插入一条记录n的值加1。功能的实现见源程序:
2、示好友的信息:display()函数
定义整型变量i用来循环输出记录。分别输出每条记录,并输出记录的个数。
3、查找好友的信息search()函数
定义字符型变量c,字符型数组a,定义loop模块,功能:通过键盘输入要查找的信息。首先显示提示信息:“输入你要查找的好友的姓名”然后从键盘输入姓名。For语句循环内嵌if语句,用strcmp 函数查找信息,并且显示该记录的所有信息,并跳出循环。再用for 语句内嵌if语句判断,如果没有查到显示提示信息:“如果没有查到相关语句,是否重新查找(Y/N)?定义abc模块的功能输入一个字符(“Y”或“y”“N”“n”)用来判断是否重新查找。如果输入“Y”或“y”,则用goto语句返回loop重新查找。否则令i的值为n跳出循环。最后返回主界面。
4、删除好友信息:del()函数
首先定义字符数组、变量和a、b两个goto标识符。在a模块中用scanf函数输入要删除的好友的姓名,用for循环和if 语来实现对好友的查找,如果找到记录末尾,提示查无此人。在b模块中,用来实现删除功能。先确认是否删除,如果键盘输入Y 或y来确认要删除再执行for循环,通过strcmpy函数把后一条记录复制到前一条记录。进行删除记录后,并把原末尾记录数据赋空字符,按任意键删除,按任意键返回主菜单。
5、修改记录:modify()函数
定义了a、b两个goto标识符。在a模块中,用scanf函数输入要修改人的姓名,用for 循环、if语句及strcmp函数找到该姓名的记录,若到记录末尾提示“查无此人”是否继续重新输入姓名,黑龙江工程学院
如果重新输入姓名再用goto语句再执行重新查找。在b模块中,用于修改记录,如果要修改记录则从键盘输入Y或y,用scanf函数来输入新的记录数据来实现修改记录。
6、排序:sort()函数
选择法排序的方法。定义变量i,j,用于循环,定义4个字符型数组,用于替换的中间变量;用两个for循环语句,用strcmp函数比较。按姓名升序排序。比较前一条记录和后一条记录的姓名,如果strcmp函数值大于0,则将这两条记录的所有信息替换,4个字符型数组用作替换的中间变量。最后调用display()(显示结果)显示排序后的结果。
第三章 程序编码
#include #include #include struct student //结构体 { char no[13];char name[20];char addre[100];char tel_no[12];char post_code[7];char e_mail[40];};cla inter { private: student st[35];public: void add(char no[13],char name[20],char addre[100],char tel_no[12],char post_code[7],char e_mail[40]);void del(char name[20]);void find1(char no[13]);void find2(char name[20]);void list1();void list2();int correct(char name[20]);void read();void write();
黑龙江工程学院
void format();int back(){
cout
char back;
cin>>back;
if(back=='R'||back=='r')
return 1;
else
return 0;} void print(int i){
cout
cout
cout
cout
cout
cout
>select1;switch(select1)
黑龙江工程学院
{ case '1':cout
cout
cout
char select2;
cout
cin>>select2;
switch(select2)
{
case '1':cout
char no[13];char name[20];char addre[100];char tel_no[12];char post_code[7];char e_mail[40];
cout
cin>>no;
cout
cin>>name;
cout
cin>>addre;
cout
cin>>tel_no;
cout
cin>>post_code;cout
cin>>e_mail;
a.add(no,name,addre,tel_no,post_code,e_mail);
cout
char back_add;
cin>>back_add;
if(back_add=='R'||back_add=='r')
goto top;
else
goto bottom;
break;
case '2':cout
char name2[20];
cin>>name2;
a.del(name2);
cout
黑龙江工程学院
“;
”;
char back_del;
cin>>back_del;
if(back_del=='R'||back_del=='r')
goto top;
else
goto bottom;
break;case '3':cout
char name3[20];
cin>>name3;
if(a.correct(name3))
goto top;
else goto bottom;
break;} break;case '2':cout>select3;switch(select3){ case '1':char name4[20];
cout
cin>>name4;
a.find2(name4);
cout
char back_f1;cin>>back_f1;if(back_f1=='R'||back_f1=='r')
goto top;else
goto bottom;break;case '2':char no4[13];cout>no4;a.find1(no4);
cout>back_f2;
黑龙江工程学院
“;
”;
if(back_f2=='R'||back_f2=='r')
goto top;
else
goto bottom;
break;} break;case '3':a.write();cout>back_w;if(back_w=='R'||back_w=='r')
goto top;else
goto bottom;break;case '4':cout>select4;switch(select4){ case '1':a.list1();
cout
char back;cin>>back;if(back=='R'||back=='r')
goto top;else
goto bottom;break;case '2':a.list2();cout
} char back1;cin>>back1;if(back1=='R'||back1=='r')goto top;else goto bottom;break;
黑龙江工程学院
break;case '5':a.read();
cout
char back_r;
cin>>back_r;
if(back_r=='R'||back_r=='r')
goto top;
else
goto bottom;
break;case '6':cout
char select5;
cin>>select5;
if(select5=='Y'||select5=='y')
a.format();
cout
char back_f;
cin>>back_f;
if(back_f=='R'||back_f=='r')
goto top;
else
goto bottom;
break;} bottom:cout
void inter::add(char no[13],char name[20],char addre[100],char tel_no[12],char post_code[7],char e_mail[40]){ int x=1;for(int i=0;i
if(!strcmp(st[i].no,“0”))
{
strcpy(st[i].addre,addre);
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;} } //删除联系人
void inter::del(char name[20]){ int x=1;for(int i=0;i
if(!strcmp(st[i].name,name))
{ strcpy(st[i].addre,“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
int inter::correct(char name[30]){ int x;for(int i=0;i
if(!strcmp(st[i].name,name))
x=i;} char select;cout>select;switch(select){ case '1':cout
黑龙江工程学院
char name1[30];
cin>>name1;
strcpy(st[x].name,name1);
cout
return back();
break;case '2':cout
char no1[13];
cin>>no1;
strcpy(st[i].no,no1);
cout
return back();
break;case '3':cout
char addre1[100];
cin>>addre1;
strcpy(st[x].addre,addre1);
cout
return back();
break;case '4':cout
char post_code1[7];
cin>>post_code1;
strcpy(st[x].post_code,post_code1);
cout
return back();
break;case '5':cout
char tel_no1[12];
cin>>tel_no1;
strcpy(st[x].tel_no,tel_no1);
cout
return back();
break;case '6':cout
char e_mail1[40];
cin>>e_mail1;
strcpy(st[x].e_mail,e_mail1);
cout
return back();
break;} } //按学号查询联系人
黑龙江工程学院
void inter::find1(char no[13]){ int x,y=1,z=1;for(int i=0;i
if(!strcmp(st[i].no,no))
{
x=i;
z=0;
}
else y=0;
if(z==0)
break;}
if(y==0)
cout
} //按姓名查询联系人
void inter::find2(char name[20]){ int x,y=1,z=1;for(int i=0;i
if(!strcmp(st[i].name,name))
{
x=i;
z=0;
}
else y=0;
if(z==0)
break;} if(y==0)
cout
void inter::read(){
char name1[20];cout>name1;
黑龙江工程学院
strcat(name1,“.txt”);ifstream file(name1);char line[120];char no[120];char name[120];char addre[120];char post_code[120];char tel_no[120];char e_mail[120];int time=0;file.getline(line,120);while(!file.eof()){ for(int k=0;k
if(time==0)
{
strcpy(no,line);
time=1;
for(int i=0;i
{
if(no[i]==':')
{
i++;
for(int j=0;j
{
st[k].no[j]=no[i];
i++;
}
}
}
file.getline(line,120,'n');
} if(time==1){
strcpy(name,line);
time=2;
for(int i=0;i
{
if(name[i]==':')
{
i++;
for(int j=0;j
{
黑龙江工程学院
st[k].name[j]=name[i];
i++;
}
} } file.getline(line,120,'n');} if(time== 2){ strcpy(addre,line);time=3;for(int i=0;i
if(addre[i]==':')
{
i++;
for(int j=0;j
{
st[k].addre[j]=addre[i];
i++;
}
} } file.getline(line,120,'n');}
if(time==3){ strcpy(tel_no,line);time=4;for(int i=0;i
if(tel_no[i]==':')
{
i++;
for(int j=0;j
{
st[k].tel_no[j]=tel_no[i];
i++;
}
} } file.getline(line,120,'n');}
黑龙江工程学院
if(time==4)
{
strcpy(post_code,line);
time=5;
for(int i=0;i
{
if(post_code[i]==':')
{
i++;
for(int j=0;j
{
st[k].post_code[j]=post_code[i];
i++;
}
}
}
file.getline(line,120,'n');
}
if(time==5)
{
strcpy(e_mail,line);
time=0;
for(int i=0;i
{
if(e_mail[i]==':')
{
i++;
for(int j=0;j
{
st[k].e_mail[j]=e_mail[i];
i++;
}
}
}
file.getline(line,120,'n');
}
}
} file.close();} //写入文件
void inter::write(){ char name[20];
黑龙江工程学院
cout>name;strcat(name,“.txt”);ofstream savefile(name);for(int i=0;i
savefile
savefile
savefile
savefile
savefile
savefile
void inter::list1(){ for(int i=0;i
for(int j=0;j
{
if(strcmp(st[j].no,st[j+1].no)>0)
{
char no[13];char name[20];char addre[100];char tel_no[12];char post_code[7];char e_mail[40];
strcpy(no,st[j].no);
strcpy(st[j].no,st[j+1].no);
strcpy(st[j+1].no,no);
strcpy(name,st[j].name);
strcpy(st[j].name,st[j+1].name);
strcpy(st[j+1].name,name);
strcpy(addre,st[j].addre);
strcpy(st[j].addre,st[j+1].addre);
strcpy(st[j+1].addre,addre);
strcpy(tel_no,st[j].tel_no);
黑龙江工程学院
strcpy(st[j].tel_no,st[j+1].tel_no);
strcpy(st[j+1].tel_no,tel_no);
strcpy(post_code,st[j].post_code);
strcpy(st[j].post_code,st[j+1].post_code);
strcpy(st[j+1].post_code,post_code);
strcpy(e_mail,st[j].e_mail);
strcpy(st[j].e_mail,st[j+1].e_mail);
strcpy(st[j+1].e_mail,e_mail);
}
} } for(int k=0;k
int x=0;
if(strcmp(st[k].no,“0”))
{
print(k);
x=1;
}
if(x==1)
{
cout
cout
} } } //按姓名排序
void inter::list2(){ for(int i=0;i
for(int j=0;j
{
if(strcmp(st[j].name,st[j+1].name)>0)
{
char no[13];char name[20];char addre[100];char tel_no[12];char post_code[7];
黑龙江工程学院
char e_mail[40];
strcpy(no,st[j].no);
strcpy(st[j].no,st[j+1].no);
strcpy(st[j+1].no,no);
strcpy(name,st[j].name);
strcpy(st[j].name,st[j+1].name);
strcpy(st[j+1].name,name);
strcpy(addre,st[j].addre);
strcpy(st[j].addre,st[j+1].addre);
strcpy(st[j+1].addre,addre);
strcpy(tel_no,st[j].tel_no);
strcpy(st[j].tel_no,st[j+1].tel_no);
strcpy(st[j+1].tel_no,tel_no);
strcpy(post_code,st[j].post_code);
strcpy(st[j].post_code,st[j+1].post_code);
strcpy(st[j+1].post_code,post_code);
strcpy(e_mail,st[j].e_mail);
strcpy(st[j].e_mail,st[j+1].e_mail);
strcpy(st[j+1].e_mail,e_mail);
}
} } for(int k=0;k
int x=0;
if(strcmp(st[k].no,“0”))
{
print(k);
x=1;
}
if(x==1)
{
cout
cout
} }
黑龙江工程学院
} //格式化
void inter::format(){ for(int i=0;i
strcpy(st[i].addre,“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”);} }
第四章 程序调试与测试
运行程序,首页显示如下:
按1选择通讯录编辑,编辑通讯录,显示(1)添加,(2)删除,(3)修改,运行后结果如下:
黑龙江工程学院
第一次使用,按1添加联系人,填入相关信息,运行图如下:
返回首页,按2可以查找联系人,可以根据姓名查找和学号查找,本次运用学号查找,运行如下:
返回首页,按4可以进行排序,可以根据姓名和学号排序,按姓名排序需要自己编辑的姓氏排序规则才能使用,本次使用学号排序,运行如下:
将资料写入文件功能是将编辑好的通讯录写入文本文件,文本文件的名字可以自己输入。将文件读入程序,是将文本文件中的信息读入程序,进行添加,修改,删除,排序等功能。
第五章 结果分析
总体上可以满足一般的应用需求,但是还有一定的不足,程序运行流畅,没有未知错误。
第六章 设计创新及心得
黑龙江工程学院
程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C++语言又是最常见,功能最强大的一种高级语言,因此做好C++语言课程设计是十分必要的。
通过几天的课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次真真的做程序设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针„„通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
我做的是班级通讯录的课程设计,虽然是很简单的一个小的程序,但对我来说却是一个很大的困难。更加是第一次做课程设计,所以在机房做了一个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。
开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,可我还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C++语言的一次实践作业,自己进步的证明。
在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!