一、用单链表编写的带有部分功能的简易通讯录
#include <stdio.h>
#include "Linklist.h"
#include <stdlib.h>
#include <string.h>
enum {ADD = 1,INFORMATION,FIND,DELETE}; //功能选项
enum {ID = 1,PHONE,CONPANY,NAME}; //添加选项
void Menu(); //主菜单
void Menu_add(); //添加信息菜单
void Menu_search(); //查找菜单
void Menu_delete(); //删除菜单
void Func(List *ls,int k); //功能选择
void Add(List *ls); //添加信息
void Search(List *ls,int i); //查找信息
void Delete(List *ls,int i); //删除信息
BOOL array(List *ls); //排列信息
int main()
{
List *ls = Creat(); //创建链表
while(1)
{
system("clear");
Menu();
int k; //功能选项
scanf("%d",&k);
Func(ls,k);
}
return 0;
}
//菜单模块
void Menu()
{
printf("1、添加好友信息\n");
printf("2、全部好友信息\n");
printf("3、搜索好友\n");
printf("4、删除好友\n");
}
void Menu_add()
{
printf("1、添加ID号\n");
printf("2、添加手机号码\n");
printf("3、添加公司电话\n");
printf("4、添加姓名\n");
}
void Menu_search()
{
printf("1、根据ID号查找\n");
printf("2、根据手机号码查找\n");
printf("3、根据公司电话查找\n");
printf("4、根据姓名查找\n");
}
void Menu_delete()
{
printf("1、根据ID号删除\n");
printf("2、根据手机号码删除\n");
printf("3、根据公司电话删除\n");
printf("4、根据姓名删除\n");
}
//功能选择模块
void Func(List *ls,int k)
{
int j = 1; //用于退出显示部分
switch(k)
{
case ADD:
system("clear");
Menu_add();
Add(ls);
break;
case INFORMATION:
system("clear");
Display(ls);
while(1)
{
printf("请按0退出\n");
scanf("%d",&j);
if(0 == j)
break;
}
break;
case FIND:
system("clear");
Menu_search();
int i;
scanf("%d",&i);
Search(ls,i);
break;
case DELETE:
system("clear");
Menu_delete();
int n;
scanf("%d",&n);
Delete(ls,n);
break;
default:
printf("无效的选项\n");
sleep(2);
break;
}
}
//添加模块
void Add(List *ls)
{
Node *pb = (Node *)malloc(sizeof(Node)/sizeof(char));
system("clear");
printf("请输入ID\n");
scanf("%d",&(pb->id));
system("clear");
printf("请输入phone\n");
scanf("%ld",&(pb->phone));
system("clear");
printf("请输入company\n");
scanf("%ld",&(pb->company));
system("clear");
printf("请输入name\n");
scanf("%s",pb->name);
inster_last(ls,pb);
}
//查找模块
void Search(List *ls,int i)
{
Node *pb = (Node *)malloc(sizeof(Node)/sizeof(char));
Node *tmp = ls->head;
int j; //用于退出显示部分
switch(i)
{
case ID: //通过id查找
system("clear");
printf("请根据id查找\n");
scanf("%d",&(pb->id));
while(tmp->next)
{
tmp = tmp->next;
if(pb->id == tmp->id)
{
printf("id:%d\t",tmp->id);
printf("phone:%ld\t",tmp->phone);
printf("company%ld\n",tmp->company);
}
}
while(1) //退出显示
{
printf("请按0退出\n");
scanf("%d",&j);
if(0 == j)
return;
}
printf("没有此信息\n"); //无信息反馈
sleep(2);
break;
case PHONE: //通过电话找
system("clear");
printf("请根据phone查找\n");
scanf("%ld",&(pb->phone));
while(tmp->next)
{
tmp = tmp->next;
if(pb->phone == tmp->phone)
{
printf("id:%d\t",tmp->id);
printf("phone:%ld\t",tmp->phone);
printf("company%ld\n",tmp->company);
}
}
while(1) //退出显示
{
printf("请按0退出\n");
scanf("%d",&j);
if(0 == j)
return;
}
printf("没有此信息\n"); //无信息反馈
sleep(2);
break;
case CONPANY: //通过公司电话找
system("clear");
printf("请根据company查找\n");
scanf("%ld",&(pb->company));
while(tmp->next)
{
tmp = tmp->next;
if(pb->company == tmp->company)
{
printf("id:%d\t",tmp->id);
printf("phone:%ld\t",tmp->phone);
printf("company%ld\n",tmp->company);
}
}
while(1) //退出显示
{
printf("请按0退出\n");
scanf("%d",&j);
if(0 == j)
return;
}
printf("没有此信息\n"); //无信息反馈
sleep(2);
break;
case NAME: //通过名字找
system("clear");
printf("请根据name查找\n");
scanf("%s",pb->name);
while(tmp->next)
{
tmp = tmp->next;
if(0 == strcmp(pb->name,tmp->name))
{
printf("id:%d\t",tmp->id);
printf("phone:%ld\t",tmp->phone);
printf("company%ld\n",tmp->company);
}
}
while(1) //退出显示
{
printf("请按0退出\n");
scanf("%d",&j);
if(0 == j)
return;
}
printf("没有此信息\n"); //无信息反馈
sleep(2);
break;
default: //无效指令
printf("无效指令\n");
sleep(2);
break;
}
}
//删除模块
void Delete(List *ls,int i)
{
int count;
int j ; //用于判断是否成功删除
Node *pb = (Node *)malloc(sizeof(Node)/sizeof(char));
switch(i)
{
case ID:
system("clear");
printf("请根据id删除\n");
scanf("%d",&(pb->id));
delete_pos(ls,pb);
j = delete_pos(ls,pb);
printf("dsadasdas%d\n",delete_pos(ls,pb));
if(TRUE == j)
{
printf("删除成功\n");
sleep(1);
}
if(FALSE == j)
{
printf("删除失败\n");
sleep(1);
}
break;
case PHONE:
system("clear");
printf("请根据phone查找\n");
j = delete_pos(ls,pb);
if(0 == j)
{
printf("删除成功\n");
sleep(1);
}
if(1 == j)
{
printf("删除失败\n");
sleep(1);
}
break;
case CONPANY:
system("clear");
printf("请根据name删除\n");
scanf("%ld",&(pb->company));
delete_pos(ls,pb);
j = delete_pos(ls,pb);
if(0 == j)
{
printf("删除成功\n");
sleep(1);
}
if(1 == j)
{
printf("删除失败\n");
sleep(1);
}
break;
case NAME:
system("clear");
printf("请根据company查找\n");
scanf("%s",pb->name);
delete_pos(ls,pb);
count = delete_pos(ls,pb);
break;
default:
printf("无效指令\n");
sleep(2);
break;
}
}
二、牛客网错题
1、
2、
3、