㈠ 求一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*/
}
}
}