课程设计(题目二)

一、题目

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

 

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

 

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






二、代码显示:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
typedef struct node{
	char name[20];
	char tel[20];
	char e_mail[30];
	char qq[15];
	struct node *next;
}connection;
connection *head;

void input_data(connection *);
void find_data(connection *);
void output_data(connection *);
void delete_data(connection *);

void main(){
	head=(connection*)malloc(sizeof(connection));
	int chioce;char judge;
	head->name[0]='C';
	head->next=NULL;
	do{
	printf("                    ||------欢迎使用通讯录------||\n\n ");
	printf("       --1. 增加联系人\n\n");
	printf("       --2. 删除联系人\n\n");
	printf("       --3. 查找联系人\n\n");
	printf("       --4. 显示所有联系人\n\n");
	printf("       --0. 退出\n\n");
	printf("       =- 请输入你的选项:");
	scanf("%d",&chioce);
	switch(chioce){
	case 1:input_data(head);break;
	case 2:delete_data(head);break;
	case 3:find_data(head);break;
	case 4:output_data(head);break;
	case 0:break;
	default:printf("\n       |---输入有误!--|\n");
	}
	if(chioce==0)   break;
	printf("\n       |---是否继续使用通讯录?(Y/N)--|");
	//getchar();
	judge=getchar();
	system("cls");                                
	}while(judge=='Y'||judge=='y');
}

void input_data(connection *head){
	connection *temp,*now;
	char judge;int i,chioce;
	for(now=head;now->next!=NULL;now=now->next);   //now指向链表的最后位置
	temp=(connection*)malloc(sizeof(connection));
	printf("\n       |--姓名:");                               //数据输入
	for(getchar(),i=0;(temp->name[i]=getchar())!='\n';i++);
	temp->name[i]='\0';
	printf("\n       |--电话:");
	for(i=0;(temp->tel[i]=getchar())!='\n';i++);
	temp->tel[i]='\0';
	printf("\n       |--E-mail:");
	for(i=0;(temp->e_mail[i]=getchar())!='\n';i++);
	temp->e_mail[i]='\0';
	printf("\n       |--QQ:");
	for(i=0;(temp->qq[i]=getchar())!='\n';i++);
	temp->qq[i]='\0';
	temp->next=NULL;
	printf("\n       |--是否修改?(Y/N)");                    //数据修改
	judge=getchar();
	if(judge=='Y'||judge=='y'){
		printf("\n       |--1.修改姓名\n\n");
		printf("       |--2.修改电话\n\n");
		printf("       |--3.修改E-mail\n\n");
		printf("       |--4.修改QQ\n\n");
		printf("       |--请输入你的选择:");
		scanf("%d",&chioce);
		switch(chioce){
		case 1:printf("\n       |--姓名:");
			   for(getchar(),i=0;(temp->name[i]=getchar())!='\n';i++);
	           temp->name[i]='\0';break;
		case 2:printf("\n       |--电话:");
	           for(i=0;(temp->tel[i]=getchar())!='\n';i++);
	           temp->tel[i]='\0';break;
		case 3:printf("\n       |--E-mail:");
	           for(i=0;(temp->e_mail[i]=getchar())!='\n';i++);
	           temp->e_mail[i]='\0';break;
		case 4:printf("\n       |--QQ:");
	           for(i=0;(temp->qq[i]=getchar())!='\n';i++);
	           temp->qq[i]='\0';break;
		default:printf("\n       |--输入有误!\n");
		}
	}
	else if(judge!='N'&&judge!='n')
		printf("\n       |--选择有误!\n");
	printf("\n       |--是否保存?(Y/N)");                 //数据保存
	if(judge!='Y'&&judge!='y')
		getchar();
	judge=getchar();
	if(judge=='Y'||judge=='y'){
		now->next=temp;
		if(now->next==temp)
			printf("\n       |--储存成功!\n");
		else
			printf("\n       |--储存失败!\n");
	}
	else if(judge!='N'&&judge!='n')
		printf("\n       |--选择有误!\n");
	getchar();
}

void find_data(connection *head){
	connection *temp;
	int i,chioce,flag=0;char data[30];
	printf("       |--1.按姓名查找\n\n");
	printf("       |--2.按电话查找\n\n");
	printf("       |--3.按E-mail查找\n\n");
	printf("       |--4.按QQ查找\n\n");
	printf("       |--请输入你的选择:");
	scanf("%d",&chioce);
	switch(chioce){
	case 1:printf("\n       |--姓名:");
		for(i=0,getchar();(data[i]=getchar())!='\n';i++);
		data[i]='\0';
		for(temp=head->next;temp!=NULL;temp=temp->next){
			if(strcmp(data,temp->name)==0){
				printf("       |--姓名:%s   ",temp->name);
				printf("       |--电话:%s    ",temp->tel);
				printf("       |--E-mail:%s    ",temp->e_mail);
				printf("       |--QQ:%s\n",temp->qq);
				flag=1;
			}
		}
		if(flag==0)
			printf("\n       |--未找到相匹配的项!\n");
		break;
	case 2:printf("\n       |--电话:");
		for(i=0,getchar();(data[i]=getchar())!='\n';i++);
		data[i]='\0';
		for(temp=head->next;temp!=NULL;temp=temp->next){
			if(strcmp(data,temp->tel)==0){
				printf("       |--姓名:%s   ",temp->name);
				printf("       |--电话:%s    ",temp->tel);
				printf("       |--E-mail:%s    ",temp->e_mail);
				printf("       |--QQ:%s\n",temp->qq);
				flag=1;
			}
		}
		if(flag==0)
			printf("\n       |--未找到相匹配的项!\n");
		break;
	case 3:printf("\n       |--E-mail:");
		for(i=0,getchar();(data[i]=getchar())!='\n';i++);
		data[i]='\0';
		for(temp=head->next;temp!=NULL;temp=temp->next){
			if(strcmp(data,temp->e_mail)==0){
				printf("       |--姓名:%s   ",temp->name);
				printf("       |--电话:%s    ",temp->tel);
				printf("       |--E-mail:%s    ",temp->e_mail);
				printf("       |--QQ:%s\n",temp->qq);
				flag=1;
			}
		}
		if(flag==0)
			printf("\n       |--未找到相匹配的项!\n");
		break;
	case 4:printf("\n       |--QQ:");
		for(i=0,getchar();(data[i]=getchar())!='\n';i++);
		data[i]='\0';
		for(temp=head->next;temp!=NULL;temp=temp->next){
			if(strcmp(data,temp->qq)==0){
				printf("       |--姓名:%s   ",temp->name);
				printf("       |--电话:%s    ",temp->tel);
				printf("       |--E-mail:%s    ",temp->e_mail);
				printf("       |--QQ:%s\n",temp->qq);
				flag=1;
			}
		}
		if(flag==0)
			printf("\n       |--未找到相匹配的项!\n");
		break;
	default:printf("\n       |--输入有误!\n");
	}
}

void output_data(connection *head){
	connection *temp;
	getchar();
	for(temp=head->next;temp!=NULL;temp=temp->next){
		printf("\n       |--姓名:%s   ",temp->name);
		printf("       |--电话:%s    ",temp->tel);
		printf("       |--E-mail:%s    ",temp->e_mail);
		printf("       |--QQ:%s\n",temp->qq);
	}
}

void delete_data(connection *head){
	connection *temp,*pre;
	int i,chioce,flag=0;char data[30];
	printf("       |--1. 按姓名删除\n\n");
	printf("       |--2. 按电话删除\n\n");
	printf("       |--3. 按E-mail删除\n\n");
	printf("       |--4. 按QQ删除\n\n");
	printf("       =- 请输入你的选择:");
	scanf("%d",&chioce);
	switch(chioce){
	case 1:printf("\n       |--姓名:");
		for(i=0,getchar();(data[i]=getchar())!='\n';i++);
		data[i]='\0';
		for(pre=head,temp=head->next;temp!=NULL;){
			if(strcmp(data,temp->name)==0){
				pre->next=temp->next;
				temp=temp->next;
				if(pre->next==temp)
					printf("\n       |--删除成功!\n");
				else
					printf("\n       |--删除失败!\n");
				flag=1;
			}
			else{
				temp=temp->next;
				pre=pre->next;
			}
		}
		if(flag==0)
			printf("\n       |--未找到相匹配的项!\n");
		break;
	case 2:printf("\n       |--电话:");
		for(i=0,getchar();(data[i]=getchar())!='\n';i++);
		data[i]='\0';
		for(pre=head,temp=head->next;temp!=NULL;){
			if(strcmp(data,temp->tel)==0){
				pre->next=temp->next;
				temp=temp->next;
				if(pre->next==temp)
					printf("\n       |--删除成功!\n");
				else
					printf("\n       |--删除失败!\n");
				flag=1;
			}
			else{
				temp=temp->next;
				pre=pre->next;
			}
		}
		if(flag==0)
			printf("\n       |--未找到相匹配的项!\n");
		break;
	case 3:printf("\n       |--E-mail:");
		for(i=0,getchar();(data[i]=getchar())!='\n';i++);
		data[i]='\0';
		for(pre=head,temp=head->next;temp!=NULL;){
			if(strcmp(data,temp->e_mail)==0){
				pre->next=temp->next;
				temp=temp->next;
				if(pre->next==temp)
					printf("\n       |--删除成功!\n");
				else
					printf("\n       |--删除失败!\n");
				flag=1;
			}
			else{
				temp=temp->next;
				pre=pre->next;
			}
		}
		if(flag==0)
			printf("\n       |--未找到相匹配的项!\n");
		break;
	case 4:printf("\n       |--QQ:");
		for(i=0,getchar();(data[i]=getchar())!='\n';i++);
		data[i]='\0';
		for(pre=head,temp=head->next;temp!=NULL;){
			if(strcmp(data,temp->qq)==0){
				pre->next=temp->next;
				temp=temp->next;
				if(pre->next==temp)
					printf("\n       |--删除成功!\n");
				else
					printf("\n       |--删除失败!\n");
				flag=1;
			}
			else{
				temp=temp->next;
				pre=pre->next;
			}
		}
		if(flag==0)
			printf("\n       |--未找到相匹配的项!\n");
		break;
	default:printf("\n       |--输入有误!\n");
	}
}








三、运行结果


1、主界面





2.新建联系人





3.删除联系人





4.查找联系人





5.显示所有联系人


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值