#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
#define LEN sizeof(struct worker)
struct worker{
long int num;
char name[20];
char sex[20];
char race[20];
char year[20];
char pos[20];
struct worker*next;
};
struct worker*head;
struct worker*p1,*p2;
int n=0;
struct worker*creat(){
n=0;
p1=p2=(struct worker*)malloc(LEN);
scanf("%d%s%s%s%s%s",&p1->num,&p1->name,&p1->sex,&p1->race,&p1->year,&p1->pos);
head=NULL;
while(p1->num!=0){
n=n+1;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct worker*)malloc(LEN);
scanf("%d%s%s%s%s%s",&p1->num,&p1->name,&p1->sex,&p1->race,&p1->year,&p1->pos);
}
p2->next=NULL;
return(head);
}
void input(struct worker*p){
scanf("%d %s %s %s %s %s",&p->num,&p->name,&p->sex,&p->race,&p->year,&p->pos);
}
void output(struct worker*p){
printf("%05d %-s %-s %-s %-s %-s\n",p->num,p->name,p->sex,p->race,p->year,p->pos);
}
void insert(){
input(p1);
while(p1->num!=0){
n++;
printf("n=%d\n",n);
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct worker*)malloc(LEN);
input(p1);
}
p2->next=NULL;
}
bool dele(struct worker *p){
if(p==NULL) return false;
struct worker *q=p->next;
p->num=p->next->num;
p->next=q->next;
free(q);
return true;
}
struct worker*del(struct worker* head, int m) {
struct worker* p = head;
struct worker* ex;
int i;
for ( i = 1; i < m-1 ;i++){
p = p->next;
}
ex = p->next;
p->next = ex->next;
free(ex);
return head;
}
void update(int x){
struct worker*p;
for(p=head;p!=NULL;p=p->next){
if(p->num==x){
input(p);
break;
}
}
}
void search(){
char namep[10];
scanf("%s",namep);
int len=strlen(namep);
int flag,sflag=0;
struct worker*p;
for(p=head;p!=NULL;p=p->next){
flag=1;
int i;
for(i=0;namep;i++){
if(p->name!=namep)break;
if(p->name==namep&&len==i+1)sflag=1;
}
if(flag&&sflag){
printf("%s的信息:\n",namep);
output(p);
printf("\n");
return;
}
}
printf("No find\n\n");
}
void travel(){
struct worker*p;
for(p=head;p!=NULL;p=p->next)
output(p);
}
void enter(struct worker*p){
FILE*fp;
if( (fp=fopen("档案.txt","w")) == NULL ){
puts("Fail to open file!");
exit(0);
}
for(p=head;p!=NULL;p=p->next){
fprintf(fp,"%05s%8s%4s%10s%15s%10s",p->num,p->name,p->sex,p->race,p->year,p->pos);
fprintf(fp,"\n");
}
printf("\n");
printf("over!!!\n");
return;
}
void a(){
printf("请输入数据:\n");
struct worker*head;
head=creat();
travel();
}
void b(){
struct worker*head;
travel();
}
void c(){
printf("请输入数据:\n");
insert();
}
void d(){
printf("请输入要删除数据编号:");
int x;
scanf("%d",&x);
if(x==1){
dele(head);
}
else del(head,x);
printf("删除完毕!\n\n");
}
void e(){
int x;
printf("请输入修改数据编号:");
scanf("%d",&x);
printf("请重新输入数据:\n");
update(x);
}
void f(){
travel();
}
void g(){
printf("请输入姓名:");
search();
}
void h(){
struct worker*p=head;
enter(p);
}
int main(){
void a();
void b();
void c();
void d();
void e();
void f();
void g();
void h();
int m=0;
while (m!= 9){
printf("输入功能代码(1为录入,2为显示,3为插入,4为删除,5为更改,6为遍历,7为查询,8为文件保存:\n");
scanf("%d", &m);
switch (m)
{
case 1:a(); break;
case 2:b(); break;
case 3:c(); break;
case 4:d(); break;
case 5:e(); break;
case 6:f(); break;
case 7:g(); break;
case 8:h(); break;
}
}
getchar();
return 0;
}
00001 张三 男 汉族 2000.9.28 处长
00002 马晓晴 女 回族 2000.5.3 科长
00003 买买提 男 维吾尔族 2007.7.34 职员
00004 海萨尔 男 哈萨克族 2004.6.23 职员
00005 白哈达 男 蒙古族 2009.7.6 科长
00006 李娟 女 汉族 2005.5.4 职员 |
评论
直达楼层