- /******************************/
- /*******学生通讯录程序*********/
- #include <stdio.h>
- #include<string>
- #include<stdlib.h>
- #include<windows.h>
- #define MAXNUM 500
- /*定义学生结构体*/
- struct Student
- {
- char Name[20];
- char sex[5];
- int age;
- char birthday[10];
- char tel[15];
- char address[30];
- };
- /*声明联系人数组及学生数量*/
- struct Student students[MAXNUM];
- int num=0;
- /*通过电话号码返回数组下标*/
- int Student_SearchBytel(char tel[])
- {
- int i;
- for (i=0;i<num;i++)
- {
- if (strcmp(students[i].tel,tel)==0)
- {
- return i;
- }
- }
- return -1;
- }
- /*通过姓名返回数组下标*/
- int Student_SearchByName(char name[])
- {
- int i;
- for (i=0;i<num;i++)
- {
- if (strcmp(students[i].Name,name)==0)
- {
- return i;
- }
- }
- return -1;
- }
- /*显示单条联系人记录*/
- void Student_DisplaySingle(int index)
- {
- printf("姓名 性别 年龄 生日 电话 地址 \\n");
- printf("----------------------------------------------------------------------\\n");
- printf("%-10s%-10s%-10d%-10s%-15s%-30s\\n",students[index].Name,students[index].sex,students[index].age,
- students[index].birthday,students[index].tel,students[index].address);
- }
- /*插入联系人信息(含重名处理)*/
- int Student_Insert()
- {
- char tempName[20];
- int index;
- while(1)
- {
- printf("请输入联系人信息……\\n");
- printf(" 姓名:");
- gets(tempName);
- index=Student_SearchByName(tempName);
- if(index==-1)
- {
- strcpy(students[num].Name,tempName);
- printf(" 性别:");
- scanf("%s",&students[num].sex);
- getchar( );
- printf(" 年龄:");
- scanf("%d",&students[num].age);
- getchar();
- printf(" 生日:");
- scanf("%s",&students[num].birthday);
- getchar();
- printf(" 电话:");
- scanf("%s",&students[num].tel);
- getchar();
- printf(" 地址:");
- scanf("%s",&students[num].address);
- getchar();
- num++;
- printf("保存成功,是否继续添加(y/n)");
- if (getchar()=='n')
- return 0;
- else if(getchar()=='y')
- break;
- }
- else
- {
- printf("联系人已存在,是否替代?(y/n)");
- if(getchar()=='n')
- return 0;
- else
- {
- printf("请继续输入信息……\\n");
- printf(" 性别:");
- scanf("%s",&students[index].sex);
- getchar();
- printf(" 年龄:");
- scanf("%d",&students[index].age);
- getchar();
- printf(" 生日:");
- scanf("%s",&students[index].birthday);
- getchar();
- printf(" 电话:");
- scanf("%s",&students[index].tel);
- getchar();
- printf(" 地址:");
- scanf("%s",&students[index].address);
- getchar();
- printf("替换成功,按任意键结束\\n");
- getchar();
- return 0;
- }
- }
- }
- }
- /*修改联系人信息*/
- void Student_Modify()
- {
- char name[20];
- int index;
- int want;
- printf("请输入要修改的联系人的姓名:");
- scanf("%s",&name);
- getchar();
- index=Student_SearchByName(name);
- if (index==-1)
- {
- printf("联系人不存在!\\n");
- }
- else
- {
- printf("你要修改的联系人信息为:\\n");
- Student_DisplaySingle(index);
- while(1)
- {
- printf("请输入你要修改的项>:\\n");
- printf(" 1-姓名\\n");
- printf(" 2---性别\\n");
- printf(" 3-----年龄\\n");
- printf(" 4-------生日\\n");
- printf(" 5---------号码\\n");
- printf("6-----------地址\\n");
- scanf("%d",&want);
- switch(want)
- {
- case(1):
- {
- printf("请输入姓名:");
- scanf("%s",&students[index].Name);
- getchar();
- break;
- }
- case(2):
- {
- printf("请输入性别:");
- scanf("%s",&students[index].sex);
- getchar();
- break;
- }
- case(3):
- {
- printf("请输入年龄:");
- scanf("%d",&students[index].age);
- getchar();
- break;
- }
- case(4):
- {
- printf("请输入生日:");
- scanf("%s",&students[index].birthday);
- getchar();
- break;
- }
- case(5):
- {
- printf("请输入电话:");
- scanf("%s",&students[index].tel);
- getchar();
- break;
- }
- case 6:
- {
- printf("请输入地址:");
- scanf("%s",&students[index].address);
- getchar();
- break;
- }
- }
- printf("已修改,继续修改?(y/n)");
- if(getchar( )=='n')
- break;
- }
- }
- }
- /*删除学生信息*/
- void Student_Delete()
- {
- int i;
- while(1)
- {
- char name[20];
- int index;
- printf("请输入要删除的联系人的姓名:");
- scanf("%s",&name);
- getchar();
- index=Student_SearchByName(name);
- if (index==-1)
- {
- printf("联系人不存在!\\n");
- }
- else
- {
- printf("你要删除的联系人信息为:\\n");
- Student_DisplaySingle(index);
- printf("是否真的要删除?(y/n)");
- if (getchar()=='y')
- {
- for (i=index;i<num-1;i++)
- {
- students[i]=students[i+1];//把后边的对象都向前移动
- }
- num--;
- }
- getchar();
- }
- printf("是否继续?(y/n)");
- if (getchar()=='n')
- {
- break;
- }
- }
- }
- /*查询*/
- void Student_Search()
- {
- int select;
- printf("选择查找方式,(1:姓名查找 or 2:号码查找)");
- scanf("%d",&select);
- if(select==1)
- {
- while(1)
- {
- char name[20];
- int index;
- printf("请输入要查询的联系人的姓名:");
- scanf("%s",&name);
- getchar();
- index=Student_SearchByName(name);
- if (index==-1)
- {
- printf("联系人不存在!\\n");
- }
- else
- {
- printf("你要查询的联系人信息为:\\n");
- Student_DisplaySingle(index);
- }
- printf("是否继续?(y/n)");
- if (getchar()=='n')
- break;
- }
- } else if(select==2)
- {
- while(1)
- {
- char tel[15];
- int index;
- printf("请输入要查询的联系人的号码:");
- scanf("%s",&tel);
- getchar();
- index=Student_SearchBytel(tel);
- if (index==-1)
- {
- printf("联系人不存在!\\n");
- }
- else
- {
- printf("你要查询的联系人信息为:\\n");
- Student_DisplaySingle(index);
- }
- printf("是否继续?(y/n)");
- if (getchar()=='n')
- break;
- }
- }
- }
- /*显示联系人信息*/
- void Student_Display()
- {
- int i;
- printf("姓名 性别 年龄 生日 电话 地址 \\n");
- printf("-------------------------------------------------------------------------\\n");
- for (i=0;i<num;i++)
- {
- printf("%-10s%-10s%-10d%-10s%-15s%-30s\\n",students[i].Name,students[i].sex,students[i].age,
- students[i].birthday,students[i].tel,students[i].address);
- }
- }
- /*将联系人信息从文件读出*/
- void IO_ReadInfo()
- {
- FILE *fp;
- int i;
- if ((fp=fopen("MYTXL.Dat","rb"))==NULL)
- {
- printf("不能打开文件!\\n");
- return;
- }
- if (fread(&num,sizeof(int),1,fp)!=1)
- {
- num=-1;
- }
- else
- {
- for(i=0;i<num;i++)
- {
- fread(&students[i],sizeof(struct Student),1,fp); //把内容从文件中读出
- }
- }
- printf("系统初始化完毕,请尽情使用吧!");
- fclose(fp);
- }
- /*将联系人信息写入文件*/
- void IO_WriteInfo()
- {
- FILE *fp;
- int i;
- if ((fp=fopen("MYTXL.Dat","wb"))==NULL) //以只写方式打开二进制文件
- {
- printf("不能打开文件!\\n");
- return;
- }
- if (fwrite(&num,sizeof(int),1,fp)!=1) //判断函数是否正确写入数据
- {
- printf("写入文件错误!\\n");
- }
- for (i=0;i<num;i++)
- {
- if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)
- {
- printf("写入文件错误!\\n");
- }
- }
- fclose(fp);
- }
- int main()
- {
- int choice;
- IO_ReadInfo(); //打开文件,读取联系人信息
- HANDLE hOut;
- hOut = GetStdHandle(STD_OUTPUT_HANDLE);
- while(1)
- {
- do
- {
- system("color F0");
- printf("\\n **********$$$$$$$$$$$$$$*********** ");
- printf("\\n || 1------------新增联系人; || ");//功能菜单
- printf("\\n || 2------------修改联系人信息; || ");
- printf("\\n || 3------------删除联系人; || ");
- printf("\\n || 4------------查找联系人; || ");
- printf("\\n || 5------------查看联系人信息; || ");
- printf("\\n || 0------------退出通讯录; || ");
- printf("\\n <<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>> ");
- printf("\\n^_^欢迎使用!请选择你需要的服务:" ,choice);
- scanf("%d",&choice);
- getchar();
- }while(choice<=0&&choice>=5);
- switch(choice)
- {
- case 1:
- system("color F0");
- Student_Insert(); //新增
- break;
- case 2:
- system("color A5");
- Student_Modify(); //修改
- break;
- case 3:
- system("color 78");
- Student_Delete(); //删除
- break;
- case 4:
- system("color 5A");
- Student_Search(); //查找
- break;
- case 5:
- system("color B4");
- Student_Display(); //查看
- system("pause");
- break;
- case 0:
- system("color 0F");
- exit(0);
- system("pause");
- break;
- }
- IO_WriteInfo();
- }
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/2410201410784.html
来源: http://www.codesnippet.cn/detail/2410201410784.html