资源描述
图书信息管理系统设计
一、【要求】
图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。设计一图书信息管理系统,使之能提供以下功能:
(1) 系统以菜单方式工作
(2) 图书信息录入功能
(3) 图书信息浏览功能
(4) 图书信息查询功能
(5) 图书信息的删除与修改功能
二、【各功能模块】
1、菜单模块
开始
图书信息
录入
图书信息
浏览
图书信息
查询
图书信息
删除
图书信息
修改
图书信息
追加
N
输入a,判断是否是0~6?
开始
Y
根据a的值调用各功能模块函数
结束
主函数流程图
《1》、主函数:
建立menu( )函数将主函数功能提取出来,主函数main调用menu( )函数方便简捷。
void main()
{
menu();
}
void menu()
{
int a;
do
{
printf(" ******赵 毅******\n");
printf("\n");
printf("******中国地质大学******\n");
printf("\n");
printf("\n\n\n\n\n\t\t\t\t图书信息管理系统\t\t\t\t\n");
printf("\t\t********************************************\n");
printf("\t\t\t1 ----------------图书信息录入\n");
printf("\t\t\t2 ----------------图书信息浏览\n");
printf("\t\t\t3 ----------------图书信息查询\n");
printf("\t\t\t4 ----------------图书信息删除\n");
printf("\t\t\t5 ----------------图书信息修改\n");
printf("\t\t\t6 ----------------图书信息追加\n");
printf("\t\t\t0 ----------------退出图书信息系统\n");
printf("\t\t********************************************\n");
printf("\t\tplease choose: ");
scanf("%d",&a);
switch(a)
{
case 1:input();break;
case 2:list();break;
case 3:search();break;
case 4:del();break;
case 5:revise();break;
case 6:append();break;
case 0:exit(0);
default:printf("\n序号不对\n");
}
}
while(a!=0);
}
【定义图书信息结构体】
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
void menu();
#define N 3
typedef struct system
{
long num;
char name[20];
char writer[10];
char sort[10];
char publisher[20];
long time;
float price;
}
BOOK;
注:定义的BOOK结构体
N为限定的录入图书个数(可依据不同要求变化范围)
long num为定义的登录号(长整形变量)
char name[20]为定义的书名的数组
char writer[10]为定义的作者的数组
char sort[10]定义的分类号数组
char publisher[20]定义的出版单位数组
long time定义的出版时间长整形变量
float price价格为浮点型变量。
《2》、【数据存储】
整个程序没有利用保存save函数,而是利用txt.txt \ tab.txt 两个文件录入存取数据信息,并通过文件的读取、写入进行图书信息的修改/删除等功能。(fopen fwrite fread写入及读取数据进行存储)。
《3》【图书信息录入】
图书信息
录入
输入
书籍登录号
输入
书名
输入
作者名
输入
分类号
输入
出版单位
输入
出版时间
输入
书的价格
开始
输入用户要输入的录入的书的个数N
i从1到N调用输入函数input(i)
把信息存入txt.txt文件
关闭录入信息的文件
结束
图书录入流程图
【程序】
void input() /*定义录入函数*/
{
int i;
BOOK a;
FILE *fp;
if((fp=fopen("txt.txt","w"))==NULL)
{
printf("error!\n");exit(0);
}
for(i=1;i<=N;i++)
{
printf("\t请输入您所需书籍的登陆号:");
scanf("%ld",&a.num);
printf("\t请输入书名:");
scanf("%s",a.name);
printf("\t请输入作者名:");
scanf("%s",a.writer);
printf("\t请输入分类号:");
scanf("%s",a.sort);
printf("\t请输入出版单位:");
scanf("%s",a.publisher);
printf("\t请输入出版时间:");
scanf("%ld",&a.time);
printf("\t请输入该书的价格:");
scanf("%f",&a.price);
fwrite(&a,sizeof(BOOK),1,fp);
}
fclose(fp);
}
《4》【图书信息浏览】
图书信息
浏览
显示
书籍登录号
显示
书名
显示
作者名
显示
分类号
显示
出版单位
显示
出版时间
显示
书的价格
该模块的功能是显示所有录入的图书信息,流程图如下:
显示图书相关信息
打开存入信息的txt.txt文件
按任意键返回主菜单
图书浏览流程
【程序】
void list() /*定义浏览函数*/
{
BOOK a;
FILE *fp;
if((fp=fopen("txt.txt","r"))==NULL)
{
printf("error!\n");exit(0);
}
printf("\n\n\n\n\n\n\n\n\n登陆号\t书名\t作者名\t分类号\t出版单位\t
出版时间\t价格\n\n");
while(fread(&a,sizeof(BOOK),1,fp)!=0)
printf("\t%ld\t%s\t%s\t%s\t%s\t%ld\t%3.2f\n",a.num,a.name,a.writer,
a.sort,a.publisher,a.time,a.price);
fclose(fp);
printf("\n\t press any key to continue...");
getch();
}
《5》【图书信息查询】
[需求分析]
用户需要查找的图书,调用函数:
1、按书名查找 search_by_name
2、按作者名查找 search_by_write,两种方式进行查询。
输入查询方式,进入功能选项,
1、 首先打开源文件txt.txt ,则按照输入书名进行for 循环查找,若查到则显示图书信息。若无,则显示“file open error!!”。按任意键结束。
2、 与1、流程相同,按照作者名查询。
图书信息查询
按书名查询(1)
按作者名查询(2)
EXIT(0)
开始
输入a,判断a是否为1~2?
a=1 ,则调用search_by_name按书名查询
a=2,则调用search_by_writer按作者名查询
输入书名,若有此书则输出此书信息,若没有,则输出file open error!!
输入作者名,若有此书则输出此书信息,若没有,则输出file open error!!
退出回到主菜单
a=0
查询功能流程图
【程序】
void search() /*定义查询函数*/
{
int a;
printf("\t\t******************************\n");
printf("开始查询\n");
printf("\t\t\t1---------------按书名查询\n");
printf("\t\t\t2---------------按作者名查询\n");
printf("\t\t\t0---------------exit\n");
printf("\t\t******************************\n") ;
printf("\t\t请选择你想要的查询方式:");
scanf("%d",&a);
switch(a)
{
case 1:search_by_name();break;
case 2:search_by_writer();break;
case 0:return;}
}
void search_by_name() /*定义按书名查询*/
{
FILE *fp;
int i;
BOOK b[N];
char s2[20];
fp=fopen("txt.txt","r");
if(fp==NULL)
{
printf("file open error!!\n");exit(0);
}
for(i=0;i<N&&fp!=NULL;i++)//shanchu
fread(&b[i],sizeof(BOOK),1,fp);
printf("请输入要查询的书名: ");
scanf("%s",s2);
for(i=0;i<N;i++)
{
if(strcmp(s2,b[i].name)==0)
{
printf("书号 书名 作者 种类 出版商 出版日期 价格 \n");
printf("\t%ld\t%s\t%s\t%s\t%s\t%ld\t%3.2f\n",b[i].num,b[i].name,
b[i].writer,b[i].sort,b[i].publisher,b[i].time,b[i].price);
}
fclose(fp);
}
}
void search_by_writer() /*定义按作者名查询*/
{
int i;
FILE *fp;
BOOK b[N];
char s3[20];
fp=fopen("txt.txt","r");
if(fp==NULL)
{
printf("file open error!!\n");exit(0);
}
for(i=0;i<N;i++)
fread(&b[i],sizeof(BOOK),1,fp);
printf("请输入要查询的书的作者: ");
scanf("%20s",s3);
for(i=0;i<N;i++)
if(strcmp(s3,b[i].writer)==0)
{
printf("书号 书名 作者 种类 出版商 出版日期 价格 \n");
printf("\t%ld\t%s\t%s\t%s\t%s\t%ld\t%3.2f\n",&b[i].num,b[i].name,
b[i].writer,&b[i].sort,b[i].publisher,&b[i].time,&b[i].price);
}
fclose(fp);
}
《6》【图书信息删除】
[需求分析]
该模块功能是,先输入需要删除的图登陆号,打开存储文件for循环查找该图书信息,然后利用b[k]=b[k+1]语句进行删除,即将要删除的一列用后一列进行替换完成删除功能,最后将改后的信息在写入结构体存入文件,关闭文件夹。
删除功能
输入登录号删除
用b[k]=b[k+1]进行替换完成删除功能
结束
图书信息删除流程
【程序】
void del() /*定义删除函数*/
{
FILE *fp;
long booknum; /*按登陆号查询*/
int i=0,k;
BOOK b[N];
if((fp=fopen("txt.txt","r"))==NULL)
{
printf("error!\n");getch();exit(0);
}
for(i=0;i<N;i++)
{
fread(&b[i],sizeof(BOOK),1,fp);
}
fclose(fp);
printf("\n Please type in the number of the book you want to delete:");
scanf("%ld",&booknum);
for(i=0;i<N;i++)
if(booknum==b[i].num) {break;}
if(i<N)
for(k=i;k<(N-1);k++)
{
b[k]=b[k+1];
}
else printf("\n cannot found!\n");
fp=fopen("txt.txt","w");
if(fp==NULL)
{ printf("\n error!\n");return; }
for(i=0;i<N-1;i++)
{
fwrite(&b[i],sizeof(BOOK),1,fp);
}
fclose(fp);
getch();
}
《7》【图书信息修改】
[需求分析]
该模块实现按照用户需求,将需要修改的图书名输入,进行for循环查找是否有此书,若无,则显示未找到,退出,若有,则显示输入新的图书信息,开始输入修改的信息,进行for循环开始录入,替换原文件信息,结束显示“修改成功”。
【程序】
void revise() /*定义修改函数*/
{
int i,j,k;
char s1[20];
BOOK b[N];
FILE *fp,*fq;
if((fq=fopen("tab.txt","w"))==NULL)
{
printf("error!"); exit(0);
}
if((fp=fopen("txt.txt","r"))==NULL)
{
printf("error!"); exit(0);
}
for(i=0;!feof(fp)&&i<N;i++)
{
fread(&b[i],sizeof(BOOK),1,fp);
}
fclose(fp);
printf("\t\t欢迎进入修改界面\n");
printf("\n\n\n\t\t请输入所要修改的图书名:\n");
scanf("%s",s1);
for(j=0;j<i;j++)
if(strcmp(b[j].name,s1)==0) {k=j;break;}
if (j>i||j==i)
{
printf("未找到!");getch(); exit(0);
}
printf("\t\t请输入新登录号 图书名 作者 分类号 出版单位 出版时间 价格\n");
scanf("%ld%s%s%s%s%ld%f",&b[k].num,b[k].name,b[k].writer,b[k].sort,b[k].publisher,&b[k].time,&b[k].price);
for(i=0;i<(j+1);i++)
{
fwrite(&b[i],sizeof(BOOK),1,fq);
}
fclose(fq);
printf("修改成功!");
if((fq=fopen("txt.txt","w"))==NULL)
{
printf("error!"); exit(0);
}
for(i=0;!feof(fq)&&i<N;i++)
{
fwrite(&b[i],sizeof(BOOK),1,fq);
}
fclose(fq);
getch();
}
《8》【图书信息追加】
[需求分析]
该模块功能是用户需要增加新的图书信息,打开源存储文件,按照需要追加的个数n,进行for循环,开始录入追加的信息,流程如下:
For循环,输入图书信息
输入追加图书个数n
打开txt.txt文件
开始
将追加的图书写入txt.txt文件
【程序】
void append() /*定义追加函数*/
{
int i,n;
BOOK a;
FILE *fp;
if((fp=fopen("txt.txt","a"))==NULL)
{
printf("error!\n");exit(0);
}
printf("\n\n\t请输入追加图书的个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf ("\t请输入追加图书的登录号:");
scanf("%ld",&a.num);
printf("\t请输入追加图书的图书名:");
scanf("%20s",a.name);
printf("\t请输入追加图书的作者名:");
scanf("%10s",a.writer);
printf("\t请输入追加图书的分类号:");
scanf("%10s",a.sort);
printf("\t请输入追加图书的出版单位:");
scanf("%20s",a.publisher);
printf("\t请输入追加图书的出版时间:");
scanf("%d",&a.time);
printf("\t请输入追加图书的单价:");
scanf("%f",&a.price);
fwrite(&a,sizeof(BOOK),1,fp);
}
fclose(fp);
}
【上机操作】
1、 录入函数
2、 编译连接、运行
3、 结果
下面是各功能模块的界面图:
(1) 主菜单
(2) 添加模块
【录入模块】
【浏览模块】
【查询模块】
【删除模块】
【修改模块】
修改后的结果
【追加模块】
展开阅读全文