百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

简单通讯录(结构体指针数组) 数据结构通讯录系统程序

yuyutoo 2024-10-12 00:45 3 浏览 0 评论

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <sqlite3.h>
  5. #define MAX_LEN 1000//宏定义
  6. #define NAME_LEN 20
  7. #define NODE "\e[0m"
  8. #define BLACK "\e[0;30m"
  9. #define L_BLACK "\e[1;30m"
  10. #define RED "\e[0;31m"
  11. #define L_RED "\e[1;31m"
  12. enum HUANSHU //枚举类型,避免case语句中出现幻数,从第一个值依次累加
  13. {
  14. QUIT=0,
  15. ADD,
  16. DISPLAY,//逗号
  17. SEARCH,
  18. DELETE,
  19. MODIFY,
  20. };
  21. struct student
  22. {
  23. char name[NAME_LEN];
  24. int age;
  25. char sex;
  26. };
  27. typedef struct student STU;
  28. int person = 0;
  29. int get_result(void *para, int column_count, char *column_value[], char *column_name[])
  30. {
  31. /*int num = *((int*)para);
  32. printf("num = %d",num);*/
  33. int i;
  34. for(i = 0; i < column_count; i ++)
  35. {
  36. printf("%s|",column_name[i]);
  37. }
  38. printf("\n");
  39. for(i = 0; i < column_count; i ++)
  40. {
  41. printf("%s |",column_value[i]);
  42. }
  43. printf("\n");
  44. return 0;
  45. }
  46. void menu()//菜单
  47. {
  48. printf("---------------------------------------------------\n");
  49. printf("-------------------\033[0;34m通讯录\033[0m------------------------\n");
  50. printf("\n************\033[1;34m1、添加联系人信息\033[0m****************\n\n");
  51. printf("\n\n************\033[1;34m2、查看所有联系人\033[0m****************\n\n");
  52. printf("\n\n************\033[1;34m3、搜索联系人信息\033[0m****************\n\n");
  53. printf("\n\n************\033[1;34m4、删除联系人信息\033[0m****************\n\n");
  54. printf("\n\n************\033[1;34m5、修改联系人信息\033[0m****************\n\n");
  55. printf("\n\n------------\033[1;34m0、退出\033[0m----------------------------\n");
  56. printf("-----------------------------------------------\n");
  57. }
  58. void modify(STU *str[])//修改信息
  59. {
  60. int i;
  61. char arry[NAME_LEN];
  62. printf("请输入要修改的联系人的名字:\n");
  63. scanf("%s",arry);
  64. for(i=0;i<person;i++)
  65. {
  66. if(strcmp(str[i]->name,arry)==0)
  67. {
  68. printf("联系人信息: name age sex\n");
  69. printf(" -------------------------\n");
  70. printf(" %s %d %c\n",str[i]->name,str[i]->age,str[i]->sex);
  71. printf(" -------------------------\n");
  72. printf("请输入更改后此人的信息:\n");
  73. printf("age:");//不加'\n',scanf接在后面输入,没有换行
  74. scanf("%d",&(str[i]->age));
  75. printf("sex:");
  76. getchar();
  77. scanf("%c",&(str[i]->sex));
  78. printf("\033[0;32m修改成功!\033[0m\n");
  79. return;
  80. }
  81. }
  82. printf("\033[0;31m修改失败!不存在该联系人\033[5m");// \033[0;31m红色
  83. printf("\033[0m\n");//关闭颜色
  84. return;
  85. }
  86. //添加联系人
  87. void add(STU *str[])//指针数组
  88. {
  89. int num;
  90. char ch;
  91. printf("please input information:\n");
  92. while(1)
  93. {
  94. str[person] = (STU *)malloc(sizeof(STU));
  95. printf("姓名:");
  96. scanf("%s",str[person]->name);
  97. printf("年龄:");
  98. scanf("%d",&(str[person]->age));
  99. getchar();
  100. printf("性别:");
  101. scanf("%c",&(str[person]->sex));
  102. if(str[person]->sex != 'm'&& str[person]->sex != 'f')
  103. {
  104. free(str[person]);
  105. printf("\033[0;31m[输入信息有误,请重新输入!]\033[0m\n");
  106. continue;
  107. }
  108. sqlite3 *db;
  109. char *errmsg;
  110. //打开数据库
  111. if(sqlite3_open("test.db",&db) != SQLITE_OK)
  112. {
  113. printf("open db error!\n");
  114. exit(1);
  115. }
  116. //数据库,创建表和插入数据
  117. char sql[100] = "create table student(name text primary key,age integer,sex text)";
  118. sqlite3_exec(db,sql,NULL,NULL,&errmsg);//执行sql语句
  119. memset(sql,0,sizeof(sql));
  120. sprintf(sql,"insert into student(name,age,sex) values('%s',%d,'%c')",str[person]->name,str[person]->age,str[person]->sex);
  121. sqlite3_exec(db,sql,NULL,NULL,&errmsg);//执行语句
  122. memset(sql,0,sizeof(sql));
  123. sqlite3_close(db);//关闭数据库
  124. person ++;
  125. getchar();
  126. printf("\033[0;34m提示:[q键+回车 退出][回车 继续输入]\033[0m\n");
  127. if((ch = getchar()) == 'q')//用if语句判断,跳出外层while循环,退回主函数
  128. break;
  129. }
  130. }
  131. void display(STU *str[])//查看所有信息
  132. {
  133. /*int i;
  134. int j;
  135. STU *p;//中间变量
  136. for(i = 0;i < person - 1;i++)// 冒泡排序
  137. {
  138. for(j = 0; j < person - i - 1; j++)
  139. {
  140. if(strcmp(str[j]->name,str[j + 1]->name) > 0)//按名字排序
  141. {
  142. p = str[j + 1];
  143. str[j + 1] = str[j];
  144. str[j] = p;
  145. }
  146. }
  147. }
  148. printf("联系人信息如下:\n");
  149. printf("\n name age sex\n");
  150. printf("-------------------------\n");
  151. for(i = 0; i < person; i++)
  152. {
  153. printf(" %s %d %c\n",str[i]->name,str[i]->age,str[i]->sex);
  154. printf("-------------------------\n");
  155. }
  156. printf("\033[0;34m[以上排名不分先后,按姓氏拼音排序]\033[0m\n");*/
  157. sqlite3 *db;
  158. char *errmsg;
  159. if(sqlite3_open("test.db",&db) != SQLITE_OK)
  160. {
  161. printf("open db error!\n");
  162. exit(1);
  163. }
  164. sqlite3_exec(db,"select * from student",get_result,NULL,&errmsg);
  165. sqlite3_close(db);
  166. }
  167. void search(STU *str[])//形参也可以写作STU **str,搜索联系人
  168. {
  169. int i;
  170. char name[NAME_LEN];
  171. printf("please input the name of people you want to search:\n");
  172. scanf("%s",name);
  173. for(i = 0; i < person; i++)
  174. {
  175. if(strcmp(str[i]->name,name) == 0)
  176. {
  177. printf("\033[0;32m搜索成功:\033[0m\n");
  178. printf("联系人信息: name age sex\n");
  179. printf(" -------------------------\n");
  180. printf(" %s %d %c\n",str[i]->name,str[i]->age,str[i]->sex);
  181. printf(" -------------------------\n");
  182. return;
  183. }
  184. }
  185. printf("\033[0;31m搜索失败,不存在该联系人!\033[0m\n");
  186. }
  187. void delete(STU *str[])//删除联系人
  188. {
  189. int i;
  190. int j;
  191. char name[NAME_LEN];
  192. printf("please input the name of people you want to delete:\n");
  193. scanf("%s",name);
  194. for(i = 0; i < person; i++)
  195. {
  196. if(strcmp(str[i]->name,name) == 0)//依次往前移
  197. {
  198. printf("联系人信息: name age sex\n");
  199. printf(" -------------------------\n");
  200. printf(" %s %d %c\n",str[i]->name,str[i]->age,str[i]->sex);
  201. printf(" -------------------------\n");
  202. free(str[i]);
  203. for(j = i; j < person - 1; j ++)
  204. {
  205. str[j] = str[j + 1];
  206. }
  207. str[person - 1] = NULL;
  208. person --;
  209. printf("\033[0;32m删除成功!\033[0m\n");
  210. return;
  211. }
  212. }
  213. printf("\033[0;31m删除失败!\033[0m\n");
  214. }
  215. int main()
  216. {
  217. STU *stu[MAX_LEN] = {0};//结构体指针数组
  218. int choice;
  219. while(1)
  220. {
  221. menu();
  222. printf("\n请输入0到5进行选择:\n");
  223. scanf("%d",&choice);
  224. printf("choice = %d\n",choice);
  225. switch(choice)
  226. {
  227. case ADD:
  228. {
  229. system("clear");
  230. add(stu);
  231. break;
  232. }
  233. case DISPLAY:
  234. {
  235. system("clear");
  236. display(stu);
  237. printf("按任意键继续...\n");
  238. getchar();
  239. getchar();
  240. break;
  241. }
  242. case SEARCH:
  243. {
  244. system("clear");
  245. search(stu);
  246. printf("按任意键继续...\n");
  247. getchar();
  248. getchar();
  249. break;
  250. }
  251. case DELETE:
  252. {
  253. system("clear");
  254. delete(stu);
  255. printf("按任意键继续...\n");
  256. getchar();
  257. getchar();
  258. break;
  259. }
  260. case MODIFY:
  261. {
  262. system("clear");
  263. modify(stu);
  264. printf("按任意键继续...\n");
  265. getchar();
  266. getchar();
  267. break;
  268. }
  269. case QUIT:
  270. {
  271. exit(1);
  272. break;
  273. }
  274. }
  275. }
  276. return 0;
  277. }

相关推荐

jQuery VS AngularJS 你更钟爱哪个?

在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...

Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0

在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...

如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例

要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...

编程技巧:Jquery实时验证,指定长度的「负小数」

为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...

编程技巧:Jquery实时验证,指定长度的「正小数」

为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...

jquery.validate检查数组全部验证

问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...

Vue进阶(幺叁肆):npm查看包版本信息

第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...

layui中使用lay-verify进行条件校验

一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...

jQuery是什么?如何使用? jquery是什么功能组件

jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...

django框架的表单form的理解和用法-9

表单呈现...

jquery对上传文件的检测判断 jquery实现文件上传

总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...

大数据开发基础之JAVA jquery 大数据java实战

上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...

推荐四个开源的jQuery可视化表单设计器

jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...

取消回复欢迎 发表评论: