用delphi和access做的图书管理系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用delphi和access做的图书管理系统相关的知识,希望对你有一定的参考价值。

参考技术A 下面是Accsee数据库操作的SQL语句,自己设计界面和数据库字段,
h
t
t
p://
www.cnblogs.com/del/category/192898.html

数据量不是很大可以不用AccSee,改用TClientDataSet的CDS,XML文件存放.
也可以2个都用,打开软件后先用TClientDataSet操作数据,关闭的时候在写回AccSee数据库

用C语言设计和实现一个“图书信息管理系统”,满足以下要求:

1.系统以菜单方式工作;
2.使用链表对图书信息进行管理和维护;
3.使用二进制文件在磁盘上保存图书记录信息;
4.链表中每个结点包括“图书编号、书名、作者、出版社、出版时间、价格”基本字段;
5.实现如下基本功能:
(1)图书信息录入功能
(2)图书信息浏览功能 (输出所有的图书信息)
(3)图书信息排序 (按图书编号由大到小的顺序排列)
(4)图书信息查询 (按图书编号查询图书信息)
(5)图书信息统计 (按出版社统计满足条件的图书数目,并显示图书信息)
(6)图书删除 (从链表中删除指定编号的图书)
(7)图书修改 (修改指定编号的图书的基本信息)
(8)将图书信息保存到文件存盘 (将建立起来的链表以文件的形式存盘)
(9)从文件中读入图书信息 (将原来已经存盘的文件读入内存,进行管理)

const int MAXLEN=100;int count; //记录书籍数量char fName[20]="backup.dat"; //磁盘文件:书籍信息文件名 int LEN; //全局变量,通讯录中当前联系人总数int n;char *key;
typedef struct book //联系人数据结构
char no[20]; //序号 char book_name[20]; // 书名 char writer[30]; //作者名 char booknum[20]; //书籍分类 char press[20]; //出版单位 char price[10]; //书籍价格 BOOK;BOOK b[MAXLEN];
typedef struct index int len; //数组长度 BOOK b[MAXLEN]; //指针数组Index;
int Select();int Menu(void);int SubMenu2(void);int SubMenu4(void);int addbook(BOOK b[]);int output(BOOK b[]);int deletebook(BOOK b[]);void printno(BOOK b[]);int modifyIndo(BOOK b[]);int Save(BOOK b[]); int loaddata(BOOK b[]);int Copy(void);void New(BOOK b[]);int Load(BOOK b[]);void List(BOOK b[]);//void findbook(char *name,BOOK b[],char *key);
#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<memory.h>int main(int argc, char* argv[]) int select=0;
/*int select;用户所选的菜单项代码: 主菜单:1 查找图书信息、2 更新图书信息 、3 备份图书信息、0 退出程序 更新图书信息子菜单:21 新增图书信息、 22 编辑图书信息、 23 删除图书信息、 20 返回主菜单 查看图书信息子菜单:11 图书信息库 、12书名查找、13 作者名查找、14 序号查找 */
BOOK b[MAXLEN]; memset(b,0,sizeof(b)); //将b初始化为空,memory.h loaddata(b); //从图书库文件中读取信息 //循环显示菜单,供用户选择 do
if(select<10||select==20||select==40) select=Menu(); else if(select>20 && select<30) select=SubMenu2(); else if(select>40 && select<50) select=SubMenu4(); switch(select) case 11:// 图书信息库 break; case 12://书名查找 break;
case 13://作者名查找 break; case 14://类别查找 break;
case 21://新增图书信息、 break; case 22://编辑图书信息、 break; case 23://删除图书信息、 break; case 20://返回主菜单 break; case 3: system("cls"); Save(b); Copy(); break; case 0://退出程序 break; while(select!=0); return 0;
int SubMenu4(void) char menu; do system("cls");//清屏,需要使用到stdlib.h puts("\n\t======更新图书信息======\n"); puts("\t 1.新增图书信息"); puts("\t 2.删除图书信息"); puts("\t 3.编辑图书信息"); puts("\t 0.返回主菜单"); puts("\n\t=================="); printf("\t请选择:");//提示选择 menu=getche(); switch(menu) case '0': puts("\n\n\t返回主菜单!"); break; case '1': addbook(b); break; case '2': deletebook(b); break; case '3': modifyIndo(b); break; default: puts("\n\n\t选择错误!"); menu='9'; while(menu=='9'); return 40+menu-'0';
void New(BOOK b[]) int t=0; //找到BOOK中第一个空的位置,存放新输入 if(LEN>=MAXLEN) printf("\n\n\t图书库已满!"); return ;
while(strcmp(b[t].book_name,"")!=0) //找到b中第一个空的位置t t++; addbook(b); //新增,输入 LEN++; //增1
int modifyIndo(BOOK b[])//编辑图书信息 char no[20]; int i; printno(b);again: printf("\n请输入你想要编辑的书籍编号:"); fflush(stdin); gets(no); for(i=0;i<=count;i++) if(strcmp(no,b[i].no)==0) break; if(i>count) printf("对不起,你输入的编号不存在,是否继续?Y/N:"); if((getchar()=='Y')||(getchar()=='y')) goto again; else return 0; printf("\n正在修改《%s》的信息……\n",b[i].book_name); printf("请输入图书的名字:"); gets(b[i].book_name); printf("请输入图书的作者名:"); gets(b[i].writer); printf("请输入书籍类别:"); gets(b[i].booknum); printf("请输入书籍的出版单位:"); gets(b[i].press); printf("请输入书籍的价格:"); gets(b[i].price); printf("\n图书信息编辑成功!\n");


void printno(BOOK b[]) int i; printf("\n当前库存中的书籍目录:\n"); for( i=0;i<=count;i++) printf("%s %s ",b[i].no,b[i].book_name); if(i%3==0&&i>0) printf("\n");
int output(BOOK b[]) //输出图书信息 if(count<0) printf("对不起,当前图书数量为0\n"); return 0; for(int i=0;i<=count;i++) printf("\n*************************书籍信息*****************************\n"); printf("序号:%s\n",b[i].no); printf("书名:%s\n",b[i].book_name); printf("作者名:%s\n",b[i].writer); printf("书籍类别:%s\n",b[i].booknum); printf("出版单位:%s\n",b[i].press); printf("书籍价格:%s\n",b[i].price); return 1;
int deletebook(BOOK b[]) char no[20]; int i; printno(b);loop: printf("\n请输入你要删除的书籍编号:"); fflush(stdin); gets(no); for(i=0;i<=count;i++) if(strcmp(no,b[i].no)==0) break; if(i>count) printf("对不起,你输入的编号不存在,是否继续?Y/N:"); if((getchar()=='Y')||(getchar()=='y')) goto loop; else return 0; printf("您确定要删除《%s》吗?Y/N:",b[i].book_name); if((getchar()=='Y')||(getchar()=='y'))
if(i==count) count--; else for(;i<=count;i++) b[i]=b[i+1]; count--;

else return 0;
int loaddata(BOOK b[]) int i=0; //i:b数组的下标 FILE *fp=fopen(fName,"r"); if(!fp) printf("\n\t对不起,路径或者文件错误,无法读入!请重新增加!"); getch(); return 0; fscanf(fp,"书籍编号\t书名\t作者\t类别\t出版单位\t价格"); while((!feof(fp))) fscanf(fp,"\n%s\t%s\t%s\t%s\t%s\t%s",&b[i].no,&b[i].book_name,&b[i].writer,&b[i].booknum,&b[i].press,&b[i].price); i++; count=i; fclose(fp); printf("加载成功!!"); return 1;
int Select() int i=0; int c; //c:scanf输入的返回值,输入成功返回1;否则返回0 printf("\n\t请按需要选择图书信息:"); c=scanf("%d",&i); while(i<1 || i>LEN) printf("\n\t输入错误!请按序号选择图书信息:"); if(c==0) fflush(stdin); c=scanf("%d",&i); return i-1; int addbook(BOOK b[]) //增加图书信息 int i=0; char c; printf("\n*******************************新增图书信息****************************\n"); for(;;i++) if(i>=MAXLEN) printf("\n对不起,库存已满!不能继续添加。"); printf("请输入图书的序号:"); gets(b[i].no); printf("请输入图书的名字:"); gets(b[i].book_name); printf("请输入图书的作者名:"); gets(b[i].writer); printf("请输入书籍类别:"); gets(b[i].booknum); printf("请输入书籍的出版单位:"); gets(b[i].press); printf("请输入书籍的价格:"); gets(b[i].price); printf("图书增加成功!\n"); printf("请问您要继续添加书籍信息吗?(Y/N): "); c=getchar(); if(c=='Y'||c=='y') getchar(); printf("\n"); continue; else break; count=i; return i;
//查重。int Duplicate(char *name,BOOK b[],char *original) int i,j; int dup=0; //重复标志:1 重复 ,0 没有重复 if(strcmp(name,original)!=0) for(i=0,j=0;j<LEN;) while(strcmp(b[i].book_name,"")==0) i++;
if(strcmp(name,b[i].book_name) ==0) dup=1; printf("\n\t重复!请重新输入:"); break; i++; j++; return dup; int SubMenu2(void) char menu,*name; do system("cls"); //清屏,需要使用到stdlib.h puts("\n\t======查找图书信息======\n"); puts("\t 1.图书信息库"); puts("\t 2.书名查找"); puts("\t 3.作者名查找"); puts("\t 4.序号查找"); puts("\t 0.返回主菜单"); puts("\n\t=================="); printf("\t请选择:"); //提示选择 menu=getche(); switch(menu) case '0': puts("\n\n\t返回主菜单!"); break; case '1': output(b); getch(); break; case '2': //findbook(name,b,key); getch(); break; case '3': case '4': printno(b); break; default: puts("\n\n\t选择错误!"); menu='9'; while(menu=='9'); return 20+menu-'0';
int Menu(void) char menu; do system("cls"); puts("\n\t======主菜单======\n"); puts("\t 1.查找图书信息"); puts("\t 2.更新图书信息"); puts("\t 3.备份图书信息"); puts("\t 0.退出程序"); puts("\n\t=================="); printf("\t请选择:"); //提示选择 menu=getche(); switch(menu) //将用户输入的选项menu转换成系统定义的菜单代码
case '0': puts("\n\n\t退出程序!"); menu=menu-'0'; break;
case '2': menu=SubMenu4();
break; case '3': menu=menu-'0';
break; case '1': menu=SubMenu2();
break; default: puts("\n\n\t选择错误!"); menu='9'; //输入了无效的菜单代码,需要重新输入 while(menu=='9'); return menu;
int Load(BOOK b[]) FILE *fin; int i=0; fin=fopen(fName,"rb"); if(!fin) printf("\n\t书籍信息不存在,请先新增加图书信息!\n\n按任意键继续……"); getch(); return 0; while(1) fread(&b[i],sizeof(BOOK),1,fin); if(feof(fin)) break; i++; fclose(fin); LEN=i; return i;

int Save(BOOK b[])//存入文件
int i; //i:b数组的下标 FILE *fp=fopen(fName,"w"); if(!fp) printf("\n\t不能正确保存书籍信息!按任意键继续……"); getch(); return 0; fprintf(fp,"书籍编号\t书名\t作者\t类别\t出版单位\t价格"); for( i = 0; i <=count; i++) fprintf(fp,"\n%s\t%s\t%s\t%s\t%s\t%s",b[i].no,b[i].book_name,b[i].writer,b[i].booknum,b[i].press,b[i].price); fclose(fp); printf("保存成功!!"); return 1;
int Copy(void) //备份图书信息,复制图书信息文件 FILE *fout,*fin; BOOK *p=(BOOK *)malloc(sizeof(BOOK)); //存放从图书信息库读入的临时数据 char name[20];
fin=fopen(fName,"rb"); if(!fin) printf("\n\t没有此图书信息!"); return 0;
do printf("\n\t请输入备份文件名:"); scanf("%s",name); strcat(name,".bak"); fout=fopen(name,"wb"); if(!fout) printf("\t无效文件名或路径!\n"); while(!fout);
while(1) fread(p,sizeof(BOOK),1,fin); if(feof(fin)) break; fwrite(p,sizeof(BOOK),1,fout);
printf("\n\t备份成功!"); free(p); return 1;
void findbook(char *name,BOOK b[],char *key)
int i,j; //i:数组下标 j:除姓名为空串以外的实际人数 int dup=0; printf("请输入您需要查找图书信息的书名:"); scanf("%s",name); if(strcmp(name,key)!=0) for(i=0,j=0;j<LEN;) while(strcmp(b[i].book_name ,"")==0) i++; if(strcmp(name,b[i].book_name) ==0) dup=1; printf("\n%s\t%s\t%s\t%s\t%s\t%s",&b[i].no,&b[i].book_name,&b[i].writer,&b[i].booknum,&b[i].press,&b[i].price);
参考技术A 帮你搞定图书信息管理系统
Q我就可以了
原创

以上是关于用delphi和access做的图书管理系统的主要内容,如果未能解决你的问题,请参考以下文章

用Delphi做的管理系统如何连接网页

delphi+access权限管理设置

求可修改的图书馆管理系统Access模板!

跪求!!!!在线图书销售系统(ASP.net+ACCESS 或 SQL SERVER)

数据库系统原理课程设计 -----图书借阅管理系统

求access数据库制作的图书管理系统,有增删改查功能