职工信息管理C语言课程设计Word文档格式.docx
《职工信息管理C语言课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《职工信息管理C语言课程设计Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
voidexit0();
/*退出*/
intmenu_select();
/*主菜单*/
/*链表操作所用结构体指针*/
structworker*head=NULL,*p1,*p2,*p3;
/*定义结构体指针head为头指针p1为输入数据缓存空间指针p2为尾指针*/
/*职工记录保存标志全局变量*/
intwriteinfo_flag=0;
/*主函数*/
intmain()
{loadRec();
for(;
;
)
{switch(menu_select())
{case1:
system("
cls"
);
createRec();
break;
case2:
searchRec();
case3:
modifyRec();
case4:
insertRec();
case5:
deleteRec();
case6:
listRec();
case7:
writeInfo();
case0:
exit0();
return0;
default:
{getchar();
printf("
\n选择错误,请正确输入你的选择(0~5),:
\n"
\n按任意键返回......\n"
getchar();
system("
/*清屏*/
}
}
}
return0;
}
/*主菜单*/
intmenu_select()
{intc;
printf("
\t\t**************菜单**************\n"
\t\t\t1.新建职工记录\n"
\t\t\t2.查询职工记录\n"
\t\t\t3.修改职工记录\n"
\t\t\t4.插入职工记录\n"
\t\t\t5.删除职工记录\n"
\t\t\t6.显示所有信息\n"
\t\t\t7.保存职工记录\n"
\t\t\t0.退出(任何情况下按Ctrl+C退出程序)\n"
\n输入你的选择(0~7):
scanf("
%d"
&
c);
returnc;
/*从磁盘文件导入职工信息到内存*/
voidloadRec()
{FILE*fp;
intn=0;
if((fp=fopen("
f:
\\zx\\info.dat"
"
r"
))==NULL)/*打开文件*/
{printf("
文件不存在或无法打开!
return;
}
head=p1=(structworker*)malloc(LEN);
/*开辟一个新单元*/
p1->
next=NULL;
while(!
feof(fp))
{n++;
fscanf(fp,"
%s%lf%s"
p1->
id,&
p1->
basepay,p1->
name);
if(p1->
id[0]<
'
0'
||p1->
id[0]>
9'
){n--;
p2=(structworker*)malloc(LEN);
/*开辟一个新单元*/
p1->
next=p2;
p3=p1;
p1=p2;
free(p2);
p3->
next=NULL;
\n%d项信息输入完毕,按任意键返回......\n"
n);
getchar();
/*清屏*/
writeinfo_flag=0;
/*设置保存记录标志*/
if(fclose(fp))/*关闭文件*/
{
printf("
Cannotclosethefile!
);
exit(0);
/*新建职工记录*/
voidcreateRec()
{intn,i;
if(head!
=0){p3=head;
while(p3->
next!
=NULL)
p3=p3->
next;
getchar();
printf("
\n职工信息数据库已存在,新建职工信息将接续在信息库的后面,按任意键继续......:
system("
p3->
next=p1=(structworker*)malloc(LEN);
}
elsehead=p1=(structworker*)malloc(LEN);
\n\n请输入希望建立的职工基本信息条数n(n<
1&
&
n<
10):
do{scanf("
n);
if(n<
1||n>
10)printf("
\n\n输入范围有误,请重新输入希望建立的职工基本信息条数n(n<
}while(n<
10);
/*开始建立n条职工基本信息记录*/
\n\n请每行按职工号(id<
=18位)职工工资职工姓名(name<
=10汉字)的形式输入%d条职工记录:
for(i=0;
i<
n;
i++)
{
scanf("
writeinfo_flag=1;
/*清除保存记录标志*/
/*查询职工记录*/
voidsearchRec()
{
charid[19];
p1=head;
if(p1==NULL)
\n\n职工信息数据库为空!
!
\n"
printf("
getch();
system("
/*清屏*/
return;
}
\n\n请输入职工号以便查证:
%s"
id);
while(p1!
{if(strcmp(p1->
id,id)==0)
{printf("
\t该职工信息如下:
\n\t职工号:
"
printf("
%s\n"
p1->
id);
\t职工工资:
%.0f\n"
basepay);
\t职工姓名:
name);
break;
else{p1=p1->
next;
if(p1==NULL)printf("
\n\n找不到该职工信息!
getch();
/*修改指定职工号的记录*/
voidmodifyRec()
{
if(head==NULL)
{getchar();
\n职工信息数据库为空,不能修改,按任意键将返回:
getchar();
\n\n请输入要修改记录的职工号:
while(strcmp(id,p1->
id)!
=NULL&
p1=p1->
if(strcmp(id,p1->
id)==NULL)
{strcpy(p1->
id,id);
\n\n请输入该职工号的工资:
%lf"
basepay);
\n\n请输入该职工号的姓名:
\n1项信息修改完毕,"
else
\n\n找不到该职工号信息!
按任意键将返回:
return;
/*插入职工记录*/
voidinsertRec()
{intn=0,m,i;
if(head==NULL){/*空数据库插入在第一个位置*/
\n职工信息数据库为空,只能插入第一个位置,按任意键将继续。
:
\n\n请按职工号(id<
=10汉字)的形式输入1条职工记录:
head=(structworker*)malloc(LEN);
head->
scanf("
head->
head->
basepay,head->
\n1项信息输入完毕,按任意键返回......\n"
writeinfo_flag=1;
return;
/*数据库不为空时,分插入第一个位置,中间位置,最后一个位置三种情况*/
do{n++;
}while(p1!
=0);
职工信息数据库中共有%d条记录,请输入插入的位置n:
m);
if(m<
1||m>
n+1)printf("
\n\n输入范围有误,请重新输入希望插入的正确位置(n>
=1&
=%d):
n+1);
}while(m<
n+1);
if(m==1){/*插入在数据库的第一个位置*/
p1=head;
next=p1;
if(m==n+1){/*插入在数据库的最后一个位置*/
while(p1->
p1=p1->
p2=(structworker*)malloc(LEN);
p2->
p2->
basepay,p2->
p2->
p1->
/*插入在数据库的中间第n个位置*/
for(i=1;
m;
{p2=p1;
p3=(structworker*)malloc(LEN);
p3->
p3->
basepay,p3->
next=p1;
p2->
next=p3;
}
/*删除指定职工号的记录*/
voiddeleteRec()
\n职工信息数据库为空,不能删除,按任意键将返回:
\n\n请输入要删除的职工号:
=0&
id)==0)
{if(head->
next==NULL)
{free(head);
head=NULL;
elseif(head==p1)
{head=p1->
free(p1);
}
else{p2->
next=p1->
free(p1);
\n删除完毕;
按任意键返回:
/*显示所有信息*/
voidlistRec()
if(head==NULL){printf("
\n数据库中没有职工信息,按任意键返回。
\n全部职工信息如下:
\n职工号职工工资职工姓名\n"
%s\t%.2lf\t%s\n"
id,p1->
\n按任意键返回!
......\n"
/*清屏*/
/*保存职工记录*/
voidwriteInfo()
/*定义文件指针*/
if(writeinfo_flag==0){printf("
\n数据库中职工信息已保存过,按任意键返回。
w"
\n数据库中职工信息无法保存,按任意键返回。
}
fprintf(fp,"
\t%s\t%.2lf\t%s\n"
fclose(fp);
\n数据库中职工信息保存完毕,按任意键返回。
/*设置保存记录标志*/
/*退出*/
voidexit0()
{if(writeinfo_flag==1)/*修改过记录时,先保存,再退出*/
writeInfo();
while(p1!
{p2=p1->
free(p1);