【主要内容】
开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:
(1)图书信息录入功能(图书信息用文件保存)--输入
(2)图书信息浏览功能--输出
(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):
①按书名查询 ②按作者名查询 按照价钱排序 按出版时间排序等等
(4)图书信息的删除与修改
扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理 (2)报表打印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。(4)模糊查询 (5)综合查询 (6)统计功能 比如统计处某一类别的图书信息 或 筛选出小于指定数量库存的图书信息等等。
【概要设计】
1 图书录入可以录入图书名,作者,出版社,出版日期,价格!录入图书编号时函数就会判断此编号是否存在,若存在不能成功录入!
2 图书浏览可以浏览全部图书!
3 图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按图书名精确查询!模糊查询和关键字查询事通过比价字符串的相似度而实现的!
4 修改删除图书可以通过图书查询来查询操作的图书编号,通过编号操作!函数会提示用户是否调用图书查询来找到自己想要操作的图书的编号。如果某一本图书已经被借阅那么用户就不能删除该图书!
5 借阅图书通过学号和图书编号进行借阅!如果该学号是第一次借阅那么会提示用户输入自己的姓名,并存入student.txt,方便以后借阅与归还!
6 归还图书先提供学号,然后程序会输出该学号借阅的所有图书,然后再通过编号归还!
7 借阅查询可查询某个学生已借但未归还的图书!
【代码如下】(运行结果省略)
#include
#include
#include
FILE *fp,*fpj,*fps;
int i,xuan;
typedef struct book{
char name[10];
char num[10];
char writer[10];
int date;
char press[10];
float price;
char leibie[10];
int kucun;
int jiechu;
}bo;
typedef struct student{
char name[10];
char num[10];
int jie;
}st;
typedef struct jieyue{
char snum[10];
char bnum[10];
}ji;
void menu()//菜单
{
printf("\n\n");
for(i=0;i<80;i++)
printf("#");
printf("\n\n");
printf("\t\t1-----图书录入\t\t\t");
printf("2-----图书浏览\n\n");
printf("\t\t3-----图书查询\t\t\t");
printf("4-----修改删除图书\n\n");
printf("\t\t5-----借阅图书\t\t\t");
printf("6-----归还图书\n\n");
printf("\t\t7-----借阅查询\t\t\t\n");
printf("\n\t\t\t\t输入其他任意键退出\n");
printf("\n\n");
for(i=0;i<80;i++)
printf("#");
printf("\n\n");
}
void end()//录入图书
{
bo boo,booq;
printf("请输入图书名(最多十个字符):");
scanf("%s",boo.name);
do{
i=1;
printf("请输入图书编号(最多十个字符):");
scanf("%s",boo.num);
fread(&booq,sizeof(bo),1,fp);
while(!feof(fp)){
if(strcmp(booq.num,boo.num)==0){
printf("\n该编号已存在请重新输入\n\n");
i=0;
break;
}
fread(&booq,sizeof(bo),1,fp);
}
rewind(fp);
}while(i==0);
printf("请输入图书作者(最多十个字符):");
scanf("%s",boo.writer);
printf("请输入图书出版日期(例如2001年5月3日出版则输入20010503):");
scanf("%d",&boo.date);
printf("请输入图书价格:");
scanf("%f",&boo.price);
printf("请输入图书出版社(最多十个字符):");
scanf("%s",boo.press);
printf("请输入图书类别(最多十个字符):");
scanf("%s",boo.leibie);
printf("请输入图书入库数:");
scanf("%d",&boo.kucun);
boo.jiechu=0;
getchar();
fseek(fp,0,2);
fwrite(&boo,sizeof(bo),1,fp);
printf("\n录入成功!回到主菜单");
system("pause");
}
void print()//浏览图书
{
bo boo;
printf("书名 编号 作者 价格 出版社 类别 原始库存 借出\n");
fread(&boo,sizeof(bo),1,fp);
while(feof(fp)==0){
printf("%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
fread(&boo,sizeof(bo),1,fp);
}
printf("\n浏览图书完毕!回到主菜单");
system("pause");
}
int dui(char *p,char *p1)//对比两个字符串的相关度(用于精确搜索)
{
int bao=0,fan=1;
for(i=0;i<(int)strlen(p1);i++){
if(p[0]==p1[i]){
bao=i;
break;
}
}
if((int)strlen(p)>(int)strlen(p1)-bao+1)
return 0;
else
for(i=0;i<(int)strlen(p);i++){
if(p[i]!=p1[bao+i])
fan=0;
}
return fan;
}
void find()//查询图书
{
char hao[10];
int fan=1;
int bian=1;
bo boo;
printf("请选择查询类型:\n\n\t\t1-按图书编号模糊查询 2-按图书名关键字查询\n");
printf(" \n\t\t3-按图书编号精确查询 4-按图书名精确查询\n\n代码:");
scanf("%d",&xuan);
if(xuan==1){
printf("请输入编号(最多十个字符):");
scanf("%s",hao);
printf("序号 书名 编号 作者 价格 出版社 类别 原始库存 借出\n");
fread(&boo,sizeof(bo),1,fp);
while(!feof(fp)){
fan=dui(hao,boo.num);
if(fan==1){
printf("%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",bian,boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
bian++;}
fread(&boo,sizeof(bo),1,fp);
}
}
else if(xuan==2){
printf("请输入图书名关键字(最多十个字符):");
scanf("%s",hao);
printf("序号 书名 编号 作者 价格 出版社 类别 原始库存 借出\n");
fread(&boo,sizeof(bo),1,fp);
while(!feof(fp)){
fan=dui(hao,boo.name);
if(fan==1)
printf("%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",bian,boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
fread(&boo,sizeof(bo),1,fp);
}
}
else if(xuan==4){
printf("请输入图书名(最多十个字符):");
scanf("%s",hao);
printf("序号 书名 编号 作者 价格 出版社 类别 原始库存 借出\n");
while(!feof(fp)){
if(strcmp(hao,boo.name)==0)
printf("%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",bian,boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
fread(&boo,sizeof(bo),1,fp);
}
}
else if(xuan==3){
printf("请输入图书编号(最多十个字符):");
scanf("%s",hao);
printf("序号 书名 编号 作者 价格 出版社 类别 原始库存 借出\n");
while(!feof(fp)){
if(strcmp(hao,boo.num)==0)
printf("%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",bian,boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
fread(&boo,sizeof(bo),1,fp);
}
}
else{
printf("输入错误,正在退出!");
system("pause");
return;
}
printf("\n查询图书完毕! ");
system("pause");
}
void del()//修改删除图书
{
FILE *p;
ji jie;
int j=0;
char num[10];
bo boo,booq;
int xu;
char or;
char cha[10];
printf("\n删除修改图书只能通过图书编号来完成!\n是否调用图书查询来查询你要操作的图书编号(Y/N)\n");
getchar();
scanf("%c",&or);
if(or=='Y'||or=='y'){
find();
rewind(fp);}
printf("\n请输入你要操作的图书的编号(如果输入错误的编号,将不做任何操作):");
scanf("%s",cha);
fread(&jie,sizeof(ji),1,fpj);
while(!feof(fpj)){
if(strcmp(jie.bnum,cha)==0){
printf("\n这本书已有人借阅,不能操作!\n正在退出 ");
system("pause");
return;
}
fread(&jie,sizeof(ji),1,fpj);
}
printf("\n\n1-删除图书 2-修改图书\n\n");
printf("请选择操作类型:");
scanf("%d",&xuan);
fread(&boo,sizeof(bo),1,fp);
p=fopen("c:\\books1.txt","wb+");
while(!feof(fp)){
j++;
if(strcmp(boo.num,cha)==0){
if(xuan==2){
printf("\n\n1-书名 2-编号 3-作者 4-价格 5-出版社 6-类别 7-库存\n\n");
printf("请选择要修改的项目:");
scanf("%d",&xu);
if(xu==1){
printf("你要把%s改为:",boo.name);
scanf("%s",boo.name);}
else if(xu==2){
do{
i=1;
printf("你要把%s改为:",boo.num);
scanf("%s",num);
rewind(fp);
fread(&booq,sizeof(bo),1,fp);
while(!feof(fp)){
if(strcmp(booq.num,num)==0){
printf("\n该编号已存在请重新输入\n\n");
i=0;
break;
}
fread(&booq,sizeof(bo),1,fp);
}
}while(i==0);
rewind(fp);
for(i=0;i