c++zuoye
来源:互联网 发布:ajax get传json 编辑:程序博客网 时间:2024/04/28 10:18
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<assert.h>
#include<string.h>
#define INT1 char
#define UINT1 unsigned char
#define UINT2 unsigned short
#define UINT4 unsigned long
#define ___swab16( X ) ((UINT2)((((UINT2)( X ) & (UINT2)0x00ffU) << 8) |(((UINT2)( X ) & (UINT2)0xff00U) >> 8) ))
#define ___swab32( X ) ((UINT4)((((UINT4)(X ) & (UINT4)0x000000ffUL) << 24)|(((UINT4)(X ) & (UINT4)0x0000ff00UL) << 8) |(((UINT4)(X ) & (UINT4)0x00ff0000UL) >> 8) |(((UINT4)(X ) & (UINT4)0xff000000UL) >> 24) ))
#define M03(X) ( (X)&0x0000000fUL)//Class番号
#define M46(X) (( (X)&0x00000070UL)>>4)//岔路数
#define M7(X) (( (X)&0x00000080UL)>>7)//有无路线
typedef struct NODE
{
UINT2 LinkSize;
UINT4 LinkId;
UINT2 LinkNameSize;
UINT4 LinkBeginEndInfo;
INT1 *LinkName;
struct NODE *next;
}L_NODE;
//查找指定 交叉Link列表示Class番号 的所有Link的集合。
//查找岔路数> n 的所有Link的集合, n由用户输入。
//指定道路名称检索。
//#linked=1234;roadnameflag=1;brunch=2;dispclass=3; roadname=青年大街#
//(如果没有名称(roadnameflag == 0 ), 则不输出roadname=青年大街这个条目)
//如果查到的纪录的个数>5个,则输出到指定文件中(文件放在当前目录中,请用 searchresultxxx.txt 命名, xxx是检索次数的记录,比如第一次检索,则xxx是 001, 以此类推。)
void print(L_NODE *head);
void find_name(L_NODE *head, INT1 *str);
void find_class(L_NODE *head, int m_class);
void find_x(L_NODE *head, int m_x);
void findid(L_NODE *head, int *id);
void sort1(L_NODE *head );
void insexinfo(L_NODE *head, L_NODE *m_inset);
void print_fwrite(L_NODE *head);
void print(L_NODE *LinkInfo)
{
printf("#linked= %u;",LinkInfo->LinkId);
printf("roadnamefla= %d;",M7(LinkInfo->LinkBeginEndInfo));
printf("brunch= %d ;",M03(LinkInfo->LinkBeginEndInfo));
if(LinkInfo->LinkName != NULL)
{
printf("roadname=");
printf("%s/n",LinkInfo->LinkName);
}
else
{
printf("no road name message/n");
}
}
void print_fwrite(L_NODE *head)
{
FILE *F1 = fopen("5.txt","wb");
L_NODE *q;
for(q = head; q != NULL; q = q->next)
{
fwrite(&(q->LinkSize),sizeof(UINT2),1,F1);
fwrite(&(q->LinkId),sizeof(UINT4), 1, F1);
fwrite(&(q->LinkNameSize), sizeof(UINT2), 1, F1);
fwrite(&(q->LinkBeginEndInfo), sizeof(UINT4), 1, F1);
if(q->LinkName != NULL)
{
fwrite(q->LinkName, q->LinkSize-(UINT2)12 ,1, F1);
}
else
{
//fwrite("no road name message",1,strlen("no road name message"),F1);
}
}
fclose(F1);
}
void insexinfo(L_NODE *head, L_NODE *m_inset)
{
L_NODE *q, *p,*r;
r = head;
p = head;
for(q = head; q != NULL; q = q->next)
{
if(q->LinkId != m_inset->LinkId)
{
p = p->next;
}
}
if(p ==NULL)
{
m_inset->next = q;
q = m_inset;
}
while(r != NULL)
{
print(r);
r = r->next;
}
}
void find_name(L_NODE *head, INT1 *str)
{
L_NODE *q;
for(q = head; q != NULL; q = q->next)
{
if(q->LinkName != NULL)
{
if(strcmp(q->LinkName, str) == 0)
{
print( q );
}
else
{
//printf("not the name");
}
}
else
{
}
}
}
void find_class(L_NODE *head, int m_class)
{
L_NODE *q;
for(q = head; q != NULL; q = q->next)
{
if((M03(q->LinkBeginEndInfo)) >= m_class)
{
print(q );
}
}
}
void find_x(L_NODE *head, int m_x)
{
L_NODE *q;
for(q = head; q != NULL; q = q->next)
{
if((M46(q->LinkBeginEndInfo)) >= m_x)
{
print( q );
}
}
}
void findid(L_NODE *head, int *id)
{
FILE *F1 = fopen("3.txt","wb");
L_NODE *q;
for(q = head; q != NULL; q = q->next)
{
if(q->LinkId == id)
{
print(q );
fwrite(&(q->LinkSize),sizeof(UINT2),1,F1);
fwrite(&(q->LinkId),sizeof(UINT4), 1, F1);
fwrite(&(q->LinkNameSize), sizeof(UINT2), 1, F1);
fwrite(&(q->LinkBeginEndInfo), sizeof(UINT4), 1, F1);
if(q->LinkName != NULL)
{
fwrite(q->LinkName, q->LinkSize-(UINT2)12 ,1, F1);
}
else
{
//fwrite("no road name message",1,strlen("no road name message"),F1);
}
}
}
fclose(F1);
}
void sort1(L_NODE *head )
{
L_NODE *p, *q, *t, *small;
FILE *F1 = fopen("5.txt","wb");
int count;
int i=0;
printf("%u/n",head->LinkId);
for(p = head; p->next != NULL; p = p->next )
{
small = p;
for(q = p->next; q != NULL; q = q->next)
{
if(q->LinkId < small->LinkId)
{
small = q;
}
}
// exit(1);
fwrite(&(small->LinkSize),sizeof(UINT2),1,F1);
fwrite(&(small->LinkId),sizeof(UINT4), 1, F1);
fwrite(&(small->LinkNameSize), sizeof(UINT2), 1, F1);
fwrite(&(small->LinkBeginEndInfo), sizeof(UINT4), 1, F1);
if(small->LinkName != NULL)
{
fwrite(small->LinkName, small->LinkSize-(UINT2)12 ,1, F1);
}
else
{
//fwrite("no road name message",1,strlen("no road name message"),F1);
}
}
fclose(F1);
}
int main()
{
UINT1 str1[6500]="no road name";
UINT1 str[6500];
int m_class;
int m_x;
UINT4 id;
int i,j;
int LinkIdA[70000]={0};
int count = 0;
FILE *F;
L_NODE *LinkInfo, *Head, *rear, *p, *q;
L_NODE *m_inset;
Head = NULL;
rear = NULL;
F = fopen("c://gtbl.dat","rb");
while(!feof(F))
{
LinkInfo = (L_NODE *)malloc(sizeof(L_NODE));
LinkInfo->LinkName = NULL;
if(LinkInfo == NULL)
{
printf("no memory");
exit(1);
}
else
{
fread(&(LinkInfo->LinkSize),sizeof(UINT2),1,F);
fread(&(LinkInfo->LinkId),sizeof(UINT4), 1, F);
fread(&(LinkInfo->LinkNameSize), sizeof(UINT2), 1, F);
fread(&(LinkInfo->LinkBeginEndInfo), sizeof(UINT4), 1, F);
LinkInfo->LinkSize = ___swab16(LinkInfo->LinkSize);
//printf("%d",LinkInfo->LinkSize);
LinkInfo->LinkId = ___swab32(LinkInfo->LinkId);
LinkInfo->LinkNameSize = ___swab16(LinkInfo->LinkNameSize);
LinkInfo->LinkBeginEndInfo = ___swab32(LinkInfo->LinkBeginEndInfo);
if((M7(LinkInfo->LinkBeginEndInfo) == 1)&&LinkInfo->LinkSize<100)
{
LinkInfo->LinkName = (INT1 *)malloc(LinkInfo->LinkNameSize);
assert(LinkInfo->LinkName);
fread(LinkInfo->LinkName, LinkInfo->LinkSize-(UINT2)12 ,1, F);
}
else
{
}
print( LinkInfo );
LinkInfo->next = NULL;
if(Head == NULL)
{
Head = LinkInfo;
rear = LinkInfo;
}
else
{
rear->next = LinkInfo;
rear = LinkInfo;
}
// printf("%u",Head->LinkId);
// exit(1);
}
}
p = Head;
/*while(p != NULL)
{
printf("%u /t",p->LinkId);
p = p->next;
count++;
}*/
printf("%d/n",count);
printf("input id/n");
scanf("%u", &id);
findid(Head, id);
printf("/n");
printf("input M46(X) 岔路数 m_x/n");
scanf("%d", &m_x);
find_x(Head, m_x);
printf("/n");
printf("input M03(X) Class番号 m_class/n");
scanf("%d", &m_class);
find_class(Head, m_class);
printf("/n");
printf("print_fwrite");
print_fwrite(Head);
printf("input m_name/n");
scanf("%s", str);
find_name(Head, str);
printf("/n");
m_inset = (L_NODE *)malloc(sizeof(L_NODE));
printf("input m_inset LinkSize/n");
scanf("%u",&(m_inset->LinkSize));
printf("input m_inset linkid/n");
scanf("%u",&(m_inset->LinkId));
printf("input m_inset LinkNameSize/n");
scanf("%u",&(m_inset->LinkNameSize));
printf("input m_inset LinkBeginEndInfo/n");
scanf("%u",&(m_inset->LinkBeginEndInfo));
if((m_inset->LinkSize > 12)&&(m_inset->LinkSize<100))
{
m_inset->LinkName = (INT1 *)malloc(m_inset->LinkNameSize);
printf("input m_insert>linkname/n");
scanf("%s",str1);
strcpy(m_inset->LinkName, str1);
}
else
{
strcpy(m_inset->LinkName,str1);
}
insexinfo( Head,m_inset);
printf("正在排序/n");
sort1( Head );
printf("排序结束/n");
fclose(F);
while(Head)
{
L_NODE *p = Head;
Head = Head->next;//下一个
free(p->LinkName);
free(p);//释放
}
return 0;
}
- c++zuoye
- zuoye
- zuoye
- ZUOYE
- zuoye
- zuoye
- zuoye
- zuoye
- zuoye
- zuoye
- zuoye
- ZUOYE
- zuoye
- zuoye
- zuoye
- Zuoye
- zuoye
- C++ zuoye
- Tapestry 最新版5.1.0.5教程(七):与IBatis3的整合
- tuxedo的libusort.so问题与NLS4的问题
- 真没有想到,还能在网上找到。感觉真好。
- 关于软件质量的思考 - Introduction
- linq 获取数据库时间 或者执行其他带返回值的sql查询
- c++zuoye
- 我再copy回来。中海真是有心人。只是,你们在哪里?
- 接口2
- Tapestry 最新版5.1.0.5教程(八):权限控制框架的实现-基础篇
- 真的有很好的感觉
- 数据库设计札记 - 存储过程
- Tapestry 最新版5.1.0.5教程(九):权限控制框架的实现-进阶篇
- python分析apache日志的脚本
- Java学习 从入门到精通