//主程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <malloc.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;
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 main()
{
readfromfile();
}
//从文件导入
void readfromfile()
{
if((fp=fopen("student.txt","rb"))==NULL)
{
printf("\n\t\t通讯录文件不存在");
if ((fp=fopen("student.txt","wb"))==NULL)
{
printf("\n\t\t建立失败");
exit(0);
}
else
{
printf("\n\t\t通讯录文件已建立");
printf("\n\t\t按任意键进入主菜单");
getchar();
mainmenu();
}
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按任意键返回主菜单");
getchar();
mainmenu();
}
printf("\n\t\t文件导入成功");
printf("\n\t\t通讯录文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getchar();
mainmenu();
}
//主菜单
void mainmenu()
{
int choic;
system("cls");
printf("\t\t******************** 通讯录 ********************\n");
printf("\t\t*********** 1-新添纪录
2-查询菜单 ***********\n");
printf("\t\t*********** 3-删除菜单
4-记录排序 ***********\n");
printf("\t\t*********** 5-退出系统
***********\n");
printf("\t\t************************************************\n");
printf("\n\t\t请选择:");
scanf("%d",&choic);
switch (choic)
{
case 1:newrecord();break;
case 2:searchmenu();break;
case 3:deletemenu();break;
case 5:writetofile();
default:mainmenu();
}
}
//查询菜单
void searchmenu()
{
int choic;
system("cls");
printf("\t\t******************** 请选择 ********************\n");
printf("\t\t********** 1-显示所有
2-按学号查询 ************\n");
printf("\t\t********** 3-按姓名查询4-按电话查询 ************\n");
printf("\t\t********** 5-返回主菜单
************\n");
printf("\t\t************************************************\n");
printf("\t\t请选择:");
scanf("%d",&choic);
switch (choic)
{
case 1:showall();break;
case 2:searchbyid();break;
case 3:searchbyname();break;
case 4:searchbyphone();break;
case 5:mainmenu();break;
}
}
//删除菜单
void deletemenu()
{
int choic;
system("cls");
printf("\t\t******************* 删除菜单 *******************\n");
printf("\t\t*********** 1-删除所有
2-删除单个 ***********\n");
printf("\t\t*********** 3-返回主菜单
***********\n");
printf("\t\t************************************************\n");
printf("\n\t\t请选择:");
scanf("%d",&choic);
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 (getchar()=='y'||getchar()=='Y')
{
fclose(fp);
if ((fp=fopen("student.txt","wb"))==NULL)
{
printf("\n\t\t不能打开文件,删除失败");
readfromfile();
}
printf("\n\t\t纪录已删除,按任意键返回主菜单");
getchar();
getchar();
mainmenu();
}
else
mainmenu();
}
//删除单个
void deleteone()
{
int i,j;
char deletetarget[20];
int deletemark;
int a;
printf("\t\t******************* 删除单个纪录 ******************");
printf("\n\t\t请输入要删除学生的学号或姓名:");
scanf("%s",&deletetarget);
if(num==0)
{
printf("\n\t\t对不起,通讯录中没有您要删除的纪录");
printf("\n\t\t按任意键返回主菜单");
getchar();
mainmenu();
}
for (i=0;i<num;i++)
{
if (student[i].id==deletetarget)
{
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 (getchar()=='Y'||getchar()=='y')
{
for (j=i;j<num-1;j++)
/*纪录移动,从stud数组中删除之*/
student[i]=student[i+1];
deletemark++;
printf("\n\t\t删除成功");
printf("\n\t\t是否继续删除?(y/n)");
if (getchar()=='Y'||getchar()=='y')
deleteone();
mainmenu();
}
else
mainmenu();
}
else
continue;
}
if (deletemark==0)
{
for (i=a;i<num;i++)
{
if (student[i].name==deletetarget)
{
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 (getchar()=='Y'||getchar()=='y')
{
for (j=i;j<num-1;j++)
/*纪录移动,从stud数组中删除之*/
student[i]=student[i+1];
deletemark++;
printf("\n\t\t删除成功");
if((i+1)<num)
{
printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)");
if (getchar()=='Y'||getchar()=='y')
{
a=i;
continue;
}
}
printf("\n\t\t是否继续删除?(y/n)");
if (getchar()=='Y'||getchar()=='y')
deleteone();
mainmenu();
}
else
mainmenu();
}
else
continue;
}
}
}
//添加纪录
void newrecord()
{
char c;
printf("\t\t**************** 请输入学生信息 ****************\n");
printf("\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 (getchar()=='y' || getchar()=='Y')
newrecord();
mainmenu();
}
//显示所有
void showall()
{
int i;
if(num!=0)
{
printf("\t\t*************** 以下为通讯录所有信息************\n");
for (i=0;i<num;i++)
{
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("\n");
}
printf("\n\t\t************************************************");
}
else
printf("\t\t通讯录中无任何纪录");
printf("\n\t\t按任意键返回主菜单:");
getchar();
mainmenu();
}
//按电话查询
void searchbyphone()
{
int i;
int a=0;
printf("\t\t***************** 按学号查找 ******************\n");
char phone[10];
printf("\t\t请输入学号:");
scanf("%s",phone);
for(i=0;i<num;i++)
{
if (student[i].phone==phone)
{
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("\t\t按任意键返回主菜单:");
system("pause");
getchar();
mainmenu;
}
}
}
//按姓名查询
void searchbyname()
{
int i;
int a=0;
printf("\t\t***************** 按姓名查找 ******************\n");
char name[20];
printf("\t\t请输入姓名:");
scanf("%s",name);
for(i=a;i<num;i++)
{
if (student[i].name==name)
{
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***************************************************");
if (i<num)
{
printf("\n\t\t是否继续查找相同名字的学生信息:");
if (getchar()=='Y' || getchar()=='y')
{
a=i;
searchbyname();
}
else
mainmenu();
}
else
{
printf("\t\t按任意键返回主菜单:");
system("pause");
getchar();
mainmenu;
}
}
}
}
//按学号查询
void searchbyid()
{
int i;
int a=0;
printf("\t\t***************** 按学号查找 ******************\n");
char id[10];
printf("\t\t请输入学号:");
scanf("%s",id);
for(i=0;i<num;i++)
{
if (student[i].id==id)
{
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("\t\t按任意键返回主菜单:");
system("pause");
getchar();
mainmenu;
}
}
}
//写入文件
void writetofile()
{
int i;
for (i=0;i<num;i++)
{
fwrite(&student[i],sizeof(struct record),1,fp);
}
fclose(fp);
printf("\n\t\t通讯录文件已保存");
printf("\n\t\t按任意键退出程序\n\t\t");
exit(0);
}
我学c才几个月,里面肯定有好多错误,见笑了