要做程序設計,好煩哦……
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define N sizeof(struct works)
struct works
{
int W_number;
char name[20];
char sex[5];
char W_date_birth[11];
char xueli[20];
char position[15];
char gongzi[20];
char address[20];
char telephone[11];
works()
{
next=NULL;
}
struct works *next;
};
struct works *creat() // 建立鏈表
{
struct works *head,*p1,*p2;
int n=1;
char a;
printf("輸入職工信息:\n");
do
{
p1=(struct works *)malloc(N);/*爲p1開闢一個新單元*/
printf("\n職工號:");
scanf("%d",&p1->W_number);
printf("姓名:");
scanf("%s",p1->name);
printf("性別:");
scanf("%s",p1->sex);
printf("出生年月:");
scanf("%s",p1->W_date_birth);
printf("學歷:");
scanf("%s",p1->xueli);
printf("職務:");
scanf("%s",p1->position);
printf("工資:");
scanf("%s",p1->gongzi);
printf("住址:");
scanf("%s",p1->address);
printf("電話號碼:");
scanf("%s",p1->telephone);
p1->next=NULL;
if(n==1)/*n=1時接入表頭*/
head=p1;
else
p2->next=p1;/*n!=1時接入表尾*/
p2=p1;
n++;
printf("\n是否輸入下一個員工信息?(y/n)\n");
getchar();
a=getchar();
}
while(a=='y'); /*執行是否輸入下一個數據*/
return head;
}
struct works *cut(struct works *head) // 刪除
{
struct works *p1,*p2;
int W_number;
printf("輸入要刪除職工的職工號:\n");
scanf("%d",&W_number);
p1=head;
while (p1->W_number!=W_number&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(p1->W_number==W_number)/*找到了*/
{
if(head==p1)
{
head=head->next;
}
else
{
p2->next=p1->next;
}
free(p1);
printf("\n刪除%d職工成功!\n",W_number);
}
else/*沒找到*/
{
printf("\n未找到職工號爲%d職工!\n",W_number);
}
return head;
}
struct works *insert(struct works *head) // 插入
{
struct works *p1,*p3;
works *p2=new works();
int W_number;
printf("\n插入某個職工之後:");
scanf("%d", &W_number);
printf("\n輸入將要插入職工的數據:\n");
p3=(struct works *)malloc(N);
p1=head;
while(p1->W_number!=W_number&&p1->next!=NULL)
{
p1=p1->next;
}
if(p1->W_number!=W_number)
{
printf("\n未找到%d職工!\n",W_number);
}
else
{
printf("\n職工號:");
scanf("%d",&p3->W_number);
printf("姓名:");
scanf("%s",p3->name);
printf("性別:");
scanf("%s",p3->sex);
printf("出生年月:");
scanf("%s",p3->W_date_birth);
printf("學歷:");
scanf("%s",p3->xueli);
printf("職務:");
scanf("%s",p3->position);
printf("工資:");
scanf("%s",p3->gongzi);
printf("住址:");
scanf("%s",p3->address);
printf("電話號碼:");
scanf("%s",p3->telephone);
p2=p1->next;
p1->next=p3;
p3->next=p2;
}
return head;
}
struct works *seek1(struct works *head) // 查找
{
struct works *p;
int W_number;
p=head;
printf("\n輸入查找職工的職工號:\n");
scanf("%d", &W_number);
while(p->W_number!=W_number&&p->next!=NULL)
{
p=p->next;
}
if(p->W_number==W_number)/*找到了*/
{
printf("\n職工號\t姓名\t性別\t出生年月\t學歷\t職務\t工資\t住址\t電話號碼\n");
printf("%d\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->W_number,p->name,p->sex,p->W_date_birth,p->xueli,p->position,p->gongzi,p->address,p->telephone);
}
else/*沒有找到*/
{
printf("\n未找到該職工!\n");
}
return p;
}
struct works *seek2(struct works *head)
{
struct works *p;
char w_name[20];
p=head;
printf("請輸入要查找的職工姓名:\n");
scanf("%s",w_name);
while(strcmp(p->name,w_name)!=0&&p->next!=NULL)
{
p=p->next;
}
if(strcmp(p->name,w_name)!=0)
{
printf("\n未找到該職工!\n");
}
else
{
printf("\n職工號\t姓名\t性別\t出生年月\t學歷\t職務\t工資\t住址\t電話號碼\n");
printf("%d\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->W_number,p->name,p->sex,p->W_date_birth,p->xueli,p->position,p->gongzi,p->address,p->telephone);
}
return p;
}
struct works *xiugai(struct works *head) // 修改
{
struct works *p;
int W_number;
p=head;
printf("\n輸入要修改職工的職工號:");
scanf("%d",&W_number);
while(p->W_number!=W_number&&p->next!=NULL)
{
p=p->next;/*後一一個結點*/
}
if(p->W_number==W_number)/*找到了*/
{
printf("\n職工號:");
scanf("%d",&p->W_number);
printf("姓名:");
scanf("%s",p->name);
printf("性別:");
scanf("%s",p->sex);
printf("出生年月:");
scanf("%s",p->W_date_birth);
printf("學歷:");
scanf("%s",p->xueli);
printf("職務:");
scanf("%s",p->position);
printf("工資:");
scanf("%s",p->gongzi);
printf("住址:");
scanf("%s",p->address);
printf("電話號碼:");
scanf("%s",p->telephone);
printf("\n修改成功!\n");
}
else/*未找到*/
{
printf("\n未找到該職工 !\n");
}
return head;
}
struct works *sort(struct works *head)
{
struct works *p1,*p2,*p3;
char a[20];
int w_number;
p3=(struct works *)malloc(N);
for(p1=head; p1!=NULL; p1=p1->next)
{
for(p2=p1->next; p2!=NULL; p2=p2->next)
{
if(p1->W_number>p2->W_number)
{
p3->W_number=p2->W_number;
p2->W_number=p1->W_number;
p1->W_number=p3->W_number;
strcpy(a,p1->name);
strcpy(p1->name,p2->name);
strcpy(p2->name,a);
strcpy(a,p1->sex);
strcpy(p1->sex,p2->sex);
strcpy(p2->sex,a);
strcpy(a,p1->W_date_birth);
strcpy(p1->W_date_birth,p2->W_date_birth);
strcpy(p2->W_date_birth,a);
strcpy(a,p1->xueli);
strcpy(p1->xueli,p2->xueli);
strcpy(p2->xueli,a);
strcpy(a,p1->position);
strcpy(p1->position,p2->position);
strcpy(p2->position,a);
strcpy(a,p1->gongzi);
strcpy(p1->gongzi,p2->gongzi);
strcpy(p2->gongzi,a);
strcpy(a,p1->address);
strcpy(p1->address,p2->address);
strcpy(p2->address,a);
strcpy(a,p1->telephone);
strcpy(p1->telephone,p2->telephone);
strcpy(p2->telephone,a);
}
}
}
return head;
}
void save(struct works *head) // 保存
{
FILE *fp;
struct works *p;
p=head;
if((fp=fopen("D:\\file.txt","w"))==NULL)
{
printf("打開失敗\n");
exit(0);
}
while(p!=NULL)
{
fprintf(fp,"%d %s %s %s %s %s %s %s %s\n",p->W_number,p->name,p->sex,p->W_date_birth,p->xueli,p->position,p->gongzi,p->address,p->telephone);
p=p->next;
}
printf("保存成功\n");
fclose(fp);
printf("\n");
}
void print(struct works *head)
{
struct works *p;
p=head;
printf("\n職工號\t姓名\t性別\t出生年月\t學歷\t職務\t工資\t住址\t電話號碼\n");
while(p!=NULL)
{
printf("%d\t%s\t%s\t%s\t\t%s\t%s\t%s\t%s\t%s\n",p->W_number,p->name,p->sex,p->W_date_birth,p->xueli,p->position,p->gongzi,p->address,p->telephone);
p=p->next;
}
}
void menu1()
{
printf("*********歡迎進入查詢系統***********\n");
printf("\t\t》》》1.按職工號查找\n");
printf("\t\t》》》2.按姓名查找\n");
printf("\t\t》》》3.退出\n");
printf("************謝謝使用*******************\n");
}
void seek(struct works *head)
{
int i;
char ch;
printf("請選擇查找方式\n");
scanf("%d",&i);
do
{
switch(i)
{
case 1:
seek1(head);
break;
case 2:
seek2(head);
break;
case 3:
printf("成功退出\n");
break;
default:
printf("請輸入正確指令!\n");
break;
}
printf("是否繼續查詢是(Y/y)否(N/n)\n");
getchar();
ch=getchar();
}
while(ch=='Y'||ch=='y');
}
void menu() // 菜單
{
printf("********************************************************************************\n");
printf("\t\t\t 歡迎使用職工管理系統\n");
printf("\t**************************************************************\n");
printf("\t\t\t 1.錄入職工信息。\n");
printf("\t\t\t 2.查詢職工信息。\n");
printf("\t\t\t 3.刪除職工信息。\n");
printf("\t\t\t 4.插入職工信息。\n");
printf("\t\t\t 5.修改職工信息。\n");
printf("\t\t\t 6.打印職工信息。\n");
printf("\t\t\t 7.按職工號排序。\n");
printf("\t\t\t 8.保存職工信息。\n");
printf("\t\t\t 9.退出職工信息系統。\n");
printf("********************************************************************************\n");
printf("\t\t\t 選擇對應編號:");
}
int main()
{
struct works *head;
char ch;
int a;
while(1)
{
menu();
scanf("%d",&a);
switch(a)
{
case 1:
head=creat();
break;
case 2:
menu1();
seek(head);
break;
case 3:
head=cut(head);
break;
case 4:
head=insert(head);
break;
case 5:
head=xiugai(head);
break;
case 6:
print(head);
break;
case 7:
head=sort(head);
print(head);
break;
case 8:
save(head);
break;
case 9:
exit(0);
break;
printf("請輸入正確指令!\n");
break;
}
}
printf("************************************謝謝使用************************************\n");
return 0;
}