本帖最后由 sunshine429 于 2016-1-25 02:21 编辑
- //
- // main.c
- // contacts
- // printf("**************************\n");
- // printf("****** 欢迎使用通讯录 ******\n");
- // printf("****** 1、添加联系人 ******\n");
- // printf("****** 2、删除联系人 ******\n");
- // printf("****** 3、修改联系人 ******\n");
- // printf("****** 4、查看所有联系人 ****\n");
- // printf("****** 5、搜索联系人 ******\n");
- // printf("****** 6、退出系统 ******\n");
- // printf("**************************\n\n");
- // Created by Sunshine_yang on 1/24/16.
- // Copyright (c) 2016 sunshine-429. All rights reserved.
- //
- #include <stdio.h>
- #include <string.h>
- // 声明函数
- int judge(int a);
- void doAdd();
- void doDelete();
- void doUpdate();
- void doList();
- void doSearch();
- int doQuit();
- void initContact();
- void writeFILE();
- // 1.定义变量
- //宏定义
- #define NAMELEN 22
- #define TELLEN 12
- // 定义联系人结构体
- typedef struct {
-
- char name[NAMELEN];
- char tel[TELLEN];
-
- }Person;
- // 定义联系人结构体数组
- Person Contacts[100];
- // 定义当前联系人总数
- int contactsNum;
- int main(int argc, const char * argv[]) {
- // 初始化
- initContact();
- // 循环
- while(1)
- {
-
- printf("*****************分隔符******************\n");
-
- // 打印一边
- printf("******************************\n");
- printf("****** 欢迎使用通讯录 ******\n");
- printf("****** 1、添加联系人 ******\n");
- printf("****** 2、删除联系人 ******\n");
- printf("****** 3、修改联系人 ******\n");
- printf("****** 4、查看所有联系人 *******\n");
- printf("****** 5、搜索联系人 *******\n");
- printf("****** 6、退出系统 *******\n");
- printf("*****************************\n\n");
-
- // 让用户输入
- int control = 0;
- printf("请输入要选择的项目:\n");
- scanf("%d", &control);
- // 判断用户输入是否合法
- if(0 == judge(control))
- {
- printf("输入不合法请重新输入:\n");
- continue;
- }
- switch(control)
- {
- case 1:
-
- doAdd();
- break;
-
-
- case 2:
- doDelete();
- break;
-
-
- case 3:
- doUpdate();
- break;
-
- case 4:
- doList();
- break;
-
- case 5:
- doSearch();
- break;
-
- case 6:
- {
- int m;
-
- printf("您真的要退出吗,我舍不得你\n1.确认离开\t0.取消\n");
- scanf("%d", &m);
- if(1 == m)
- {
- printf("程序正在退出...\n");
- printf("程序已退出\n");
- return 0;
- }
- continue;
-
-
-
- break;
- }
-
- }
-
- }
- return 0;
- }
- /**
- 初始化通讯录
-
- - returns: <#return value description#>
- */
- void initContact()
- {
- // 定义文件指针,
- FILE *fp = fopen("contacts.data", "rb");
-
- if(fp == NULL)
- {
- fp = fopen("contacts.data", "wb");
- fwrite(&contactsNum,sizeof(contactsNum),1,fp);
- printf("通讯录初始化成功\n");
-
- }else
- {
- // 写入联系人总数注意int类型,要写地址形式
- fread(&contactsNum,sizeof(contactsNum),1,fp);
- printf("导入%d个联系人成功\n", contactsNum);
-
-
- for(int i = 0; i < contactsNum; i++)
- {
- // 修改
- //读取联系人数据到联系人数组中
- fread(&Contacts[i], sizeof(Person), 1, fp);
- // fread(Contacts[i].name, sizeof(Person), 1, fp);
- // fread(Contacts[i].tel, sizeof(Person), 1, fp);
- }
-
-
- }
-
- // 关闭文件
- fclose(fp);
- }
- /**
- * 1.添加联系人
- */
- void doAdd()
- {
- printf("请输入要添加的联系人姓名:(*不要出现空格)\n");
- scanf("%s", Contacts[contactsNum].name);
-
-
- printf("请输入要添加的联系人电话:(*不要出现空格)\n");
- scanf("%s", Contacts[contactsNum].tel);
- //等待用户确认
- int flag;
- printf("确认要添加吗:\n1.确认\t0.取消\n");
- scanf("%d", &flag);
- if(!flag)
- {
- return ;
- }
- contactsNum++;
- writeFILE();
- printf("添加成功\t选择4.查看\n");
- }
- /**
- * 2.删除联系人
- */
- void doDelete()
- {
- doList();
- int num;
- printf("请输入要删除的联系人序列号:\n");
- scanf("%d",&num);
- // 判断编号是否合法
- if (!judge(num)) {
- return ;
- }
- //等待用户确认
- int flag;
- printf("确认要删除吗,删除后联系人将无法恢复:\n1.确认\t0.取消\n");
- scanf("%d", &flag);
- if(!flag)
- {
- return ;
- }
- // 删除的元素正好是数组的最后一个元素
- if (num == contactsNum) {
- contactsNum--;
- writeFILE();
- printf("删除成功\t选择4.查看\n");
- }else{
- for(int i = num-1; i < contactsNum; i++)
- {
- strcpy(Contacts[i].name,Contacts[i+1].name);
- strcpy(Contacts[i].tel,Contacts[i+1].tel);
-
- }
- contactsNum--;
- writeFILE();
- printf("删除成功\t选择4.查看\n");
- }
- }
- /**
- * 3.修改联系人
- */
- void doUpdate()
- {
- //列表所有的联系人
- doList();
-
- int num;
- printf("请输入要修改的联系人序列号:\n");
- scanf("%d",&num);
- // 判断编号是否合法
- if (!judge(num)) {
- return ;
- }
- //等待用户确认
- int flag;
- printf("确认要修改吗,修改后联系人将无法还原:\n1.确认\t0.取消\n");
- scanf("%d", &flag);
- if(!flag)
- {
- return ;
- }
-
- char name_tel[contactsNum];
- printf("请输入要新的联系人姓名:(*不要出现空格)\n");
- scanf("%s", name_tel);
- strcpy(Contacts[num-1].name,name_tel);
-
- printf("请输入要新的联系人电话:(*不要出现空格)\n");
- scanf("%s", name_tel);
- strcpy(Contacts[num-1].tel,name_tel);
-
- writeFILE();
- printf("修改成功\t选择4.查看\n");
- }
- /**
- * 4.查看所有联系人
- */
- void doList()
- {
-
- //****这些多余了***
- // // 定义文件指针,
- // FILE *fp = fopen("contacts.data", "r");
- //
- // if(fp!=NULL)
- // {
- // // 读取数据
- // fread(&contactsNum,sizeof(contactsNum),1,fp);
- //
- //
- //
- // for(int i = 0; i < contactsNum; i++)
- // {
- // fread(Contacts[i].name, sizeof(Person), 1, fp);
- // fread(Contacts[i].tel, sizeof(Person), 1, fp);
- // }
- //
- // printf("通讯录联系人如下:\n");
- // }
- //
- // // 关闭文件
- // fclose(fp);
-
- //判断通讯录是否为空
- if(contactsNum == 0){
-
- printf("您的通讯录还没有小伙伴~请添加小伙伴!\n");
-
- }else{
- printf("编号\t 姓名\t 电话\t\n");
- for(int i = 0;i < contactsNum; i++)
- {
- printf("%d\t %s\t %s\t\n",i+1, Contacts[i].name, Contacts[i].tel);
- }
- printf("\n");
- }
- }
- /**
- * 5.搜索联系人
- */
- void doSearch()
- {
- char name[NAMELEN];
- printf("请输入要搜索的联系人姓名:\n");
- scanf("%s" , name);
- for(int i = 0; i < contactsNum; i++)
- {
- if(!strcmp(Contacts[i].name,name))
- {
- printf("查找成功\t\t");
- printf("联系人%s的电话是%s\n\n", Contacts[i].name,Contacts[i].tel);
- return ;
- }
-
-
- }
- int flag;
- printf("查找失败\t你是否要添加:\n1.确认\t0.取消\n");
- scanf("%d", &flag);
- if(flag)
- {
- doAdd();
- }
- }
- /**
- * 6.退出系统
- */
- int doQuit()
- {
- return 0;
- }
- /**
- * 判断用户输入是否合法
- */
- int judge(int a)
- {
- if(a > 6 || a <1)
- {
-
- return 0;
- }
- return 1;
- }
- /**
- * 写入数据
- */
- void writeFILE()
- {
- //写入数据
- FILE *fp = fopen("contacts.data", "wb");
- fwrite(&contactsNum,sizeof(contactsNum),1,fp);
-
- if(fp != NULL){
- fwrite(&contactsNum, sizeof(contactsNum), 1, fp);
- for(int i = 0; i < contactsNum; i++)
- {
- fwrite(&Contacts[i], sizeof(Person), 1, fp);
- }
-
- }
-
-
- // 注意fclose!!!!!!!!!!
- fclose(fp);
- }
复制代码 |
组图打开中,请稍候......
|