图书信息管理系统设计
一、问题描述
图书信息包括:书号、书名、作者名、分类号、出版单位、出版时间、价格等。
二、功能描述
试设计一图书信息管理系统,使之能提供以下功能:
1、系统以菜单方式工作
2、图书信息录入功能(图书信息用文件保存),可不定时地增加图书信息,书号不允许重复;
3、图书信息浏览功能
4、图书信息查询功能
查询方式
(1)按书名查询
(2)按作者名查询
5、图书信息的删除
输入书号,查询该图书,如果存在,则删除该图书信息。
6、图书信息的修改
输入书号,查询该图书,如果存在,则修改该图书信息(不允许修改登录号)。
三.、总体设计
3.1系统总模块设计
根据任务要求,系统总体模块设计如图1所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WzhkA1Mz-1625661789408)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K0VwnBkr-1625661789410)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif)]
3.2 各功能模块说明
根据上述的分析,将系统按功能分为以下模块
头文件模块head.h:定义相关结构,定义常量及全局变量,声明所有模块的函数。
主程序模块main.cpp:调用各模块中的函数实现对通讯录的管理。
菜单模块menu.cpp:显示主菜单,子菜单,使菜单界面独立于其他程序代码。
menu();//菜单
checkPass();//载入界面
browse();//浏览图书
write();//录入图书
cha();//查询包括删除(调用函数的函数)
Exit();//退出提示
save();//测试写入图书基本信息
bookshu();//改造成了修改图书信息就不改函数名称了
browsetext();//测试读出写入有基本书(fread读)
initialization();//对结构体初始化
xiangxi();//详细查找
del();//删除
四、详细设计
初始化流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-crGRArIG-1625661789412)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image005.gif)]
数据保存流程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4UFUpMVm-1625661789422)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif)]
4.2数据结构设计
加入了节点方便判断文件,保存数据,以及下一次初始化后能够把删除的书空位删除
struct B{
char id[10];//书籍的编号
char book_name[100];//书名
char name[100];//作者
char xd[10];//分类
char day[100];//出版日
char work[100];//出版单位
double prize;//价格
struct B *next;//节点
};
4.3控制结构设计
**1.**主程序模块main.cpp
main模块有主函数main。
主函数 main流程图如图3所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KMAG2gyu-1625661789423)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image007.gif)] |
**2.**数据输入模块write.cpp
write.cpp包含1个函数:write ()
write函数功能:创建数据。将从键盘输入的数据保存在内存。
算法描述:如图4所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jcp5jLQO-1625661789424)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif)] | |||
录入信息 |
**3.**信息排序模块browsetext.cpp
browsetext.
函数功能:测试读出写入有基本书(fread读)。
4. 信息显示模块xiangxi.cpp
xiangxi.cpp包含1个函数: Sleep()。
xiangxi.功能:详细查找。
算法描述:如图5所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ET5JQvPA-1625661789425)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image009.gif)] |
图5 浏览信息流程
5. 查询模块query.cpp
查询模块包含两个函数Sleep()、bookshu()。
(1)bookshu()
功能:显示查找选项菜单,供用户输入查找方式,并根据返回的信息处理显示结果。
算法描述:如图6所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yMTK2yXP-1625661789425)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif)] |
图6查找方式选择流程
(2)bookshu函数流程
功能:在数组中按图书号查找信息(整数比较)。如果找到输出相应信息;如果没有找到给出“没找到!”的提示信息。
函数返回一个可继续进入查找菜单的值。
算法描述:如图8所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OwvBjRKN-1625661789426)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image011.gif)] |
图8 按书号查询信息流程
6.修改模块bookshu.cpp
修改模块bookshu.cpp包含一个函数xiangxi().
函数功能:在数组中按书号查找信息,如果找到则显示输出相应,然后输入修改信息;如果没有找到给出没找到的提示信息。
算法描述:如图9所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4F885r3Y-1625661789427)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image012.gif)] |
图9 按书号查询修改信息流程
- 删除模块del.cpp
删除模块包含一个函数 del
函数功能:找到是在哪个数组里面,如果找到则是否删除该信息;如果没有找到给出没找到的提示信息。
算法描述:如图10所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ot1LcEtm-1625661789427)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image013.gif)] |
图10 按书号查询修改信息流程
6.文件模块file.cpp
file.cpp包含两个函数:write()和save()。
\1. 读文件信息函数write()
功能:从文件中读取信息建立数组。
算法描述:如图11所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sISh9SKs-1625661789428)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image015.gif)]
图 11 将信息从文件读入到内存
\2. 保存数据到文件函数save()
功能:将信息写入文件。
算法描述:如图12所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vRVWkxOR-1625661789429)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image016.gif)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CkKSfTte-1625661789429)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image018.gif)]
图 12 将内存信息写入文件
**
**
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oYs6QR2v-1625661789430)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image019.gif)]
五、代码实现
head.h头文件预设
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#define N 100//初始
extern void menu();//菜单
extern void checkPass();//载入界面
extern void browse();//浏览图书
extern void write();//录入图书
extern void cha();//查询包括删除(调用函数的函数)
extern void Exit();//退出提示
extern void save();//测试写入图书基本信息
extern void bookshu();//改造成了修改图书信息就不改函数名称了
extern void browsetext();//测试读出写入有基本书(fread读)
extern void initialization();//对结构体初始化
extern int xiangxi();//详细查找
extern void del();//删除
struct B{
char id[10];//书籍的编号
char book_name[100];//书名
char name[100];//作者
char xd[10];//分类
char day[100];//出版日
char work[100];//出版单位
double prize;//价格
struct B *next;//节点
};
extern int n;//单独用块读来初始化n
extern struct B Book[N];
meun()主菜单系统
#include<stdio.h>
void menu(){//图书查询界面
printf(“--------------------------菜单--------------------------\n\n”);
printf(" 输入对应的数字跳跃到相关操作\n");
printf(" 1.图书浏览大全\n");
printf(" 2.录入图书\n");
printf(" 3.图书查询\n");
printf(" 4.退出\n");
printf(“\n--------------------------菜单--------------------------\n”);
}
checkPass()载入系统进行初始化
#include"heard.h"
void checkPass()//加载界面
{
printf( "\n @@@@@@@@昆明学院图书馆@@@@@@@@\n" );
printf( "\n **Yun_nan KMXY Library**\n\n" );
printf( "\n\n\t\t 正在进行ID认证,请稍等" );
initialization();//初始化数组
printf( "." );
Sleep( 400 );
printf( "." );
Sleep( 400 );
printf( "." );
Sleep( 400 );
printf( "." );
initialization();
printf( "\n\n\t\t 登" );
Sleep( 400 );
printf( "录" );
Sleep( 400 );
printf( "成" );
Sleep( 400 );
printf( "功\n" );
Sleep(1600);
}
Browse()浏览图书系统
#include"heard.h"//用文件来搞
void browse(){//浏览
struct B *p,*q;
p=&Book[0];
q=p->next;
printf("-----------------------浏览-----------------------------\n");
while(q!=NULL){
printf("%-s.%-30s\t%10s\n",p->id,p->book_name,p->name);
p=q;
q=p->next;
}
printf("-----------------------浏览-----------------------------\n");
system("pause");
}
Cha()查询系统
#include"heard.h"
void cha(){
system(“cls”);
int i;
while(1){
system(“cls”);
printf(“\n-----------------------查询系统-----------------------------\n”);
printf(" 1.书号详细内容\n");
printf(" 2.修改图书\n");
printf(" 3.删除图书\n");
printf(" 4.返回上一级\n");
printf(“-----------------------查询系统-----------------------------\n”);
printf(“请输入所需服务:\n”);
scanf(“%d”,&i);
switch(i){
case 1:xiangxi();
continue;
case 2:system(“cls”);
bookshu();//修改
break;
case 3:del();//删除
break;
case 4:break;
}
if(i==4)break;
}
}
Del()删除系统
#include"heard.h"
void del(){
int i,j;
i=xiangxi();//找到是在哪个数组里面
if(i==-1)return;
printf(“是否删除:\n1.是 2.否\n”);
scanf(“%d”,&j);
if(j1&&i!=N){//不是删除第一个
Book[i-1].next=&Book[i+1];
n–;
save();
initialization();
}
else if(j1&&iN){
Book[i-1].next=NULL;
n–;
save();
}
if(j2)save();
}
Main()主函数包含测试代码
#include “heard.h”
struct B Book[N];
int n=0;
int main(){
checkPass();//载入
system(“CLS”);//清屏
int a;//输入菜单的
while (1) {
while (1) {
system(“CLS”);
printf(“现在拥有的图书数量:%d\n”,n);//查看几本书
menu();
scanf(“%d”, &a);
if (a > 4 || a < 1) {//完整版后需要改这里
printf(“\n请输入的数字对应的!\n”);
system(“pause”);
} else break;
}
switch (a) {
case 1:
browse();//浏览
break;
case 2:write();//录入
break;
case 3:cha();//查询与删除
break;
case 4:Exit();//退出
//以下功能用于调试
/case 5:save();//测试写入端口
break;
case 6:bookshu();//测试书籍返回值是否则正确
break;
case 7:browsetext();//测试读入有几本书
break;/
default: break;
}
if(a==4)break;
}
return 0;
}
Initialization()数据的初始化操作
#include"heard.h"
void initialization(){//初始化结构体数组
FILE*a;
int i=0;
struct B p;
a=fopen(“book.txt”,“rb”);
p=(struct B)malloc(sizeof(struct B));
while(fread(p,sizeof(struct B),1,a)==1&&feof(a)!=1){
Book[i]=*p;
Book[i].next=&Book[i+1];
i++;
}
Book[i].next=NULL;
n=i;
free§;
fclose(a);
}
Save()实现事实写入书籍,删除书记后的记录保存
#include"heard.h"//存档
void save(){
FILE*fp;
struct B *p,*q;
p=&Book[0];
q=p->next;
fp=fopen(“book.txt”,“wb”);
while(q!=NULL){
fwrite(p,sizeof(struct B),1,fp);
p=q;
q=p->next;
}
printf(“保存成功\n”);
fclose(fp);
system(“pause”);
}
Write()实现录入图书系统
#include"heard.h"
void write(){
int i=1;
while(1){
switch(i){//用库函数来解决判断输入的是否符合类型
case 1:printf(“请输入图书ID(数字):\n”);
scanf(“%s”,&Book[n].id);
i++;
break;
case 2:printf(“请输入图书名字:\n”);
scanf(“%s”,&Book[n].book_name);i++;
break;
case 3:printf(“请输入图书作者:\n”);
scanf(“%s”,&Book[n].name);i++;
break;
case 4:
printf(“分类介绍\n”);
printf(" A类:理工科类书\n");
printf(" B类:文科类书\n");
printf(" C类:生活用书\n");
printf(" D类:儿童图书\n");
printf(“分类介绍\n”);
printf(“请输入所属分类:\n”);
scanf(“%s”,&Book[n].xd);i++;
break;
case 5:printf(“请输入图书出版日(格式2020.01.01):\n”);
scanf(“%s”,&Book[n].day);i++;
break;
case 6:printf(“请输入图书出版单位:\n”);
scanf(“%s”,&Book[n].work);i++;
break;
case 7:printf(“请输入图书价格:\n”);
scanf(“%lf”,&Book[n].prize);i++;
Book[n].next=&Book[n+1];
Book[n+1].next=NULL;
break;
}
if(i==8){
save();
n++;
break;
}
}
}
Xiangxi()实现筛选查询条件返回数值来判断是否存在书籍
#include"heard.h"
int xiangxi(){
int j;
char a[10];
struct B *p;
p=&Book[0];
printf(“\n输入所需查询书籍的书号:\n”);
scanf(“%s”,a);
//gets(a);getchar();
for(j=0;(p->next)!=NULL;j++){
if(strcmp(p->id,a)0){
system(“cls”);
printf(“_\n\n");
printf(“%s,%s\n”,Book[j].id,Book[j].book_name);
printf(“作者:%s\n”,Book[j].name);
printf(“分类:%s\n”,Book[j].xd);
printf(“出版日期:%s\n”,Book[j].day);
printf(“出版单位:%s\n”,Book[j].work);
printf(“价格:%.2lf\n”,Book[j].prize);
printf("\n\n”);
system(“pause”);
return j;
}
p=p->next;
}
if(jN||p->next==NULL){
printf(“查无此书 自动返回上一级”);
Sleep(800);
return -1;
}
}
Exit()实现退出系统
void Exit(){
printf(“感谢使用”);
Sleep(800);
exit(0);
}
六、系统测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S0MiWXkE-1625661789431)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image021.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7AdxjxHR-1625661789437)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image023.jpg)]
载入测试成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BsXdo763-1625661789438)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image025.jpg)]
图书浏览成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Obusb6He-1625661789439)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image027.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BX6mwq82-1625661789439)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image029.jpg)]
图书录入系统成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HFmdh4YM-1625661789441)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image031.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NBrHtAdM-1625661789441)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image033.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rz2IeMWn-1625661789442)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image035.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e9D26oM0-1625661789443)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image037.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MDUboH2a-1625661789443)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image039.jpg)]
图书详细 查询系统实现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PPKUx5qH-1625661789444)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image041.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h9bpKTFq-1625661789444)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image043.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PZRDhFBj-1625661789445)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image045.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OVNimeLq-1625661789446)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image047.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gYGElfCH-1625661789447)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image049.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HEPisjAy-1625661789449)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image051.jpg)]
图书修改系统实现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lYZ3dZ1B-1625661789450)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image053.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uub7O2YC-1625661789452)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image055.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UhtySaO7-1625661789453)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image057.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aHwkubhV-1625661789454)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image059.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o6zppoCz-1625661789462)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image061.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ASAPxbrF-1625661789464)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image063.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TAm2bVYS-1625661789465)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image065.jpg)]
图书删除的实现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1oInmxSh-1625661789466)(file:///C:/Users/hj/AppData/Local/Temp/msohtmlclip1/01/clip_image067.jpg)]
保存图书记录成功
链接:点我白嫖
提取码:6666
内置详细图解,欢迎兄弟们修改和提出宝贵的意见
此外,本人使用的是数组的结构而不是链表
当初写的时候才想起怕不是链表会简单,但是越想越气似乎没有数组储存文件保存与读取方便,其次头文件已经详细解释各个外函数的功能
如果你有什么好的意见和建议欢迎到评论区与我交流(大二匆忙会抽空回复)
现在补充一点,由于这边使用的vs2010版本,由于vs2010版本太难找了然后这个项目修改不了完善不了打开怕是有点难,然后思路大家可以通过doc的说明看对应的文档会给予你帮助,那么最后这一年是大四了祝各位多实践多学习,学无止境感谢各位