数据结构单位员工通讯录管理系统实验报告.docx
《数据结构单位员工通讯录管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《数据结构单位员工通讯录管理系统实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
数据结构单位员工通讯录管理系统实验报告
宁夏师范学院数学与计算机科学学院
《数据结构实验》实验报告
实验序号:
14 实验项目名称:
期末大作业
学 号
2016210556
姓 名
韩雪萍
专业班级
16级计本一班
实验地点
文科楼222
指导教师
康凯
时间
2017.12.28
一、实验目的
二、实验要求
三、实验设备(环境)及要求
1.环境要求:
硬件:
PC(P
以上,128M以上内存);
软件:
WindowsXP及以上操作系统、VisualC++6.0版本。
四、实验内容、步骤与结果
期末大作业:
单位员工通讯录管理系统(线性表应用)
[问题描述与要求]
为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。
其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
[实现提示]
可以采用单链表的存储结构,如可定义如下的存储结构:
typedef struct { /*员工通讯信息的结构类型定义*/
char num[5]; /*员工编号*/
char name[10]; /*员工姓名*/
char phone[15]; /*办公室电话号码*/
char call[15]; /*手机号码*/
}DataType;
/*通讯录单链表的结点类型*/
typedef struct node
{ DataType data; /*结点的数据域*/
struct node *next; /*结点的指针域*/
}ListNode,*LinkList;
五、程序实现(写出每个操作的算法)
#include
#include
#include
typedefstruct
{
charnum[5];
charname[15];
charphone[13];
charcall[15];
chare_mail[30];
}datatype;
typedefstructnode
{
datatypedata;
structnode*next;
}Dnode;
Dnode*head;
Dnode*p;
typedefstruct
nodelinklist;
intmenu();
Dnode*createlist();
voidAdd(Dnode*head,Dnode*p);
Dnode*research(Dnode*head);
voidDelete(Dnode*head);
voidprint_list(Dnode*head);
Dnode*Change(Dnode*head,chark[]);
voidSaveandfree();
voidOpen();
intmenu()
{
inti;
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");
}
returni;
}
Dnode*createlist()
{
Dnode*head=(Dnode*)malloc(sizeof(Dnode));
Dnode*p;
Dnode*rear;
charc='n';
rear=head;
while(c=='n')
{
p=(Dnode*)malloc(sizeof(Dnode));
printf("请输入编号:
\n");
scanf("%s",p->data.num);
printf("请输入姓名:
\n");
scanf("%s",p->data.name);
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;
returnhead;
}
voidAdd(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;
}
voidDelete(Dnode*head)
{
chara,b;
Dnode*p;
Dnode*q;
charnum[5];
charname[10];
intx;
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->data.name,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;
charnum[5];
charname[10];
charphone[15];
charcall[15];
intx;
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->data.name,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;
}
returnp;
}
voidprint_list(Dnode*head)
{
Dnode*p;
p=head->next;
printf("编号姓名办公室电话手机号码邮箱");
printf("\n");
while(p!
=NULL)
{
printf("%-5s\t",p->data.num);
printf("%-10s\t",p->data.name);
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,chark[])
{
Dnode*q;
q=research(head);
if(q==0)
{
printf("没有要修改的信息!
\n");
return0;
}
else
{
inti;
k[15]='\0';
printf("编号姓名办公室电话手机号码邮箱\n");
printf("%-5s\t%-10s\t%-10s\t%-10s\t%-15s\t\n",q->data.num,q->data.name,q->data.phone,q->data.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)
{
case1:
printf("修改姓名----\n");
strcpy(q->data.name,k);
printf("请输入要改的姓名:
\n");
getchar();
gets(k);
printf("\n");
strcpy(q->data.name,k);
break;
case2:
printf("修改办公室电话号码----\n");
strcpy(q->data.phone,k);
printf("请输入要修改的号码:
\n");
getchar();
gets(k);
printf("\n");
strcpy(q->data.phone,k);
break;
case3:
printf("修改电话号码----\n");
strcpy(q->data.call,k);
printf("请输入要修改的号码:
\n");
getchar();
gets(k);
printf("\n");
strcpy(q->data.call,k);
break;
case4:
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;
}
}
returnq;
}
voidSaveandfree()
{
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);
}
voidOpen()
{
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);
}
voidmain()
{
Open();
while
(1)
{
switch(menu())
{
case1:
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
printf("通讯录链表的建立");
printf("\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
head=createlist();
break;
case2:
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->data.name);
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;
case3:
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
printf("通讯录信息的删除");
printf("\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");Delete(head);
break;
case4:
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->data.name);
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;
case5:
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
printf("通讯录的输出");
printf("\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
print_list(head);
break;
case6:
{
charc=getchar();
charb[5];
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
printf("通讯录的修改");
printf("\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
printf("\n");
Change(head,b);
}
break;
case0:
Saveandfree();
exit(0);
break;
}
}
}
六、分析算法,计算时间、空间复杂度
七、教师评语
签名:
日期:
年月日
成绩