📄 datatest.c
字号:
#include <stdio.h>
#include <alloc.h>
#include <mem.h>
#include <string.h>
#include <conio.h>
typedef struct
{
char TrainNumber[6];
char Kind[6];
char Begin[11];
char End[11];
char BeginHour[3];
char EndHour[3];
char BeginMinute[3];
char EndMinute[3];
char Cost[5];
struct TRAIN* NextTrain;
} TRAIN;
//ListFunction///////////////////////////////////////////////
void CopyData(TRAIN *ptrain,TRAIN train);
TRAIN *CreatList(TRAIN train);
TRAIN *AddTail(TRAIN *last,TRAIN train);
TRAIN *GetAt(TRAIN *head,int i); //can't do with wrong
TRAIN **GetTrueAt(TRAIN **Head,int i);
void SetAt(TRAIN *head,int i,TRAIN train);//can't do with wrong
void DeleteAt(TRAIN **head,int i); //if i==0 head will be changed
void DeleteAll(TRAIN **head);
int GetCount(TRAIN *head);
void Exchange(TRAIN **head,int index);
//FileFunction////////////////////////////////////////////////
void SaveList(TRAIN *head,char *filename);
TRAIN *LoadList(char *filename);
//////////////////////////////////////////////////////////////
int main(void)
{
TRAIN atrain;
TRAIN *ptrain;
TRAIN *Head=NULL;
TRAIN *Last=NULL;
int i,k;
strcpy(atrain.TrainNumber,"123");
strcpy(atrain.Kind,"pk");
strcpy(atrain.Begin,"Beijing");
strcpy(atrain.End,"Shanghai");
strcpy(atrain.BeginHour,"12");
strcpy(atrain.EndHour,"15");
strcpy(atrain.BeginMinute,"30");
strcpy(atrain.EndMinute,"45");
strcpy(atrain.Cost,"100");
Head=CreatList(atrain);
Last=Head;
for(i=0;i<10;i++)
{
ptrain=AddTail(Last,atrain);
Last=ptrain;
}
printf("AddTailComplete!\n");
getch();
for(i=0;i<11;i++)
{
ptrain=GetAt(Head,i);
printf("%s ",ptrain->TrainNumber);
printf("%s ",ptrain->Kind);
printf("%s ",ptrain->Begin);
printf("%s ",ptrain->End);
printf("%s ",ptrain->BeginHour);
printf("%s ",ptrain->EndHour);
printf("%s ",ptrain->BeginMinute);
printf("%s ",ptrain->EndMinute);
printf("%s ",ptrain->Cost);
printf(" :%d\n",i);
getch();
}
i=GetCount(Head);
printf("Count:%d\n",i);
getch();
strcpy(atrain.TrainNumber,"234");
strcpy(atrain.Kind,"tk");
strcpy(atrain.Begin,"Zhengzhou");
strcpy(atrain.End,"Tianjing");
strcpy(atrain.BeginHour,"1");
strcpy(atrain.EndHour,"17");
strcpy(atrain.BeginMinute,"10");
strcpy(atrain.EndMinute,"00");
strcpy(atrain.Cost,"500");
SetAt(Head,4,atrain);
SetAt(Head,7,atrain);
SetAt(Head,0,atrain);
printf("SetAt Complete.0,7,4.\n");
getch();
for(i=0;i<11;i++)
{
ptrain=GetAt(Head,i);
printf("%s ",ptrain->TrainNumber);
printf("%s ",ptrain->Kind);
printf("%s ",ptrain->Begin);
printf("%s ",ptrain->End);
printf("%s ",ptrain->BeginHour);
printf("%s ",ptrain->EndHour);
printf("%s ",ptrain->BeginMinute);
printf("%s ",ptrain->EndMinute);
printf("%s ",ptrain->Cost);
printf(" :%d\n",i);
getch();
}
Exchange(&Head,0);
Exchange(&Head,7);
printf("Exchanged.0,1;7,8.\n");
getch();
for(i=0;i<11;i++)
{
ptrain=GetAt(Head,i);
printf("%s ",ptrain->TrainNumber);
printf("%s ",ptrain->Kind);
printf("%s ",ptrain->Begin);
printf("%s ",ptrain->End);
printf("%s ",ptrain->BeginHour);
printf("%s ",ptrain->EndHour);
printf("%s ",ptrain->BeginMinute);
printf("%s ",ptrain->EndMinute);
printf("%s ",ptrain->Cost);
printf(" :%d\n",i);
getch();
}
DeleteAt(&Head,10);
printf("DeleteAt Complete.10\n");
getch();
i=GetCount(Head);
printf("Count:%d\n",i);
for(i=0;i<10;i++)
{
ptrain=GetAt(Head,i);
printf("%s ",ptrain->TrainNumber);
printf("%s ",ptrain->Kind);
printf("%s ",ptrain->Begin);
printf("%s ",ptrain->End);
printf("%s ",ptrain->BeginHour);
printf("%s ",ptrain->EndHour);
printf("%s ",ptrain->BeginMinute);
printf("%s ",ptrain->EndMinute);
printf("%s ",ptrain->Cost);
printf(" :%d\n",i);
getch();
}
DeleteAt(&Head,0);
i=GetCount(Head);
printf("Count:%d\n",i);
for(i=0;i<9;i++)
{
ptrain=GetAt(Head,i);
printf("%s ",ptrain->TrainNumber);
printf("%s ",ptrain->Kind);
printf("%s ",ptrain->Begin);
printf("%s ",ptrain->End);
printf("%s ",ptrain->BeginHour);
printf("%s ",ptrain->EndHour);
printf("%s ",ptrain->BeginMinute);
printf("%s ",ptrain->EndMinute);
printf("%s ",ptrain->Cost);
printf(" :%d\n",i);
getch();
}
/*DeleteAll(&Head);
i=GetCount(Head);
printf("Count:%d\n",i); */
SaveList(Head,"test.dat");
printf("Saved\n");
getch();
Head=NULL;
Head=LoadList("test.dat");
if(Head==NULL) { printf("File wrong.\n"); getch(); return 0; }
i=GetCount(Head);
printf("Count:%d\n",i);
for(k=0;k<i;k++)
{
ptrain=GetAt(Head,k);
printf("%s ",ptrain->TrainNumber);
printf("%s ",ptrain->Kind);
printf("%s ",ptrain->Begin);
printf("%s ",ptrain->End);
printf("%s ",ptrain->BeginHour);
printf("%s ",ptrain->EndHour);
printf("%s ",ptrain->BeginMinute);
printf("%s ",ptrain->EndMinute);
printf("%s ",ptrain->Cost);
printf(" :%d\n",k);
getch();
}
getch();
return 0;
}
void CopyData(TRAIN *ptrain,TRAIN train)
{
strcpy(ptrain->TrainNumber,train.TrainNumber);
strcpy(ptrain->Kind,train.Kind);
strcpy(ptrain->Begin,train.Begin);
strcpy(ptrain->End,train.End);
strcpy(ptrain->BeginHour,train.BeginHour);
strcpy(ptrain->BeginMinute,train.BeginMinute);
strcpy(ptrain->EndHour,train.EndHour);
strcpy(ptrain->EndMinute,train.EndMinute);
strcpy(ptrain->Cost,train.Cost);
}
TRAIN *CreatList(TRAIN train)
{
TRAIN *ptemp;
ptemp=(TRAIN*)malloc(sizeof(TRAIN));
CopyData(ptemp,train);
ptemp->NextTrain=NULL;
return ptemp;
}
TRAIN *AddTail(TRAIN *last,TRAIN train)
{
TRAIN *ptemp;
ptemp=(TRAIN*)malloc(sizeof(TRAIN));
CopyData(ptemp,train);
ptemp->NextTrain=NULL;
last->NextTrain=ptemp;
return ptemp;
}
TRAIN *GetAt(TRAIN *head,int i)
{
int k;
TRAIN *ptemp=head;
for(k=0;k<i;k++)
{
ptemp=ptemp->NextTrain;
}
return ptemp;
}
void SetAt(TRAIN *head,int i,TRAIN train)
{
TRAIN *ptemp;
ptemp=GetAt(head,i);
CopyData(ptemp,train);
}
void DeleteAt(TRAIN **head,int i)
{
TRAIN *ptemp1;
TRAIN *ptemp2;
TRAIN *ptemp3;
TRAIN *ptemp4;
int Count;
Count=GetCount(*head);
if(Count==0) return;
else
{
if(Count==1) { ptemp1=*head; free(ptemp1); *head=NULL; }
else
{
ptemp1=GetAt(*head,i);
if(ptemp1->NextTrain==NULL)
{
free(ptemp1);
ptemp4=GetAt(*head,i-1);
ptemp4->NextTrain=NULL;
}
else
{
if(ptemp1==*head)
{
ptemp1=GetAt(*head,1);
free(*head);
*head=ptemp1;
}
else
{
ptemp2=GetAt(*head,i-1);
ptemp3=GetAt(*head,i+1);
ptemp2->NextTrain=ptemp3;
//ptemp1=GetAt(*head,i);
free(ptemp1);
}
}
}
}
}
void DeleteAll(TRAIN **head)
{
TRAIN *ptemp=*head;
TRAIN *ptemp2;
while(ptemp->NextTrain!=NULL)
{
ptemp2=ptemp;
free(ptemp2);
ptemp=ptemp->NextTrain;
}
free(ptemp);
*head=NULL;
}
int GetCount(TRAIN *head)
{
TRAIN *ptemp=head;
int k=0;
if(head!=NULL)
{
k++;
while(ptemp->NextTrain!=NULL)
{
k++;
ptemp=ptemp->NextTrain;
}
}
return k;
}
void SaveList(TRAIN *head,char *filename)
{
TRAIN *ptemp=head;
FILE *fp=fopen(filename,"wb");
if(fp==NULL) { printf("Creat file fail."); return;}
while(ptemp!=NULL)
{
fwrite(ptemp,sizeof(TRAIN),1,fp);
ptemp=ptemp->NextTrain;
}
fclose(fp);
}
TRAIN *LoadList(char *filename)
{
TRAIN *ptemp1;
TRAIN *ptemp2;
TRAIN *head=NULL;
TRAIN *last;
FILE *fp=fopen(filename,"rb");
if(fp==NULL) return NULL;
head=(TRAIN*)malloc(sizeof(TRAIN));
ptemp1=head;
ptemp2=head;
fread(ptemp1,sizeof(TRAIN),1,fp);
while(!feof(fp))
{
ptemp1=(TRAIN*)malloc(sizeof(TRAIN));
fread(ptemp1,sizeof(TRAIN),1,fp);
//ptemp1=(TRAIN*)malloc(sizeof(TRAIN));
ptemp2->NextTrain=ptemp1;
last=ptemp2;
ptemp2=ptemp1;
//ptemp2=ptemp1;
}
free(ptemp2);
last->NextTrain=NULL;
fclose(fp);
return (head);
}
void Exchange(TRAIN **head,int index)
{
TRAIN *ptemp1;
TRAIN *ptemp2;
TRAIN *ptemp3;
TRAIN *ptemp4;
TRAIN *ptemp5;
TRAIN **pmhead;
if(GetCount(*head)<=1) return;
if(GetCount(*head)==(index+1)) return;
if(index==0)
{
ptemp1=(*head);
ptemp2=ptemp1->NextTrain;
ptemp3=ptemp2->NextTrain;
*head=ptemp2;
(*head)->NextTrain=ptemp1;
ptemp4=(*head)->NextTrain;
ptemp4->NextTrain=ptemp3;
}
else
{
pmhead=GetTrueAt(head,index);
ptemp1=*pmhead;
ptemp2=ptemp1->NextTrain;
ptemp3=ptemp2->NextTrain;
*pmhead=ptemp2;
(*pmhead)->NextTrain=ptemp1;
ptemp4=(*pmhead)->NextTrain;
ptemp4->NextTrain=ptemp3;
}
}
TRAIN **GetTrueAt(TRAIN **Head,int i)
{
int k;
TRAIN **ptemp;
ptemp=Head;
for(k=0;k<i;k++)
{
ptemp=&((*ptemp)->NextTrain);
}
return ptemp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -