求用C语言编写一个学生通讯录管理系统

Python09

求用C语言编写一个学生通讯录管理系统,第1张

/* HELLO.C -- Hello, world */

#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

}

}