c语言实现的员工信息管理系统
第一次写博客,内心还有点小忐忑,这个系统是为期两周写出来的课设。不知道该说些啥,就随便说说吧。。。。。。该系统实现了对员工信息的添加,修改,删除,查询,打印,排序,统计的一系列功能。其中采用了结构体数组,文件的打开,存储。期间还有对背景颜色的改变,首先是对文件的读写,再者录入职工信息时,getch(),借助这个函数是有键盘缓冲区的功能,可以隐藏在运行框中一些不必要的提示指令,这个运行得前提是自己先写一个员工信息的记事本,里面包括员工的个数,职工号,姓名,性别,年龄,学历,工资,地址,电话。然后存到本地电脑的d盘,文件名为worker,即可运行。代码如下
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define N 100
#define PAGE 3
/*职工结构体类型*/
struct staff
{ int num;
char name[20];
char sex[4];
int age;
char deg[20];
int salary;
char add[20];
char tel[40];
}s[50];
int readfile(struct staff s[])
{
FILE *fp;
int i=0,n;
fp=fopen("d:\\worker.txt","r");
fscanf(fp,"%d",&n);
for(i=0;i<n;i++)
fscanf(fp,"%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",&s[i].num,s[i].name, s[i].sex,&s[i].age, s[i].deg,&s[i].salary,s[i].add,s[i].tel);
fclose(fp);
return n;
}
void savefile(struct staff s[])
{ FILE *fp;
int i=0,n;
fp=fopen("d:\\worker.txt","w");
fscanf(fp,"%d",&n);
for(i=0;i<n;i++)
fscanf(fp,"%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",&s[i].num,s[i].name, s[i].sex,&s[i].age, s[i].deg,&s[i].salary,s[i].add,s[i].tel);
fclose(fp);
}
int input( struct staff s[])
{ int i=0;
printf("\n\n 录入职工信息(最多%d个人)\n",N);
printf("------------------------------------------------\n");
do
{
printf("\n 第%d个职工",i+1);
printf("\n 职工号:");
scanf("%d",&s[i].num);
if(s[i].num==0) break;
printf("\n 姓名:");
scanf("%s",s[i].name);
printf("\n 性别:");
scanf("%s",s[i].sex);
printf("\n 年龄:");
scanf("%d",&s[i].age);
printf("\n 学历:");
scanf("%s",s[i].deg);
printf("\n 工资:");
scanf("%d",&s[i].salary);
printf("\n 住址:");
scanf("%s",s[i].add);
printf("\n 电话:");
scanf("%d",&s[i].tel);
i++;
}while(i<N);
printf("\n 第%d个职工信息输入完毕! \n",i);
printf("\n 按任意键返回主菜单!");
getch();
return i ;
}
/*输出模块*/
void output(struct staff s[],int n)
{
int i=0;
system("cls");
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n\n",s[i].num,s[i].name, s[i].sex,s[i].age,s[i].deg,s[i].salary,s[i].add,s[i].tel);
if(i>n)
printf("\n 该职工不存在!");
printf("\n 按任意键返回主菜单!");
getch();
}
void add(struct staff s[]) /*添加信息模块*/
{ int i=0,m,n;
n=readfile(s);
printf("输入要增加的个数");
scanf("%d",&m) ;
printf("\n\n ------添加一个新的职工------\n\n\n");
for(i=n;i<n+m;i++)
{
printf("\n 职工号:");
scanf("%d",&s[i].num);
printf("\n 姓名:");
scanf("%s",&s[i].name);
printf("\n 性别:");
scanf("%s",&s[i].sex);
printf("\n 年龄:");
scanf("%d",&s[i].age);
printf("\n 学历:");
scanf("%s",&s[i].deg);
printf("\n 工资:");
scanf("%d",&s[i].salary);
printf("\n 住址:");
scanf("%s",&s[i].add);
printf("\n 电话:");
scanf("%s",&s[i].tel);
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",s[i].num,s[i].name, s[i].sex,s[i].age, s[i].deg,s[i].salary,s[i].add,s[i].tel);
}
FILE *fp;
fp=fopen("d:\\worker.txt","w") ;
fprintf(fp,"%d\n",n+m);
for(i=0;i<n+m;i++)
fprintf(fp,"%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",s[i].num,s[i].name, s[i].sex,s[i].age, s[i].deg,s[i].salary,s[i].add,s[i].tel);
fclose(fp);
printf("****按任意键返回!****");
getch();
}
void modify(struct staff s[])
{
int i=0,choice,modify_num,flag,n;
n=readfile(s);
do
{
printf("\n 输入要修改的职工号:");
scanf("%d",&modify_num);
for(i=0;i<n;i++)
if(s[i].num==modify_num)
{
printf("\n\n 职工信息 \n");
printf("-------------------------------------------------------\n");
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",s[i].num,s[i].name,s[i].sex,s[i].age,s[i].deg,s[i].salary,s[i].add,s[i].tel);
printf("\n 您要修改哪一项\n");
printf("\n 1 : 职工号\n");
printf("\n 2 : 姓名\n");
printf("\n 3 : 性别\n");
printf("\n 4 : 年龄\n");
printf("\n 5 : 学历\n");
printf("\n 6 : 工资\n");
printf("\n 7 : 住址\n");
printf("\n 8 : 电话\n");
printf("\n 请选择(1-7):");
scanf("%d",&choice);
switch(choice)
{
case 1 :printf("\n 输入修改后的职工号:");
scanf("%d",&s[i].num);break;
case 2 :printf("\n 输入修改后的姓名:");
scanf("%s",s[i].name);break;
case 3 :printf("\n 输入修改后的性别:");
scanf("%s",s[i].sex);break;
case 4 :printf("\n 输入修改后的年龄:");
scanf("%d",&s[i].age);break;
case 5 :printf("\n 输入修改后的学历:");
scanf("%s",s[i].deg);break;
case 6 :printf("\n 输入修改后的工资:");
scanf("%d",&s[i].salary);break;
case 7 :printf("\n 输入修改后的住址:");
scanf("%s",s[i].add);break;
case 8 :printf("\n 输入修改后的电话:");
scanf("%s",s[i].tel);break;
}
printf("\n\n >>>>>职工信息<<<<< \n");
printf("----------------------------------------------------\n");
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",s[i].num,s[i].name, s[i].sex,s[i].age,s[i].deg,s[i].salary,s[i].add,s[i].tel);
break;
}
if(i==n)
{
printf("\n 该职工不存在!");
}
printf("\n\n 继续修改吗?(Y/N)");
choice=getch();
if(choice=='Y'||choice=='y')
{
flag=1;
printf("\n 继续!\n");
}
else flag=0;
}while(flag==1);
FILE *fp;
fp=fopen("d:\\worker.txt","w") ;
fprintf(fp,"%d\n",n);
for(i=0;i<n;i++)
fprintf(fp,"%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",s[i].num,s[i].name, s[i].sex,s[i].age, s[i].deg,s[i].salary,s[i].add,s[i].tel);
fclose(fp);
printf("****按任意键返回!****");
getch();
printf("\n 按任意键返回主菜单!");
}
void del(struct staff s[]) /*删除信息模块*/
{
int i,n,m;
n=readfile(s);
printf("*******删除一个职工信息********\n\n");
printf(" 请输入要删除的职工号 ");
scanf("%d",&m);
for(i=0;i<n;i++)
if(s[i].num==m)
{
printf("职工号\t姓名\t性别\t年龄\t学历\t工资\t住址\t电话\n");
printf("%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",s[i].num,s[i].name,s[i].sex,s[i].age,s[i].deg,s[i].salary, s[i].add,s[i].tel);
}
FILE *fp;
fp=fopen("d:\\worker.txt","w") ;
fprintf(fp,"%d\n",n-1);
for(i=0;i<n-1;i++)
fprintf(fp,"%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",s[i].num,s[i].name, s[i].sex,s[i].age, s[i].deg,s[i].salary,s[i].add,s[i].tel);
fclose(fp);
}
void inquire(struct staff s[],int n) /*信息查询模块*/
{
int i,inquire_num;
system("cls");
printf("*******查询职工信息********\n\n");
printf(" 请输入要找职工的职工号:");
scanf("%d",&inquire_num);
for(i=0;i<n;i++)
if(s[i].num==inquire_num&&s[i].num!=0)
{
printf("*******该职工信息表*******\n\n");
printf("职工号 姓名 性别 年龄 学历 工资 住址 电话\n");
printf("\n\n%d %s %s %d %s %d %s %s",s[i].num,s[i].name,s[i].sex,s[i].age,s[i].deg,s[i].salary,s[i].add,s[i].tel);
break;
}
if(i==n)
printf("该职工不存在!\n\n");
getch();
printf("按任意键返回主菜单!");
}
void count(struct staff s[],int n) /*信息查询模块*/
{
int i,salaryb;
system("cls");
printf("*******查询职工信息********\n\n");
printf(" 请输入要找职工的工资:");
scanf("%d",&salaryb);
for(i=0;i<n;i++)
if(s[i].salary==salaryb)
{
printf("*******该职工信息表*******\n\n");
printf("职工号 姓名 性别 年龄 学历 工资 住址 电话\n");
printf("\n\n%d %s %s %d %s %d %s %s",s[i].num,s[i].name,s[i].sex,s[i].age,s[i].deg,s[i].salary,s[i].add,s[i].tel);
break;
}
if(i==n)
printf("该职工不存在!\n\n");
getch();
printf("按任意键返回主菜单!");
}
void sort_age(struct staff s[],int n)
{
int i,j;
n=readfile(s);
printf("\n 排行\n");
printf("-------------------------------------------------------\n");
for(i=n-2;i>=0;i--)
for(j=0;j<=i;j++)
if(s[j].age>s[j+1].age)
{ struct staff t;
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
FILE *fp;
fp=fopen("d:\\worker.txt","w") ;
fprintf(fp,"%d\n",n);
for(i=0;i<n;i++)
fprintf(fp,"%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",s[i].num,s[i].name, s[i].sex,s[i].age, s[i].deg,s[i].salary,s[i].add,s[i].tel);
fclose(fp);
}
void sort_age1(struct staff s[],int n)
{
int i,j;
n=readfile(s);
printf("\n 排行\n");
printf("-------------------------------------------------------\n");
for(i=n-2;i>=0;i--)
for(j=0;j<=i;j++)
if(s[j].age<s[j+1].age)
{ struct staff t;
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
FILE *fp;
fp=fopen("d:\\worker.txt","w") ;
fprintf(fp,"%d\n",n);
for(i=0;i<n;i++)
fprintf(fp,"%d\t%s\t%s\t%d\t%s\t%d\t%s\t%s\n",s[i].num,s[i].name, s[i].sex,s[i].age, s[i].deg,s[i].salary,s[i].add,s[i].tel);
fclose(fp);
}
main(int argc,char*argv[])
{
struct staff w[50];
int choice,m,b,sum,n,d,k;
system("color 9e");
m=123;
printf("请输入密码:");
scanf("%d",&b);
if(b==m)
{
printf("进入系统");
n=readfile(w);
if(n==0)
{
printf("并录入基本库存信息!*********\n");
getch();
n=input(w);
}
do
{
printf(" \n **********职工信息系统**********\n\n");
printf(" \n 1 : 添加职工信息");
printf(" \n 2 : 修改职工信息");
printf(" \n 3 : 删除职工信息");
printf(" \n 4 : 查询职工信息");
printf(" \n 5 : 打印职工信息");
printf(" \n 6 : 职工年龄排序信息");
printf(" \n 7: 职工年龄1排序信息");
printf(" \n 8 : 统计职工信息");
printf(" \n 0 : 退出系统");
printf(" \n 请选择(0-8)");
scanf("%d",&choice);
switch(choice)
{
case 1:add(w); break;
case 2:modify(w); break;
case 3:del(w); break;
case 4:inquire(w,n); break;
case 5:output(w,n); break;
case 6:sort_age(w,n); break;
case 7:sort_age1(w,n); break;
case 8:count(w,n); break;
case 0: break;
}
}while(choice!=0);
}else
printf("密码错误!!!!\n");
savefile(w);
}
效果图见下图有点大