怎样设计这个C语言程序啊 大神们 谢谢

要求:设计一个系统来管理职工的信息。职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
•系统需要提供一下功能:
–1、以菜单方式工作
–2、职工信息浏览功能
–3、职工信息查询功能
•查询方式:按学历查询和按职工号查询
–4、职工信息删除
–5、职工信息修改
–6、职工信息的输入
–职工信息存储在文本中

第1个回答  2014-07-07
参考代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100 //数据容量
static int n=0; //静态变量,记录已经存在的数据个数

struct worker //结构体
{
char num[9];
char name[9];
char sex[2];
char age[3];
char zhiwu[15];
char bumen[15];
char dizhi[15];
char dianhua[15];
char xinshui[8];
}wk[N];

void load() /*导入已有员工详细数据*/
{
FILE*fp;
int i;
if((fp=fopen("worker.dat","rb"))==NULL)
{
fp=fopen("worker.dat","wb");
n=0;
}
for (i=0; i<n; i++)
if(fread(&wk[i],sizeof (struct worker),1,fp)!=1)
printf ("file write error\n");
fclose(fp);
}

void load1() //导入已有的员工数
{
FILE*fp;
if((fp=fopen("worker1.dat","r"))==NULL)
{
fp=fopen("worker1.dat","w");
n=0;
}
else
fscanf(fp, "%d", &n);
fclose(fp);
}

void save() /*保存数据,方便重复使用*/
{
FILE*fp;
int i;
if((fp=fopen("worker.dat","wb"))==NULL)
{
printf("can not open file!\n");
}
for (i=0; i<n; i++)
if(fwrite(&wk[i],sizeof (struct worker),1,fp)!=1)
printf ("file write error\n");
fclose(fp);
}

void save1() //保存员工数
{
FILE*fp;
if((fp=fopen("worker1.dat","w"))==NULL)
{
printf("can not open file!\n");
}
fprintf (fp, "%d", n);
fclose(fp);
}

void save2() /*保存员工数据文本文件*/
{
FILE*fp;
int i;
if((fp=fopen("员工数据记录.txt","w"))==NULL)
{
printf("can not open file!\n");
}
else
{
fprintf(fp, "编号\t姓名\t性别\t年龄\t职务\t部门\t地址\t电话\t薪水\n");
for (i=0; i<n; i++)
{
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",wk[i].num,wk[i].name,wk[i].sex,wk[i].age,wk[i].zhiwu,
wk[i].bumen,wk[i].dizhi,wk[i].dianhua,wk[i].xinshui);
}
}
fclose(fp);
}

void build() //打印导出员工信息
{
if(n==0)
{
printf("\n记录中无数据!\n");
}
else
{
save2();
printf("\n数据已打印导出完成!\n");
}
}

void input(int i) //数据添加函数
{
printf("\n编号:");
scanf("%s", wk[i].num);
printf("姓名:");
scanf("%s", wk[i].name);
printf("性别(m/f):");
scanf("%s", wk[i].sex);
printf("年龄:");
scanf("%s", wk[i].age);
printf("职务:");
scanf("%s", wk[i].zhiwu);
printf("部门(1-3):");
scanf("%s", wk[i].bumen);
printf("地址:");
scanf("%s", wk[i].dizhi);
printf("电话:");
scanf("%s", wk[i].dianhua);
printf("薪水:");
scanf("%s", wk[i].xinshui);
}

void add() //添加员工函数
{
int i,m,k=n;
printf("\n请输入增加的工人数(0-%d): [ ]\b\b",N-n);
scanf("%d",&m);
for(i=k;i<k+m;i++)
{
printf("\n输入 %dth 工人的数据:",i-k+1);
input(i); //调用数据添加函数
n++;
save();
save1();
}
}

void del() //删除数据函数
{
int i, j, k=0;
char s[9];
if(n==0)
{
printf("\n记录中无数据!\n");
}
else
{
printf("输入要删除的数据的编码:");
scanf("%s",&s);
for (i=0; i<n; i++)
{
if (strcmp(s,wk[i].num)==0)
{
for (j=i; j<=n; j++)
{
wk[j]=wk[j+1];
}
n--;
k++;
save();
save1();
}
}
if(k==0)
printf("记录中没有此人!\n");
else
printf("删除完毕!\n");
}
}

void modify() //数据修改函数
{
int i,k=0;
char s[9];
if(n==0)
{
printf("\n记录中无数据!\n");
}
else
{
printf("输入要修改的数据的编码:");
scanf("%s",&s);
for (i=0; i<n; i++)
{
if (strcmp(s,wk[i].num)==0)
{
printf("\n\n请输入新数据:");input(i);
save();
k++;
}
}
if(k==0)
printf("记录中没有此人!\n");
}
}

void browse() //浏览员工详细信息函数
{
int i;
if(n==0)
{
printf("\n记录中无数据!\n");
}
else
{
printf("\n\n\n全部记录:");
printf("\n编号\t姓名\t性别\t年龄\t职务\t部门\t地址\t电话\t薪水\n");
for (i=0; i<n; i++)
{
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",wk[i].num,wk[i].name,wk[i].sex,wk[i].age,wk[i].zhiwu,
wk[i].bumen,wk[i].dizhi,wk[i].dianhua,wk[i].xinshui);
}
}
}

void snum() //搜索函数
{
int i, j, k=0, l=0;
char c[9];
if(n==0)
{
printf("\n记录中无数据!\n");
}
else
{
printf("1.按编号\n2.按姓名\n请选择搜索方式(1-2):");
scanf("%d",&j);
if (j==1)
{
printf("请输入要查找的人员的编号:");
scanf("%s",&c);
printf("\n搜索结果为:\n");
for (i=0; i<n; i++)
{
if (strcmp(c, wk[i].num)==0)
{
printf("\n编号\t姓名\t性别\t年龄(m/f)\t职务\t部门(1-3)\t地址\t电话\t薪水\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",wk[i].num,wk[i].name,wk[i].sex,wk[i].age,wk[i].zhiwu,
wk[i].bumen,wk[i].dizhi,wk[i].dianhua,wk[i].xinshui);
l++;
}
k++;
}
}
if (j==2)
{
printf("请输入要查找的人员的姓名:");
scanf("%s",&c);
printf("\n搜索结果为:\n");
for (i=0; i<n; i++)
{
if (strcmp(c, wk[i].name)==0)
{
printf("\n编号\t姓名\t性别(m/f)\t年龄\t职务\t部门(1-3)\t地址\t电话\t薪水\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",wk[i].num,wk[i].name,wk[i].sex,wk[i].age,wk[i].zhiwu,
wk[i].bumen,wk[i].dizhi,wk[i].dianhua,wk[i].xinshui);
l++;
}
k++;
}
}
if(k==0||l==0)
printf("记录中没有此人!\n");
}
}

void order() //排序函数
{
int i, x;
struct worker w;
if(n==0)
{
printf("\n记录中无数据!\n");
}
else
{
for (i=0; i<n-1; i++)
{
for (x=i+1; x<n; x++)
{
if (strcmp(wk[i].num,wk[x].num)>0)
{
w=wk[i];
wk[i]=wk[x];
wk[x]=w;
}
}
}
save();
printf("\n排序完成!\n");
}
}

void data() //数据统计函数
{
int i, j=0, k=0, l=0, max;
for (i=0; i<n; i++)
{
if(strcmp(wk[i].sex,"m")==0)
j++;
}
for (i=0; i<n; i++)
{
if(strcmp(wk[i].sex,"f")==0)
k++;
}
printf("\n总员工人数为:%d 人\n\n男员工的人数为:%d 人\n女员工人数为:%d 人\n", n, j, k);
if (k+j!=n)
{
printf("有%d个数据的性别输入错误!\n",n-j-k);
}
j=0;
k=0;
for (i=0; i<n; i++)
{
if(strcmp(wk[i].bumen,"1")==0)
j++;
if (strcmp(wk[i].bumen,"2")==0)
k++;
if (strcmp(wk[i].bumen,"3")==0)
l++;
}
max=((max=(j>k)?j:k)>l?max:l);
printf("\n1 部门人数为:%d\n2 部门人数为:%d\n3 部门人数为:%d\n",j, k, l);
if (max==j)
printf("1 部门人数就最多,为:%d 人\n",j);
if (max==k)
printf("2 部门人数就最多,为:%d 人\n",k);
if (max==l)
printf("3 部门人数就最多,为:%d 人\n",l);
if (j+k+l!=n)
{
printf("\n有%d个数据的部门输入错误!\n",n-j-k-l);
}
}

int head() //菜单头
{
int m;
printf("\n\t\t\t\tMENU\n");
printf("\t\t0\t打印数据文件\n\n");
printf("\t\t1\t添加数据\n\n");
printf("\t\t2\t删除数据\n\n");
printf("\t\t3\t搜索信息\n\n");
printf("\t\t4\t员工详细数据\n\n");
printf("\t\t5\t修改数据\n\n");
printf("\t\t6\t排列数据\n\n");
printf("\t\t7\t数据统计\n\n");
printf("\t\t8\t退出\n\n");
printf("\t请选择你想要的操作 [ ]\b\b");
scanf("%d",&m);
return m;
}

void menu() //菜单
{
int m, i, k=0;
m=head(); //调用菜单头
for (i=0; ; )
{
switch(m)
{
case 0:build();break; //打印导出数据
case 1:add();break; //增加数据
case 2:del();break; //删除数据
case 3:snum();break; //搜索数据
case 4:browse();break; //浏览员工具体信息
case 5:modify();break; //修改数据
case 6:order();break; //对数据进行排序
case 7:data();break; //数据统计
case 8:exit(0); //退出系统
default:printf("\n 请输入 0 and 8:");scanf("%d",&m);
}
printf("\n1.是 2.否\n是否退出系统(1-2):"); //确定是否退出系统
scanf("%d",&k);
if(k==1)
break;
if(k==2)
{
m=head();
i++;
}
}
}

int main()
{
load1();
load();
menu(); //调用菜单
return 0;
}
相似回答