#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 num = *((int*)para);
printf("num = %d",num);*/
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[])//查看所有信息
{
/*int i;
int j;
STU *p;//中间变量
for(i = 0;i < person - 1;i++)// 冒泡排序
{
for(j = 0; j < person - i - 1; j++)
{
if(strcmp(str[j]->name,str[j + 1]->name) > 0)//按名字排序
{
p = str[j + 1];
str[j + 1] = str[j];
str[j] = p;
}
}
}
printf("联系人信息如下:\n");
printf("\n name age sex\n");
printf("-------------------------\n");
for(i = 0; i < person; i++)
{
printf(" %s %d %c\n",str[i]->name,str[i]->age,str[i]->sex);
printf("-------------------------\n");
}
printf("\033[0;34m[以上排名不分先后,按姓氏拼音排序]\033[0m\n");*/
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;
}
简单通讯录(结构体指针数组)
猜你喜欢
转载自blog.csdn.net/weixin_41030848/article/details/81348182
今日推荐
周排行