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

《数据结构》课程设计

                                              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日

发布了8 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/xt0522/article/details/42590339