您的位置:首页 > 数据库

数据库课程设计——通讯录

2015-01-12 21:35 771 查看


《数据结构课程设计》



课程题目
个人通讯录管理系统
课程编号
j1620102
学生姓名
陈斯怡
所在专业
信息管理与信息系统
所在班级
信管1132班
学号
201311671202
任课老师
易学明老师
实习时间
2015.1.5.-1.12.
设计成绩
老师评语
题目及问题描述

1、李刚是一爱折腾的人,当然爱折腾的人均有梦想,他想当中国的盖次呢。可不,现在个人好友信息多了,复杂了,他想制作一个个人通讯录的制作管理软件。 刚好这个学期学了数据结构课,所以他准备使用数据结构知识来实现了。并考虑使用双向链表作数据结构。并制定了初步要求:

(1)每个好友信息包含姓名、性别、住址、邮编、几岁、电话、QQ、微信帐号、生日等。

(2)作为一个完整的系统,应具有友好的界面和较强的容错能力。

2、编程完成通讯录的一般性管理工作,如通讯录中记录录入、修改、查找、删除等功能。每个记录包含姓名、性别、电话号码、住址等基本呢信息。用数据结构中的双链表,结合C++语言基本知识,编写一个通讯录管理系统,以把所学知识应用到实际软件开发中去。了解并掌握数据结构和算法的设计方法,具备初步的独立分析和设计功能,初步掌握软件开发过程的问题分析,系统设计,程序编码,测试等基本方法和技能。

问题分析及功能

个人通讯录管理系统的主要任务是通过大量的资料获得管理所需要的信息,这就需要存储和管理个人的姓名、性别、住址、邮编、年龄、电话、QQ、微信、生日等信息了。因此利用数据结构的双链表建立一个良好的资料组织结构,使整个系统可以进行以下操作:

添加:能通过相应操作录入新数据。

查询:按姓名查询,显示此人全部信息。

删除:按姓名删除,删除此人全部信息。

修改:按姓名修改,修改此人某项信息。

逻辑结构和存储结构设计分析

逻辑结构:利用数据结构所学的双链表知识,开辟新节点存放通讯录的信息,修改。

存储结构:开辟4个链表指针,指向链表的第一个节点,输入内容记录在一个新的节点里。

四、源代码

#include<iostream>

#include<string>

#include"string.h"

#include"jilei.h"

using namespacestd;

int main()

{

jilu jilu1;

stringnames="a";//存放所打开的文件名

int state=1;//保存状态变量

int i;//存放功能号

cout<<"----———--------------------------
欢迎使用通讯录系统-----------------------"<<endl;


while(1)//保持循环直到用户退出

{

cout<<endl;

cout<<"
************请输入功能号:"<<endl;


cout<<"
************添加新信息******** 1"<<endl;


cout<<"
************查找信息********** 2"<<endl;


cout<<"
************删除信息********** 3"<<endl;


cout<<"
************显示所有信息****** 4"<<endl;


cout<<"
************打开文件********** 5"<<endl;


cout<<"
************保存文件********** 6"<<endl;


cout<<"
************另存为文件******** 7"<<endl;


cout<<"
************退出系统********** 0"<<endl;


cout<<"
admin:";


cin>>i;

//处理异常输入

while(!cin)

{

cout<<"----------输入必须为数字功能号!------------"<<endl;

cin.sync();

cin.clear();

cout<<"请重新输入功能号:"<<endl;

cout<<"添加新信息------------------1"<<endl;

cout<<"查找信息--------------------2"<<endl;

cout<<"删除信息--------------------3"<<endl;

cout<<"显示所有信息----------------4"<<endl;

cout<<"打开文件--------------------5"<<endl;

cout<<"保存文件--------------------6"<<endl;

cout<<"另存为文件------------------7"<<endl;

cout<<"退出系统--------------------0"<<endl;

cout<<"root:";

cin>>i;

}

if(i<0||i>7)

{

i=4;

}

//功能号选择处理

switch (i)

{

case 0 : {


char jixu;



if(state==1)



{



cout<<"退出系统中....."<<endl;exit(0);



}



else



{



cout<<"文件尚未保存,确认关闭?y/n"<<endl;



cout<<"root:";



cin.sync();cin.clear();//清除上层缓存影响



cin>>jixu;



while(!cin)



{



cout<<"文件尚未保存,确认关闭?y/n"<<endl;



cout<<"root:";



cin.sync();cin.clear();//清除上层缓存影响



cin>>jixu;



}



}



if (jixu=='y')



{



cout<<"退出系统中....."<<endl;exit(0);



}



else



{



break;



}



};break;


case 1 :


{



char jixu='y';



while(jixu=='y')



{



jilu1.enter();



cout<<"‘y’继续输入,任意键退出...."<<endl;



cout<<"cin>>:";



cin.sync();cin.clear();//清除上层缓存影响



cin>>jixu;



cin.sync();cin.clear();



if(!cin){break;}



}



state=0;



};break;


case 2:


{



string name;



char jixu='y';



while(jixu=='y')



{



cout<<"请输入您要查找人的姓名:";



cin>>name;



cout<<"---姓名---"<<"---电话---"<<"---地址---"<<"---微信---"<<"---QQ---"<<endl;



jilu1.search(name);



cout<<endl;



cout<<"‘y’继续查找,任意键退出...."<<endl;



cout<<"admin:";



cin.sync();cin.clear();//清除上层缓存影响



cin>>jixu;



cin.sync();cin.clear();



if(!cin){ break;}



}



state=0;



};break;


case 3:


{



string name;



cout<<"请输入您要删除人的姓名:";



cin.sync();cin.clear();//清除上层缓存影响



cin>>name;



jilu1.del(name);



cin.sync();cin.clear();



state=0;



};break;


case 4:


{



jilu1.disall();



};break;


case 5:


{



cout<<"请输入要打开的文件地址:"<<endl;



cout<<"root:";



cin>>names;



jilu1.open(names);



};break;


case 6:


{



if(names=="a")



{



cout<<"请输入要新建的文件名:"<<endl;



cin>>names;



jilu1.save(names);



state=1;



}



else



{



jilu1.save(names);



state=1;



}



};break;


case 7:


{



cout<<"文件另存为:";



cin>>names;



jilu1.save(names);



state=1;



};break;


default:


cout<<"您输入的功能号有误!";break;


}

}

return 0;

}

#include<iostream>

#include<string>

#include"jilei.h"

#include<fstream>

using namespacestd;

/*

-----------------------------

--输入函数-------------------

-----------------------------

*/

int jilu::enter()

{


string a,b,c,d,e;



struct li *newlist=new struct li;



if(!newlist) {cout<<"内存错误!"; exit(0);}



else{



//用户输入信息



cin.sync();cin.clear();//清除上层缓存影响



cout<<"请输入要添加人的姓名:";



cin>>a;newlist->name=a;



cout<<"请输入要添加人电话:";



cin>>b;newlist->cellphone=b;



cout<<"请输入要添加人地址:";



cin>>c;newlist->address=c;



cout<<"请输入要添加人微信:";



cin>>d;newlist->weixin=d;



cout<<"请输入要添加人QQ:";



cin>>e;newlist->QQ=e;



//链表的操作



temp->next=newlist;



newlist->next=NULL;



newlist->parent=temp;



temp=newlist;



cout<<"-------------输入信息成功!------------"<<endl;



last=temp;



}



return 0;


}

/*

-----------------------------

--
显示函数------------------


--
传入要输出的信息的指针----


-----------------------------

*/

intjilu::display(struct li *p)

{

cout<<"----"<<p->name<<"-------"<<p->cellphone<<"-------"<<p->address<<"-------"<<p->weixin<<"--------"<<p->QQ<<endl;

return 0;

}

/*

-----------------------------

--
查找函数------------------


--
传入要查找的姓名----------


--
传出要输出的信息的指针----


-----------------------------

*/

intjilu::search(string cname)

{

temp=last;

temp=head->next;

int i=0;

while(temp!=NULL)//遍历链表,并输出

{


if(temp->name==cname)



{



jilu::display(temp);



i++;



}



temp=temp->next;


}

if(i==0)

cout<<"--------------对不起没有找到相关信息!----------";

else

cout<<"---------共查找到"<<i<<"条信息!-----------"<<endl;

temp=last;

return 0;

}

/*

-----------------------------

--
查找函数------------------


--
传入要查找的姓名----------


--
传出要输出的信息的指针----


-----------------------------

*/

intjilu::del(string cname)

{

last=temp;//保存现在temp位置

int i=0;

struct li *p;

temp=head->next;

while(temp!=NULL)

{

if(temp->name==cname)

{


temp->parent->next= temp->next;



if(temp->next!=NULL)//防止最后一个时候导致的溢出



{



temp->next->parent=temp->parent;



}



else



{



last=temp->parent;



}



p=temp->next;



delete temp;



cout<<"--------删除"<<cname<<i++<<"成功!"<<endl;


}

else

{

p=temp->next;

}

temp=p;

}

cout<<"--------------共删除信息"<<i<<"条!";

temp=last;//弹出last

return 0;

}

/*

-----------------------------

--
保存文件------------------


-----------------------------

*/

intjilu::save(string filename)

{


ofstream outfile(filename.c_str(),ios::out);



if(!outfile)



{



cerr<<"文件打开失败!"<<endl;



exit(1);



}



struct li *p;//临时指针



p=head->next;



while(p!=NULL)



{


outfile<<p->name<<"/"<<p->cellphone<<"/"<<p->address<<"/"<<p->weixin<<"/"<<p->QQ<<"/";//用"/"分割数据内部


p=p->next;



}



outfile.close();



return 0;


}

/*

-----------------------------

--
扩展功能函数--------------


-----------------------------

*/

//输出所有信息

charjilu::disall()

{


last=temp;



char continues;



temp=head->next;



cout<<"----姓名----"<<"------电话------"<<"-------------地址-----------"<<"--------微信---------"<<"-------QQ-------"<<endl;



if (temp==NULL){



cout<<endl;



cout<<"-------请导入文件,或者新建新的通讯录!----------"<<endl;



cout<<endl;



temp=last;



continues='y';



return continues;



}



while(temp!=NULL)



{



jilu::display(temp);



temp=temp->next;



}



continues='y';



temp=last;



return continues;


}

//打开文件

intjilu::open(string names)

{


ifstream infile(names.c_str(),ios::in);



if(! infile)



{



cout<<"文件打开失败,请确认文件是否存在!"<<endl;



return0;



}



else



{



string a,b,c,d,e;



while(!infile.eof())



{



struct li *newlist=new struct li;



if(!newlist) {cout<<"内存错误!"; exit(0);}



//从文件中读取数据



getline(infile,a,'/');



getline(infile,b,'/');



getline(infile,c,'/');



getline(infile,d,'/');



getline(infile,e,'/');



//建立链表



newlist->name=a;



newlist->cellphone=b;



newlist->address=c;



newlist->weixin=d;



newlist->QQ=e;



//链表的操作



temp->next=newlist;



newlist->next=NULL;



newlist->parent=temp;



temp=newlist;



}



}



cout<<"打开文件成功!"<<endl;



return 1;


}

程序运行结果

按任意键,首先出现一个界面,显示出各项功能选择,联系人的添加、信息的录入、联系人的查找和删除等。

选择功能1,录入个人的信息,包括姓名、住址、电话、QQ、微信帐号。

输入姓名,查找相应联系人的各项信息:

选择3,删除联系人

显示所有联系人信息

六、体会及不足

通过这次的数据结构的课程设计,制作一个个人通讯录管理的课程设计,我深刻的体会到了要做出一个完整的数据管理系统真的挺不容易的,这次的程序设计老师是要求我们都要运用双链表的相关知识去完成的,但是关于双链表的知识点我由于个人不努力等等问题,还不能够完全熟练掌握,还有些东西已经忘记了,所以制作这个管理系统我需要翻阅课本上网查找相关资料才能运用双链表制作完成,与此同时,我还请教同学师兄和老师,与同学们一起讨论该如何更好地实现它。在这期间还遇到了其他的困难,比如在开始编程序之前,我需要想一下这个需要用什么样的逻辑结构和存储结构才能实现,程序报错的时候修改的过程中不能马上准确知道报错的地方是哪里,在完成程序的时候无论怎么修改都还是有错误,找了好多师兄大神才解决了问题。我所欠缺的这些,都是应该在日后的学习当中所要注重培养的能力。不过还是挺感谢为我提供帮助的同学们,让我遇到困难还可以继续前进。

最后,因为个人能力有限,知识所限,在这个通讯录管理系统当中,还存在了很多地方不太完美。例如系统界面缺乏美感,编排也不太好,还有功能实现的时候也是很简单,只是涉及到管理系统的信息录入、查询、和删除这些简单功能。对于自己的种种缺陷,我今后会多加注意,认真学习,积极请教老师同学,更多的是,需要抽出更多的时间去上机操作,在不断练习的过程中提升自己的能力。争取在下一次的实践中做到更好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: