简单数据库编写的简易通讯录

本文介绍了一个基于SQLite实现的简易通讯录管理系统,支持添加、查找、删除及修改联系人信息等功能。通过命令行界面进行交互,演示了如何使用SQLite进行基本的数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include <stdio.h>  
  2. #include <string.h>  
  3. #include <stdlib.h>  
  4. #include <sqlite3.h>  
  5.   
  6. #define MAX_SIZE 1024  
  7.   
  8. static sqlite3 *db = NULL;  
  9. static char *errmsg = NULL;  
  10.   
  11. int count = 0;  
  12.   
  13. int dis();  
  14.   
  15. void welcome()  
  16. {  
  17.     printf("\t\t******************************************************\n");  
  18.     printf("\t\t*                                                    *\n");  
  19.     printf("\t\t*                  欢迎使用通讯录                      *\n");  
  20.     printf("\t\t*****************************************************\n");  
  21.     printf("\t\t*                       |                           *\n");  
  22.     printf("\t\t*    (1)添加联系人        |       (2)查找联系人        *\n");  
  23.     printf("\t\t* - - ---------------------- *\n");  
  24.     printf("\t\t*                       |                           *\n");  
  25.     printf("\t\t*    (3)删除联系人        |       (4)修改联系人        *\n");  
  26.     printf("\t\t* - - - - - - - - - - - - - - - - - *\n");  
  27.     printf("\t\t*                       |                           *\n");  
  28.     printf("\t\t*    (5)查看联系人        |       (6)退出             *\n");  
  29.     printf("\t\t******************************************************\n");  
  30.     printf("\n");  
  31.     printf("\n");  
  32.                                           
  33. }  

  34. //---------add---------//  
  35. void add()  
  36. {  
  37.     char add;  
  38.     char quit_add;  
  39.     char name[MAX_SIZE];  
  40.     char phone[MAX_SIZE];  
  41.     char adds[MAX_SIZE];  
  42.     char sql[MAX_SIZE];  
  43.   
  44.     while(1)  
  45.     {  
  46.         printf("按'a'添加联系人\n");  
  47.         printf("按'q'退出\n");  
  48.         scanf("%s",&add);  
  49.   
  50.         while(('a' != add)&&('q' != add))  
  51.         {  
  52.             printf("输入信息错误,请重新输入!\n");  
  53.             scanf("%s",&add);  
  54.         }  
  55.   
  56.         if('q' == add)  
  57.         {  
  58.             system("clear");  
  59.             break;  
  60.         }  
  61.   
  62.         if('a' == add)  
  63.         {  
  64.             printf("输入姓名:\n");  
  65.             scanf("%s",name);  
  66.             printf("输入手机号码:\n");  
  67.             scanf("%s",phone);  
  68.             printf("输入地址:\n");  
  69.             scanf("%s",adds);  
  70.   
  71.             if(sprintf(sql,"insert into tel(姓名,号码,地址) values('%s','%s','%s')",name,phone,adds) == -1)  
  72.             {  
  73.                 printf("添加失败!\n");  
  74.                 exit(1);  
  75.             }  
  76.   
  77.             if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != 0)  
  78.             {  
  79.                 printf("添加失败!\n");  
  80.                 exit(1);  
  81.             }  
  82.   
  83.             memset(sql,0,MAX_SIZE);  
  84.             memset(name,0,MAX_SIZE);  
  85.             memset(phone,0,MAX_SIZE);  
  86.             memset(adds,0,MAX_SIZE);  
  87.   
  88.             printf("添加成功!\n");  
  89.   
  90.             printf("是否继续添加联系人?(y)or(n):");  
  91.             scanf("%s",&quit_add);  
  92.   
  93.             while(('y' != quit_add) && ('n' != quit_add))  
  94.             {  
  95.                 printf("信息输入错误,请重新输入!\n");  
  96.                 scanf("%s",&quit_add);  
  97.             }  
  98.   
  99.             if('n' == quit_add)  
  100.             {  
  101.                 system("clear");  
  102.                 break;  
  103.             }  
  104.   
  105.             if('y' == quit_add)  
  106.             {  
  107.                 system("clear");  
  108.             }  
  109.         }  
  110.   
  111.     }  
  112. }  
  113. //----------end--------------//  

  114.   
  115. //----------delete----------//  
  116. void delete()  
  117. {  
  118.     int id;  
  119.   
  120.     char src1;  
  121.     char src2;  
  122.     char src3;  
  123.     char flag;  
  124.     char sql[MAX_SIZE];  
  125.     char name[MAX_SIZE];  
  126.   
  127.     while(1)  
  128.     {  
  129.         strcpy(sql,"select * from tel");  
  130.   
  131.         sqlite3_exec(db,sql,dis,NULL,&errmsg);  
  132.   
  133.         memset(sql,0,MAX_SIZE);  
  134.   
  135.         printf("按'n'姓名删除\n");  
  136.         printf("按'i'ID删除\n");  
  137.         printf("按'q'退出\n");  
  138.         scanf("%s",&src1);  
  139.   
  140.         while(('n' != src1)&&('q' != src1)&&('i' != src1))  
  141.         {  
  142.             printf("输入信息错误,请重新输入!\n");  
  143.             scanf("%s",&src1);  
  144.         }  
  145.   
  146.         if('q' == src1)  
  147.         {  
  148.             system("clear");  
  149.             break;  
  150.         }  
  151.   
  152.         if('n' == src1)  
  153.         {  
  154.            printf("请输入要删除联系人的姓名:");  
  155.            scanf("%s",name);  
  156.               
  157.            system("clear");  
  158.   
  159.            if(sprintf(sql,"select * from tel where 姓名='%s'",name) ==-1)  
  160.            {  
  161.                printf("删除失败!\n");  
  162.                exit(1);  
  163.            }  
  164.              
  165.                  
  166.            if(sqlite3_exec(db,sql,dis,NULL,&errmsg) != 0)  
  167.            {  
  168.                printf("删除失败!\n");  
  169.                exit(1);  
  170.            }  
  171.   
  172.            memset(sql,0,MAX_SIZE);  
  173.   
  174.            printf("是否删除该联系人?(y)or(n)");  
  175.            scanf("%s",&src2);  
  176.            while(('y' != src2)&&('n' != src2))  
  177.            {  
  178.                printf("输入信息错误,请重新输入!\n");  
  179.                scanf("%s",&src2);  
  180.            }  
  181.   
  182.            if('y' == src2)  
  183.            {  
  184.                if(sprintf(sql,"delete from tel where 姓名='%s'",name) == -1)  
  185.                {  
  186.                    printf("删除失败!\n");  
  187.                    exit(1);  
  188.                }  
  189.   
  190.                if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != 0)  
  191.                {  
  192.                    printf("删除失败!\n");  
  193.                    exit(1);  
  194.                }  
  195.   
  196.                printf("删除成功!\n");  
  197.                sleep(1);  
  198.   
  199.                memset(sql,0,MAX_SIZE);  
  200.                memset(name,0,MAX_SIZE);  
  201.   
  202.                system("clear");  
  203.            }  
  204.   
  205.            if('n' == src2)  
  206.            {  
  207.                system("clear");  
  208.            }  
  209.         }  
  210.   
  211.         if('i' == src1)  
  212.         {  
  213.             printf("请输入想删除联系人的ID:");  
  214.             scanf("%d",&id);  
  215.   
  216.             system("clear");  
  217.   
  218.             if(sprintf(sql,"select * from tel where ID=%d",id) == -1)  
  219.             {  
  220.                 printf("删除失败!\n");  
  221.                 exit(1);  
  222.             }  
  223.   
  224.             if(sqlite3_exec(db,sql,dis,NULL,&errmsg) != 0)  
  225.             {  
  226.                 printf("删除失败!\n");  
  227.                 exit(1);  
  228.             }  
  229.   
  230.             memset(sql,0,MAX_SIZE);  
  231.   
  232.             printf("是否删除该联系人?(y)or(n)");  
  233.             scanf("%s",&src3);  
  234.   
  235.             while(('y' != src3)&&('n' != src3))  
  236.             {  
  237.                 printf("输入信息错误,请重新输入!\n");  
  238.                 scanf("%s",&src3);  
  239.             }  
  240.   
  241.             if('y'== src3)  
  242.             {  
  243.                 if(sprintf(sql,"delete from tel where ID=%d",id) == -1)  
  244.                 {  
  245.                     printf("删除失败!\n");  
  246.                     exit(1);  
  247.                 }  
  248.   
  249.                 if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != 0)  
  250.                 {  
  251.                     printf("删除失败!\n");  
  252.                     exit(1);  
  253.                 }  
  254.   
  255.                 printf("删除成功!\n");  
  256.                 system("clear");  
  257.                 memset(sql,0,MAX_SIZE);  
  258.             }  
  259.   
  260.             if('n' == src3)  
  261.             {  
  262.                 system("clear");  
  263.             }  
  264.         }  
  265.   
  266.     }  
  267. }  
  268. //------------end-------------//  
  269.   
  270.   
  271. //------------find------------//  
  272. void find()  
  273. {  
  274.     char find;  
  275.     char quit_find;  
  276.     char sql[MAX_SIZE];  
  277.     char name[MAX_SIZE];  
  278.     char **result = NULL;  
  279.     int nrow;  
  280.     int column;  
  281.     int count;  
  282.   
  283.     while(1)  
  284.     {  
  285.         getchar();  
  286.   
  287.         printf("按'n'查找\n");  
  288.         printf("按'q'退出\n");  
  289.         scanf("%s",&find);  
  290.   
  291.         while(('n' != find)&&('q' != find))  
  292.         {  
  293.             printf("输入信息错误,请重新输入!\n");  
  294.             scanf("%s",&find);  
  295.         }  
  296.   
  297.         if('q' == find)  
  298.         {  
  299.             system("clear");  
  300.             break;  
  301.         }  
  302.   
  303.         if('n' == find)  
  304.         {  
  305.             printf("请输入姓名:");  
  306.             scanf("%s",name);  
  307.   
  308.             strcpy(sql,"select * from tel");  
  309.             if(sqlite3_get_table(db,sql,&result,&nrow,&column,&errmsg) != 0)  
  310.             {  
  311.                 printf("查找失败!\n");  
  312.                 exit(1);  
  313.             }  
  314.   
  315.             if(nrow == 0)  
  316.             {  
  317.                 printf("找不到联系人!\n");  
  318.             }  
  319.   
  320.             for(count = 0; count < (nrow + 1)*column; count++)  
  321.             {  
  322.                 if(strcmp(name,result[count]) == 0)  
  323.                 {  
  324.                     printf("ID:\t\t");  
  325.                     printf("%s\n",result[count - 1]);  
  326.                     printf("姓名:\t\t");  
  327.                     printf("%s\n",result[count]);  
  328.                     printf("号码\t\t");  
  329.                     printf("%s\n",result[count + 1]);  
  330.                     printf("地址:\t\t");  
  331.                     printf("%s\n",result[count + 2]);  
  332.                     printf("=======================");  
  333.                     printf("\n");  
  334.                 }  
  335.   
  336.             }  
  337.   
  338.             memset(sql,0,MAX_SIZE);  
  339.             memset(name,0,MAX_SIZE);  
  340.             sqlite3_free_table(result);  
  341.             result = NULL;  
  342.   
  343.             printf("是否退出查看?(y)or(n)");  
  344.             scanf("%s",&quit_find);  
  345.   
  346.             while(('y' != quit_find)&&('n' != quit_find))  
  347.             {  
  348.                 printf("输入信息错误,请重新输入!\n");  
  349.                 scanf("%s",&quit_find);  
  350.             }  
  351.   
  352.             if('y' == quit_find)  
  353.             {  
  354.                 system("clear");  
  355.                 break;  
  356.             }  
  357.             system("clear");  
  358.   
  359.         }  
  360.   
  361.     }  
  362. }  
  363. //-------------end-------------//  
  364.   
  365.   
  366. //------------alter------------//  
  367. void alter()  
  368. {  
  369.     int ID;  
  370.   
  371.     char alter;  
  372.     char quit_alter;  
  373.     char sql[MAX_SIZE];  
  374.     char name_al[MAX_SIZE];  
  375.     char name[MAX_SIZE];  
  376.     char phone[MAX_SIZE];  
  377.     char adds[MAX_SIZE];  
  378.   
  379.     while(1)  
  380.     {  
  381.         strcpy(sql,"select * from tel");  
  382.         if(sqlite3_exec(db,sql,dis,NULL,&errmsg) != 0)  
  383.         {  
  384.             printf("修改联系人失败!\n");  
  385.             exit(1);  
  386.         }  
  387.   
  388.         memset(sql,0,MAX_SIZE);  
  389.   
  390.         printf("(n)姓名修改\n");  
  391.         printf("(i)ID修改\n");  
  392.         printf("(q)退出\n");  
  393.         printf("输入选项:");  
  394.   
  395.         scanf("%s",&alter);  
  396.   
  397.         while(('n' != alter)&&('q' != alter)&&('i' != alter))  
  398.         {  
  399.             printf("输入信息错误,请重新输入!\n");  
  400.             scanf("%s",&alter);  
  401.         }  
  402.   
  403.         if('q' == alter)  
  404.         {  
  405.             system("clear");  
  406.             break;  
  407.         }  
  408.   
  409.         if('n' == alter)  
  410.         {  
  411.             printf("请输入要修改联系人的姓名");  
  412.             scanf("%s",name_al);  
  413.   
  414.             system("clear");  
  415.   
  416.             printf("输入姓名:\n");  
  417.             scanf("%s",name);  
  418.             printf("输入手机号码:\n");  
  419.             scanf("%s",phone);  
  420.             printf("输入地址:\n");  
  421.             scanf("%s",adds);  
  422.   
  423.             sprintf(sql,"update tel set 姓名='%s',号码='%s',地址='%s' where 姓名='%s'",name,phone,adds,name_al);  
  424.             sqlite3_exec(db,sql,NULL,NULL,&errmsg);  
  425.             memset(sql,0,MAX_SIZE);  
  426.             memset(name_al,0,MAX_SIZE);  
  427.             memset(name,0,MAX_SIZE);  
  428.             memset(phone,0,MAX_SIZE);  
  429.             memset(adds,0,MAX_SIZE);  
  430.             printf("修改成功\n");  
  431.   
  432.         }  
  433.   
  434.         if('i' == alter)  
  435.         {  
  436.             printf("请输入要修改联系人的ID:");  
  437.             scanf("%d",&ID);  
  438.               
  439.             system("clear");  
  440.   
  441.             printf("输入姓名:\n");  
  442.             scanf("%s",name);  
  443.             printf("输入手机号码:\n");  
  444.             scanf("%s",phone);  
  445.             printf("输入地址:\n");  
  446.             scanf("%s",adds);  
  447.   
  448.             sprintf(sql,"update tel set 姓名='%s',号码='%s',地址='%s' where ID=%d",name,phone,adds,ID);  
  449.             sqlite3_exec(db,sql,NULL,NULL,&errmsg);  
  450.   
  451.             memset(sql,0,MAX_SIZE);  
  452.             memset(name,0,MAX_SIZE);  
  453.             memset(phone,0,MAX_SIZE);  
  454.             memset(adds,0,MAX_SIZE);  
  455.             printf("修改成功!\n");  
  456.         }  
  457.       
  458.         printf("是否退出?(y)or(n)");  
  459.         scanf("%s",&quit_alter);  
  460.   
  461.         while(('y' != quit_alter)&&('n' != quit_alter))  
  462.         {  
  463.             printf("输入信息错误,请重新输入!\n");  
  464.             scanf("%s",&quit_alter);  
  465.         }  
  466.   
  467.         if('y' == quit_alter)  
  468.         {  
  469.             system("clear");  
  470.             break;  
  471.         }  
  472.   
  473.         if('n' == quit_alter)  
  474.         {  
  475.             system("clear");  
  476.         }  
  477.   
  478.     }  
  479. }  
  480. //------------end----------------//  
  481.   
  482.   
  483. //-------------display------------//  
  484. int dis(void *para,int column,char **columnvalue,char *columnname[])  
  485. {  
  486.     int i;  
  487.   
  488.     for(i = 0; i < column; i++)  
  489.     {  
  490.         printf("%s:\t\t%s\n",columnname[i],columnvalue[i]);  
  491.     }  
  492.     printf("====================");  
  493.     printf("\n");  
  494.   
  495.     return 0;  
  496. }  
  497.   
  498. void display()  
  499. {  
  500.     char quit_dis;  
  501.     char sql[MAX_SIZE];  
  502.     char **Result = NULL;  
  503.     int Row;  
  504.     int Column;  
  505.   
  506.     while(1)  
  507.     {  
  508.   
  509.         strcpy(sql,"select * from tel");  
  510.         if(sqlite3_get_table(db,sql,&Result,&Row,&Column,&errmsg) != 0)  
  511.         {  
  512.             printf("查找失败!\n");  
  513.             exit(1);  
  514.         }  
  515.   
  516.         if(Row == 0)  
  517.         {  
  518.             printf("无联系人!\n");  
  519.             sleep(1);  
  520.             system("clear");  
  521.   
  522.             memset(sql,0,MAX_SIZE);  
  523.               
  524.             sqlite3_free_table(Result);  
  525.             Result = NULL;  
  526.               
  527.             return;  
  528.         }  
  529.         else  
  530.         {  
  531.             memset(sql,0,MAX_SIZE);  
  532.             Result = NULL;  
  533.   
  534.             strcpy(sql,"select * from tel order by 姓名");  
  535.   
  536.             if(sqlite3_exec(db,sql,dis,NULL,&errmsg) != 0)  
  537.             {  
  538.                 printf("查看联系人失败!\n");  
  539.                 exit(1);  
  540.             }  
  541.   
  542.             memset(sql,0,MAX_SIZE);  
  543.   
  544.             printf("是否退出查看?(y)or(n)");  
  545.             scanf("%s",&quit_dis);  
  546.   
  547.             while(('y' != quit_dis)&&('n' != quit_dis))  
  548.             {  
  549.                 printf("输入信息错误,请重新输入!\n");  
  550.                 scanf("%s",&quit_dis);  
  551.             }  
  552.   
  553.             if('y' == quit_dis)  
  554.             {  
  555.                 system("clear");  
  556.                 break;  
  557.             }  
  558.   
  559.   
  560.             if('n' == quit_dis)  
  561.             {  
  562.                 system("clear");  
  563.             }  
  564.         }  
  565.     }  
  566.   
  567. }  
  568. //-------------end-------------//  
  569.   
  570.   
  571. //-----------order-------------//  
  572. void order()  
  573. {  
  574.     char odr;  
  575.   
  576.     while(1)  
  577.     {  
  578.         printf("请输入您的选项:");  
  579.         scanf("%s",&odr);  
  580.   
  581.         while(('1' != odr)&&('2' != odr)&&('3' != odr)&&('4' != odr)&&('5' != odr)&&('6' != odr))  
  582.         {  
  583.             printf("输入信息错误,请重新输入!\n");  
  584.             scanf("%s",&odr);  
  585.         }  
  586.   
  587.         switch(odr)  
  588.         {  
  589.             case '1':  
  590.                 {  
  591.                     system("clear");  
  592.                     add();  
  593.                     break;  
  594.                 }  
  595.   
  596.             case '2':  
  597.                 {  
  598.                     system("clear");  
  599.                     find();  
  600.                     break;  
  601.                 }  
  602.   
  603.             case '3':  
  604.                 {  
  605.                     system("clear");  
  606.                     delete();  
  607.                     break;  
  608.                 }  
  609.   
  610.             case '4':  
  611.                 {  
  612.                     system("clear");  
  613.                     alter();  
  614.                     break;  
  615.                 }  
  616.   
  617.             case '5':  
  618.                 {  
  619.                     system("clear");  
  620.                     display();  
  621.                     break;  
  622.                 }  
  623.   
  624.                 case '6':  
  625.                 {  
  626.                     system("clear");  
  627.                     sqlite3_exec(db,".exit",NULL,NULL,&errmsg);  
  628.                     exit(0);  
  629.                 }  
  630.   
  631.                 default:  
  632.                 {  
  633.                     break;  
  634.                 }  
  635.         }  
  636.   
  637.         welcome();  
  638.     }  
  639. }  
  640. //------------end-------------//  
  641.   
  642.   
  643. //-------create table---------//  
  644. int table()  
  645. {  
  646.     if(sqlite3_exec(db,"create table tel(ID integer primary key,姓名 text,号码 text,地址 text)",NULL,NULL,&errmsg) == 0)  
  647.     {  
  648.         printf("关系创建成功\n");  
  649.         sleep(1);  
  650.         system("clear");  
  651.         return 0;  
  652.     }  
  653.     else  
  654.     {  
  655.         return -1;  
  656.     }  
  657. }  
  658.   
  659. int main()  
  660. {  
  661.     if(sqlite3_open("tel.db",&db) != 0)  
  662.     {  
  663.         printf("创建数据库失败!\n");  
  664.         exit(1);  
  665.     }  
  666.       
  667.     table();  
  668.     welcome();  
  669.     order();  
  670. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值