2022年C语言作业图书信息管理系统最终源代码 .pdf
C语言图书信息管理系统最终源代码中荷生医#include #includestring.h struct book /* book2 是用来装用户要录入图书的信息*/ long num,time; char name12,writer12,fenlei8,danwei10;int pay; stu100; struct book1 long num,time; char name12,writer12,fenlei8,danwei10;int pay; stu1100; struct book2 /* book 是用来装cc.dat 文件中的图书信息*/ long num,time; char name12,writer12,fenlei8,danwei10;int pay; stu2100; denglu() char a15=drzhang,b15=29257966,c15,d15;L3: system(cls); printf( 欢 迎 登 陆 图 书 管 理 系 统nn); printf( 请输入姓名: ); gets(c); printf( 请输入密码: ); gets(d); if(strcmp(a,c)=0&strcmp(b,d)=0) return 0; else printf( 输入错误请重新输入nn); printf(1. 重新输入2.退出系统nn); printf( 请输入 .); switch(getch() case 49: goto L3;break; default: return 56;break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 22 页 - - - - - - - - - /* 此功能实现的是开始菜单的显示和具体功能的选择*/ start() printf(*欢迎使用图书管理系统*); printf(* 功能目录:*); printf(* | *); printf(* | | *); printf(* | 1、图书查询2、图书浏览3、录入图书4、删除与修改5、备份与还原| *); printf(* | | *); printf(* | | *); printf(* | | *); printf(* | *); printf(* 使用说明:如要选择“图书查询”,直接输入: 1 退出: 0 *); printf(*); printf( 你想要做什么:); return getch(); /* 输入选择对应功能的值,返回输入的值, 即:用于判断选择的功能*/ /* 实现备份功能,以防图书信息出错带来的麻烦,不必看懂*/ beifen() FILE *fp1,*fp2; int i,a; jieshuo(); system(cls); printf(nn请选择 备份( B)| 浏览备份( L)/ 还原( H) / 退出(Q) / n); switch(getch() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 22 页 - - - - - - - - - case B: case b: if(fp1=fopen(cc,r)=NULL) printf( 不能打开次文件n);exit(0); if(fp2=fopen(cc01,w)=NULL) printf( 不能打开次文件n);exit(0); fscanf(fp1,%d,&a); fprintf(fp2,%dn,a); printf(nn确认备份吗?(Y/N); switch(getch() case Y: case y:for(i=0;ia;i+) fscanf(fp1,%ld %s %s %s %s %ld %d,&stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,&stui.time,&stui.pay); fprintf(fp2,%ldt%st%st%st%st%ldt%dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); printf(nn备份成功!nn 是否打开浏览备份文件?(Y/N); switch(getch() case Y: case y:fclose(fp1);fclose(fp2);liulan02();break;case N: case n:break; break; case N: case n:break; fclose(fp1); fclose(fp2); break; case H: case h: if(fp1=fopen(cc01,r)=NULL) printf( 不能打开此文件n);exit(0); if(fp2=fopen(cc,w)=NULL) printf( 不能打开此文件n);exit(0); fscanf(fp1,%d,&a); fprintf(fp2,%dn,a); printf(nn确认还原吗?(Y/N); switch(getch() case Y: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 22 页 - - - - - - - - - case y:for(i=0;ia;i+) fscanf(fp1,%ld %s %s %s %s %ld %d,&stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,&stui.time,&stui.pay); fprintf(fp2,%ldt%st%st%st%st%ldt%dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); printf(nn还原成功!nn 是否打开浏览还原文件?(Y/N); switch(getch() case Y: case y:fclose(fp1);fclose(fp2);liulan();break; case N: case n:break; break; case N: case n:break; fclose(fp1); fclose(fp2);break; case l: case L:liulan02();break; case Q: case q:break; /* 在屏幕上打印查询菜单*/ chaxun() jieshuo(); system(cls); printf(*欢迎使用图书查询系统*); printf(* 查询方式:*); printf(* *); printf(* 1 、 书 名2 、 作 者 名3 、 出 版 时 间*); printf(* 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 22 页 - - - - - - - - - *); printf(* 4 、 价 格5 、 分 类 号6 、 出 版 单 位*); printf(* *); printf(* 使用说明:如要选择“书名”,直接输入: 1 退出: 0 *); printf(*); printf(n请输入你要怎么查询:); chaxun01(); /* 打印完毕后,进入chaxun()函数,执行用户需要的查询功能*/ /* 此程序段实行查询的各种功能*/ chaxun01() FILE *fp; char ch8; int a=0,i,j,k,n=0,c,d; long b; if(fp=fopen(cc,r)=NULL) /* 说明: cc.dat 文件装着图书的信息,*/ printf( 不能打开此文件n);exit(0); /* 并且文件开记录的是图书的书量,后*/ fscanf(fp,%d,&a); /* 从 文 件 中 读 出 图 书 数 */ /* 面 依 次 才 是 具 体 信 息 。*/ for(i=0;ia;i+) /* 并用 a 记录下来,然后依次打录图书信息装到缓冲区的stu 中,待用*/ fscanf(fp,%ld %s %s %s %s %ld %d,&stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,&stui.time,&stui.pay); strcpy(stu1i.name,stui.name);strcpy(stu1i.writer,stui.writer);strcpy(stu1i.fenlei,stui.fenlei); strcpy(stu1i.danwei,stui.danwei); strlwr(stu1i.name);strlwr(stu1i.writer);strlwr(stu1i.fenlei);strlwr(stu1i.danwei); L1: switch(getch() /* 用 switch()函数实现查询方式所提供的各种功能,getch()的返回值是ASCII码 */ case 48:break; case 49: printf(1nn请输入你要找的书名:); gets(ch); /* 用户输入要找的书,下同*/ strlwr(ch); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 22 页 - - - - - - - - - printf( 你要找的书可能是:nn); printf( 登录号书名作者分类号出版单位出书时间价格nn); for(i=0;ia;i+) /* 查询的方法是像字符比较函数的方式一*/ k=0; /* 样,一个一个地必须字母是否相同,直*/ for(j=0;j=4 就将能和用户要找的书名相同4 个*/ if(k=4) /* 字母的图书打印出来。按作者,分类号*/ /* 出版单位的查询方法相同。*/ printf(%ldt%st%st%st%st%ldt%dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); n+; if(n0)printf(n你要找的书共有%d 本 nnnnn,n); if(n=0) system(cls);printf(nn对不起,没有你要找的书!nn); break; case 50:printf(2nn请输入你要找的书的作者:); gets(ch); strlwr(ch); printf(n); printf( 你要找的书可能是:nn); printf( 登录号书名作者分类号出版单位出书时间价格nn); for(i=0;ia;i+) k=0; for(j=0;j=4) printf(%ldt%st%st%st%st%ldt%dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); n+; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 22 页 - - - - - - - - - if(n0)printf(n你要找的书共有%d 本 nnnnn,n); if(n=0) system(cls);printf(nn对不起,没有你要找的书!nn); break; case 51:printf(3nn请输入你要找的书的出版时间:); scanf(%ld,&b); /* 用户输入要找书的出版时间*/ printf(n); printf( 你要找的书如下:nn); printf( 登录号书名作者分类号出版单位出书时间价格nn); for(i=0;i0)printf(n你要找的书共有%d 本 nnnnn,n); if(n=0) system(cls);printf(nn对不起,没有你要找的书!nn); break; case 52:printf(4nn请输入你要找的书的价格:); scanf(%d,&c); printf(n); printf( 你要找的书如下:nn); printf( 登录号书名作者分类号出版单位出书时间价格nn); for(i=0;i0)printf(n你要找的书共有%d 本 nnnnn,n); if(n=0) system(cls);printf(nn对不起,没有你要找的书!nn); break; case 53:printf(5nn请输入你要找的书的分类号:); gets(ch); strlwr(ch); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 22 页 - - - - - - - - - printf(n); printf( 你要找的书可能是:nn); printf( 登录号书名作者分类号出版单位出书时间价格nn); for(i=0;ia;i+) k=0; for(j=0;j=6) printf(%ldt%st%st%st%st%ldt%dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); n+; if(n0)printf(n你要找的书共有%d 本 nnnnn,n); if(n=0) system(cls);printf(nn对不起,没有你要找的书!nn); break; case 54:printf(6nn请输入你要找的书的出版单位:); gets(ch); printf(n); printf( 你要找的书可能是:nn); printf( 登录号书名作者分类号出版单位出书时间价格nn); for(i=0;ia;i+) k=0; for(j=0;j=4) printf(%ldt%st%st%st%st%ldt%dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); n+; if(n0)printf(n你要找的书共有%d 本 nnnnn,n); if(n=0) system(cls);printf(nn对不起,没有你要找的书!nn); break; default:printf(nn操作错误按任意键返回 n);getch();goto L1;break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 22 页 - - - - - - - - - /* 系统结束时的动画效果*/ jieshu() int i; for(i=0;i-32767&n32768&n!=0); /* 会太多,于是检索图书量是否在int 范围内即可 */ else printf( 图书馆还没有书哦!如不增加,则会影响系统的运行!nn是否增加图书?(Y/N); switch(getch() /* 若果图书信息不在int 型范围内, */ case y: /* 就应该提示是否增加图书,以保 */ case Y:printf(n);zengjia();break; /* 证系统能正常运行。*/ case n: /* 选是运行 zengjia()函数增加 */ case N:printf(n);break; /* 图书, 否则, 退出检索。*/ /* 此程序实现的是程序开始时的开始动画*/ kaishi() int i; system(cls); printf(nnnnnnnnnnn); printf( # # # # # # # n); printf( # # # # # # # # # #n); printf( # # # # # # # # # # # # # #n); printf( # # # # # # # # # # #n); printf( # # # # # # # # # # # # # #n); printf( # # # # # # # # # 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 22 页 - - - - - - - - - #n); printf( # # # # # #n); printf( WELCOME TO . # # # # #n); printf( .USE THE LIBRARY SYSTEM # # # # # #nn); printf( 题目:图书管理系统 nn); printf( 成员: liukaihua zhangdongrui linxiaozhou nn); printf( nn); printf( 编写语言: C 语言工具: C-Free 4.1nn); printf(nnn); printf( 按任意键进入.); getch(); system(cls); /* 浏览菜单 */ liulan() jieshuo(); system(cls); printf(*欢迎使用图书浏览系统*); printf(* 浏览方式:*); printf(* *); printf(* 1 、 书 名2 、 直 接 浏 览*); printf(* *); printf(* 使用说明:如要选择“书名”,直接输入: 1 退出:Q *); printf(*); printf( 请选择你要浏览的方式:); liulan01(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 22 页 - - - - - - - - - /* 浏览功能 */ liulan01() FILE *fp; /* 将文件中的信息存到缓冲区,然后打印打屏幕上即可*/ int i,a; if(fp=fopen(cc,r)=NULL) printf( 不能打开次文件n);exit(0); fscanf(fp,%d,&a); switch(getch() case 49: printf(1nn图书馆现有图书%d 本nn,a); printf( 登录号书名作者 n); for(i=0;ia;i+) fscanf(fp,%ld %s %s %s %s %ld %d,&stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,&stui.time,&stui.pay); printf(%ldt%st%sn,stui.num,stui.name,stui.writer); break; case 50: printf(2nn图书馆现有图书%d 本nn,a); printf( 登录号书名作者分类号出版单位出书时间价格n); for(i=0;ia;i+) fscanf(fp,%ld %s %s %s %s %ld %d,&stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,&stui.time,&stui.pay); printf(%ldt%st%st%st%st%ldt%dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); break; case Q: case q:system(cls);break; fclose(fp); liulan02() FILE *fp; /* 将文件中的信息存到缓冲区,然后打印打屏幕上即可*/ int i,a; if(fp=fopen(cc01,r)=NULL) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 22 页 - - - - - - - - - printf( 不能打开次文件n);exit(0); fscanf(fp,%d,&a); printf(nn图书馆备份图书%d本 nn,a); printf( 登录号书名作者分类号出版单位出书时间价格 n); for(i=0;ia;i+) fscanf(fp,%ld %s %s %s %s %ld %d,&stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,&stui.time,&stui.pay); printf(%ldt%st%st%st%st%ldt%dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); fclose(fp); luru() system(cls); printf(*欢迎使用图书录入系统*); luru01(); /* 录入功能 */ luru01() FILE *fp; int i,n,a,m,j; L50: system(cls); shuoming(); if(fp=fopen(cc,r)=NULL) printf( 不能打开次文件n);exit(0); fscanf(fp,%d,&a); m=a; for(i=0;ia;i+) /* 将 cc.dat 文件中的图书读出来,并装的缓冲区的stu2 中,待用 */ fscanf(fp,%ld %s %s %s %s %ld %d,&stu2i.num,stu2i.name,stu2i.writer,stu2i.fenlei,stu2i.danwei,&stu2i.time,&stu2i.pay); fclose(fp); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 22 页 - - - - - - - - - /*下面是新增图书的书面和基本信息*/ if(fp=fopen(cc,a)=NULL) printf( 不能打开次文件n);exit(0); printf( 你要增加几本书?(1-%d 本) n,100-a); scanf(%d,&n); /* 用户输入录入图书的本书*/ if(n0) for(i=0;in;i+) /* 录入图书的信息,并将该信息装到缓冲区的stu 中,待用 */ printf( 请输入你的第 %d 图书信息: n,i+1); scanf(%ld %s %s %s %s %ld %d,&stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,&stui.time,&stui.pay); L4: for(j=0;ja;j+) /* 检查用户输入的登录号是否重复,直到用户输入正确的*/ if(stui.num=stu2j.num) /* 登录号才跳出此段程序*/ printf(n你的第%d 本书的登录号已经存在,请重新输入另一个:,i+1); scanf(%ld,&stui.num); printf(n);goto L4; fprintf(fp,%ld %s %s %s %s %ld %dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); printf(%ld %s %s %s %s %ld %dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); fclose(fp); /* 下面是从文件cc 中读出原来图书数*/ if(fp=fopen(cc,r)=NULL) printf( 不能打开次文件n);exit(0); fscanf(fp,%d,&a); fclose(fp); /* 下面是用来更新图书数*/ if(fp=fopen(cc,r+)=NULL) printf( 不能打开次文件n);exit(0); fprintf(fp,%d,a+n); fclose(fp); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 22 页 - - - - - - - - - else fclose(fp);if(n!=0)printf(nn你输入有误!按任意键返回.);getch();goto L50; /* 判断是否修改,返回值是getch() */ panduan() char ch; getchar(); printf(n确定删除 /修改吗? (Y/N)n); return(getch(); system(cls); /* 删除图书功能*/ shanchu() FILE *fp; int i,a,n=-1; long denglu; char ch; /*删除前打印文件中的信息到屏幕上,以便选择删除的图书的信息*/ if(fp=fopen(cc,r)=NULL) printf( 不能打开次文件n);exit(0); fscanf(fp,%d,&a); printf( 现有图书 %d 本n,a); printf( 登录号书名作者分类号出版单位出书时间价格 n); for(i=0;ia;i+) fscanf(fp,%ld %s %s %s %s %ld %d,&stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,&stui.time,&stui.pay); printf(%ldt%st%st%st%st%ldt%dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); fclose(fp); /*下面是你要删除书的信息*/ L3: printf(n请输入你要删除书的登录号:); scanf(%ld,&denglu); for(i=0;ia;i+) /*for循环,检索要删除的书的位置,并用n 记下来 */ if(denglu=stui.num) n=i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 22 页 - - - - - - - - - if(n=-1) printf(n你输入的登录号无效,请输入正确的登录号!n);goto L3; /*/ switch(panduan() case N: case n:xiugai();break; case Y: case y: /*/ if(fp=fopen(cc,w)=NULL) printf( 不能打开次文件n);exit(0); fprintf(fp,%dn,a-1); /* 从文件中读出有多少图书*/ /*下 面 是 将 要 删 除 的 书 的 前 面 的 书 保 存 到 文 件 和 打 印 到 屏 幕 上*/ printf(n); for(i=0;in;i+) fprintf(fp,%ld %s %s %s %s %ld %dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); printf(%ldt%st%st%st%st%ldt%dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); /*下面是将要删除书的后面的书的信息保存到文件和打印到屏幕上*/for(i=i+1;ia;i+) fprintf(fp,%ld %s %s %s %s %ld %dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); printf(%ldt%st%st%st%st%ldt%dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); printf(n删除成功!还剩图书%d 本:nnn,a-1); fclose(fp); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 22 页 - - - - - - - - - /* 录入前的说明*/ shuoming() printf(*录入说明*); printf(* *); printf(*登 录 号 (7)- 书 名 (8)- 作 者 (8)- 分 类 号 (8)- 出 版 单 位 (8)- 出 版 时 间 (8)- 价 格*); printf(* *); printf(* 若 没 有 作 者 / 出 版 单 位用 * 表 示 , 若 没 有 出 版 时 间 / 价 格用0 表 示*); printf(* *); printf(*如 : 2009001 English *( 无 作 者 ) TT-001 Guida 20090101 0( 无 价 格 ) *); printf(*); /* 此程序用于执行提示功能提示用户是否继续*/ tishi02() printf(nn是否继续 .(Y/N); switch(getch() case Y: case y:return 1;break; case N: case n:return 2;break; printf(n); /* 修改菜单 */ xiugai() L1: jieshuo(); system(cls); printf(*欢迎使用图书修改系统*); printf(* 修改方式:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 22 页 - - - - - - - - - *); printf(* *); printf(* 1 、 修 改 图 书2 、 删 除 图 书*); printf(* *); printf(* 使用说明:如要选择“修改图书”,直接输入:1 退出:Q/q *); printf(*); switch(getch() case 49:system(cls);xiugai01();break; case 50:system(cls);shanchu();break; case q: case Q:system(cls);break; default:printf(nn操作错误按任意键返回n);getch();goto L1;break; /* 实现修改功能*/ /*/ xiugai01() FILE *fp; int i,a,n=-1,N,c; long denglu; if(fp=fopen(cc,r)=NULL) printf( 不能打开次文件n);exit(0); fscanf(fp,%d,&a); printf( 现有图书 %d 本n,a); printf( 登录号书名作者分类号出版单位出书时间价格 n); for(i=0;ia;i+) fscanf(fp,%ld %s %s %s %s %ld %d,&stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,&stui.time,&stui.pay); printf(%ldt%st%st%st%st%ldt%dn,stui.num,stui.name,stui.writer,stui.fenlei,stui.danwei,stui.time,stui.pay); fclose(fp); /*输入你要修改的内容,但为进行修改*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 22 页 - - - - - - - - - L3: printf( 请输入你要修改书的登录号:); scanf(%ld,&denglu); getchar(); for(i=0;ia;i+) if(denglu=stui.num) n=i; if(n=-1) printf(n你输入的登录号无效,请输入正确的登录号!nn);goto L3; printf(n你要修改的是什么:1.书名2.作者3.分类号4.出版单位5.出书时间6.价格0.退出 n); printf(n您的选择是: ); c=getch(); printf(%dn,c-48); if(c!=48)printf(nn请输入你要修改的内容:); /*先 将 修 改 的 内 容 放 入book1中 保存 在 缓 冲 区*/ switch(c) case 48:xiugai();break; case 49: scanf(%s,stu1n.name); printf(n); break; case 50:scanf(%s,stu1n.writer); printf(n); break; case 51:scanf(%s,stu1n.fenlei); printf(n); break; case 52:scanf(%s,stu1n.danwei); printf(n); break; case 53:scanf(%ld,&stu1n.time); printf(n); break; case 54:scanf(%d,&stu1n.pay); printf(n); break; /*判断是否真的要修改*/ if(c!=48) switch(panduan() case N: case n:break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 22 页 - - - - - - - - - case Y: case y: /*下面是用来修改用户想要修改的内容*/ switch(c) case 49:strcpy(stun.name,stu1n.name);break; case 50:strcpy(stun.writer,stu1n.writer);break; case 51:strcpy(stun.fenlei,stu1n.fenlei);break; case