增加数据字典表;有增、删、改、查 *** 作。

增加数据字典表;有增、删、改、查 *** 作。,第1张

1、C——create 增加、创建,向数据销数库添加数据

格式:insert into 表名 values(列值1,列值2,...........列值n)

insert into Fruit values(‘K009‘,‘苹果‘,3.0,‘高青‘,90,‘‘)

insert into Fruit(Ids,Name,Price,Source,Numbers) values(‘K010‘,‘苹果‘,3.0,‘高青‘,90)

2、R——retrieve 检索、查亏裂首询,从数据库中查询数据

a.查询所有 select * from 表名

b.查指定源如列 select 列名,列名 from 表名

c.替换列名 select Ids ‘代号‘,Name ‘名称‘,Price ‘价格‘,Source ‘产地‘ from Fruit

d.查指定行

 select * from Fruit where Ids=‘K006‘

select * from Fruit where Price=2.4 and Source=‘烟台‘

select * from Fruit where Price between 2.0 and 4.0

select * from Fruit where Numbers in (90,80,70)

#include <stdafx.h>//这行是VC编译时要的头文件,你若TC就不要本行了

#include <stdio.h>

typedef struct dictnode{char *keychar *valuedictnode *predictnode *next} DictNode

DictNode *pHead = NULL

//(1)make:构造空的字典

int make()

{

if(pHead)return -1

pHead = (DictNode*)malloc(sizeof(DictNode))

memset(pHead,0,sizeof(DictNode))

pHead->pre = pHead

pHead->next = pHead

return 0

}

//(2)size:返回字的字典中记录

int size()

{

int i

DictNode*p

for(i=0,p=pHeadp->next!=pHeadp=p->next,i++)

return i

}

//(3)IsEmpy:如果字典为空则返回真,否则返回假

int IsEmpy()

{

return (pHead->pre==pHead)

}

//(4)Clear:将字典重置为空

void Clear()

{

DictNode* p,*ptmp

for(p=pHead->nextp!=pHead )

{

ptmp = p

p = p->next

free(ptmp->key)

free(ptmp->value)

free(ptmp)

}

pHead->next = pHead->pre = pHead//最后一个空节信带点也是第一个节点

}

//(5)Insert:插入记录到字典

int Insert(char *key,char*value)

{

DictNode* p, *ptmp

if(!key||!value||!*key||!*value) return -100//调用错误

ptmp = (DictNode*)malloc(sizeof(DictNode))

if(!ptmp) return -2 //内激碧存不足这种极端的情况很难出现,但有可能

memset(ptmp,0,sizeof(DictNode))

ptmp->key =(char*) malloc(strlen(key)+1)

if(!ptmp->key){free(ptmp)return -2} //内存不足这种极端的情况很难出现,但有可能

strcpy(ptmp->key,key)

ptmp->value = (char*)malloc(strlen(value)+1)

if(!ptmp->value){free(ptmp->key)free(ptmp)return -2} //内存不足这种极端的情况很难出现,但有可能

strcpy(ptmp->value,value)

for(p=pHead->nextp->next!=pHeadp=p->next) if(p->key&&!strcmp(p->key,key)) return 1//记录存在,插入失败

ptmp->next = pHeadpHead->pre = ptmp

ptmp->pre = pp->next = ptmp

return 0// *** 作成功返回0

}

//(6)remove:与给定关键字的记录相同则删除,该记录被返回,否则字典保持不变

DictNode* remove(char *key)

{

DictNode* p

for(p=pHead->nextp!=pHead&&strcmp(p->key,key)p=p->next)

if(p==pHead) return NULL

p->pre->next = p->next

p->next->pre = p->pre

p->pre = p->next = NULL

return p//结点p的空间(key value p三个)没有释放,外面要接收返回值并主动释放结点空间或做别的处理如插入另一表中等

}

//(7)IsPrensent:如果存在与给定关键字匹配的记录则返回真,明坦举否则返回假

int IsPrensent(char *key)

{

DictNode* p

for(p=pHead->nextp!=pHead&&strcmp(p->key,key)p=p->next)

return (p!=pHead)

}

//(8)Find:如果存在与给定关键字相同的记录,则返回记录;如果没有找到,则返回空

DictNode* Find(char *key)

{

DictNode* p

for(p=pHead->nextp!=pHead&&strcmp(p->key,key)p=p->next)

if(p==pHead) return NULL

return p//不要对Find返回的记录key值做变更,value值可以修改,value加长时要重新分配空间。因为记录还在字典链表中

}

void main()

{

const char *prtstr = "****************************"

DictNode* ptmp

char keybuf[80]

char valuebuf[1024]

int c

make()

while(1)

{

system("cls")//清屏

printf("%s 选择菜单 %s",prtstr,prtstr)

printf("\n\tF---词条查找\n\tI---插入新词条\n\tR---删除词条\n\tC---清空字典\n\tS---显示字典词条数\n\tQ---退出\n")

printf("请选择 *** 作菜单:")

fflush(stdin)

c = getchar()

if(c>='a'&&c<='z') c -= ('a'-'A')//换大写

if(c!='F'&&c!='I'&&c!='R'&&c!='C'&&c!='S'&&c!='Q') continue

fflush(stdin)

switch(c)

{

case 'F':

printf("词条查找:\n请输入Key值:")scanf("%s",keybuf)

fflush(stdin)

ptmp = Find(keybuf)

if(ptmp){printf("Key:%s Value:%s",ptmp->key,ptmp->value)}

else{printf("没找到词条:%s,你可以先选择插入这个新词条",keybuf)}

break

case 'I':

printf("插入新词条:\n请输入Key值:")scanf("%s",keybuf)

fflush(stdin)

if(IsPrensent(keybuf)){printf("词条%s已存在\n",keybuf)}

else

{

printf("请输入它的解释:")gets(valuebuf)

if(!Insert(keybuf,valuebuf))printf("插入成功\n")

else printf("插入失败\n")

}

break

case 'R':

printf("删除词条:\n请输入Key值:")scanf("%s",keybuf)

fflush(stdin)

ptmp = remove(keybuf)

if(ptmp)

{

free(ptmp->value)free(ptmp->key)free(ptmp)

printf("记录key:[%s]已删除\n",keybuf)

}

else

printf("未找到待删除的记录key:[%s]\n",keybuf)

break

case 'C':

printf("清空字典:\n真的要清吗?\n请输入Yes以确认删除 *** 作(首字母大写):")scanf("%s",keybuf)

fflush(stdin)

if(strcmp(keybuf,"Yes")){printf("放弃了清空 *** 作\n")}

else {Clear()printf("Ok,你坚持 *** 作,现在字典已清空了\n")}

break

case 'S':

printf("显示字典词条数:\n当前词条总数:%d\n", size())

break

case 'Q':

Clear()free(pHead)

printf("Byebye")

exit(0)

}

printf("\n按回车键继续......")

fflush(stdin)

getchar()

}

}

//VC7.1 下调试通过,运行功能正常


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11973774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存