数据结构课程设计通讯录管理系统.docx
《数据结构课程设计通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计通讯录管理系统.docx(24页珍藏版)》请在冰点文库上搜索。
数据结构课程设计通讯录管理系统
广东某某学院
《数据结构课程设计》
题目:
通讯录管理系统
学号:
姓名:
年级:
学院:
专业:
指导教师:
一、功能需求
运用所学知识设计一个学生通讯录管理系统,对列表里的名单进行管理,包括添加、录入、删除、查找、排序、格式化等功能。
通讯录人员内容包括学号、姓名、电话号码等信息。
二、功能分析
学生包括姓名、学号、电话号码等信息。
(1)新增学生:
将新增员工对象按姓名以字典方式员工管理文件中,基本信息中的编号是按照添加顺序自动增加的。
(2)删除学生:
从学生通讯录中删除一名学生,根据姓名删除。
(3)查找学生:
从学生通讯录中查询符合学号条件的学生。
(4)修改信息:
根据姓名检索出对象,可对某个属性修改,如学号、姓名、电话号码。
(5)排序:
按照名字所对应的字母大小对所有的学生进行排序(降序)。
(6)录入:
将学生的信息保存。
(7)读取:
将通讯录中所有学生信息读取,在屏幕中显示出来,不存在的则用0来代替。
(8)格式化:
将通讯录中的所有信息删除。
三、基本思想
数据结构
线性表查找:
从一端开始从头到尾查找和自己输入的相等的值,有则查找成功,没有则失败。
冒泡排序:
通过交换排序中的冒泡排序法,运用拷贝函数完成排序。
四、流程图
五、测试结果
六、调试情况分析
1.操作界面相对简洁
2.功能要求基本实现
七、心得体会
1.本学期十分特殊,因为疫情原因,平时的线下学习变成了线上学习。
因此我们在家度过了这个特殊的学期。
本学期在家中学习,比在学校的学习效率低了很多。
但经过了一个学期的学习,对数据结构有了一定的了解,也对c/c++编程设计有了进一步的认识。
在线上的学习过程中,我一开始很难把数据结构所学内容和自己所学的c++结合在一起,因此在做课程设计的任务当中遇到了很多困难。
不过因为在线上学习,所以在不懂的时候还可以通过看课堂视频的回放,查补自己的一些缺漏。
2.本次课程设计,因为自己对指针方面掌握薄弱,所以在本次课程设计中,没有用到指针,怕掌握不好导致很多错误。
这次课程设计,大部分使用的是结构体定义,针对指针,假期有空也会重新复习,争取能在以后有任务的时候用得上。
3.本次课程设计我们采用的是合作的方式,一人负责一块,因此对于有些地方的掌握可能还不太熟练。
未来争取能够和小伙伴一起学习,完完全全掌握通讯录代码的整体思路构造和细节方面的函数构造。
在c++语言的运用方面i按还不是很熟练,希望在小伙伴们的帮助下变得越来越熟练。
4.本次课程设计遇到了很多难题,我们通常会卡在某个点,比如说平时常见的格式错误,一时间找不出来的话会耽搁很久,而本次代码也有一些缺陷:
比如说代码中的排序操作中对于通讯录人数的限定。
虽然可以通过删除,改写代码数组的长度来实现对通讯录的扩充、增加,但还是很麻烦,没有运用到所学知识去弄一个自定义的数组。
还有就是通讯录的读取和录入,会出现用零代替、从下往上读取的方式。
相信在后面好好学习之后,我们可以掌握更多知识,去对这个通讯录进行完善。
一步步加深对知识的理解与运用,提高自身的能力。
5.本次课程设计中遇到了许多难题。
但大部分我们能够解决,因此代码中的缺陷也不算太多,但还是有,和小伙伴商量完之后大概就定下了这个通讯录设计的理念和模式。
本次设计比较可惜的是很少用到数据结构的知识。
但也是因为自己不够努力,不能学以致用。
希望下次能好好努力,争取用好自己所学的知识,真正意义上的做到学以致用。
通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。
基本完成完成课程设计的目的,分析和解决问题的实际工作能力,学到这些对我以后的帮助会很大。
希望下学期回到学校,能好好学习,把上学期学的不好的东西给掌握,自己在私下也要好好学习,做一个懂得查缺补漏的人。
本次课程设计也让我明白了团队的重要性,只有努力做好自己的部分,分工合作,我们才能越来越好,整个通讯录的功能才能越来越完善。
在这之中,小伙伴之间的沟通和交流也极其重要,碰到不懂的也可以找小伙伴交流讨论。
需要用到数据结构知识的,我们也会尽力去把他弄好。
但本次课程设计运动到的知识比较少,希望在以后能够更多的融入数据结构的知识。
紧接着就是和以后的结合。
现在我们做的编程还是比较简单,到以后可能需要做更多复杂的编程,所以在现在的教学中我们更要打好基础,以便后来能够在打好基础的情况下学到更多。
源代码:
#pragmawarning(disable:
4996)
#include
#include
#include
#include
#include
usingnamespacestd;
structstudent//结构体定义
{
charnum[12];
charname[30];
chartel[12];
};
classinter//类的定义
{
private:
studentst[10];
public:
voidaddition(charnum[12],charname[30],chartel[12]);
voiddel(charname[30]);
voidfind1(charnum[12]);
voidlist1();
intcorrect(charname[30]);
voidwrite();
voidformat();
voidread();
voidprint(inti);
intback();
};
voidinter:
:
addition(charnum[12],charname[30],chartel[12])//添加联系人
{
intx=1;//定义一个整形变量用于判断
for(inti=0;i<10;i++)
{
if(!
strcmp(st[i].num,"0"))
{
strcpy(st[i].num,num);
strcpy(st[i].name,name);
strcpy(st[i].tel,tel);
x=0;
}
if(x==0)
break;
}
}
voidinter:
:
del(charname[30])//删除联系人
{
booltemp=0;//定义一个布尔变量用于判断
for(inti=0;i<10;i++)
{
if(!
strcmp(st[i].name,name))//如果姓名相同
{
temp=1;
strcpy(st[i].num,"0");
strcpy(st[i].name,"0");
strcpy(st[i].tel,"0");
cout<<"*****删除成功!
*****"<}
}
if(!
temp)
{
cout<<"*****查无此人*****"<}
}
intinter:
:
correct(charname[30])//修改联系人
{
intx;
for(inti=0;i<10;i++)
{
if(!
strcmp(st[i].name,name))
{
x=i;
cout<<"*修改内容*"<cout<<"****************************"<cout<<"*
(1)修改姓名*"<cout<<"*
(2)修改学号*"<cout<<"*(3)修改电话号码*"<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<<"***输入要修改的学号:
***";//选择2开始修改学号
charnum1[12];
cin>>num1;
strcpy(st[x].num,num1);
cout<<"***修改成功!
***"<returnback();
break;
case'3':
cout<<"***输入要修改电话号码***";//选择3开始修改电话号码
chartel1[12];
cin>>tel1;
strcpy(st[x].tel,tel1);
cout<<"***修改成功!
***"<returnback();
break;
}
}
}
return0;
}
voidinter:
:
find1(charnum[12])//按学号查找
{
booltemp=0;
for(inti=0;i<10;i++)
{
if(!
strcmp(st[i].num,num))//字符串比较如果学号相同
{
temp=1;
print(i);
}//调用print()成员函数输出基本信息
}
if(!
temp)
cout<<"***输入的学号查找不到!
***"<}
voidinter:
:
list1()//按姓名排序
{
for(inti=0;i<9;i++)//冒泡排序法
{
for(intj=0;j<9-i;j++)
{
if(strcmp(st[j].name,st[j+1].name)>0)//比较两个字符串的大小
{
charnum[12];
charname[30];
chartel[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(tel,st[j].tel);//将号码信息交换
strcpy(st[j].tel,st[j+1].tel);
strcpy(st[j+1].tel,tel);
}
}
}
for(intk=0;k<10;k++)
{
if(strcmp(st[k].name,"0"))
print(k);
}
}
voidinter:
:
write()//导入文件
{
inti;
ofstreamoutfile("txl.txt",ios:
:
out);
if(!
outfile)//打开文件
{
cout<<"opentxl.txterror!
"<exit
(1);
}
for(i=0;i<10;i++)
{
outfile<:
left)<}
outfile.close();//关闭文件
cout<cout<<"*资料保存成功!
*"<}
voidinter:
:
read()//读取文件
{
ifstreaminfile("txl.txt",ios:
:
out);
if(!
infile)//打开文件
{
cout<<"opentxl.txterror!
"<exit
(1);
}
for(inti=0;i<10;i++)
{
infile>>st[i].num;
infile>>st[i].name;
infile>>st[i].tel;
print(i);
}
}
voidinter:
:
format()//格式化
{
for(inti=0;i<35;i++)
{
strcpy(st[i].num,"0");
strcpy(st[i].name,"0");
strcpy(st[i].tel,"0");
}
}
voidinter:
:
print(inti)//输出联系人
{
cout<}
intinter:
:
back()//返回
{
cout<<"***退出请按T,回到主菜单请按F(不分大小写):
***"<charback;
cin>>back;
if(back=='F'||back=='f')
return1;
else
return0;
}
voiddisplay()//输出菜单
{
cout<<"**********************欢迎进入学生通讯录管理界面!
**********************"<cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^***功能选择***^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"<cout<<"***********************************************************************"<cout<<"*^^^^^^^^^^^^^^^^^^^^^^^^^
(1)编辑学生通讯信息^^^^^^^^^^^^^^^^^^^^^^^^^*"<cout<<"*^^^^^^^^^^^^^^^^^^^^^^^^^
(2)查找学生通讯信息^^^^^^^^^^^^^^^^^^^^^^^^^*"<cout<<"*^^^^^^^^^^^^^^^^^^^^^^^^^(3)排列学生通讯信息^^^^^^^^^^^^^^^^^^^^^^^^^*"<cout<<"*^^^^^^^^^^^^^^^^^^^^^^^^^(4)录入学生通讯信息^^^^^^^^^^^^^^^^^^^^^^^^^*"<cout<<"*^^^^^^^^^^^^^^^^^^^^^^^^^(5)读取学生通讯信息^^^^^^^^^^^^^^^^^^^^^^^^^*"<cout<<"*^^^^^^^^^^^^^^^^^^^^^^^^^(6)格式化^^^^^^^^^^^^^^^^^^^^^^^^^*"<cout<<"*^^^^^^^^^^^^^^^^^^^^^^^^^(7)退出^^^^^^^^^^^^^^^^^^^^^^^^^*"<cout<<"***********************************************************************"<cout<<"*****************************^^^请选择^^^******************************"<}
voidmain()//主函数
{
intera;
a.format();
top:
display();
charselect1;
cin>>select1;
switch(select1)
{
case'1':
cout<<"
(1)编辑学生通讯信息"<cout<<"***********************************"<cout<<"*
(1)添加学生通讯信息*"<cout<<"*
(2)删除学生通讯信息*"<cout<<"*(3)修改学生通讯信息*"<cout<<"***********************************"<cout<<"***请选择***"<charselect2;
cin>>select2;
switch(select2)
{
case'1':
cout<<"***请输入要添加的学生通讯信息***"<charnum[12];
charname[30];
chartel[12];
cout<<"*输入学号:
";
cin>>num;
cout<<"*输入姓名:
";
cin>>name;
cout<<"*输入电话号码:
";
cin>>tel;
a.addition(num,name,tel);
cout<<"*添加成功!
*"<cout<<"***退出请按T,回到主菜单请按F(不分大小写):
***"<charback_addition;
cin>>back_addition;
if(back_addition=='F'||back_addition=='f')
{
system("cls");gototop;
}
else
gotobottom;
break;
case'2':
cout<<"***请输入要删除的学生姓名信息***"<charname2[30];
cin>>name2;
a.del(name2);
cout<<"***退出请按T,回到主菜单请按F(不分大小写):
***"<charback_del;
cin>>back_del;
if(back_del=='F'||back_del=='f')
{
system("cls");gototop;
}
else
{
cout<<"***输入的信息存在错误!
***"<gotobottom;
}
break;
case'3':
cout<<"***请输入要修改的学生姓名信息***"<charname3[30];
cin>>name3;
if(a.correct(name3))
{
system("cls");
gototop;
}
else
{
cout<<"***输入的信息存在错误!
***"<system("cls");
gototop;
}
break;
}
break;
case'2':
cout<<"*查找*"<cout<<"***********************************"<cout<<"*
(1)根据学号查找*"<cout<<"***********************************"<charnum4[15];
cout<<"*输入学号:
";
cin>>num4;
a.find1(num4);
cout<<"***退出请按T,回到主菜单请按F(不分大小写):
***"<charback_f2;
cin>>back_f2;
if(back_f2=='F'||back_f2=='f')
{
system("cls");
gototop;
}
else
gotobottom;
break;
case'3':
cout<<"*排序*"<cout<<"***********************************"<cout<<"*
(1)根据姓名排序*"<cout<<"***********************************"<a.list1();
cout<<"***退出请按T,回到主菜单请按F(不分大小写):
***"<charback;
cin>>back;
if(back=='F'||back=='f')
{
system("cls");