DEV-C 源码转VC 问题
DEV-C 编的 能否改动一下使能在VC下运行 谢谢~
#include <stdio.h>
#include <stdlib.h>
#include "b_tree.h"
#define BOOK_NO_MAX 100
#define BOOK_NO_MIN 1
//对图书的操作。B-Tree对于图书来说基本上是透明的。
int get_book_no()
{
int book_no;
inp:printf("书号:");scanf("%d",&book_no);
if((book_no>BOOK_NO_MAX)||(book_no<BOOK_NO_MIN)){printf("无效的书号。\n");goto inp;}
return book_no;
}
int info_head()
{
printf("书号\t现存\t总量\t详细信息(书名、作者)\n");
return 0;
}
int info(NODE *node,int j)
{
int *p;
//printf("%d ",node->key[j]);
printf("%d\t%d\t%d\t%s %s\n",node->book[j]->key,
node->book[j]->current,
node->book[j]->total,
node->book[j]->author,
node->book[j]->name);
return 0;
}
int info_book()
{
int id,j,flag;
NODE *tmp;
id=get_book_no();
tmp=search(id,root,tmp,&j,&flag);
if(flag==0){printf("没有这种书。\n");return 1;}
info_head();
info(tmp,j);
return 0;
}
int find_by_name()
{
char name[40];
int id,i,j,flag;
NODE *tmp;
printf("书名:");scanf("%s",name);
info_head();
for(i=BOOK_NO_MIN;i<BOOK_NO_MAX;i++)
{
flag=0;
tmp=search(i,root,tmp,&j,&flag);
if(flag==0)continue;
if(!strcmp(tmp->book[j]->name,name)){info(tmp,j);}
}
return 0;
}
int find_by_author()
{
char author[20];
int id,i,j,flag;
NODE *tmp;
printf("著者:");scanf("%s",author);
info_head();
for(i=BOOK_NO_MIN;i<BOOK_NO_MAX;i++)
{
flag=0;
tmp=search(i,root,tmp,&j,&flag);
if(flag==0)continue;
if(!strcmp(tmp->book[j]->author,author)){info(tmp,j);}
}
return 0;
}
int find_book()
{
int c;
printf("1-按书号;2-按书名;3-按作者;其他-返回\n");
scanf("%d",&c);
switch(c)
{
case 1:info_book();break;
case 2:find_by_name();break;
case 3:find_by_author();break;
default:break;
}
return 0;
}
int add_book()
//可能会添加/删除节点。
{
int flag=0;
BOOK *tmp;
NODE *ptr;
int key,i;
key=get_book_no();
ptr=search(key,root,ptr,&i,&flag);
if(flag!=1)
//需要新增节点
{
if((tmp=malloc(sizeof(BOOK)))==NULL)exit(1);
tmp->key=key;
printf("书名:");scanf("%s",tmp->name);
printf("著者:");scanf("%s",tmp->author);
printf("数量:");scanf("%d",&tmp->total);
tmp->current=tmp->total;
add_node(tmp);
}else{//无须新增节点
printf("数量:");scanf("%d",&key);
ptr->book[i]->total+=key;
ptr->book[i]->current+=key;
}
return 0;
}
int del_book()
//只搜索,不会添加/删除节点。
{
int id,n,j,flag;
NODE *tmp;
id=get_book_no();
tmp=search(id,root,tmp,&j,&flag);
if(flag==0){printf("没有这种书。\n");return 1;}
info_head();
info(tmp,j);
printf("要出库多少本? ");scanf("%d",&n);
if(n>tmp->book[j]->current){printf("没有库存了。\n");return 1;}
tmp->book[j]->current-=n;
return 0;
}
int lent_book()
//只搜索,不会添加/删除节点。
{
int id,n,j,flag;
NODE *tmp;
id=get_book_no();
tmp=search(id,root,tmp,&j,&flag);
if(flag==0){printf("没有这种书。\n");return 1;}
info_head();
info(tmp,j);
printf("要借多少本? ");scanf("%d",&n);
if(n>tmp->book[j]->current){printf("没有库存了。\n");return 1;}
tmp->book[j]->current-=n;
return 0;
}
int give_book()
//只搜索,不会添加/删除节点。
{
int id,n,j,flag;
NODE *tmp;
id=get_book_no();
tmp=search(id,root,tmp,&j,&flag);
if(flag==0){printf("没有这种书。\n");return 1;}
info_head();
info(tmp,j);
printf("要还多少本? ");scanf("%d",&n);
if((n+tmp->book[j]->current)>tmp->book[j]->total){printf("数据错误。\n");return 1;}
tmp->book[j]->current+=n;
return 0;
}
int load_from_file()
{
FILE *fp;
int i,key,flag;
BOOK *tmp;
NODE *ptr;
if((fp=fopen("data.txt","r"))==NULL)
{
printf("cannot open file\n");
return 1;
}
init();
while(!feof(fp))
{
fscanf(fp,"%d",&key);
ptr=search(key,root,ptr,&i,&flag);
//需要新增节点
if((tmp=malloc(sizeof(BOOK)))==NULL)exit(1);
tmp->key=key;
fscanf(fp,"%d",&tmp->current);
fscanf(fp,"%d",&tmp->total);
fscanf(fp,"%s",tmp->author);
fscanf(fp,"%s",tmp->name);
add_node(tmp);
}
fclose(fp);
}
int save_to_file()
{
FILE *fp;
int i,j,flag=0;
NODE *tmp;
if((fp=fopen("data.txt","w"))==NULL)
{
printf("cannot open file\n");
return 1;
}
for(i=BOOK_NO_MIN;i<BOOK_NO_MAX;i++)
{
tmp=search(i,root,tmp,&j,&flag);
if(flag==1)fprintf(fp,"%d %d %d %s %s\n",tmp->book[j]->key,
tmp->book[j]->current,
tmp->book[j]->total,
tmp->book[j]->author,
tmp->book[j]->name);
}
fclose(fp);
return 0;
}
int load_n_save()
{
int c;
printf("1-加载;2-存盘;其他-返回\n");
scanf("%d",&c);
switch(c)
{
case 1:load_from_file();break;
case 2:save_to_file();break;
default:break;
}
return 0;
}
int shell()
{
int cmd=-1;
do{
printf("1-添加 2-删除 3-借书登记 4-还书登记 5-查找 9-加载&存盘 0-退出。\n> ");
scanf("%d",&cmd);
switch(cmd)
{
case 1:add_book();break;
case 2:del_book();break;
case 3:lent_book();break;
case 4:give_book();break;
case 5:find_book();break;
case 9:load_n_save();break;
default:break;
}
}while(cmd!=0);
return 0;
}
int main(int argc, char *argv[])
{
init();
shell();
system("PAUSE");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include "b_tree.h"
#define BOOK_NO_MAX 100
#define BOOK_NO_MIN 1
//对图书的操作。B-Tree对于图书来说基本上是透明的。
int get_book_no()
{
int book_no;
inp:printf("书号:");scanf("%d",&book_no);
if((book_no>BOOK_NO_MAX)||(book_no<BOOK_NO_MIN)){printf("无效的书号。\n");goto inp;}
return book_no;
}
int info_head()
{
printf("书号\t现存\t总量\t详细信息(书名、作者)\n");
return 0;
}
int info(NODE *node,int j)
{
int *p;
//printf("%d ",node->key[j]);
printf("%d\t%d\t%d\t%s %s\n",node->book[j]->key,
node->book[j]->current,
node->book[j]->total,
node->book[j]->author,
node->book[j]->name);
return 0;
}
int info_book()
{
int id,j,flag;
NODE *tmp;
id=get_book_no();
tmp=search(id,root,tmp,&j,&flag);
if(flag==0){printf("没有这种书。\n");return 1;}
info_head();
info(tmp,j);
return 0;
}
int find_by_name()
{
char name[40];
int id,i,j,flag;
NODE *tmp;
printf("书名:");scanf("%s",name);
info_head();
for(i=BOOK_NO_MIN;i<BOOK_NO_MAX;i++)
{
flag=0;
tmp=search(i,root,tmp,&j,&flag);
if(flag==0)continue;
if(!strcmp(tmp->book[j]->name,name)){info(tmp,j);}
}
return 0;
}
int find_by_author()
{
char author[20];
int id,i,j,flag;
NODE *tmp;
printf("著者:");scanf("%s",author);
info_head();
for(i=BOOK_NO_MIN;i<BOOK_NO_MAX;i++)
{
flag=0;
tmp=search(i,root,tmp,&j,&flag);
if(flag==0)continue;
if(!strcmp(tmp->book[j]->author,author)){info(tmp,j);}
}
return 0;
}
int find_book()
{
int c;
printf("1-按书号;2-按书名;3-按作者;其他-返回\n");
scanf("%d",&c);
switch(c)
{
case 1:info_book();break;
case 2:find_by_name();break;
case 3:find_by_author();break;
default:break;
}
return 0;
}
int add_book()
//可能会添加/删除节点。
{
int flag=0;
BOOK *tmp;
NODE *ptr;
int key,i;
key=get_book_no();
ptr=search(key,root,ptr,&i,&flag);
if(flag!=1)
//需要新增节点
{
if((tmp=malloc(sizeof(BOOK)))==NULL)exit(1);
tmp->key=key;
printf("书名:");scanf("%s",tmp->name);
printf("著者:");scanf("%s",tmp->author);
printf("数量:");scanf("%d",&tmp->total);
tmp->current=tmp->total;
add_node(tmp);
}else{//无须新增节点
printf("数量:");scanf("%d",&key);
ptr->book[i]->total+=key;
ptr->book[i]->current+=key;
}
return 0;
}
int del_book()
//只搜索,不会添加/删除节点。
{
int id,n,j,flag;
NODE *tmp;
id=get_book_no();
tmp=search(id,root,tmp,&j,&flag);
if(flag==0){printf("没有这种书。\n");return 1;}
info_head();
info(tmp,j);
printf("要出库多少本? ");scanf("%d",&n);
if(n>tmp->book[j]->current){printf("没有库存了。\n");return 1;}
tmp->book[j]->current-=n;
return 0;
}
int lent_book()
//只搜索,不会添加/删除节点。
{
int id,n,j,flag;
NODE *tmp;
id=get_book_no();
tmp=search(id,root,tmp,&j,&flag);
if(flag==0){printf("没有这种书。\n");return 1;}
info_head();
info(tmp,j);
printf("要借多少本? ");scanf("%d",&n);
if(n>tmp->book[j]->current){printf("没有库存了。\n");return 1;}
tmp->book[j]->current-=n;
return 0;
}
int give_book()
//只搜索,不会添加/删除节点。
{
int id,n,j,flag;
NODE *tmp;
id=get_book_no();
tmp=search(id,root,tmp,&j,&flag);
if(flag==0){printf("没有这种书。\n");return 1;}
info_head();
info(tmp,j);
printf("要还多少本? ");scanf("%d",&n);
if((n+tmp->book[j]->current)>tmp->book[j]->total){printf("数据错误。\n");return 1;}
tmp->book[j]->current+=n;
return 0;
}
int load_from_file()
{
FILE *fp;
int i,key,flag;
BOOK *tmp;
NODE *ptr;
if((fp=fopen("data.txt","r"))==NULL)
{
printf("cannot open file\n");
return 1;
}
init();
while(!feof(fp))
{
fscanf(fp,"%d",&key);
ptr=search(key,root,ptr,&i,&flag);
//需要新增节点
if((tmp=malloc(sizeof(BOOK)))==NULL)exit(1);
tmp->key=key;
fscanf(fp,"%d",&tmp->current);
fscanf(fp,"%d",&tmp->total);
fscanf(fp,"%s",tmp->author);
fscanf(fp,"%s",tmp->name);
add_node(tmp);
}
fclose(fp);
}
int save_to_file()
{
FILE *fp;
int i,j,flag=0;
NODE *tmp;
if((fp=fopen("data.txt","w"))==NULL)
{
printf("cannot open file\n");
return 1;
}
for(i=BOOK_NO_MIN;i<BOOK_NO_MAX;i++)
{
tmp=search(i,root,tmp,&j,&flag);
if(flag==1)fprintf(fp,"%d %d %d %s %s\n",tmp->book[j]->key,
tmp->book[j]->current,
tmp->book[j]->total,
tmp->book[j]->author,
tmp->book[j]->name);
}
fclose(fp);
return 0;
}
int load_n_save()
{
int c;
printf("1-加载;2-存盘;其他-返回\n");
scanf("%d",&c);
switch(c)
{
case 1:load_from_file();break;
case 2:save_to_file();break;
default:break;
}
return 0;
}
int shell()
{
int cmd=-1;
do{
printf("1-添加 2-删除 3-借书登记 4-还书登记 5-查找 9-加载&存盘 0-退出。\n> ");
scanf("%d",&cmd);
switch(cmd)
{
case 1:add_book();break;
case 2:del_book();break;
case 3:lent_book();break;
case 4:give_book();break;
case 5:find_book();break;
case 9:load_n_save();break;
default:break;
}
}while(cmd!=0);
return 0;
}
int main(int argc, char *argv[])
{
init();
shell();
system("PAUSE");
return 0;
}
...全文
相关推荐
vc++、dev和java开发OpenGL环境配置
vc++、dev和java开发OpenGL环境配置
在VC下配置openGL
在VC下配置openGL,一、下载并安装glut库 opengl的glut库 GLUT不是OpenGL所必须的,但它会给学习带来一定的方便,推荐安装。 二、VC工程配置.
超级玛丽源码(VC++)
一个完全用C++写成的小游戏,可供大家学习研究
MTK下的C_STL
MTK 下的 C STL 源代码,在VC6。0下编译通过,未经测试
VC捕获U盘消息[可运行源码]
本文详细介绍了在VC++中如何使用WM_DEVICECHANGE消息实时捕获U盘的插入和移除操作。文章提供了两种实现方式:一种是在Windows窗口回调函数中直接处理WM_DEVICECHANGE消息,通过判断wParam参数来检测设备状态变化;另一种是通过自定义注册和编写On函数来实现。文中还包含了具体的代码示例,展示了如何在MFC程序中添加消息映射、响应函数以及注册设备通知,从而实现U盘状态的实时监测和响应。


新手乐园
