#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
typedef struct //定义数据类型
{
char ISBN[10]; //书号
char book[30]; //书名
char author[20]; //作者
int edition; //版本号
char press[50]; //出版社名
int year; //年份
}Bookinfo;
int Input(Bookinfo dictList[],int n) // 从键盘输入若干条记录,依次存放到结构体数组dictList中,返回最后的记录数
{
int m,i; //m:要输入的本数,i循环控制量
printf("请输入要输入图书的本数\n");
scanf("%d",&m);
getchar();
printf("\n");
for(i=0;i<m;i++)
{
printf("请输入第%d本:\n",i+1);
printf("书号:");
gets(dictList[n+i].ISBN);
printf("书名:");
gets(dictList[n+i].book);
printf("作者:");
gets(dictList[n+i].author);
printf("版本号:");
scanf("%d",&dictList[n+i].edition);
getchar();
printf("出版社名:");
gets(dictList[n+i].press);
printf("出版年份:");
scanf("%d",&dictList[n+i].year);
getchar();
printf("\n");
}
printf("输入完毕!请继续:");
return (n+m); //返回总的图书本数
}
void Display(Bookinfo dictList[],int n) //显示所有图书信息,每10本暂停一次
{
int i,js=1; //js:计数,统计已经输出的本数
char zt;
printf("书号 书名 作者 版本号 出版社 出版年份\n");
printf("---------------------------------------------------------------------\n");
printf("\n");
for(i=0;i<n;i++,js++)
{
printf("%-8s",dictList[i].ISBN);
printf("%-15s",dictList[i].book);
printf("%-13s",dictList[i].author);
printf("第%3d版 ",dictList[i].edition);
printf("%-14s",dictList[i].press);
printf("%d\n",dictList[i].year);
if((++js)%10==0) //每输出十本换行
{
printf("任意键,继续输出");
zt=getchar();
}
}
printf("输出完毕!请继续:");
}
int Delete(Bookinfo dictList[],int n,char *book) //删除某一本书
{
int i,j,t;
char del[10],c,*zj; //del删除的目标书号
printf("请选择书号:");
gets(del);
for(i=0;i<n;i++)
{
for(j=0,zj=book;j<30 && dictList[i].book[j]!='\0';j++,zj++)
{
if(dictList[i].book[j]==*zj) t=1;
else {t=0;j=30;}
}
if(t==1)
{
for(j=0;j<10 && dictList[i].ISBN[j]!='\0';j++)
{
if(dictList[i].ISBN[j]==del[j]) t=1;
else {t=0;j=10;}
}
printf("确定删除,请按回车键!");
c=getchar();
if(c!='\n') t=0;
if(t==1)
{
for(;i<n-1;i++)
{
dictList[i]=dictList[i+1];
}
}
}
}
printf("成功删除");
return n-1;
}
int Delete_a_record(Bookinfo dictList[],int n)
{
int i,t,p;
char sm[30],*book; //sm:书名,待删除书名
printf("请输入待删除书本的名字:");
getchar();
gets(sm);
book=&sm[0];
for(i=0;i<n;i++)
{
for(p=0;p<30 && dictList[i].book[p]!='\0';p++)
{
if(dictList[i].book[p]==sm[p]) t=1;
else {t=0;p=30;}
}
if(t==1)
{
printf("书号 书名\n");
printf("____________\n");
printf("%-8s",dictList[i].ISBN);
printf("%-8s\n",dictList[i].book);
}
}
n=Delete(dictList,n,book);
return n;
}
void Sort_by_name(Bookinfo dictList[],int n) //数组按书名升序排列
{
int i,j,p,bj;
Bookinfo ls;
for(i=0;i<n-1;i++)
{
p=i;
for(j=i+1;j<n;j++)
{
bj=strcmp(dictList[i].book,dictList[j].book);
if(bj>0) p=j;
}
if(p!=i)
{
ls=dictList[i];
dictList[i]=dictList[p];
dictList[p]=ls;
}
}
printf("排序完成\n");
}
int Insert(Bookinfo dictList[],int n,Bookinfo *s) //有序插入
{
int i,j,p;
for(i=0;i<=n;i++)
{
p=strcmp(dictList[i].book,(*s).book);
if(i=n)
{
dictList[i]=*s;
i=n+1;
j=n+1;
}
if(p>0)
{
for(j=n;j>i;j--) dictList[j]=dictList[j-1];
dictList[i]=*s;
i=n+1;
}
}
return(n+1);
}
int Insert_a_record(Bookinfo dictList[ ],int n) //有序插入
{
Bookinfo mmp,*s;
s=&mmp;
getchar();
printf("书号:");
gets(mmp.ISBN);
printf("书名:");
gets(mmp.book);
printf("作者:");
gets(mmp.author);
printf("版本号:");
scanf("%d",&mmp.edition);
getchar();
printf("出版社名:");
gets(mmp.press);
printf("出版年份:");
scanf("%d",&mmp.year);
getchar();
n=Insert(dictList,n,s);
Sort_by_name(dictList,n);
printf("插入成功");
return n;
}
int Query(Bookinfo dictList[],int n,Bookinfo *book) //查找并显示书名为book的所有记录,查找成功返回该书记录个数,失败则返回-1
{
int i,p,t,m=0;
for(i=0;i<n;i++)
{
for(p=0;p<30 && dictList[i].book[p]!='\0';p++)
{
if(dictList[i].book[p]==(*book).book[p]) t=1;
else {t=0;p=30;}
}
if(t==1)
{
printf("书号 书名 作者 版本号 出版社 出版年\n");
printf("__________________________________________________\n");
printf("%-8s",dictList[i].ISBN);
printf("%-8s",dictList[i].book);
printf("%-8s",dictList[i].author);
printf("第%3d版 ",dictList[i].edition);
printf("%-8s",dictList[i].press);
printf("%d\n",dictList[i].year);
m=m+1;
}
}
return m;
}
void Query_a_record(Bookinfo dictList[],int n) //输入待查书名
{
Bookinfo cz,*czz;
int a,i;
czz=&cz;
printf("请输入要查找的书名:");
getchar();
gets(cz.book);
a=Query(dictList,n,czz);
if(a>0)
printf("找到了%d本名为%s的书!",a,cz.book);
else
printf("没有找到名称为%s的书",cz.book);
}
void WritetoText(Bookinfo dictList[],int n,char *filename) //将记录写到文件里
{
int i;
FILE *fp;
fp=fopen(filename,"w");
if(fp==NULL)
{
printf("不能打开文件\n");
exit(1);
}
fprintf(fp,"%d\n",n);
fprintf(fp,"书号 书名 作者 版本号 出版社 出版年份\n");
fprintf(fp,"--------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
fprintf(fp,"%-8s",dictList[i].ISBN);
fprintf(fp,"%-15s",dictList[i].book);
fprintf(fp,"%-8s",dictList[i].author);
fprintf(fp,"第%3d版 ",dictList[i].edition);
fprintf(fp,"%-15s",dictList[i].press);
fprintf(fp,"%d\n",dictList[i].year);
}
printf("成功记录到文件!");
}
int AddfromText(Bookinfo dictList[],int n,char *filename) //从文件中导入数据
{
int i;
Bookinfo s;
FILE *p;
system("cls");
p=fopen(filename,"r");
fscanf(p,"%d",&i);
while(i--)
{
fscanf(p,"%s%s%s%d%s%d\n",s.ISBN,s.book,s.author,&s.edition,s.press,&s.year);
n=Insert(dictList,n,&s);
}
fclose(p);
printf("成功输入\n");
return(n);
}
void Display_main_menu() //显示主菜单
{
system("cls"); //清屏
printf(" Menu\n");
printf("_____________________________________\n");
printf("1. Input Records\n");
printf("2. Display All Records\n");
printf("3. Delete A Recrod\n");
printf("4. Sort\n");
printf("5. Insort A Record\n");
printf("6. Query\n");
printf("7. Add Rrcords From A Text File\n");
printf("8. Write To A Text File\n");
printf("9. Correct a record\n");
printf("0. Quit\n");
printf("______________________________________\n");
printf("Give Your Choice:");
}
void Correct(Bookinfo dictList[],int n) //显示所有记录,并对其中某一个进行修改
{
char xg[30];
int i,bj,m;
Display(dictList,n);
system("pause");
printf("请输入所要修改图书记录的书号:\n");
scanf("%s",xg);
for(i=0;i<n;i++)
{
bj=strcmp(dictList[i].ISBN,xg);
if(bj==0) break;
}
printf("所要修改对象信息如下:\n");
printf("书号 书名 作者 版本号 出版社 出版年份\n");
printf("--------------------------------------------------------------\n");
printf("%-7s",dictList[i].ISBN);
printf("%-16s",dictList[i].book);
printf("%-8s",dictList[i].author);
printf("第%3d版 ",dictList[i].edition);
printf("%-14s",dictList[i].press);
printf("%d\n",dictList[i].year);
printf("请输入所要修改对内容的序号\n");
printf("1.书号\n2.书名\n3.作者4.版本号\n5.出版社\n6.出版年份\n");
scanf("%d",&m);
switch (m)
{
case 1:
{
printf("书号:");
scanf("%s",dictList[i].ISBN);
break;
}
case 2:
{
printf("书名:");
scanf("%s",dictList[i].book);
break;
}
case 3:
{
printf("作者:");
scanf("%s",dictList[i].author);
break;
}
case 4:
{
printf("版本号:");
scanf("%d",&dictList[i].edition);
getchar();
break;
}
case 5:
{
printf("出版社:");
scanf("%s",dictList[i].press);
break;
}
case 6:
{
printf("出版年份:");
scanf("%d",&dictList[i].year);
getchar();
break;
}
}
}
void main()
{
int n=0;
char i;
Bookinfo dictList[50];
for(;;)
{
Display_main_menu();
scanf("%c",&i);
switch(i-'0')
{
case 1:
{
n=Input(dictList,n);
system("pause");
break;
}
case 2:
{
Display(dictList,n);
system("pause");
break;
}
case 3:
{
n=Delete_a_record(dictList,n);
system("pause");
break;
}
case 4:
{
Sort_by_name(dictList,n);
system("pause");
break;
}
case 5:
{
n=Insert_a_record(dictList,n);
system("pause");
break;
}
case 6:
{
Query_a_record(dictList,n);
system("pause");
break;
}
case 7:
{
char *filename,s[30];
printf("请输入文件名\n");
scanf("%s",s);
filename=s;
n=AddfromText(dictList,n,filename);
system("pause");
break;
}
case 8:
{
char *filename,s[30];
printf("请输入文件名\n");
scanf("%s",s);
filename=s;
WritetoText(dictList,n,filename);
system("pause");
break;
}
case 9:
{
Correct(dictList,n);
system("pause");
break;
}
case 0:
{
printf("Goodbye!\n");
system("pause");
exit(0);
}
}
}
}
C语言课设代码补充---图书馆书籍管理
最新推荐文章于 2020-11-23 18:06:42 发布