C语言编写通讯录系统
今天交了一个用C写的通讯录系统,自以为还行,但老师无视我的设计🙀🙀,只给我89(主要是90多的一大堆,代码还都比我垃圾) (大一初学C)
下面是我的代码🐵🐵🐵
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
typedef struct person
{
char name[20]; //姓名
char sex[10]; //性别
char num[20]; //手机号
char QQ[20]; //QQ号
char email[20]; //邮箱
char address[50]; //地址
char relation[20]; //分组
char remarks[20]; //备注
} PER;
int menu(); //菜单
void add_person(PER arr[],int *nPtr); //添加l联系人函数
void InputPerson(PER arr[],int i); //添加一个联系人
void OutPerson(PER arr[],int i); //输出一个联系人
int print_person(PER arr[],int n); //输出联系人
int FindByName(PER arr[],int n,char *str); //按姓名查找位置
int FindByNum(PER arr[],int n,char *str); //按电话号查找位置
void delete_person(PER arr[],int *nPtr); //删除联系人
void modify_person(PER arr[],int n); //修改联系人
void search_person_name(PER arr[],int n); //按名字查找联系人
void search_person_num(PER arr[],int n); //按号码查找联系人
void search_person_relation();//按分组查找联系人
void save_file(PER arr[],int n); //将数据保存到磁盘
void load_file(PER arr[],int *nPtr); //添加顺序文件加载到数组per
void load_file_Name(PER arr[],int *nPtr); //姓名顺序文件加载到数组Name_per
void load_file_Num(PER arr[],int *nPtr); //号码顺序文件加载到数组Num_per
void sort_person_name(); //按姓名显示
void sort_person_num(); //按号码显示
void show_person(PER arr[],int n); //显示所有联系人
int main()
{
system("color 02");
SetConsoleTitle("择渊的通讯录");
PER per[100];
int choice;
int n;
load_file(per,&n);
while(1)
{
choice = menu();
switch(choice)
{
case 1: //添加联系人
add_person(per,&n); break;
case 2: //删除联系人
delete_person(per,&n);break;
case 3: //修改联系人
modify_person(per,n);break;
case 4: //按名字查找联系人
search_person_name(per,n);break;
case 5: //按号码查找联系人
search_person_num(per,n);break;
case 6: //按分组查找联系人
search_person_relation(per,n);break;
case 7: //显示所有联系人
show_person(per,n);break;
case 0: //退出系统
printf("\t 谢谢使用\n");
return 0;
}
}
}
int menu()//菜单
{
int choise;
system("cls");
system("color 0F");
printf("\t\t\t\t-----------------------------------\n");
printf("\t\t\t\t| 欢迎使用通讯录管理系统 |\n");
printf("\t\t\t\t-----------------------------------\n");
printf("\t\t\t\t| 1.新增联系人 |\n");
printf("\t\t\t\t-----------------------------------\n");
printf("\t\t\t\t| 2.删除联系人 |\n");
printf("\t\t\t\t-----------------------------------\n");
printf("\t\t\t\t| 3.修改联系人 |\n");
printf("\t\t\t\t-----------------------------------\n");
printf("\t\t\t\t| 4.按名字查询联系人 |\n");
printf("\t\t\t\t-----------------------------------\n");
printf("\t\t\t\t| 5.按号码查询联系人 |\n");
printf("\t\t\t\t-----------------------------------\n");
printf("\t\t\t\t| 6.按分组查询联系人 |\n");
printf("\t\t\t\t-----------------------------------\n");
printf("\t\t\t\t| 7.显示所有联系人 |\n");
printf("\t\t\t\t-----------------------------------\n");
printf("\t\t\t\t| 0.退出系统 |\n");
printf("\t\t\t\t-----------------------------------\n");
printf("\t\t\t\t请选择功能: ");
scanf("%d",&choise);
while(choise>7||choise<0)
{
printf("请重新选择:");
scanf("%d",&choise);
}
return choise;
}
void load_file(PER arr[],int *nPtr) //文件加载到结构数组per
{
FILE *fp;
int i;
if((fp=fopen("num.dat","r"))==NULL)
{
*nPtr = 0;
return;
}
for(i=0;fread(&arr[i],sizeof(PER),1,fp)!=0;i++);
*nPtr = i; //*nPtr记录文件中当前学生数量
fclose(fp);
}
void save_file(PER arr[],int n) //将数据保存到磁盘
{
FILE *fp;
if((fp=fopen("num.dat","w"))==NULL)
{
printf("打开文件失败\n");
system("pause");
exit(0);
}
fwrite(arr,n * sizeof(arr[0]),1,fp);
fclose(fp);
}
int print_person(PER arr[],int n) //输出所有信息联系人
{
int i;
printf("%-15s%-15s%-15s%-15s%-15s%-15s%-15s%-15s\n","姓名","性别","备注","分组","手机号","QQ","邮箱","地址");
for(i=0;i<n;i++)
{
OutPerson(arr,i);
}
system("pause");
return 0;
}
void add_person(PER arr[],int *nPtr) //添加联系人
{
char sel = 'y';
while(sel=='y')
{
InputPerson(arr,(*nPtr)++); //添加第n+1个联系人
printf("是否继续添加联系人?(y,n)\n");
scanf(" %c",&sel);
}
save_file(arr,*nPtr);
printf("添加结束\n");
system("pause");
}
void InputPerson(PER arr[],int i) //添加一个联系人
{
printf("请输入第%d个联系人\n",i+1);
printf("请输入联系人姓名\n");
scanf("%s",arr[i].name);
printf("请输入联系人性别\n");
scanf("%s",arr[i].sex);
printf("请输入联系人备注\n");
scanf("%s",arr[i].remarks);
printf("请输入联系人分组\n");
scanf("%s",arr[i].relation);
printf("请输入联系人手机号\n");
scanf("%s",arr[i].num);
printf("请输入联系人QQ\n");
scanf("%s",arr[i].QQ);
printf("请输入联系人邮箱\n");
scanf("%s",arr[i].email);
printf("请输入联系人地址\n");
scanf("%s",arr[i].address);
}
void OutPerson(PER arr[],int i) //输出一个联系人
{
printf("%-15s",arr[i].name);
printf("%-15s",arr[i].sex);
printf("%-15s",arr[i].remarks);
printf("%-15s",arr[i].relation);
printf("%-15s",arr[i].num);
printf("%-15s",arr[i].QQ);
printf("%-15s",arr[i].email);
printf("%-15s",arr[i].address);
printf("\n");
}
void delete_person(PER arr[],int *nPtr) //删除联系人
{
int i,index;
char str[20];
printf("请输入删除联系人的姓名");
scanf("%s",str);
index = FindByName(arr,*nPtr,str);
if(index<0)
{
printf("\n 该联系人不存在\n");
system("pause");
return ;
}
for(i=index;i<*nPtr-1;i++)
arr[i]=arr[i+1];
(*nPtr)--;
printf("\n 删除成功\n");
system("pause");
save_file(arr,*nPtr);
}
int FindByName(PER arr[],int n,char *str) //按姓名查找
{
int i;
for (i=0;i<n;i++)
if(strcmp(arr[i].name,str)==0)
return i;
return -1;
}
void modify_person(PER arr[],int n) //修改联系人
{
int index;
char sel;
char str[20];
printf("请输入姓名:\n");
scanf("%s",str);
index = FindByName(arr,n,str);
if(index<0)
{
printf("该联系人信息不存在\n");
system("pause");
return ;
}
printf("修改前的原纪录如下:\n");
OutPerson(arr,index);
printf("是否修改姓名?请输入 y or n:\n");
scanf(" %c",&sel);
if(sel =='y')
{
printf("请输入姓名:\n");
scanf("%s",arr[index].name);
}
printf("是否修改性别?请输入 y or n:\n");
scanf(" %c",&sel);
if(sel =='y')
{
printf("请输入性别:\n");
scanf("%s",arr[index].sex);
}
printf("是否修改备注?请输入 y or n:\n");
scanf(" %c",&sel);
if(sel =='y')
{
printf("请输入新的备注:\n");
scanf("%s",arr[index].remarks);
}
printf("是否修改分组?请输入 y or n:\n");
scanf(" %c",&sel);
if(sel =='y')
{
printf("请输入新的分组:\n");
scanf("%s",arr[index].relation);
}
printf("是否修改手机号?请输入 y or n:\n");
scanf(" %c",&sel);
if(sel =='y')
{
printf("请输入新的手机号:\n");
scanf("%s",arr[index].num);
}
printf("是否修改QQ?请输入 y or n:\n");
scanf(" %c",&sel);
if(sel =='y')
{
printf("请输入新的QQ:\n");
scanf("%s",arr[index].QQ);
}
printf("是否修改地址?请输入 y or n:\n");
scanf(" %c",&sel);
if(sel =='y')
{
printf("请输入新的地址:\n");
scanf("%s",arr[index].QQ);
}
save_file(arr,n);
system("pause");
}
void search_person_name(PER arr[],int n) //按名字查找联系人
{
int index;
char str[20];
printf("请输入查找的联系人姓名");
scanf("%s", str);
index=FindByName(arr,n,str);
if(index<0)
{
printf("该联系人不存在");
system("pause");
return ;
}
printf("%-15s%-15s%-15s%-15s%-15s%-15s%-15s%-15s\n","姓名","性别","备注","分组","手机号","QQ","邮箱","地址");
OutPerson(arr,index);
system("pause");
}
void search_person_num(PER arr[],int n) //按号码查找联系人
{
int index;
char str[20];
printf("请输入查找的联系人电话号");
scanf("%s", str);
index=FindByNum(arr,n,str);
if(index<0)
{
printf("该联系人不存在");
system("pause");
return ;
}
printf("%-15s%-15s%-15s%-15s%-15s%-15s%-15s%-15s\n","姓名","性别","备注","分组","手机号","QQ","邮箱","地址");
OutPerson(arr,index);
system("pause");
}
int FindByNum(PER arr[],int n ,char *str) //按电话号查找位置
{
int i;
for (i=0;i<n;i++)
if(strcmp(arr[i].num,str)==0)
return i;
return -1;
}
void search_person_relation() //按分组查找联系人
{
PER Rel_arr[100];
int Rel_n;
load_file(Rel_arr,&Rel_n);
int i,j;
int k=0;
PER temp;
char rel[100][20];
char select;
for(i=0;i<Rel_n-1;i++)
{
for(j=i+1;j<Rel_n;j++)
if(strcmp(Rel_arr[i].relation,Rel_arr[j].relation)>0)
{
temp = Rel_arr[i];
Rel_arr[i]=Rel_arr[j];
Rel_arr[j]=temp;
}
}
strcpy(rel[k],Rel_arr[0].relation);
k++;
for(i=1;i<Rel_n;i++)
{
if(strcmp(Rel_arr[i].relation,Rel_arr[i-1].relation)!=0)
{
strcpy(rel[k],Rel_arr[i].relation);
k++;
}
}
printf("现已有以下分组:\n");
for(j=0;j<k;j++)
{
printf("%c. %s\t\t",'A'+j,rel[j]);
}
printf("\n");
printf("请输入您要查询的分组:\n");
scanf(" %c",&select);
while(select>='A'+k||select<'A')
{
printf("输入错误,请重新输入\n");
scanf(" %c",&select);
}
int select_num=select-'A';
printf("%-15s%-15s%-15s%-15s%-15s%-15s%-15s%-15s\n","姓名","性别","备注","分组","手机号","QQ","邮箱","地址");
for(i=0;i<=Rel_n;i++)
{
if(strcmp(Rel_arr[i].relation,rel[select_num])==0)
OutPerson(Rel_arr,i);
}
system("pause");
}
void sort_person_name() //按姓名顺序显示
{
PER name_arr[100];
int Name_n;
load_file(name_arr,&Name_n);
int i,j;
for(i=0;i<Name_n-1;i++)
{
PER temp;
for(j=i+1;j<Name_n;j++)
if(strcmp(name_arr[i].name,name_arr[j].name)>0)
{
temp = name_arr[i];
name_arr[i]=name_arr[j];
name_arr[j]=temp;
}
}
print_person(name_arr,Name_n);
return;
}
void sort_person_num() //按电话号码显示
{
PER num_arr[100];
int Num_n;
load_file(num_arr,&Num_n);
int i,j;
for(i=0;i<Num_n-1;i++)
for(j=i+1;j<Num_n;j++)
if(strcmp(num_arr[i].num,num_arr[j].num)>0)
{
PER temp;
temp = num_arr[i];
num_arr[i]=num_arr[j];
num_arr[j]=temp;
}
print_person(num_arr,Num_n);
}
void show_person(PER arr[],int n) //显示
{
char sel;
printf("请输入显示的顺序\n");
printf("A.按姓名顺序显示\t\tB.按手机号顺序显示\t\tC.按添加顺序显示\n");
scanf(" %c",&sel);
while(sel>'C'||sel<'A')
{
printf("输入错误请重新输入\n");
scanf(" %c",&sel);
}
if(sel=='A')
sort_person_name();
else if(sel=='B')
sort_person_num();
else if(sel=='C')
print_person(arr,n);
else
exit(0);
return ;
}