⑴ c語言程序 通訊錄
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define N 3
typedef struct student
{
char num[11];
char name[15];
char sex;
char birth[15];
char phone[15];
char email[15];
char addr[30];
struct student *next;
}STUDENT;
/*以下是函數原型*/
STUDENT *init(); //初始化
void create(STUDENT **headp); //創建鏈表
STUDENT *delete(STUDENT *head); //刪除
STUDENT *update(STUDENT *head); //修改
void print(STUDENT *head); //列印記
void search(STUDENT *head); //查找
void save(STUDENT *head); //保存
STUDENT *load(); //讀入
STUDENT *insert(STUDENT *head); //插入記錄
void append(); //追加記錄
int main()
{
int i;
char choose;
STUDENT *head;
head=init();
printf("1、創建通訊錄\n");
printf("2、插入通訊錄\n");
printf("3、刪除通訊錄\n");
printf("4、修改通訊錄\n");
printf("5、查詢通訊錄\n");
printf("6、追加通訊錄\n");
printf("7、列印通訊錄\n");
printf("8、保存通訊錄到文件\n");
printf("9、從文件中讀取通訊錄\n");
printf("0、退出\n");
do{
choose=getchar();
switch(choose)
{
case '1':
create(&head);
break;
case '2':
head=insert(head);
break;
case '3':
head=delete(head);
break;
case '4':
head=update(head);
break;
case '5':
search(head);
break;
case '6':
append();
break;
case '7':
print(head);
break;
case '8':
save(head);
break;
case '9':
head=load(head);
break;
case '0':
exit(0);
}
}while(choose!='0');
}
STUDENT *init()
{
return NULL;
}
void create(STUDENT **headp)
{
int i,s;
char c;
STUDENT *head=NULL,*tail;
head=(STUDENT *)malloc(sizeof(STUDENT));
tail=head;
for(;;)
{
tail->next=(STUDENT *)malloc(sizeof(STUDENT));
tail=tail->next;
if(!tail)
{
printf("\n內存溢出!");
return NULL;
}
printf("輸入一個記錄:\n");
scanf("%s %s %c %s %s %s %s",tail->num,tail->name,&tail->sex,tail->birth,tail->phone,tail->email,tail->addr);
printf("繼續輸入?\n");
c=getchar();
getchar();
if('Y'!=c||'y'!=c)
break;
}
tail->next=NULL;
*headp=head;
}
void print(STUDENT *head)
{
STUDENT *p;
p=head;
while(p!=NULL)
{
printf("%s %s %c %s %s %s %s %s %s\n",p->num,p->name,p->sex,p->birth,p->phone,p->email,p->addr);
p=p->next;
}
}
STUDENT *delete(STUDENT *head)
{
STUDENT *p,*q;
char s[11];
printf("要刪除的學生的編號\n");
scanf("%s",s);
q=p=head;
while(strcmp(p->num,s)&&p!=NULL)
{
q=p;
p=p->next;
}
if(p==NULL)
printf("\n表中數據為空!\n",s);
else
{
printf("%s %s %c %s %s %s %s %s %s\n",p->num,p->name,p->sex,p->birth,p->phone,p->email,p->addr);
getchar();
if(p==head)
head=p->next;
else
q->next=p->next;
free(p);
printf("\n成功刪除編號為%s的學生\n",s);
}
return(head);
}
void search(STUDENT *head)
{
STUDENT *p;
char s[15];
printf("要查找的學生的編號\n");
scanf("%s",s);
p=head;
while(strcmp(p->name,s)&&p!=NULL)
p=p->next;
if(p==NULL)
printf("\n沒有編號為%s的學生\n",s);
else
printf("%s %s %c %s %s %s %s %s %s\n",p->num,p->name,p->sex,p->birth,p->phone,p->email,p->addr);
}
STUDENT *update(STUDENT *head)
{
STUDENT *p,*info;;
char s[15];
printf("要修改的學生的編號\n");
scanf("%s",s);
p=head;
while(strcmp(p->name,s)&&p!=NULL)
p=p->next;
printf("\n輸入學生數據:\n");
scanf("%s %s %c %s %s %s %s",p->num,p->name,&p->sex,p->birth,p->phone,p->email,p->addr);
info->next=NULL;
p=head;
while(strcmp(p->name,s)&&p!=NULL)
p=p->next;
return head;
}
STUDENT *insert(STUDENT *head)
{
STUDENT *p,*q,*info;
char s[11];
printf("輸入要在哪個編號前插入:\n");
scanf("%s",s);
printf("\n輸入學生數據:\n");
info=(STUDENT *)malloc(sizeof(STUDENT));
if(!info)
{
printf("\n內存溢出!");
return NULL;
}
scanf("%s %s %c %s %s %s %s",info->num,info->name,&info->sex,info->birth,info->phone,info->email,info->addr);
info->next=NULL;
p=head;
q=head;
while(strcmp(info->num,s)&&p!=NULL)
{
q=p;
p=p->next;
}
if(p==NULL)
if(p==head)
head=info;
else
q->next=info;
else
if(p==head)
{
info->next=p;
head=info;
}
else
{
info->next=p;
q->next=info;
}
printf("\n插入成功!");
return(head);
}
void save(STUDENT *head)
{
FILE *fp;
STUDENT *p;
char outfile[10];
printf("輸入要保存的文件名如c:\\test.txt:\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL)
{
printf("文件打開失敗!\n");
exit(1);
}
p=head;
while(p!=NULL)
{
fwrite(p,sizeof(STUDENT),1,fp);
p=p->next;
}
fclose(fp);
printf("數據保存成功!\n");
}
STUDENT *load()
{
STUDENT *p,*q,*head=NULL;
FILE *fp;
char infile[10];
printf("輸入要打開的文件名如c:\\test.txt:\n");
scanf("%s",infile);
if((fp=fopen(infile,"rb"))==NULL)
{
printf("文件打開失敗!\n");
exit(1);
}
p=(STUDENT *)malloc(sizeof(STUDENT));
if(!p)
{
printf("內存溢出!\n");
return head;
}
head=p;
while(!feof(fp))
{
if(1!=fread(p,sizeof(STUDENT),1,fp))
break;
p->next=(STUDENT *)malloc(sizeof(STUDENT));
if(!p->next)
{
printf("內存溢出!!\n");
return head;
}
q=p;
p=p->next;
}
q->next=NULL;
fclose(fp);
printf("文件讀取成功!\n");
return head;
}
void append()
{
FILE *fp;
STUDENT *info;
int s1,i;
char infile[10];
printf("\n輸入要追加的學生數據:\n");
info=(STUDENT *)malloc(sizeof(STUDENT));
if(!info)
{
printf("\n內存溢出!");
return ;
}
scanf("%s %s %c %s %s %s %s",info->num,info->name,&info->sex,info->birth,info->phone,info->email,info->addr);
info->next=NULL;
printf("輸入文件名如c:\\test.txt:\n");
scanf("%s",infile);
if((fp=fopen(infile,"ab"))==NULL)
{
printf("文件打開失敗!\n");
exit(1);
}
if(1!=fwrite(info,sizeof(STUDENT),1,fp))
{
printf("文件寫入失敗!\n");
return;
}
printf("寫入成功!\n");
fclose(fp);
}
⑵ 如何用C語言做通訊錄
剽竊代碼即可。。
已經按照你的要求做了一個,VC6上運行確認了:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedefstructPersonalInfo
{
charname[50];
charaddress[30];
chartelno[30];
charpostcode[30];
structPersonalInfo*next;
}INFO;
INFO*head;
voidInitiate();
voidMenu();
voidCreate();//的功能是:創建新的通訊錄。
voidAdd();//在通訊錄的末尾,寫入新的信息,並返回選單
voidFind();//查找記錄
voidAlter();//修改記錄如果未找到要修改的人,則提示通訊錄中沒有此人的信息,並返回選單。
voidDelete();//刪除某人的信息,如果未找到要刪的人,提示通訊錄中沒有此人的信息,並返回選單。
voidList();//的功能是:顯示通訊錄中的所有記錄。
//初始化
voidInitiate()
{
if((head=(INFO*)malloc(sizeof(INFO)))==NULL)exit(1);
head->next=NULL;
}
//顯示菜單
voidMenu()
{
printf("**************歡迎使用通訊錄系統**************");
printf(" ");
printf(" ");
printf("1.創建通訊錄。 ");
printf("2.插入信息。 ");
printf("3.查詢記錄 ");
printf("4.修改記錄 ");
printf("5.刪除記錄! ");
printf("6.顯示所有記錄 ");
printf("0.退出通訊錄 ");
printf("請輸入0~6 ");
}
//創建通訊錄
voidCreate()
{
INFO*p1[100],*p2;
intm,i;
printf("請輸入創建個數:");
scanf("%d",&m);
for(i=1;i<=m;i++)
{
p1[i]=(INFO*)malloc(sizeof(INFO));
printf("請輸入第%d條信息! ",i);
printf("姓名: ");
scanf("%s",&p1[i]->name);
printf("地址: ");
scanf("%s",&p1[i]->address);
printf("電話: ");
scanf("%s",&p1[i]->telno);
printf("郵編: ");
scanf("%s",&p1[i]->postcode);
p1[i]->next=NULL;
if(head->next==NULL)
head->next=p1[i];
else
{
for(p2=head;p2->next!=NULL;p2=p2->next);//找到結點尾
p2->next=p1[i];
}
}
printf("信息已添加! ");
return;//保存到鏈表
}
//添加通訊錄信息
voidAdd()
{
INFO*p,*q;
if((q=(INFO*)malloc(sizeof(INFO)))==NULL)exit(1);
printf("請輸入要添加的信息! ");
printf("姓名: ");//添加信息
scanf("%s",&q->name);
printf("性別: ");
scanf("%s",q->address);
printf("電話: ");
scanf("%s",q->telno);
printf("城市: ");
scanf("%s",q->postcode);
for(p=head;p->next!=NULL;p=p->next);
p->next=q;
q->next=NULL;
printf("此信息已添加!");
return;
}
//查找通訊錄信息
voidFind()
{
INFO*p;
charname[50];
if(head->next==NULL)
{
printf("此通訊錄為空! ");
return;
}
printf("請輸入要查找的姓名: ");
scanf("%s",&name);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,name)==0)
{
printf("姓名 地址 郵編 電話 ");
printf("%s %s %s %s ",p->name,p->address,p->postcode,p->telno);
}
elseif(p->next==NULL)
printf("無此信息! ");
}
}
//修改通訊錄信息
voidAlter()
{
charname[50];//先查找後刪除
INFO*p,*p1;
if(head->next==NULL)
{
printf("此通訊錄為空! ");
return;
}
printf("請輸入要修改的姓名: ");
scanf("%s",name);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,name)==0)
break;
elseif(p->next==NULL)
{
printf("無此信息! ");
return;
}
}
p1=(INFO*)malloc(sizeof(INFO));
printf("姓名: ");//添加信息
scanf("%s",p1->name);
strcpy(p->name,p1->name);
printf("性別: ");
scanf("%s",p1->address);
strcpy(p->address,p1->address);
printf("電話: ");
scanf("%s",p1->telno);
strcpy(p->telno,p1->telno);
printf("城市: ");
scanf("%s",p1->postcode);
strcpy(p->postcode,p1->postcode);
printf("此信息已修改! ");
//顯示修改的信息
printf("姓名 地址 郵編 電話 ");
printf("%s %s %s %s ",p->name,p->address,p->postcode,p->telno);
free(p1);
}
//刪除通訊錄信息
voidDelete()
{
charname[50];//先查找後刪除
INFO*p=head->next,*p1=head->next,*p2;
if(head->next==NULL)
{
printf("此通訊錄為空! ");
return;
}
printf("請輸入要刪除的姓名: ");
scanf("%s",name);
while((strcmp(p->name,name)!=0)&&p->next!=NULL)
{
p1=p;
p=p->next;
}
if(strcmp(name,p->name)==0)//輸出刪除信息
{
if(p==head->next&&p->next!=NULL)
head->next=p->next;
elseif(p==head->next&&p->next==NULL)
{
head->next=p->next;
printf("信息已刪除,先此通訊錄為空!! ");
return;
}
else
p1->next=p->next;
}
else
{
printf("此信息不存在!!! ");
return;
}
printf("此信息已刪除!");
printf("姓名 地址 郵編 電話 ");
for(p2=head->next;p2!=NULL;p2=p2->next)
printf("%s %s %s %s ",p2->name,p2->address,p2->postcode,p2->telno);
}
//顯示所有記錄
voidList()
{
INFO*p;
if(head->next==NULL)
{
printf("此通訊錄中無記錄! ");
return;
}
printf("姓名 地址 郵編 電話 ");
for(p=head->next;p!=NULL;p=p->next)
printf("%s %s %s %s ",p->name,p->address,p->postcode,p->telno);
}
voidmain()
{
intchoice;
charyes_no;
system("colora");
Initiate();
do
{
Menu();
printf("請選擇0-6的數字 ");
scanf("%d",&choice);
printf(" ");
switch(choice)
{
case1:Create();
break;
case2:Add();
break;
case3:Find();
break;
case4:Alter();
break;
case5:Delete();
break;
case6:List();
break;
case0:
printf("************感謝您的使用************ ");
exit(0);
break;
default:
printf("輸入有誤!請重新輸入 ");
break;
}
printf("是否繼續YorN? ");
do
{
scanf("%c",&yes_no);
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no=='Y'||yes_no=='y');
}
⑶ 用C語言如何做通訊錄
因為不知道你要實現什麼功能,給個程序僅供參考 編譯環境:vc++6.0 #include<iostream> #include<windows.h> using namespace std; typedef struct { char name[25];//姓名 char number[50];//電話號碼 int a;//序號 char cls;//分類 char mail[50];//郵箱 }BOOK; typedef struct node { BOOK data; struct node *next; }Node,*Link; void Menu() { cout<<" |------------------------------------|"<<endl; cout<<" | 1.查看通訊錄; 2.查找聯系人; |"<<endl; cout<<" | 3.刪除聯系人; 4.添加聯系人; |"<<endl; cout<<" | 0.退出系統; |"<<endl; cout<<" |------------------------------------|"<<endl; } void Ordination(Link L)//通訊錄進行排序 { Node *p; int i=1; p=L->next; while(p) { p->data.a=i++; p=p->next; } } int Ordination1(Link L)//通訊錄進行排序 { Node *p; int i=1; p=L->next; while(p) { p->data.a=i++; p=p->next; } if(i==16) cout<<"\t\t\t通訊錄已滿!\n"; return(i-1); } Node *Locate(Link L,char nam[],char num[]) { Node *p; p=L->next; while(p) { if(strcmp(p->data.name,nam)==0||strcmp(p->data.number,num)==0) return p; p=p->next; } return p; } void Fincls(Link L)//按類查找 { Node *p; char str; int count=0; cout<<"請輸入分類(A,B,C):"; cin>>str; p=L->next; if(!p) {cout<<"\t\t\t通訊錄中沒有聯系人.\n";return;} while(p) { if(str==p->data.cls) {cout<<"姓名:"<<p->data.name<<";號碼:"<<p->data.number<<endl; count++;} p=p->next; } if(count==0) cout<<"\t\t\t沒有"<<str<<"類聯系人.\n"; } void Add(Link L)//添加聯系人 { Node *p,*r; char nam[25]; char num[50]; int flag=0; flag=Ordination1(L); if(flag==15) return; cout<<"姓名:"; scanf("%s",nam); cout<<"號碼:"; scanf("%s",num); p=Locate(L,nam,num); if(p!=NULL) {cout<<"\t\t\t該人信息已存在!\n"; return; } r=L; while(r->next!=NULL) r=r->next; p=(Node*)malloc(sizeof(Node)); p->next=NULL; strcpy(p->data.name,nam); strcpy(p->data.number,num); cout<<"分類(選A,B或C):"; p->data.cls=getchar(); p->data.cls=getchar(); cout<<"郵件:"; scanf("%s",p->data.mail); r->next=p; Ordination(L); } void Bohao(Node *p)//自動撥號功能 { int i,j; system("cls"); for(i=0;i<50;i++) { if(p->data.number[i]=='\0') break; } for(j=0;j<i;j++) { printf("\a%c",p->data.number[j]); Sleep(300); } cout<<endl; } void Book(Link L)//通訊錄 { Node *p; char str[25],ch; p=L->next; if(p==NULL) {cout<<"\t\t\t沒有聯系人.\n";return;} cout<<"通訊錄:\n"; while(p!=NULL) { cout<<p->data.a<<".";//顯示序號 cout<<p->data.name<<endl; p=p->next; } cout<<"請輸入姓名查看聯系方式(0退出通訊錄):"; scanf("%s",str); if(strcmp(str,"0")==0) return; p=L->next; while(p) { if(strcmp(p->data.name,str)==0) break; p=p->next; } cout<<"姓名:"<<p->data.name<<";號碼:"<<p->data.number<<endl; cout<<"是否撥號?(y/n):"; ch=getchar(); ch=getchar(); if(ch=='y'||ch=='Y') Bohao(p); } void Delet(Link L)//刪除聯系人 { Node *p,*r; char nam[25]; p=L->next; if(p==NULL) {cout<<"\t\t\t通訊錄為空,無聯系人可刪!\n";} cout<<"需刪除聯系人的姓名:"; scanf("%s",nam); while(p) { if(strcmp(p->data.name,nam)==0) break; p=p->next; } if(p==NULL) {cout<<"\t\t\t沒有此人!\n";return;} r=L; while(r->next) { if(r->next==p) break; r=r->next; } r->next=p->next; Ordination(L); } void main() { Link L; int menu=1; L=(Node*)malloc(sizeof(Node)); L->next=NULL; Menu(); while(menu) { cout<<"請選擇操作(5顯示菜單):"; cin>>menu; switch(menu) { case 1:Book(L);break; case 2:Fincls(L);break; case 3:Delet(L);break; case 4:Add(L);break; case 5:Menu();break; } } }
麻煩採納,謝謝!
⑷ 用C語言做通訊錄
這看你是怎樣定義的了。如果你50個同學是用結構體來定義的話就比較容易實現。用二維數組的話,就比較麻煩。
查找名字可以用strcmp(輸入的名字,編好的名字)==0如果相等,就等於查找到你輸入的名字了。記錄它的下標,再輸出它的聯系方式。
下面是一個比較完整的通訊錄代碼,你參考一下啦。(看到專家兩個字,我真沒資格去回答你了,汗)
/*10.3.2源程序*/
/******頭文件(.h)***********/
#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*標准庫函數*/
#include "string.h"/*字元串函數*/
#include "ctype.h" /*字元操作函數*/
#define M 50 /*定義常數表示記錄數*/
typedef struct /*定義數據結構*/
{
char name[20]; /*姓名*/
char units[30]; /*單位*/
char tele[10]; /*電話*/
}ADDRESS;
/******以下是函數原型*******/
int enter(ADDRESS t[]); /*輸入記錄*/
void list(ADDRESS t[],int n); /*顯示記錄*/
void search(ADDRESS t[],int n); /*按姓名查找顯示記錄*/
int delete(ADDRESS t[],int n); /*刪除記錄*/
int add(ADDRESS t[],int n); /*插入記錄*/
void save(ADDRESS t[],int n); /*記錄保存為文件*/
int load(ADDRESS t[]); /*從文件中讀記錄*/
void display(ADDRESS t[]); /*按序號查找顯示記錄*/
void sort(ADDRESS t[],int n); /*按姓名排序*/
void qseek(ADDRESS t[],int n); /*快速查找記錄*/
void (); /*文件復制*/
void print(ADDRESS temp); /*顯示單條記錄*/
int find(ADDRESS t[],int n,char *s) ; /*查找函數*/
int menu_select(); /*主菜單函數*/
/******主函數開始*******/
main()
{
int i;
ADDRESS adr[M]; /*定義結構體數組*/
int length; /*保存記錄長度*/
clrscr(); /*清屏*/
for(;;)/*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{
case 0:length=enter(adr);break;/*輸入記錄*/
case 1:list(adr,length);break; /*顯示全部記錄*/
case 2:search(adr,length);break; /*查找記錄*/
case 3:length=delete(adr,length);break; /*刪除記錄*/
case 4:length=add(adr,length); break; /*插入記錄*/
case 5:save(adr,length);break; /*保存文件*/
case 6:length=load(adr); break; /*讀文件*/
case 7:display(adr);break; /*按序號顯示記錄*/
case 8:sort(adr,length);break; /*按姓名排序*/
case 9:qseek(adr,length);break; /*快速查找記錄*/
case 10:();break; /*復制文件*/
case 11:exit(0); /*如返回值為11則程序結束*/
}
}
}
/*菜單函數,函數返回值為整數,代表所選的菜單項*/
menu_select()
{
char s[80];
int c;
gotoxy(1,25);/*將游標定為在第25行,第1列*/
printf("press any key enter menu......\n");/*提示壓任意鍵繼續*/
getch(); /*讀入任意字元*/
clrscr(); /*清屏*/
gotoxy(1,1);
printf("********************MENU*********************\n\n");
printf(" 0. Enter record\n");
printf(" 1. List the file\n");
printf(" 2. Search record on name\n");
printf(" 3. Delete a record\n");
printf(" 4. add record \n");
printf(" 5. Save the file\n");
printf(" 6. Load the file\n");
printf(" 7. display record on order\n");
printf(" 8. sort to make new file\n");
printf(" 9. Quick seek record\n");
printf(" 10. the file to new file\n");
printf(" 11. Quit\n");
printf("***********************************************\n");
do{
printf("\n Enter you choice(0~11):"); /*提示輸入選項*/
scanf("%s",s); /*輸入選擇項*/
c=atoi(s); /*將輸入的字元串轉化為整型數*/
}while(c11); /*選擇項不在0~11之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}
/***輸入記錄,形參為結構體數組,函數值返回類型為整型表示記錄長度*/
int enter(ADDRESS t[])
{
int i,n;
char *s;
clrscr(); /*清屏*/
printf("\nplease input num \n"); /*提示信息*/
scanf("%d",&n); /*輸入記錄數*/
printf("please input record \n"); /*提示輸入記錄*/
printf("name unit telephone\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
{
scanf("%s%s%s",t[i].name,t[i].units,t[i].tele); /*輸入記錄*/
printf("----------------------------------------------\n");
}
return n; /*返回記錄條數*/
}
/*顯示記錄,參數為記錄數組和記錄條數*/
void list(ADDRESS t[],int n)
{
int i;
clrscr();
printf("\n\n*******************ADDRESS******************\n");
printf("name unit telephone\n");
printf("------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%-20s%-30s%-10s\n",t[i].name,t[i].units,t[i].tele);
if((i+1)%10==0) /*判斷輸出是否達到10條記錄*/
{
printf("Press any key continue...\n"); /*提示信息*/
getch(); /*壓任意鍵繼續*/
}
printf("************************end*******************\n");
}
/*查找記錄*/
void search(ADDRESS t[],int n)
{
char s[20]; /*保存待查找姓名字元串*/
int i; /*保存查找到結點的序號*/
clrscr(); /*清屏*/
printf("please search name\n");
scanf("%s",s); /*輸入待查找姓名*/
i=find(t,n,s); /*調用find函數,得到一個整數*/
if(i>n-1) /*如果整數i值大於n-1,說明沒找到*/
printf("not found\n");
else
print(t[i]); /*找到,調用顯示函數顯示記錄*/
}
/*顯示指定的一條記錄*/
void print(ADDRESS temp)
{
clrscr();
printf("\n\n********************************************\n");
printf("name unit telephone\n");
printf("------------------------------------------------\n");
printf("%-20s%-30s%-10s\n",temp.name,temp.units,temp.tele);
printf("**********************end***********************\n");
}
/*查找函數,參數為記錄數組和記錄條數以及姓名s */
int find(ADDRESS t[],int n,char *s)
{
int i;
for(i=0;i<n;i++)/*從第一條記錄開始,直到最後一條*/
{
if(strcmp(s,t[i].name)==0) /*記錄中的姓名和待比較的姓名是否相等*/
return i; /*相等,則返回該記錄的下標號,程序提前結結束*/
}
return i; /*返回i值*/
}
/*刪除函數,參數為記錄數組和記錄條數*/
int delete(ADDRESS t[],int n)
{
char s[20]; /*要刪除記錄的姓名*/
int ch=0;
int i,j;
printf("please deleted name\n"); /*提示信息*/
scanf("%s",s);/*輸入姓名*/
i=find(t,n,s); /*調用find函數*/
if(i>n-1) /*如果i>n-1超過了數組的長度*/
printf("no found not deleted\n"); /*顯示沒找到要刪除的記錄*/
else
{
print(t[i]); /*調用輸出函數顯示該條記錄信息*/
printf("Are you sure delete it(1/0)\n"); /*確認是否要刪除*/
scanf("%d",&ch); /*輸入一個整數0或1*/
if(ch==1) /*如果確認刪除整數為1*/
{
for(j=i+1;j<n;j++) /*刪除該記錄,實際後續記錄前移*/
{
strcpy(t[j-1].name,t[j].name); /*將後一條記錄的姓名拷貝到前一條*/
strcpy(t[j-1].units,t[j].units); /*將後一條記錄的單位拷貝到前一條*/
strcpy(t[j-1].tele,t[j].tele); /*將後一條記錄的電話拷貝到前一條*/
}
n--; /*記錄數減1*/
}
}
return n; /*返回記錄數*/
}
/*插入記錄函數,參數為結構體數組和記錄數*/
int add(ADDRESS t[],int n)/*插入函數,參數為結構體數組和記錄數*/
{
ADDRESS temp; /*新插入記錄信息*/
int i,j;
char s[20]; /*確定插入在哪個記錄之前*/
printf("please input record\n");
printf("************************************************\n");
printf("name unit telephone\n");
printf("--------------------------------------------------\n");
scanf("%s%s%s",temp.name,temp.units,temp.tele); /*輸入插入信息*/
printf("------------------------------------------------\n");
printf("please input locate name \n");
scanf("%s",s); /*輸入插入位置的姓名*/
i=find(t,n,s); /*調用find,確定插入位置*/
for(j=n-1;j>=i;j--) /*從最後一個結點開始向後移動一條*/
{
strcpy(t[j+1].name,t[j].name); /*當前記錄的姓名拷貝到後一條*/
strcpy(t[j+1].units,t[j].units); /*當前記錄的單位拷貝到後一條*/
strcpy(t[j+1].tele,t[j].tele); /*當前記錄的電話拷貝到後一條*/
}
strcpy(t[i].name,temp.name); /*將新插入記錄的姓名拷貝到第i個位置*/
strcpy(t[i].units,temp.units); /*將新插入記錄的單位拷貝到第i個位置*/
strcpy(t[i].tele,temp.tele); /*將新插入記錄的電話拷貝到第i個位置*/
n++; /*記錄數加1*/
return n; /*返回記錄數*/
}
/*保存函數,參數為結構體數組和記錄數*/
void save(ADDRESS t[],int n)
{
int i;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","wb"))==NULL) /*打開文件,並判斷打開是否正常*/
{
printf("can not open file\n");/*沒打開*/
exit(1); /*退出*/
}
printf("\nSaving file\n"); /*輸出提示信息*/
fprintf(fp,"%d",n); /*將記錄數寫入文件*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
for(i=0;i<n;i++)
{
fprintf(fp,"%-20s%-30s%-10s",t[i].name,t[i].units,t[i].tele);/*格式寫入記錄*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
}
fclose(fp);/*關閉文件*/
printf("****save success***\n"); /*顯示保存成功*/
}
/*讀入函數,參數為結構體數組*/
int load(ADDRESS t[])
{
int i,n;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","rb"))==NULL)/*打開文件*/
{
printf("can not open file\n"); /*不能打開*/
exit(1); /*退出*/
}
fscanf(fp,"%d",&n); /*讀入記錄數*/
for(i=0;i<n;i++)
fscanf(fp,"%20s%30s%10s",t[i].name,t[i].units,t[i].tele); /*按格式讀入記錄*/
fclose(fp); /*關閉文件*/
printf("You have success read data from file!!!\n"); /*顯示保存成功*/
return n; /*返回記錄數*/
}
/*按序號顯示記錄函數*/
void display(ADDRESS t[])
{
int id,n;
FILE *fp; /*指向文件的指針*/
if((fp=fopen("record.txt","rb"))==NULL) /*打開文件*/
{
printf("can not open file\n"); /*不能打開文件*/
exit(1); /*退出*/
}
printf("Enter order number...\n"); /*顯示信息*/
scanf("%d",&id); /*輸入序號*/
fscanf(fp,"%d",&n); /*從文件讀入記錄數*/
if(id>=0&&id<n) /*判斷序號是否在記錄范圍內*/
{
fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移動文件指針到該記錄位置*/
print(t[id]); /*調用輸出函數顯示該記錄*/
printf("\r\n");
}
else
printf("no %d number record!!!\n ",id); /*如果序號不合理顯示信息*/
fclose(fp); /*關閉文件*/
}
/*排序函數,參數為結構體數組和記錄數*/
void sort(ADDRESS t[],int n)
{
int i,j,flag;
ADDRESS temp; /*臨時變數做交換數據用*/
for(i=0;i<n;i++)
{
flag=0; /*設標志判斷是否發生過交換*/
for(j=0;j<n-1;j++)
if((strcmp(t[j].name,t[j+1].name))>0) /*比較大小*/
{
flag=1;
strcpy(temp.name,t[j].name); /*交換記錄*/
strcpy(temp.units,t[j].units);
strcpy(temp.tele,t[j].tele);
strcpy(t[j].name,t[j+1].name);
strcpy(t[j].units,t[j+1].units);
strcpy(t[j].tele,t[j+1].tele);
strcpy(t[j+1].name,temp.name);
strcpy(t[j+1].units,temp.units);
strcpy(t[j+1].tele,temp.tele);
}
if(flag==0)break; /*如果標志為0,說明沒有發生過交換循環結束*/
}
printf("sort sucess!!!\n"); /*顯示排序成功*/
}
/*快速查找,參數為結構體數組和記錄數*/
void qseek(ADDRESS t[],int n)
{
char s[20];
int l,r,m;
printf("\nPlease sort before qseek!\n"); /*提示確認在查找之前,記錄是否已排序*/
printf("please enter name for qseek\n"); /*提示輸入*/
scanf("%s",s); /*輸入待查找的姓名*/
l=0;r=n-1; /*設置左邊界與右邊界的初值*/
while(l<=r) /*當左邊界<=右邊界時*/
{
m=(l+r)/2; /*計算中間位置*/
if(strcmp(t[m].name,s)==0) /*與中間結點姓名欄位做比較判是否相等*/
{
print(t[m]); /*如果相等,則調用print函數顯示記錄信息*/
return ; /*返回*/
}
if(strcmp(t[m].name,s)<0) /*如果中間結點小*/
l=m+1; /*修改左邊界*/
else
r=m-1; /*否則,中間結點大,修改右邊界*/
}
if(l>r) /*如果左邊界大於右邊界時*/
printf("not found\n"); /*顯示沒找到*/
}
/*復制文件*/
void ()
{
char outfile[20]; /*目標文件名*/
int i,n;
ADDRESS temp[M]; /*定義臨時變數*/
FILE *sfp,*tfp; /*定義指向文件的指針*/
clrscr();/*清屏*/
if((sfp=fopen("record.txt","rb"))==NULL) /*打開記錄文件*/
{
printf("can not open file\n"); /*顯示不能打開文件信息*/
exit(1); /*退出*/
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/
scanf("%s",outfile); /*輸入目標文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*打開目標文件*/
{
printf("can not open file\n"); /*顯示不能打開文件信息*/
exit(1); /*退出*/
}
fscanf(sfp,"%d",&n); /*讀出文件記錄數*/
fprintf(tfp,"%d",n);/*寫入目標文件數*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
for(i=0;i<n;i++)
{
fscanf(sfp,"%20s%30s%10s\n",temp[i].name,temp[i].units,
temp[i].tele); /*讀入記錄*/
fprintf(tfp,"%-20s%-30s%-10s\n",temp[i].name,
temp[i].units,temp[i].tele); /*寫入記錄*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
}
fclose(sfp); /*關閉源文件*/
fclose(tfp); /*關閉目標文件*/
printf("you have success file!!!\n"); /*顯示復製成功*/
}
好好參考一下啦,可能有些函數你還沒學到,找找書就行了。
⑸ c語言編寫一個通訊錄系統 用簡單一點的c😊
#defineN100
#defineSIZE30
#include<stdio.h>
#include<string.h>
#include<conio.h>
structstudent{
charnum[SIZE];
charname[SIZE];
chartel[SIZE];
};
/*函數聲明*/
voidmyprint();/*顯示菜單*/
intmycreat(structstudent*p,intn);/*輸入通訊錄*/voidmydisplay(structstudent*p,intn);/*顯示通訊錄*/voidmysearch(structstudent*p,intn);/*查找*/
voidmymodify(structstudent*p,intn);/*修改通訊錄*/intmyadd(structstudent*p,intn);/*增加通訊錄*/intmydelete(structstudent*p,intn);/*刪除*/voidmysort(structstudent*p,intn);/*排序*/
voidsch_num(structstudent*p,intn);/*按學號查找*/voidsch_name(structstudent*p,intn);/*按姓名查找*/
intloadinfo(structstudent*p,intn);/*載入通訊錄信息*/intsaveinfo(structstudent*p,intn);/*保存通訊錄信息*/voidmain(){
/*文件定義*/charchoose,yes_no;
structstudentrecord[N];/*存放通訊錄信息,共100條*/inttotal=0,flag;/*通訊錄總數*/
total=loadinfo(record,N);/*從文件讀取記錄信息,不超過100條*/do{
myprint();/*顯示菜單*/
printf("請選擇:");do{
choose=getchar();}
while(choose<'0'||choose>'9');switch(choose){
case'1':
total=mycreat(record,total);break;case'2':
mydisplay(record,total);break;case'3':
mysearch(record,total);break;case'4':
mymodify(record,total);break;case'5':
total=myadd(record,total);break;case'6':
total=mydelete(record,total);break;case'7':
mysort(record,total);break;case'8':
flag=saveinfo(record,total);if(flag==1)
printf(" 保存成功! ");else
printf(" 保存失敗! ");break;case'0':
break;default:
printf(" %c為非法選項! ",choose);}
if(choose=='0')break;printf(" 要繼續選擇嗎(Y/N)?");do{
yes_no=getchar();}
while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');}
while(yes_no!='Y'||yes_no!='y');}
voidmyprint()/*顯示菜單信息*/{
printf(" ");printf(" ");printf("請輸入選項編號(0--7) ");printf("1---批量輸入通訊錄 ");printf("2---顯示通訊錄 ");printf("3---查詢通訊錄 ");printf("4---修改通訊錄 ");printf("5---添加通訊錄 ");printf("6---刪除通訊錄 ");printf("7---排序通訊錄 ");printf("8---保存通訊錄 ");printf("0---退出 ");printf(" ");
}
intmycreat(structstudent*p,intn)/*批量輸入學生信息*/{
inti=0;intm;
printf("添加前的記錄,共有<%d>個: ",n);printf(" 記錄號學號姓名電話號碼 ");
i=0;
while((i<n)&&(strcmp(p->num,"")!=0)){
printf("%d:%15s%15s%15s ",i+1,p->num,p->name,p->tel);i++;p++;}
printf(" 請輸入要輸入的學生人數(<%d):",N-n);
scanf("%d",&m);i=0;
while(i<m){
printf(" ");
printf("請輸入第%d個記錄: ",i+1);printf("學號:");do{
gets(p->num);}
while(strcmp(p->num,"")==0);printf("姓名:");gets(p->name);
printf("電話號碼:");gets(p->tel);p++;i++;}
returnm+n;}
voidmydisplay(structstudent*p,intn)/*顯示學生信息*/{
/*clrscr();*/inti=0;
printf(" 記錄號學號姓名電話號碼 ");while(i<n){
printf("%d:%15s%15s%15s ",i+1,p->num,p->name,p->tel);p++;i++;}}
voidmymodify(structstudent*p,intn)/*修改學生信息*/{
inti;
charnam[10];mydisplay(p,n);
printf(" 請輸入要修改記錄的姓名:");gets(nam);
for(i=0;i<n;i++,p++)
if(strcmp(nam,p->name)==0)break;if(i==n)
printf("無此人! ");else{
printf("請輸入正確的學號:");do{
gets(p->num);}
while(strcmp(p->num,"")==0);printf("請輸入正確的姓名:");gets(p->name);
printf("請輸入正確的電話號碼:");gets(p->tel);}
}
voidmysearch(structstudent*p,intn)/*查找指定學生*/{
charc;
mydisplay(p,n);
printf(" 按學號查詢(h),還是按姓名查詢(m)?");c=getchar();
if(c=='h'||c=='H')
sch_num(p,n);elseif(c=='m'||c=='M')
sch_name(p,n);else
printf(" 非法字元! ");}
voidsch_num(structstudent*p,intn)/*按學號查詢*/{
inti,flag=0;charnm[10];
printf(" 請輸入要查詢記錄的學號:");gets(nm);
for(i=0;i<n;i++)
if(strcmp(nm,p[i].num)==0)
{
printf(" 學號姓名電話號碼 ");printf("%15s%15s%15s ",p[i].num,p[i].name,p[i].tel);flag=1;
}
if(flag==0)
printf("無此人! ");}
voidsch_name(structstudent*p,intn)/*按姓名查詢*/{
inti,flag=0;charnam[10];
printf(" 請輸入要查詢記錄的姓名:");gets(nam);
for(i=0;i<n;i++)
if(strcmp(nam,p[i].name)==0){
printf(" 學號姓名電話號碼 ");printf("%15s%15s%15s ",p[i].num,p[i].name,p[i].tel);flag=1;}
if(flag==0)
printf("無此人! ");
}
intmyadd(structstudent*p,intn)/*增加學生信息*/{
inti=0;charc;
structstudentt,*q;
printf("添加前的記錄: ");printf(" 學號姓名電話號碼 ");i=0;q=p;
/*顯示原有記錄信息*/while(i<n){
printf("%15s%15s%15s ",q->num,q->name,q->tel);i++;q++;}do{
printf("請輸入新記錄的學號: ");do{
gets(t.num);
}
while(strcmp(t.num,"")==0);/*學號不能為空*/printf("請輸入新記錄的姓名:");gets(t.name);
printf("請輸入新記錄的電話號碼:");gets(t.tel);
for(i=0;i<n;i++)
if(strcmp(t.num,(p+i)->num)==0||strcmp(t.tel,(p+i)->tel)==0){
printf("學號或電話號碼重,要重新輸入嗎(Y/N)?");c=getchar();putchar(' ');break;}
/*找到最後,沒有重復*/if(i==n){
*(p+i)=t;
printf("添加後的記錄: ");printf(" 學號姓名電話號碼 ");for(i=0;i<n+1;i++)
printf("%15s%15s%15s ",(p+i)->num,(p+i)->name,p[i].tel);break;}
}
while(c=='y'||c=='Y');returnn+1;}
intmydelete(structstudent*p,intn)/*刪除學生信息*/{
inti,x;
charc,nm[10],nam[10];
printf("刪除前的記錄: ");printf(" 學號姓名電話號碼 ");for(i=0;i<n;i++)
printf("%15s%15s%15s ",p[i].num,p[i].name,p[i].tel);printf("按學號刪除(h),還是按姓名刪除(m)?");c=getchar();
if(c=='h'||c=='H'){
printf(" 請輸入要刪除記錄的學號:");gets(nm);
for(x=0;x<n;x++)
{
gets(t.num);
}
while(strcmp(t.num,"")==0);/*學號不能為空*/printf("請輸入新記錄的姓名:");gets(t.name);
printf("請輸入新記錄的電話號碼:");gets(t.tel);
for(i=0;i<n;i++)
if(strcmp(t.num,(p+i)->num)==0||strcmp(t.tel,(p+i)->tel)==0){
printf("學號或電話號碼重,要重新輸入嗎(Y/N)?");c=getchar();putchar(' ');break;}
/*找到最後,沒有重復*/if(i==n){
*(p+i)=t;
printf("添加後的記錄: ");printf(" 學號姓名電話號碼 ");for(i=0;i<n+1;i++)
printf("%15s%15s%15s ",(p+i)->num,(p+i)->name,p[i].tel);break;}
}
while(c=='y'||c=='Y');returnn+1;}
intmydelete(structstudent*p,intn)/*刪除學生信息*/{
inti,x;
charc,nm[10],nam[10];
printf("刪除前的記錄: ");printf(" 學號姓名電話號碼 ");for(i=0;i<n;i++)
printf("%15s%15s%15s ",p[i].num,p[i].name,p[i].tel);printf("按學號刪除(h),還是按姓名刪除(m)?");c=getchar();
if(c=='h'||c=='H'){
printf(" 請輸入要刪除記錄的學號:");gets(nm);
for(x=0;x<n;x++)
intj,i,k;charc1,c2;
structstudenttemp;
printf(" 排序前的記錄: ");printf(" 學號姓名電話號碼 ");for(i=0;i<n;i++)
printf("%15s%15s%15s ",p[i].num,p[i].name,p[i].tel);printf(" 按學號排序(h),還是按姓名排序(m)?");c1=getchar();
if(c1=='h'||c1=='H'){
printf(" 按升序排序(s),還是按降序排序(j)?");c2=getchar();/*升序*/
if(c2=='s'||c2=='S'){
for(i=0;i<n-1;i++){
k=i;
for(j=i;j<n;j++)
if(strcmp(p[k].num,p[j].num)<0)
k=j;
temp=p[k];p[k]=p[i];p[i]=temp;
}
printf(" 排序後的記錄: ");printf(" 學號姓名電話號碼 ");for(i=0;i<n;i++)
printf("%15s%15s%15s ",p[i].num,p[i].name,p[i].tel);}
elseif(c2=='j'||c2=='J')/*降序*/{
for(i=0;i<n-1;i++){
k=i;
for(j=0;j<n;j++)
if(strcmp(p[k].num,p[j].num)<0)
k=j;
temp=p[k];p[k]=p[i];p[i]=temp;
}
printf("排序後的記錄: ");printf(" 學號姓名電話號碼 ");for(i=0;i<n;i++)
printf("%15s%15s%15s ",p[i].num,p[i].name,p[i].tel);}
elseprintf(" 非法字元 ");}
elseif(c1=='m'||c1=='M')/*按姓名排序*/{
printf(" 按升序排序(s),還是按降序排序(j)?");c2=getchar();
if(c2=='s'||c2=='S'){
for(i=0;i<n-1;i++){
k=i;
for(j=0;j<n;j++)
if(strcmp(p[k].name,p[j].name)<0)
k=j;
temp=p[k];p[k]=p[i];p[i]=temp;}
printf("排序後的記錄: ");printf(" 學號姓名電話號碼 ");for(i=0;i<n;i++)
printf("%15s%15s%15s ",p[i].num,p[i].name,p[i].tel);
}
elseif(c2=='j'||c2=='J')/*降序*/{
for(i=0;i<n-1;i++){
k=i;
for(j=i;j<n;j++)
if(strcmp(p[k].name,p[j].name)<0)
k=j;
temp=p[k];p[k]=p[i];p[i]=temp;
}
printf("排序後的記錄: ");printf(" 學號
姓名電話號碼 ");
for(i=0;i<n;i++)
printf("%15s%15s%15s ",p[i].num,p[i].name,p[i].tel);}
elseprintf(" 非法字元! ");}
elseprintf(" 非法字元! ");}
intloadinfo(structstudent*p,intn)/*載入通訊錄信息*/{
FILE*fp;inti,all=0;
charfilename[30]="tongxunlu.txt";fp=fopen(filename,"r");if(fp==NULL){
printf(" ***不能打開文件%s,或%s文件不存在,創建一個新文件!
",filename,filename);*/
fp=fopen(filename,"w");}
fscanf(fp,"%d ",&all);
if(all>N)/*讀取記錄總數*/{
printf("文件記錄數太多,不能讀取");return0;}
for(i=0;i<all;i++)/*讀取記錄信息*/{
fscanf(fp,"%s%s%s ",p[i].num,p[i].name,p[i].tel);}
fclose(fp);/*關閉文件*/returnall;}
intsaveinfo(structstudent*p,intn){
FILE*fp;inti,all=0;
charfilename[30]="txl.dat";/*文件可以用記事本打開*/fp=fopen(filename,"w");if(fp==NULL){
printf(" ***不能建立或打開文件%s!***",filename);return0;}
fprintf(fp,"%d ",n);for(i=0;i<n;i++)
fprintf(fp,"%s%s%s ",p[i].num,p[i].name,p[i].tel);fclose(fp);return1;}
抄來的
⑹ 如何用C語言編寫通訊錄…
;
#include <string>
#include "address.h"
#include "addressList.h"
#include "addressBook.h"
using namespace std;
int main()
{
new AddressBook; //開啟通信錄
return 0;
}
ostream& operator<<(ostream& os, const RecordList& c_rl)
{
RecordList::const_iterator it;
RecordList::const_iterator it_end =c_rl.end();
for (it=c_rl.begin();it!=it_end; it++)
{
os << (*it)->name << '\n' << (*it)->tel << '\n';
}
return os;
}
istream& operator>> (istream& is, RecordList& rl)
{
Record* rec;
string name;
while (true)
{
//注意這里使用的是全局的getline()函數,而不是istream的成員函
//數.全局的getling()函數將從istream中取出最後一個分隔符,
//而istream的成員函數getline則不會
getline(is,name);
if (name =="")
break;
rec = new Record;
rec->name=name;
getline(is,rec->tel );
rl.push_back(rec);
}
return is;
}
#include<stdlib.h>
#include<fstream>
#include "addressBook.h"
using namespace std;
AddressBook::AddressBook()
{
isModified = false;
start();
}
AddressBook::~AddressBook()
{
}
//功能:顯示歡迎畫面,並開始進行用戶交互處理
void AddressBook::start()
{
cout<<"\n"
<<"\t******************************\n"
<<"\t* 這是一個 *\n"
<<"\t* 簡單的通信錄程序 *\n"
<<"\t* 可以對通信錄進行簡單管理 *\n"
<<"\t* 歡迎使用通信錄 *\n"
<<"\t******************************\n"
<<"\n";
handleMenu();
}
//功能:顯示通信錄菜單,返回用戶選擇的選項
//返回:用戶選擇的選項,是1-9之間的一個字元
char AddressBook::menuSelect()
{
cout<<"\n"
<<"1.顯示記錄\n"
<<"2.查詢記錄\n"
<<"3.增加記錄\n"
<<"4.刪除記錄\n"
<<"5.保存記錄\n"
<<"6.讀取記錄\n"
<<"7.新建記錄\n"
<<"8.結束運行\n"
<<"\n左邊數字對應功能選擇,請選1-8:";
char choice[2];
while(true)
{
cin.getline(choice,2);
if(choice[0]<'1' || choice[0]>'8')
cout<<"\n輸入錯誤,重選1-8:";
else
break;
}
return choice[0];
}
//功能:根據用戶選擇的項目調用相應的處理函數
void AddressBook::handleMenu()
{
while(true)
{
switch(menuSelect())
{
case '1':
displayRecords();
break;
case '2':
queryRecord();
break;
.......
//功能:列印用於顯示記錄信息時的表頭
void AddressBook::dispTable()
{
}
//功能:顯示通信錄中的所有記錄
void AddressBook::displayRecords()
{
}
//功能:首先檢查通信錄是否已保存,然後清空當前通信錄中所有記錄
//注意:該函數覆蓋了基類中的函數
void AddressBook::clear()
{
}
//功能:查詢指定記錄
void AddressBook::queryRecord()
{
//功能:向當前通信錄追加新的記錄
//注意:該函數重載了基類中的函數
void AddressBook::addRecord()
{
}
/*
//說明:如果使用string 類,效果更好。下面是實現本功能的程序代碼:
while(true)
{
//輸入新記錄
string name;
cout<<"姓名:";
getline(cin,name);
//如果輸入的姓名為「0」,則結束添加記錄的操作
if(name=="0")
break;
Record* rec=new Record;
rec->name=name;
cout<<"電話:";
getline(cin,rec->tel);
//將新記錄加入鏈表
AddressList::addRecord(rec);
}
//同理,下面的成員函數removeRecord()中的判斷,可以使用如下替代方法:
string str;
getline(cin,str);
while(true)
{
if(str[0]!='1' && str[0]!='2')
{
cout<<"輸入錯誤,重選1-2:";
getline(cin,str);
}
else
break;
}
*/
//功能:從當前通信錄移除指定的記錄
//注意:該函數重載了基類中的函數
void AddressBook::removeRecord()
{
if(empty())
{
cout<<"通信錄已空,退出刪除操作!"<<endl;
return;
}
//選擇獲取需要刪除的記錄的方式
cout<<"可以通過姓名或電話刪除記錄\n"
<<"1.通過姓名\n"
<<"2.通過電話\n";
char choice[2];
cin.getline(choice,2);
while(true)
{
if(choice[0]!='1' && choice[0]!='2')
{
cout<<"輸入錯誤,重選1-2:";
cin.getline(choice,2);
}
else
break;
}
int type=static_cast<int>(choice[0])-48;
//輸入需要匹配的字元串
if(type==1)
cout<<"請輸入姓名:"<<flush;
else
cout<<"請輸入電話:"<<flush;
char pattern[20];
cin.getline(pattern,20);
int deletedCount=0;
//找到匹配的記錄
Iterator it=findRecord(pattern,type,first());
Iterator it_end=pastEnd();
while(it!=it_end)
{
cout<<"找到一條匹配的記錄:\n";
dispTable();
cout<<(*it)->name<<"\t\t"<<(*it)->tel<<"\n";
cout<<"確定要刪除這條記錄嗎?[Y/N]";
cin.getline(choice,2);
//刪除這條記錄
if(choice[0]!='n' && choice[0]!='N')
{
it=AddressList::removeRecord(it);
deletedCount++;
}
//取下一條匹配的記錄
if(it!=it_end)
it=findRecord(pattern,type,++it);
}
cout<<"一共刪除了"<<deletedCount<<"條記錄\n"
<<"現在還有"<<size()<<"條記錄"<<endl;
if(deletedCount!=0)
isModified=false;
}
//功能:將通信錄保存至指定文件
//注意:該函數重載了基類中的函數
void AddressBook::saveRecords()
{
if(empty())
{
cout<<"沒有記錄可存!"<<endl;
return;
}
//因為下面的程序中使用string類的成員函數,所以需要進行一次轉換
string fname;
char name[16];
cout<<"請輸入要存在的文件名(直接回車選擇文件sname):";
cin.getline(name,16);
fname=name;
if(fname.empty())
fname="sname";
ofstream of(fname.c_str(),ios_base::out);
if(!of)
{
cout<<"不能存入文件!"<<endl;
return;
}
AddressList::saveRecords(of);
of.close();
cout<<size()<<"條記錄已經存入文件,請繼續操作。"<<endl;
isModified=false;
}
//功能:從指定文件讀取記錄追加到當前通信錄末尾
//注意:該函數重載了基類中的函數
void AddressBook::loadRecords()
{
}
void AddressBook::quit()
{
}
#ifndef H_ADDRESSBOOK_H_NNN
#define H_ADDRESSBOOK_H_NNN
#include "addressList.h"
//處理通信錄操作的面向用戶使用的類,包含所有功能的用戶界面及用戶交互的實現
class AddressBook :public AddressList
{
protected:
bool isModified; //通信錄是否已被修改還未保存
public:
AddressBook();
virtual ~AddressBook();
//開始通信錄的用戶界面操作
virtual void start();
//菜單處理函數
virtual void handleMenu();
//顯示記錄
virtual void displayRecords();
//查詢記錄
virtual void queryRecord();
//增加記錄
virtual void addRecord();
//刪除記錄
virtual void removeRecord();
//保存記錄
virtual void saveRecords();
//讀取記錄
virtual void loadRecords();
//結束程序
virtual void quit();
//清空當前通信錄
virtual void clear();
protected:
//菜單選擇函數
char menuSelect();
//顯示表頭
void dispTable();
};
#endif //H_ADDRESSBOOK_HZ-NNN
#include "addressList.h"
AddressList::~AddressList()
{
recList.clear();
}
//功能:向通信錄中添加新的記錄
//參數:rec,指向新記錄的指針
void AddressList::addRecord (Record* rec)
{
if (rec !=NULL)
{
recList.push_back(rec);
}
}
//功能:從通訊錄中刪除一個記錄
//參數:it,指向欲刪除記錄的迭代器
//注意:it,應是可提領的迭代器,可以通過findRecord()獲得
AddressList::Iterator AddressList::removeRecord(AddressList::Iterator it)
{
return recList.erase(it);
}
//功能:從通信錄中尋找一個記錄
//參數:pattern,欲尋找的記錄的指定域與pattern相等
// type,為1表示欲尋找記錄的名稱(name)與pattern相等;
// 為2表示欲尋找記錄的電弧(tel)與(pattern)相等。
// from,從from開始尋找匹配的記錄。
//返回:若找到了則返回的迭代器指向第一個匹配記錄的迭代器,
// 若找不到則返回的迭代器等於pastEnd()的返回值。
//注意:from應是可提領的迭代器。
// 第一次調用可以用first(),之後使用上一次findRecord()的返回值增1,
// 直到返回pastEnd(),便可以獲得所有匹配的記錄。
AddressList::Iterator AddressList::findRecord(string pattern,int type,AddressList::Iterator from)
{
Iterator it;
Iterator it_end=recList.end();
for (it=from; it!=it_end; it++)
{
if ((type==1 && (*it)->name==pattern)||(type==2 && (*it)->tel==pattern))
break;
}
return it;
}
//功能:將通信錄保存到輸出流中
//參數:os.指定的輸出流
void AddressList::saveRecords(ostream &os)
{
os << recList;
}
//功能:從輸入流中讀入數據並追加到當前通信錄的末尾
//參數:is,指定的輸入流
//返回:讀入的記錄數
int AddressList::loadRecords(istream &is)
{
int ori =size();
is >> recList;
return size()-ori;
}
#ifndef H_ADDRESSLIST_H_AAA
#define H_ADDRESSLIST_H_AAA
#include <iostream>
#include <string>
#include "address.h"
using namespace std;
//處理通信錄操作的底層類,包括增加記錄、刪
//除記錄、查詢記錄以及保存和讀取記錄的函數,
//該類不涉及任何關於用戶界面的操作
class AddressList
{
protected:
RecordList recList;// 使用對象成員作為數據成員
public:
typedef RecordList::iterator Iterator;
//向通信錄中添加新的記錄
virtual void addRecord(Record* rec);
//從通信錄中刪除一個記錄
virtual Iterator removeRecord(Iterator it);
//從通訊錄中尋找一個記錄
virtual Iterator findRecord(string pattern,int type,Iterator from);
//將通信錄保存到輸出流中
virtual void saveRecords(ostream& os);
//從輸入流中讀入數據並追加到當前通信錄的末尾
virtual int loadRecords(istream& is);
virtual ~AddressList();
//獲得通信錄中存儲的記錄數
const int size() const
//通信錄是否為空
const bool empty() const
//清除通信錄
virtual void clear()
//獲得通信錄的第一條記錄
Iterator first()
//獲得通信錄超過最後一個記錄之後的迭代器
Iterator pastEnd()
};
#endif //H_ADDRESSLIST_H_AAA
⑺ 如何從其他手機中導入通訊錄
(提示:因各大廠商對Vcard的定義標准都不同,所以也會有無法導入/導出的情況)方法二:在其他設備中綁定雲賬號,如google、小米賬戶(需MIUI系統),將聯系人信息同步,在小米手機系統設置賬戶與同步添加帳戶,之後同步聯系人即可。 方法三:使用藍牙功能將通訊錄的聯系人發送到小米設備中。
⑻ 手機怎麼傳通訊錄到另一個手機
如果您使用的是華為手機,可以使用手機克隆,只需較短時間,便可將舊手機上的基礎數據(如聯系人、日歷、圖片、視頻等)遷移到新手機,實現新舊手機無縫銜接。
一、從 iPhone 遷移數據
1、在新手機上,進入手機克隆應用,或進入設置 > 系統和更新 > 手機克隆,點擊這是新設備,選擇 iPhone。
2、根據屏幕提示,在舊設備下載安裝手機克隆。
3、在舊設備上,進入手機克隆應用,點擊這是舊設備,根據界面提示,通過掃碼或手動連接的方式,將舊設備與新手機建立連接。
4、在舊設備上,選擇要克隆的數據,並根據界面提示完成數據克隆。
提示:手機克隆支持的 iOS 版本可在 App Store 中搜索手機克隆,並進入應用詳情頁面查看。
二、從華為或其他安卓設備遷移數據
1、在新手機上,進入手機克隆應用,或進入設置 > 系統和更新 > 手機克隆,點擊這是新設備,選擇華為或其他安卓。
2、根據界面提示,在舊設備下載安裝手機克隆。
3、在舊設備上,進入手機克隆應用,點擊這是舊設備,根據界面提示,通過掃碼或手動連接的方式,將舊設備與新手機建立連接。
4、在舊設備上,選擇要克隆的數據,點擊開始遷移完成數據克隆。
提示:手機克隆支持的安卓版本可在應用市場搜索手機克隆,並進入應用詳情頁面查看。
⑼ 用C語言設計一個通訊錄系統
/*
* main_tongxunlu.c
*
* Created on: 2011-6-21
* Author: zhanglujin
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct record
{
char name[20]; //姓名
char phone[12]; //電話
char adress[50]; //地址
char postcode[8]; //郵政編碼
char e_mail[20]; //電子郵件。
}student[100]; //假設最大數為100.
//定義全局變數num,表示已經輸入的人數 。
int num; //這里使用數組解決通訊錄的問題,實際上使用鏈表更好。
int menu_select()
{
char s[80];
int a;/*定義整形變數*/
system("cls");
printf("\t\t***********歡迎進入通訊管理界面********\n\n");
printf("\t\t\t0. 輸入記錄\n");
printf("\t\t\t1. 顯示記錄\n");
printf("\t\t\t2. 按姓名查找\n");
printf("\t\t\t3. 按電話號碼查找\n");
printf("\t\t\t4. 插入記錄 \n");
printf("\t\t\t5. 按姓名排序\n");
printf("\t\t\t6. 刪除記錄\n");
printf("\t\t\t7. Quit\n");
printf("\t\t***********************************************\n\n");
do{
printf("Enter you choice(0~7):");
scanf("%s",s);
a=atoi(s);
}
while (a<0 || a>7);
return a;
}
int adser()
{
printf("\t\t\t**************** 請輸入用戶信息 ****************\n");
printf("\t\t\t輸入姓名:\n");
scanf("%s",student[num].name);
printf("\t\t\t輸入電話號碼:\n");
scanf("%s",student[num].phone);
printf("\t\t\t輸入地址:\n");
scanf("%s",student[num].adress);
printf("\t\t\t輸入郵編:\n");
scanf("%s",student[num].postcode);
printf("\t\t\t輸入e-mail:\n");
scanf("%s",student[num].e_mail);
num++;
printf("\t\t\t是否繼續添加?(Y/N):\n");
if(getch()=='y' || getch()=='Y')
adser();
return(0);
}
void list()
{
int i;
system("cls");
if(num!=0)
{
printf("\t\t\t*************** 以下為通訊錄所有信息************\n");
for (i=0;i<num;i++)
{
printf("\t\t\t姓名:%s\n",student[i].name);
printf("\t\t\t電話:%s\n",student[i].phone);
printf("\t\t\t地址:%s\n",student[i].adress);
printf("\t\t\t郵編:%s\n",student[i].postcode);
printf("\t\t\te-mail:%s\n",student[i].e_mail);
if(i+1<num)
{
system("pause");
}
}
printf("\t\t\t************************************************\n");
}
else
printf("\t\t\t通訊錄中無任何紀錄\n");
printf("\t\t\t按任意鍵返回主菜單:\n");
getch(); //這里是無回顯的輸入字元,你輸入的字元不會顯示在屏幕上。
return;
}
int searchbyname()
{
int mark=0;
int i;
printf("\t\t\t***************** 按姓名查找 *******************\n");
char name[20];
printf("\t\t\t請輸入姓名:\n");
scanf("%s",name);
for(i=0;i<num;i++)
{
if (strcmp(student[i].name,name)==0)
{
printf("\t\t\t************* 以下是您查找的用戶信息 ***********\n");
printf("\t\t\t姓名: %s",student[i].name);
printf("\t\t\t電話: %s",student[i].phone);
printf("\t\t\t地址: %s",student[i].adress);
printf("\t\t\te-mail:%s",student[i].e_mail);
printf("\t\t\t************************************************\n");
mark++;
if((i+1)<num)
{
printf("\t\t\t是否繼續查找相同名字的用戶信息:(y/n)\n");
if(getch()=='y' || getch()=='Y')
{
⑽ 如何傳通訊錄
如何傳通訊錄,首先是利用藍牙的方式,傳到這個通訊錄第1步,進入新手機的聯系人點擊菜單,然後點擊導入或導出,點擊從其他手機導入,第2步選擇通過藍牙,這個時候手機就會開啟藍牙的功能,開始搜索其他的設備,第3步打開舊手機的藍牙功能,等待新手機搜索完成後,將新手機會向舊手機發送配送的請求,接下來只需全部同意就可以完成通訊錄的導入,非常的方便,第2種方法,利用iPod同步第1步在舊手機上開啟acl的同步功能,選擇聯系人同步,會自動備份手機中的聯系人,打開新手機登錄自己的賬號,將聯系人同步。睡覺吧