按照姓名查找c语言程序,C语言:麻烦给程序加个输入一个职工号,用折半查找法找出改职工的姓名的功能,谢谢了...

C语言:麻烦给程序加个输入一个职工号,用折半查找法找出改职工的姓名的功能,谢谢了

答案:2  信息版本:手机版

解决时间 2019-10-02 04:09

已解决

2019-10-01 21:48

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

void inputstud (struct employee *stud);

void printstud (struct employee *stud);

void savestud (struct employee *stud);

struct employee

{

char num[15];

char name[15];

char sex[15];

char old[15];

char nation[15];

}

stud[100];

int n=0;

void main()

{

int x;

while (1)

{

system ("cls");

printf ("\n");

printf ("\t\t\t\t 职工信息管理系统\n");

printf ("\n");

printf ("\t\t\t\t 1:职工信息录入\n");

printf ("\t\t\t\t 2:职工信息输出\n");

printf ("\t\t\t\t 3:职工信息保存\n");

printf ("\t\t\t\t 4:退出\n");

printf ("\n");

printf ("\t 请按序号(1~4)选择:");

scanf ("%d",&x);

switch (x)

{

case 1:inputstud (stud);break;

case 2:printstud (stud);break;

case 3:savestud (stud);break;

default :exit (0);

}

}

}

void inputstud (struct employee *stud)

{

char ch;

system ("cls");

while (1)

{

printf ("请输入职工号:");

scanf ("%s",stud[n].num);

printf ("请输入姓名:");

scanf ("%s",stud[n].name);

printf ("请输入性别:");

scanf ("%s",stud[n].sex);

printf ("请输入年龄");

scanf ("%s",stud[n].old);

printf ("请输入民族");

scanf ("%s",stud[n].nation);

printf ("是否继续输入数据(y/n):");

ch=getchar();

ch=getchar();

n++;

if (ch=='n'||ch=='N') break;

}

printf ("\n\t 数据输入完毕!\n");

}

void printstud (struct employee *stud)

{

int i,j;

struct employee b;

system ("cls");

for (j=0;j{

for (i=0;i{

if ( strcmp(stud[i].num,stud[i+1].num) > 0 )

{

b=stud[i];

stud[i]=stud[i+1];

stud[i+1]=b;

}

}

}

printf ("以下是所有职工的信息\n");

for (i=0;i{

printf ("%6s%6s%6s%6s%6s\n",stud[i].num,stud[i].name,stud[i].sex,stud[i].old,stud[i].nation);

}

printf ("请按任意数字键返回主菜单");

getchar();

getchar();

}

void savestud (struct employee *stud)

{

int i;

FILE *fp;

fp=fopen ("d:\\employee.dat","w");

for (i=0;iif (fwrite (&stud[i],sizeof(struct employee),1,fp)!=1)

printf ("不能保存文件!\n");

fclose (fp);

printf ("文件保存完毕!\n");

printf ("请按任意数字键返回主菜单");

scanf ("%d",&i);

}

不用折半也行

最佳答案

2019-10-01 23:26

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

void inputstud (struct employee *stud);

void printstud (struct employee *stud);

void savestud (struct employee *stud);

void SR(struct employee *stud);

struct employee

{

unsigned unm;

char sex[15];

char old[15];

char nation[15];

}

stud[100];

int n=0;

void main()

{

int x;

meun:while (1)

{

system ("cls");

printf ("\n");

printf ("\t\t\t\t 职工信息管理系统\n");

printf ("\n");

printf ("\t\t\t\t 1:职工信息录入\n");

printf ("\t\t\t\t 2:职工信息输出\n");

printf ("\t\t\t\t 3:职工信息保存\n");

printf ("\t\t\t\t 4:退出\n");

printf("\t\t\t\t\t5:查找并替换职工信息");

printf ("\n");

printf ("\t 请按序号(1~4)选择:");

scanf ("%d",&x);

switch (x)

{

case 1:inputstud (stud);break;

case 2:printstud (stud);break;

case 3:savestud (stud);break;

case 5:SR(stid);break;

default :exit (0);

}

}

}

void inputstud (struct employee *stud)

{

char ch1, ch;

system ("cls");

while (1)

{

printf ("请输入职工号:");

scanf ("%u",&stud[n].num);

printf ("请输入姓名:");

scanf ("%s",stud[n].name);

printf ("请输入性别:");

scanf ("%s",stud[n].sex);

printf ("请输入年龄");

scanf ("%s",stud[n].old);

printf ("请输入民族");

scanf ("%s",stud[n].nation);

printf ("是否继续输入数据(y/n):");

ch=getchar();

ch1=getchar();

n++;

if (ch=='n'||ch=='N') break;

}

printf ("\n\t 数据输入完毕!\n");

}

void printstud (struct employee *stud)

{

int i,j;

struct employee b;

system ("cls");

for (i=0;istud[i+1].unm)

{

b=stud[i];

stud[i]=stud[i+1];

stud[i+1]=b;

}

}

printf ("以下是所有职工的信息\n");

for (i=0;istud[i+1].unm)

{

b=stud[i];

stud[i]=stud[i+1];

stud[i+1]=b;

}

}

}}

全部回答

1楼

2019-10-01 23:40

//你好,专业问问团队为您解答!欢迎追问,满意请采纳!

#include

#include

#define n 10

void main()

{

void input(int[],char name[][8]);

void sort(int[],char name[][8]);

void search(int,int[],char name[][8]);

int num[n],number,flag=1,c;

char name[n][8];

input(num,name);

sort(num,name);

while(flag==1)

{               printf("\ninput number to look for:");               scanf("%d",&number);

search(number,num,name);               printf("continue or not(y/n)?");

getchar();

c=getchar();               if(c=='n'||c=='n')

flag=0;

}

} void input(int num[],char name[n][8])

{

int i;

for(i=0;i

{               printf("\ninput no.:");               scanf("%d",&num[i]);               printf("input name:");

getchar();

gets(name[i]);

}

} void sort(int num[],char name[n][8])

{

int i,j,min,temp1;

char temp2[8];

for(i=0;i

{

min=i;

for(j=i;j

if(num[min]>num[j])

min=j;

temp1=num[i];

strcpy(temp2,name[i]);

num[i]=num[min];

strcpy(name[i],name[min]);

num[min]=temp1;

strcpy(name[min],temp2);

}        printf("\n result:\n");

for(i=0;i

} void search(int n,int num[],char name[n][8])

{

int top,bott,mid,loca,sign;

top=0;

bott=n-1;

loca=0;

sign=1;

if((nnum[n-1]))

loca=-1;

while((sign==1)&&(top<=bott))

{

mid=(bott+top)/2;

if(n==num[mid])

{

loca=mid;                      printf("no.%d,his name is %s.\n",n,name[loca]);

sign=-1;

}

else if(n

bott=mid-1;

else

top=mid+1;

}

if(sign==1||loca==-1)               printf("can not find %d.\n",n);

}

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值