C语言写郑州大学校友通讯录
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN sizeof(struct address_list) /*
*************************通讯录结构体***********************************
*/ struct address_list
{
char name[]; //姓名
char job[]; //工作
char telNO[]; //手机号
char email[]; //电子邮件
char address[];//通讯地址
struct address_list* next; };
//函数的声明
struct address_list* creat(); // 调用creat()函数完成创建
void print(struct address_list*head); // 调用print()函数进行输出
struct address_list* sort(struct address_list*head); //调用sort()函数按人名进行排序
struct address_list* menu(struct address_list*head); //调用menu()综合操作
void search(struct address_list*head); //调用search()函数根据姓名进行查找。
struct address_list* release(struct address_list *head); //用release()函数释放内存
struct address_list* delete_List(struct address_list*head); //调用delete_List()函数删除通讯录
struct address_list* load(struct address_list*head); //调用load()函数将文件中的信息加载到链表中
void save(struct address_list *head); //调用save()函数将链表中的信息保存到文件中
struct address_list* insert(struct address_list*head); //用insert()函数增加
void display(struct address_list*head); //调用display()函数根据姓名进行查找
void showJobByName(struct address_list*head); //调用showJobByName()函数根据姓名进行查找
void showTelNOByName(struct address_list*head);//调用showTelByName()函数根据姓名进行查找
void showEmailByName(struct address_list*head);//调用showEmailByName()函数根据姓名进行查找
void showAddressByName(struct address_list*head);//调用showAddressByName()函数根据姓名进行查找 //全局变量 int n; //n代表通讯录中的人数
struct address_list *head=NULL; /*
********************主模块**************************
*/
int main()
{ char num[];
printf("\t\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=\n");
printf("\t\t\t*=* 郑州大学校友通讯录 *=*\n");
printf("\t\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=\n");
while()
{
printf("\t\t\t*************************************************\n");
printf("\t\t\t*** 1:创建通讯录 ***\n");
printf("\t\t\t*** 2:按名字排序 ***\n");
printf("\t\t\t*** 3:综合操作 ***\n");
printf("\t\t\t*** 4:删除 ***\n");
printf("\t\t\t*** 5:保存 ***\n");
printf("\t\t\t*** 6:打开 ***\n");
printf("\t\t\t*** 0: 退出 ***\n");
printf("\t\t\t*************************************************\n"); //让用户进行选择要进行的操作!!
printf("请输入您要进行的操作:\n");
gets(num); //输入用户进行的选择,按下相应的数字键即可。 switch(*num)
{ //创建通讯录
case '':
{
if(head==NULL)
{ //第一次进入while循环时,head是空的,以后进入添加通讯录,先释放原来的内存,再进行添加!
head=creat();
print(head);
}
else
{
head=release(head);
head=creat();
print(head);
}
break;
}
//按名字进行排序
case '':
{
head=sort(head);
break;
}
//进行综合操作
case '':
{
head=menu(head); break; }
//进行删除操作
case '' :
{
head=delete_List(head);
print(head);
break;
}
//进行文件保存操作
case '':
{
save(head);
print(head); break; }
//进行打开文件操作
case '':
{
load(head);
break; } //退出操作
case '':
{
head=release(head);
break;
}
default :
{
printf("输入有误,此项不存在!!");
break;
}
}
}
return ;
} /*
*******************************创建通讯录模块***********************************
创建通讯录模块的功能是实现对联系人信息的添加,它将用户输入的联系人信息存储
在链表中,然后返回链表的头指针。创建通讯录模块包括了creat()和print()两个函数
*/ /*---------------------creat()函数的代码如下:--------------------------*/
struct address_list *creat()
{
struct address_list *head,*p1,*p2;
char name[];
n=;
p1=(struct address_list *)malloc(LEN); //分给p1一个内存,里面存储的是指向address_list结构体的指针
p2=p1; printf("请输入通讯录的内容\n姓名输入为0时表示创建完毕!!!!\n") ;
printf("请输入姓名:"); gets(name); //输入姓名。 if(strcmp(name,"")!=)
{
strcpy(p1->name,name); //把输入的姓名存到链表的结点中。
//输入职业
printf("请输入职业:");
gets(p1->job);
//输入手机号
printf("请输入手机号:") ;
gets(p1->telNO);
//输入电子邮件账号
printf("请输入电子邮件;") ;
gets(p1->email);
//输入通信地址
printf("请输入通信地址:") ;
gets(p1->address);
head=NULL;
while()
{
n++; //计算通信录条目数
if(n==)
{
head=p1;
}
else
{
p2->next=p1;
}
p2=p1;
printf("请输入姓名:");
gets(name);
if(strcmp(name,"")==)
{
break;
}
else
{
p1=(struct address_list *)malloc(LEN); //重新获得一个内存空间, 存储指向address_list结构体的指针
strcpy(p1->name,name); //把输入的姓名存到链表的结点中。
//输入职业
printf("请输入职业:");
gets(p1->job);
//输入手机号
printf("请输入手机号:") ;
gets(p1->telNO);
//输入电子邮件账号
printf("请输入电子邮件;") ;
gets(p1->email);
//输入通信地址
printf("请输入通信地址:") ;
gets(p1->address);
} } p2->next=NULL;
return head; //返回值为链表的头指针
} else
{
return NULL;
}
} /******************************输出模块*******************************/ /*
print()函数用来输出通讯录中的所有人的联系人信息,参数是head通讯录链表的头结点
*/ //**************************print函数的代码如下*********************************
void print(struct address_list*head)
{
if(head==NULL)
{
printf("很抱歉,您的通讯录为空,不能输出!!\n");
}
else
{
struct address_list *p;
p=head;
printf("您的通信录中的人数为;%d\n\n",n);
printf("====================================================================================\n");
printf("=====姓名=====工作=====手机号================电子邮件==================通讯地址=====\n");
while(p!=NULL)
{
printf(" ");
printf("%s",p->name); //输出姓名
printf(" ");
printf("%s",p->job); //输出职业
printf(" ");
printf("%s",p->telNO); //输出电话号码
printf(" ");
printf("%s",p->email); //输出电子邮件
printf(" ");
printf("%s\n",p->address); //输出通讯地址 p=p->next;
}
printf("======================================================================================\n");
}
} /******************************排序模块****************************** 排序模块的功能是按照姓名的首字母顺序对通讯录中的联系人进行排序 */
//****************************sort()函数的代码如下**************************************** struct address_list *sort(struct address_list*head)
{
struct address_list *p1,*p2;
struct address_list1
{
char name[]; //姓名
char job[]; //工作
char telNO[]; //手机号
char email[]; //电子邮件
char address[];//通讯地址
}; struct address_list1 list[];
struct address_list1 tempList;
int i,j;
if(head==NULL)
{
printf("通讯录为空,不能进行排序哦~\n");
return head;
}
p1=head; //把头结点赋给p1。
for(i=;i<n,p1!=NULL;i++)
{ //将当前结点的名字存到数组中
strcpy(list[i].name,p1->name);
//将当前结点的职业存到数组中
strcpy(list[i].job,p1->job);
//将当前结点的手机号存到数组中
strcpy(list[i].telNO,p1->telNO);
//将当前结点的电子邮件存到数组中
strcpy(list[i].email,p1->email);
//将当前结点的通讯地址存到数组中
strcpy(list[i].address,p1->address);
p2=p1;
p1=p1->next;
}
head=release(head); //释放链表空间
/*利用冒泡排序法,按照联系人的首字母进行排序*/
for(i=;i<n-;i++)
{
for(j=i+;j<n;j++)
{
if(strcmp(list[i].name,list[j].name)>)
{
tempList=list[i];
list[i]=list[j];
list[j]=tempList;
}
}
}
//需要重新创建一个链表,,将排完序的联系人重新以结构体的形式存到内存中
/**************************创建第一个结点*******************************/
p1=(struct address_list *)malloc(LEN);
//将数组中的第一个元素放到链表中的第一个结点中
strcpy(p1->name,list[].name);
strcpy(p1->job,list[].job);
strcpy(p1->telNO,list[].telNO);
strcpy(p1->email,list[].email);
strcpy(p1->address,list[].address);
head=p1;
p2=p1;
for(i=;i<n;i++)
{
p1=(struct address_list *)malloc(LEN);
//将数组中的其他元素放到链表中的下面结点中
strcpy(p1->name,list[i].name);
strcpy(p1->job,list[i].job);
strcpy(p1->telNO,list[i].telNO);
strcpy(p1->email,list[i].email);
strcpy(p1->address,list[i].address);
p2->next=p1;
p2=p1;
}
p2->next=NULL;
printf("按姓名排完序是;\n");
print(head) ;
return head; } /**********************************综合操作模块******************************************
综合操作模块可以分成几个小模块,每个小模块负责一项功能,具体可划分为查找联系人,显示单个联
系人信息和增加联系人三个部分。
在综合操作模块中先定义了menu()函数,负责整个模块的操作流程。查找联系人,显示单个联系人信息及增加
联系人三个小模块分别通过search()函数,display()函数和insert()函数来实现。
*/ /******************************menu()函数的代码如下****************************************/
struct address_list* menu(struct address_list*head)
{
while()
{ printf("\t\t\t****************************************\n");
printf("\t\t\t*** 1:姓名查找 ***\n");
printf("\t\t\t*** 2:单个显示 ***\n");
printf("\t\t\t*** 3:增加 ***\n");
printf("\t\t\t*** 4:查工作 ***\n");
printf("\t\t\t*** 5:查手机号 ***\n");
printf("\t\t\t*** 6:查电子邮件 ***\n");
printf("\t\t\t*** 7:查通讯地址 ***\n");
printf("\t\t\t*** 0:退出 ***\n");
printf("\t\t\t****************************************\n"); char num[];
printf("请输入您的操作:\n");
gets(num);
switch(*num)
{
//进行按照姓名查找具体信息。
case '':
{
search(head);
break;
} //显示单个联系人
case '':
{
display(head);
break;
} //增加联系人
case '':
{
head=insert(head);
print(head);
break;
} //查联系人的工作
case '':
{
showJobByName(head);
break; } //查联系人的手机号
case '':
{
showTelNOByName(head);
break;
} //查联系人的电子邮件
case '':
{
showEmailByName(head);
break;
} //查联系人的通讯地址
case '':
{
showAddressByName(head);
break;
} //退出
case '':
{
return head;
}
default :
{
printf("操作有误,请重新进行操作!!");
break;
} }
}
return head;
} /****按照姓名查找具体信息***/
//*******************************search()的代码如下*******************************
void search(struct address_list*head)
{
struct address_list *p1=head,*p2;
int m=;
char *name;
printf("**************************\n");
printf("***请输入您要查找的姓名:***\n");
printf("***************************\n");
gets(name);
if(head==NULL)
{
printf("通讯录为空,无法进行查找!!\n");
}
while(p1!=NULL)
{
/*
如果输入的姓名和通讯录中的姓名相同,则数出这位联系人的详细信息。
*/
if(strcmp(p1->name,name)==)
{
m++;
printf("\t\t\t=============================您要查找的联系人的信息如下===================================\n");
printf("\t\t\t+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n\n");
printf("\t\t\t ");
printf("%s",p1->name); //输出姓名
printf(" ");
printf("%s",p1->job); //输出职业
printf(" ");
printf("%s",p1->telNO); //输出手机号
printf(" ");
printf("%s",p1->email) ; //输出电子邮件
printf(" ");
printf("%s",p1->address); //输出通讯地址
printf("\n\n");
printf("\t\t\t+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
p1=p1->next;
}
if (m==)
{
printf("此通信录没有您查找的这位联系人!\n");
}
printf("=====");
} /****按照姓名查找具体信息***/
//******************************display()的代码如下******************************* void display(struct address_list*head)
{
struct address_list *p1=head,*p2;
int m=;
char *name;
printf("**************************\n");
printf("***请输入您要查找的姓名:***\n");
printf("***************************\n");
gets(name);
if(head==NULL)
{
printf("通讯录为空,无法进行查找!!\n");
}
while(p1!=NULL)
{ /*
如果输入的姓名和通讯录中的姓名相同,则输出这位联系人的详细信息。
*/
if(strcmp(p1->name,name)==)
{
m++; printf("=============================您要查找的联系人的信息如下===================================\n");
printf("=======姓名========职业=======手机号==========电子邮件===================通讯地址==========\n\n\n");
printf(" ");
printf("%s",p1->name); //输出姓名
printf(" ");
printf("%s",p1->job); //输出职业
printf(" ");
printf("%s",p1->telNO); //输出手机号
printf(" ");
printf("%s",p1->email) ; //输出电子邮件
printf(" ");
printf("%s",p1->address); //输出通讯地址
printf("\n\n");
printf("==============================================================================================\n"); }
p1=p1->next; }
if (m==)
{
printf("此通信录没有您查找的这位联系人!\n");
} } /***********增加联系人***********
增加联系人功能就是将输入的联系人信息保存在链表中,添加在链表尾部。主意,按照名字首字母的顺序进行插入。
*/
//******************************insert()的代码如下******************************* struct address_list* insert(struct address_list*head)
{
char *name;
struct address_list *p0,*p1,*p2;
printf("============================================================\n");
printf("请输入您要添加联系人的姓名:");
gets(name);
if(strcmp(name,"")==)
{
printf("姓名不能为空,增加失败!!\n");
return head;
}
else
{
p0=(struct address_list*)malloc(LEN); //为结点分配内存,此结点用了存新添加的联系人的信息。
strcpy(p0->name,name);
printf("请输入您要添加联系人的职业:");
gets(p0->job);
printf("请输入您要添加联系人的手机号:");
gets(p0->telNO);
printf("请输入您要添加联系人的电子邮件:");
gets(p0->email);
printf("请输入您要添加联系人的通信地址:");
gets(p0->address) ;
n=n+; //通讯录中的人数应该加一
} if(head==NULL)
{
head=p0;
p0->next=NULL;
return head;
}
else
{
p1=head;
while(strcmp(p0->name,p1->name)>&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(p0->name,p1->name)<||strcmp(p0->name,p1->name)==)
{
if(head==p1)
{
head=p0;
p0->next=p1;
}
else
{
p2->next=p0;
p0->next=p1;
}
}
else
{
p1->next=p0;
p0->next=NULL;
}
return head;
} } /****按照姓名查找工作***/
//******************************showJobByName()的代码如下******************************* void showJobByName(struct address_list*head)
{
struct address_list *p1=head,*p2;
int m=;
char *name;
printf("**************************\n");
printf("***请输入您要查找的姓名:***\n");
printf("***************************\n");
gets(name);
if(head==NULL)
{
printf("通讯录为空,无法进行查找!!\n");
}
while(p1!=NULL)
{ /*
如果输入的姓名和通讯录中的姓名相同,则输出这位联系人的详细信息。
*/
if(strcmp(p1->name,name)==)
{
m++;
printf("\t\t\t=============================您要查找的联系人的工作如下===================================\n");
printf("\t\t\t+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n\n"); printf(" ");
printf("%s",p1->job); //输出职业 printf("\n\n");
printf("\t\t\t+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); }
p1=p1->next; }
if (m==)
{
printf("此通信录没有您查找的这位联系人!\n");
} } /****按照姓名查找手机号***/
//******************************showTelNOByName()的代码如下******************************* void showTelNOByName(struct address_list*head)
{
struct address_list *p1=head,*p2;
int m=;
char *name;
printf("**************************\n");
printf("***请输入您要查找的姓名:***\n");
printf("***************************\n");
gets(name);
if(head==NULL)
{
printf("通讯录为空,无法进行查找!!\n");
}
while(p1!=NULL)
{ /*
如果输入的姓名和通讯录中的姓名相同,则输出这位联系人的详细信息。
*/
if(strcmp(p1->name,name)==)
{
m++;
printf("\t\t\t=============================您要查找的联系人的手机号如下===================================\n");
printf("\t\t\t+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n\n"); printf(" ");
printf("%s",p1->telNO); //输出手机号 printf("\n\n");
printf("\t\t\t+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); }
p1=p1->next; }
if (m==)
{
printf("此通信录没有您查找的这位联系人!\n");
} } /****按照姓名查找电子邮件***/
//******************************showEmailByName()的代码如下******************************* void showEmailByName(struct address_list*head)
{
struct address_list *p1=head,*p2;
int m=;
char *name;
printf("**************************\n");
printf("***请输入您要查找的姓名:***\n");
printf("***************************\n");
gets(name);
if(head==NULL)
{
printf("通讯录为空,无法进行查找!!\n");
}
while(p1!=NULL)
{
/*
如果输入的姓名和通讯录中的姓名相同,则输出这位联系人的详细信息。
*/
if(strcmp(p1->name,name)==)
{
m++;
printf("\t\t\t=============================您要查找的联系人的电子邮件如下===================================\n");
printf("\t\t\t+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n\n"); printf(" ");
printf("%s",p1->email); //输出电子邮箱 printf("\n\n");
printf("\t\t\t+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); }
p1=p1->next; }
if (m==)
{
printf("此通信录没有您查找的这位联系人!\n");
} } /****按照姓名查找通讯地址***/
//******************************showAddressByName()的代码如下******************************* void showAddressByName(struct address_list*head)
{
struct address_list *p1=head,*p2;
int m=;
char *name;
printf("**************************\n");
printf("***请输入您要查找的姓名:***\n");
printf("***************************\n");
gets(name);
if(head==NULL)
{
printf("通讯录为空,无法进行查找!!\n");
}
while(p1!=NULL)
{ /*
如果输入的姓名和通讯录中的姓名相同,则输出这位联系人的详细信息。
*/
if(strcmp(p1->name,name)==)
{
m++;
printf("\t\t\t=============================您要查找的联系人的通讯地址如下===================================\n");
printf("\t\t\t+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n\n"); printf(" ");
printf("%s",p1->address); //输出通讯地址 printf("\n\n");
printf("\t\t\t+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); }
p1=p1->next; }
if (m==)
{
printf("此通信录没有您查找的这位联系人!\n");
} } /******************************保存通讯录模块********************************* 保存通讯录的功能是将通讯录的内容保存在文件中,需要遍历链表,将每个结点的
信息写入到文件中 。
*/ //*********************************save()的代码如下*********************************
void save(struct address_list *head)
{
FILE *fp; //定义一个指向文件的指针,文件的地址。
char fileName[];
struct address_list *p1; if(head==NULL)
{
printf("通讯录为空,无法进行保存!!\n");
return ;
}
else
{
printf("请输入保存后的文件名:");
gets(fileName);
fp = fopen(fileName,"w");
if(fp==NULL)
{
printf("cannot open file\n");
return;
} //将联系人的信息写入文件中。
p1=head;
fprintf(fp,"=====姓名===========职业=========手机号===============电子邮件===================通讯地址===========\n");
for(;p1!=NULL;)
{
fprintf(fp,"\t\t%s %s %s %s %s \n",p1->name,p1->job,p1->telNO,p1->email,p1->address);
p1=p1->next;
}
printf("保存完成!!\n");
fclose(fp);
} }
/**********************************打开通讯录模块***********************************
打开通讯录模块功能就是将文件中的内容存到内存中,建立一个链表,将联系人的信息保存到链表中
这是我的难点。 */
//******************************load()的代码如下****************************************** struct address_list* load(struct address_list*head)
{
FILE *fp;
struct address_list *p1,*p2;
char fileName[];
printf("请输入您要输出的文件名:");
gets(fileName);
printf("%s\n",fileName);
fp=fopen(fileName,"r");
if(fp==NULL)
{
printf("您要找的通讯录不存在,无法输出!\n");
return head;
}
else
{
head=release(head);
}
p2=p1=(struct address_list *)malloc(LEN);
fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->job,&p1->telNO,&p1->email,&p1->address); //判断fp文件是否为空
if(feof(fp) != )
{
printf("文件为空,无法打开!!\n");
return head;
}
else
{ while(!feof(fp))
{
if(head == NULL){
head = p1;
}
fscanf(fp,"%s%s%s%s%s",p1->name,p1->job,p1->telNO,p1->email,p1->address);
n++;
p2 = p1;
//动态分配空间
p1=(struct address_list*)malloc(LEN);
p2->next = p1;
}
p2->next=NULL;
free(p1);
p1 = head;
while(p1 != NULL){
printf("%s\n",p1->name);
p1 = p1->next;
}
printf("打开完毕!\n");
return head;
}
//关闭文件
fclose(fp);
} /*********************************删除模块*************************************
删除模块的功能就是根据输入的姓名,在链表中逐个遍历,找到这个联系人,然后删除。
*/ //*********************************delete()的代码如下****************************************** struct address_list* delete_List(struct address_list*head)
{
struct address_list *p1,*p2;
char *deleteName;
if(head==NULL)
{
printf("通讯录为空,无法删除!\n");
return head;
}
printf("请输入您要删除的联系人的姓名:");
gets(deleteName); //输入删除人的姓名,放到deleteName地址中 //如果要删除的联系人是链表的头结点。
if(strcmp(head->name,deleteName)==)
{
head=head->next; //把下一个结点放到头结点位置上。
free(head);
n--;
printf("删除成功!\n");
return head;
}
else
{//如果联系人不是头结点。
p1=head;
p2=head->next;
while(p2!=NULL)
{
if(strcmp(p2->name,deleteName)!=)
{
p1=p2;
p2=p1->next; }
if(strcmp(p2->name,deleteName)==)
{
p1->next=p2->next;
free(p2);
printf("删除操作成功!!\n");
n--;
return head;
}
else
{
printf("您要删除的这位联系人不存在!\n"); }
}
return head;
} } /********************************退出模块************************************
退出模块就是释放之前申请过的内存:链表。所以要遍历链表,然后将每个结点free掉
*/
//**********************release()的代码如下********************************** struct address_list* release(struct address_list *head)
{
struct address_list *p;
while(head!=NULL)
{
p=head;
head=head->next;
free(p); //释放内存
}
return head; //返回头指针 ,此时应为空
}
C语言写郑州大学校友通讯录的更多相关文章
- 自己用C语言写dsPIC / PIC24 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). HyperBootlo ...
- 自己用C语言写单片机PIC18 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). HyperBootlo ...
- 自己用C语言写单片机PIC16 serial bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 为什么自己写bootl ...
- C语言写的流氓关机程序及破解
记得大二刚开始接触电脑的那个时候,偶尔会弹出一个强制关机的窗口,当时没有办法,如下: 现在看来只是一个小程序而已,用C语言编写的: #include<windows.h> int main ...
- php调用一个c语言写的接口问题
用php调用一个c语言写的soap接口时,遇到一个问题:不管提交的数据正确与否,都无法请求到接口 1.用php标准的soap接口去请求 2.拼接xml数据去请求 以上两种方式都不正确 解决办法:php ...
- PIC12F629帮我用C语言写个程序,控制三个LED亮灭
http://power.baidu.com/question/240873584599025684.html?entry=browse_difficult PIC12F629帮我用C语言写个程序,控 ...
- JAVA调用C语言写的SO文件
JAVA调用C语言写的SO文件 因为工作需要写一份SO文件,作为手机硬件IC读卡和APK交互的桥梁,也就是中间件,看了网上有说到JNI接口技术实现,这里转载了一个实例 // 用JNI实现 // 实例: ...
- 用C语言写个程序推算出是星期几?(用泰勒公式实现)
在日常生活中,我们常常遇到要知道某一天是星期几的问题.有时候,我们还想知道历史上某一天是星期几.比如: “你出生的那一天是星期几啊?” “明年五一是不是星期天?我去找你玩?” 通常,解决这个问题的最简 ...
- 一个用 C 语言写的迷你版 2048 游戏,仅仅有 500个字符
Jay Chan 用 C 语言写的一个迷你版 2048 游戏,仅仅有 487 个字符. 来围观吧 M[16],X=16,W,k;main(){T(system("stty cbreak&qu ...
随机推荐
- 刘汝佳dicnic模板
#include<iostream> #include<cstdio> #include<algorithm> #include<vector> #in ...
- 禁用显示GC 会有什么问题?-XX:+DisableExplicitGC
-XX:+DisableExplicitGC
- Android操作外置SD卡和U盘相关文章
Android设备与外接U盘实现数据读取操作https://blog.csdn.net/true100/article/details/77775700 usbdisklibhttps://githu ...
- leetcode 146. LRU Cache 、460. LFU Cache
LRU算法是首先淘汰最长时间未被使用的页面,而LFU是先淘汰一定时间内被访问次数最少的页面,如果存在使用频度相同的多个项目,则移除最近最少使用(Least Recently Used)的项目. LFU ...
- 有关react-native的最常用的库(文件、样式、UI组件)
一.对文件的处理 1.react-native-fs 2.react-native-file-selector 3.MaterialFilePicker 二.React-Native 样式指南 1.r ...
- 表的操作管理和 MySQL 的约束控制
一.表的操作 1.表的基本概念 数据库与表之间的关系:数据库是由各种数据表组成的,数据表是数据库中最重要的对象,用来存储和操作数据的逻辑结构. 表由列和行组成,列是表数据的描述,行是表数据的实例. 表 ...
- python 通过 实例方法 名字的字符串调用方法
方式1 - 反射 hasattr 方法 判断当前实例中是否有着字符串能映射到的属性或者方法, 一般会在 getattr 之前作为判断防止报错 getattr 方法 获取到当前实例中传入字符串映射到的 ...
- [hibernate]save()与persist()区别
Hibernate 之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯.另一方面,save()和 persist()方法还有一个区别:使用 save() ...
- [Spark] Spark 3.0 Accelerator Aware Scheduling - GPU
Ref: Spark3.0 preview预览版尝试GPU调用(本地模式不支持GPU) 预览版本:https://archive.apache.org/dist/spark/spark-3.0.0-p ...
- OpenCV画图(画OpenCV的标志)
import numpy as np import cv2 img = np.ones((512, 512, 3), np.uint8)*255 # 画椭圆 # 图片 (圆心) (短轴长,长轴长),旋 ...