二维码
微世推网

扫一扫关注

当前位置: 首页 » 快报资讯 » 今日快报 » 正文

简单通讯录(结构体指针数组)

放大字体  缩小字体 发布日期:2021-12-23 14:17:47    作者:熊炎曦    浏览次数:301
导读

#include stdio.h#include string.h#include stdlib.h#include sqlite3.h#define MAX_LEN 1000//宏定义#define NAME_LEN 20#define NODE "\e[0m"#define BLACK "\e[0;30m"#define L_BLACK "\e[1;30m"#define RED "\e[0;31m"#define L_R

    #include <stdio.h>#include <string.h>#include <stdlib.h>#include <sqlite3.h>#define MAX_LEN 1000//宏定义#define NAME_LEN 20#define NODE "\e[0m"#define BLACK "\e[0;30m"#define L_BLACK "\e[1;30m"#define RED "\e[0;31m"#define L_RED "\e[1;31m"enum HUANSHU //枚举类型,避免case语句中出现幻数,从第壹个值依次累加{QUIT=0,ADD, DISPLAY,//逗号SEARCH, DELETe,MODIFY,};struct student { char name[NAME_LEN];int age; char sex;};typedef struct student STU;int person = 0; int get_result(void *para, int column_count, char *column_value[], char *column_name[]){ int i; for(i = 0; i < column_count; i ++){ printf("%s|",column_name[i]);}printf("\n"); for(i = 0; i < column_count; i ++) { printf("%s |",column_value[i]);}printf("\n");return 0;} void menu()//菜单{ printf("---------------------------------------------------\n"); printf("-------------------\033[0;34m通讯录\033[0m------------------------\n");printf("\n************\033[1;34m1、添加联系人信息\033[0m****************\n\n"); printf("\n\n************\033[1;34m2、查看所有联系人\033[0m****************\n\n");printf("\n\n************\033[1;34m3、搜索联系人信息\033[0m****************\n\n");printf("\n\n************\033[1;34m4、删除联系人信息\033[0m****************\n\n");printf("\n\n************\033[1;34m5、修改联系人信息\033[0m****************\n\n"); printf("\n\n------------\033[1;34m0、退出\033[0m----------------------------\n"); printf("-----------------------------------------------\n");} void modify(STU *str[])//修改信息{ int i; char arry[NAME_LEN]; printf("请输入要修改得联系人得名字:\n"); scanf("%s",arry); for(i=0;i<person;i++) { if(strcmp(str[i]->name,arry)==0){ printf("联系人信息: name age sex\n"); printf(" -------------------------\n"); printf(" %s %d %c\n",str[i]->name,str[i]->age,str[i]->sex); printf(" -------------------------\n"); printf("请输入更改后此人得信息:\n"); printf("age:");//不加'\n',scanf接在后面输入,没有换行scanf("%d",&(str[i]->age));printf("sex:");getchar();scanf("%c",&(str[i]->sex));printf("\033[0;32m修改成功!\033[0m\n");return;}}printf("\033[0;31m修改失败!不存在该联系人\033[5m");// \033[0;31m红色printf("\033[0m\n");//关闭颜色return;}//添加联系人void add(STU *str[])//指针数组{int num;char ch; printf("please input information:\n");while(1){ str[person] = (STU *)malloc(sizeof(STU));printf("姓名:");scanf("%s",str[person]->name);printf("年龄:");scanf("%d",&(str[person]->age));getchar();printf("性别:");scanf("%c",&(str[person]->sex));if(str[person]->sex != 'm'&& str[person]->sex != 'f'){ free(str[person]); printf("\033[0;31m[输入信息有误,请重新输入!]\033[0m\n"); continue; }sqlite3 *db;char *errmsg;//打开数据库if(sqlite3_open("test.db",&db) != SQLITE_OK){ printf("open db error!\n"); exit(1);}//数据库,创建表和插入数据char sql[100] = "create table student(name text primary key,age integer,sex text)"; sqlite3_exec(db,sql,NULL,NULL,&errmsg);//执行sql语句memset(sql,0,sizeof(sql)); sprintf(sql,"insert into student(name,age,sex) values('%s',%d,'%c')",str[person]->name,str[person]->age,str[person]->sex); sqlite3_exec(db,sql,NULL,NULL,&errmsg);//执行语句memset(sql,0,sizeof(sql)); sqlite3_close(db);//关闭数据库 person ++;getchar();printf("\033[0;34m提示:[q键+回车 退出][回车 继续输入]\033[0m\n");if((ch = getchar()) == 'q')//用if语句判断,跳出外层while循环,退回主函数 break;}}void display(STU *str[])//查看所有信息{ sqlite3 *db;char *errmsg; if(sqlite3_open("test.db",&db) != SQLITE_OK){ printf("open db error!\n"); exit(1);}sqlite3_exec(db,"select * from student",get_result,NULL,&errmsg); sqlite3_close(db);} void search(STU *str[])//形参也可以写作STU **str,搜索联系人{ int i;char name[NAME_LEN]; printf("please input the name of people you want to search:\n"); scanf("%s",name); for(i = 0; i < person; i++){ if(strcmp(str[i]->name,name) == 0) { printf("\033[0;32m搜索成功:\033[0m\n"); printf("联系人信息: name age sex\n"); printf(" -------------------------\n"); printf(" %s %d %c\n",str[i]->name,str[i]->age,str[i]->sex); printf(" -------------------------\n");return;}}printf("\033[0;31m搜索失败,不存在该联系人!\033[0m\n");} void delete(STU *str[])//删除联系人{ int i;int j; char name[NAME_LEN]; printf("please input the name of people you want to delete:\n"); scanf("%s",name); for(i = 0; i < person; i++){ if(strcmp(str[i]->name,name) == 0)//依次往前移 { printf("联系人信息: name age sex\n"); printf(" -------------------------\n"); printf(" %s %d %c\n",str[i]->name,str[i]->age,str[i]->sex); printf(" -------------------------\n"); free(str[i]); for(j = i; j < person - 1; j ++){ str[j] = str[j + 1];}str[person - 1] = NULL;person --;printf("\033[0;32m删除成功!\033[0m\n");return;}}printf("\033[0;31m删除失败!\033[0m\n");}int main(){ STU *stu[MAX_LEN] = {0};//结构体指针数组int choice;while(1){ menu(); printf("\n请输入0到5进行选择:\n");scanf("%d",&choice); printf("choice = %d\n",choice);switch(choice){ case ADD:{ system("clear"); add(stu); break;} case DISPLAY: { system("clear"); display(stu);printf("按任意键继续...\n");getchar();getchar(); break;} case SEARCH: { system("clear"); search(stu);printf("按任意键继续...\n");getchar();getchar(); break;} case DELETE:{ system("clear"); delete(stu);printf("按任意键继续...\n");getchar();getchar(); break; }case MODIFY:{ system("clear"); modify(stu); printf("按任意键继续...\n");getchar();getchar(); break;}case QUIT:{ exit(1); break;}}} return 0;}
 
(文/熊炎曦)
免责声明
• 
本文仅代表发布者:熊炎曦个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
 

Copyright©2015-2025 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈