实验一单位员工通讯录管理系统
一、实验目的
1、帮助读者复习C++语言程序设计中的知识。
2、熟悉线性表的逻辑结构。
3、熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉链表的操作为侧重点。
[需求分析]
为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
二、实验内容和要求
[问题要求]
其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
[问题分析]
为建立单位员工通讯录系统,首先要实现员工信息的录入、保存等基本操作。对于员工通讯录我们要存入要求的员工的各种信息等,对于已经保存的信息,我们要可以对这些信息进行查询、修改、插入新信息、删除信息、还有可以直接输出整个所有员工信息等。而这些操作对于我们来说都是对建立的链表的基本操作,对于本次试验我采用单向线性链表。三、算法设计
[算法设计]
首先我们要进行最基本的操作,即建立链表。链表的节点信息保存的有员工编号、员工姓名、办公室电话号码、手机号码、员工邮箱这些信息。而链表的结点信息保存的有员工信
息以及其指针域。然后我们可以添加员工信息,对于新的员工信息我们将其添加在链表的表尾,在添加之前我们要进行一项操作,即遍历链表找到其尾指针,然后开辟一个结点并将其加到链尾。我们还可以进行员工信息的查询操作,在进行查询时我们首先要遍历链表,然后在遍历的同时与关键字进行比较从而找到员工信息并输出。员工信息删除操作,此操作首先要找到要删除的员工信息,然后将此节点的前一节点的后续指针直接指向要删除的结点的后续指针,并且释放要删除的结点空间即可。员工信息修改,首先找到要修改的员工,然后输入要修改的员工信息,将输入信息直接覆盖在原有信息上即可。员工信息输出,遍历整个链表并输出。
流程图如下:
四、
员工信息插入
员工信息查询
员工信息删除
五、测试结果
各个测试结果均正常
#include
#include
{
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->https://www.doczj.com/doc/d918014301.html,);
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->https://www.doczj.com/doc/d918014301.html,,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->https://www.doczj.com/doc/d918014301.html,,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->https://www.doczj.com/doc/d918014301.html,);
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->dat https://www.doczj.com/doc/d918014301.html,,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)
{
case 1: printf("修改姓名----\n");
strcpy(q->https://www.doczj.com/doc/d918014301.html,,k);
printf("请输入要改的姓名:\n");
getchar();
gets(k);
printf("\n");
strcpy(q->https://www.doczj.com/doc/d918014301.html,,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)
{
利用Excel制作员工通讯录 每个公司甚至每个部门都有自己的员工通讯录,以方便同事间联络,因此制作一个简洁实用的通讯录是行政部门不可或缺的任务之一。本节将介绍员工通讯录的制作方法,以下是员工通讯录的具体制作步骤。 (1)启动Excel 2010程序,右键单击“Sheetl”工作表标签,然后单击快捷菜单中的“重命名”命令,将“Sheetl”工作表重命名为“员工通讯录”。 (2)在单元格中输入“员工通讯录”、“部门”、“姓名”、“职务”、“办公电话”、“手机”、“办公室”以及公司员工相应的具体信息,如图2-26所示。 (3)选中Al:Fl单元格区域,单击功能区“开始” 选项卡“对齐方式”组中的“合并后居中”按钮,合并选中的单元格区域,然后在“字体”组中设置“字体”为“黑体”、“字号”为“18号”。 (4)调整第一行的行高为“39”,结果如图2-27所示。 (5)选中A2:F17单元格区域,单击功能区“开始”选项卡“对齐
方式”组中的“居中” 按钮,这时被选中单元格区域中的文字都居中显示,如图2-28所示。表明该行可以进行自动筛选,如图2-30所示。 (6)单击第二行行标呈,选中第二行单元格。单击功能区“开始”选项卡“字体”组中的“加粗”按钮n,加粗该行单元格中的文字,如图2-29示。 (7)选中A2:F17单元格区域,单击功能区“数据”选项卡“排序和筛选”组中的“筛选”按钮,为表格添加自动筛选。这时第二行文字旁边会出现可以单击的下拉箭头按钮,表明该行可以进行自动筛选,如图2-30所示。 (8)如果要查找所有“市场部”的同事,此时会打开筛选菜单,如图2-31所示。图2-30自动筛选可以单击第二行“部门”旁边的下拉箭头曰, (9)在打开的筛选菜单中,取消选择“全选”复选框,选中“市场部”复选框。单击“确定”按钮,此时所有市场部的人员信息就显示出来了,其他部门人员信息暂时隐藏。 (10)继续筛选“市场部”中所有“策划专员”的信息。单击“职务”
1.目的 为增强对公司通讯录发放、更新等管理,特制定此制度。 2.适用范围 公司通讯录。 3.职责 3.1行政人事部负责本制度拟定、完善、更新及下发。 3.2行政人事助理负责定期更新、发放通讯录。 3.3各部门负责人负责本部门工作联系更新信息传递至行政人事助理。 3.4各员工负责自身联系更新信息传递至行政人事助理。 4.工作程序 4.1通讯录版本及内容 4.1.1公司通讯录分为“内部”和“外部”二个版本。“内部”通讯录记录公司所有人员的通讯信息,仅发放于公司总部相关部门;“外部”通讯录记录部门负责人、部门助理,及经常与办事处沟通人员的通讯信息,发放于办事处。 4.1.2公司通讯录按照部门顺序记录以下内容:大部名称、部门名称、姓名、岗位、分机、手机、固定电话、传真、邮箱等信息。 4.2通讯录更新 4.2.1行政人事助理依据上周发生的人员入职、离职、调岗等信息更新通讯录,于每周一下班前以邮件方式发放最新通讯录。 4.2.2公司各员工在自身通讯方式发生变更三个工作日内,把更新通讯信息传递至行政人事助理处。 4.2.3各部门对外工作联系信息,包括但不限于办公地址、办公电话、传真等发生变化时,由部门负责人或部门助理在变更后三个工作日内传递更新信息至行政人事助理处。 4.2.4公司部门架构、公司对外工作联系信息等发生变化时,经CEO审批后,由行政人事助理直接更新。 4.3通讯录发放接收人员 4.3.1《通讯录(内部)》发放接受人员为:CEO、CTO、COO;各大部总监;部门经理;需与外部经常联系的部门助理、岗位人员。 4.3.2《通讯录(外部)》发放接受人员为:大区经理、办事处经理、办事处文秘。 4.4通讯录管理