职工信息管理C语言课程设计.docx
- 文档编号:8067341
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:13
- 大小:18.08KB
职工信息管理C语言课程设计.docx
《职工信息管理C语言课程设计.docx》由会员分享,可在线阅读,更多相关《职工信息管理C语言课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
职工信息管理C语言课程设计
2)已知一个职工的信息为:
职工号、工资、姓名,从键盘输入n个职工的信息,并
将其保存在D:
/info文件中。
/*所使用的有头文件*/
#include
#include
#include
#include
#include
#defineLENsizeof(structworker)
/*结构体定义*/
structworker
{charid[19];
doublebasepay;
charname[20];
structworker*next;
};
/*函数声明*/
voidcreateRec();/*新建职工记录*/
voidloadRec();/*从磁盘文件导入职工信息到内存*/
voidsearchRec();/*查询职工记录*/
voidmodifyRec();/*修改职工记录*/
voidinsertRec();/*插入职工记录*/
voiddeleteRec();/*删除职工记录*/
voidlistRec();/*显示所有职工信息*/
voidwriteInfo();/*保存职工记录*/
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:
system("cls");searchRec();break;
case3:
system("cls");modifyRec();break;
case4:
system("cls");insertRec();break;
case5:
system("cls");deleteRec();break;
case6:
system("cls");listRec();break;
case7:
system("cls");writeInfo();break;
case0:
system("cls");exit0();return0;
default:
{getchar();
printf("\n选择错误,请正确输入你的选择(0~5),:
\n");
printf("\n按任意键返回......\n");
getchar();
getchar();
system("cls");/*清屏*/
}
}
}
return0;
}
/*主菜单*/
intmenu_select()
{intc;
printf("\t\t**************菜单**************\n");
printf("\t\t\t1.新建职工记录\n");
printf("\t\t\t2.查询职工记录\n");
printf("\t\t\t3.修改职工记录\n");
printf("\t\t\t4.插入职工记录\n");
printf("\t\t\t5.删除职工记录\n");
printf("\t\t\t6.显示所有信息\n");
printf("\t\t\t7.保存职工记录\n");
printf("\t\t\t0.退出(任何情况下按Ctrl+C退出程序)\n");
printf("\n输入你的选择(0~7):
\n");
scanf("%d",&c);
returnc;
}
/*从磁盘文件导入职工信息到内存*/
voidloadRec()
{FILE*fp;
intn=0;
if((fp=fopen("f:
\\zx\\info.dat","r"))==NULL)/*打开文件*/
{printf("文件不存在或无法打开!
\n");
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--;break;}
p2=(structworker*)malloc(LEN);/*开辟一个新单元*/
p1->next=p2;
p3=p1;
p1=p2;
p1->next=NULL;
}
free(p2);
p3->next=NULL;
printf("\n%d项信息输入完毕,按任意键返回......\n",n);
getchar();
system("cls");/*清屏*/
writeinfo_flag=0;/*设置保存记录标志*/
if(fclose(fp))/*关闭文件*/
{
printf("Cannotclosethefile!
\n");
exit(0);
}
}
/*新建职工记录*/
voidcreateRec()
{intn,i;
if(head!
=0){p3=head;
while(p3->next!
=NULL)
p3=p3->next;
getchar();
printf("\n职工信息数据库已存在,新建职工信息将接续在信息库的后面,按任意键继续......:
\n");
getchar();
system("cls");/*清屏*/
p3->next=p1=(structworker*)malloc(LEN);/*开辟一个新单元*/
}
elsehead=p1=(structworker*)malloc(LEN);/*开辟一个新单元*/
p1->next=NULL;
printf("\n\n请输入希望建立的职工基本信息条数n(n<1&&n<10):
\n");
do{scanf("%d",&n);
if(n<1||n>10)printf("\n\n输入范围有误,请重新输入希望建立的职工基本信息条数n(n<1&&n<10):
\n");
}while(n<1||n>10);
/*开始建立n条职工基本信息记录*/
printf("\n\n请每行按职工号(id<=18位)职工工资职工姓名(name<=10汉字)的形式输入%d条职工记录:
\n",n);
for(i=0;i { scanf("%s%lf%s",p1->id,&p1->basepay,p1->name); p2=(structworker*)malloc(LEN);/*开辟一个新单元*/ p1->next=p2; p3=p1; p1=p2; p1->next=NULL; } free(p2); p3->next=NULL; printf("\n%d项信息输入完毕,按任意键返回......\n",n); getchar(); system("cls");/*清屏*/ writeinfo_flag=1;/*清除保存记录标志*/ } /*查询职工记录*/ voidsearchRec() { charid[19]; p1=head; if(p1==NULL) {printf("\n\n职工信息数据库为空! ! ! \n"); printf("\n按任意键返回......\n"); getch(); system("cls");/*清屏*/ return; } printf("\n\n请输入职工号以便查证: \n"); scanf("%s",id); while(p1! =NULL) {if(strcmp(p1->id,id)==0) {printf("\t该职工信息如下: \n\t职工号: "); printf("%s\n",p1->id); printf("\t职工工资: "); printf("%.0f\n",p1->basepay); printf("\t职工姓名: "); printf("%s\n",p1->name); break; } else{p1=p1->next;} } if(p1==NULL)printf("\n\n找不到该职工信息! ! ! \n"); printf("\n按任意键返回......\n"); getch(); system("cls");/*清屏*/ } /*修改指定职工号的记录*/ voidmodifyRec() { charid[19]; if(head==NULL) {getchar(); printf("\n职工信息数据库为空,不能修改,按任意键将返回: \n"); getchar(); system("cls");/*清屏*/ return; } p1=head; printf("\n\n请输入要修改记录的职工号: \n"); scanf("%s",id); while(strcmp(id,p1->id)! =NULL&&p1->next! =NULL) p1=p1->next; if(strcmp(id,p1->id)==NULL) {strcpy(p1->id,id); printf("\n\n请输入该职工号的工资: \n"); scanf("%lf",&p1->basepay); printf("\n\n请输入该职工号的姓名: \n"); scanf("%s",&p1->name); printf("\n1项信息修改完毕,"); } else printf("\n\n找不到该职工号信息! "); getchar(); printf("按任意键将返回: \n"); getchar(); system("cls");/*清屏*/ writeinfo_flag=1;/*清除保存记录标志*/ return; } /*插入职工记录*/ voidinsertRec() {intn=0,m,i; p1=head; if(head==NULL){/*空数据库插入在第一个位置*/ getchar(); printf("\n职工信息数据库为空,只能插入第一个位置,按任意键将继续。 : \n"); getchar(); printf("\n\n请按职工号(id<=18位)职工工资职工姓名(name<=10汉字)的形式输入1条职工记录: \n"); head=(structworker*)malloc(LEN);/*开辟一个新单元*/ head->next=NULL; scanf("%s%lf%s",head->id,&head->basepay,head->name); printf("\n1项信息输入完毕,按任意键返回......\n"); getchar(); system("cls");/*清屏*/ writeinfo_flag=1;/*清除保存记录标志*/ return; } /*数据库不为空时,分插入第一个位置,中间位置,最后一个位置三种情况*/ do{n++; p1=p1->next; }while(p1! =0); printf("职工信息数据库中共有%d条记录,请输入插入的位置n: \n",n); do{scanf("%d",&m); if(m<1||m>n+1)printf("\n\n输入范围有误,请重新输入希望插入的正确位置(n>=1&&n<=%d): \n",n+1); }while(m<1||m>n+1); if(m==1){/*插入在数据库的第一个位置*/ p1=head; getchar(); printf("\n\n请按职工号(id<=18位)职工工资职工姓名(name<=10汉字)的形式输入1条职工记录: \n"); head=(structworker*)malloc(LEN);/*开辟一个新单元*/ scanf("%s%lf%s",head->id,&head->basepay,head->name); head->next=p1; printf("\n1项信息输入完毕,按任意键返回......\n"); getchar(); system("cls");/*清屏*/ writeinfo_flag=1;/*清除保存记录标志*/ return; } if(m==n+1){/*插入在数据库的最后一个位置*/ p1=head; while(p1->next! =NULL) p1=p1->next; printf("\n\n请按职工号(id<=18位)职工工资职工姓名(name<=10汉字)的形式输入1条职工记录: \n"); p2=(structworker*)malloc(LEN);/*开辟一个新单元*/ scanf("%s%lf%s",p2->id,&p2->basepay,p2->name); p2->next=NULL; p1->next=p2; printf("\n1项信息输入完毕,按任意键返回......\n"); getchar(); system("cls");/*清屏*/ writeinfo_flag=1;/*清除保存记录标志*/ return; } /*插入在数据库的中间第n个位置*/ p1=head; for(i=1;i {p2=p1; p1=p1->next; } printf("\n\n请按职工号(id<=18位)职工工资职工姓名(name<=10汉字)的形式输入1条职工记录: \n"); p3=(structworker*)malloc(LEN);/*开辟一个新单元*/ scanf("%s%lf%s",p3->id,&p3->basepay,p3->name); p3->next=p1; p2->next=p3; printf("\n1项信息输入完毕,按任意键返回......\n"); getchar(); system("cls");/*清屏*/ writeinfo_flag=1;/*清除保存记录标志*/ return; } /*删除指定职工号的记录*/ voiddeleteRec() { charid[19]; if(head==NULL) {getchar(); printf("\n职工信息数据库为空,不能删除,按任意键将返回: \n"); getchar(); system("cls");/*清屏*/ return; } p1=head; printf("\n\n请输入要删除的职工号: \n"); scanf("%s",id); while(strcmp(id,p1->id)! =0&&p1->next! =NULL) {p2=p1; p1=p1->next; } if(strcmp(id,p1->id)==0) {if(head->next==NULL) {free(head); head=NULL; } elseif(head==p1) {head=p1->next; free(p1); } else{p2->next=p1->next; free(p1); } printf("\n删除完毕;"); } else printf("\n\n找不到该职工号信息! "); getchar(); printf("按任意键返回: \n"); getchar(); system("cls");/*清屏*/ writeinfo_flag=1;/*清除保存记录标志*/ return; } /*显示所有信息*/ voidlistRec() { if(head==NULL){printf("\n数据库中没有职工信息,按任意键返回。 \n");getch();system("cls");return;} printf("\n全部职工信息如下: \n"); printf("\n职工号职工工资职工姓名\n"); p1=head; while(p1! =NULL) { printf("%s\t%.2lf\t%s\n",p1->id,p1->basepay,p1->name); p1=p1->next; } printf("\n按任意键返回! ......\n"); getch(); system("cls");/*清屏*/ } /*保存职工记录*/ voidwriteInfo() {FILE*fp;/*定义文件指针*/ if(head==NULL){printf("\n数据库中没有职工信息,按任意键返回。 \n");getch();system("cls");return;} if(writeinfo_flag==0){printf("\n数据库中职工信息已保存过,按任意键返回。 \n");getch();system("cls");return;} if((fp=fopen("f: \\zx\\info.dat","w"))==NULL)/*打开文件*/ {printf("\n数据库中职工信息无法保存,按任意键返回。 \n"); getch(); system("cls"); return; } p1=head; while(p1! =NULL) { fprintf(fp,"\t%s\t%.2lf\t%s\n",p1->id,p1->basepay,p1->name); p1=p1->next; } fclose(fp); printf("\n数据库中职工信息保存完毕,按任意键返回。 \n"); getch(); system("cls"); writeinfo_flag=0;/*设置保存记录标志*/ return; } /*退出*/ voidexit0() {if(writeinfo_flag==1)/*修改过记录时,先保存,再退出*/ writeInfo(); p1=head; while(p1! =NULL) {p2=p1->next; free(p1); p1=p2; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 职工 信息管理 语言 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)