㈠ 求一c語言編寫的程序要求如下: 1.電話簿管理系統(用到結構體和指針) 2.結構體內包括姓名和電話
請根據需要進行適當修改
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
structrecord
{
charid[10];
charname[20];
charphone[20];
}Contacts[500];
intnum=0;//外部變數num為文件中的紀錄數
FILE*fp;
voidmainmenu();//主菜單
voidnewrecord();//新添紀錄
voidsearchmenu();//查詢菜單
voidsearchbyid();//按編號查詢
voidsearchbyname();//按姓名查詢
voidsearchbyphone();//按電話查詢
voiddeletemenu();//刪除菜單
voiddeleteall();//刪除所有
voiddeleteone();//刪除單個
voidshowall();//顯示所有
voidreadfromfile();//讀取文件
voidwritetofile();//寫入文件
voiddeletebyid();//按編號刪除
voiddeletebyname();//按姓名刪除
voidlistbyid();//按編號排序
voidlistbyname();//按姓名排序
voidlistmenu();//排序菜單
voidmain()
{
readfromfile();
while(1)
{
mainmenu();
}
}
voidreadfromfile()//從文件導入
{
if((fp=fopen(".\Contacts.dat","rb"))==NULL)
{
printf(" 通訊錄文件不存在");
if((fp=fopen(".\Contacts.dat","wb"))==NULL)
{
printf(" 建立失敗");
exit(0);
}
else
{
printf(" 通訊錄文件已建立");
printf(" 按任意鍵進入主菜單");
getch();
return;
}
exit(0);
}
fseek(fp,0,2);/*文件位置指針移動到文件末尾*/
if(ftell(fp)>0)/*文件不為空*/
{
rewind(fp);/*文件位置指針移動到文件開始位置*/
for(num=0;!feof(fp)&&fread(&Contacts[num],sizeof(structrecord),1,fp);num++);
printf(" 文件導入成功");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
printf(" 文件導入成功");
printf(" 通訊錄文件中無任何紀錄");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
voidmainmenu()//主菜單
{
charchoic;
system("cls");
printf(" ********************主菜單********************");
printf(" ***********1-新添紀錄2-查詢菜單************");
printf(" ***********3-刪除菜單4-記錄排序************");
printf(" ***********5-保存退出6-不保存退出***********");
printf(" ************************************************");
printf(" 請選擇:");
choic=getch();
switch(choic)
{
case'1':newrecord();break;
case'2':searchmenu();break;
case'3':deletemenu();break;
case'4':listmenu();break;
case'5':writetofile();break;
case'6':exit(0);
default:mainmenu();
}
}
voidsearchmenu()//查詢菜單
{
charchoic;
system("cls");
printf(" *******************查詢菜單*******************");
printf(" **********1-顯示所有2-按編號查詢************");
printf(" **********3-按姓名查詢4-按電話查詢************");
printf(" **********5-返回主菜單************");
printf(" ************************************************");
printf(" 請選擇:");
choic=getch();
switch(choic)
{
case'1':showall();break;
case'2':searchbyid();break;
case'3':searchbyname();break;
case'4':searchbyphone();break;
case'5':mainmenu();break;
}
}
voiddeletemenu()//刪除菜單
{
charchoic;
if(num==0)
{
printf(" 對不起,文件中無任何紀錄");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
system("cls");
printf(" *******************刪除菜單*******************");
printf(" ***********1-刪除所有2-刪除單個***********");
printf(" ***********3-返回主菜單***********");
printf(" ************************************************");
printf(" 請選擇:");
choic=getch();
switch(choic)
{
case'1':deleteall();break;
case'2':deleteone();break;
case'3':mainmenu();break;
default:mainmenu();break;
}
}
voiddeleteall()//刪除所有
{
printf(" 確認刪除?(y/n)");
if(getch()=='y')
{
fclose(fp);
if((fp=fopen("Contacts.bin","wb"))==NULL)
{
printf(" 不能打開文件,刪除失敗");
readfromfile();
}
num=0;
printf(" 紀錄已刪除,按任意鍵返回主菜單");
getch();
return;
}
else
return;
}
voiddeletebyname()//按姓名刪除
{
inta=0;
intfindmark=0;
intj;
intdeletemark=0;
inti;
charname[20];
printf(" 請輸入要刪除聯系人的姓名:");
scanf("%s",name);
for(i=a;i<num;i++)
{
if(strcmp(Contacts[i].name,name)==NULL)
{
printf(" 以下是您要刪除的聯系人紀錄:");
findmark++;
printf(" ________________________________");
printf(" 編號:%s",Contacts[i].id);
printf(" 姓名:%s",Contacts[i].name);
printf(" 電話:%s",Contacts[i].phone);
printf(" ________________________________");
printf(" 是否刪除?(y/n)");
if(getch()=='y')
{
for(j=i;j<num-1;j++)/*紀錄移動,從Contacts數組中刪除之*/
Contacts[j]=Contacts[j+1];
num--;
deletemark++;
printf(" 刪除成功");
if((i+1)<num)
{
printf(" 是否繼續刪除相同姓名的聯系人信息?(y/n)");
if(getch()=='y')
{
a=i;
continue;
}
}
printf(" 是否繼續刪除?(y/n)");
if(getch()=='y')
deletebyname();
return;
}
if((i+1)<num)
{
printf(" 是否繼續刪除相同姓名的聯系人信息?(y/n)");
if(getch()=='y')
{
a=i;
continue;
}
}
}
else
continue;
}
if((deletemark==0)&&(findmark==0))
{
printf(" 沒有該聯系人的紀錄");
printf(" 是否繼續刪除?(y/n)");
if(getch()=='y')
deletebyid();
return;
return;
}
elseif(findmark!=0)
{
printf(" 沒有重名信息");
printf(" 沒有該聯系人的紀錄");
printf(" 是否繼續刪除?(y/n)");
if(getch()=='y')
deletebyid();
return;
return;
}
}
voiddeletebyid()//按編號刪除
{
inti,j;
intdeletemark=0;
charid[20];
printf(" 請輸入要刪除聯系人編號:");
scanf("%s",id);
if(num==0)
{
printf(" 對不起,文件中無任何紀錄");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
for(i=0;i<num;i++)
{
if(strcmp(Contacts[i].id,id)==NULL)
{
printf(" 以下是您要刪除的聯系人紀錄:");
printf(" 編號:%s",Contacts[i].id);
printf(" 姓名:%s",Contacts[i].name);
printf(" 電話:%s",Contacts[i].phone);
printf(" 是否刪除?(y/n)");
if(getch()=='y')
{
for(j=i;j<num-1;j++)/*紀錄移動,從Contacts數組中刪除之*/
Contacts[j]=Contacts[j+1];
num--;
deletemark++;
printf(" 刪除成功");
printf(" 是否繼續刪除?(y/n)");
if(getch()=='y')
deletebyid();
return;
}
else
return;
}
continue;
}
if(deletemark==0)
{
printf(" 沒有該聯系人的紀錄");
printf(" 是否繼續刪除?(y/n)");
if(getch()=='y')
deletebyid();
return;
}
}
voidnewrecord()//添加紀錄
{
printf(" ****************請輸入聯系人信息**************** ");
printf(" 輸入編號:");
scanf("%s",&Contacts[num].id);
printf(" 輸入姓名:");
scanf("%s",&Contacts[num].name);
printf(" 輸入電話號碼:");
scanf("%s",&Contacts[num].phone);
num++;
printf(" 是否繼續添加?(Y/N):");
if(getch()=='y')
newrecord();
return;
}
voidshowall()//顯示所有
{
inti;
system("cls");
if(num!=0)
{
printf(" ***************以下為通訊錄所有信息************");
for(i=0;i<num;i++)
{
printf(" 編號:%s",Contacts[i].id);
printf(" 姓名:%s",Contacts[i].name);
printf(" 電話:%s",Contacts[i].phone);
printf(" ");
if(i+1<num)
{
printf(" __________________________");
system("pause");
}
}
printf(" ************************************************");
}
else
printf(" 通訊錄中無任何紀錄");
printf(" 按任意鍵返回主菜單:");
getch();
return;
}
//按電話查詢
voidsearchbyphone()
{
intmark=0;
inti;
inta=0;
printf(" ******************按電話查找******************");
charphone[10];
printf(" 請輸入編號:");
scanf("%s",phone);
for(i=0;i<num;i++)
{
if(strcmp(Contacts[i].phone,phone)==0)
{
printf(" **************以下是您查找的聯系人信息**********");
printf(" 編號:%s",Contacts[i].id);
printf(" 姓名:%s",Contacts[i].name);
printf(" 電話:%s",Contacts[i].phone);
printf(" ************************************************");
printf(" 按任意鍵返回主菜單:");
mark++;
getch();
return;
}
}
if(mark==0)
{
printf(" 沒有改聯系人的信息");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
}
voidsearchbyname()//按姓名查詢
{
intmark=0;
inti;
inta=0;
printf(" *****************按姓名查找*******************");
charname[20];
printf(" 請輸入姓名:");
scanf("%s",name);
for(i=a;i<num;i++)
{
if(strcmp(Contacts[i].name,name)==0)
{
printf(" *************以下是您查找的聯系人信息***********");
printf(" 編號:%s",Contacts[i].id);
printf(" 姓名:%s",Contacts[i].name);
printf(" 電話:%s",Contacts[i].phone);
printf(" ************************************************");
mark++;
if((i+1)<num)
{
printf(" 是否繼續查找相同名字的聯系人信息:(y/n)");
if(getch()=='y')
{
a=i;
continue;
}
else
return;
}
else
{
printf(" 按任意鍵返回主菜單");
getch();
return;
}
}
}
if(mark!=0)
{
printf(" 沒有相同姓名的聯系人紀錄");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
else
{
printf(" 沒有相同姓名的聯系人紀錄");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
}
voidsearchbyid()//按編號查詢
{
intmark=0;
inti;
inta=0;
printf(" ******************按編號查找****************** ");
charid[10];
printf(" 請輸入編號:");
scanf("%s",id);
for(i=0;i<num;i++)
{
if(strcmp(Contacts[i].id,id)==0)
{
printf(" **************以下是您查找的聯系人信息**********");
printf(" 編號:%s",Contacts[i].id);
printf(" 姓名:%s",Contacts[i].name);
printf(" 電話:%s",Contacts[i].phone);
printf(" ************************************************");
printf(" 按任意鍵返回主菜單:");
mark++;
getch();
return;
}
}
if(mark==0)
{
printf(" 沒有改聯系人的信息");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
}
voidwritetofile()//寫入文件
{
inti;
if((fp=fopen(".\Contacts.dat","wb"))==NULL)
{
printf(" 文件打開失敗");
}
for(i=0;i<num;i++)
{
if(fwrite(&Contacts[i],sizeof(structrecord),1,fp)!=1)
{
printf(" 寫入文件錯誤! ");
}
}
fclose(fp);
printf(" 通訊錄文件已保存");
printf(" 按任意鍵退出程序 ");
exit(0);
}
voiddeleteone()//刪除單個
{
charchoic;
printf(" 1-按編號刪除2-按姓名刪除");
printf(" 請選擇:");
choic=getch();
switch(choic)
{
case'1':deletebyid();break;
case'2':deletebyname();break;
}
}
voidlistbyname()//按姓名排序
{
inti,j;
structrecordtmp;
for(i=1;i<num;i++)
{
if(strcmp(Contacts[i].name,Contacts[i-1].name)<0)
{
tmp=Contacts[i];
j=i-1;
do
{
Contacts[j+1]=Contacts[j];
j--;
}while((strcmp(tmp.name,Contacts[j].name)<0&&j>=0));
Contacts[j+1]=tmp;
}
}
printf(" 排序成功,是否顯示?(y/n)");
if(getch()=='y')
showall();
return;
}
voidlistbyid()//按編號排序
{
inti,j;
structrecordtmp;
for(i=1;i<num;i++)
{
if(strcmp(Contacts[i].id,Contacts[i-1].id)<0)
{
tmp=Contacts[i];
j=i-1;
do
{
Contacts[j+1]=Contacts[j];
j--;
}while((strcmp(tmp.id,Contacts[j].id)<0)&&j>=0);
Contacts[j+1]=tmp;
}
}
printf(" 排序成功,是否顯示?(y/n)");
if(getch()=='y')
showall();
return;
}
voidlistmenu()//排序菜單
{
charchoic;
if(num==0)
{
printf(" 對不起,文件中無任何紀錄");
printf(" 按任意鍵返回主菜單");
getch();
return;
}
system("cls");
printf(" *******************排序菜單*******************");
printf(" **********1-按編號排序2-按姓名排序**********");
printf(" **********3-返回主菜單**********");
printf(" ************************************************");
printf(" 請選擇:");
choic=getch();
switch(choic)
{
case'1':listbyid();break;
case'2':listbyname();break;
case'3':mainmenu();break;
default:mainmenu();break;
}
}
㈡ 用C語言編寫一個手機電話本程序
#include <stdio.h> #include <stdlib.h> #include <string.h> #define szSTR 64 #define fileDB "c:\\contact.txt" struct CONTACT { char name[szSTR];/*姓名*/ char unit[szSTR];/*工作單位*/ char tele[szSTR];/*電話*/ char mail[szSTR];/*mail*/ }; typedef struct CONTACT CON; #define BNAME 1 #define BUNIT 2 #define BTELE 4 #define BMAIL 8 #define BFULL 0xFF int OPER[5] = ; void input(CON * s, int mask) { if(mask & BNAME) if(mask & BUNIT) if(mask & BTELE) if(mask & BMAIL) }/*end input*/ void show (int id, CON * s) { if(!s) return ; if(id) printf("%d\t%s\t%s\t%s\t%s\n", id, s->name , s->unit , s->tele , s->mail ); else printf("%s%s%s%s\n", s->name , s->unit , s->tele , s->mail ); /*end if*/ }/*end show*/ void regist(void) { CON s; FILE * f = 0; input(&s, BFULL); f = fopen(fileDB, "ab"); fwrite(&s,sizeof(s),1,f); fclose(f); printf("資料已保存!\n"); }/*end regist*/ int browse(char * key, fpos_t * p, CON * s) { FILE * f =0; int i = 0, r = 0; CON t; char * a = 0, * b = 0; fpos_t q; if(!s) return 0; f = fopen(fileDB, "rb"); if(!f) { printf("資料庫暫無記錄\n"); return 0; }/*end if*/ printf("編號\t姓名\t單位\t電話\t電郵\n"); printf("------------------------------------------------\n"); while(!feof(f)) { fgetpos(f, &q); r = fread(&t, sizeof(t), 1, f); if(r<1)break; if(t.name[0]==0) continue; if(key) { a = strstr(t.name , key); b = strstr(t.tele , key); if(a == 0 && b == 0) continue; }/*end if*/ if(p) *p = q; if(s) memcpy(s, &t, sizeof(t)); i++; show(i, &t); }/*end while*/ fclose(f); printf("------------------------------------------------\n"); return i; }/*end browse*/ fpos_t query(CON * s) { char key[szSTR]=""; fpos_t p = 0; int r = 0; printf("請輸入姓名或者電話號碼:"); scanf("%s", key); r = browse(key, &p, s); return r?p:-1; }/*end query*/ void clear(void) { FILE * f = 0; CON s; fpos_t p = query(&s); if(p<0) return; f = fopen(fileDB, "rb+"); fsetpos(f, &p); memset(&s, 0, sizeof(s)); fwrite(&s, sizeof(s),1, f); fclose(f); printf("記錄已刪除!\n"); }/*end clear*/ void modify(void) { FILE * f = 0; CON s; int cmd = 0; fpos_t p = query(&s); if(p<0) return; f = fopen(fileDB, "rb+"); fsetpos(f, &p); for(;;) { show(0, &s); printf("請選擇:1-姓名;2-工作單位;3-電話;4-電郵;5-保存並退出;6-放棄修改並退出\n"); scanf("%d", &cmd); switch(cmd) { case 1: case 2: case 3: case 4: input(&s, OPER[cmd]); break; case 5: fsetpos(f, &p); fwrite(&s, sizeof(s), 1, f); case 6: fclose(f); return; default: printf("錯誤的操作,請重新輸入。\n"); }/*end case*/ }/*mext*/ }/*end clear*/ int main(void) { int cmd = 0; CON s; for(;;) { printf("歡迎使用通信簿!請選擇:1-添加;2-查詢;3-刪除;4-修改;5-全部輸出;0-退出\n"); scanf("%d", &cmd); switch(cmd) { case 0: return 0; case 1: regist(); break; case 2: query(&s); break; case 3: clear(); break; case 4: modify(); break; case 5: browse(0, 0, &s); break; }//end case } return 0; }
記得採納啊
㈢ 編寫一個電話簿程序(C++來實現)
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
class Tep
{
public:
friend istream& operator>>(istream &,Tep &);//輸入電話本
friend ostream& operator<<(ostream &,Tep &);//輸出電話本
private:
string str[1][2];//姓名,電話
};
istream& operator>>(istream &input,Tep &t)//重載輸入
{
cout<<"請輸入姓名:"<<endl;
input>>t.str[0][0];
cout<<"請輸入電話:"<<endl;
input>>t.str[0][1];
return input;
}
ostream& operator<<(ostream &output,Tep &t)//重載輸出
{
output<<"name:"<<t.str[0][0]<<setw(5)<<"tel:"<<t.str[0][1];
return output;
}
int main()
{
Tep t;
cin>>t;
cout<<t;
return 0;
}
㈣ c語言編寫一個程序,電話薄排序
修改後的程序
#include <stdio.h>
#define n 7
int main()
{
int i,j,ptr_2=0;
int a[n],*ptr_1;
ptr_1=&a[0];
printf("輸入%d個數:",n);
for (i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("ok1\n");
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if (*(ptr_1+j) < *(ptr_1+j+1))
{
ptr_2=*(ptr_1+j+1);
*(ptr_1+j+1)=*(ptr_1+j);
*(ptr_1+j)=ptr_2;
}
}
}
printf("排序後的數為: ");
for(i=0;i<n;i++)
{
printf("%d ",*ptr_1);
ptr_1++;
}
printf("\n");
return 0;
}
注意ptr_2是指針,未申請空間不能*ptr_2復值。
㈤ 一個用C語言編電話簿的題:
#include<stdio.h>
#include<string.h>
struct tongxun
{
char name[20];
char tel[20];
}entry[20],*p=NULL;
void main()
{
p=entry;
int i,n;
scanf("%d",&n);//輸入人數
if(n>20||n<1) return 1;
for(i=0;i<n;i++,p++)
{
printf("Entry %d\n",i+1);
printf("Name:");
gets(p->name);fflush(stdin);
printf("Tel:");
gets(p->tel);fflush(stdin);
}
char ch,name[20]={'\0'};
gets(name);
if(name[0]=='\n'||name[0]=='\0')
{
for(i=0,p=entry;i<n;p++)
{
printf("%d\t%s\t%s\n",++i,p->name,p->tel);
}
}
else
{
for(i=0,p=entry;i<n;i++)
{
if(strcmp(name,p->name)==0)
{
printf("%s found!\n%d\t%s\t%s\n",name,i+1,p->name,p->tel);
break;
}
else
p++;
}
if(i>n)
printf("%s not found!\n",name)
}
}
㈥ C語言程序設計:班級電話本管理程序
/* 電話簿程序 */
/******頭文件(.h)***********/
#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*標准庫函數*/
#include "string.h"/*字元串函數*/
#include "ctype.h" /*字元操作函數*/
#define M 50 /*定義常數表示記錄數*/
struct unit/*定義數據結構*/
{
char name[20]; /*姓名*/
char units[30]; /*單位*/
char tele[10]; /*電話*/
};
typedef struct unit 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(c<0||c>11); /*選擇項不在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語言用結構體編寫電話簿
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int len=0,j,q,u, x,n=0,i=0,s;
int b;
int c;
void sb()
{
printf("\t&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
printf("\t& &\n");
printf("\t& 通 訊 錄 管 理 系 統 &\n");
printf("\t& &\n");
printf("\t& 主菜單 &\n");
printf("\t& &\n");
printf("\t& <1>添加聯系人 &\n");
printf("\t& <2>瀏覽已有聯系人 &\n");
printf("\t& <3>修改聯系人信息 &\n"); //菜單界面
printf("\t& <4>刪除聯系人 &\n");
printf("\t& <5>查詢聯系人 &\n");
printf("\t& <6>退出 &\n");
printf("\t& &\n");
printf("\t& &\n");
printf("\t&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
}
struct person
{int num[100];
char name[30];
char jiguan[20];
char phone1[30];
char phone2[30];
char e_mail[40];
}a[100];
void shuru()
{
printf("請輸入聯系人信息,輸入'#'返回\n");
while(1)
{system("cls");
sb();
printf("請輸入聯系人姓名:\n");
scanf("%s",&a[i].name);
printf("請輸入籍貫:\n");
scanf("%s",&a[i].jiguan);
printf("請輸入號碼1:\n");
scanf("%s",&a[i].phone1);
printf("請輸入號碼2:\n");
scanf("%s",&a[i].phone2);
printf("請輸入郵箱:\n");
scanf("%s",&a[i].e_mail);
a[i].num[i]=i+1;
len=len+1; //添加聯系人
i=i+1;
system("cls");
sb();
printf("\n");
printf("添加成功!\n輸入'1'繼續添加,輸入'0'返回主菜單\n");
scanf("%d",&b);
if(b==0){system("cls");
sb();break;}
}
printf("已添加%d個聯系人\n",len);
printf("請選擇菜單功能:");
}
void tt()
{
printf("\t******************************************************************\n");
printf("\t* *\n");
printf("\t* ~☆~ 此程序由小山B同學獨自編寫,此程序解釋權歸小山B所有。 *\n");
printf("\t* 請用戶使用時遵守《版權法》及相關法律法規,不得以任何名義 *\n"); //開始界面
printf("\t* 復制、傳播此程序代碼。版權所有,侵權必究! *\n");
printf("\t* *\n");
printf("\t******************************************************************\n");
printf("\t選擇1代表用戶同意以上條約並繼續使用,選擇2退出界面。\n");
}
void ss()
{
jixu:
system("cls");
sb();
printf("\n");
printf("已有聯系人:\n");
for(j=0;j<len;j++)
printf("%d\t%s\t%s\n",j+1,a[j].name,a[j].phone1); //瀏覽聯系人
printf("\n");
printf("輸入對應編號查看詳細信息,輸入'0'返回主菜單\n");
scanf("%d",&i);
if(i==0){system("cls");
sb();printf("請選擇菜單功能:\n");return ;}
system("cls");
sb();
printf("\t姓名:\t%s\n\t籍貫:\t%s\n\tphone1:\t%s\n\tphone2:\t%s\n\te-mail:\t%s\n",a[i-1].name,a[i-1].jiguan,a[i-1].phone1,a[i-1].phone2,a[i-1].e_mail);
printf("\n輸入'9'返回上一頁,輸入'0'返回主菜單,\n");
scanf("%d",&c);
if(c==9){goto jixu;}
else{
system("cls");
sb();
printf("請選擇菜單功能:\n");}
}
void shanchu()
{ system("cls");
sb();
printf("已有聯系人:\n");
for(j=0;j<len;j++)
printf("%d\t%s\t%s\n",j+1,a[j].name,a[j].phone1); //刪除聯系人
printf("\n");
printf("請選擇需要刪除的聯系人編號:");
scanf("%d",&x);
for(s=x;s<=len;s++)
a[s-1]=a[s];
len=len-1;
system("cls");
sb();
printf("刪除成功!\n");
printf("請選擇菜單功能:\n");
}
void xiugai()
{
system("cls");
sb();
printf("已有聯系人:\n");
for(j=0;j<len;j++)
printf("%d\t%s\t%s\n",j+1,a[j].name,a[j].phone1); //修改聯系人
printf("\n");
printf("請選擇需要修改的聯系人編號:");
scanf("%d",&x);
system("cls");
sb();
printf("\n(1)\t%s\n(2)\t%s\n(3)\t%s\n(4)\t%s\n(5)\t%s\n",a[x-1].name,a[x-1].jiguan,a[x-1].phone1,a[x-1].phone2,a[x-1].e_mail);
printf("\n請輸入需要修改的信息編號:\n");
scanf("%d",&c);
if(c==1){printf("請輸入新姓名:\n");scanf("%s",a[x-1].name);}
if(c==2){printf("請輸入新籍貫:\n");scanf("%s",a[x-1].jiguan);}
if(c==3){printf("請輸入新號碼:\n");scanf("%s",a[x-1].phone1);}
if(c==4){printf("請輸入新號碼:\n");scanf("%s",a[x-1].phone2);}
if(c==5){printf("請輸入新郵箱:\n");scanf("%s",a[x-1].e_mail);}
system("cls");
sb();
printf("修改成功!\n");
printf("請選擇菜單功能:\n");
}
void chaxun()
{int v,p;
char t[20];hehe:
system("cls");
sb();
printf("請選擇查詢方式:\n");
printf("\n");
printf("1.通過姓名查詢\t2.通過號碼查詢\n\n9.返回主菜單\n");
scanf("%d",&v);
p=v; //查詢聯系人
if(p==1)
{system("cls");
sb();
printf("請輸入查詢的姓名:\n");
scanf("%s",t);
for(i=0;i<len;i++)
if(strcmp(t,a[i].name)==0)
{system("cls");sb();
printf("\t姓名:\t%s\n\t籍貫:\t%s\n\tphone1:\t%s\n\tphone2:\t%s\n\te-mail:\t%s\n",a[i].name,a[i].jiguan,a[i].phone1,a[i].phone2,a[i].e_mail);
printf("\n輸入'9'返回上一頁,輸入'0'返回主菜單,\n");
scanf("%d",&c);
if(c==9){goto hehe;}
else{
system("cls");
sb();
printf("請選擇菜單功能:\n"); return;}
}
}
if(p==2)
{system("cls");
sb();printf("請輸入查詢的號碼:\n");
scanf("%s",t);
for(i=0;i<len;i++)
if(strcmp(t,a[i].phone1)==0)
{system("cls");sb();
printf("姓名:\t%s\n籍貫:\t%s\nphone1:\t%s\nphone2:\t%s\ne-mail:\t%s\n",a[i].name,a[i].jiguan,a[i].phone1,a[i].phone2,a[i].e_mail);
printf("\n輸入'9'返回上一頁,輸入'0'返回主菜單,\n");
scanf("%d",&c);
if(c==9){goto hehe;}
else{system("cls");sb();printf("請選擇菜單功能:\n");return;}}
for(i=0;i<len;i++)
if(strcmp(t,a[i].phone2)==0)
{system("cls");sb();
printf("姓名:\t%s\n籍貫:\t%s\nphone1:\t%s\nphone2:\t%s\ne-mail:\t%s\n",a[i].name,a[i].jiguan,a[i].phone1,a[i].phone2,a[i].e_mail);
printf("\n輸入'9'返回上一頁,輸入'0'返回主菜單,\n");
scanf("%d",&c);
if(c==9){goto hehe;}
else{system("cls");sb();printf("請選擇菜單功能:\n");return;}}
}
if(p==9){system("cls");sb();printf("請選擇菜單功能:\n");return;}
else{printf("輸入錯誤!\n請重新輸入,或輸入9返回主菜單\n");goto hehe;}
}
void main()
{int g;
tt();
scanf("%d",&g);
if(g==1){ system("cls");
printf("");
sb();
printf("請選擇菜單功能:");
scanf("%d",&u);
q=u;
while(q!=6) //主函數
{
if(q==1) { system("cls"); sb(); shuru();}
if(q==2) { ss(); }
if(q==3) { xiugai(); }
if(q==4) { shanchu(); }
if(q==5) { chaxun(); }
scanf("%d",&q);
}
system("cls");
sb();
printf("感謝使用!\n");
}
else{ system("cls");
printf("感謝使用!\n");}
}
這是我很久之前寫的了。。。你挑著改就行了,功能都沒什麼問題
㈧ c語言程序設計 電話簿管理系統
intmain()
{
LinkQueueQ;
initAddressBook(Q);
intflag=0;
while(flag!=8)
{
printf("※※※※※主※※※※※菜※※※※※單※※※※※ ");
printf("※1、增加聯系人2、刪除聯系人※ ");
printf("※3、修改聯系人4、清空通訊錄※ ");
printf("※5、查找聯系人6、按組顯示※ ");
printf("※7、顯示全部聯系人8、退出※ ");
printf("※※※※※※※※※※※※※※※※※※※※※※※ ");
printf("請輸入編號(1-8): ");
scanf("%d",&flag);
if(flag<1||flag>8)
{
printf("輸入錯誤請重新輸入! ");
continue;
}
else
{
switch(flag){
case1:
if(enAddressBook(Q))
printf("增加聯系人成功! ");
else
printf("增加聯系人失敗! ");
break;
case2:
if(delPerson(Q))
printf("刪除聯系人成功! ");
else
printf("聯系人刪除失敗! ");
break;
case3:
if(update(Q))
printf("修改聯系人成功! ");
else
printf("修改聯系人失敗! ");
break;
case4:
if(clearAddressBook(Q))
printf("通訊錄已清空! ");
else
printf("通訊錄清空失敗! ");
break;
case5:
findByName(Q);
break;
case6:
findByGroup(Q);
break;
case7:
disAll(Q);
break;
case8:
system("cls");
break;
}
}
}
printf("※※※※※感謝您使用本系統!※※※※※※ ");
return0;
}
//初始化通訊錄
voidinitAddressBook(LinkQueue&Q)
{
Q.front=Q.rear=(QNode*)malloc(sizeof(QNode));
if(!Q.front)
exit(1);
else
Q.front->next=NULL;
}
//清空通訊錄
boolclearAddressBook(LinkQueue&Q)
{
system("cls");
while(addressBookLength(Q)!=0)
{
QNode*p;
p=Q.front->next;
Q.front->next=p->next;
if(p==Q.rear)
Q.rear=Q.front;
free(p);
}
returntrue;
}
//通訊錄當前人數
intaddressBookLength(LinkQueue&Q)
{
inti=0;
QNode*p;
p=Q.front;
if(Q.front==Q.rear)
i=0;
else
{
while(p!=Q.rear)
{
p=p->next;
i++;
}
}
returni;
}
//刪除聯系人
booldelPerson(LinkQueue&Q)
{
char_name[20];
system("cls");
printf("請輸入要刪除的聯系人的姓名: ");
scanf("%s",_name);
QNode*p,*q;
if(Q.front==Q.rear)
{
printf("通訊錄為空! ");
returnfalse;
}
else
{
p=Q.front;
q=Q.front->next;
while(q!=Q.rear){
if(strcmp(q->name,_name)==0)
{
p->next=q->next;
free(q);//刪除節點
returntrue;
}
else
{
p=p->next;
q=q->next;
}
}
if((strcmp(q->name,_name)==0))
{
free(q);
Q.front=Q.rear;
returntrue;
}
else
{
printf("無此聯系人! ");
returnfalse;
}
}
}
//查找聯系人
boolfindByName(LinkQueue&Q)
{
system("cls");
if(Q.front==Q.rear)
{
printf("手機中無聯系人! ");
returnfalse;
}
else
{
char_name[20];
printf("請輸入要查詢的聯系人姓名: ");
scanf("%s",_name);
QNode*p;
p=Q.front->next;
while(p->next!=NULL)
{
if(strcmp(p->name,_name)==0)
{
printf("姓名:%s號碼:%s分組:%s ",p->name,p->tel,p->group);
returntrue;
}
p=p->next;
}
if(strcmp(p->name,_name)==0){
printf("姓名:%s號碼:%s分組:%s ",p->name,p->tel,p->group);
returntrue;
}
else
{
printf("查無此人! ");
returnfalse;
}
}
}
//按組顯示聯系人
boolfindByGroup(LinkQueue&Q)
{
system("cls");
if(Q.front==Q.rear)
{
printf("手機中無聯系人! ");
returnfalse;
}
else
{
char_group[20];
printf("請輸入要查詢的分組: ");
scanf("%s",_group);
QNode*p;
p=Q.front->next;
while(p->next!=NULL)
{
if(strcmp(p->group,_group)==0)
{
printf("姓名:%s號碼:%s ",p->name,p->tel);
}
p=p->next;
}
if(strcmp(p->group,_group)==0){
printf("姓名:%s號碼:%s ",p->name,p->tel);
returntrue;
}
else
{
printf("無此分組! ");
returnfalse;
}
}
}
//增加聯系人
boolenAddressBook(LinkQueue&Q)
{
system("cls");
QNode*p;
p=(QNode*)malloc(sizeof(QNode));
if(!p)
returnfalse;
else
{
printf("請輸入聯系人姓名: ");
scanf("%s",p->name);
printf("請輸入聯系人號碼: ");
scanf("%s",&p->tel);
printf("請輸入聯系人分組: ");
scanf("%s",p->group);
if(Q.front->next==NULL)
{
Q.front->next=p;
Q.rear=p;
Q.rear->next=NULL;
}
else
{
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
returntrue;
}
}
//修改聯系人
boolupdate(LinkQueue&Q)
{
system("cls");
if(Q.front==Q.rear)
{
printf("手機中無聯系人! ");
returnfalse;
}
else
{
char_name[20];
printf("請輸入要修改的聯系人姓名: ");
scanf("%s",_name);
QNode*p;
p=Q.front->next;
while(p->next!=NULL)
{
if(strcmp(p->name,_name)==0)
{
printf("請輸入新聯系人姓名: ");
scanf("%s",p->name);
printf("請輸入新聯系人號碼: ");
scanf("%s",&p->tel);
printf("請輸入新聯系人分組: ");
scanf("%s",p->group);
returntrue;
}
p=p->next;
}
if(strcmp(p->name,_name)==0){
printf("請輸入新聯系人姓名: ");
scanf("%s",p->name);
printf("請輸入新聯系人號碼: ");
scanf("%s",&p->tel);
printf("請輸入新聯系人分組: ");
scanf("%s",p->group);
returntrue;
}
else
{
printf("查無此人! ");
returnfalse;
}
}
}
//顯示所有聯系人
voiddisAll(LinkQueue&Q)
{
system("cls");
inti=0;
QNode*p;
p=Q.front->next;
if(Q.front==Q.rear)
printf("無聯系人! ");
else
{
printf("姓名號碼分組 ");
while(p!=NULL){
printf("%15s%15s%15s ",p->name,p->tel,p->group);
p=p->next;
}
}
}
㈨ 求用C語言編寫手機通訊錄系統的程序
以前寫了一個簡單的:
#include <stdio.h>
#include <stdlib.h> /*與malloc.h差不多*/
#include <string.h>
#include <iostream>
using namespace std;
#define maxlen 15
struct persons
{int num; /*定義結構體數組用於緩存數據*/
char name[20];
char e_addr[20];
char tel_no[15];
char sim_no;
char arch;
}persons[maxlen];
typedef struct lnode
{ /*通訊錄結構中結點的定義*/
int num;
char name[20];
char e_addr[20];
char tel_no[15];
char sim_no;
char arch;
struct lnode *next;
}listnode,*linklist;
linklist head=NULL,r=NULL; /*定義頭指針和尾指針*/
listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9;
int i;
char name1[10],ch;
char tel_no1[15];
char arch1;
char sim_no1;
char e_addr1[20];
char s1[20];
FILE *fp; /*定義文件指針*/
void creat() /*將文件的信息讀入結構體數組在轉存入鏈表中*/
{ int j;
long k;
fp=fopen("數據文件.txt","r t"); /*打開文件*/
if(fp!=NULL)
{for(i=0;i<=maxlen;i++ )
{ j=fgetc(fp);
if(j==EOF)
return;
k=i;
fseek(fp,k*sizeof(struct persons),0); /*讀取一個人的信息*/
fread(&persons[i],sizeof(struct persons),1,fp);
s=(linklist)malloc(sizeof(listnode)); /*裝存入鏈表中*/
s->num=persons[i].num;
strcpy(s->name,persons[i].name);
strcpy(s->e_addr,persons[i].e_addr);
strcpy(s->tel_no,persons[i].tel_no);
s->sim_no=persons[i].sim_no;
s->arch=persons[i].arch;
if(head==NULL) /*用尾插法將其插入鏈表中*/
else
{r->next=s;
r=s;r->next=NULL;
}
}fclose(fp);
}
else
{ fp=fopen("數據文件.txt","w"); /*不能打開另開辟一個文件*/
i=1;
}
}
void Show()
void Delete()
void Input() /*向.通訊錄中輸入一個人的信息*/
{ s=(linklist)malloc(sizeof(listnode));
printf("\n\n\t請輸入該用戶的信息:");
printf("姓名:");
scanf("%s",&s->name);
printf("電話號碼:");
scanf("%s",&s->tel_no);
printf("單鍵撥號:");
scanf("%s",&s->sim_no);
printf("E-mail地址:");
scanf("%s",&s->e_addr);
printf("類別:");
scanf("%s",&s->arch);
if(head==NULL)printf("\n\n");
else
{p8=head;
while(p8!=NULL&&strcmp(s->name,p8->name)!=0&&strcmp(s->tel_no,p8->tel_no)!=0)
p8=p8->next;
if(p8!=NULL)
{printf("您添加的用戶已存在!");
free(s);}}
if(head==NULL)
{
s->next = 0;
head=s;
r = s;
}
else
{
s->next = 0;
r->next = s;
r = s;
}
}
void Alter()
int main()
{
system("color a");
creat();
do
{
printf("\n\n\t\t請選擇操作:");
printf("\n\t\t1.顯示通訊錄");
printf("\n\t\t2.刪除通訊錄");
printf("\n\t\t3.添加通訊錄");
printf("\n\t\t4.編輯通訊錄");
printf("\n\n\n");
printf("\t請選擇:");
cin>>ch;
switch(ch)
{ case '1': Show(); /*用單條件多選擇語句實現調用與循環*/
break;
case '2': Delete();
break;
case '3': Input();
break;
case '4': Alter();
break;
fclose(fp);
exit(0);
break;
default:
printf("\n\t The num should 1-6!!! \n");
break;
}
}
while(1);
}
㈩ 求c語言編寫電話薄實現添加刪除修改就可以 最好有圖形菜單,沒有也可以
聲明: 非原創
#include "stdio.h" /*標准輸入輸出函數庫*/
#include "stdlib.h" /*標准函數庫*/
#include "string.h" /*字元串函數庫*/
#include "conio.h" /*屏幕操作函數庫*/
#define HEADER1 " ---------------------------TELEPHONE BOOK---------------------------\n"
#define HEADER2 " | num | name | phonenumber | address | \n"
#define HEADER3 " |--------------|------------|-----------------|---------------------| \n"
#define FORMAT " | %-10s| %-10s| %-15s |%-20s | \n"
#define DATA p->num,p->name,p->phonenum,p->address
#define END " ---------------------------------------------------------------------\n"
#define N 100
int saveflag=0; /*是否需要存檔的標志變數*/
/*定義與電話簿有關的數據結構*/
typedef struct telebook /*標記為telebook*/
{
char num[4]; /*編號*/
char name[10]; /*姓名*/
char phonenum[15]; /*電話號碼*/
char address[20]; /*地址*/
}TELEBOOK;
void menu() /*主菜單*/
{
system("cls"); /*調用DOS命令,清屏.與clrscr()功能相同*/
textcolor(13); /*在文本模式中選擇新的字元顏色*/
gotoxy(10,5); /*在文本窗口中設置游標*/
cprintf(" The telephone-book Management System \n");
gotoxy(10,8);
cprintf(" *************************Menu********************************\n");
gotoxy(10,9);
cprintf(" * 1 input record 2 display record *\n");
gotoxy(10,10);
cprintf(" * 3 delete record 4 search record *\n");
gotoxy(10,11);
cprintf(" * 5 modify record 6 insert record *\n");
gotoxy(10,12);
cprintf(" * 7 sort record 8 save record *\n");
gotoxy(10,13);
cprintf(" * 0 quit system *\n");
gotoxy(10,14);
cprintf(" *************************************************************\n");
/*cprintf()送格式化輸出至文本窗口屏幕中*/
}
/*格式化輸出表頭*/
void printheader()
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
/*格式化輸出表中數據*/
void printdata(TELEBOOK pp)
{
TELEBOOK* p;
p=&pp;
printf(FORMAT,DATA);
}
/*顯示數組temp[]中存儲的電話簿記錄,內容為telebook結構中定義的內容*/
void Disp(TELEBOOK temp[],int n)
{
int i;
if(n==0) /*表示沒有電話簿記錄*/
{
printf("\n=====>Not telephone record!\n");
getchar();
return;
}
printf("\n\n");
printheader(); /*輸出表格頭部*/
i=0;
while(i<n) /*逐條輸出數組中存儲的電話簿記錄*/
{
printdata(temp[i]);
i++;
printf(HEADER3);
}
getchar();
}
void Wrong() /*輸出按鍵錯誤信息*/
{
printf("\n\n\n\n\n***********Error:input has wrong! press any key to continue**********\n");
getchar();
}
void Nofind() /*輸出未查找此記錄的信息*/
{
printf("\n=====>Not find this telephone record!\n");
}
/*************************************************************
作用:用於定位數組中符合要求的記錄,並返回保存該記錄的數組元素下標值
參數:findmess[]保存要查找的具體內容; nameorphonenum[]保存按什麼在數組中查找;
**************************************************************/
int Locate(TELEBOOK temp[],int n,char findmess[],char nameorphonenum[])
{
int i=0;
if(strcmp(nameorphonenum,"phonenum")==0) /*按電話號碼查詢*/
{
while(i<n)
{
if(strcmp(temp[i].phonenum,findmess)==0) /*若找到findmess值的電話號碼*/
return i;
i++;
}
}
else if(strcmp(nameorphonenum,"name")==0) /*按姓名查詢*/
{
while(i<n)
{
if(strcmp(temp[i].name,findmess)==0) /*若找到findmess值的姓名*/
return i;
i++;
}
}
return -1; /*若未找到,返回一個整數-1*/
}
/*輸入字元串,並進行長度驗證(長度<lens)*/
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");
/*進行長度校驗,超過lens值重新輸入*/
}while(strlen(n)>lens);
strcpy(t,n); /*將輸入的字元串拷貝到字元串t中*/
}
/*增加電話簿記錄*/
int Add(TELEBOOK temp[],int n)
{
char ch,num[10];
int i,flag=0;
system("cls");
Disp(temp,n); /*先列印出已有的電話簿信息*/
while(1) /*一次可輸入多條記錄,直至輸入編號為0的記錄才結束添加操作*/
{
while(1) /*輸入記錄編號,保證該編號沒有被使用,若輸入編號為0,則退出添加記錄操作*/
{
stringinput(num,10,"input number(press '0'return menu):"); /*格式化輸入編號並檢驗*/
flag=0;
if(strcmp(num,"0")==0) /*輸入為0,則退出添加操作,返回主界面*/
{return n;}
i=0;
while(i<n) /*查詢該編號是否已經存在,若存在則要求重新輸入一個未被佔用的編號*/
{
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); /*將字元串num拷貝到temp[n].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)
{
int select; /*1:按姓名查,2:按電話號碼查,其他:返回主界面(菜單)*/
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 telephone number\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");
/*在數組temp中查找編號為searchinput值的元素,並返回該數組元素的下標值*/
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 existing 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();
}
/*刪除電話簿記錄:先找到保存該記錄的數組元素的下標值,然後在數組中刪除該數組元素*/
int Del(TELEBOOK temp[],int n)
{
int sel;
char findmess[20];
int p=0,i=0;
if(n<=0)
{ system("cls");
printf("\n=====>No telephone record!\n");
getchar();
return n;
}
system("cls");
Disp(temp,n);
printf("\n =====>1 Delete by name =====>2 Delete by telephone number\n");
printf(" please choice[1,2]:");
scanf("%d",&sel);
if(sel==1)
{
stringinput(findmess,10,"input the existing name:");
p=Locate(temp,n,findmess,"name");
getchar();
if(p!=-1)
{
for(i=p+1;i<n;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 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<n;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();
}
return n;
}
/*修改電話簿記錄。先按輸入的聯系人姓名查詢到該記錄,
然後提示用戶修改該記錄編號之外的值,編號不能修改*/
void Modify(TELEBOOK temp[],int n)
{
char findmess[20];
int p=0;
if(n<=0)
{ system("cls");
printf("\n=====>No telephone number record!\n");
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) /*若p!=-1,表明已經找到該數組元素*/
{
printf("Number:%s,\n",temp[p].num);
printf("Name:%s,",temp[p].name);
stringinput(temp[p].name,15,"input new name:");
printf("Name:%s,",temp[p].phonenum);
stringinput(temp[p].phonenum,15,"input new telephone:");
printf("Name:%s,",temp[p].address);
stringinput(temp[p].address,30,"input new address:");
printf("\n=====>modify success!\n");
getchar();
Disp(temp,n);
getchar();
saveflag=1;
}
else
{Nofind();
getchar();
}
return ;
}
/*插入記錄:按編號查詢到要插入的數組元素的位置,然後在該記錄編號之後插入一個新數組元素。*/
int Insert(TELEBOOK temp[],int n)
{
char ch,num[10],s[10]; /*s[]保存插入點位置之前的記錄編號,num[]保存輸入的新記錄的編號*/
TELEBOOK newinfo;
int flag=0,i=0,kkk=0;
system("cls");
Disp(temp,n);
while(1)
{ stringinput(s,10,"please input insert location after the Number:");
flag=0;i=0;
while(i<n) /*查詢該編號是否存在,flag=1表示該編號存在*/
{
if(strcmp(temp[i].num,s)==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):",s);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{continue;}
else
{return n;}
}
}
/*以下新記錄的輸入操作與Add()相同*/
while(1)
{ stringinput(num,10,"input new Number:");
i=0;flag=0;
while(i<n) /*查詢該編號是否存在,flag=1表示該編號存在*/
{
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); /*將字元串num拷貝到newinfo.num中*/
stringinput(newinfo.name,15,"Name:");
stringinput(newinfo.phonenum,15,"Telephone:");
stringinput(newinfo.address,15,"Adress:");
saveflag=1; /*在main()有對該全局變數的判斷,若為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); /*在kkk的元素位置後插入新記錄*/
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("\n\n");
getchar();
return n;
}
/*利用選擇排序法實現數組的按記錄編號或姓名的升序排序*/
void SelectSort(TELEBOOK temp[],int n)
{
int i=0,j=0,flag=0,indexmin,select;
char charflag[10];
TELEBOOK newinfo;
if(n<=0)
{ system("cls");
printf("\n=====>Not telephone record!\n");
getchar();
return ;
}
system("cls");
Disp(temp,n); /*顯示排序前的所有記錄*/
printf(" ==>1 SORT BY NUMBER ==>2 SORT BY NAME\n");
printf(" please choice[1,2]:");
scanf("%d",&select);
if(select==1) /*按記錄編號排序*/
{
for(i=0;i<n-1;i++)
{
flag=32767;indexmin=0;
for(j=i;j<n;j++)
{ if(atoi(temp[j].num)<flag)
{ flag=atoi(temp[j].num);
indexmin=j;
}
}
strcpy(newinfo.num,temp[i].num); /*利用結構變數newinfo實現數組元素的交換*/
strcpy(newinfo.name,temp[i].name);
strcpy(newinfo.phonenum,temp[i].phonenum);
strcpy(newinfo.address,temp[i].address);
strcpy(temp[i].num,temp[indexmin].num);
strcpy(temp[i].name,temp[indexmin].name);
strcpy(temp[i].phonenum,temp[indexmin].phonenum);
strcpy(temp[i].address,temp[indexmin].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;
}
else if(select==2)
{
for(i=0;i<n-1;i++)
{
charflag[0]=255;indexmin=0;
for(j=i;j<n;j++)
{ if(strcmp(temp[j].name,charflag)>0)
{ charflag[0]=temp[j].name;
indexmin=j;
}
}
strcpy(newinfo.num,temp[i].num); /*利用結構變數newinfo實現數組元素的交換*/
strcpy(newinfo.name,temp[i].name);
strcpy(newinfo.phonenum,temp[i].phonenum);
strcpy(newinfo.address,temp[i].address);
strcpy(temp[i].num,temp[indexmin].num);
strcpy(temp[i].name,temp[indexmin].name);
strcpy(temp[i].phonenum,temp[indexmin].phonenum);
strcpy(temp[i].address,temp[indexmin].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;
}
else
{Wrong();
getchar();
getchar();
return;}
}
/*數據存檔,若用戶沒有專門進行此操作且對數據有修改,在退出系統時, 會提示用戶存檔*/
void Save(TELEBOOK temp[],int n)
{
FILE* fp;
int i=0;
fp=fopen("c:\\telephon","w");/*以只寫方式打開文本文件*/
if(fp==NULL) /*打開文件失敗*/
{
printf("\n=====>open file error!\n");
getchar();
return ;
}
for(i=0;i<n;i++)
{
if(fwrite(&temp[i],sizeof(TELEBOOK),1,fp)==1)/*每次寫一條記錄或一個結構數組元素至文件*/
{
continue;
}
else
{
break;
}
}
if(i>0)
{
getchar();
printf("\n\n=====>save file complete,total saved's record number is:%d\n",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]; /*定義TELEBOOK結構體*/
FILE *fp; /*文件指針*/
int select; /*保存選擇結果變數*/
char ch; /*保存(y,Y,n,N)*/
int count=0; /*保存文件中的記錄條數(或元素個數)*/
fp=fopen("C:\\telephon","a+");
/*以追加方式打開文本文件c:\telephon,可讀可寫,若此文件不存在,會創建此文件*/
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 your choice(0~8):"); /*顯示提示信息*/
scanf("%d",&select);
if(select==0)
{
if(saveflag==1) /*若對數組的數據有修改且未進行存檔操作,則此標志為1*/
{ getchar();
printf("\n==>Whether 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; /*按鍵有誤,必須為數值0-9*/
}
}
}