妳自己改改
<br>
<br>本程序是在VC 6.0編譯環境下編輯通過,只有壹個文件,由於本人的課程設計報告已經交到老師那裏,原版遺失,所以對本程序沒有更加詳細的解釋,請有意者自己認真閱讀,內容如下:
<br>
<br> #include <stdio.h>
<br>#include <malloc.h>
<br>#include <string.h>
<br>#include <stdlib.h>
<br>#define NULL 0
<br>#define LEN sizeof(struct txlproject)
<br>int n;
<br>struct txlproject
<br>{
<br>char name[30];
<br>char work[30];
<br>char handset[30];
<br>char email[30];
<br>struct txlproject *next;
<br>};
<br>struct txlproject *shifang(struct txlproject *head); // 釋放內存函數聲明
<br>/////////////// 創建函數 /////////////////////////
<br>struct txlproject *creat(void)
<br>{
<br>struct txlproject *head,*p1,*p2;
<br>char name[20];
<br>n=0;
<br>p1=(struct txlproject *)malloc(LEN);
<br>p2=p1;
<br>printf("請輸入通訊錄的內容!\n姓名輸入為0時表示創建完畢!\n");
<br>printf("請輸入姓名:"); gets(name);
<br>if(strcmp(name,"0")!=0)
<br>{
<br> strcpy(p1->name,name);
<br> printf("請輸入職業:"); gets(p1->work);
<br> printf("請輸入手機:"); gets(p1->handset);
<br> printf("請輸入電子郵件:"); gets(p1->email);
<br> head=NULL;
<br> while(1)
<br> {
<br> n=n+1;
<br> if(n==1)
<br> head=p1;
<br> else
<br> p2->next=p1;
<br> p2=p1;
<br> printf("請輸入姓名:"); gets(name);
<br> if(strcmp(name,"0")==0)
<br> {
<br> break;
<br> }
<br> else
<br> {
<br> p1=(struct txlproject *)malloc(LEN);
<br> strcpy(p1->name,name);
<br> printf("請輸入職業:"); gets(p1->work);
<br> printf("請輸入手機:"); gets(p1->handset);
<br> printf("請輸入電子郵件:"); gets(p1->email);
<br> }
<br> }
<br> p2->next=NULL;
<br> return(head);
<br>}
<br>else
<br>{
<br> return 0;
<br>}
<br>}
<br>///////////////// 輸出函數 ///////////////////
<br>void print(struct txlproject *head)
<br>{
<br>struct txlproject *p;
<br>if(head!=NULL)
<br>{
<br> p=head;
<br> printf("本通訊錄現在***有%d人:\n",n);
<br> printf("---姓名----職業----手機----Email--\n");
<br> printf("==================================\n");
<br> do
<br> {
<br> printf("== %s",p->name); printf(" ");
<br> printf("%s",p->work); printf(" ");
<br> printf("%s",p->handset); printf(" ");
<br> printf("%s",p->email); printf(" \n");
<br> p=p->next;
<br> }while(p!=NULL);
<br> printf("==================================\n");
<br>}
<br>else
<br> printf("通訊錄為空,無法輸出!\n");
<br>}
<br>//////////////// 刪除函數 /////////////////////
<br>struct txlproject *delet(struct txlproject *head)
<br>{
<br>struct txlproject *p1,*p2;
<br>char name[30];
<br>if(head==NULL)
<br>{
<br> printf("通訊錄為空,無法刪除!\n");
<br> return(head);
<br>}
<br> printf("請輸入要刪除的名字:");
<br>gets(name);
<br>p1=head;
<br>while((strcmp(p1->name,name))!=0&&p1->next!=NULL)
<br>{
<br> p2=p1;
<br> p1=p1->next;
<br>}
<br>if(strcmp(p1->name,name)==0)
<br>{
<br> if(p1==head)
<br> {
<br> head=p1->next;
<br> }
<br> else
<br> {
<br> p2->next=p1->next;
<br> }
<br> printf("已成功刪除:%s\n",name);
<br> free(p1);
<br> n=n-1;
<br>}
<br>else
<br>{
<br> printf("%s不存在本通訊錄中!\n",name);
<br>}
<br>return(head);
<br>}
<br>//////////////////// 增加函數 /////////////////////////
<br>struct txlproject *insert(struct txlproject *head)
<br>{
<br>struct txlproject *p0,*p1,*p2;
<br>char name[20];
<br>p1=head;
<br>printf("請輸入增加的內容:\n");
<br>printf("請輸入姓名:"); gets(name);
<br>if(strcmp(name,"0")==0)
<br>{
<br> printf("姓名不能為0,增加失敗!\n");
<br> return(head);
<br>}
<br>else
<br>{
<br> p0=(struct txlproject *)malloc(LEN);
<br> strcpy(p0->name,name);
<br> printf("請輸入職業:"); gets(p0->work);
<br> printf("請輸入手機:"); gets(p0->handset);
<br> printf("請輸入電子郵件:"); gets(p0->email);
<br> n=n+1;
<br> if(head==NULL)
<br> {
<br> head=p0;
<br> p0->next=NULL;
<br> return(head);
<br> }
<br> else
<br> {
<br> while(strcmp(p0->name,p1->name)>0&&(p1->next!=NULL))
<br> {
<br> p2=p1;
<br> p1=p1->next;
<br> }
<br> if(strcmp(p0->name,p1->name)<0||strcmp(p0->name,p1->name)==0)
<br> {
<br> if(head==p1)
<br> {
<br> head=p0;
<br> }
<br> else
<br> {
<br> p2->next=p0;
<br> }
<br> p0->next=p1;
<br> }
<br> else
<br> {
<br> p1->next=p0;
<br> p0->next=NULL;
<br> }
<br> return(head);
<br> }
<br>}
<br>}
<br>//////////////// 顯示函數 /////////////////////
<br>struct txlproject *xianshi(struct txlproject *head)
<br>{
<br>struct txlproject *p1,*p2;
<br>char name[30];
<br>int m;
<br>if(head==NULL)
<br>{
<br> printf("通訊錄為空,無法顯示!\n");
<br> return(head);
<br>}
<br>p1=head;
<br>m=0;
<br>printf("請輸入需要顯示人的姓名:");
<br>gets(name);
<br>while(p1!=NULL)
<br>{
<br> while((strcmp(p1->name,name))!=0&&p1->next!=NULL)
<br> {
<br> p2=p1;
<br> p1=p1->next;
<br> }
<br> if(strcmp(p1->name,name)==0)
<br> {
<br> m++;
<br> printf("%s的通訊內容如下:\n",name);
<br> printf("---姓名----職業----手機----Email--\n");
<br> printf("==================================\n");
<br> printf("== %s",p1->name);printf(" ");
<br> printf("%s",p1->work);printf(" ");
<br> printf("%s",p1->handset);printf(" ");
<br> printf("%s",p1->email);printf(" \n");
<br> printf("==================================\n");
<br> }
<br> p1=p1->next;
<br>}
<br> if(m==0)
<br>{
<br> printf("此人未在本通訊錄中!\n");
<br>}
<br>return(head);
<br>}
<br>/////////////// 修改函數 ////////////////////
<br>struct txlproject *xiugai(struct txlproject *head)
<br>{
<br>struct txlproject *p1,*p2;
<br>char num[10];
<br>char name[30];
<br>char name1[30];
<br>char work[30];
<br>char handset[30];
<br>char email[30];
<br>if(head==NULL)
<br>{
<br> printf("通訊錄為空,無法修改!\n");
<br> return(head);
<br>}
<br>printf("請輸入需要修改的姓名:");
<br>gets(name);
<br>p1=head;
<br>while((strcmp(p1->name,name))!=0&&p1->next!=NULL)
<br>{
<br> p2=p1;
<br> p1=p1->next;
<br>}
<br>if(strcmp(p1->name,name)==0)
<br>{
<br> printf("請選擇修改的內容:\n");
<br> printf("**********************\n");
<br> printf("** 1 姓名 **\n");
<br> printf("** 2 職業 **\n");
<br> printf("** 3 手機 **\n");
<br> printf("** 4 Email **\n");
<br> printf("** 5 全部修改 **\n");
<br> printf("**********************\n");
<br> printf("請輸入您的選擇:");
<br> gets(num);
<br> switch(*num)
<br> {
<br> case '1':
<br> printf("請重新輸入姓名:");
<br> gets(name1);
<br> strcpy(p1->name,name1);
<br> break;
<br> case '2':
<br> printf("請重新輸入職業:");
<br> gets(work);
<br> strcpy(p1->work,work);
<br> break;
<br> case '3':
<br> printf("請重新輸入手機:");
<br> gets(handset);
<br> strcpy(p1->handset,handset);
<br> break;
<br> case '4':
<br> printf("請重新輸入Email:");
<br> gets(email);
<br> strcpy(p1->email,email);
<br> break;
<br> case '5':
<br> printf("請重新輸入姓名:"); gets(name1); strcpy(p1->name,name1);
<br> printf("請重新輸入職業:"); gets(work); strcpy(p1->work,work);
<br> printf("請重新輸入手機:"); gets(handset); strcpy(p1->handset,handset);
<br> printf("請重新輸入Email:"); gets(email); strcpy(p1->email,email);
<br> break;
<br> default:
<br> printf("操作錯誤,此項不存在!\n");
<br> break;
<br> }
<br>}
<br>else
<br>{
<br> printf("此人未在本通訊錄中!\n");
<br>}
<br>return(head);
<br>}
<br>/////////////// 排序函數 /////////////////////
<br>struct txlproject *paixu(struct txlproject *head)
<br>{
<br>struct txlproject *p1,*p2;
<br>int i,j;
<br>struct txlproject1
<br>{
<br> char name[30];
<br> char work[30];
<br> char handset[30];
<br> char email[30];
<br>};
<br>struct txlproject1 px[200];
<br>struct txlproject1 temp;
<br>if(head==NULL)
<br>{
<br> printf("通訊錄為空,無法排序!\n");
<br> return(head);
<br>}
<br>p1=head;
<br>for(i=0;i<n,p1!=NULL;i++)
<br>{
<br> strcpy(px[i].name,p1->name);
<br> strcpy(px[i].work,p1->work);
<br> strcpy(px[i].handset,p1->handset);
<br> strcpy(px[i].email,p1->email);
<br> p2=p1;
<br> p1=p1->next;
<br>}
<br> head=shifang(head);
<br>for(j=0;j<n-1;j++)
<br>{
<br> for(i=j+1;i<n;i++)
<br> {
<br> if(strcmp(px[i].name,px[j].name)<0)
<br> {
<br> temp=px[i];
<br> px[i]=px[j];
<br> px[j]=temp;
<br> }
<br> }
<br>}
<br>p1=(struct txlproject *)malloc(LEN);
<br>p2=p1;
<br>strcpy(p1->name,px[0].name);
<br>strcpy(p1->work,px[0].work);
<br>strcpy(p1->handset,px[0].handset);
<br>strcpy(p1->email,px[0].email);
<br>head=p1;
<br>for(i=1;i<n;i++)
<br>{
<br> p1=(struct txlproject *)malloc(LEN);
<br> strcpy(p1->name,px[i].name);
<br> strcpy(p1->work,px[i].work);
<br> strcpy(p1->handset,px[i].handset);
<br> strcpy(p1->email,px[i].email);
<br> p2->next=p1;
<br> p2=p1;
<br>}
<br>p2->next=NULL;
<br>printf("按姓名排序後為:\n");
<br>print(head);
<br>return(head);
<br>}
<br>///////////// 分類查找函數 /////////////////////
<br>struct txlproject *chazhao(struct txlproject *head)
<br>{
<br> struct txlproject *p1,*p2;
<br>char num[10];
<br>int m;
<br>char name[30];
<br>char work[30];
<br>char handset[30];
<br>char email[30];
<br>if(head==NULL)
<br>{
<br> printf("通訊錄為空,無法分類查找!\n");
<br> return(head);
<br>}
<br>p1=head;
<br>printf("請選擇您需要分類查找的類別:\n");
<br>printf("********************\n");
<br>printf("** 1 姓名 **\n");
<br>printf("** 2 職業 **\n");
<br>printf("** 3 手機 **\n");
<br>printf("** 4 Email **\n");
<br>printf("********************\n");
<br>printf("請輸入您的選擇:");
<br>m=0;
<br>gets(num);
<br> switch(*num)
<br>{
<br>case '1':
<br> printf("請輸入需要查找的姓名:");
<br> gets(name);
<br> while(p1!=NULL)
<br> {
<br> while(strcmp(p1->name,name)!=0&&p1->next!=NULL)
<br> {
<br> p2=p1;
<br> p1=p1->next;
<br> }
<br> if(strcmp(p1->name,name)==0)
<br> {
<br> m++;
<br> printf("妳查找的內容是:\n");
<br> printf("+++++++++++++++++++++++++++++++++++\n");
<br> printf("++ %s %s %s %s\n",p1->name,p1->work,p1->handset,p1->email);
<br> printf("+++++++++++++++++++++++++++++++++++\n");
<br> }
<br> p1=p1->next;
<br> }
<br> if(m==0)
<br> {
<br> printf("此人未在本通訊錄中!\n");
<br> }
<br> break;
<br>case '2':
<br> printf("請輸入需要查找的職業:");
<br> gets(work);
<br> while(p1!=NULL)
<br> {
<br> while((strcmp(p1->work,work))!=0&&p1->next!=NULL)
<br> {
<br> p2=p1;
<br> p1=p1->next;
<br> }
<br> if(strcmp(p1->work,work)==0)
<br> {
<br> m++;
<br> printf("妳查找的內容是:\n");
<br> printf("+++++++++++++++++++++++++++++++++++\n");
<br> printf("++ %s %s %s %s\n",p1->name,p1->work,p1->handset,p1->email);
<br> printf("+++++++++++++++++++++++++++++++++++\n");
<br> }
<br> p1=p1->next;
<br> }
<br> if(m==0)
<br> {
<br> printf("此職業未在本通訊錄中!\n");
<br> }
<br> break;
<br>case '3':
<br> printf("請輸入需要查找的手機號:");
<br> gets(handset);
<br> while(p1!=NULL)
<br> {
<br> while((strcmp(p1->handset,handset))!=0&&p1->next!=NULL)
<br> {
<br> p2=p1;
<br> p1=p1->next;
<br> }
<br> if(strcmp(p1->handset,handset)==0)
<br> {
<br> m++;
<br> printf("妳查找的內容是:\n");
<br> printf("+++++++++++++++++++++++++++++++++++\n");
<br> printf("++ %s %s %s %s\n",p1->name,p1->work,p1->handset,p1->email);
<br> printf("+++++++++++++++++++++++++++++++++++\n");
<br> }
<br> p1=p1->next;
<br> }
<br> if(m==0)
<br> {
<br> printf("此手機號未在本通訊錄中!\n");
<br> }
<br> break;
<br>case '4':
<br> printf("請輸入需要查找的Email:");
<br> gets(email);
<br> while(p1!=NULL)
<br> {
<br> while((strcmp(p1->email,email))!=0&&p1->next!=NULL)
<br> {
<br> p2=p1;
<br> p1=p1->next;
<br> }
<br> if(strcmp(p1->email,email)==0)
<br> {
<br> m++;
<br> printf("妳查找的內容是:\n");
<br> printf("+++++++++++++++++++++++++++++++++++\n");
<br> printf("++ %s %s %s %s\n",p1->name,p1->work,p1->handset,p1->email);
<br> printf("+++++++++++++++++++++++++++++++++++\n");
<br> }
<br> p1=p1->next;
<br> }
<br> if(m==0)
<br> {
<br> printf("此Email未在本通訊錄中!\n");
<br> }
<br> break;
<br>default:
<br> printf("操作錯誤,此項不存在!\n");
<br> break;
<br>}
<br>return(head);
<br>}
<br>///////////// 釋放內存函數 /////////////////
<br>struct txlproject *shifang(struct txlproject *head)
<br>{
<br>struct txlproject *p1;
<br>while(head!=NULL)
<br>{
<br> p1=head;
<br> head=head->next;
<br> free(p1);
<br>}
<br>return(head);
<br>}
<br>///////////// 文件寫入函數 ////////////////////
<br>void save(struct txlproject *head)
<br>{
<br>FILE *fp;
<br>struct txlproject *p1;
<br>char tong[30];
<br>if(head==NULL)
<br>{
<br> printf("通訊錄為空,無法存儲!\n");
<br> return;
<br>}
<br>printf("請輸入保存後的文件名:");
<br>gets(tong);
<br>fp=fopen("(tong).txt","w");
<br>if(fp==NULL)
<br>{
<br> printf("cannot open file\n");
<br> return;
<br>}
<br>p1=head;
<br>fprintf(fp,"姓名 職業 手機 Email\n");
<br>for(;p1!=NULL;)
<br>{
<br> fprintf(fp,"%s %s %s %s\n",p1->name,p1->work,p1->handset,p1->email);
<br> p1=p1->next;
<br>}
<br>printf("保存完畢!\n");
<br>fclose(fp);
<br>}
<br>//////////////// 文件讀出函數 ////////////////////
<br>struct txlproject *load(struct txlproject *head)
<br>{
<br>FILE *fp;
<br>char tong[30];
<br>struct txlproject *p1,*p2;
<br>printf("請輸入要輸出的文件名:");
<br>gets(tong);
<br>fp=fopen("(tong).txt","r");
<br>if(fp==NULL)
<br>{
<br> printf("此通訊錄名不存在,無法輸出!\n");
<br> return(head);
<br>}
<br>else
<br>{
<br> head=shifang(head);
<br>}
<br>p1=(struct txlproject *)malloc(LEN);
<br>fscanf(fp,"%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email);
<br>if(feof(fp)!=0)
<br>{
<br> printf("文件為空,無法打開!\n");
<br> return(head);
<br>}
<br>else
<br>{
<br> rewind(fp);
<br> p2=p1;
<br> head=p1;
<br> n=0;
<br> while(feof(fp)==0)
<br> {
<br> fscanf(fp,"%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email);
<br> if(feof(fp)!=0)
<br> break;
<br> p2->next=p1;
<br> p2=p1;
<br> p1=(struct txlproject *)malloc(LEN);
<br> n=n+1;
<br> }
<br> p2->next=NULL;
<br> p1=head;
<br> head=head->next;
<br> n=n-1;
<br> free(p1);
<br> print(head);
<br> printf("打開完畢!\n");
<br> return(head);
<br>}
<br>fclose(fp);
<br>}
<br>///////////// 綜合操作函數 //////////////////////
<br>struct txlproject *zonghe(struct txlproject *head)
<br>{
<br>char num[10];
<br>while(1)
<br>{
<br> printf("*********************\n");
<br> printf("*** 1 分類查找 ****\n");
<br> printf("*** 2 單個顯示 ****\n");
<br> printf("*** 3 增加 ****\n");
<br> printf("*** 4 刪除 ****\n");
<br> printf("*** 5 修改 ****\n");
<br> printf("*** 6 退出 ****\n");
<br> printf("*********************\n");
<br> printf("請輸入您選擇的操作:");
<br> gets(num);
<br> switch(*num)
<br> {
<br> case '1':
<br> {
<br> head=chazhao(head); //分類查找
<br> print(head);
<br> }
<br> break;
<br> case '2':
<br> {
<br> head=xianshi(head); //顯示
<br> }
<br> break;
<br> case '3':
<br> {
<br> head=insert(head); //增加
<br> print(head);
<br> }
<br> break;
<br> case '4':
<br> {
<br> head=delet(head); //刪除
<br> print(head);
<br> }
<br> break;
<br> case '5':
<br> {
<br> head=xiugai(head); //修改
<br> print(head);
<br> }
<br> break;
<br> case '6':
<br> break;
<br> default:
<br> printf("操作錯誤,此項不存在!\n");
<br> break;
<br> }
<br> if(strcmp(num,"6")==0)
<br> break;
<br>}
<br>return(head);
<br>}
<br>//////////////// 主函數 ///////////////////////
<br>void main()
<br>{
<br>struct txlproject *head;
<br>head=NULL;
<br>char num[10];
<br>printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");
<br>printf("*=* 程序說明 *=*\n");
<br>printf("*=* 請及時保存創建完畢的通訊錄內容! *=*\n");
<br>printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");
<br>while(1)
<br>{
<br> printf("************************\n");
<br> printf("*** 1 創建通訊錄 ****\n");
<br> printf("*** 2 按名字排序 ****\n");
<br> printf("*** 3 綜合操作 ****\n");
<br> printf("*** 4 保存 ****\n");
<br> printf("*** 5 打開 ****\n");
<br> printf("*** 6 退出 ****\n");
<br> printf("************************\n");
<br> printf("請輸入您選擇的操作:");
<br> gets(num);
<br> switch(*num)
<br> {
<br> case '1':
<br> {
<br> if(head==NULL)
<br> {
<br> head=creat(); //創建
<br> print(head);
<br> }
<br> else
<br> {
<br> head=shifang(head);
<br> head=creat(); //重新創建
<br> print(head);
<br> }
<br> }
<br> break;
<br> case '2':
<br> {
<br> head=paixu(head); //排序
<br> }
<br> break;
<br> case '3':
<br> {
<br> head=zonghe(head); //綜合操作
<br> }
<br> break;
<br> case '4':
<br> {
<br> save(head); //文件保存
<br> print(head);
<br> }
<br> break;
<br> case '5':
<br> {
<br> head=load(head); //文件輸出
<br> }
<br> break;
<br> case '6':
<br> head=shifang(head);
<br> break;
<br> default:
<br> printf("操作錯誤,此項不存在!\n");
<br> break;
<br> }
<br> if(strcmp(num,"6")==0)
<br> break;
<br>}
<br>}
<br>
<br>妳自己改改