实验:链表实现通讯录系统

系统的编译器code::blocks,还有部分问题有待解决。

代码块:

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
#define OK 1        //原为1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
typedef int Status;
typedef struct Information
{
	char name[20];
	char number[10];
	char age[3];
	char gender[5];
	char addrass[20];
	char zip[8];
	char telephone[12];
	struct Information *next;

}
Elemtype;
Elemtype *head=NULL;
Status password();
Status showmenu();
Status Appenditem();
Status print();
Status Finditem1();
Status Finditem2();
Status Removeitem1();
Status Removeitem2();
Status Saveandfree();
Status Open();
Status Modify();
int main()
{
	password();
	system("cls");
	Open();
	while(1)
	{
		char ch;
		showmenu();
		scanf("%c",&ch);
		switch(ch)
		{
			case'1':Appenditem();
			break;
			case'2':print();
			break;
			case'3':Finditem1();
			break;
			case'4':Finditem2();
			break;
			case'5':Removeitem1();
			print();
			break;
			case'6':Removeitem2();
			print();
			break;
			case'7':Modify();
			break;
			case'8':Saveandfree();
            exit(0);
            break;
			default:
			printf("选择错误!");

		}
	}
	return OK;

}
Status password()
{
	int w,g=0;
	char str1[20]={"123456"};
	char str2[20];
	do{
		cout<<"--------欢迎进入通讯录管理系统-------"<<endl;
		cout<<"**************************************"<<endl;
		cout<<"☆☆☆☆☆☆请输入密码☆☆☆☆☆☆☆"<<endl;
		cout<<"**************************************"<<endl;
		gets(str2);
		if(!strcmp(str1,str2))
		{
			cout<<"输入密码正确!"<<endl;w=1;
		 }
		 else{
		 	w=0;cout<<"输入密码错误,请重新输入!"<<endl;
		 }
		 }while(w==0);
		 return OK;
}
    Status showmenu()
	{
		printf("\n**********通讯录系统*********\n");
		printf("\t1.添加通讯录内容\n");
		printf("\t2.通讯录查看列表\n");
		printf("\t3.按姓名查询\n");
		printf("\t4.按编号查询\n");
		printf("\t5.按姓名删除通讯录\n");
		printf("\t6.按编号删除通讯录\n");
		printf("\t7.按编号修改信息\n");
		printf("\t8.保存并退出!\n");
		printf("********************************\n");
		printf("\t 请选择:");
		return OK;
	}
	Status Modify()
	{
		Elemtype *p;
		char findnumber[20];
		printf("请输入要修改的信息的编号:\n");
		scanf("%s",findnumber);
		for(p=head->next;p!=NULL;p=p->next);
		{
			if(strcmp(p->number,findnumber)==0)
			{
				printf("重新输入姓名:\n");
				scanf("%s",p->name);
				printf("重新输入性别:\n");
				scanf("%s",p->gender);
				printf("重新输入年龄\n");
				scanf("%s",p->age);
				printf("重新输入地址:\n");
				scanf("%s",p->addrass);
				printf("重新输入邮编:\n");
				scanf("%s",p->zip);
				printf("重新输入电话:\n");
				scanf("%s",p->telephone);
				printf("修改信息成功!\n");
			}
		}
		return OK;
	}
	Status Appenditem()
	{
		Elemtype *p1=NULL, *p2=NULL;
		p1=(Elemtype *)malloc(sizeof(Elemtype));
		printf("输入姓名:\n");
		scanf("%s",p1->name);
		printf("输入编号:\n");
		scanf("%s",p1->number);
		printf("输入性别:\n");
		scanf("%s",p1->gender);
		printf("输入年龄:\n");
		scanf("%s",p1->age);
		printf("输入地址:\n");
		scanf("%s",p1->addrass);
		printf("输入邮编:\n");
		scanf("%s",p1->zip);
		printf("输入电话:\n");
		scanf("%s",p1->telephone);
		p1->next=NULL;
		if(head==NULL)
		{
			head=(Elemtype *)malloc(sizeof(Elemtype));
			head->next=p1;
		}
		else
		{
			for(p2=head;p2->next!=NULL;p2=p2->next);
			p2->next=p1;
		 }
		printf("此信息已添加!");
		return OK;
	}
	Status print()
	{
		Elemtype *p=NULL;
		if(head->next!=NULL)
		{
			printf("******通讯录系统********");
			printf("姓名\t编号\t\t性别\t年龄\t地址\t邮编\t电话\n");
			for(p=head->next;p!=NULL;p=p->next)
			printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->name,p->number,p->gender,p->age,p->addrass,p->zip,p->telephone);
		}
		else
		{
			printf("此通讯录中无记录,请输入记录后再使用本功能!\n");
			return ERROR;
		}
		return OK;
	}
	Status Finditem1()
	{
		Elemtype*p;
		char findname[20];
		printf("请输入要查询的姓名:\n");
		scanf("%s",findname);
		printf("***********通讯录系统**********\n");
		printf("姓名\t   编号\t   性别\t   年龄\t   地址\t   编码\t  电话\n");
		for(p=head->next;p!=NULL;p=p->next)
		{
			if(strcmp(p->name,findname)==0)
			printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->name,p->number,p->gender,p->age,p->addrass,p->zip,p->telephone);
		}
		return OK;
	}
	Status Finditem2()
	{
		Elemtype*p;
		char findnumber[20];
		printf("请输入要查找的编号\n");
		scanf("%s",findnumber);
		printf("***********通讯录系统***********\n");
		printf("姓名\t学号\t性别\t年龄\t地址\t邮编\t电话\n");
		for(p=head->next;p!=NULL;p=p->next)
		{
			if(strcmp(p->number,findnumber)==0)
			printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->name,p->number,p->gender,p->age,p->addrass,p->zip,p->telephone);
		}
		return OK;
	}
	Status Removeitem1()
	{
		char findname[20];
		Elemtype*p=head->next,*pr=head->next;
		printf("请输入要删除的姓名:\n");
		scanf("%s",&findname);
		if(head->next==NULL)
		{
			printf("无此节点!\n");
			return ERROR;
		}
		while((strcmp(p->name,findname)!=0)&&p->next!=NULL)
		{
			pr=p;
			p=p->next;
		}
		if(strcmp(findname,p->name)==0)
		{
			printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->name,p->number,p->gender,p->age,p->addrass,p->zip,p->telephone);
			if(p==head->next)
			head->next=p->next;
			else
			pr->next=p->next;
			free(p);
		}
		printf("此信息已删除!\n");
		return OK;
	}
	Status Removeitem2()
	{
		char findnumber[20];
		Elemtype*p=head->next,*pr=head->next;
		printf("请输入要删除的编号:\n");
		scanf("%s",findnumber);
		if(head==NULL)
		{
			printf("无此节点!\n");
			return ERROR;
		}
		while((strcmp(p->number,findnumber)!=0)&&p->next!=NULL)
		{
			pr=p;
			p=p->next;
		}
		if(strcmp(findnumber,p->number)==0)
		{
			printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->name,p->number,p->gender,p->age,p->addrass,p->zip,p->telephone);
			if(p==head->next)
			head->next=p->next;
			else
			pr->next=p->next;
			free(p);
		}
		printf("此信息已删除!");
		return OK;
	}
	Status Saveandfree()
	{
		Elemtype*p=NULL;
		FILE*fp;
		char*Book="books.txt";
		if(head==NULL){
			printf("\n记录为空!\n");
			return ERROR;
		}
		else p=head->next;
		if((fp=fopen(Book,"wb+"))==NULL)
		{
			printf("\n打不开文件!\n");
			return ERROR;
		}
		while(p!=NULL)
		{
			fwrite(p,sizeof(Elemtype),1,fp);
			p=p->next;
		}
		printf("保存完毕!");
		fclose(fp);
		for(;head->next!=NULL;)
		{
			p=head->next;
			head->next=head->next->next;
			free(p);
		}
		free(head);
		return OK;
	}
	Status Open()
	{
		FILE*fp;
		Elemtype*p1=NULL,*p2=NULL,*temp=NULL;
		if((fp=fopen("books.txt","rb+"))==NULL)
		{
			printf("新的通讯系统");
			return OK;
		}
		head=(Elemtype*)malloc(sizeof(Elemtype));
		head->next=NULL;
		temp=p2=head;
		while(!feof(fp))
		{
		p1=(Elemtype*)malloc(sizeof(Elemtype));
		temp=p2;
		p2->next=p1;
		p2=p1;
		fread(p1,sizeof(Elemtype),1,fp);
	}
	temp->next=NULL;
	fclose(fp);
	return OK;
}

常规的交互界面样式:

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值