first commit

master
刘伟兴 6 years ago
commit 06ba61f0fb

336
0009.c

@ -0,0 +1,336 @@
#include<stdio.h>
#define N 50
struct worker
{
char id[50];
char name[20];
char sex[10];
char age[10];
char edu[20];
char salary[10];
char address[20];
char tel[20];
}worker[N];
void save(int n) //保存函数保存n个记录
{ FILE *fp;
int i;
if((fp=fopen("worker.txt","wb+"))==NULL) //以读,写方式为输出打开一个二进制文件
{ printf("\nCannot open file\n");
}
for(i=0;i<n;i++)
if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1)//将输入的数据写入文件中
printf("file write error\n");
fclose(fp);
}
int load() //加载函数
{ FILE *fp;
int i;
if((fp=fopen("worker.txt","rb"))==NULL)
{printf("\nCannot open file\n");
return NULL;
}
for(i=0;!feof(fp);i++)
fread(&worker[i],sizeof(struct worker),1,fp);//从文件中读取出职工的数据
fclose(fp);
return(i-1);
}
void no_input(int i,int n) //工号输入函数i表示第i个职工的信息n表示比较到第n个职工
{ int j,k,w1;
do
{w1=0;
printf("工号:");
scanf("%s",worker[i].id);
for(j=0;worker[i].id[j]!='\0';j++)
if(worker[i].id[j]<'0'||worker[i].id[j]>'9') //判断工号是否为数字
{puts("请重新输入!\n");
w1=1;break;
}
if(w1!=1)
for(k=0;k<n;k++) //比较到第N个职工
if(k!=i&&strcmp(worker[k].id,worker[i].id)==0) //判断职工号是否有雷同
{puts("请重新输入!\n");
w1=1;break;
}
}
while(w1==1);
}
void input(int i) //输入一个记录的函数
{ no_input(i,i); //输入工号后继续输入其他数据
printf("姓名:");scanf("%s",worker[i].name);
printf("性别:");scanf(" %s",&worker[i].sex);
printf("年龄:");scanf("%s",&worker[i].age);
printf("工资:");scanf("%s",worker[i].salary);
printf("学历:");scanf("%s",&worker[i].edu);
printf("住址:");scanf("%s",worker[i].address);
printf("电话:");scanf("%s",worker[i].tel);
}
void printf_one(int i) //显示一个记录的函数
{
printf("%10s %10s %5s %5s %8s %6s %10s %10s\n",
worker[i].id,worker[i].name,worker[i].sex,worker[i].age,
worker[i].salary,worker[i].edu,worker[i].address,worker[i].tel);
}
void printf_back() //一个任务结束后选择是好似浏览还是返回
{ int k,w;
printf("\n\n\tSuccessful^-^.\n\n");
printf("接下来做什么?\n\n\t1).浏览全部\t2).返回: [ ]\b\b");
scanf("%d",&w);
if(w==1)browse();
else menu();
}
modify_data(int i,int n) //修改函数
{ int c,w1;
do
{puts("\nmodify by=>\n\n 1).工号 2).姓名 3).性别 4).年龄 5).工资 6).学历 7).地址 8).电话 9).取消");
printf("请选择?:[ ]\b\b");
scanf("%d",&c);
if(c>9||c<1)
{
puts("\nChoice error!please again!");
getchar();
}
}
while(c>9||c<1);
do
{switch(c) //通过switch结构选择要修改的内容
{case 1:no_input(i,n);break;
case 2:printf("name:");scanf("%s",worker[i].name);break;
case 3:printf("sex:");scanf("%s",worker[i].sex);break;
case 4:printf("age:");scanf("%s",worker[i].age);break;
case 5:printf("salary:");scanf("%s",worker[i].salary);break;
case 6:printf("edu:");scanf("%s",worker[i].edu);break;
case 7:printf("address:");scanf("%s",worker[i].address);break;
case 8:printf("tel:");scanf("%s",worker[i].tel);break;
case 9:menu();break;
}
puts("\nNow:\n");
printf_face();
printf_one(i);
printf("\n确定?\n\n\t1).是 2).否,重新修改 3).不保存退出 [ ]\b\b");
scanf("%d",&w1);
if(w1==1)save(n);
}
while(w1==2);
return(w1);
}
printf_face() //显示数据结构项目
{ printf("\n\t工号 姓名 性别 年龄 工资 学历 地址 电话号码\n"); }
void enter() //输入模块
{ int i,n;
printf("输入多少个职工信息(0-%d):",N-1);
scanf("%d",&n);
printf("\n 请输入职工信息\n\n");
for(i=0;i<n;i++)
input(i); //跳转输入数据的函数
if(i!=0)
save(n); //跳转保存至文件的函数
printf_back();
}
browse() //浏览模块
{ int i,j,n;
n=load();
printf_face();
for(i=0;i<n;i++)
{
if((i!=0)&&(i%10==0))
{printf("\n\n按任意键显示下一页...");
getch();
puts("\n\n");
}
printf_one(i);
}
printf("\t这里有 %d 条记录.\n",n);
printf("\n按任意键返回...");
getch();
menu();
}
modify() //修改模块
{
struct worker s;
FILE *fp;
int i,n,k,w0=1,w1,w2=0;
n=load();
do
{
k=-1;
printf_face();
for(i=0;i<n;i++)
{
if((i!=0)&&(i%10==0)) //目的是分屏显示
{printf("\n\n记住要修改的工号.按任意键显示下一页");
getch();
puts("\n\n");
}
printf_one(i); //调用显示一个记录的函数
}
do
{
printf("\n\n输入要修改的职工工号! 工号:");
scanf("%s",s.id); //输入要修改的ID
for(i=0;i<n;i++) //查找要修改的数据
if(strcmp(s.id,worker[i].id)==0)
{
k=i; //找到要修改的记录
s=worker[i]; //把worker[i]备份,以便恢复
}
if(k==-1)
printf("\n\n未找到 请重输");
}
while(k==-1); //当k=-1表示没有找到
printf_face(); //调用显示数据结构项目的函数
printf_one(k); //调用显示一个记录的函数
w1=modify_data(k,n); //修改记录并返回保存控制值w1w1=1表示用户已确认修改
if(w1==1)
{
printf("\Successful^_^.\n\n修改另一个?\n\n\t1).是 2).否,保存退出\t[ ]\b\b");
scanf("%d",&w0);
w2=1; //用来控制保存使w2=1是标记已有过修改
}
else
{
w0=0;
if(w2==1)
worker[k]=s;
}
if(w0!=1&&w2==1)
save(n);
}while(w0==1);
menu();
}
search() //查询模块
{ int c,w1;
do
{puts("\nsearch by=>\n\n1).工号 2}.学历 3).取消并返回");
printf("Which you needed?:[ ]\b\b");
scanf("%d",&c);
if(c>3||c<1)
{ puts("\nchoice error!please again!");
getchar();
}
}
while(c>3||c<1);
{switch(c)
{case 1:search1();break;
case 2:search2();break;
case 3:menu();break;
}
}
}
search1() //按工号查询模块
{int i,n,k,w1=1,w2,w3,w4;
struct worker s;
n=load();
do
{
do
{k=-1;
printf("\n\n输入要查询的工号! id:");
scanf("%s",s.id);
printf_face();
for(i=0;i<n;i++)
if(strcmp(s.id,worker[i].id)==0)
{k=i;
printf_one(k);break;
}
if(k==-1)
{printf("\n\nNo exit!please");
printf("\n\n继续查找?\n\t1).是 2).否,返回 [ ]\b\b");
scanf("%d",&w1);
if(w1==2) menu();
}
}
while(k==-1&&w1==1);
w4=0;w3=0;
if(k!=-1)
{printf("\n\n接下来干什么?\n\t1).查找另一个 2).修改 3).返回菜单 [ ]\b\b");
scanf("%d",&w2);
switch(w2)
{
case 1:search1();break;
case 2:w3=modify_data(k,n);break;
case 3:{menu();break;}
}
}
}
while(w2==1);
menu();
}
search2() //按学历查询模块
{
int i,n,k,w1=1,w2,w3,w4;
struct worker s;
n=load();
do
{
do
{k=-1;
printf("\n\n请输入你要查询的学历:\n");
scanf("%s",s.edu);
printf_face();
for(i=0;i<n;i++)
if(strcmp(s.edu,worker[i].edu)==0) //运用strcmp函数来比较学历从而找到学历所属职工
{k=i;
printf_one(k);
}
if(k==-1)
{printf("\n\nNo exit!please");
printf("\n\n继续查找?\n\t1).是 2).否,返回 [ ]\b\b");
scanf("%d",&w1);
if(w1==2) menu();
}
}
while(k==-1&&w1==1);
w4=0;w3=0;
if(k!=-1)
{printf("\n\n接下来干什么?\n\t1).查找另一个 2).修改 3).返回菜单 [ ]\b\b");
scanf("%d",&w2);
switch(w2)
{case 1:search2();break;
case 2:w3=modify_data(k,n);break;
case 3:{menu();
break;
}
}
}
}
while(w2==1);
menu();
}
menu()
{
int n,w1;
do
{
puts("\t\t*******************菜单*******************\n\n");
puts("\t\t\t\t1.录入职工信息");
puts("\t\t\t\t2.浏览职工信息");
puts("\t\t\t\t3.查询职工信息");
puts("\t\t\t\t4.修改职工信息");
puts("\t\t\t\t5.退出");
puts("\t\t****************************************\n\n");
printf("请选择(1~5): [ ]\b\b");
scanf("%d",&n);
if(n<1||n>5) //对选择的数字作判断
{w1=1;getchar();}
else w1=0;
} while(w1==1);
switch(n)
{case 1:enter();break; //录入
case 2:browse();break; //浏览
case 3:search();break; //查询
case 4:modify();break; //修改
case 5:exit(0); //退出
}
}
main()
{
menu();
}
Loading…
Cancel
Save