ai>|ai-1
ai∈D
i=1
2```````
n}
基本操作:
InitList(&L);
操作结果:
构造一个空的线性表L
DestroyList(&L);
初始条件:
线性表L存在
操作结果:
销毁线性表L
LocateElem(L
I
&e);
初始条件:
线性表L存在
1
操作结果:
用e返回线性表L中第i个数据元素的值
ClearList(&L);
初始条件:
线性表L存在
操作结果:
将线性表L重置为空表
}ADTGraph
2)本程序是由几个函数构成的:
① 主函数:
main()
② 菜单函数menu();
③ 文件读入函数:
readdata();
④ 文件写入函数:
writedata();
⑤ 信息查询函数:
chaxun();
⑥ 信息更新函数:
gengxin();
⑦ 信息一览函数:
liebiao();
⑧ 数据删除函数:
shanchu();
⑨ 数据添加函数:
tianjia();
⑩ 数据修改函数:
xiugai();
它们的调用关系如
三、详细设计
#include
#include
#include
#include//清屏函数头文件
#include
#include
#include
#defineLENsizeof(structemp)
#defineDATA"employee.txt"
structemp
{
longintnum;//编号
charname[20];//姓名
intage;//年龄
charsex[4];//性别
charbirthday[10];//生日
chartel[15];//电话
charedu[8];//学历
charpos[20];//职务
charadd[30];//住址
structemp*next;
};
structemp*head=NULL;
intt=0;
voidmenu();
voidgengxin();
voidtianjia();
voidinsert(structemp*em);
voiddisplay(structemp*p);
voidliebiao();
voidchaxun();
voidbianhao();
voidshengri();
voidxingming();
voidreadDate();
voidwriteDate();
voidfreeAll();
voidshanchu();
voidchange();
voiddevise(structemp*p);
voidmain()
{
structemp*head=NULL;
head=(structemp*)malloc(LEN);
head->next=NULL;system("color1f");
system("modecon:
cols=150lines=500");
readDate();menu();system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("谢谢使用
再见\n");
}
voidmenu(void)
{
chari
lj[100];intflog;time_tT;
structtm*timenow;
time(&T);timenow=localtime(&T);
flog=0;
while
(1)
{
system("cls");printf("\n\n\n\n\n");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息管理系统━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃1.员工信息查询┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃2.员工信息更新┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃3.员工信息列表┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃0.退出管理系统┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("%s"
asctime(timenow));
printf("请输入您的选择(数字0-3):
\n");
scanf("%c"
&i);gets(lj);if(lj[0])i='a';
switch(i)
{
case'1':
chaxun();break;
case'2':
gengxin();break;
case'3':
liebiao();break;
case'0':
flog=1;break;
default:
printf("输入有误
请按回车键重新输入\n");gets(lj);break;
}if(flog)break;}}
voidtianjia()
{
structemp*p
*p1;charlj[100];
p=NULL;p1=head;
printf("请输入第%d个员工的信息.\n"
t+1);
p=(structemp*)malloc(LEN);
if(p==NULL)
{printf("分配空间失败");exit(0);}
printf("请输入员工的编号:
\n");
scanf("%ld"
&p->num);
while((p1!
=NULL)&&(p->num!
=p1->num))p1=p1->next;
if(p1!
=NULL)
{if(p->num==p1->num){
printf("编号已经存在
请重新输入
按回车键继续:
\n");
free(p);gets(lj);getchar();}}
printf("请输入员工的姓名:
\n");scanf("%s"
p->name);
printf("请输入员工的年龄:
\n");scanf("%d"
&p->age);
printf("请输入员工的性别:
\n");scanf("%s"
p->sex);
printf("请输入员工的出生年月:
\n");scanf("%s"
p->birthday);
printf("请输入员工的电话:
\n");scanf("%s"
p->tel);
printf("请输入员工的学历:
\n");scanf("%s"
p->edu);
printf("请输入员工的职务:
\n");scanf("%s"
p->pos);
printf("请输入员工的住址:
\n");scanf("%s"
p->add);
insert(p);printf("输入的员工信息为:
\n");
printf("------------------------------------------------------------------------:
\n");
printf("编号\t\t姓名\t\t年龄\t\t性别\t\t出生年月\t\t电话\t\t学历\t\t职务\t\t住址:
\n");
display(p);printf("按回车键继续\n");writeDate();gets(lj);getchar();}
voidinsert(structemp*em)
{
structemp*p0
*p1
*p2;p1=head;p0=em;
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{
while((p0->num>p1->num)&&(p1->next!
=NULL))
{p2=p1;p1=p1->next;}if(p0->num<=p1->num)
{
if(head==p1)head=p0;
else
p2->next=p0;p0->next=p1;}
else
{p1->next=p0;p0->next=NULL;}}t++;}
voiddisplay(structemp*p)
{printf("%ld\t\t%s\t\t%d\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n"
p->num
p->name
p->age
p->sex
p->birthday
p->tel
p->edu
p->pos
p->add);}
voidliebiao()
{
charlj[100];structemp*p;p=head;system("cls");
if(head==NULL){printf("查找不到信息\n");menu();}
printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息列表━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
printf("编号\t\t姓名\t\t年龄\t\t性别\t\t出生年月\t\t电话\t\t学历\t\t职务\t\t住址:
\n");
if(head!
=NULL)
{while(p!
=NULL){display(p);p=p->next;}}
printf("\n按回车键返回主菜单\n");gets(lj);}
voidchaxun()
{
chari
lj[100];intflog;time_tT;structtm*timenow;
time(&T);timenow=localtime(&T);flog=0;
while
(1)
{
system("cls");printf("\n\n\n\n\n");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息查询系统━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃1.按照编号查询┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃2.按照姓名查询┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃3.按照生日查询┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃0.退出管理系统┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("%s"
asctime(timenow));
printf("请输入您的选择(数字0-3):
\n");
scanf("%c"
&i);gets(lj);if(lj[0])i='a';
switch(i)
{
case'1':
bianhao();break;case'2':
xingming();break;
case'3':
shengri();break;case'0':
flog=1;break;
default:
printf("输入有误
请重新输入\n");gets(lj);break;
}if(flog)break;}}
voidbianhao()
{
intnumber;charlj[100];
structemp*p1;p1=head;
printf("请输入要查询员工的编号:
\n");
scanf("%d"
&number);
while((number!
=p1->num)&&(p1->next!
=NULL))
{p1=p1->next;}
if(number==p1->num)
{
printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息查询━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
printf("要查询的员工信息:
\n");
printf("编号\t\t姓名\t\t年龄\t\t性别\t\t出生年月\t\t电话\t\t学历\t\t职务\t\t住址:
\n");printf("%ld\t\t%s\t\t%d\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n"
p1->num
p1->name
p1->age
p1->sex
p1->birthday
p1->tel
p1->edu
p1->pos
p1->add);
printf("按回车键继续\n");gets(lj);getchar();}
elseif(p1->next==NULL)
{printf("要查询的员工信息不存在
按回车键返回:
\n");
gets(lj);getchar();}}
voidxingming()
{
charch[10];structemp*p;charlj[100];p=head;
printf("请输入要查询的员工的名字:
\n");
scanf("%s"
ch);if(p==NULL)
{
printf("不存在员工记录
按回车键返回.\n");
gets(lj);getchar();return;}
while(strcmp(ch
p->name)&&p->next!
=NULL)
{p=p->next;}
if(!
strcmp(ch
p->name))
{printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息查询━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
printf("编号\t\t姓名\t\t年龄\t\t性别\t\t出生年月\t\t电话\t\t学历\t\t职务\t\t住址:
\n");display(p);printf("按回车键继续\n");
gets(lj);getchar();}
elseif(p->next==NULL)
{
printf("不存在员工记录.\n");gets(lj);
getchar();return;}}
voidshengri()
{
charbir[20]
lj[100];structemp*p;
p=head;printf("请输入要查询的员工的出生日期:
\n");
scanf("%s"
bir);if(p==NULL)
{
printf("不存在员工记录.按回车键返回\n");gets(lj);
getchar();return;}
while(strcmp(bir
p->birthday)&&p->next!
=NULL)
{p=p->next;}
if(!
strcmp(bir
p->name))
{
printf("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━员工信息查询━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
printf("编号\t\t姓名\t\t年龄\t\t性别\t\t出生年月\t\t电话\t\t学历\t\t职务\t\t住址:
\n");display(p);printf("按回车键继续\n");gets(lj);
getchar();}
elseif(p->next==NULL)
{printf("不存在员工记录.按回车键返回\n");gets(lj);
getchar();return;}}
voidreadDate()
{
FILE*fp;structemp*p1
*p2;fp=fopen(DATA
"r");
if(!
fp)
{printf("打开文件失败!
按回车键继续\n");getchar();}
else
{fscanf(fp
"%d\n"
&t);head=p1=p2=(structemp*)malloc(LEN);fscanf(fp
"%ld\t\t%s\t\t%d\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n"
&p1->num
p1->name
&p1->age
p1->sex
p1->birthday
p1->tel
p1->edu
p1->pos
p1->add);while(!
feof(fp))
{p1=(structemp*)malloc(LEN);fscanf(fp
"%ld\t\t%s\t\t%d\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n"
&p1->num
p1->name
&p1->age
p1->sex
p1->birthday
p1->tel
p1->edu
p1->pos
p1->add);p2->next=p1;p2=p1;}
p2->next=NULL;fclose(fp);}}
voidwriteDate()
{
FILE*fp;structemp*p1;fp=fopen(DATA
"w");
if(!
fp)
{printf("打开文件失败!
\n");remove(fp);getchar();}else
{fprintf(fp
"%d\n"
t);for(p1=head;p1!
=NULL;p1=p1->next){fprintf(fp
"%ld\t\t%s\t\t%d\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n"
p1->num
p1->name
p1->age
p1->sex
p1->birthday
p1->tel
p1->edu
p1->pos
p1->add);}fclose(fp);}}
voidfreeAll()
{
structemp*p1
*p2;p1=p2=head;
while(p1)
{p2=p1->next;free(p1);p1=p2;}}
voidshanchu()
{
structemp*p1
*p2;longintnumber;charlj[100];
if(head==NULL)
{
printf("无员工纪录!
按回车键返回\n");
gets(lj);getchar();return;}
printf("请输入你要删除的员工的编号:
\n");
scanf("%ld"
&number);p1=head;
while(number!
=p1->num&&p1->next!
=NULL)
{p2=p1;p1=p1->next;}
if(number==p1->num)
{
if(p1==head)head=p1->next;