#include<stdio.h>
struct person
{
char name[8]
char tel[15]
char addr[50]
}
char filename[20]="E:\\txl.txt"
FILE *fp
void creat()
void output()
void search()
void append()
void modify()
void delete()
main( )
{
int m
creat()
while(1)
{
printf("\n\t\t*********欢迎使用通讯录信息管理系统*********\n\n")
printf("\n\t\t添加,请按1")
printf("\n\t\t查找,请按2")
printf("\n\t\t修改,请按3")
printf("\n\t\t删除,请按4")
printf("\n\t\t输出,请按5")
printf("\n\t\t退出,请按0\n")
printf("\n\t\t********************************************\n\n")
printf("Please select(0--5):")
scanf("%d",&m)
if(m>=0&&m<=5)
{
switch(m)
{
case 1: append()
break
case 2: search()
break
case 3: modify()
break
case 4: delete()
break
case 5: output()
break
case 0: exit()
}
printf("\n\n操作完毕,请再次选择!")
}
else
printf("\n\n选择错误,请再次选择!")
}
}
/*输入模块creat( ): 创建通讯录的子函数。*/
void creat()
{
struct person one
long s1
/*printf("\n请输入通讯录文件名:")
scanf("%s",filename)*/
if((fp=fopen(filename,"at+"))==NULL)
{
printf("\n不能建立通讯录!")
exit()
}
fprintf(fp,"%-10s%-20s%-50s\n","姓名","电话号码","住址")
printf("\n请输入姓名、电话号码及住址(以0结束)\n")
scanf("%s",one.name)
while(strcmp(one.name,"0"))
{
scanf("%s%s",one.tel,one.addr)
fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr)
scanf("%s",one.name)
}
fclose(fp)
}
/*输出模块output( ):输出通讯录中联系人通讯信息的子函数*/
void output()
{
struct person one
if((fp=fopen(filename,"r"))==NULL)
{
printf("\n不能打开通讯录!")
exit()
}
printf("\n\n%20s\n","通 讯 录")
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr)
printf("%-10s%-20s%-50s",one.name,one.tel,one.addr)
}
fclose(fp)
}
/*添加模块append( ):向通讯录中添加某人通讯信息的子函数*/
void append()
{
struct person one
if((fp=fopen(filename,"a"))==NULL)
{
printf("\n不能打开通讯录!")
exit()
}
printf("\n请输入添加的姓名、电话号码及住址\n")
scanf("%s%s%s",one.name,one.tel,one.addr)
fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr)
fclose(fp)
}
/*查找模块search( ):在通讯录中查找某人通讯信息的子函数*/
void search()
{
int k=0
char namekey[8]
struct person one
printf("\n请输入姓名:")
scanf("%s",namekey)
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n不能打开通讯录!")
exit()
}
while(!feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr)
if(!strcmp(namekey,one.name))
{
printf("\n\n已查到,记录为:")
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr)
k=1
}
}
if(!k)
printf("\n\n对不起,通讯簿中没有此人的记录。")
fclose(fp)
}
/*修改模块modify( ):在通讯录中修改某人通讯信息的子函数*/
void modify()
{
int m,k=0
long offset
char namekey[8]
struct person one
printf("\n请输入姓名:")
scanf("%s",namekey)
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打开通讯录!")
exit()
}
while(!feof(fp))
{
offset=ftell(fp)
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr)
if(!strcmp(namekey,one.name))
{
k=1
break
}
}
if(k)
{
printf("\n已查到,记录为:")
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr)
printf("\n请输入新姓名、电话号码及住址:")
scanf("%s%s%s",one.name,one.tel,one.addr)
fseek(fp,offset,SEEK_SET)
printf("%ld",ftell(fp))
fprintf(fp,"%-10s%-20s%-50s\n",one.name,one.tel,one.addr)
}
else
printf("\n对不起,通讯录中没有此人的记录。")
fclose(fp)
}
/*删除模块delete( ):在通讯录中删除某人通讯信息的子函数*/
void delete()
{
int m,k=0,flag
long offset1,offset2
char namekey[8], valid[4]
struct person one
printf("\n请输入姓名:")
scanf("%s",namekey)
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打开通讯录!")
exit()
}
while(!feof(fp))
{
offset1=ftell(fp)
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr)
if(!strcmp(namekey,one.name))
{
k=1
break
if(k)
{
printf("\n已查到,记录为")
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr)
printf("\n确实要删除,按1;不删除,按0:")
scanf("%d",&m)
if(m)
{
fseek(fp,offset1,SEEK_SET)
fprintf(fp,"%-10s%-20s%-50s\n","","","")
}
else
printf("\n对不起,通讯录中没有此人的记录。")
fclose(fp)
}
}
}
}
<PIXTEL_MMI_EBOOK_2005>1###########################################################</PIXTEL_MMI_EBOOK_2005>
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct record
{
char name[20] //姓名
char phone[12] //电话
char adress[50] //地址
char postcode[8] //邮政编码
char e_mail[20] //电子邮件。
}student[100]//假设最大数为100.
//定义全局变量num,表示已经输入的人数 。
int num//这里使用数组解决通讯录的问题,实际上使用链表更好。
int menu_select()
{
char s[80]
int a/*定义整形变量*/
system("cls")
printf("\t\t***********欢迎进入通讯管理界面********\n\n")
printf("\t\t\t0. 输入记录\n")
printf("\t\t\t1. 显示记录\n")
printf("\t\t\t2. 按姓名查找\n")
printf("\t\t\t3. 按电话号码查找\n")
printf("\t\t\t4. 插入记录 \n")
printf("\t\t\t5. 按姓名排序\n")
printf("\t\t\t6. 删除记录\n")
printf("\t\t\t7. Quit\n")
printf("\t\t***********************************************\n\n")
do{
printf("Enter you choice(0~7):")
scanf("%s",s)
a=atoi(s)
}
while (a<0 || a>7)
return a
}
int adduser()
{
printf("\t\t\t**************** 请输入用户信息 ****************\n")
printf("\t\t\t输入姓名:\n")
scanf("%s",student[num].name)
printf("\t\t\t输入电话号码:\n")
scanf("%s",student[num].phone)
printf("\t\t\t输入地址:\n")
scanf("%s",student[num].adress)
printf("\t\t\t输入邮编:\n")
scanf("%s",student[num].postcode)
printf("\t\t\t输入e-mail:\n")
scanf("%s",student[num].e_mail)
num++
printf("\t\t\t是否继续添加?(Y/N):\n")
if(getch()=='y' || getch()=='Y')
adduser()
return(0)
}
void list()
{
int i
system("cls")
if(num!=0)
{
printf("\t\t\t*************** 以下为通讯录所有信息************\n")
for (i=0i<numi++)
{
printf("\t\t\t姓名:%s\n",student[i].name)
printf("\t\t\t电话:%s\n",student[i].phone)
printf("\t\t\t地址:%s\n",student[i].adress)
printf("\t\t\t邮编:%s\n",student[i].postcode)
printf("\t\t\te-mail:%s\n",student[i].e_mail)
if(i+1<num)
{
system("pause")
}
}
printf("\t\t\t************************************************\n")
}
else
printf("\t\t\t通讯录中无任何纪录\n")
printf("\t\t\t按任意键返回主菜单:\n")
getch() //这里是无回显的输入字符,你输入的字符不会显示在屏幕上。
return
}
int searchbyname()
{
int mark=0
int i
printf("\t\t\t***************** 按姓名查找 *******************\n")
char name[20]
printf("\t\t\t请输入姓名:\n")
scanf("%s",name)
for(i=0i<numi++)
{
if (strcmp(student[i].name,name)==0)
{
printf("\t\t\t************* 以下是您查找的用户信息 ***********\n")
printf("\t\t\t姓名: %s",student[i].name)
printf("\t\t\t电话: %s",student[i].phone)
printf("\t\t\t地址: %s",student[i].adress)
printf("\t\t\te-mail:%s",student[i].e_mail)
printf("\t\t\t************************************************\n")
mark++
if((i+1)<num)
{
printf("\t\t\t是否继续查找相同名字的用户信息:(y/n)\n")
if(getch()=='y' || getch()=='Y')
{
continue
}
else
return(0)
}
else
{
printf("\t\t\t按任意键返回主菜单")
getch()
return(0)
}
}
}
if(mark == 0)
{
printf("\t\t\t没有相同姓名的用户纪录\n")
printf("\t\t\t按任意键返回主菜单\n")
getch()
return(0)
}
return 0
}
int searchbyphone()
{
int mark=0
int i
printf("\t\t\t****************** 按电话查找 ******************\n")
char phone[10]
printf("\t\t\t请输入电话号码:\n")
scanf("%s",phone)
for(i=0i<numi++)
{
if (strcmp(student[i].phone,phone)==0)
{
printf("\t\t\t************** 以下是您查找的用户信息 **********\n")
printf("\t\t\t姓名: %s",student[i].name)
printf("\t\t\t电话: %s",student[i].phone)
printf("\t\t\t地址: %s",student[i].adress)
printf("\t\t\te-mail:%s",student[i].e_mail)
printf("\t\t\t************************************************\n")
printf("\t\t\t按任意键返回主菜单\n")
mark++
getch()
return(0)
}
}
if (mark==0)
{
printf("\t\t\t没有改用户的信息\n")
printf("\t\t\t按任意键返回主菜单\n")
getch()
return(0)
}
return(0)
}
void deletebyphone()
{
int i,j
int deletemark=0
char phone[20]
printf("\t\t\t请输入要删除用户电话号码:\n")
scanf("%s",phone)
if(num==0)
{
printf("\t\t\t对不起,文件中无任何纪录\n")
printf("\t\t\t按任意键返回主菜单\n")
getch()
return
}
for (i=0i<numi++)
{
if (strcmp(student[i].phone,phone)==0)
{
printf("\t\t\t以下是您要删除的用户纪录:\n")
printf("\t\t\t姓名: %s",student[i].name)
printf("\t\t\t电话: %s",student[i].phone)
printf("\t\t\t地址: %s",student[i].adress)
printf("\t\t\te-mail:%s",student[i].e_mail)
printf("\t\t\t是否删除?(y/n)")
if (getch()=='y' || getch()=='Y')
{
for (j=ij<num-1j++)
student[j]=student[j+1]
num--
deletemark++
printf("\t\t\t删除成功")
printf("\t\t\t是否继续删除?(y/n)")
if (getch()=='y' || getch()=='Y')
deletebyphone()
return
}
else
return
}
continue
}
if (deletemark==0)
{
printf("\t\t\t没有该用户的纪录")
printf("\t\t\t是否继续删除?(y/n)")
if(getch()=='y' || getch()=='Y')
deletebyphone()
return
}
return
}
void deletebyname()
{
int a=0
int findmark=0
int j
int deletemark=0
int i
char name[20]
printf("\t\t\t请输入要删除用户姓名:\n")
scanf("%s",name)
for (i=ai<numi++)
{
if(strcmp(student[i].name,name)==0)
{
printf("\t\t\t以下是您要删除的用户纪录:")
findmark++
printf("\t\t\t________________________________")
printf("\t\t\t姓名: %s",student[i].name)
printf("\t\t\t电话: %s",student[i].phone)
printf("\t\t\t地址: %s",student[i].adress)
printf("\t\t\te-mail:%s",student[i].e_mail)
printf("\t\t\t________________________________")
printf("\t\t\t是否删除?(y/n)")
if (getch()=='y' || getch() == 'Y')
{
for(j=ij<num-1j++)
student[j]=student[j+1]
num--
deletemark++
printf("\t\t\t删除成功")
if((i+1)<num)
{
printf("\t\t\t是否继续删除相同姓名的用户信息?(y/n)")
if (getch()=='y')
{
a=i
continue
}
}
printf("\t\t\t是否继续删除?(y/n)")
if (getch()=='y')
deletebyname()
return
}
if((i+1)<num)
{
printf("\t\t\t是否继续删除相同姓名的用户信息?(y/n)")
if (getch()=='y' || getch() == 'Y')
{
a=i
continue
}
}
}
else
continue
}
if ((deletemark==0)&&(findmark==0))
{
printf("\t\t\t没有该用户的纪录")
printf("\t\t\t是否继续删除?(y/n)")
if(getch()=='y' || getch() == 'Y')
deletebyphone()
return
}
else if (findmark!=0)
{
printf("\t\t\t没有重名信息")
printf("\t\t\t没有该用户的纪录")
printf("\t\t\t是否继续删除?(y/n)")
if(getch()=='y' || getch() == 'Y')
deletebyphone()
return
}
}
int dele()
{
char choic
printf("\t\t\t1-按电话号码删除 2-按姓名删除")
printf("\t\t\t请选择:")
choic=getch()
switch (choic)
{
case '1':deletebyphone()break
case '2':deletebyname()break
}
return(0)
}
int sortbyname() //按姓名进行排序
{
int i,j
struct record tmp
for (i=1i<numi++)
{
if(strcmp(student[i].name,student[i-1].name)<0)
{
tmp=student[i]
j=i-1
do
{
student[j+1]=student[j]
j--
}while ((strcmp(tmp.name,student[j].name)<0&&j>=0))
student[j+1]=tmp
}
}
printf("\t\t\t排序成功,是否显示?(y/n)")
if (getch()=='y')
list()
return(0)
}
int main()
{
printf("\t\t************************************************\n")
printf("\t\t********welcome to TONGXUNLU *******************\n")
printf("\t\t###########code by XXXXX ###################\n")
printf("\t\t*************************************************\n")
printf("按任意键进入主菜单\n")
getch()
int selectnum
while(1)
{
selectnum = menu_select()
switch(selectnum)
{
case 0:
{
adduser()
break
}
case 1:
{
list()
break
}
case 2:
{
searchbyname()
break
}
case 3:
{
searchbyphone()
break
}
case 4:
{
adduser() //这里插入,应该能指定位置,不过意义不大,所以和添加记录一样了。
break
}
case 5:
{
sortbyname()
break
}
case 6:
{
dele()
break
}
case 7:
{
printf("BYE BYE!\n")
system("pause")
getchar()
exit(0)
}
}
}
getchar()
return 0
}
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct record
{
char id[10]
char name[20]
char phone[20]
char adress[40]
char postcode[10]
char e_mail[30]
}student[500]
int num=0//外部变量num为文件中的纪录数
FILE *fp
void mainmenu()//主菜单
void newrecord()//新添纪录
void searchmenu()//查询菜单
void searchbyid()//按学号查询
void searchbyname()//按姓名查询
void searchbyphone()//按电话查询
void deletemenu()//删除菜单
void deleteall()//删除所有
void deleteone()//删除单个
void showall()//显示所有
void readfromfile()//读取文件
void writetofile()//写入文件
void deletebyid()//按学号删除
void deletebyname()//按姓名删除
void listbyid()//按学号排序
void listbyname()//按姓名排序
void listmenu()//排序菜单
void main()
{
readfromfile()
while (1)
{
mainmenu()
}
}
void readfromfile()//从文件导入
{
if((fp=fopen("student.bin","rb"))==NULL)
{
printf("\n\t\t通讯录文件不存在")
if ((fp=fopen("student.bin","wb"))==NULL)
{
printf("\n\t\t建立失败")
exit(0)
}
else
{
printf("\n\t\t通讯录文件已建立")
printf("\n\t\t按任意键进入主菜单")
getch()
return
}
exit(0)
}
fseek(fp,0,2)/*文件位置指针移动到文件末尾*/
if (ftell(fp)>0) /*文件不为空*/
{
rewind(fp)/*文件位置指针移动到文件开始位置*/
for (num=0!feof(fp) &&fread(&student[num],sizeof(struct record),1,fp)num++)
printf("\n\t\t文件导入成功")
printf("\n\t\t按任意键返回主菜单")
getch()
return
}
printf("\n\t\t文件导入成功")
printf("\n\t\t通讯录文件中无任何纪录")
printf("\n\t\t按任意键返回主菜单")
getch()
return
}
void mainmenu()//主菜单
{
char choic
system("cls")
printf("\n\t\t******************** 主菜单 ********************")
printf("\n\t\t*********** 1-新添纪录 2-查询菜单 ************")
printf("\n\t\t*********** 3-删除菜单 4-记录排序 ************")
printf("\n\t\t*********** 5-保存退出 6-不保存退出***********")
printf("\n\t\t************************************************")
printf("\n\t\t请选择:")
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()
}
}
void searchmenu()//查询菜单
{
char choic
system("cls")
printf("\n\t\t******************* 查询菜单 *******************")
printf("\n\t\t********** 1-显示所有 2-按学号查询 ************")
printf("\n\t\t********** 3-按姓名查询4-按电话查询 ************")
printf("\n\t\t********** 5-返回主菜单 ************")
printf("\n\t\t************************************************")
printf("\n\t\t请选择:")
choic=getch()
switch (choic)
{
case '1':showall()break
case '2':searchbyid()break
case '3':searchbyname()break
case '4':searchbyphone()break
case '5':mainmenu()break
}
}
void deletemenu()//删除菜单
{
char choic
if(num==0)
{
printf("\n\t\t对不起,文件中无任何纪录")
printf("\n\t\t按任意键返回主菜单")
getch()
return
}
system("cls")
printf("\n\t\t******************* 删除菜单 *******************")
printf("\n\t\t*********** 1-删除所有 2-删除单个 ***********")
printf("\n\t\t*********** 3-返回主菜单 ***********")
printf("\n\t\t************************************************")
printf("\n\t\t请选择:")
choic=getch()
switch (choic)
{
case '1':deleteall()break
case '2':deleteone()break
case '3':mainmenu()break
default:mainmenu()break
}
}
void deleteall()//删除所有
{
printf("\n\t\t确认删除?(y/n)")
if (getch()=='y')
{
fclose(fp)
if ((fp=fopen("student.bin","wb"))==NULL)
{
printf("\n\t\t不能打开文件,删除失败")
readfromfile()
}
num=0
printf("\n\t\t纪录已删除,按任意键返回主菜单")
getch()
return
}
else
return
}
void deletebyname()//按姓名删除
{
int a=0
int findmark=0
int j
int deletemark=0
int i
char name[20]
printf("\n\t\t请输入要删除学生姓名:")
scanf("%s",name)
for (i=ai<numi++)
{
if (strcmp(student[i].name,name)==NULL)
{
printf("\n\t\t以下是您要删除的学生纪录:")
findmark++
printf("\n\t\t________________________________")
printf("\n\t\t学号: %s",student[i].id)
printf("\n\t\t姓名: %s",student[i].name)
printf("\n\t\t电话: %s",student[i].phone)
printf("\n\t\t地址: %s",student[i].adress)
printf("\n\t\te-mail:%s",student[i].e_mail)
printf("\n\t\t________________________________")
printf("\n\t\t是否删除?(y/n)")
if (getch()=='y')
{
for (j=ij<num-1j++) /*纪录移动,从stud数组中删除之*/
student[j]=student[j+1]
num--
deletemark++
printf("\n\t\t删除成功")
if((i+1)<num)
{
printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)")
if (getch()=='y')
{
a=i
continue
}
}
printf("\n\t\t是否继续删除?(y/n)")
if (getch()=='y')
deletebyname()
return
}
if((i+1)<num)
{
printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)")
if (getch()=='y')
{
a=i
continue
}
}
}
else
continue
}
if ((deletemark==0)&&(findmark==0))
{
printf("\n\t\t没有该同学的纪录")
printf("\n\t\t是否继续删除?(y/n)")
if (getch()=='y')
deletebyid()
return
return
}
else if (findmark!=0)
{
printf("\n\t\t没有重名信息")
printf("\n\t\t没有该同学的纪录")
printf("\n\t\t是否继续删除?(y/n)")
if (getch()=='y')
deletebyid()
return
return
}
}
void deletebyid()//按学号删除
{
int i,j
int deletemark=0
char id[20]
printf("\n\t\t请输入要删除学生学号:")
scanf("%s",id)
if(num==0)
{
printf("\n\t\t对不起,文件中无任何纪录")
printf("\n\t\t按任意键返回主菜单")
getch()
return
}
for (i=0i<numi++)
{
if (strcmp(student[i].id,id)==NULL)
{
printf("\n\t\t以下是您要删除的学生纪录:")
printf("\n\t\t学号: %s",student[i].id)
printf("\n\t\t姓名: %s",student[i].name)
printf("\n\t\t电话: %s",student[i].phone)
printf("\n\t\t地址: %s",student[i].adress)
printf("\n\t\te-mail:%s",student[i].e_mail)
printf("\n\t\t是否删除?(y/n)")
if (getch()=='y')
{
for (j=ij<num-1j++) /*纪录移动,从stud数组中删除之*/
student[j]=student[j+1]
num--
deletemark++
printf("\n\t\t删除成功")
printf("\n\t\t是否继续删除?(y/n)")
if (getch()=='y')
deletebyid()
return
}
else
return
}
continue
}
if (deletemark==0)
{
printf("\n\t\t没有该同学的纪录")
printf("\n\t\t是否继续删除?(y/n)")
if (getch()=='y')
deletebyid()
return
}
}
void newrecord()//添加纪录
{
printf("\n\t\t**************** 请输入学生信息 ****************\n")
printf("\n\t\t输入学号:")
scanf("%s",&student[num].id)
printf("\n\t\t输入姓名:")
scanf("%s",&student[num].name)
printf("\n\t\t输入电话号码:")
scanf("%s",&student[num].phone)
printf("\n\t\t输入地址:")
scanf("%s",&student[num].adress)
printf("\n\t\t输入邮编:")
scanf("%s",&student[num].postcode)
printf("\n\t\t输入e-mail:")
scanf("%s",&student[num].e_mail)
num++
printf("\n\t\t是否继续添加?(Y/N):")
if (getch()=='y')
newrecord()
return
}
void showall()//显示所有
{
int i
system("cls")
if(num!=0)
{
printf("\n\t\t*************** 以下为通讯录所有信息************")
for (i=0i<numi++)
{
printf("\n\t\t学号: %s",student[i].id)
printf("\n\t\t姓名: %s",student[i].name)
printf("\n\t\t电话: %s",student[i].phone)
printf("\n\t\t地址: %s",student[i].adress)
printf("\n\t\t邮编: %s",student[i].postcode)
printf("\n\t\te-mail:%s",student[i].e_mail)
printf("\t\t")
if (i+1<num)
{
printf("\n\t\t__________________________")
system("pause")
}
}
printf("\n\t\t************************************************")
}
else
printf("\n\t\t通讯录中无任何纪录")
printf("\n\t\t按任意键返回主菜单:")
getch()
return
}
//按电话查询
void searchbyphone()
{
int mark=0
int i
int a=0
printf("\n\t\t****************** 按电话查找 ******************")
char phone[10]
printf("\n\t\t请输入学号:")
scanf("%s",phone)
for(i=0i<numi++)
{
if (strcmp(student[i].phone,phone)==0)
{
printf("\n\t\t************** 以下是您查找的学生信息 **********")
printf("\n\t\t学号: %s",student[i].id)
printf("\n\t\t姓名: %s",student[i].name)
printf("\n\t\t电话: %s",student[i].phone)
printf("\n\t\t地址: %s",student[i].adress)
printf("\n\t\te-mail:%s",student[i].e_mail)
printf("\n\t\t************************************************")
printf("\n\t\t按任意键返回主菜单:")
mark++
getch()
return
}
}
if (mark==0)
{
printf("\n\t\t没有改学生的信息")
printf("\n\t\t按任意键返回主菜单")
getch()
return
}
}
void searchbyname()//按姓名查询
{
int mark=0
int i
int a=0
printf("\n\t\t***************** 按姓名查找 *******************")
char name[20]
printf("\n\t\t请输入姓名:")
scanf("%s",name)
for(i=ai<numi++)
{
if (strcmp(student[i].name,name)==0)
{
printf("\n\t\t************* 以下是您查找的学生信息 ***********")
printf("\n\t\t学号: %s",student[i].id)
printf("\n\t\t姓名: %s",student[i].name)
printf("\n\t\t电话: %s",student[i].phone)
printf("\n\t\t地址: %s",student[i].adress)
printf("\n\t\te-mail:%s",student[i].e_mail)
printf("\n\t\t************************************************")
mark++
if ((i+1)<num)
{
printf("\n\t\t是否继续查找相同名字的学生信息:(y/n)")
if (getch()=='y')
{
a=i
continue
}
else
return
}
else
{
printf("\n\t\t按任意键返回主菜单")
getch()
return
}
}
}
if(mark!=0)
{
printf("\n\t\t没有相同姓名的学生纪录")
printf("\n\t\t按任意键返回主菜单")
getch()
return
}
else
{
printf("\n\t\t没有相同姓名的学生纪录")
printf("\n\t\t按任意键返回主菜单")
getch()
return
}
}
void searchbyid()//按学号查询
{
int mark=0
int i
int a=0
printf("\n\t\t****************** 按学号查找 ******************\n")
char id[10]
printf("\n\t\t请输入学号:")
scanf("%s",id)
for(i=0i<numi++)
{
if (strcmp(student[i].id,id)==0)
{
printf("\n\t\t************** 以下是您查找的学生信息 **********")
printf("\n\t\t学号: %s",student[i].id)
printf("\n\t\t姓名: %s",student[i].name)
printf("\n\t\t电话: %s",student[i].phone)
printf("\n\t\t地址: %s",student[i].adress)
printf("\n\t\te-mail:%s",student[i].e_mail)
printf("\n\t\t************************************************")
printf("\n\t\t按任意键返回主菜单:")
mark++
getch()
return
}
}
if (mark==0)
{
printf("\n\t\t没有改学生的信息")
printf("\n\t\t按任意键返回主菜单")
getch()
return
}
}
void writetofile()//写入文件
{
int i
if ((fp=fopen("student.bin","wb"))==NULL)
{
printf("\n\t\t文件打开失败")
}
for (i=0i<numi++)
{
if (fwrite(&student[i],sizeof(struct record),1,fp)!=1)
{
printf("\n\t\t写入文件错误!\n")
}
}
fclose(fp)
printf("\n\t\t通讯录文件已保存")
printf("\n\t\t按任意键退出程序\n\t\t")
exit(0)
}
void deleteone()//删除单个
{
char choic
printf("\n\t\t1-按学号删除 2-按姓名删除")
printf("\n\t\t请选择:")
choic=getch()
switch (choic)
{
case '1':deletebyid()break
case '2':deletebyname()break
}
}
void listbyname()//按姓名排序
{
int i,j
struct record tmp
for (i=1i<numi++)
{
if(strcmp(student[i].name,student[i-1].name)<0)
{
tmp=student[i]
j=i-1
do
{
student[j+1]=student[j]
j--
}while ((strcmp(tmp.name,student[j].name)<0&&j>=0))
student[j+1]=tmp
}
}
printf("\n\t\t排序成功,是否显示?(y/n)")
if (getch()=='y')
showall()
return
}
void listbyid()//按学号排序
{
int i,j
struct record tmp
for (i=1i<numi++)
{
if(strcmp(student[i].id,student[i-1].id)<0)
{
tmp=student[i]
j=i-1
do
{
student[j+1]=student[j]
j--
}while ((strcmp(tmp.id,student[j].id)<0)&&j>=0)
student[j+1]=tmp
}
}
printf("\n\t\t排序成功,是否显示?(y/n)")
if (getch()=='y')
showall()
return
}
void listmenu()//排序菜单
{
char choic
if(num==0)
{
printf("\n\t\t对不起,文件中无任何纪录")
printf("\n\t\t按任意键返回主菜单")
getch()
return
}
system("cls")
printf("\n\t\t******************* 排序菜单 *******************")
printf("\n\t\t********** 1-按学号排序 2-按姓名排序 **********")
printf("\n\t\t********** 3-返回主菜单 **********")
printf("\n\t\t************************************************")
printf("\n\t\t请选择:")
choic=getch()
switch(choic)
{
case '1':listbyid()break
case '2':listbyname()break
case '3':mainmenu()break
default:mainmenu()break
}
}