成语大全网 - 成语解释 - 植物词典在线查询

植物词典在线查询

植物数据我列举了一些放在txt文件中,程序从txt文件读取加载到链表中,再通过用户输入名称查找链表信息。

txt文件格式每行一个植物:植物名 空格 科属?空格?形态特征?空格?使用价值 回车。

八宝景天?景天科景天属?多年生肉质草本植物?园林绿化,具有药用价值。

玉兰?木兰科木兰属玉兰亚属玉兰?落叶乔木?园林绿化。

银杏?银杏科银杏属?落叶大乔木?可食用,药用,园林绿化。

槐树?豆科?五叶槐?园林绿化。

红枫?槭树科槭树属?落叶小乔木?园林绿化。

海棠?属蔷薇科苹果亚科苹果属?落叶小乔木?园林绿化。

三色堇?堇菜科堇菜属?多年生草本植物?具有药用价值,中国多用作园林绿化。

月季?蔷薇科蔷薇属?半常绿低矮灌木?园林绿化。

杨树?杨柳科杨属?乔木或灌木?园林绿化。

石榴树?石榴科?落叶灌木或小乔木?园林绿化,果实食用,药用。#include<stdio.h>

#include<stdlib.h>

#include<string.h>

typedef?struct?plant

{

char?name[20];

char?genera[50];

char?charas[1000];

char?value[100];

struct?plant?*next;

}PLANT;

PLANT?*readFile(FILE?*fp);//返回头节点指针

PLANT?*findByName(PLANT?*plantHead,char?name[]);

int?main()

{

char?name[20];

PLANT?*plantHead=NULL,*plantFind=NULL;

FILE?*fp=NULL;

if((fp=fopen("C:\\list.txt","rt+"))==NULL)

{

printf("Cannot?open?file?strike?any?key?exit!");

exit(1);

}

plantHead=readFile(fp);

printf("请输入要查找的植物名称:");

scanf("%s",name);

plantFind=findByName(plantHead,name);

printf("%s的所属科属:%s\n形态特征:%s\n使用价值:%s",plantFind->name,plantFind->genera,plantFind->charas,plantFind->value);

return?0;

}

PLANT?*findByName(PLANT?*plantHead,char?name[])

{

while(plantHead->next!=NULL)

{

if(!strcmp(plantHead->next->name,name))

return?plantHead->next;

plantHead=plantHead->next;

}

return?NULL;

}

PLANT?*readFile(FILE?*fp)//返回头节点指针

{

PLANT?*plantNew=NULL,*plantHead=NULL,*plantTail=NULL;

printf("----开始读取文件到链表----\n");

fseek(fp,?0,?SEEK_SET);//文件流指针重置到开头

plantHead=(PLANT?*)malloc(sizeof(PLANT));

plantHead->next=NULL;

plantNew=(PLANT?*)malloc(sizeof(PLANT));

plantNew->next=NULL;

while(fscanf(fp,"%s?%s?%s?%s",plantNew->name,plantNew->genera,plantNew->charas,plantNew->value)!=-1)

{

if(plantHead->next==NULL)

plantHead->next=plantNew;

else

plantTail->next=plantNew;

plantTail=plantNew;

printf("读取信息:名:%s?科属:%s?特征:%s?价值:%s\n",plantNew->name,plantNew->genera,plantNew->charas,plantNew->value);

plantNew=(PLANT?*)malloc(sizeof(PLANT));

plantNew->next=NULL;

}

free(plantNew);

printf("----数据读取完成----\n");

return?plantHead;

}