题 目: 图书信息管理系统
图书信息管理系统
本题目设计目的是训练学生的基本编程能力,了解图书管理信息系统的开发流程,熟悉C语言的文件的基本操作。本程序中涉及结构体、文件等方面的知识。通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用文件存储结构实现对学生成绩管理的原理,为进一步开发出高质量的图书管理系统打下坚实的基础。
1、题目要求
设计“图书信息管理系统”
要求:
图书信息包括:书号、书名、作者、价格等。使之提供以下功能:
- 系统以菜单方式工作。
- 图书信息录入功能。(图书信息用文件保存)。
- 图书信息浏览功能。
- 图书信息的导入。
- 图书信息的修改。
- 图书信息查询功能。
- 图书信息的删除。
- 图书信息的保存和返回主菜。
2、分析:
根据题目要求,应当把图书信息用结构体形式输入,再定义一个全局变量和文件指针进行整个程序的运行,然后把图书信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;在程序中需实现图书信息录入,浏览,查询,修改和删除等功能的操作,在运行时达到所要目。
3、总体设计:
根据题目要求,可以将系统分为十三个模块:
- 菜单选择模块。
- 图书信息数据写入文件。
- 图书信息数据文件的导入。
- 图书信息主菜单的打印。
- 输出*与输出~。
- 提供开关的效果。
- 图书信息的输入。
- 图书信息的打印。
- 图书信息的修改。
- 图书信息的查找。
- 图书信息的删除。
- 图书信息的保存。
- 返回主菜单。
4:部分程序设计:
头函数名:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>
#define N 80
struct book_type
{char booknum[20]; /*书号*/
char bookname[20]; /*书名*/
char authorname[20]; /*作者*/
char price[20]; //价格
}person[N]; /*存储图书信息*/
4.1:功能模块
void menu(); /*菜单函数*/
void display1(); /*执行打印的功能*/
void display2(); /*执行打印的功能*/
void reserve(); /*保存到数组*/
void read(); /*导入图书信息*/
void delay(); /*提供开关的效果*/
void choose(); /*提供选择的功能*/
void enter(); /*图书信息的输入*/
void printfinformation(); /*图书信息的打印*/
void modify(); /*图书信息的修改*/
void search(); /*图书信息的查找*/
void del(); /*图书信息的删除*/
void save(); /*图书文件信息的保存*/
void back(); /*返回主菜单*/
char ch; /*存储主菜单的调用选项信息*/
int number=0,temp1,temp2=0; /*记录每次输入的人数*/
void main()
{system("color 0e"); //选择颜色
menu(); //菜单函数
do
{scanf(" %c",&ch);
system("cls"); //清屏功能
choose();
}while(ch!='8'); //循环条件的判断
}
//提供主菜单的选择功能
void choose()
{switch(ch)
{case'1':enter();
break;
case'2':printfinformation();
back();
break;
case'3':modify();
back();
break;
case'4':search();
//back;
break;
case'5':del();
break;
case'6':save();
break;
case'7':read();
back();
case'8':printf("nnt感谢您的使用!n");
break;
default:menu();
printf("nnt请重新选择:");
}
注释:图书信息以数据的形式写入文件,以文件的形式保存图书信息数据
//图书信息数据写入文件
void reserve()
{FILE *fp=NULL;
FILE *fp1=NULL;
int i;
if((fp=fopen("book.txt","w"))==NULL) //以文本只写方式打开文件
{printf("不能打开文件");
exit(0);
}
if((fp1=fopen("book1.txt","w"))==NULL) //以文本只写方式打开文件
{printf("不能打开文件");
exit(0);
}
fprintf(fp1,"%20dn",number);
for(i=temp2;i<number;i++)
{fprintf(fp,"%10s%15s%15s%15sn",person[i].booknum,person[i].bookname,person[i].authorname,person[i].price); //写入文件
}
fclose(fp1);
fclose(fp); //关闭文件
}
注释:当图书信息不能打开时则关闭文件,返回菜单。
//图书信息数据文件的读取/导入
void read()
{FILE *fp;//=NULL;
FILE *fp1;
int i=0;
if((fp1=fopen("book1.txt","rb+"))==NULL) 以文本只读方式重新打开文件
{printf("不能打开文件");
exit(0);
}
fscanf(fp1,"%4dn",&number);
if((fp=fopen("book.txt","rb+"))==NULL) 为了读与写,打开一个二进制文件
{printf("不能打开文件");
exit(0);
}
for(i=0;i<number;i++)
{fscanf(fp,"%11s%11s%11s%11sn",person[i].booknum,person[i].bookname,person[i].authorname,person[i].price);
//读文件
printf("%11s%11s%11s%11sn",person[i].booknum,person[i].bookname,person[i].authorname,person[i].price);
//输出文件数据
}
reserve();
fclose(fp1);
fclose(fp);
menu();
back();
}
//主菜单的打印
void menu()
{char *s[9]={"【1】输入图书信息","【2】查看图书信息","【3】修改图书信息","【4】查找图书信息","【5】删除图书信息","【6】保存图书信息","【7】导入图书信息","【8】退出管理系统","请选择:"};
int i;
printf("n");
printf("tt");
display1();
printf("图书管理系统");
display1();
printf("nn");
printf("tt");
display2();
printf("nn");
printf("tt");
for(i=0;i<9;i++)
{display1();
printf("%s",s[i]);
display1();
printf("n");
printf("tt");
}
}
//输出*
void display1()
{int i;
for(i=0;i<=16;i++)
{printf("*");
delay();
}
}
//输出~
void display2()
{int i;
for(i=0;i<=24;i++)
{printf("~");
delay();
}
}
//提供开关的效果
void delay()
{long i,n=4000000;
for(i=0;i<n;i++)
{if(ch!='�') i=n; //运行过后可消除开关的延迟效果
}
}
//图书信息的输入
void enter()
{int i;
printf("请输入图书的册数:");
scanf("%d",&temp1);
number+=temp1;
for(i=temp2;i<number;i++) //引用中间变量temp2,记录每次输入的人数
{printf("请输入%d本图书的信息:",i+1);
printf("t书号:");
scanf("%s",person[i].booknum);
printf("t书名:");
scanf("%s",person[i].bookname);
printf("t作者:");
scanf("%s",person[i].authorname);
printf("t价格:");
scanf("%s",person[i].price);
}
reserve();
temp2+=temp1;
back(); //返回主菜单
}
//图书信息的打印
void printfinformation()
{int i;
if(number==0)
{printf("t没有图书信息");
}
else
{printf("ntt~~~~~~~~~~~~图书信息~~~~~~~~~~~~~~~n");
printf("--------------------------------------------------n");
printf(" 书号 书名 作者 价格n");
printf("--------------------------------------------------n");
for(i=0;i<number;i++)
{printf("%10s%11s%11s%11sn",person[i].booknum,person[i].bookname,person[i].authorname,person[i].price);
printf("--------------------------------------------------n");
}
}
}//图书信息的修改
//图书信息的查找
void search()
{int i,k,flag;
char temp[20],temp1;
if(number==0)
{printf("t没有图书信息");
}
else
{do
{printf("请输入你要查找的图书是书号或书名:");
scanf("%s",temp);
for(i=0;i<number;i++)
{if(strcmp(temp,person[i].booknum)==0||strcmp(temp,person[i].bookname)==0)
{k=i;
flag=1;
break;
}
if(i==(number-1)&&(strcmp(temp,person[i].booknum)!=0)&&(strcmp(temp,person[i].bookname)!=0))
{printf("不存在该图书n");
flag=0;
}
}
if(flag==1)
{printf("该图书的信息:n");
printf("--------------------------------------------------n");
printf("3 书号 书名 作者 价格n");
printf("--------------------------------------------------n");
printf("%5s%7s%9s%9sn",person[k].booknum,person[k].bookname,person[k].authorname,person[k].price);
printf("--------------------------------------------------n");
}
printf("n是否继续查找?Y/N:");
scanf("%c",&temp1);
}while(temp1=='y'||temp1=='Y');
}
back();
}
void del()
{int i,k,flag;
char temp[20],temp1;
if(number==0)
{printf("t没有图书信息");
}
else
{printfinformation();
do
{printf("请输入要删除的图书信息的书号或书名:");
scanf("%s",temp);
for(i=0;i<number;i++)
{if(strcmp(temp,person[i].booknum)==0||strcmp(temp,person[i].bookname)==0)
{k=i;
flag=1;
break;
}
if(i==(number-1)&&(strcmp(temp,person[i].booknum)!=0)&&(strcmp(temp,person[i].bookname)!=0))
{printf("不存在该图书n");
flag=0;
}
}
if((flag==1)&&(number==1))
{number--;
temp2--;
printf("该图书信息已经成功删除nn");
}
if((flag==1)&&(number<=0))
{printf("已经没有图书信息,请重新输入!nn");
}
if((flag==1)&&(number>1))
{for(i=k;i<(number-1);i++)
{strcpy(person[i].booknum,person[i+1].booknum);
strcpy(person[i].bookname,person[i+1].booknum);
strcpy(person[i].authorname,person[i+1].authorname);
strcpy(person[i].price,person[i+1].price);
}
number--;
temp2--;
printf("该图书信息已经成功删除nn");
}
printf("是否继续删除?Y/N");
scanf("%c",&temp1);
}while(temp1=='Y'||temp1=='y');
printf("是否显示删除操作后全部图书信息?Y/N:");
scanf("%c",&temp1);
if(temp1=='y'||temp1=='Y')
{printfinformation();
}
reserve();
}
back();
}
注释:当输入数据时选择1则返回上次的记录,2则保存记录。会输出相应的数据。
//保存记录
void save()
{char temp;
printf("1、读取上次的记录:n2、保存现在的记录:n请选择:");
scanf("%c",&temp);
if(temp=='1')
{printf("ntt/~~~~~~~~~~~~~图书信息~~~~~~~~~~~~~~~n");
printf("--------------------------------------------------n");
printf(" 书号 书名 作者 价格n");
read();
back();
}
else
{printf("t程序已经保存n");
back();
}
}
//返回主菜单
void back()
{printf("ntt输入任意键返回主菜单:");
getch(); //提供任意键返回效果
system("cls"); //清屏功能
menu(); //打印主菜单
}
5运行与测试报告:
功能选择键。
输入图书信息。
查看图书信息。
修改图书信息。
查找图信息。
删除图书信息。
保存图书信息。
图书信息的导入。
退出图书管理系统。
需要全部资料可以在我的资源里下载,资料包括程序文档、源程序。
需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。
纷传 点击用微信打开即可,过程有点繁琐请见谅。