C语言实现通讯录管理系统

目录

1. 需求分析

2. 程序架构

3. 代码实现(分函数呈现)

(1)主函数代码实现

(2)菜单函数的实现

(3)初始化功能实现

(4)添加联系人功能实现

(5)删除通讯录中的信息

(6)查找通讯录中联系人的信息

(7)查找函数实现

(8)修改联系人的信息

(9)打印通讯录中联系人的信息

(10)对通讯录中联系人的信息进行排序

(11)清空通讯录中联系人的信息

(12)销毁通讯录

4. 代码呈现(分文件实现)

(1)test.c

(2)contact.h

(3)contact.c


1. 需求分析

通过C语言实现简单的通讯录管理系统,要求实现的功能有:增加联系人信息、删除联系人信息、查找联系人信息、修改联系人信息、清空联系人信息、对联系人的信息进行排序、显示联系人信息,同时要求使用动态内存分配!

2. 程序架构

程序分为test.c、contact.c两个源文件和contact.h一个头文件。

test.c:主函数接口引入。

contact.c:函数主要实现

contact.h:头文件引入、函数声明、结构体声明。

3. 代码实现(分函数呈现)

(1)主函数代码实现


    
    
  1. / /测试函数的功能
  2. int main()
  3. {
  4. / /创建通讯录
  5. struct contact con; / /con就是通讯录,里面包含: data指针和 size,capacity
  6. / /初始化通讯录
  7. Init_Contact( &con);
  8. int input = 0;
  9. int size = 0; / /记录当前有多少人
  10. do
  11. {
  12. menu();
  13. printf( "请选择->");
  14. scanf( "%d", & input);
  15. switch ( input)
  16. {
  17. case ADD:
  18. / /增加
  19. Add_Contacter( &con);
  20. break;
  21. case DEL:
  22. / /删除
  23. Del_Contacter( &con);
  24. break;
  25. case SEARCH:
  26. / /查找
  27. Find_Contacter( &con);
  28. break;
  29. case MODIFY:
  30. / /修改
  31. Mod_Contacter( &con);
  32. break;
  33. case SHOW:
  34. / /打印
  35. Print_Contacter( &con);
  36. break;
  37. case CLEAR:
  38. / /清空
  39. Clear_Contacter( &con);
  40. break;
  41. case SORT:
  42. / /排序
  43. Sort_Contacter( &con);
  44. break;
  45. case EXIT:
  46. / /退出并销毁通讯录
  47. Destroy_Contact( &con);
  48. printf( "退出通讯录!\n");
  49. break;
  50. default:
  51. printf( "选择错误,请重新输入!\n");
  52. }
  53. } while ( input);
  54. return 0;
  55. }

分析:主要是引入函数的接口,此处用了常见的do while循环,并且将input变量作为while()后面括号中的条件,此处是一个极其巧妙的运用,当input变量为0时循环结束,程序终止,此时也与前面的switch和case进行了一一对应。这个版本的通讯录管理系统与之前的通讯录管理系统略有区别。此处的区别在于创建通讯录的时候,此处创建的是一个结构体变量con,而不是像之前一样建立的是一个结构体数组,此处结构体变量中存储的一方面有通讯录中所有人的信息即data,这些信息打包成了一个数组,同时还有两个整型变量,size存储的是当前已经有的元素个数,而capacity存储的是当前通讯录的最大容量。

(2)菜单函数的实现


    
    
  1. void menu()
  2. {
  3. printf( "************************************\n");
  4. printf( "**** 1.add 2.del ****\n");
  5. printf( "**** 3.search 4.modify ****\n");
  6. printf( "**** 5.show 6.clear ****\n");
  7. printf( "**** 7.sort 0.exit ****\n");
  8. printf( "************************************\n");
  9. }

分析:简单运用printf将菜单进行输出,通过*来使输出形式更加清晰简洁美观。

(3)初始化功能实现


    
    
  1. / /初始化通讯录中的信息
  2. void Init_Contact(struct contact * ps)
  3. {
  4. ps- > data = (struct PeoInfo *)malloc(sizeof(struct PeoInfo) * 3);
  5. if (ps- > data = = NULL)
  6. {
  7. return;
  8. }
  9. ps- > size = 0; / /设置通讯录最初只有 0个元素
  10. ps- >capacity = DEFAULT_SZ;
  11. }

分析:在此处就体现了和之前通讯录管理系统的不同,此处除了将size初始化为0外,还将capacity初始化为某个值。

(4)添加联系人功能实现


    
    
  1. void CheckCapacity(struct contact * ps)
  2. {
  3. if (ps- > size = = ps- >capacity)
  4. {
  5. / /增容
  6. struct PeoInfo * ptr = realloc(ps- > data, (ps- >capacity + 2) *sizeof(struct PeoInfo));
  7. if (ptr ! = NULL)
  8. {
  9. ps- > data = ptr;
  10. ps- >capacity + = 2;
  11. printf( "增容成功!\n");
  12. }
  13. else
  14. {
  15. printf( "增容失败!\n");
  16. }
  17. }
  18. }
  19. / /添加通讯录中的信息
  20. void Add_Contacter(struct contact * ps)
  21. {
  22. / /检测当前通讯录的容量
  23. / / 1、如果满了,就增加空间
  24. / / 2、如果不满,啥事都不干
  25. CheckCapacity(ps);
  26. / /增加数据
  27. printf( "请输入名字:");
  28. scanf( "%s", &ps- > data[ps- > size].name);
  29. printf( "请输入年龄:");
  30. scanf( "%d", &ps- > data[ps- > size].age);
  31. printf( "请输入性别:");
  32. scanf( "%s", &ps- > data[ps- > size].sex);
  33. printf( "请输入电话:");
  34. scanf( "%s", &ps- > data[ps- > size].phone);
  35. printf( "请输入地址:");
  36. scanf( "%s", &ps- > data[ps- > size]. address);
  37. ps- > size + +;
  38. printf( "添加成功!\n");
  39. }

分析:在进行添加时要注意进行分情况讨论,首先就是当联系人数目满了的话就必须对其进行扩容,此处检查容量运用的是CheckCapacity函数,每次扩容可以增加两个联系人的信息,通过realloc函数进行实现,扩容后,容量加2。只有当联系人数目未满的时候才能继续添加,添加后,要将记录联系人数目的变量size进行加一;如果当前通讯录没有满,就什么都不干,即进行正常的添加通讯录联系人的信息就好。

(5)删除通讯录中的信息


    
    
  1. / /删除通讯录中的信息
  2. void Del_Contacter(struct contact * ps)
  3. {
  4. char name[MAX_NAME];
  5. printf( "请输入你要删除的联系人的姓名:");
  6. scanf( "%s", name);
  7. / /查找要删除的人所在的位置
  8. / /找到了返回名字所在元素的下标,没找到就返回- 1
  9. int pos = Find_byName(ps,name);
  10. if (pos = =- 1) / /删除的人不存在
  11. {
  12. printf( "要删除的人不存在!\n");
  13. }
  14. else / /删除
  15. {
  16. int j = 0;
  17. for (j = pos; j < ps- > size- 1; j + +)
  18. {
  19. ps- > data[j] = ps- > data[j + 1];
  20. }
  21. ps- > size--;
  22. printf( "删除成功!\n");
  23. }
  24. }

分析:删除操作并不复杂,就是先查找到我们想要删除的那个联系人,然后将这个联系人后面的信息逐个向前进行覆盖,同时将记录联系人数目的变量size的值进行减1。

(6)查找通讯录中联系人的信息


    
    
  1. / /查找通讯录中的信息
  2. void Find_Contacter(const struct contact * ps)
  3. {
  4. char name[MAX_NAME];
  5. printf( "请输入你要查找的联系人的姓名:");
  6. scanf( "%s", name);
  7. int pos = Find_byName(ps, name);
  8. if (pos = =- 1) / /查找的人不存在
  9. {
  10. printf( "要查找的人不存在!\n");
  11. }
  12. else
  13. {
  14. printf( "%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "姓名", "年龄", "性别", "电话", "地址");
  15. printf( "%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n", ps- > data[pos].name,
  16. ps- > data[pos].age,
  17. ps- > data[pos].sex,
  18. ps- > data[pos].phone,
  19. ps- > data[pos]. address);
  20. }
  21. }

分析:首先先通过查找函数将我们想要查找到的联系人找到,然后通过printf函数打印联系人的信息。

(7)查找函数实现


    
    
  1. static int Find_byName(const struct contact * ps, char name[MAX_NAME])
  2. {
  3. int i = 0;
  4. for (i = 0; i < ps- > size; i + +)
  5. {
  6. if ( 0 = = strcmp(ps- > data[i].name, name))
  7. {
  8. return i;
  9. }
  10. }
  11. return - 1;
  12. }

分析:此处查找函数是通过遍历联系人中的信息进行实现的,当我们想查找的联系人的信息与某个联系人的信息一致时就停止下来,如果能够找到就返回其对应的下标,如果找不到就返回-1。

(8)修改联系人的信息


    
    
  1. / /修改通讯录中的信息
  2. void Mod_Contacter(struct contact * ps)
  3. {
  4. char name[MAX_NAME];
  5. printf( "请输入你要修改的联系人的姓名:");
  6. scanf( "%s", name);
  7. int pos = Find_byName(ps, name);
  8. if (pos = =- 1) / /修改的人不存在
  9. {
  10. printf( "要修改的人不存在!\n");
  11. }
  12. else
  13. {
  14. printf( "请输入名字:");
  15. scanf( "%s", &ps- > data[pos].name);
  16. printf( "请输入年龄:");
  17. scanf( "%d", &ps- > data[pos].age);
  18. printf( "请输入性别:");
  19. scanf( "%s", &ps- > data[pos].sex);
  20. printf( "请输入电话:");
  21. scanf( "%s", &ps- > data[pos].phone);
  22. printf( "请输入地址:");
  23. scanf( "%s", &ps- > data[pos]. address);
  24. printf( "修改成功!\n");
  25. }
  26. }

分析:修改联系人的信息与上面其实类似,首先是找到我们想要修改的联系人的信息,然后再进行修改。

(9)打印通讯录中联系人的信息


    
    
  1. / /打印通讯录中的信息
  2. void Print_Contacter(const struct contact * ps)
  3. {
  4. if (ps- > size = = 0)
  5. {
  6. printf( "通讯录为空!\n");
  7. }
  8. else
  9. {
  10. / /标题
  11. printf( "%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "姓名", "年龄", "性别", "电话", "地址");
  12. int i = 0;
  13. while (i < ps- > size)
  14. {
  15. / /数据
  16. printf( "%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n", ps- > data[i].name,
  17. ps- > data[i].age,
  18. ps- > data[i].sex,
  19. ps- > data[i].phone,
  20. ps- > data[i]. address);
  21. i + +;
  22. }
  23. }
  24. }

分析:这个功能并不难实现,就是设置一个循环变量i,然后从头开始对通讯录信息进行遍历,当i小于size的时候将对应联系人的信息打印出来。

(10)对通讯录中联系人的信息进行排序


    
    
  1. / /对通讯录中的信息进行排序
  2. / /排序函数
  3. / / 1.按照姓名进行排序
  4. int Conpare_ByName(const void *e 1,const void *e 2)
  5. {
  6. return strcmp(((struct PeoInfo *)e 1)- >name, ((struct PeoInfo *)e 2)- >name);
  7. }
  8. / / 2.按照年龄进行排序
  9. int Conpare_ByAge(const void * e 1, const void * e 2)
  10. {
  11. return ((struct PeoInfo *)e 1)- >age-((struct PeoInfo *)e 2)- >age;
  12. }
  13. / / 3.按照住址进行排序
  14. int Conpare_ByAddress(const void * e 1, const void * e 2)
  15. {
  16. return strcmp(((struct PeoInfo *)e 1)- > address, ((struct PeoInfo *)e 2)- > address);
  17. }
  18. void Sort_Contacter(struct contact * ps)
  19. {
  20. printf( "请选择你想排序的方式:\n");
  21. printf( "1.姓名\n2.年龄\n3.住址\n");
  22. int input = 0;
  23. scanf( "%d", & input);
  24. switch ( input)
  25. {
  26. case 1:
  27. qsort(ps- > data,ps- > size,sizeof(ps- > data[ 0]),Conpare_ByName);
  28. printf( "排序成功\n");
  29. break;
  30. case 2:
  31. qsort(ps- > data, ps- > size, sizeof(ps- > data[ 0]), Conpare_ByAge);
  32. printf( "排序成功\n");
  33. break;
  34. case 3:
  35. qsort(ps- > data, ps- > size, sizeof(ps- > data[ 0]), Conpare_ByAddress);
  36. printf( "排序成功\n");
  37. break;
  38. }
  39. }

分析:此处运用了qsort快速排序的函数,此处的关键就是设定好自己想要排序的依据,比如我们想根据年龄或者名字进行排序,此处要求掌握快速排序函数的使用。

(11)清空通讯录中联系人的信息


    
    
  1. / /清空通讯中的信息
  2. void Clear_Contacter(struct contact * ps)
  3. {
  4. memset(ps- > data, 0, sizeof(ps- > data));
  5. ps- > size = 0;
  6. printf( "清空成功!\n");
  7. }

分析:此处其实类似于初始化联系人的信息,就是将那段内存空间中的数据使用memset函数全部设置为0,然后将记录联系人数目的变量size设定为0。

(12)销毁通讯录


   
   
  1. / /销毁通讯录
  2. void Destory_contact(struct contact * ps)
  3. {
  4. free(ps- > data);
  5. ps- > data = NULL;
  6. }

4. 代码呈现(分文件实现)

(1)test.c


    
    
  1. #include "contact.h"
  2. enum Option
  3. {
  4. EXIT, / / 0
  5. ADD, / / 1
  6. DEL, / / 2
  7. SEARCH, / / 3
  8. MODIFY, / / 4
  9. SHOW, / / 5
  10. CLEAR, / / 6
  11. SORT / / 7
  12. };
  13. void menu()
  14. {
  15. printf( "************************************\n");
  16. printf( "**** 1.add 2.del ****\n");
  17. printf( "**** 3.search 4.modify ****\n");
  18. printf( "**** 5.show 6.clear ****\n");
  19. printf( "**** 7.sort 0.exit ****\n");
  20. printf( "************************************\n");
  21. }
  22. / /测试函数的功能
  23. int main()
  24. {
  25. / /创建通讯录
  26. struct contact con; / /con就是通讯录,里面包含: data指针和 size,capacity
  27. / /初始化通讯录
  28. Init_Contact( &con);
  29. int input = 0;
  30. int size = 0; / /记录当前有多少人
  31. do
  32. {
  33. menu();
  34. printf( "请选择->");
  35. scanf( "%d", & input);
  36. switch ( input)
  37. {
  38. case ADD:
  39. / /增加
  40. Add_Contacter( &con);
  41. break;
  42. case DEL:
  43. / /删除
  44. Del_Contacter( &con);
  45. break;
  46. case SEARCH:
  47. / /查找
  48. Find_Contacter( &con);
  49. break;
  50. case MODIFY:
  51. / /修改
  52. Mod_Contacter( &con);
  53. break;
  54. case SHOW:
  55. / /打印
  56. Print_Contacter( &con);
  57. break;
  58. case CLEAR:
  59. / /清空
  60. Clear_Contacter( &con);
  61. break;
  62. case SORT:
  63. / /排序
  64. Sort_Contacter( &con);
  65. break;
  66. case EXIT:
  67. / /退出并销毁通讯录
  68. Destroy_Contact( &con);
  69. printf( "退出通讯录!\n");
  70. break;
  71. default:
  72. printf( "选择错误,请重新输入!\n");
  73. }
  74. } while ( input);
  75. return 0;
  76. }

(2)contact.h


    
    
  1. #define MAX_NAME 20
  2. #define MAX_PHONE 12
  3. #define MAX_SEX 5
  4. #define MAX_ADDRESS 30
  5. #define _CRT_SECURE_NO_WARNINGS 1
  6. #define DEFAULT_SZ 3
  7. #include<stdio.h>
  8. #include<string.h>
  9. #include<stdlib.h>
  10. struct PeoInfo
  11. {
  12. char name[MAX_NAME];
  13. char phone[MAX_PHONE];
  14. char sex[MAX_SEX];
  15. char address[MAX_ADDRESS];
  16. int age;
  17. };
  18. struct contact
  19. {
  20. struct PeoInfo* data;
  21. int size; //记录当前已经有的元素个数
  22. int capacity; //记录当前通讯录的最大容量
  23. };
  24. //声明函数
  25. //初始化通讯录的函数
  26. void Init_Contact(struct contact* ps);
  27. //增加一个信息到通讯录
  28. void Add_Contacter(struct contact* ps);
  29. //删除指定的联系人
  30. void Del_Contacter(struct contact* ps);
  31. //查找指定人的信息
  32. void Find_Contacter(const struct contact* ps);
  33. //修改指定人的信息
  34. void Mod_Contacter(struct contact* ps);
  35. //打印通讯录中的信息
  36. void Print_Contacter(const struct contact* ps);
  37. //对通讯录中的联系人进行排序
  38. void Sort_Contacter(struct contact* ps);
  39. //清空通讯录中的信息
  40. void Clear_Contacter(struct contact* ps);
  41. //销毁通讯录
  42. void Destory_Contact(struct contact*ps);

(3)contact.c


    
    
  1. #define _ CRT_SECURE_ NO_WARNINGS 1
  2. #include "contact.h"
  3. / /实现函数的功能
  4. static int Find_byName(const struct contact * ps, char name[MAX_NAME])
  5. {
  6. int i = 0;
  7. for (i = 0; i < ps- > size; i + +)
  8. {
  9. if ( 0 = = strcmp(ps- > data[i].name, name))
  10. {
  11. return i;
  12. }
  13. }
  14. return - 1;
  15. }
  16. / /初始化通讯录中的信息
  17. void Init_Contact(struct contact * ps)
  18. {
  19. ps- > data = (struct PeoInfo *)malloc(sizeof(struct PeoInfo) * 3);
  20. if (ps- > data = = NULL)
  21. {
  22. return;
  23. }
  24. ps- > size = 0; / /设置通讯录最初只有 0个元素
  25. ps- >capacity = DEFAULT_SZ;
  26. }
  27. void CheckCapacity(struct contact * ps)
  28. {
  29. if (ps- > size = = ps- >capacity)
  30. {
  31. / /增容
  32. struct PeoInfo * ptr = realloc(ps- > data, (ps- >capacity + 2) *sizeof(struct PeoInfo));
  33. if (ptr ! = NULL)
  34. {
  35. ps- > data = ptr;
  36. ps- >capacity + = 2;
  37. printf( "增容成功!\n");
  38. }
  39. else
  40. {
  41. printf( "增容失败!\n");
  42. }
  43. }
  44. }
  45. / /添加通讯录中的信息
  46. void Add_Contacter(struct contact * ps)
  47. {
  48. / /检测当前通讯录的容量
  49. / / 1、如果满了,就增加空间
  50. / / 2、如果不满,啥事都不干
  51. CheckCapacity(ps);
  52. / /增加数据
  53. printf( "请输入名字:");
  54. scanf( "%s", &ps- > data[ps- > size].name);
  55. printf( "请输入年龄:");
  56. scanf( "%d", &ps- > data[ps- > size].age);
  57. printf( "请输入性别:");
  58. scanf( "%s", &ps- > data[ps- > size].sex);
  59. printf( "请输入电话:");
  60. scanf( "%s", &ps- > data[ps- > size].phone);
  61. printf( "请输入地址:");
  62. scanf( "%s", &ps- > data[ps- > size]. address);
  63. ps- > size + +;
  64. printf( "添加成功!\n");
  65. }
  66. / /删除通讯录中的信息
  67. void Del_Contacter(struct contact * ps)
  68. {
  69. char name[MAX_NAME];
  70. printf( "请输入你要删除的联系人的姓名:");
  71. scanf( "%s", name);
  72. / /查找要删除的人所在的位置
  73. / /找到了返回名字所在元素的下标,没找到就返回- 1
  74. int pos = Find_byName(ps,name);
  75. if (pos = =- 1) / /删除的人不存在
  76. {
  77. printf( "要删除的人不存在!\n");
  78. }
  79. else / /删除
  80. {
  81. int j = 0;
  82. for (j = pos; j < ps- > size- 1; j + +)
  83. {
  84. ps- > data[j] = ps- > data[j + 1];
  85. }
  86. ps- > size--;
  87. printf( "删除成功!\n");
  88. }
  89. }
  90. / /查找通讯录中的信息
  91. void Find_Contacter(const struct contact * ps)
  92. {
  93. char name[MAX_NAME];
  94. printf( "请输入你要查找的联系人的姓名:");
  95. scanf( "%s", name);
  96. int pos = Find_byName(ps, name);
  97. if (pos = =- 1) / /查找的人不存在
  98. {
  99. printf( "要查找的人不存在!\n");
  100. }
  101. else
  102. {
  103. printf( "%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "姓名", "年龄", "性别", "电话", "地址");
  104. printf( "%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n", ps- > data[pos].name,
  105. ps- > data[pos].age,
  106. ps- > data[pos].sex,
  107. ps- > data[pos].phone,
  108. ps- > data[pos]. address);
  109. }
  110. }
  111. / /修改通讯录中的信息
  112. void Mod_Contacter(struct contact * ps)
  113. {
  114. char name[MAX_NAME];
  115. printf( "请输入你要修改的联系人的姓名:");
  116. scanf( "%s", name);
  117. int pos = Find_byName(ps, name);
  118. if (pos = =- 1) / /修改的人不存在
  119. {
  120. printf( "要修改的人不存在!\n");
  121. }
  122. else
  123. {
  124. printf( "请输入名字:");
  125. scanf( "%s", &ps- > data[pos].name);
  126. printf( "请输入年龄:");
  127. scanf( "%d", &ps- > data[pos].age);
  128. printf( "请输入性别:");
  129. scanf( "%s", &ps- > data[pos].sex);
  130. printf( "请输入电话:");
  131. scanf( "%s", &ps- > data[pos].phone);
  132. printf( "请输入地址:");
  133. scanf( "%s", &ps- > data[pos]. address);
  134. printf( "修改成功!\n");
  135. }
  136. }
  137. / /打印通讯录中的信息
  138. void Print_Contacter(const struct contact * ps)
  139. {
  140. if (ps- > size = = 0)
  141. {
  142. printf( "通讯录为空!\n");
  143. }
  144. else
  145. {
  146. / /标题
  147. printf( "%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "姓名", "年龄", "性别", "电话", "地址");
  148. int i = 0;
  149. while (i < ps- > size)
  150. {
  151. / /数据
  152. printf( "%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n", ps- > data[i].name,
  153. ps- > data[i].age,
  154. ps- > data[i].sex,
  155. ps- > data[i].phone,
  156. ps- > data[i]. address);
  157. i + +;
  158. }
  159. }
  160. }
  161. / /对通讯录中的信息进行排序
  162. / /排序函数
  163. / / 1.按照姓名进行排序
  164. int Conpare_ByName(const void *e 1,const void *e 2)
  165. {
  166. return strcmp(((struct PeoInfo *)e 1)- >name, ((struct PeoInfo *)e 2)- >name);
  167. }
  168. / / 2.按照年龄进行排序
  169. int Conpare_ByAge(const void * e 1, const void * e 2)
  170. {
  171. return ((struct PeoInfo *)e 1)- >age-((struct PeoInfo *)e 2)- >age;
  172. }
  173. / / 3.按照住址进行排序
  174. int Conpare_ByAddress(const void * e 1, const void * e 2)
  175. {
  176. return strcmp(((struct PeoInfo *)e 1)- > address, ((struct PeoInfo *)e 2)- > address);
  177. }
  178. void Sort_Contacter(struct contact * ps)
  179. {
  180. printf( "请选择你想排序的方式:\n");
  181. printf( "1.姓名\n2.年龄\n3.住址\n");
  182. int input = 0;
  183. scanf( "%d", & input);
  184. switch ( input)
  185. {
  186. case 1:
  187. qsort(ps- > data,ps- > size,sizeof(ps- > data[ 0]),Conpare_ByName);
  188. printf( "排序成功\n");
  189. break;
  190. case 2:
  191. qsort(ps- > data, ps- > size, sizeof(ps- > data[ 0]), Conpare_ByAge);
  192. printf( "排序成功\n");
  193. break;
  194. case 3:
  195. qsort(ps- > data, ps- > size, sizeof(ps- > data[ 0]), Conpare_ByAddress);
  196. printf( "排序成功\n");
  197. break;
  198. }
  199. }
  200. / /清空通讯中的信息
  201. void Clear_Contacter(struct contact * ps)
  202. {
  203. memset(ps- > data, 0, sizeof(ps- > data));
  204. ps- > size = 0;
  205. printf( "清空成功!\n");
  206. }
  207. / /销毁通讯录
  208. void Destory_contact(struct contact * ps)
  209. {
  210. free(ps- > data);
  211. ps- > data = NULL;
  212. }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言课程设计任务书(4) 一、题目:通讯录管理 二、目的与要求 1. 目的: (1)基本掌握面向过程程序设计的基本思路和方法; (2)达到熟练掌握C语言的基本知识和技能; (3)能够利用所学的基本知识和技能,解决简单的程序设计问题 2. 要求 基本要求: 1.         要求利用C语言面向过程的编程思想来完成系统的设计; 2.       突出C语言的函数特征,以多个函数实现每一个子功能; 3.         画出功能模块图; 4.         具有清晰的程序流程图和数据结构的详细定义; 5.       熟练掌握C语言对文件的各种操作。 创新要求: 在基本要求达到后,可进行创新设计,如系统用户功能控制,对管理员级和一般级别的用户系统功能操作不同 三、信息描述 有关该系统基本信息的描述,如:姓名、电话、城市和邮编等。 四、功能描述 1.       名单基本信息(姓名,城市,电话,邮编等)的录入,并存放在文件当中。 2.       基本信息的查询与修改。 3.       记录的添加和删除。 4.       对同一类型记录的查找:如查找同一城市的记录或同一省份的记录。 五、解决方案 1.       分析程序的功能要求,划分程序功能模块。 2.       画出系统流程图。 3.       代码的编写。定义数据结构和各个功能子函数。 4.       程序的功能调试。 5.       完成系统总结报告以及使用说明书 六、进度安排 此次课程设计时间为一周或两周,分四个阶段完成: 1.       分析设计阶段。指导教师应积极引导学生自主学习和钻研问题,明确设计要求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。 2.       编码调试阶段:根据设计分析方案编写C代码,然后调试该代码,实现课题要求的功能。 3.       总结报告阶段:总结设计工作,写出课程设计说明书,要求学生写出需求分析、总体设计、详细设计、编码、测试的步骤和内容。 4.       考核阶段。 七、撰写课程设计报告或课程设计总结 课程设计报告要求: 总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。 八、参考资料  《C语言程序设计教程》   网上相关资料(....略)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值