您的位置:首页 > 其它

课程设计——通讯录(By Grace)

2015-01-10 22:36 148 查看
《数据结构》课程设计

By Grace(王欣桐)

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

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

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

分析:本题应用到的知识点有以下几点:大一学习的C++中的类、函数的重载、结构体;大二学习的数据结构中的双链表等。课题在设计中应用的双链表是一种对称结构,使得联系人信息在执行插入与删除操作时变得更加简便,这与现实生活中的实际需求相适应。

课题代码如下:
<pre name="code" class="cpp"><span style="background-color: rgb(255, 153, 255);">#include "数据结构.h"

void menu()
{
cout<<"   ┏━━━━━━━━━━━━━━━━┓"<<endl;
cout<<"   ┃          通   訊  錄           ┃"<<endl;
cout<<"   ┃━━━━━━━━━━━━━━━━┃"<<endl;
cout<<"   ┃1.查找联系人                    ┃"<<endl;
cout<<"   ┃2.显示联系人                    ┃"<<endl;
cout<<"   ┃3.添加联系人                    ┃"<<endl;
cout<<"   ┃4.修改联系人                    ┃"<<endl;
cout<<"   ┃5.删除联系人                    ┃"<<endl;
cout<<"   ┃6.退出                          ┃"<<endl;
cout<<"   ┗━━━━━━━━━━━━━━━━┛"<<endl;
}

int main()
{
Dou_Circular_Linklist d;
menu();
int a;
char m;
cout << "请输入序号(1-6):" ;
cin >> a;
while(a > 6 || a < 1)
{
cout << "非法选项,请选择1-6,谢谢合作。";
cin >> a;
}
while(a <= 6 && a >=1)
{
switch(a)
{
case 1:system("cls");d.Search();break;
case 2:system("cls");d.Printlist();break;
case 3:system("cls");d.Insert();break;
case 4:system("cls");d.modifyList();break;
case 5:system("cls");d.Delete();break;
default: exit(0);
}
cout << "返回菜单吗?(1:是,其他:否)"<<endl;
cin >> m;
system("cls");
menu();
cout << "请输入序号(1-6):" ;
cin >> a;
}
return 0;
}</span>
<pre name="code" class="cpp"><span style="background-color: rgb(255, 153, 255);">#ifndef DULLIST_H
#define DULLIST_H
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
const int MaxSize=500;
struct Contacts
{
string name;
string sex;
string address;
string postcode;
string age;
string phone;
string QQ;
string wechat;
string birthday;
};
struct Node
{
Contacts data;
Node *prior,*next;
};
class Dou_Circular_Linklist
{
public:
Dou_Circular_Linklist();
Dou_Circular_Linklist(Contacts a[], int n);
~Dou_Circular_Linklist();
void Printlist();
void Search();
void Insert();
void Delete();
void modifyList();
private:
Node* first;
};

void Dou_Circular_Linklist::modifyList()
{
int n,count;
cout << "修改第几个联系人信息?" << endl;
cin >> n;
Contacts temp;
Node *p = first->next;
count = 1;
while(count < n && p != first)
{
p = p->next;
count++;
}
if(p == first) cout << "你所要修改的信息不存在" << endl;
else {
cout << "请依次输入你要修改的信息:"<<endl;
cout << "姓名:" ;
cin >> temp.name;
p->data.name = temp.name;
cout << "性别:" ;
cin >> temp.sex;
p->data.sex = temp.sex;
cout << "住址:" ;
cin >> temp.address;
p->data.address = temp.address;
cout << "邮编:" ;
cin >> temp.postcode;
p->data.postcode = temp.postcode;
cout << "年龄:" ;
cin >> temp.age;
p->data.age = temp.age;
cout << "电话:" ;
cin >> temp.phone;
p->data.phone = temp.phone;
cout << "QQ:" ;
cin >> temp.QQ;
p->data.QQ = temp.QQ;
cout << "微信帐号:" ;
cin >> temp.wechat;
p->data.wechat = temp.wechat;
cout << "生日:" ;
cin >> temp.birthday;
p->data.birthday = temp.birthday;
cout << "修改成功!"<<endl;
}

}
Dou_Circular_Linklist :: Dou_Circular_Linklist()
{
first =new Node;
first->next = first;
first->prior = first;
}

Dou_Circular_Linklist::Dou_Circular_Linklist(Contacts a[], int n)
{
Node *f,*s;
first=new Node;
f=first;
for(int i = 0; i < n; i++)
{
s=new Node;
s->data.address = a[i].address;
s->data.age = a[i].age;
s->data.birthday = a[i].birthday;
s->data.name = a[i].name;
s->data.phone = a[i].phone;
s->data.postcode = a[i].postcode;
s->data.QQ = a[i].QQ;
s->data.sex = a[i].sex;
s->data.wechat = a[i].wechat;
s->prior=f;
f->next=s;
f=f->next;
}
f->next=first;
first->prior=f;
}

void Dou_Circular_Linklist::Printlist()
{
if(first->next == first)
cout << "联系人信息不存在." <<endl;
else {
cout<<"按顺序输出联系人信息:" <<endl;
Node*p = first->next;
int count = 1;
while(p!=first)
{
cout << count << ".";
cout << "联系人名字:" << p->data.name << endl;
cout << "联系人性别:" << p->data.sex << endl;
cout << "      住址:" << p->data.address << endl;
cout << "      邮编:" << p->data.postcode << endl;
cout << "      年龄:" << p->data.age << endl;
cout << "      电话:" << p->data.phone << endl;
cout << "      QQ:" << p->data.QQ << endl;
cout << "      微信帐号:"<< p->data.wechat << endl;
cout << "      生日:"<< p->data.birthday << endl;
p=p->next;
++count;
}
}
}

void Dou_Circular_Linklist::Search()
{
if(first->next == first)
cout << "联系人信息不存在." <<endl;
else {
cout << "需要查找的联系人名字是?" <<endl;
string x;
cin >> x ;
Node*p = first->next;
int count = 1;
while(p->data.name != first->data.name)
{
if(p->data.name == x) break;
p = p->next;
count++;
}
if(p->data.name == first->data.name) cout << "该联系人信息不存在" << endl;
else {
cout <<"联系人名字:"<< p->data.name << endl;
cout <<"      性别:"<< p->data.sex << endl;
cout <<"      住址:"<< p->data.address << endl;
cout <<"      邮编:"<< p->data.postcode << endl;
cout <<"      年龄:"<< p->data.age << endl;
cout <<"      电话:"<< p->data.phone << endl;
cout <<"      QQ:"<< p->data.QQ << endl;
cout <<"      微信帐号:"<< p->data.wechat << endl;
cout <<"      生日:"<< p->data.birthday << endl;
}
}
}

void Dou_Circular_Linklist::Insert()
{
int n;
Node*s=new Node;
if(first->next == first)
n = 1;
else {
cout << "需要插入的位置是:" <<endl;
cin >> n;
}
cout << "请依次输入你要插入的联系人信息:"<<endl;
cout << "姓名:" ;
cin >> s->data.name;
cout << "性别:" ;
cin >> s->data.sex;
cout << "住址:" ;
cin >> s->data.address;
cout << "邮编:" ;
cin >> s->data.postcode;
cout << "年龄:" ;
cin >> s->data.age;
cout << "电话:" ;
cin >> s->data.phone;
cout << "QQ:" ;
cin >> s->data.QQ;
cout << "微信帐号:" ;
cin >> s->data.wechat;
cout << "生日:" ;
cin >> s->data.birthday;
Node*p = first;
int count=0;
while(count<n-1)
{
p=p->next;
count++;
}
s->prior=p;
s->next=p->next;
p->next->prior=s;
p->next=s;
cout << "插入成功!"<<endl;
}

void Dou_Circular_Linklist::Delete()
{
if(first->next == first)
cout << "该联系人信息不存在." <<endl;
else {
int n;
cout << "需要删除第几个联系人的信息?" << endl;
cin >> n;
Node *q=first->next;
int count = 1;
while(count < n)
{
q = q->next;
count++;
}
q->prior->next = q->next;
q->next->prior = q->prior;
delete q;
cout << "删除成功!"<<endl;
}
}

Dou_Circular_Linklist::~Dou_Circular_Linklist()
{

while(first!=first)
{
Node *q=first;
first=first->next;
delete q;
}
delete first;
}

#endif
</span>







实现界面:
主界面:




插入界面:




显示界面:





体会及不足:当看到本次课程设计的题目时,我第一个想到的是手机上的通讯录,并在脑海中构思了课题设计的大体框架,希望可以设计得像手机上的通讯录类似。但是,理想是丰满的,现实却是残酷的。当我着手开始编写代码时我就傻眼了,由于自己能力的不足以及经验的缺乏,那些在脑海里想好的功能,在编写时总是出现不知道该怎么实现的情况。无奈之下,只能请教其他同学并借助网络,参考了一下”大师级“人物编写的代码,并将其中的精粹部分添加进自己的代码中。最后完成了我的课程设计,也就是上面的那一大片的代码。我知道本次课程设计中还有很都不完善的地方,所以,在接下来的寒假时间以及以后的学习中我会继续努力学习C++以及数据结构等知识,并融会贯通,理论联系实际,希望有一天能靠自己的能力,独立完成一个课程的设计,独自写出一个项目的实现代码。学无止境。不由得又想起屈原的一句话:”路漫漫其修远兮,吾将上下而求索!"这也是我努力的方向。我会继续潜心学习的。




以上就是本人《数据结构》课程设计,望各位看倌不吝赐教~~



王欣桐
2015年1月10日
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: