第一篇:c語言 電話簿管理系統(tǒng)
#include “stdio.h” #include “string.h” #define N 20 struct mem { char name[20];
char tel[20];
char wu[20];
char dz[20];}mem[N];void sorttel(struct mem tel[]){
struct mem temp;
int i,j;
FILE *fp;if((fp=fopen(“c: elephone.txt”,“rb”))==NULL){
printf(“不能打開文件n”);} for(i=0;i for(j=0;j if(strcmp(mem[j+1].tel,mem[j].tel)<0) { temp=mem[j]; mem[j]=mem[j+1]; mem[j+1]=temp; } for(i=0;i void sortname(struct mem tel[]){ struct mem temp; int i,j; FILE *fp;if((fp=fopen(“c: elephone.txt”,“rb”))==NULL){ printf(“不能打開文件n”);} for(i=0;i for(j=i+1;j if(strcmp(mem[j].name,mem[i].name)<0) { temp=mem[i]; mem[i]=mem[j]; mem[j]=temp; } for(i=0;i void sor(){int k; do{printf(“--------------------排序菜單-------------------n”); printf(“------------------------n”); printf(“ 1:按號碼排序n”); printf(“ 2:按姓名排序n”); printf(“ 0:退出n”); printf(“------------------------n”); printf(“請輸入0-2選擇功能n”); scanf(“%d”,&k);getchar(); switch(k) { case 1:sorttel(mem);break; case 2:sortname(mem);break; case 0:return; } }while(1);} void add(){ char name[10];char tel[10]; char wu[10]; char dz[10];FILE *fp;if((fp=fopen(“c: elephone.txt”,“a”))==NULL){ printf(“不能打開文件n”); exit(0);} printf(“請輸入姓名”); gets(name); printf(“請輸入電話號碼”); gets(tel); printf(“請輸入工作單位”); gets(wu); printf(“請輸入地址”); gets(dz);printf(“n”); fprintf(fp,“%s %s %s %sn”,name,tel,wu,dz); fclose(fp);} void del(){ FILE *fp; int i=0,n; char name[10]; printf(“請輸入刪除名字”); gets(name); if((fp=fopen(“c: elephone.txt”,“r”))==NULL){ printf(“不能打開文件n”); exit(0);} while(!feof(fp)) { fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); if(strcmp(name,mem[i].name)!=0)i++; } fclose(fp);if((fp=fopen(“c: elephone.txt”,“w”))==NULL){ printf(“不能打開文件n”); exit(0);} for(n=0;n fprintf(fp,“%s %s %s %s”,mem[n].name,mem[n].tel,mem[n].wu,mem[n].dz);fclose(fp);} void dis(){ FILE * fp;int i=0,n;printf(“ 姓名 電話號碼 工作單位 地址n”); if((fp=fopen(“c: elephone.txt”,“r”))==NULL){ printf(“不能打開文件n”); exit(0);} while(!feof(fp)) {fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);i++;} fclose(fp); n=i; for(i=0;i printf(“%-8s%11s%13s%24sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);} void mod(){ FILE * fp;int i=0,n;char name[10];char nn[10];char nt[10];char nwu[10];char ndz[10]; printf(“請輸入要修改的姓名”);gets(name);printf(“請輸入修改后的姓名”);gets(nn);printf(“請輸入修改后的電話號碼”);gets(nt);printf(“請輸入修改后的工作單位”);gets(nwu);printf(“請輸入修改后的地址”);gets(ndz);printf(“n”);if((fp=fopen(“c: elephone.txt”,“r”))==NULL){ printf(“不能打開文件n”); exit(0);} while(!feof(fp)) { fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); if(strcmp(name,mem[i].name)==0) {strcpy(mem[i].name,nn);strcpy(mem[i].tel,nt);strcpy(mem[i].wu,nwu);strcpy(mem[i].dz,ndz);} i++; } fclose(fp);if((fp=fopen(“c: elephone.txt”,“w”))==NULL){ printf(“不能打開文件n”); exit(0);} n=i; for(i=0;i fprintf(fp,“%s %s %s %sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); fclose(fp);} void main(){ int choose; while(1) { printf(“--------------------電話簿管理系統(tǒng)--------------------n”); printf(“------------------------n”); printf(“ 1:添加一個新號碼n”); printf(“ 2:刪除一個號碼n”); printf(“ 3:顯示所有保存的號碼n”); printf(“ 4:修改號碼n”); printf(“ 5:排序n”); printf(“ 6:查詢n”); printf(“ 0:退出n”); printf(“------------------------n”); printf(“請輸入0-6選擇功能n”); scanf(“%d”,&choose);getchar(); if(choose!=0) switch(choose) { case 1:add();break; case 2:del();break; case 3:dis();break; case 4:mod();break; case 5:sor();break; case 6:/*que();break*/; } else exit(0); } } #include |%-10s |%-15s |%-16s|n” #define DATA p->num ,p->name ,p->phonenum p->address #define END “----------------n” #define N 100 int saveflag=0; typedef int Status;typedef struct telebook{ char num[15]; char name[15]; char phonenum[15]; char address[20];}TELEBOOK; void menu(){ system(“cls”); textcolor(13); gotoxy(10,5); cprintf(“ The telephone-book Management System n”); gotoxy(10,8); cprintf(“*****************************************************n”); gotoxy(10,9); cprintf(“* input record display record * n”); gotoxy(10,10); cprintf(“* delete record search record * n”); gotoxy(10,11); cprintf(“* modify record insert record * n”); gotoxy(10,12); cprintf(“* sort record save record * n”); gotoxy(10,13); cprintf(“* 0 input record * n”); gotoxy(10,14); cprintf(“*****************************************************n”);} ,void printheader(){ printf(HEADER1); printf(HEADER2); printf(HEADER3);} void printdata(TELEBOOK pp){ TELEBOOK *p; p = &pp; printf(FORMAT,DATA);} void Disp(TELEBOOK temp[],int n){ int i; if(n==0) { printf(“n======>Not telephone record!n”); getchar(); return; } printf(“nn”); printheader(); i=0; while(i { printdata(temp[i]); i++; printf(HEADER3); } getchar();} void Wrong(){ printf(“nnnnn********Error:input has wrong!press any key to continue*******n”); getchar();} void Nofind(){ printf(“n========>Not find this telephone record!n”);} Status Locate(TELEBOOK temp[],int n,char findmess[],char nameorphonenum[]) /*find the locate*/ { int i=0; if(strcmp(nameorphonenum,“phonenum”)==0) { while(i { if(strcmp(temp[i].phonenum,findmess)==0)return i; i++; } } else if(strcmp(nameorphonenum,“name”)==0) { while(i { if(strcmp(temp[i].name,findmess)==0)return i; i++; } } return-1;} void stringinput(char *t,int lens,char *notice){ char n[255]; do{ printf(notice); scanf(“%s”,n); if(strlen(n)>lens)printf(“n exceed the required length!n”); }while(strlen(n)>lens); strcpy(t,n);} Status Add(TELEBOOK temp[],int n) /*increase record*/ { char ch,num[10]; int i,flag=0; system(“cls”); Disp(temp,n); while(1) { while(1) { stringinput(num,10,“input number(press '0' retrun menu):”); flag = 0; if(strcmp(num,“0”)==0) { return n;} i=0; while(i { if(strcmp(temp[i].num,num)==0) { flag = 1; break; } i++; } if(flag==1) { getchar(); printf(“==>The number %s is existing,try again?(Y/N):”,num); scanf(“%c”,&ch); if(ch=='Y'&&ch=='y')continue; else return n; } else break; } strcpy(temp[n].num,num); stringinput(temp[n].name,15,“Name:”); stringinput(temp[n].phonenum,15,“Telephone:”); stringinput(temp[n].address,15,“Adress:”); saveflag=1; n++; } return n;} void Qur(TELEBOOK temp[],int n)/*search the record*/ { int select; char searchinput[20]; int p = 0; if(n<=0) { system(“cls”); printf(“n====>No telephone record!n”); getchar(); return; } system(“cls”); printf(“n=====>1 Search by name =====>2 Search by telephonenumber!n”); printf(“ Please choice(1,2):”); scanf(“%d”,&select); if(select==1) { stringinput(searchinput,10,“input the existing name:”); p = Locate(temp,n,searchinput,“name”); if(p!=-1) { printheader(); printdata(temp[p]); printf(END); printf(“press any key to return ”); getchar(); } else { Nofind(); getchar(); } } else if(select==2) { stringinput(searchinput,15,“input the exiseing telephone number:”); p = Locate(temp,n,searchinput,“phonenum”); if(p!=-1) { printheader();printdata(temp[p]); printf(END); printf(“press any key to return ”); getchar(); } else { Nofind();getchar();} } else Wrong();getchar();} Status Del(TELEBOOK temp[],int n){ int sel; char findmess[20]; int p=0,i=0; if(n<=0) { system(“cls”); printf(“n======>No telephone!n”); getchar(); return n; } system(“cls”); Disp(temp,n); printf(“ ===>1 Name ====>2 Telephone Please choice[1,2]:”); scanf(“%d”,&sel); if(sel==1) { stringinput(findmess,15,“input the existing name:”); p = Locate(temp,n,findmess,“name”); getchar(); if(p!=-1) { for(i=p+1;i { strcpy(temp[i-1].num,temp[i].num); strcpy(temp[i-1].name,temp[i].name); strcpy(temp[i-1].phonenum,temp[i].phonenum); strcpy(temp[i-1].address,temp[i].address); } printf(“n==>delete successn”); n--; getchar(); saveflag=1; } else Nofind(); getchar(); } else if(sel==2) { stringinput(findmess,15,“input the existing telephone number:”); p = Locate(temp,n,findmess,“phonenum”); getchar(); if(p!=-1) { for(i=p+1;i { strcpy(temp[i-1].num,temp[i].num); strcpy(temp[i-1].name,temp[i].name); strcpy(temp[i-1].phonenum,temp[i].phonenum); strcpy(temp[i-1].address,temp[i].address); } printf(“n======>delete success!n”); n--; getchar(); saveflag = 1; } else Nofind(); getchar(); } else Nofind(); getchar(); return n;} void Modify(TELEBOOK temp[],int n){ char findmess[20]; int p = 0; if(n==0) { system(“cls”); printf(“n=======>No telephone book recorderdn”); getchar(); return; } system(“cls”); printf(“modify telephone book recorder”); Disp(temp,n); stringinput(findmess,10,“input the existing name:”); p = Locate(temp,n,findmess,“name”); if(p!=-1) { printf(“Number : %sn”,temp[p].num); printf(“Name : %sn”,temp[p].name); stringinput(temp[p].name,15,“input new name:”); printf(“Telephone:%s n”,temp[p].phonenum); stringinput(temp[p].phonenum,15,“input new phonenum:”); printf(“Address:%sn”,temp[p].address); stringinput(temp[p].address,30,“input new address:”); printf(“n==========>modify success!n”); getchar(); saveflag = 1; } else { Nofind(); getchar(); } return;} Status Insert(TELEBOOK temp[],int n){ char ch,num[10],snum[10]; TELEBOOK newinfo; int flag = 0,i =0,kkk = 0; system(“cls”); Disp(temp,n); while(1) { stringinput(snum,10,“Please input insert location after the Number:”); flag = 0;i = 0; while(i { if(strcmp(temp[i].num,snum)==0){kkk = i;flag = 1;break;} i++; } if(flag==1)break; else { getchar(); printf(“n=====>The number %s is not existing,try again?(Y/N)”,snum); scanf(“%c”,&ch); if(ch=='Y'||ch=='y')continue; else return n; } } while(1) { stringinput(num,10,“input the new Number:”); i = 0;flag = 0; while(i { if(strcmp(temp[i].num,num)==0){flag = 1;break;} i++; } if(flag==1){ getchar(); printf(“n=======>Sorry,The number %s is existing,try again(Y/N)”,num); scanf(“%c”,&ch); if(ch=='y'||ch=='Y')continue; else return n; } else break; } strcpy(newinfo.num,num); stringinput(newinfo.name,15,“Name:”); stringinput(newinfo.phonenum,15,“Telephone:”); stringinput(newinfo.address,15,“Address:”); saveflag = 1; for(i=n-1;i>kkk;i--) { strcpy(temp[i+1].num,temp[i].num); strcpy(temp[i+1].name,temp[i].name); strcpy(temp[i+1].phonenum,temp[i].phonenum); strcpy(temp[i+1].address,temp[i].address); } strcpy(temp[kkk+1].num,newinfo.num); strcpy(temp[kkk+1].name,newinfo.name); strcpy(temp[kkk+1].phonenum,newinfo.phonenum); strcpy(temp[kkk+1].address,newinfo.address); n++; Disp(temp,n); printf(“nn”); getchar(); return n;} void SelectSort(TELEBOOK temp[],int n){ int i=0,j=0,indexmin; char charflag[10]; TELEBOOK newinfo; if(n<=0) { system(“cls”); printf(“====>Not telephone record!n”); getchar(); return; } system(“cls”); Disp(temp,n); printf(“The order is sorted by number:n”); for(i=0;i { indexmin = i; for(j=i+1;j if(strcmp(temp[i].num,temp[j].num>0)) indexmin = j; if(indexmin!=i) { strcpy(newinfo.num,temp[i].num); strcpy(newinfo.name,temp[i].name); strcpy(newinfo.phonenum,temp[i].phonenum); strcpy(newinfo.address,temp[i].address); strcpy(temp[indexmin].num,newinfo.num); strcpy(temp[indexmin].name,newinfo.name); strcpy(temp[indexmin].phonenum,newinfo.phonenum); strcpy(temp[indexmin].address,newinfo.address); } } Disp(temp,n); saveflag = 1; printf(“n=======>sort complete!n”); getchar(); return;} void Save(TELEBOOK temp[],int n){ FILE *fp; int i = 0; fp = fopen(“c: elephonebook”,“w”); if(fp==NULL) { printf(“n=====>open file error!n”); getchar(); return; } for(i=0;i { if(fwrite(&temp[i],sizeof(TELEBOOK),1,fp)==1) continue; else break; } if(i>0) { getchar();printf(“nn=====>save file comlete,toal save's record is save's record number is:%dn”,i); getchar(); saveflag = 0; } else { system(“cls”); printf(“the current link is empty , no telephone record is saved!n”); getchar(); fclose(fp); } } void main(){ TELEBOOK tele[N]; FILE *fp; int select; char ch; int count=0; fp = fopen(“C: elephonebook”,“a+”); if(fp==NULL) { printf(“n========>can not open file!n”); exit(0); } while(!feof(fp)) { if(fread(&tele[count],sizeof(TELEBOOK),1,fp)==1) count++; } fclose(fp); printf(“n==>open file sucess, the total records number is :%d.n”,count); getchar(); menu(); while(1) { system(“cls”); menu(); printf(“n Please Enter you choice(0-9):”); scanf(“%d”,&select); if(select==0) { if(saveflag==1) { getchar(); printf(“n==>Wether save the modified record to file?(Y/N):”); scanf(“%c”,&ch); if(ch=='Y'||ch=='y') Save(tele,count); } printf(“n===>thank you for useness!”); getchar(); break; } switch(select) { case 1:count=Add(tele,count);break; case 2:system(“cls”);Disp(tele,count);break; case 3:count = Del(tele,count);break; case 4:Qur(tele,count);break; case 5:Modify(tele,count);break; case 6:count = Insert(tele,count);break; case 7:SelectSort(tele,count);break; case 8:Save(tele,count);break; default :Wrong();getchar();break; } } getch();} XXXXXXXXXXXC/C++程序設計實訓 電話簿管理系統(tǒng) 學生姓名 ×××× 學 號 ×××× 所在學院 ×××× 專業(yè)名稱 ×××× 班 級 ×××× 指導教師 XXX XXXXXXXXXXXXXXXX XXXXXXXXXXXX 目 錄 1.前言··················································································································· 3 2.設計目的··········································································································· 3 3.功能描述··········································································································· 3 4.總體設計··········································································································· 4 1、功能模塊設計···························································································· 4 2、數(shù)據(jù)結(jié)構(gòu)設計···························································································· 6 3、函數(shù)功能描述···························································································· 7 5.程序?qū)崿F(xiàn)··········································································································· 7 1、源程序(略)···························································································· 7 2、運行結(jié)果···································································································· 7 6.小結(jié)··················································································································· 9 1.前言 隨著科技的進步和信息產(chǎn)業(yè)的飛速發(fā)展,電話簿成為了現(xiàn)代生活中一個重要的工具。本電話簿管理系統(tǒng)利用計算機對通訊錄進行統(tǒng)一管理,包括添加、修改、查詢記錄等功能,實現(xiàn)通訊錄管理工作的系統(tǒng)化、規(guī)范化和自動化,為人們的工作和生活提供便利。本程序是利用結(jié)構(gòu)數(shù)組實現(xiàn)此電話簿管理系統(tǒng)。 2.設計目的 本程序旨在訓練基本編程能力,了解管理信息系統(tǒng)的開發(fā)流程,熟悉C語言的文件和結(jié)構(gòu)數(shù)組的各種基本操作。本程序中涉及結(jié)構(gòu)體、數(shù)組、文件等方面的知識。通過本程序的訓練,能對C語言的文件操作有一個更深刻的了解,掌握利用數(shù)組存儲結(jié)構(gòu)實現(xiàn)電話簿管理的原理,為進一步開發(fā)出高質(zhì)量的信息管理系統(tǒng)打下堅實的基礎。 3.功能描述 如圖1所示,電話簿管理系統(tǒng)主要利用數(shù)組來實現(xiàn),其數(shù)組元素是結(jié)構(gòu)體類型,整個系統(tǒng)由如下幾大功能模塊組成。 電話簿管理系統(tǒng)輸入記錄模塊查詢記錄模塊更新記錄模塊輸出記錄模塊從文件讀入從鍵盤讀入按姓名查詢按電話查詢修改記錄刪除記錄插入記錄排序記錄輸出至文件輸出至屏幕(1)輸入記錄模塊。輸入記錄模塊主要完成將數(shù)據(jù)存入數(shù)組中的工作。在此電話簿管理系統(tǒng)中,記錄可以從以文本形式存儲的數(shù)據(jù)文件中讀入,也可從鍵盤逐個輸入記錄。記錄由與聯(lián)系人有關的基本信息字段構(gòu)成。當從數(shù)據(jù)文件中讀入記錄時,它就是在以記錄為單位存儲的數(shù)據(jù)文件中,將記錄逐條復制到結(jié)構(gòu)體類型的數(shù)組元素中。 (2)查詢記錄模塊。查詢記錄模塊主要完成在數(shù)組中查找滿足相關條件的記錄。在此電話簿管理系統(tǒng)中,用戶可以按照聯(lián)系人姓名或聯(lián)系人電話號碼在數(shù)組中進行查找。若找到該記錄,則以表格形式打印出此記錄的信息;否則,返回一個-1的值,并打印出未找到該記錄的提示信息。 (3)更新記錄模塊。更新記錄模塊主要完成對記錄的維護。在此電話簿管理系統(tǒng)中,它實現(xiàn)對記錄的修改、刪除、插入和排序操作。一般而言,系統(tǒng)進行了這些操作之后,需要將修改的數(shù)據(jù)存入源數(shù)據(jù)文件。 (4)輸出記錄模塊。輸出記錄模塊主要完成兩個任務。第一,它實現(xiàn)對記錄的存盤操作,即將數(shù)組中各元素中存儲的記錄信息寫入數(shù)據(jù)文件中。第二,它實現(xiàn)將數(shù)組中存儲的記 圖1 電話簿管理系統(tǒng)功能模塊 錄信息以表格的形式在屏幕上打印顯示出來。 4.總體設計 1、功能模塊設計 (1)主控main()函數(shù)執(zhí)行流程 電話簿管理系統(tǒng)執(zhí)行主流程如圖2所示。它先以可讀寫的方式打開文本類型的數(shù)據(jù)文件,此文件默認為“c:telephon”,若該文件不存在,則新建此數(shù)據(jù)文件。當打開文件操作成功后,從文件中一次讀出一條記錄,添加到新建的數(shù)組中,然后執(zhí)行顯示主菜單和進入主循環(huán)操作,進行按鍵判斷。值得一提的是,文本類型文件與二進制類型文件不同,它可以使用Windows自帶的記事本打開并查看到存儲的文件內(nèi)容。 開始以可讀寫的方式打開一個數(shù)據(jù)文件將此文件的內(nèi)容讀出,并存入一個新的結(jié)構(gòu)體類型的數(shù)組中調(diào)用emnu()菜單函數(shù)進入while(1)主循環(huán)輸入0~8中的一個數(shù)值,選擇相應操作輸入是否為0?是否判斷鍵值,調(diào)用相應函數(shù),完成相應功能是否已對修改進行了存盤?否調(diào)用Save()函數(shù),進行寫數(shù)據(jù)文件操作是結(jié)束 圖2 主控函數(shù)執(zhí)行流程圖 在判斷鍵值時,有效的輸入為0-8之間的任意數(shù)值,其他輸入都被視為錯誤按鍵。若輸入為0(即變量select=0),則會繼續(xù)判斷是否在對記錄進行了更新操作之后進行了存盤操作,若未存盤,則全局變量saveflag=1,系統(tǒng)會提示用戶是否需要進行數(shù)據(jù)存盤操作,用戶輸入 Y或y,系統(tǒng)會進行存盤操作。最后,系統(tǒng)執(zhí)行退出電話簿管理系統(tǒng)的操作。 若選擇1,則調(diào)用Add()函數(shù),執(zhí)行增加記錄操作;若選擇2,則調(diào)用Disp()函數(shù),執(zhí)行將記錄以表格形式打印輸出至屏幕的操作;若選擇3,則調(diào)用Del()函數(shù),執(zhí)行刪除記錄操作;若選擇4,則調(diào)用Qur()函數(shù),執(zhí)行查詢記錄操作:若選擇5,則調(diào)用Modify()函數(shù),執(zhí)行修改記錄操作;若選擇6,則調(diào)用lnsert()函數(shù),執(zhí)行插入記錄操作;若選擇7,則調(diào)用SelectSort()函數(shù),執(zhí)行按升序排序記錄的操作;若選擇8,則調(diào)用Save()函數(shù),執(zhí)行將記錄存入磁盤中的數(shù)據(jù)文件的操作:若輸入為0-8之外的值,則調(diào)用Wrong()函數(shù),給出按鍵錯誤的提示。 (2)輸入記錄模塊 輸入記錄模塊主要實現(xiàn)將數(shù)據(jù)存入數(shù)組中。當從數(shù)據(jù)文件中讀出記錄時,它調(diào)用fread(&tele[count],sizeof(TELEBOOK), l,fp)文件讀取函數(shù),執(zhí)行一次從文件中讀取一條電話簿記錄信息存入某個數(shù)組元素中的操作,并且這個操作在main()中調(diào)用執(zhí)行,即在電話簿管理系統(tǒng)進入顯示菜單界面時,該操作己經(jīng)執(zhí)行了。若該文件中沒有數(shù)據(jù),則系統(tǒng)會提示數(shù)組為空,沒有任何記錄可操作,此時,用戶應選擇1,調(diào)用Add()函數(shù),進行記錄的輸入,即完成在數(shù)組中添加元素的操作。 (3)查詢記錄模塊 查詢記錄模塊主要實現(xiàn)在數(shù)組中按聯(lián)系人姓名或電話查找滿足條件的記錄。在查詢函數(shù)Qur()中,為了遵循模塊化編程的原則,對在數(shù)組中進行的記錄定位操作設計成了一個單獨的函數(shù)int Locate(TELEBOOK temp[],int n,char findmess[],char nameorphonenum[]),參數(shù)findmess[]保存要查找的具體內(nèi)容,nameorphonenum[]保存要查找的字段(值為字特串類型的name或phonenum),若找到該記錄,則返回指向該記錄的數(shù)組元素的下標;否則,返回一個-1的值。 (4)更新記錄模塊 更新記錄模塊主要實現(xiàn)了對記錄的修改、刪除、插入和排序操作。因為記錄是以數(shù)組的結(jié)構(gòu)形式存儲的,所以這些操作都在數(shù)組中完成。下面分別介紹這4個功能模塊。 1)修改記錄 修改記錄操作需要對數(shù)組中目標元素的數(shù)據(jù)域中的值進行修改,它分兩步完成。第一步,輸入要修改的聯(lián)系人姓名,輸入后調(diào)用定位函數(shù)Locate()在數(shù)組中逐個對聯(lián)系人姓名字段的值進行比較,直到找到該聯(lián)系人姓名的記錄;第二步,若找到該記錄,修改除記錄編號之外的各字段的值,并將存盤標記變saveflag置1,表示已經(jīng)對記錄進行了修改,但還未執(zhí)行存盤操作。 2)刪除記錄 刪除記錄操作完成刪除指定聯(lián)系人姓名或電話號碼的記錄,它也分兩步完成。第一步,輸入要修改的聯(lián)系人姓名或電話號碼,輸入后調(diào)用定位函數(shù)Locate()在數(shù)組中逐個對聯(lián)系人姓名或電話號碼字段的值進行比較,直到找到該聯(lián)系人姓名或電話號碼的記錄,返回指向該記錄的數(shù)組元素下標;第二步,若找到該記錄,則從該記錄所在元素的后續(xù)元素起,依次向前移一個元素位置,有值的數(shù)組元素個數(shù)減1,其具體過程如圖3所示,在刪除了數(shù)組元素A2后,數(shù)組元素A3和A4向前移動了一個位置 A0刪除A2前A0刪除A2后A1A1A2A3A3A4A4 圖3 數(shù)組中刪除記錄示意圖 3)插入記錄 插入記錄操作完成在指定記錄編號的隨后位置插入新的記錄。首先,它要求用戶輸入某個記錄編號,新的記錄將插入在該記錄之后、然后,提示用戶輸入一條新的記錄的信息,這些信息保存在新結(jié)構(gòu)體類型的數(shù)組元素的各字段中;最后,將該元素插入在已經(jīng)確認位置的記錄編號之后。它的具體插入執(zhí)行過程如圖4所示,新元素B1準備插入至已有5個元素的數(shù)組中,插入位置為元素A2之后。這具體過程為:先調(diào)用Locate()函數(shù)找到A2在數(shù)組中的下標,從A4開始,往后移動,至A2停止移動,然后在原A3的位置插入元素B1。 插入B1A0插入B1前A0插入B1后A1A2B1A3A4A1A2A3A4 圖4 數(shù)組中插入記錄示意圖 4)排序記錄 選擇排序法也屬于內(nèi)部排序法中的一種,它是運用字段值比較后,從欲排序的數(shù)組元素中,按指定規(guī)則選出其字段值最小的元素,并依原則交換數(shù)組元素位置后,更新欲排序的數(shù)組元素,以達到排序的目的。這里我們采用這種排序法來實現(xiàn)按照記錄編號或聯(lián)系人姓名字段的值從低到高對記錄進行升序排序。對按照記錄編號排序方式而言,我們將按其數(shù)值大小來排序;對按照聯(lián)系人姓名排序方式而言,我們將按其姓名字符ASCII碼的大小來排序。 選擇排序的方法為:從欲排序的n個數(shù)組元素中,以線性查找的方式找出最小的元素和第一個元素交換,再從剩下的(n-1)個數(shù)組元素中,找出最小的元素和第二個元素交換,以此類推,直到所有元素均已排序完成。 將相鄰的兩個數(shù)組元素的電話簿字段的值進行比較,若左邊的值小于右邊的值,則將此兩個元素的值進行交換;若左邊的值大于等于右邊的值,則此兩個值的位置不變。右邊的值繼續(xù)和下一個值做比較,重復此動作,直到比較到最后一個值,最終實現(xiàn)了升序排序。選擇排序法是最簡單的排序法,但選擇排序法所需的排序時間比其他排序法長。 (5)輸出記錄模塊 當把記錄輸出至文件時,調(diào)用fwrite(&temp[i],sizeof(TELEBOOK),L,fp)函數(shù),將數(shù)組元素temp[i ]中各字段的值,寫入文件指針fp所指的文件:當把記錄輸出至屏幕時,調(diào)用void Disp()函數(shù),將數(shù)組中存儲的記錄信息以表格的形式在屏幕上打印出來。 2、數(shù)據(jù)結(jié)構(gòu)設計 本程序定義了結(jié)構(gòu)體telebook,用于存放聯(lián)系人的基本信息。這里僅有3 個與聯(lián)系人有關的字段,讀者可以按照需要擴展相關字段。 typedef struct telebook { char num[4];char name[10];char phonenum[15];char address[20];}TELEBOOK;其各字段的值的含義如下: ? num[4]:保存記錄編號。? name[10]:保存聯(lián)系人姓名。? phonenum[15]:保存聯(lián)系人的電話號碼。? address[20]:保存聯(lián)系人地址。 3、函數(shù)功能描述 1)printheader()函數(shù)原型:void printheader()printheader()函數(shù)用于在表格形式顯示記錄時,打印輸出表頭信息。2)printdata()函數(shù)原型:void printdata(TELEBOOK pp)printdatan()數(shù)用于以表格顯示的方式,打印輸出單個數(shù)組元素pp中的記錄信息。3)Disp()函數(shù)原型:void Disp(TELEBOOK temp[],int n)Disp()函數(shù)用于顯示temp數(shù)組中存儲的n條記錄,內(nèi)容為telebook結(jié)構(gòu)中定義的內(nèi)容。其余函數(shù)功能描述省略,請同學們在自己寫的時候?qū)懲暾?/p> 5.程序?qū)崿F(xiàn) 1、源程序(略) 2、運行結(jié)果 (1)主界面 圖5 主界面 當用戶剛進入電話簿管理系統(tǒng)時,其主界面如圖5所示。此時,系統(tǒng)己經(jīng)將“c:telephon”文件打開,若文件不為空,則將數(shù)據(jù)從文件中逐條記錄讀出,并寫入數(shù)組中。用戶可選擇0-8之間的數(shù)值,調(diào)用相應功能進行操作。當輸入為0時,退出此管理系統(tǒng)。 (2)輸入記錄 當用戶輸入1并按Enter鍵后,即可進入數(shù)據(jù)輸入界面。其輸入記錄過程如圖6所示,這里輸入了3條記錄。當用戶輸入為0的記錄編號時,它會結(jié)束輸入過程,返回到主菜單界面。 (3)顯示記錄 當用戶執(zhí)行了輸入記錄或已經(jīng)從數(shù)據(jù)文件中讀取了記錄之后,即可輸入2并按Enter鍵,查看當前數(shù)組中的記錄情況,如圖7所示,此時表中有3條記錄。 圖6 輸入記錄 圖7 顯示記錄 (4)刪除記錄 當用戶輸入3并按Enter鍵后,即可進入記錄刪除界面。其刪除記錄過程如圖8所示,這里按聯(lián)系人姓名刪除了一條姓名為A1的記錄。 圖8 刪除記錄 (5)查找記錄 當用戶輸入4并按Enter鍵后,即可進入記錄查找界面。其查找記錄過程如圖9所示,8 用戶可按姓名或電話號碼進行記錄查找。 圖9 查找記錄 (6)修改記錄 當用戶輸入5并按Enter鍵后,即可進入記錄修改界面。其修改記錄過程如圖10所示,這里修改了姓名為a2的聯(lián)系電話和地址字段。 圖11 修改記錄 (7)插入記錄 當用戶輸入6并按Enter鍵后,即可進入記錄插入界面。其插入過程如圖11所示,這里在記錄編號為3的記錄后插入了一條記錄編號為5的記錄。 (8)排序記錄 當用戶輸入7并按Enter鍵后,即可進入記錄排序界面。用戶可以選擇按照記錄編號或聯(lián)系人姓名進行排序,圖12為按記錄編號進行記錄升序排序的結(jié)果。 (9)保存記錄 當用戶輸入8并按Enter鍵后,即可進入記錄保存界面。其保存結(jié)果提示信息如圖13所示,這里有3條記錄已經(jīng)存儲至磁盤數(shù)據(jù)文件c:telephon中。 6.小結(jié) 本文介紹了電話簿管理系統(tǒng)的設計思路及其編程實現(xiàn),重點介紹了功能模塊的設計原理和利用數(shù)組存儲結(jié)構(gòu)實現(xiàn)電話簿管理的過程。通過本程序的開發(fā)使我熟悉C語言下的文件和數(shù)組操作,了解管理信息系統(tǒng)(MIS)的開發(fā)原理,并注意利用選擇排序法來實現(xiàn)數(shù)組元素 排序的特點。 利用本電話簿管理系統(tǒng)可以對通訊錄進行日常維護和管理。 C++課程設計 ————簡單電話簿管理 報告內(nèi)容: 一.程序功能簡介 二.課程設計要求 三.課程設計說明 四.參考數(shù)據(jù)結(jié)構(gòu) 五.具體功能及實現(xiàn)六.源程序及注釋 七.感想與心得 學號:050930109 姓名:陳浩 指導老師:臧洌 日期:2010年6月20日 一.程序功能簡介 一個基本的電話簿管理程序,具有插入、刪除、顯示、修改和查詢聯(lián)系人電話碼的功能。主菜單如右圖所示,每個菜單項功能如下: 1.增加記錄菜單:請輸入用戶姓名,如果該用戶已經(jīng)存在則添加失敗,否則,輸入用戶的電話號碼,進行添加。 2.修改某條記錄:請輸入用戶姓名,如果沒有該用戶顯示“ 該用戶不存在”信息,否則,輸出原電話號碼,然后輸入新的電話號碼,進行修改。3.刪除記錄: 輸入用戶姓名,進行刪除(刪除時要進行確認)。4.查詢:輸入用戶姓名,進行查找。 5.排序:根據(jù)子菜單,選擇不同的排序方式。6.顯示:逐屏顯示(每屏顯示10條記錄)。7.全刪:進行全部刪除(要確認)。 二.課程設計要求 請選擇以下功能 1-增加記錄 2-修改記錄 3-刪除記錄 4-查找(按姓名)5-排序 6-顯示記錄 1.用漢化菜單實現(xiàn)。 2.提供按姓名查詢電話號碼的功能。 3.顯示功能(提供逐屏顯示的功能,每屏顯示10條記錄)。4.刪除和修改時要進行確認。 5.將電話簿記錄以文件的形式存在磁盤上;每次操作時將電話簿調(diào)出,操作完畢后存盤。 三.課程設計說明 1.程序采用數(shù)組數(shù)據(jù)結(jié)構(gòu)實現(xiàn)。2.用類來實現(xiàn)數(shù)據(jù)的封裝。 四.參考數(shù)據(jù)結(jié)構(gòu) 1.“電話簿”稱為用戶信息表,用數(shù)組實現(xiàn)。用戶信息表由若干用戶信息構(gòu)成,每個用戶信息是一個數(shù)組元素。 2.“user.txt”是一個文件,用于保存“用戶信息表”中的信息。當系統(tǒng)啟動時,從該文件中讀入信息,當退出系統(tǒng)時,將“用戶信息表”中的信息寫到該文件中。該文件中信息存放形式如下: ZhangHong 5221369 LiLi 84891112 ZhaoQiang 5221498 其中 ??name(姓名)占20列 ??phone_num(電話號碼)占12列 五.具體功能及實現(xiàn) 定義Fphone類,通過其私有成員數(shù)組name[20]和phone[12]分別記錄用戶姓名與電話號碼,定義UserDatabase類記錄用戶信息,通過公有成員函數(shù)實現(xiàn)對數(shù)據(jù)的操作。 六.源程序及注釋 #include //用戶信息類的定義 { char name[M]; // 姓名 char phone_num[N]; //電話號碼 public: Fphone(char *na=“",char *ph=”“){ strcpy(name,na); strcpy(phone_num,ph);} char*getname(); //獲取姓名 char*getphone_num(); //獲取電話號碼 void setname(char*a); //設置姓名 void setphone_num(char*a);//設置電話號碼 void disp(); //顯示用戶信息 };char *Fphone::getname() { return name;} char *Fphone::getphone_num(){ return(phone_num);} void Fphone::setname(char *a){ strcpy(name,a); } void Fphone::setphone_num(char*a){ strcpy(phone_num,a);} void Fphone::disp(){ cout<<”姓名:“< //用戶信息表中的元素個數(shù),即當前記錄總數(shù) int Maxu; //最多的用戶 Fphone *user; //指向用戶信息表的指針 public: UserDatabase() //構(gòu)造函數(shù),初始化用戶信息表,將user.txt文件中數(shù)據(jù)讀到User[]中 { nElem=0; Maxu=50; user=new Fphone[Maxu]; fstream in; in.open(”user.txt“,ios::in|ios::nocreate);//打開文件 for(int i=0;(!in.eof());i++) { in>>user[i].getname();in>>user[i].getphone_num(); nElem++; } in.close();} ~UserDatabase() //析構(gòu)函數(shù),將user[]寫入user.txt文件中 { fstream out; Fphone *p=NULL; p=user; out.open(”user.txt“,ios::out,filebuf::sh_none); for(int i=0;i { out< <<((p+i)->getphone_num())< }delete []user; out.close();} void clear() //刪除所有用戶信息 { char ord; cout<<”確定刪除嗎?(選擇:[y]是;[n]否)aa“< do { cin>>ord; if(ord=='N'||ord=='n')return; else if(ord=='Y'||ord=='y') { delete[Maxu]user; } user=0;cout<<”刪除成功啦!“< user->setname(na); user->setphone_num(ph_num); } else if(nElem { if(strcmp((user+i)->getname(),na)>0) {(user+i+1)->setname(((user+i)->getname())); (user+i+1)->setphone_num(((user+i)->getphone_num())); } else break; } (user+i+1)->setname(na); (user+i+1)->setphone_num(ph_num); nElem++;} else cout <<”空間不足,無法添加!“< //返回user指針 { return(user);} void delete_record(Fphone *p,int k) //刪除用戶信息 { char con;cout<<”確認刪除?(Y/N)“;cin>>con;if(con=='N'||con=='n')return;else if(con=='Y'||con=='y'){ for(int i=k;i { user[i]=user[i+1];} nElem--; cout<<”已刪除!“< return;} else { cout<<”輸入錯誤!“< system(”pause“); return;} } void modify_record(Fphone *p,char*ph_num)//修改用戶信息 { p->setphone_num(ph_num);} Fphone *query(char *na) //按姓名查找 順序查找,這里也可以用折半 { Fphone *p=user; int i=0; while(1) { if(strcmp(p->getname(),na)==0) return p; p++; if(i++==nElem) break;} return NULL;} void sorta_name()//按姓名升序排序 插入排序法 { Fphone temp;int i,j;for(i=1;i for(j=i-1;j>=0&&(strcmp(temp.getname(),user[j].getname())<0);j--) { strcpy(user[j+1].getname(),user[j].getname()); strcpy(user[j+1].getphone_num(),user[j].getphone_num()); } strcpy(user[j+1].getname(),temp.getname()); strcpy(user[j+1].getphone_num(),temp.getphone_num());} } void sorta_phonenum()//按電話號碼升序排序 選擇排序法 { int i,j,p;Fphone temp;for(i=0;i for(j=i+1;j if(strcmp(user[j].getphone_num(),user[p].getphone_num())<0)p=j; if(p!=i) { strcpy(temp.getname(),user[p].getname()); strcpy(temp.getphone_num(),user[p].getphone_num()); strcpy(user[p].getname(),user[i].getname()); strcpy(user[p].getphone_num(),user[i].getphone_num()); strcpy(user[i].getname(),temp.getname()); strcpy(user[i].getphone_num(),temp.getphone_num()); } } } void sort_name()//按姓名降序排序,將排成升序的對象數(shù)組逆向放置 { Fphone temp;int i,m=(nElem+1)/2;for(i=0;i strcpy(temp.getphone_num(),user[i].getphone_num()); strcpy(user[i].getname(),user[nElem-i-1].getname()); strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num()); strcpy(user[nElem-i-1].getname(),temp.getname()); strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());} } void sort_phonenum()//按電話號碼降序排序 冒泡排序法 { Fphone temp;int i,m=(nElem+1)/2;for(i=0;i strcpy(temp.getphone_num(),user[i].getphone_num()); strcpy(user[i].getname(),user[nElem-i-1].getname()); strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num()); strcpy(user[nElem-i-1].getname(),temp.getname()); strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());} } void disp(){ int i,n=0;cout< cout< < n++; if(n%10==0) { system(”pause“); system(”cls“); } } cout< 請選擇以下功能:“< 1-增加記錄“< 2-修改記錄“< 3-刪除記錄“< 4-查找(按姓名)“< 5-排序“< 6-顯示記錄“< 7-全刪“< 0-退出“< 輸入選擇:“< “< “< 歡迎使用電話簿管理系統(tǒng) “< 祝您使用愉快 “< “< system(”cls“); menu(); int k; cin>>k; switch(k) { case 1: { system(”cls“) cout<<”*****************************************“< cout<<” 增加記錄 “< Fphone *t=NULL; char w; do { cout<<”請輸入您要增加的用戶的姓名“; cin>>na; t=(s.query(na)); if(t) { cout<<”用戶已經(jīng)存在,添加失敗!!“< else { cout<<”請輸入用戶的電話號碼“; cin>>ph_num; s.add_record(na,ph_num);cout<<”您添加的信息為:“;cout<<”姓名:“< } cout<<”是否繼續(xù)?(Y or N)“< cin>>w;} while(w=='Y');break;} case 2: { system(”cls“); cout<<”***************************************“< 修改記錄 “< char na[M],ph_num[N]; Fphone *t=NULL; char w; do { cout<<”請輸入您要修改的用戶的姓名“; cin>>na; t=s.query(na); if(!t) cout<<”沒有該用戶!“< else { cout<<”該用戶原號碼為:“< cout<<”請輸入新的電話號碼“; cin>>ph_num; s.modify_record(t,ph_num); cout<<”成功修改“< } cout<<”是否繼續(xù)?(Y or N)“< cin>>w; } while(w=='Y'); break;} case 3: { system(”cls“); cout<<”********************************************“< 刪除記錄 “< cout<<”************** ***************************“< char w; char na[M]; int k; Fphone *p; do { cout<<”請輸入您要刪除的用戶的姓名“; cin>>na; p=s.query(na); if(p==0) cout<<”沒有該用戶!“< else {(*p).disp(); k=p-s.getuser(); s.delete_record(p,k); } cout<<”是否繼續(xù)?(Y or N)“< cin>>w; } while(w=='Y'); break;} case 4: { system(”cls“); cout<<”*********************************“< cout<<” 查詢記錄 “< cout<<”**********************************“< char na[M];int p=1; Fphone *t=NULL; char w; do { cout<<”請輸入您要查詢的用戶的姓名“; cin>>na; t=s.query(na); if(t) { cout<<”姓名:“< cout<<”電話號碼:“< } else cout<<”對不起,沒有此人信息!“< cout<<”是否繼續(xù)?(Y or N)“< cin>>w;} } case 5: { while(w=='Y');break;system(”cls“); cout<<” 請選擇排序方式 “< cout<<” 1.按姓名(升序) “< cout<<” 2.按電話號碼(升序) “< cout<<” 3.按姓名(降序) “< cout<<” 4.按電話號碼(降序) “< cout<<” 請輸入你的選擇: “< int k; cin>>k; switch(k) { case 1: s.sorta_name(); cout<<”排序完成“< system(”cls“); break; case 2: s.sorta_phonenum(); cout<<”排序完成“< system(”cls“); break; case 3: s.sort_name(); cout<<”排序完成“< system(”cls“); break; case 4: s.sort_phonenum(); cout<<”排序完成“< system(”cls“); break; } } case 6: { system(”cls“); cout<<”*****************************************“< cout<<” 顯示記錄 “< cout<<”*****************************************“< s.disp(); system(”pause“);break; } } } case 7: { system(”cls“); cout<<”您確定要刪除所有記錄嗎?(Y or N)“< char q; cin>>q; if(q=='Y'||q=='y') { cout<<”*********************************“< cout<<” 全部刪除記錄 “< cout<<”*********************************“< s.clear(); } else break; system(”pause“); break;} case 0: { system(”cls“); cout<<”謝謝使用,再見!“< exit(0);} default: cout<<”不存在該選擇,請重新輸入要進行的操作:“< system(”pause"); break;} 七.感想與心得 1.電話簿管理程序較長,算法比較復雜,調(diào)試的過程中遇到了各種各樣的問題。各種各樣的小錯誤尋找起來十分困難。在今后編寫程序時應當隨編隨找錯。 2.課設讓我們把這一學期所學的C++知識得到了很好的應用,開拓了我們的思路,所謂溫故而而知新,這次課設也讓我們對以前的知識有了一個全面的回顧,加深了對已學知識的理解。 3.課設過程艱辛,花費時間很長,需要很強的耐力和信心。而這也是對我們的一次考驗,養(yǎng)成了堅持不懈和吃苦耐勞的精神。總之,C++課設讓我們學到了很多,也收獲了很多,這必將成為我人生中的一個深刻的回憶。 #include struct //定義結(jié)構(gòu)組 { char num[N]; char name[20]; char tele[15]; char add[20]; char emal[15];}STUDENT;STUDENT stu[N];int Menu(); //聲明函數(shù) int Key();int Get(STUDENT stu[N]);void Show(STUDENT stu[],int n);int Del(STUDENT stu[],int n);int find(STUDENT stu[],int n);int find2(STUDENT stu[],int n); void Search(STUDENT stu[],int n);void Search2(STUDENT stu[],int n);void Modify(STUDENT stu[],int n);void Sort(STUDENT stu[],int n);int Add(STUDENT stu[],int n);int Exit(); /****************************************其它函************************************/ int Menu(){int a;printf(“t ****************************************************n”);printf(“t *********** *************nn”);printf(“t ********* ☆歡迎親使用本電話簿管理程序☆ *********nn”);printf(“t *********** *************n”);printf(“t ****************************************************nn”); printf(“*******************************主菜**********************************n”);printf(“ttt 0.輸入信息n”);printf(“ttt 1.顯示信息n”);printf(“ttt 2.刪除信息n”);printf(“ttt 3.按人名查找信息n”);printf(“ttt 4.按電話號碼查找信息n”);printf(“ttt 5.修改信息n”);printf(“ttt 6.添加信息n”);printf(“ttt 7.按人名排序信息n”); 數(shù) 單 printf(“ttt 8.退出信息n”);do {printf(“ttt 請輸入0-8n”);scanf(“%d”,&a);} while(a<0||a>8);return a;} int Key() //口令驗證函數(shù) {char keyput[20];int keynum=3;for(keynum=3;keynum>0;keynum--){ if(keynum==0) return(0); printf(“請正確輸入口令(201314)(你還有%d次機會):”,keynum); scanf(“%s”,keyput); if(!strcmp(keyput,“201314”)) return(1); } } int Get(STUDENT stu[N]) //輸入信息 {int i,n; printf(“n請輸入要加入用戶的人數(shù) n”); scanf(“%d”,&n); printf(“其輸入信息 n”); for(i=0;i {printf(“請輸入編號:n”); scanf(“%s”,stu[i].num);printf(“n請輸入姓名n:”); scanf(“%s”,stu[i].name); printf(“ n請輸入電話:n”);scanf(“%s”,stu[i].tele);printf(“ n請輸入地址:n”);scanf(“%s”,stu[i].add);printf(“ n請輸入emal:n”);scanf(“%s”,stu[i].emal);printf(“編號:%sn姓名:%sn電話:%sn位:%snemal:%sn”,stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal);} return n;} void Show(STUDENT stu[],int n) //顯示信息 {int i; 工 作 單for(i=0;i find(STUDENT stu[],int n) //人名查找函數(shù) {int i; char s[20]; printf(“請輸入的姓名n”); scanf(“%s”,s); for(i=0;i if(strcmp(s,stu[i].name)==0)return i; return i; } int find2(STUDENT stu[],int n) //電話號碼查找函數(shù) {int i; char s[20]; printf(“請輸入的電話號碼n”); scanf(“%s”,s); for(i=0;i if(strcmp(s,stu[i].tele)==0)return i; return i; } int Del(STUDENT stu[],int n) //刪除信息 {int i,j,ch;i=find(stu,n);if(i>n-1) {printf(“沒有找到要刪除的記錄,是否重新輸入1/0n”);scanf(“%d”,&ch);if(ch==1)n=Del(stu,n);} else {printf(“編號: %sn 姓 名 : %sn 電 話 : %sn位:%snemal:%sn”,stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal);printf(“是否確定要刪除:%d是%2d否n”,1,0);} scanf(“%d”,&ch); if(ch==1) {for(j=i+1;j {strcpy(stu[j-1].name,stu[j].name); strcpy(stu[j-1].tele,stu[j].tele); strcpy(stu[j-1].add,stu[j].add); strcpy(stu[j-1].emal,stu[j].emal);} n--; 工作單 工作單 printf(“刪除成功n”);} return n;} void Search(STUDENT stu[],int n) //按人名查找信息 {int i,ch;i=find(stu,n);if(i>n-1) {printf(“沒有找到要查找的信息,是否重新輸入1/0n”); scanf(“%d”,&ch);if(ch==1)Search(stu,n);} else printf(“編號: %sn 姓 名 : %sn 電 話 : %sn位:%snemal:%sn”,stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal);} void Search2(STUDENT stu[],int n) //按電話號碼查找信息 {int i,ch;i=find2(stu,n);if(i>n-1) {printf(“沒有找到要查找的信息,是否重新輸入1/0n”); scanf(“%d”,&ch);if(ch==1)Search2(stu,n);} else printf(“編號:%sn姓名:%sn電話:%sn位:%snemal:%sn”,stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal);} void Modify(STUDENT stu[],int n) //修改信息 {int i,ch;i=find(stu,n);if(i>n-1) {printf(“沒有找到要修改的信息,是否重新輸入1/0n”); scanf(“%d”,&ch);if(ch==1)Modify(stu,n);} else {printf(“編號: %sn 姓 名 : %sn 電 話 : %sn位:%snemal:%sn”,stu[i].num,stu[i].name,stu[i].tele,stu[i].add,stu[i].emal); printf(“是否確定要修改:%d是%2d否n”,1,0);} scanf(“%d”,&ch); if(ch==1) {printf(“編號:n”); scanf(“%s”,stu[i].num); printf(“n姓名n:”); scanf(“%s”,stu[i].name); printf(“ n電話:n”); scanf(“%s”,stu[i].tele); 工 作 單 工 作 單 工 作 單 printf(“ n工作單位:n”); scanf(“%s”,stu[i].add); printf(“ nemal:n”); scanf(“%s”,stu[i].emal); printf(“修改成功n”);}} int Add(STUDENT stu[],int n) //添加信息 {int i,j; if(N<=n+1) printf(“儲存已滿”); else {printf(“請輸入要插入的位置n”);scanf(“%d”,&i); for(j=n-1;j>=i;j--) {strcpy(stu[j+1].name,stu[j].name); strcpy(stu[j+1].tele,stu[j].tele); strcpy(stu[j+1].add,stu[j].add); strcpy(stu[j+1].emal,stu[j].emal); } printf(“其輸入要插入的信息 n”); printf(“編號:n”); scanf(“%s”,stu[i].num); printf(“n請輸入姓名:n”); scanf(“%s”,stu[i].name); printf(“ n請輸入電話:n”); scanf(“%s”,stu[i].tele);printf(“ n請輸入工作單位:n”);scanf(“%s”,stu[i].add);printf(“ n請輸入emal:n”);scanf(“%s”,stu[i].emal); printf(“添加成功”);n++;} return n; } void Sort(STUDENT stu[],int n){STUDENT tmp;int i,j;for(i=0;i stu[j+1]=tmp;} for(i=0;i int Exit() //退出通訊錄 {int n;n=-1;printf(“************************************************************************”);return n;} int main() //主函數(shù) {int go;go=Key();if(go==1){int length,m=0; while(m>=0) {switch(Menu()) { case 0:length=Get(stu);break; case 1:Show(stu,length);break; case 2:length=Del(stu,length);break; case 3:Search(stu,length);break; case 4:Search2(stu,length);break; case 5:Modify(stu,length);break; case 6:length=Add(stu,length);break; case 7:Sort(stu,length);break; case 8:m=Exit();break; default:printf(“輸入錯誤,請重新輸入n”);} }return 0;} else printf(“三次密碼錯誤,程序不能運行!”);} 歡 迎 再 次 工作單 使用第二篇:電話簿管理系統(tǒng)
第三篇:C++程序設計—電話簿管理系統(tǒng)
第四篇:C++課程設計電話簿管理
第五篇:電話簿管理程序