数据结构-单位员工信息管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单位员工通讯录管理系统
1 设计目的
(1)熟悉算法与数据结构的基本知识解决实际编程中的数据结构设计和算法设计问题。

(2)掌握线性表的基本操作在两种存储结构上的实现。

(3)了解软件设计及软件测试的能力。

2 设计思路
本次设计是对线性链表的应用,我们在此实验中运用了了单向链表和双向链表两种设计方法。

以管理系统的主程序为主,不断调用子程序实现通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及退出通讯录系统等功能。

3 设计过程
本次实验分为8部分,第一部分是主程序,后面七部分分别实现系统的建立、查询、删除、插入、修改、显示、退出功能。

3.1方案论证
3.2程序设计
经过需求分析得到详细的设计流程图以及各部分的程序,各部分的子程序通过要通过主程序的调用才能实行,在实现每一个子程序时,还要考虑是否能够实行,该如何实行,程序要运用到选择性语句(if 、when等)。

详细设计流程图如图2所示
建立程序:
printf("\n\n\t\t\t***建立通讯录***\n");
for(i=0;i<n;i++)
{p=(staff*)malloc(sizeof(staff));
printf("员工编号:");
scanf("%d",&p->num);
printf("员工姓名:");
scanf("%s",p->name);
printf("手机号码:");
scanf("%d",&p->phone);
printf("电话号码:");
scanf("%d",&p->call);
p->next=L->next;
L->next=p;
printf("\t\t\t****输入成功!***\n");} return L;
查询程序:
printf("\n\n\t\t\t**查询通讯录记录**\n");
printf("\n\t\t\t请选择查询方式:\n");
printf("\t\t\t*****************\n");
printf("\t\t\t# 1------编号 #\n");
printf("\t\t\t# 2------姓名 #\n");
printf("\t\t\t# 3------手机 #\n");
printf("\t\t\t# 4------电话 #\n");
printf("\t\t\t*****************\n");
printf("\t\t\t请选择:");
scanf("%d",&m);
while(m!=1&&m!=2&&m!=3&&m!=4)
{ printf("\t输入错误!!!请重新选择:");
scanf("%d",&m);
};
if(m==1)
{ int t;
printf("\n请输入想查询的编号:");
scanf("%d",&t);
while(p&&(p->num)!=t)
{p=p->next;}
if(p==NULL)
{printf("\t通讯录中没有此人!\n"); }
else
{printf("\n\t\t\t****员工信息****\n");
printf("员工编号: %d\n",p->num);
printf("员工姓名: %s\n",p->name);
printf("手机电话: %d\n",p->phone);
printf("电话号码: %d\n",p->call);} } ;
if(m==2)
{ char s[8];
printf("\n请输入想查询的姓名:");
scanf("%s",s);
while(strcmp(p->name,s)!=0&&(p!=0))
{p=p->next;}
if(strcmp(p->name,s)==0)
{printf("\n\t\t\t****员工信息****\n");
printf("员工编号: %d\n",p->num);
printf("员工姓名: %s\n",p->name);
printf("手机号码: %d\n",p->phone);
printf("电话号码: %d\n",p->call);
}
else
printf("\t通讯录中没有此人!\n");
} ;
删除程序:
printf("\n\n\t\t\t**删除通讯录记录**\n");
printf("\n\t\t\t请选择删除方式:\n");
printf("\t\t\t*****************\n");
printf("\t\t\t# 1------编号 #\n");
printf("\t\t\t# 2------姓名 #\n");
printf("\t\t\t# 3------手机 #\n");
printf("\t\t\t# 4------电话 #\n");
printf("\t\t\t*****************\n");
printf("\t\t\t请选择:");
scanf("%d",&m);
while(m!=1&&m!=2&&m!=3&&m!=4)
{ printf("输入错误,请重新选择:");
scanf("%d",&m);
};
if(m==1)
{ int t;
printf("\n\t请输入想删除的编号:");
scanf("%d",&t);
while(p->next&&p->next->num!=t)
{p=p->next;}
if(p->next)
{s=p->next;
p->next=s->next;
free(s);
printf("\t\t\t****删除成功!****");
}
else
printf("\t未找到要删除的编号,请重新选择并输入!\n");
} ;
if(m==2)
{
char ss[8];
printf("\n\t请输入想删除的姓名:");
scanf("%s",ss);
while(p->next&&(strcmp(p->next->name,ss)!=0))
{p=p->next;}
if(p->next)
{s=p->next;p->next=s->next;
free(s);
printf("\t\t\t****删除成功!****");
}
else
printf("没有找到要删除的姓名,请重新选择并输入!\n!");
} ;
插入程序:
printf("\n\t\t\t**插入通讯录记录**\n");
p=(staff *)malloc(sizeof(staff));
printf("\n请输入员工信息:\n");
printf("员工编号:");
scanf("%d",&p->num);
printf("员工姓名:");
scanf("%s",p->name);
printf("手机号码:");
scanf("%d",&p->phone);
printf("电话号码:");
scanf("%d",&p->call);
p->next=l->next;
l->next=p;
printf("\t\t\t****插入成功!***\n");
}
修改程序:
printf("\n\n\t\t\t**修改通讯录记录**\n");
printf("\n\t\t\t**请选择修改方式:\n");
while(m!=1&&m!=2&&m!=3&&m!=4)
{ printf("输入错误,请重新选择:");
scanf("%d",&m);
};
if(m==1)
{ int t;
printf("\n\n\t请输入想修改的编号:");
scanf("%d",&t);
while(p&&(p->num)!=t)
{p=p->next;}
if(p->num==t)
{
printf("\n\t请输入你修改后的编号:");
scanf("%d",&p->num);
printf("\t修改后的员工信息为:\n");
printf("员工编号: %d\n",p->num);
printf("员工姓名: %s\n",p->name);
printf("手机电话: %d\n",p->phone);
printf("电话号码: %d\n",p->call);
}
else
printf("\t未找到要修改编号,请重新选择并输入!\n");
} ;
if(m==2)
{
char s[8];
printf("\n\t请输入想修改的姓名:");
scanf("%s",s);
while((p!=0)&&strcmp(p->name,s)!=0)
{
p=p->next;}
if(strcmp(p->name,s)==0)
{printf("\n\t请输入修改后的姓名:");
scanf("%s",&p->name);
printf("\t修改后的员工信息为:\n");
printf("员工编号: %d\n",p->num);
printf("员工姓名: %s\n",p->name);
printf("手机电话: %d\n",p->phone);
printf("电话号码: %d\n",p->call);}
else
printf("未找到要修改的姓名,请重新选择并输入!\n");
} ;
显示程序:
printf("\t\t\t**显示通讯录信息**\n");
printf("编号姓名手机号码电话号码\n");
while(p!=0)
{printf("%d %10s %10d %10d\n",p->num,p-> name,p->phone,p->call);
p=p->next;}
}
4程序调试与结果分析
根据要求运用线性链表的知识编写程序,结合C语言的要求,经过调试运行后得出仿真结果。

4.1程序调试
仿真后得到的结果图3所示。

图3 仿真结果
4.2结果分析
建立链表仿真结果如图4所示。

图4 建立链表仿真结果查询记录如图5所示。

图5 查询仿真结果删除记录如图6所示。

图6 删除仿真结果插入记录如图7所示,
图7 插入仿真结果修改记录如图8所示。

图8 修改仿真结果
显示记录如图9所示。

图9 显示仿真结果
退出系统如图10所示
图10 退出仿真结果
5设计体会
通过这次对单位员工通讯录管理系统的设计与制作,我们认识到本次实验是对我们进入大学以来学习程序设计语言结果的一次检验。

平时没有掌握好的知识在这次试验中暴露了出来,经过不断地查阅资料,不断的调试运行,基本上解决大部分问题。

同时也收获了很多的东西,我不仅对C的操作有了进一步的了解和掌握。

虽然成功书写了程序,但还是存在一定的不足,我们也会不断地学习,不断地完善。

参考文献(至少5篇)
[1] C程序设计(第四版)谭浩强著清华大学出版社;
[2] 数据结构(C语言版)严蔚敏著清华大学出版社;
[3] 数据结构题集严蔚敏著清华大学出版社;
[4] 数据结构习题解析殷人昆著清华大学出版社;
[5] 数据结构(用面向对象法与C++描述)殷人昆著清华大学出版社;
附件
完整程序
下面是单位员工通讯录管理系统的完整程序:L=(LinkList)malloc(sizeof(staff));
L->next=NULL;
printf("请输入员工数:");
scanf("%d",&n);
printf("\n\n\t\t\t***建立通讯录***\n");
for(i=0;i<n;i++)
{p=(staff*)malloc(sizeof(staff));
printf("员工编号:");
scanf("%d",&p->num);
printf("员工姓名:");
scanf("%s",p->name);
printf("手机号码:");
scanf("%d",&p->phone);
printf("电话号码:");
scanf("%d",&p->call);
p->next=L->next;
L->next=p;
printf("\t\t\t****输入成功!***\n");} return L;
}
void Search(staff *l)
{ int m;
staff *p;
p=l->next;
printf("\n\n\t\t\t**查询通讯录记录**\n");
printf("\n\t\t\t请选择查询方式:\n");
printf("\t\t\t*****************\n");
printf("\t\t\t# 1------编号#\n");
printf("\t\t\t# 2------姓名#\n");
printf("\t\t\t# 3------手机#\n");
printf("\t\t\t# 4------电话#\n");
printf("\t\t\t*****************\n");
printf("\t\t\t请选择:");
scanf("%d",&m);
while(m!=1&&m!=2&&m!=3&&m!=4)
{ printf("\t输入错误!!!请重新选择:");
scanf("%d",&m);
};
if(m==1)
{ int t;
printf("\n请输入想查询的编号:");
scanf("%d",&t);
while(p&&(p->num)!=t)
{p=p->next;}
if(p==NULL)
{printf("\t通讯录中没有此人!\n"); }
else
{printf("\n\t\t\t****员工信息****\n");
printf("员工编号: %d\n",p->num);
printf("员工姓名: %s\n",p->name);
printf("手机电话: %d\n",p->phone);
printf("电话号码: %d\n",p->call);} } ;
if(m==2)
{ char s[8];
printf("\n请输入想查询的姓名:");
scanf("%s",s);
while(strcmp(p->name,s)!=0&&(p!=0))
{p=p->next;}
if(strcmp(p->name,s)==0)
{printf("\n\t\t\t****员工信息****\n");
printf("员工编号: %d\n",p->num);
printf("员工姓名: %s\n",p->name);
printf("手机号码: %d\n",p->phone);
printf("电话号码: %d\n",p->call);
}
else
printf("\t通讯录中没有此人!\n");
} ;
if(m==3)
{ int t;
printf("\n请输入想查询的手机号码:");
scanf("%d",&t);
while(p&&(p->phone)!=t)
{p=p->next;}
if(p!=0)
{ printf("\n\t\t\t****员工信息****\n");
printf("员工编号: %d\n",p->num);
printf("员工姓名: %s\n",p->name);
printf("手机号码: %d\n",p->phone);
printf("电话号码: %d\n",p->call);
}
else
printf("\t通讯录中没有此人!\n");
} ;
if(m==4)
{ int t;
printf("\n请输入想查询的电话号码:");
scanf("\t%d",&t);
while(p&&p->call!=t)
{p=p->next;}
if(p!=0)
{ printf("\n\t\t\t****员工信息****\n");
printf("员工编号: %d\n",p->num);
printf("员工姓名: %s\n",p->name);
printf("手机号码: %d\n",p->phone);
printf("电话号码: %d\n",p->call);
}
else
printf("\t通讯录中没有此人!\n");
} ;
}
void Delete(staff *l)
{int m;
staff *p,*s;
p=l;
printf("\n\n\t\t\t**删除通讯录记录**\n");
printf("\n\t\t\t请选择删除方式:\n");
printf("\t\t\t*****************\n");
printf("\t\t\t# 1------编号#\n");
printf("\t\t\t# 2------姓名#\n");
printf("\t\t\t# 3------手机#\n");
printf("\t\t\t# 4------电话#\n");
printf("\t\t\t*****************\n");
printf("\t\t\t请选择:");
scanf("%d",&m);
while(m!=1&&m!=2&&m!=3&&m!=4)
{ printf("输入错误,请重新选择:");
scanf("%d",&m);
};
if(m==1)
{ int t;
printf("\n\t请输入想删除的编号:");
scanf("%d",&t);
while(p->next&&p->next->num!=t)
{p=p->next;}
if(p->next)
{s=p->next;
p->next=s->next;
free(s);
printf("\t\t\t****删除成功!****");
}
else
printf("\t未找到要删除的编号,请重新选择并输入!\n");
} ;
if(m==2)
{
char ss[8];
printf("\n\t请输入想删除的姓名:");
scanf("%s",ss);
while(p->next&&(strcmp(p->next->name,ss)!=0))
{p=p->next;}
if(p->next)
{s=p->next;p->next=s->next;
free(s);
printf("\t\t\t****删除成功!****");
}
else
printf("没有找到要删除的姓名,请重新选择并输入!\n!");
} ;
if(m==3)
{ int t;
printf("\n\t请输入想删除的手机号码:");
scanf("%d",&t);
while(p->next&&p->next->phone!=t)
{p=p->next;}
if(p->next)
{s=p->next;
p->next=s->next;
free(s);
printf("\t\t\t****删除成功!****");
}
else
printf("\t未找到要删除的手机号码,请重新选择并输入!\n");
} ;
if(m==4)
{ int t;
printf("\n\t请输入想删除的电话号码:");
scanf("%d",&t);
while(p->next&&p->next->call!=t)
{p=p->next;}
if(p->next)
{s=p->next;
p->next=s->next;
free(s);
printf("\t\t\t****删除成功!****\n");
}
else
printf("\t未找到要删除的手机号码,请重新选择并输入!\n");
} ;
}
void Insert(staff *l)
{ staff *p;
printf("\n\t\t\t**插入通讯录记录**\n");
p=(staff *)malloc(sizeof(staff));
printf("\n请输入员工信息:\n");
printf("员工编号:");
scanf("%d",&p->num);
printf("员工姓名:");
scanf("%s",p->name);
printf("手机号码:");
scanf("%d",&p->phone);
printf("电话号码:");
scanf("%d",&p->call);
p->next=l->next;
l->next=p;
printf("\t\t\t****插入成功!***\n");
}
void Change(staff *l)
{ int m;
staff *p;
p=l->next;
printf("\n\n\t\t\t**修改通讯录记录**\n");
printf("\n\t\t\t**请选择修改方式:\n");
printf("\t\t\t*****************\n");
printf("\t\t\t# 1------编号#\n");
printf("\t\t\t# 2------姓名#\n");
printf("\t\t\t# 3------电话#\n");
printf("\t\t\t# 4------手机#\n");
printf("\t\t\t*****************\n");
printf("\t\t\t请选择:");
scanf("%d",&m);
while(m!=1&&m!=2&&m!=3&&m!=4)
{ printf("输入错误,请重新选择:");
scanf("%d",&m);
};
if(m==1)
{ int t;
printf("\n\n\t请输入想修改的编号:");
scanf("%d",&t);
while(p&&(p->num)!=t)
{p=p->next;}
if(p->num==t)
{
printf("\n\t请输入你修改后的编号:");
scanf("%d",&p->num);
printf("\t修改后的员工信息为:\n");
printf("员工编号: %d\n",p->num);
printf("员工姓名: %s\n",p->name);
printf("手机电话: %d\n",p->phone);
printf("电话号码: %d\n",p->call);
}
else
printf("\t未找到要修改编号,请重新选择并输入!\n");
} ;
if(m==2)
{
char s[8];
printf("\n\t请输入想修改的姓名:");
scanf("%s",s);
while((p!=0)&&strcmp(p->name,s)!=0)
{
p=p->next;}
if(strcmp(p->name,s)==0)
{printf("\n\t请输入修改后的姓名:");
scanf("%s",&p->name);
printf("\t修改后的员工信息为:\n");
printf("员工编号: %d\n",p->num);
printf("员工姓名: %s\n",p->name);
printf("手机电话: %d\n",p->phone);
printf("电话号码: %d\n",p->call);}
else
printf("未找到要修改的姓名,请重新选择并输入!\n");
} ;
if(m==3)
{ int t;
printf("\n\t请输入想修改的手机号码:");
scanf("%d",&t);
while(p&&p->phone!=t)
{p=p->next;}
if(p->phone!=t)
{
printf("\n\t请输入修改后的手机号码:");
scanf("%d",&p->phone);
printf("\t修改后的员工信息为:\n");
printf("员工编号: %d\n",p->num);
printf("员工姓名: %s\n",p->name);
printf("手机电话: %d\n",p->phone);
printf("电话号码: %d\n",p->call);
}
else
printf("\t通讯录中没有此人!\n");
} ;
if(m==4)
{
int t;
printf("\n\t请输入想修改的电话号码:");
scanf("%d",&t);
while(p&&p->call!=t)
{p=p->next;}
if(p->call!=t)
{
printf("\n\t\t\t请输入修改后的电话号码:");
scanf("%d",&p->phone);
printf("\t修改后的员工信息为:\n");
printf("员工编号: %d\n",p->num);
printf("员工姓名: %s\n",p->name);
printf("手机电话: %d\n",p->phone);
printf("电话号码: %d\n",p->call);
}
else
printf("未找到要修改的姓名,请重新选择并输入!\n");
};
}
void Print(staff *l)
{staff *p;
p=l->next;
printf("\t\t\t**显示通讯录信息**\n");
printf("编号姓名手机号码电话号码\n");
while(p!=0)
{printf("%d %10s %10d %10d\n",p->num,p->name,p->phone,p->call);
p=p->next;}
}
int main()
{LinkList L;
for(;;)
{ int t;
do{
printf("\n\n\t\t\t*****通讯录*****\n");
printf("\t\t\t~~~~~~~~~~~~~~~~\n");
printf("\t\t\t# 1. 建立记录#\n");
printf("\t\t\t# 2. 查询记录#\n");
printf("\t\t\t# 3. 删除记录#\n");
printf("\t\t\t# 4. 插入记录#\n");
printf("\t\t\t# 5. 修改记录#\n");
printf("\t\t\t# 6. 显示记录#\n");
printf("\t\t\t# 0. 退出程序#\n");
printf("\t\t\t~~~~~~~~~~~~~~~~\n");
printf("\t\t\t请您选择(0-6):");
scanf("%d",&t);
}while(t<0||t>6);
switch(t)
{ case 1: L=Creat(); break;
case 2: Search(L); break;
case 3: Delete(L); break;
case 4: Insert(L); break;
case 5: Change(L); break;
case 6: Print(L); break;
case 0:
printf("\t\t\t*谢谢使用,再见!*\n");
return 0;
break; }}}
为了更好地完成任务,我们小组设计编写了另一个程序:
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
typedef struct
{
char num[5];
char name[15];
char phone[13];
char call[15];
char e_mail[30];
}datatype;
typedef struct node
{
datatype data;
struct node * next;
}Dnode;
Dnode *head;
Dnode *p;
typedef struct node linklist;
int menu();
Dnode *createlist();
void Add(Dnode *head,Dnode *p);
Dnode *research(Dnode *head);
void Delete(Dnode *head);
void print_list(Dnode *head);
Dnode *Change(Dnode *head,char k[]);
void Saveandfree();
void Open();
int menu()
{
int i;
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); printf("\n");
printf(" 通讯录系统清单\n "); printf("\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
printf(" 1.通讯录的建立"); printf("\n");
printf(" 2.添加人员信息"); printf("\n");
printf(" 3.删除人员信息"); printf("\n");
printf(" 4.查询人员信息"); printf("\n");
printf(" 5.输出人员信息"); printf("\n");
printf(" 6.修改人员信息"); printf("\n");
printf(" 0.退出并保存"); printf("\n");
printf("请选择0-6:");
scanf("%d",&i);
while(i<0||i>6)
{
printf("系统提示: 您输入错误!\n");
printf("请重新输入0-6: ");
scanf("%d",&i);
printf("\n\n");
}
return i;
}
Dnode *createlist()
{
Dnode *head=(Dnode *)malloc(sizeof(Dnode));
Dnode *p;
Dnode *rear;
char c='n';
rear=head;
while(c=='n')
{
p=(Dnode *)malloc(sizeof(Dnode));
printf("请输入编号: \n");
scanf("%s",p->data.num);
printf("请输入姓名: \n");
scanf("%s",p->);
printf("请输入办公室电话: \n");
scanf("%s",p->data.phone);
printf("请输入手机: \n");
scanf("%s",p->data.call);
printf("请输入电子邮箱: \n");
scanf("%s",p->data.e_mail);
rear->next=p;
rear=p;
printf("要继续创建请按(n),结束创建请按其它键: \n");
scanf("%c",&c);
}
rear->next=NULL;
return head;
}
void Add(Dnode *head,Dnode *p)
{
Dnode *p1;
Dnode *p2;
p1=head;
p2=p1->next;
while(p2!=NULL&&strcmp(p2->data.num,p->data.num)<0)
{
p1=p2;
p2=p2->next;
}
p1->next=p;
p->next=p2;
}
void Delete(Dnode *head)
{
char a,b;
Dnode *p;
Dnode *q;
char num[5];
char name[10];
int x;
printf("1.按编号删除\n");
printf("2.按姓名删除\n ");
printf("请选择(1或2): ");
p=head->next;
scanf("%d",&x);
if(x==1)
{
printf("请输入要查询者的编号:");
scanf("%s",num);
while(p&&strcmp(p->data.num,num)<0)
p=p->next;
if(p==NULL||strcmp(p->data.num,num)>0)
p=NULL;
}
if(x==2)
{
printf("请输入要查询者的姓名:");
scanf("%s",name);
while(p&&strcmp(p->,name)!=0)
p=p->next;
}
scanf("%c",&b);
if(p==NULL)
{
printf("对不起没有您要查询者的信息\n");
return;
}
printf("要删除该结点吗?(y/n) :");
scanf("%c",&a);
if(a=='y'||a=='Y')
{
q=head;
while(q!=NULL&&q->next!=p)
q=q->next;
q->next=p->next;
free(p);
printf("通讯者已经被删除\n");
}
}
Dnode *research(Dnode *head)
{
Dnode *p;
char num[5];
char name[10];
char phone[15];
char call[15];
int x;
printf("1.按编号查询:\n");
printf("2.按姓名查询:\n");
printf("3.按电话号码查询:\n");
printf("4.按手机号码查询:\n");
printf("请选择(1-4): ");
p=head->next;
scanf("%d",&x);
if(x==1)
{
printf("请输入要查询者的编号:");
scanf("%s",num);
while(p&&strcmp(p->data.num,num)<0)
p=p->next;
if(p==NULL||strcmp(p->data.num,num)>0)
p=NULL;
}
if(x==2)
{
printf("请输入要查询者的姓名:");
scanf("%s",name);
while(p&&strcmp(p->,name)!=0)
p=p->next;
}
if(x==3)
{
printf("请输入要查询者的办公室电话号码:");
scanf("%s",phone);
while(p&&strcmp(p->data.phone,phone)!=0)
p=p->next;
}
if(x==4)
{
printf("请输入要查询者的手机号码:");
scanf("%s",call);
while(p&&strcmp(p->data.call,call)!=0)
p=p->next;
}
return p;
}
void print_list(Dnode *head)
{
Dnode *p;
p=head->next;
printf("编号姓名办公室电话手机号码邮箱");
printf("\n");
while(p!=NULL)
{
printf("%-5s\t",p->data.num);
printf("%-10s\t",p->);
printf("%-10s\t",p->data.phone);
printf("%-10s\t",p->data.call);
printf("%-15s\t\n",p->data.e_mail);
p=p->next;
}
}
Dnode *Change(Dnode *head,char k[])
{
Dnode *q;
q=research(head);
if(q==0)
{ printf("没有要修改的信息!\n");
return 0;
}
else
{
int i;
k[15]='\0';
printf("编号姓名办公室电话手机号码邮箱\n"); printf("%-5s\t%-10s\t%-10s\t%-10s\t%-15s\t\n",q->data.num,q->,q->data.phone,q->dat a.call,q->data.e_mail);
printf("1--修改姓名\n");
printf("2--修改办公室电话号码\n");
printf("3--修改手机号码\n");
printf("4--修改电子邮箱\n");
printf("\n");
printf("请选择按键(1-4):");
scanf("%d",&i);
printf("\n");
switch(i)
{
case 1: printf("修改姓名----\n");
strcpy(q->,k);
printf("请输入要改的姓名:\n");
getchar();
gets(k);
printf("\n");
strcpy(q->,k);
break;
case 2: printf("修改办公室电话号码----\n");
strcpy(q->data.phone,k);
printf("请输入要修改的号码:\n");
getchar();
gets(k);
printf("\n");
strcpy(q->data.phone,k);
break;
case 3: printf("修改电话号码----\n");
strcpy(q->data.call,k);
printf("请输入要修改的号码:\n");
getchar();
gets(k);
printf("\n");
strcpy(q->data.call,k);
break;
case 4: printf("修改电子邮箱----\n");
strcpy(q->data.e_mail,k);
printf("请输入要修改的电子邮箱:\n");
getchar();
gets(k);
printf("\n");
strcpy(q->data.e_mail,k);
break;
default :
printf("输入错误!\n");
break;
}
}
return q;
}
void Saveandfree()
{
linklist *p=NULL;
FILE *fp;
char *ziliao="ziliao.txt";
if(head==NULL)
{
printf("\n记录为空!\n");
return;
}
else
p=head->next;
if((fp=fopen(ziliao,"wb+"))==NULL)
{
printf("\n打不开文件!\n");
return;
}
while(p!=NULL)
{
fwrite(p,sizeof(linklist),1,fp);
p=p->next;
}
printf("保存完毕!\n");
fclose(fp);
for( ;head->next!=NULL; )
{
p=head->next;
head->next=head->next->next;
free(p);
}
free(head);
}
void Open()
{
FILE *fp;
linklist *p1=NULL,*p2=NULL,*temp=NULL;
if((fp=fopen("ziliao.txt","rb+"))==NULL)
{
printf("\n\t\t*********************通讯录**********************\n");
return;
}
head=(linklist *)malloc(sizeof(linklist));
head->next=NULL;
temp=p2=head;
while(! feof(fp))
{
p1=(linklist *)malloc(sizeof(linklist));
temp=p2;
p2->next=p1;
p2=p1;
fread(p1,sizeof(linklist),1,fp);
}
temp->next=NULL;
fclose(fp);
}
void main()
{
Open();
while(1)
{
switch(menu())
{
case 1:
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
printf(" 通讯录链表的建立");
printf("\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
head=createlist();
break;
case 2:
p=(Dnode *)malloc(sizeof(Dnode));
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
printf(" 通讯者信息的添加");
printf("\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
printf("员工编号: \n");
scanf("%s",p->data.num);
printf("员工姓名: \n");
scanf("%s",p->);
printf("员工办公室电话号码: \n");
scanf("%s",p->data.phone);
printf("员工手机号码: \n");
scanf("%s",p->data.call);
printf("员工电子邮箱: \n");
scanf("%s",p->data.e_mail);
printf("操作已成功!\n");
Add(head,p);
break;
case 3:
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
printf(" 通讯录信息的删除");
printf("\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
Delete(head);
break;
case 4:
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); printf("\n");
printf(" 通讯录信息的查询"); printf("\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); printf("\n");
p=research(head);
if(p!=NULL)
{
printf("编号姓名办公室电话手机号码邮箱");
putchar('\n');
printf("%-5s\t",p->data.num);
printf("%-10s\t",p->);
printf("%-10s\t",p->data.phone);
printf("%-10s\t",p->data.call);
printf("%-15s\t\n",p->data.e_mail);
printf("\n");
}
else
printf("对不起没有您要查询者的信息\n");
break;
case 5:
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); printf("\n");
printf(" 通讯录的输出"); printf("\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
print_list(head);
break;
case 6:
{
char c=getchar();
char b[5];
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
printf(" 通讯录的修改");
printf("\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
Change(head,b);
}
break;
case 0:Saveandfree();
exit(0); break;
}
}
}。

相关文档
最新文档