今天给大家介绍一个c人事管理系统,就是用c语言编写的公司人力资源管理系统,C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。

c人事管理系统功能设计:该系统具有职工基本信息的录入,查询以及其基本信息的增加、删除、修改及排序等功能。具体可将本系统分为以下功能,每项功能的主要任务是:
1、记录输入:完成职工信息的输入(可一次录入多个职工信息),或者事后再次添加。
2、记录浏览:对录入的职工信息整体查看。
3、信息查询:根据职工姓名查询职工具体信息。
4、修改记录:对已录入的职工信息根据需要输入职工姓名进行修改。
5、记录排序:根据职工号进行升序排序。
6、删除记录:根据需要删除错误或不存在的职工信息。
7、保存文件:保存现行录入的职工信息。
8、读取文件:对已有文件进行读取。
9、退出:退出该系统
源代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <process.h>
#include <time.h>
struct employee
{
int num;//职工号
char name[10];
char sex[5];
char birth[10];//出生日期
char xueli[10];
char apartment[10];
char duty[5];
char address[15];
int pay;
int phone;
}employee[100];/*定义结构体*/
void RandomCode (char Rcode[]);
int LandedApp (char *password[], char Rcode[]);
void Login();
void menu();
void Add();
void save();
int open();
void Sort();
void Seek();
void Show();
void modify();
void Delete();
/*主函数*/
int main ()
{
int k;
system("color 0B");
printf("\t&*********************************&\n");
printf("\t 欢迎使用c人事管理系统 \n") ;
printf("\t&*********************************&\n\n\n");
Login();//调用登录函数
do{
menu();//调用菜单函数
printf("请选择按键进行操作(0-5):");
scanf("%d",&k);
switch(k)
{
case 1:Add();system("cls");break;
case 2:Show();system("cls");break;
case 3:Seek();system("cls");break;
case 4:modify();system("cls");break;
case 5:Delete();system("cls");break;
case 0:printf("\t谢谢您的使用!\n\n");exit(0);
default:break;
}
}while(k);
return 0;
}
/*菜单函数*/
void menu()
{
printf(" ************************************ \n");
printf(" 欢迎进入c人事管理系统 \n");
printf(" ************************************ \n");
printf("请选择您的操作:\n");
printf(" 1.录入职工信息;\n");
printf(" 2.浏览所有职工信息;\n");
printf(" 3.查找职工信息;\n");
printf(" 4.修改职工信息;\n");
printf(" 5.删除职工信息;\n");
printf(" 0.退出。\n"); //每个操作后都会自动存读
printf(" ********************谢谢使用******************\n\n");
}
/*随机码(验证码)产生函数*/
void RandomCode (char Rcode[])
{
int i;
srand (time(0));
for (i = 0; i < 3; ++i)
Rcode[i] = rand()%10 + '0';
Rcode[i] = '\0';
}
/*内置登陆匹配函数,判断信息是否匹配,若匹配返回1,否则返回0*/
int LandedApp (char *password[], char Rcode[])
{
char name[10] = {0};
char pword[10] = {0};
char rcode[4] = {0};
printf ("用户名 : ");
gets (name);
printf ("密码 : ");
gets (pword);
printf ("验证码 : ");
gets (rcode);
if (strcmp (name, password[0]) != 0 || strcmp (pword, password[1]) != 0 || strcmp (rcode, Rcode) != 0)
return 0;
else
return 1;
}
/*登录函数*/
void Login()
{
char * password[2] = {"管理员", "123abc"}; //用户名和密码
char rc[4] = {0}; //随机码
int count = 3,i; //可输入次数
puts ("请输入用户名,密码和验证码:");
while (count)
{
RandomCode (rc);
printf ("验证码(随机码) : %s\n", rc);
if (LandedApp(password, rc) != 0)
break;
count--;
if (count != 0){
puts("正在登录......");
for(i=0;i<1000;i--);
puts ("用户名或密码或验证码错误,请重新输入: ");}
}
if (count != 0){
puts("正在登录......");
for(i=0;i<100;i--);
puts ("\n登录成功!");}
else
{ puts("正在登录......");
for(i=0;i<100;i--);
puts ("\n登录失败 !");
exit(0);}
}
/*增加,输入函数*/
void Add()
{
int i,m,n,t;
printf("请输入需要创建信息的职工人数:\n");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("增加职工信息时:\n");
printf("请输入职工号:");
scanf("%d",&employee[i].num);
printf("请输入职工姓名:");
scanf("%s",&employee[i].name);
printf("请输入职工性别:");
scanf("%s",&employee[i].sex);
printf("请输入职工家庭住址:");
scanf("%s",&employee[i].address);
printf("请输入职工生日:");
scanf("%s",&employee[i].birth);
printf("请输入职工学历:");
scanf("%s",&employee[i].xueli);
printf("请输入职工部门:");
scanf("%s",&employee[i].apartment);
printf("请输入职工职位:");
scanf("%s",&employee[i].duty);
printf("请输入职工工资:");
scanf("%d",&employee[i].pay);
printf("请输入职工联系电话:");
scanf("%d",&employee[i].phone);
}
printf("职工信息创建成功!!!");
system("cls");
save(m);
n=open();
printf("\n\t现有记录%d:",n);
printf("\n\n");
printf("是否还要添加?\n要添请输入1不添请输入0:");
scanf("%d",&t);
if(t=0)
exit(0);
}
/*文件写入操作函数*/
void save(int m)
{
int i;
FILE*fp;
if ((fp=fopen("d:\\employee_list","wb"))==NULL) /*创建文件并判断是否能打开*/
{
printf ("cannot open file\n");
exit(0);
}
for (i=0;i<m;i++) /*将内存中职工的信息输出到磁盘文件中去*/
if (fwrite(employee,sizeof(struct employee),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}
/*文件读操作函数*/
int open()
{
FILE*fp;
int i=0;
if((fp=fopen("d:\\employee_list","rb"))==NULL)
{
printf ("cannot open file\n");
exit(0);
}
else
{
do
{
fread(employee,sizeof(struct employee),1,fp);
i++;
}
while(feof(fp)==0);
}
fclose(fp);
return(i-1);
}
/*浏览显示函数 */
void Show()
{
int i;
int m=open();
Sort();
printf("\n职工号\t姓名\t性别\t家庭住址\t生日\t学历\t部门\t职位\t工资\t联系电话 \n");
for(i=0;i<m;i++) /*m为输入部分的职工人数*/
printf("\n %d\t %s\t %s\t %s\t %s\t %s\t %s\t %s\t %d\t %d\n",employee[i].num,employee[i].name,employee[i].sex,employee[i].address,employee[i].birth,employee[i].xueli,employee[i].apartment,employee[i].duty,employee[i].pay,employee[i].phone); //用数组下标
printf("按任意键继续\n");
getchar();getchar();
system("cls");
}
/*查找函数*/
void Seek()
{
char name1[10];
int i,t;
int m=open();
printf("请输入要查找的姓名:\n");
scanf("%s",name1);
for(i=0;i<m;i++)
if(strcmp(name1,employee[i].name)==0)
{
printf("\n已找到此人,其记录为:\n");
printf("\n职工号\t姓名\t性别\t家庭住址\t生日\t学历\t部门\t职位\t工资\t联系电话 \n");
printf("\n%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%d\n",employee[i].num,employee[i].name,employee[i].sex,employee[i].address,employee[i].birth,employee[i].xueli,employee[i].apartment,employee[i].duty,employee[i].pay,employee[i].phone); //用数组下标
break;
}
if(i==m)
printf("\n对不起,查无此人\n");
printf("\n");
printf("继续查询请按1,返回主函数请按2\n");
scanf("%d",&t);
switch(t)
{
case 1:Seek();break;
case 2: break;
default:break;
}
}
/*修改函数*/
void modify()
{
int num;
char name[10];
char sex[5];
char birth[10];
char xueli[10];
char apartment[10];
char duty[5];
char address[15];
int pay;
int phone;
int b,c,i,n,t,flag;
int m=open(); /*导入文件内的信息*/
printf("\n");
printf("请输入要修改的职工的姓名:\n");
scanf("%s",&name);
for(flag=1,i=0;flag&&i<m;i++)
{
if(strcmp(employee[i].name,name)==0)
{
printf("\n已找到此人,原始记录为:\n");
printf("\n职工号\t姓名\t性别\t家庭住址\t生日\t学历\t部门\t职位\t工资\t联系电话 \n");
printf("\n%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%d\n",employee[i].num,employee[i].name,employee[i].sex,employee[i].address,employee[i].birth,employee[i].xueli,employee[i].apartment,employee[i].duty,employee[i].pay,employee[i].phone); //用数组下标
printf("\n确实要修改此人信息请按1 ; 不修改请按0\n");
scanf("%d",&n);
if(n==1)
{
printf("\n需要进行修改的选项\n 1.职工号 2.姓名 3.性别4.家庭住址 5.生日 6.学历 7.部门 8.职位 9.工资 10.联系电话\n");
printf("请输入你想修改的那一项序号:\n");
scanf("%d",&c);
if(c>10||c<1)
printf("\n选择错误,请重新选择!\n");
}
flag=0;
}
}
if(flag==1)
printf("\n对不起,查无此人!\n");
do
{
switch(c) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/
{
case 1:printf("职工号改为: ");
scanf("%d",&num);
employee[i-1].num=num;
break;
case 2:printf("姓名改为: ");
scanf("%s",name);
strcpy(employee[i-1].name,name);
break;
case 3:printf("性别改为: ");
getchar();
scanf("%s",&sex);
strcpy( employee[i-1].sex,sex);
break;
case 4:printf("家庭住址改为: ");
scanf("%s",&address);
strcpy(employee[i-1].address,address);
break;
case 5:printf("生日改为: ");
scanf("%d",&birth); //这里要用地址
strcpy(employee[i-1].birth,birth);
break;
case 6:printf("学历改为: ");
scanf("%s",&xueli);//这里要用地址
strcpy(employee[i-1].xueli,xueli);
break;
case 7:printf("部门改为: ");
scanf("%s",&apartment);//这里要用地址
strcpy(employee[i-1].apartment,apartment);
break;
case 8:printf("职位改为: ");
scanf("%s",&duty);
strcpy(employee[i-1].duty,duty);
break;
case 9:printf("工资改为: ");
scanf("%d",&pay);
employee[i-1].pay=pay;
break;
case 10:printf("联系电话改为: ");
scanf("%d",&phone);
employee[i-1].phone=phone;
break;
}
printf("\n");
printf("\n是否确定所修改的信息?\n 是 请按1 ; 不,重新修改 请按2: \n");
scanf("%d",&b);
}while(b==2);
printf("\n浏览修改后的所有职工信息:\n");
printf("\n");
save(m);
Show();
printf("\n继续修改请按1,不再修改请按0\n");
scanf("%d",&t);
switch(t)
{
case 1:modify();break;
case 0:break;
default :break;
}system("cls");
}
/*删除函数*/
void Delete()
{
int m=open();
int i,j,n,t;
char name1[10];
printf("\n 原来的职工信息:\n");
Show(); /* 调用浏览函数*/
printf("\n");
printf("请输入要删除的职工的姓名:\n");
scanf("%s",name1);
for(i=0;i<m;i++)
{
if(strcmp(employee[i].name,name1)==0)
{
printf("\n已找到此人,原始记录为:\n");
printf("\n职工号\t姓名\t性别\t家庭住址\t生日\t学历\t部门\t职位\t工资\t联系电话 \n");
printf("\n%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%d\n",employee[i].num,employee[i].name,employee[i].sex,employee[i].address,employee[i].birth,employee[i].xueli,employee[i].apartment,employee[i].duty,employee[i].pay,employee[i].phone); //用数组下标
printf("\n确实要删除此人信息请按1,不删除请按0\n");
scanf("%d",&n);
if(n==1) /*如果删除,则其他的信息都往上移一行*/
{
for(j=i;j<m-1;j++)
{
employee[j]=employee[j+1];
m--;
}save(m);
}
else
printf("\n对不起,查无此人!\n");
save(m); /*调用保存函数*/
}
save(m); /*调用保存函数*/
}
printf("\n继续删除请按1,不再删除信息请按2\n");
scanf("%d",&t);
switch(t)
{
case 1:Delete();break;
case 2:break;
default :break;
}system("cls");
}
/*排序函数*/
void Sort()
{
struct employee t;
int i,j;
int m=open();
for (j=0;j<m-1;j++)
{
for (i=0;i<m-1-j;i++)
{
if (employee[i].num>employee[i+1].num)
{
t=employee[i];
employee[i]=employee[i+1];
employee[i+1]=t;
}
}
}
}
路由网原创文章,作者:路由网小编,未经授权,禁止转载!原文出处:http://jc.a300.cn/luyouwang/9696.html