期末作业通讯录C语言链表 附报告

又要到期末了,想起来大一还写过这个东西
有缘搜到的先给大家拜个早年
在这里插入图片描述
有一首歌超级好听,最近一直单曲循环
在这里插入图片描述
还有卷卷 http://music.163.com/song?id=1888864266&userid=2051640029

还有一个歌手 气质太好了 Isaac Gracie

莫文蔚和郭一凡合唱的一首歌 http://music.163.com/song?id=1492319441&userid=2051640029

还有还有许嵩 乌鸦

http://music.163.com/song?id=1885118980&userid=2051640029听到陈红鲤的声音总会想到高三英语老师(;へ:) 清哥唱歌真的好听啊

咳咳 说正事

报告链接

代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

//函数声明 
void add(struct node *head);//添加新联系人 
void show(struct node *head);//展示所有联系人名单 
void del(struct node *head);//删除联系人 
void find(struct node *head);//查找联系人 
void change(struct node *head);//更改联系人信息 
void save(struct node *head);//将信息保存到文件里 
void clear();//清屏
void notice();//注意事项 

//创建结构体 
struct node
{
    
    
   	char name[20],tel[20],home[30]; //数据域 
	struct node *next;//指针域 
};

//创建一个指针域为空的结点 
struct node *creat()
{
    
    
     struct node *p;
     p=(struct node *)malloc(sizeof(struct node));
     p->next=NULL;
     return p;
}

int main()
{
    
    	
    struct node *head=creat();//创建一个头结点,作为链表的入口
    int i;     //菜单选择变量 
    while(1)
    {
    
    
        printf("\t\t    欢迎使用通讯录管理系统\n");
        printf("\t****************************************\n"); 
		printf("\t1.使用前注意事项"); 
        printf("\t2.添加新联系人\n");
        printf("\t3.删除联系人        ");
        printf("\t4.查找联系人\n");
        printf("\t5.更改联系人信息");
        printf("\t6.展示所有联系人名单\n");
        printf("\t7.保存到文件");
       	printf("\t\t0.退出 \n");
        printf("\t****************************************\n");
        printf("请输入你需要的操作数:");
        scanf("%d",&i);
        if(i==0){
    
    
			break;        	
		} 
        switch(i)
        {
    
    
			case 1:notice() ;break;
            case 2:add(head);break; 
			case 3:del(head);break;
			case 4:find(head);break;
			case 5:change(head);break; 
            case 6:show(head);break;
            case 7:save(head);break;
            default:printf("输入错误,请重新输入\n");break;
        }
        clear();
    }
    return 0;
}

//注意事项 
void notice(){
    
    
	printf("___________________________________________________________________________\n");
	printf("\t 文件名 通讯录.txt 保存在c盘\t\n");
	printf("\t 每条信息之间请用空格隔开 例如:张三  12345678  xx小区 \n");
	printf("\t 第二次打开程序输入信息后 前一次生成文件的内容会被覆盖 \n");
	printf("___________________________________________________________________________\n");
} 

//采取尾插法创建链表 
void add(struct node *head)
{
    
    
    int n;                    
    struct node *p,*q,*temp=head;
    while(temp->next!=NULL)   //通过循环是找到尾结点
        temp=temp->next;
    q=temp;           //此时temp和q就是尾结点  但是相当于插入的数是头结点  
    n=1;
    while(n!=0)
    {
    
    	//尾插法操作 
		printf("姓名    电话     住址\n");
        p=(struct node *)malloc(sizeof(struct node));//申请新空间
        scanf("%s%s%s",p->name,p->tel,p->home);             
        q->next=p;       //新节点插入到q的后面    
        q=p;            //q指向新的尾节点 
		p->next=NULL; 
		printf("输入0退出添加 否则按任意键继续: ");  
		scanf("%d",&n);
    }
}

//删除联系人
void del(struct node *head)
{
    
    
    
   	char i[20];
   	printf("请输入要删除联系人的姓名/电话号/住址:\n"); 
   	scanf("%s",i);
	node *p,*q;
	p=head->next;
	q=head;
	while (p!=NULL){
    
       
	// 删除操作:q始终为p的前一个结点 当p的数据域与i匹配时,那么就要把p删掉(q的指针域指向p的指针域再把p释放) 
		if(strcmp(p->name,i)==0||strcmp(p->tel,i)==0||strcmp(p->home,i)==0){
    
      //i与姓名/电话/住址任何一个匹配 
			q->next=p->next;   
			free (p);       //释放p 
			printf("删除成功\n"); 
			return;	
		}
		q=p;
		p=p->next;
	}          
	printf("无此人的信息\n");   //p遍历到最后都没有发现与i匹配的 代表没有此人 
} 

//查找函数 
void find(struct node *head)
{
    
    
    struct node *p;
    p=head;
    char i[20];
    printf("请输入你要查找联系人的姓名/住址/电话: ");
    scanf("%s",i);
   	while(p!=NULL){
    
    
	   	if(strcmp(p->name,i)==0||strcmp(p->tel,i)==0||strcmp(p->home,i)==0)
	   	{
    
    
			printf("姓名    电话     住址\n");
	   	    printf("%s  %s  %s\n",p->name,p->tel,p->home);
	   	    return;
	   	 }
		p=p->next;
   } 
   	printf("没有该联系人信息\n");
}

//修改函数 
void change(struct node *head){
    
    
	struct node *p=head;char i[20];	
	printf("输入要修改的人的信息 姓名/电话/住址任选一\n");
	scanf("%s",i);
	while(p!=NULL){
    
    
		if(strcmp(p->name,i)==0||strcmp(p->tel,i)==0||strcmp(p->home,i)==0)
		  {
    
    
		  	printf("输入要修改的信息 \n姓名    电话   住址\n");
		   	scanf("%s%s%s",p->name,p->tel,p->home);
		   	printf("修改成功\n") ;
		   	return ;
		}
		p=p->next;
	}
	printf("没有该联系人信息\n");
}

//显示函数 
void show(struct node *head)
{
    
    
    int i=0;    //计数 控制换行 
    struct node *p;
    p=head->next;
    printf("姓名     电话      地址\n");
    while(p!=NULL)
    {
    
    	
		i++; 
        printf("%s  %s  %s\n",p->name,p->tel,p->home);
        p=p->next;
        if(i%10==0){
    
    
        	printf("每10行换一次屏 按任意键换屏");
		    getch();
		    system("cls");
		}
		
    }
	printf("已经全部显示完毕\n");
}

//保存到文件 
void save(struct node *head)  
{
    
     
	FILE *fp;
	fp=fopen("C:/通讯录.txt","wb"); 
	head=head->next;
	while(head!=NULL)
	{
    
     		 
		fprintf(fp, "   %s    %s    %s\r\n", head->name ,head->tel,head->home);
		head=head->next;
	}
	 printf("保存成功\n") ; 
	 fclose(fp);
 }
 
//按任意键清屏 
void clear()
{
    
    
    printf("\n按任意键返回菜单");
    getch();
    system("cls");
}

猜你喜欢

转载自blog.csdn.net/xiaozhazhazhazha/article/details/121757972