求一个图书管理程序
要求如下:
信息录入功能
录入图书信息(包括编号,书名,作者名,分类号,出版单位,出版时间,价格表等)。
信息浏览功能
显示录入的所有图书信息。
信息查询与排序功能(按多种方式查询)
可按照书名、作者名、或者出版单位等信息来查询图书具体信息,查询的结果按一定的规则排序显示(比如按照编号排序或按出版时间排序)。
信息删除功能
根据图书编号删除该图书信息。
信息修改功能
根据输入的图书编号修改该图书的相关信息,并显示修改前后的记录。
信息统计功能
统计图书总数以及总价值。
统计2003年以后出版的图书数和总价值。
信息保存
将图书信息保存于外部存储器文件中。
8、打开文件
从文件中读取图书信息。
[解决办法]
#include〈stdio.h〉
#include〈stdlib.h〉
#include〈string.h〉
#include〈conio.h〉
#define MAX 1000
typedef struct book
{
char bookn[40];
char artn[10];
char ISN[20];
char pub[40];
int year;
char state[10];
}
book;
static book a[MAX];
static int N;
int read()
{
int t;
FILE *fp;
if((fp=fopen( "date.txt ", "r "))==NULL)
{
printf( "文件打开错误 ");
exit(0);
}
for(N=0; N{
t=fscanf(fp, "%s%s%s%s%d%s ",a[N].bookn,a[N].artn,a[N].ISN,a[N].pub,&a[N].year,&a[N].state);
fprintf(fp, "\n ");
if(t==-1)break;
}
fclose(fp);
return N;
}
void write(int n)
{
int i;
FILE *fp;
if((fp=fopen( "date.txt ", "w "))==NULL)
{
printf( "文件打开错误 ");
exit(0);
}
for(i=0; i{
fprintf(fp, "%s\t%s\t%s\t%s\t%d\t%s\n ",a[i].bookn,a[i].artn,a[i].ISN,a[i].pub,a[i].year,a[i].state);
}
fclose(fp);
}
void view()
{
FILE *fp;
int t;
if((fp=fopen( "date.txt ", "r "))==NULL)
{
printf( "文件打开错误 ");
exit(0);
}
printf( "书名 作者 ISSN/ISBN 出版社 出版年 状态\n ");
for(int i=0; i{
t=fscanf(fp, "%s%s%s%s%d%s ",a[i].bookn,a[i].artn,a[i].ISN,a[i].pub,&a[i].year,a[i].state);
fprintf(fp, "\n ");
if(t==-1)break;
printf( "%s\t%s\t%s\t%s\t%d\t%s\n ",a[i].bookn,a[i].artn,a[i].ISN,a[i].pub,a[i].year,a[i].state);
}
fclose(fp);
read();
printf( "库存%d本图书\n ",N);
printf( "Press any key to continue... \n ");
getch();
}
void add()
{
int i=read(),e=0,flag;
char d;
FILE *fp;
if((fp=fopen( "date.txt ", "a "))==NULL)
{
printf( "文件打开错误 ");
exit(0);
}
printf( "现有图书 %d 本\n ",i);
while(1)
{
printf( "是否增加 Y/N :\n ");
char m=getch();
if(m== 'y 'm== 'Y ')break;
if(m== 'n 'm== 'N ')
{
fclose(fp);
return;
}
}
printf( "现在增加一本图书:\n ");
printf( "书名: ");
scanf( "%s ",a[i].bookn);
printf( "作者: ");
scanf( "%s ",a[i].artn);
while(1)
{
flag=0;
printf( "ISSN/ISBN: ");
scanf( "%s ",a[i].ISN);
for(e=0; e{
if(strcmp(a[e].ISN,a[i].ISN)==0)
{
flag=1;
break;
}
}
if(flag==1)
{
printf( "重复,请重新输入!\n ");
}
if(flag==0)break;
}
printf( "出版社: ");
scanf( "%s ",a[i].pub);
printf( "出版年: ");
scanf( "%d ",&a[i].year);
do
{
printf( "状态(1在馆/2外借):\n ");
d=getch();
}
while(d <= '0 'd> '2 ');
switch(d)
{
case '1 ':strcpy(a[i].state, "在馆 ");
break;
case '2 ':strcpy(a[i].state, "外借 ");
break;
}
fprintf(fp, "\n%s\t%s\t%s\t%s\t%d\t%s ",a[i].bookn,a[i].artn,a[i].ISN,a[i].pub,a[i].year,a[i].state);
while(1)
{
printf( "是否继续增加 Y/N :\n ");
char m=getch();
if(m== 'y 'm== 'Y ')break;
if(m== 'n 'm== 'N ')
{
fclose(fp);
return;
}
}
}
void g()
{
int i,e,flag;
char g[20];
char d;
while(1)
{
while(1)
{
printf( "输入要修改的图书ISSN/ISBN: ");
scanf( "%s ",g);
flag=0;
for(i=0; i{
if(strcmp(a[i].ISN,g)==0)
{
flag=1;
break;
}
}
if(flag==0)
{
printf( "对不起,您查找的书籍不存在。\n ");
while(1)
{
printf( "是否继续修改 Y/N :\n ");
char m=getch();
if(m== 'y 'm== 'Y ')break;
if(m== 'n 'm== 'N ')return;
}
}
if(flag==1)break;
}
printf( "这是您要修改的图书信息:\n ");
printf( "书名 作者 ISSN/ISBN 出版社 出版年 状态\n ");
printf( "%s\t%s\t%s\t%s\t%d\t%s\n ",a[i].bookn,a[i].artn,a[i].ISN,a[i].pub,a[i].year,a[i].state);
while(1)
{
printf( "是否修改 Y/N :\n ");
char m=getch();
if(m== 'y 'm== 'Y ')break;
if(m== 'n 'm== 'N ')return;
}
printf( "请输入修改后该图书信息:\n ");
printf( "书名: ");
scanf( "%s ",a[i].bookn);
printf( "作者: ");
scanf( "%s ",a[i].artn);
while(1)
{
flag=0;
printf( "ISSN/ISBN: ");
scanf( "%s ",a[i].ISN);
for(e=0; e{
if(e==i)e++;
if(strcmp(a[e].ISN,a[i].ISN)==0)
{
flag=1;
break;
}
}
if(flag==1)
{
printf( "重复,请重新输入!\n ");
}
if(flag==0)break;
}
printf( "出版社: ");
scanf( "%s ",a[i].pub);
printf( "出版年: ");
scanf( "%d ",&a[i].year);
do
{
printf( "状态(1在馆/2外借):\n ");
d=getch();
}
while(d <= '0 'd> '2 ');
switch(d)
{
case '1 ':strcpy(a[e].state, "在馆 ");
break;
case '2 ':strcpy(a[e].state, "外借 ");
break;
}
[解决办法]
write(N);
while(1)
{
printf( "修改完毕是否继续修改 Y/N :\n ");
char m=getch();
if(m== 'y 'm== 'Y ')break;
if(m== 'n 'm== 'N ')return;
}
}
}
void del()
{
int flag=0;
char g[20];
while(1)
{
printf( "输入要删除的图书ISSN/ISBN: ");
scanf( "%s ",g);
for(int e=0; e{
if(strcmp(a[e].ISN,g)==0)
{
flag=1;
break;
}
}
if(flag==0)
{
printf( "对不起,您查找的书籍不存在。\n ");
while(1)
{
printf( "是否继续删除 Y/N :\n ");
char m=getch();
if(m== 'y 'm== 'Y ')break;
if(m== 'n 'm== 'N ')return;
}
}
if(flag==1)
{
for(int i=e; i{
strcpy(a[i].bookn,a[i+1].bookn);
strcpy(a[i].artn,a[i+1].artn);
strcpy(a[i].ISN,a[i+1].ISN);
strcpy(a[i].pub,a[i+1].pub);
a[i].year=a[i+1].year;
strcpy(a[i].state,a[i+1].state);
}
break;
}
}
write(N-1);
read();
}
void SelectSort(book a[],int n,char d)
{
int i,j,temp,min;
char t[40];
for(i=0; i{
min=i;
if(d== '1 ')
{
for(j=i+1; j{
if(a[j].year{
if(a[j].year> a[min].year) min=j;
}
}
if(min!=i)
{
strcpy(t,a[i].bookn);
strcpy(a[i].bookn,a[min].bookn);
strcpy(a[min].bookn,t);
strcpy(t,a[i].artn);
strcpy(a[i].artn,a[min].artn);
strcpy(a[min].artn,t);
strcpy(t,a[i].ISN);
strcpy(a[i].ISN,a[min].ISN);
strcpy(a[min].ISN,t);
strcpy(t,a[i].pub);
strcpy(a[i].pub,a[min].pub);
strcpy(a[min].pub,t);
strcpy(t,a[i].state);
strcpy(a[i].state,a[min].state);
strcpy(a[min].state,t);
temp=a[i].year;
a[i].year=a[min].year;
a[min].year=temp;
}
}
}
void sort()
{
read();
char d;
printf( " 排序方式 \n ");
printf( " 1、按出版年 (升序) \n ");
printf( " 2、按出版年 (降序) \n ");
do
{
printf( "\n输入序号:\n ");
d=getch();
}
while(d <= '0 'd> '2 ');
SelectSort(a,N,d);
printf( "排序完毕:\n ");
printf( "书名 作者 ISSN/ISBN 出版社 出版年 状态\n ");
for(int i=0; i{
printf( "%s\t%s\t%s\t%s\t%d\t%s\n ",a[i].bookn,a[i].artn,a[i].ISN,a[i].pub,a[i].year,a[i].state);
}
while(1)
{
printf( "保存并退出 Y/N :\n ");
char m=getch();
if(m== 'y 'm== 'Y ')break;
if(m== 'n 'm== 'N ')return;
}
write(N);
}
int f1(book a[],int n,char d)
{
char g[40];
int flag;
while(1)
{
flag=0;
printf( "\n请输入: ");
scanf( "%s ",g);
printf( "查询结果:\n ");
printf( "书名 作者 ISSN/ISBN 出版社 出版年 状态\n ");
for(int e=0; e{
switch(d)
{
case '1 ':if(strcmp(a[e].bookn,g)==0)
{
printf( "%s\t%s\t%s\t%s\t%d\t%s\n " ,a[e].bookn,a[e].artn,a[e].ISN,a[e].pub,a[e].year,a[e].state);
flag++;
};
break;
case '2 ':if(strcmp(a[e].artn,g)==0)
{
printf( "%s\t%s\t%s\t%s\t%d\t%s\n " ,a[e].bookn,a[e].artn,a[e].ISN,a[e].pub,a[e].year,a[e].state);
flag++;
};
break;
case '3 ':if(strcmp(a[e].ISN,g)==0)
{
printf( "%s\t%s\t%s\t%s\t%d\t%s\n " ,a[e].bookn,a[e].artn,a[e].ISN,a[e].pub,a[e].year,a[e].state);
flag++;
};
break;
case '4 ':if(strcmp(a[e].pub,g)==0)
{
printf( "%s\t%s\t%s\t%s\t%d\t%s\n " ,a[e].bookn,a[e].artn,a[e].ISN,a[e].pub,a[e].year,a[e].state);
flag++;
};
break;
case '5 ':if(strcmp(a[e].state,g)==0)
{
printf( "%s\t%s\t%s\t%s\t%d\t%s\n " ,a[e].bookn,a[e].artn,a[e].ISN,a[e].pub,a[e].year,a[e].state);
flag++;
};
break;
}
}
printf( "查到%d个结果\n ",flag);
if(flag==0)printf( "对不起,您查找的书籍不存在。 ");
while(1)
{
printf( "\n是否继续此类查询 Y/N :\n ");
char m=getch();
if(m== 'y 'm== 'Y ')break;
if(m== 'n 'm== 'N ')return flag;
}
}
return flag;
}
int f2(book a[],int n)
{
int flag,g;
while(1)
{
flag=0;
printf( "\n请输入: ");
scanf( "%d ",&g);
printf( "查询结果:\n ");
printf( "书名 作者 ISSN/ISBN 出版社 出版年 状态\n ");
for(int e=0; e{
if(g==a[e].year)
{
printf( "%s\t%s\t%s\t%s\t%d\t%s\n ",a[e].bookn,a[e].artn,a[e].ISN,a[e].pub,a[e].year,a[e].state);
flag++;
}
}
printf( "查到%d个结果\n ",flag);
if(flag==0)printf( "对不起,您查找的书籍不存在。 ");
while(1)
{
printf( "\n是否继续此类查询 Y/N :\n ");
char m=getch();
if(m== 'y 'm== 'Y ')break;
if(m== 'n 'm== 'N ')return flag;
}
}
return flag;
}
void find()
{
read();
char d;
printf( "\n =查询菜单= ");
printf( "\n1、按书名查询 2、按作者查询 3、按ISSN/ISBN查询 ");
printf( "\n4、按出版社查询 5、按状态查询 6、按出版年查询 ");
do
{
printf( "\n输入序号: ");
d=getch();
}
while(d <= '0 'd> '6 ');
putchar(d);
if(d== '6 ')f2(a,N);
else f1(a,N,d);
}
int tf1(int n,char g[10])
{
int flag=0;
for(int e=0; e{
if(strcmp(a[e].state,g)==0)flag++;
}
return flag;
}
int tf2(int n,int s,int b)
{
int flag=0;
for(int e=0; e{
if(a[e].year> =s&&amp;a[e].year <=b)flag++; } return flag; } void total() { read(); int a,b,c,d,e,f,r,h,p,q,total; printf( "统计如下:\n "); printf( "现存图书%d本\n ",N); a=tf1(N, "在馆 "); printf( "%d本图书在馆\t ",a); b=tf1(N, "外借 "); printf( "%d本图书外借\n ",b); c=tf2(N,1900,1979); printf( "20世纪:早于80年代有%d本\t ",c); d=tf2(N,1980,1989); printf( "80年代有%d本\t ",d); e=tf2(N,1990,1999); printf( "90年代有%d本\n ",e); r=tf2(N,1900,1999); printf( "20世纪图书共计%d本\n ",r); f=tf2(N,2000,2005); printf( "21世纪图书共计%d本\n ",f); h=N-r-f; printf( "其他图书%d本\n ",h); while(1) { printf( "\n是否自定义统计 Y/N :\n "); char m=getch(); if(m== 'y 'm== 'Y ')break; if(m== 'n 'm== 'N ')return; } do { printf( "输入统计起始年代: "); scanf( "%d ",&p); printf( "输入统计截止年代: "); scanf( "%d ",&q); } while(p> q);
total=tf2(N,p,q);
printf( "库存从%d年至%d年的图书共计%d本\n ",p,q,total);
while(1)
{
printf( "\n是否继续自定义统计 Y/N :\n ");
char m=getch();
if(m== 'y 'm== 'Y ')break;
if(m== 'n 'm== 'N ')return;
}
}
void help()
{
printf( "\n=================帮 助===================== ");
printf( "\n= 这是一个简单的图书管理系统,功能如主菜= ");
printf( "\n=单所示,可以进行对书籍信息的显示、增删、修= ");
printf( "\n=改、排序、查询及统计操作。使用方法如下: = ");
printf( "\n=进入主菜单输入序号执行相应操作。1、显示2、= ");
printf( "\n=增加 3、修改 4、删除5、排序 6、查询7、统计= ");
printf( "\n=8、帮助9、退出 = ");
printf( "\n= 本系统尽供测试使用 = ");
printf( "\n= 版权所有 请勿侵犯 = ");
printf( "\n= 十分感谢您的使用! = ");
printf( "\n============================================ ");
}
void menu()
{
printf( "\n------------------------------------------- ");
printf( "\n= 图书管理系统菜单 = ");
printf( "\n= = ");
printf( "\n= 1、 显 示 4、 删 除 7、 统 计 = ");
printf( "\n= 2、 增 加 5、 排 序 8、 帮 助 = ");
printf( "\n= 3、 修 改 6、 查 询 9、 退 出 = ");
printf( "\n------------------------------------------- ");
}
void main()
{
read();
char a;
printf( "欢迎使用本图书管理系统!\n ");
printf( "Press any key to continue...\n ");
getch();
while(1)
{
do
{
menu();
printf( "\n输入序号进行操作(输错请重新输入):\n ");
a=getch();
}
while(a <= '0 'a> '9 ');
switch(a)
{
case '1 ':view();
;
break;
case '2 ':add();
break;
case '3 ':g();
break;
case '4 ':del();
break;
case '5 ':sort();
break;
case '6 ':find();
break;
case '7 ':total();
break;
case '8 ':help();
break;
case '9 ':exit(0);
break;
}
}
}
[解决办法]
http://www.pcppc.cn/kaifa/Cyuyan/kaifa_3161_3.html
http://www.pcvz.com/Program/Programs/Clanguage/CSL/Program_53893.html