来源:互联网 发布:孕妇装比较好的淘宝店 编辑:程序博客网 时间:2024/05/22 20:02
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/


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


struct data//创建结点
{
char name[10];
char sex[5];
char age[2];
char qq[15];
char phone[15];
struct data*next;
};


typedef struct data Data;
typedef struct data* Link;


int load_link(Link *head);//初始化用户信息
void mainmenu(Link *head);//菜单函数
void create(Link *head);//创建新用户函数
void delate(Link *head);//删除用户函数
void modify(Link *head);//修改用户函数
void search(Link *head);//查找用户函数
void display(Link *head);//显示所有用户函数
int save_link(Link *head);//保存所有用户信息
void quit(Link *head);//退出通信录函数


void delate_name(Link *head);//用查找用户名字方式,删除用户结点
void delate_qq(Link *head);//用查找用户QQ方式,删除用户结点
void delate_phone(Link *head);//用查找用户电话方式,删除用户结点


void modify_qq(Link *head);//用查找用户名字方式,修改用户QQ
void modify_phone(Link *head);//用查找用户名字方式,修改用户电话


void search_name(Link *head);//按用户名字查找用户
void search_qq(Link *head);//按用户QQ查找用户
void search_phone(Link *head);//按用户电话查找用户


void insert_node_head(Link *head,Data *data);






int main()
{
Link head = NULL;
load_link(&head);
mainmenu(&head);
    return 0;
}
int load_link(Link *head)
{
FILE *fp = NULL;
Data data = {0};
int count = 0;


if((fp = fopen("contacts.txt","r")) == NULL)
{
if(errno == ENOENT)
{
printf("没有找到任何用户信息!\n");
return 0;
}
else
{
printf("未成功打开 contacts.txt!\n");
   exit(-1);
}
}


fseek(fp,0,SEEK_SET);
while((fread(&data,sizeof(Data),1,fp)) == 1)
{
insert_node_head(head,&data);
count++;
fseek(fp,count*sizeof(Data),SEEK_SET);
}


fclose(fp);


printf("通信录用户个数:%d\n",count);
return 0;
}
void insert_node_head(Link *head,Data *data)
{
Link tmp = *head;
Link p = NULL;
Link newnode = NULL;


newnode = (Link)malloc(sizeof(Data));
    if(newnode == NULL)
{
printf("malloc error1!\n");
exit(-1);
}
:
memcpy(newnode,data,sizeof(Data));
if(*head == NULL)
{
*head = newnode;
newnode->next = NULL;
}
else
{
while(tmp != NULL)
{
p = tmp;
tmp = tmp->next;
}
p->next = newnode;
newnode->next = NULL;
}


}
int save_link(Link *head)
{
FILE *fp = NULL;
Link tmp = *head;
int count = 0;


if((fp = fopen("contacts.txt","w+")) == NULL)
{
printf("未成功打开contacts.txt!\n");
exit(-1);
}
if(tmp == NULL)
{
printf("没有用户信息需要保存!\n");
return 0;
}

//fseek(fp,0,SEEK_SET);
while(tmp != NULL)
{
fseek(fp,count*sizeof(Data),SEEK_SET);
fwrite(tmp,sizeof(Data),1,fp);
//fseek(fp,0,SEEK_END);
tmp = tmp->next;
count++;
}
printf("保存用户信息成功!\n");


fclose(fp);
return 0;
}


//菜单函数
void mainmenu(Link *head)
{
int num;


printf("/**********通信录 V1.0***********/\n");
printf("/********(1),添加用户信息********/\n");     
printf("/********(2),删除用户信息********/\n");
printf("/********(3),修改用户信息********/\n");
    printf("/********(4),查询用户信息********/\n");
printf("/********(5),显示用户信息********/\n");
printf("/********(6),保存用户信息********/\n");
printf("/********(7),退出系统************/\n");
printf("/********************************/\n");
while(1)
{
printf("请输入操作的序号:");
   scanf("%d",&num);
   printf("\n");
if(num <= 0 || num >= 8)
{
printf("输入序号有误!\n");
}
else
{
break;
}
}

switch(num)
{
case 1: create(head);break;
case 2: delate(head);break;
case 3: modify(head);break;
case 4: search(head);break;
case 5: display(head);break;
case 6: save_link(head);
  mainmenu(head);
break;
case 7: quit(head);break;
}
}


//添加用户函数
void create(Link *head)
{
int num;
Link tmp = *head;
Link newnode = NULL;


newnode = (Link)malloc(sizeof(Data));


if(newnode == NULL)
{
printf("malloc error!\n");
exit(-1);
}


printf("姓名:");
scanf("%s",newnode->name);
printf("性别:");
scanf("%s",newnode->sex);
printf("年龄:"); 
scanf("%s",newnode->age);
printf("QQ:");   
scanf("%s",newnode->qq);
printf("电话:");
scanf("%s",newnode->phone);


if(*head == NULL)
{
*head = newnode;
newnode->next = NULL;
printf("创建用户成功!\n");
}
else
{
while(tmp->next != NULL)
{
tmp = tmp->next;
}
tmp->next = newnode;
newnode->next = NULL;
printf("创建用户成功!\n");
}
while(1)
{
printf("是(1)否(2)继续操作!\n请输入操作序号:");
   scanf("%d",&num);
if(num == 1 || num == 2)
{
break;
}
else
{
printf("输入序号有误!\n");
}
}
if(num == 1)
{
create(head);
}
    else
    {
mainmenu(head);
}
}
//删除用户函数
void delate(Link *head)
{
int num;


printf("/********输入删除方式*******/\n");
printf("/********(1)名字************/\n");
printf("/********(2)QQ**************/\n");
printf("/********(3)电话************/\n");
while(1)
{
printf("请输入操作的序号:");
   scanf("%d",&num);
   printf("\n");
if(num <= 0 || num >= 4)
{
printf("输入序号有误!\n");
}
else
{
break;
}
}
switch(num)
{
case 1: delate_name(head);break;
case 2: delate_qq(head);break;
case 3: delate_phone(head);break;
}
}
//按名字删除用户函数
void delate_name(Link *head)
{
int num;
Link tmp = *head;
Link p = NULL;
char delate_name[10];


printf("输入需要删除的用户名字:");
scanf("%s",delate_name);


if(tmp == NULL)
{
printf("通信录是空的!\n");
}
else
{
while(tmp != NULL && strcmp(tmp->name,delate_name))
  {
  p = tmp;
  tmp = tmp->next;  
  }
if(tmp != NULL)
{
if(tmp == *head)
{
   free(tmp);
   *head = tmp->next;
printf("删除用户成功!\n");
   }
   else
   {
  p->next = tmp->next;
  free(tmp);
  printf("删除用户成功!\n");
   }  
}
else
{
printf("没有这个用户名字!\n");
}
}
while(1)
{
printf("是(1)否(2)继续操作!\n请输入操作序号:");
   scanf("%d",&num);
if(num == 1 || num == 2)
{
break;
}
else
{
printf("输入序号有误!\n");
}
}
if(num == 1)
{
delate(head);
}
    else
    {
mainmenu(head);
}
}
//按QQ删除用户函数
void delate_qq(Link *head)
{
int num;
Link tmp = *head;
Link p = NULL;
char delate_qq[15];


printf("输入需要删除的用户QQ:");
scanf("%s",delate_qq);


if(tmp == NULL)
{
printf("通信录是空的!\n");
}
else
{
while(tmp != NULL && strcmp(tmp->qq,delate_qq))
  {
  p = tmp;
  tmp = tmp->next;
  }
if(tmp != NULL)
{
if(tmp == *head)
   {
free (tmp);
   *head = tmp->next;
   printf("删除用户成功!\n");
   }
   else
  {
  p->next = tmp->next;
  free(tmp);
  printf("删除用户成功!\n");
  }
}
else
{
printf("没有这个用户!\n");
}
}
while(1)
{
printf("是(1)否(2)继续操作!\n请输入操作序号:");
   scanf("%d",&num);
if(num == 1 || num == 2)
{
break;
}
else
{
printf("输入序号有误!\n");
}
}
if(num == 1)
{
delate(head);
}
    else
    {
mainmenu(head);
}
}
//按电话删除用户函数
void delate_phone(Link *head)
{
int num;
Link tmp = *head;
Link p = NULL;
char delate_phone[15];


printf("输入需要删除的用户电话:");
scanf("%s",delate_phone);


if(tmp == NULL)
{
printf("通信录是空的!\n");
}
else
{
while(tmp != NULL && strcmp(tmp->phone,delate_phone))
  {
  p = tmp;
  tmp = tmp->next;
  }
if(tmp != NULL)
{
if(tmp == *head)
   {
  free(tmp);
   *head = tmp->next;
   printf("删除用户成功!\n");
   }
   else
   {
  p->next = tmp->next;
   free(tmp);
   printf("删除用户成功!\n");
   }
}
else
{
printf("没有这个用户!\n");
}
}
while(1)
{
printf("是(1)否(2)继续操作!\n请输入操作序号:");
   scanf("%d",&num);
if(num == 1 || num == 2)
{
break;
}
else
{
printf("输入序号有误!\n");
}
}
if(num == 1)
{
delate(head);
}
    else
    {
mainmenu(head);
}
}
//按名字查找用户修改信息
void modify(Link *head)
{
int num;


printf("/********输入修改信息*******/\n");
printf("/********(1)QQ**************/\n");
printf("/********(2)电话************/\n");
while(1)
{
printf("请输入操作的序号:");
   scanf("%d",&num);
   printf("\n");
if(num <= 0 || num >= 3)
{
printf("输入序号有误!\n");
}
else
{
break;
}
}
switch(num)
{
case 1: modify_qq(head);break;
case 2: modify_phone(head);break;
}
}
//按名字查找用户修改QQ信息
void modify_qq(Link *head)
{
int num;
Link tmp = *head;
char modify_name[10];
char new_qq[15];


printf("输入需要修改QQ的用户名字:");
scanf("%s",modify_name);


if(tmp == NULL)
{
printf("通信录是空的!\n");
}
else
{
while(tmp != NULL && strcmp(tmp->name,modify_name))
{
tmp = tmp->next;
}
if(tmp != NULL)
{
printf("输入用户的新的QQ:");
   scanf("%s",new_qq);
   strcpy(tmp->qq,new_qq);
printf("修改QQ成功!\n");
}
else
{
printf("没有这个用户!\n");
}
}
while(1)
{
printf("是(1)否(2)继续操作!\n请输入操作序号:");
   scanf("%d",&num);
if(num == 1 || num == 2)
{
break;
}
else
{
printf("输入序号有误!\n");
}
}
if(num == 1)
{
modify(head);
}
    else
    {
mainmenu(head);
}
}
//按名字查找用户修改电话信息
void modify_phone(Link *head)
{
int num;
Link tmp = *head;
char modify_name[10];
char new_phone[15];


printf("输入需要修改电话的用户名字:");
scanf("%s",modify_name);


if(tmp == NULL)
{
printf("通信录是空的!\n");
}
else
{
while(tmp != NULL && strcmp(tmp->name,modify_name))
{
tmp = tmp->next;
}
if(tmp != NULL)
{
printf("输入用户新的电话:");
   scanf("%s",new_phone);
   strcpy(tmp->phone,new_phone);
printf("修改电话成功!\n");
}
else
{
printf("没有这个用户!\n");
}
}
while(1)
{
printf("是(1)否(2)继续操作!\n请输入操作序号:");
   scanf("%d",&num);
if(num == 1 || num == 2)
{
break;
}
else
{
printf("输入序号有误!\n");
}
}
if(num == 1)
{
modify(head);
}
    else
    {
mainmenu(head);
}
}
//查询用户信息
void search(Link *head)
{
int num;


printf("/********输入查询方式*******/\n");
printf("/********(1)姓名************/\n");
printf("/********(2)QQ**************/\n");
printf("/********(3)电话************/\n");
while(1)
{
printf("请输入操作的序号:");
   scanf("%d",&num);
   printf("\n");
if(num <= 0 || num >=4 )
{
printf("输入序号有误!\n");
}
else
{
break;
}
}


switch(num)
{
case 1: search_name(head);break;
case 2: search_qq(head);break;
case 3: search_phone(head);break;
}
}
//按名字查找用户信息
void search_name(Link *head)
{
int num;
Link tmp = *head;
char search_name[10];
printf("输入需要查找信息的用户名字:");
scanf("%s",search_name);


if(tmp == NULL)
{
printf("通信录是空的!\n");
}
else
{
while(tmp != NULL && strcmp(tmp->name,search_name))
{
tmp = tmp->next;
}
if(tmp != NULL)
{
printf("姓名:%s\n",tmp->name);
   printf("性别:%s\n",tmp->sex);
   printf("年龄:%s\n",tmp->age);
   printf("QQ:%s\n",tmp->qq);
   printf("电话:%s\n",tmp->phone);
}
else
{
printf("没有这个用户!\n");
}
}
while(1)
{
printf("是(1)否(2)继续操作!\n请输入操作序号:");
   scanf("%d",&num);
if(num == 1 || num == 2)
{
break;
}
else
{
printf("输入序号有误!\n");
}
}
if(num == 1)
{
search(head);
}
    else
    {
mainmenu(head);
}
}
//按QQ查询用户信息
void search_qq(Link *head)
{
int num;
Link tmp = *head;
char search_qq[15];
printf("输入需要查找信息的用户QQ:");
scanf("%s",search_qq);


if(tmp == NULL)
{
printf("通信录是空的!\n");
}
else
{
while(tmp != NULL && strcmp(tmp->qq,search_qq) )
{
tmp = tmp->next;
}
if(tmp != NULL)
{
printf("姓名:%s\n",tmp->name);
   printf("性别:%s\n",tmp->sex);
   printf("年龄:%s\n",tmp->age);
   printf("QQ:%s\n",tmp->qq);
   printf("电话:%s\n",tmp->phone);
}
else
{
printf("没有这个用户!\n");
}
}
while(1)
{
printf("是(1)否(2)继续操作!\n请输入操作序号:");
   scanf("%d",&num);
if(num == 1 || num == 2)
{
break;
}
else
{
printf("输入序号有误!\n");
}
}
if(num == 1)
{
search(head);
}
    else
    {
mainmenu(head);
}


}
//按电话查询用户信息
void search_phone(Link *head)
{
int num;
Link tmp = *head;
char search_phone[15];
printf("输入需要查询信息的用户电话:");
scanf("%s",search_phone);


if(tmp == NULL)
{
printf("通信录是空的!\n");
}
else
{
while(tmp != NULL && strcmp(tmp->phone,search_phone))
{
tmp = tmp->next;
}
if(tmp != NULL)
{
printf("姓名:%s\n",tmp->name);
   printf("性别:%s\n",tmp->sex);
   printf("年龄:%s\n",tmp->age);
   printf("QQ:%s\n",tmp->qq);
   printf("电话%s\n",tmp->phone);
}
else
{
printf("没有这个用户!\n");
}
}
while(1)
{
printf("是(1)否(2)继续操作!\n请输入操作序号:");
   scanf("%d",&num);
if(num == 1 || num == 2)
{
break;
}
else
{
printf("输入序号有误!\n");
}
}
if(num == 1)
{
search(head);
}
    else
    {
mainmenu(head);
}
}
//显示所有用户信息
void display(Link *head)
{
int num;
Link tmp = *head;


if(tmp == NULL)
{
printf("通信录是空的!\n");
}
else
{
while(tmp != NULL)
{
printf("姓名:%s\n",tmp->name);
   printf("性别:%s\n",tmp->sex);
   printf("年龄:%s\n",tmp->age);
   printf("QQ:%s\n",tmp->qq);
   printf("电话:%s\n",tmp->phone);
tmp = tmp->next;
}
}
while(1)
{
printf("是(1)否(2)继续操作!\n请输入操作序号:");
   scanf("%d",&num);
if(num == 1 || num == 2)
{
break;
}
else
{
printf("输入序号有误!\n");
}
}
if(num == 1)
{
display(head);
}
    else
    {
mainmenu(head);
}
}
//退出函数
void quit(Link *head)
{
Link tmp = *head;
while(tmp != NULL)
{
free(tmp);
tmp = tmp->next;
}
*head = NULL;
printf("非常谢谢你的使用!\n");
exit(-1);
}
0 0
原创粉丝点击