#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
#define LL sizeof(BOOK_TYPE)
int maininterface();
void infor_input();
void refer();
void refer_1();
void refer_2();
void modify();
void delete();
void findbook();
void findbook1();
void findbook2();
void devise();
void main()
{
int a=0;
do
{
a=maininterface();
switch(a)
{
case 1:system("CLS");infor_input();break;
case 2:system("CLS");refer();break;
case 3:system("CLS");modify();break;
case 4:system("CLS");delete();break;
case 5:exit(0);
default:system("CLS");printf("\n\n\n\n\t\t\t无此操作,请按任意键返回:\n");getch();system("CLS");
}
}while(a!=6);
}
int maininterface()
{
int n;
printf("\n\n\n\t\t------------欢迎进入图书登记管理系统!-----------\n");
printf("\n\t\t\t\t1:<录入图书信息>\n");
printf("\n\t\t\t\t2:<查询信息>\n");
printf("\n\t\t\t\t3:<修改图书信息>\n");
printf("\n\t\t\t\t4:<删除图书信息>\n");
printf("\n\t\t\t\t5:<退出系统>\n");
printf("\n\t\t\t请输入1--5,其他输入非法!\n");
scanf("%d",&n);
return n;
}
typedef struct
{
int month;
int day;
int year;
}DATES;
DATES day;
typedef struct books
{
char bookname[50];
char ISBN[50];
char author[50];
char publisher[50];
float money;
DATES day;
int count;
struct books *next;
}BOOK_TYPE;
BOOK_TYPE ts;
struct books *head = NULL;
void infor_input()
{
FILE *fp;
int n=0;
BOOK_TYPE ts;
printf("---------------图书资料基本信息录入--------------\n");
do
{
printf("请输入书名\n");
scanf("%s",ts.bookname);
printf("请输入ISBN\n");
scanf("%s",ts.ISBN);
printf("请输入作者\n");
scanf("%s",ts.author);
printf("请输入出版社\n");
scanf("%s",ts.publisher);
printf("请输入定价\n");
scanf("%f",&ts.money);
printf("请输入出版日期\n");
scanf("%d/%d/%d",&ts.day.month,&ts.day.day,&ts.day.year);
printf("请输入数量\n");
scanf("%d",&ts.count);
printf("\n\t\t\t请选择(1:确定\t2:取消\t0:重新输入):");
scanf("%d",&n);
}while(n==0);
if(n==1)
{
if((fp=fopen("book.txt","a"))==NULL) /* 若"book.txt"文件不存在,则以创建方式打开文件 */
{
fp=fopen("book.txt","w+");
}
fwrite(&ts,LL,1,fp); /* 将输入的图书信息写入磁盘文件"book.txt" */
fclose(fp);
}
system("CLS");
printf("输入成功!\n");
printf("请选择(1:返回主界面\t2:输入另一本图书信息\t0:退出系统):\n");
scanf("%d",&n);
switch(n)
{
case 1:system("CLS");break;
case 2:system("CLS");infor_input();break;
case 0:break;
default:printf("无此操作,按任意键返回\n");getch();system("CLS");break;
}
}
void refer()
{
int n;
printf("1:<根据ISBN号,找出图书信息>\n");
printf("2:<根据出版社名称,找出所有图书信息>\n");
printf("3:<根据书名,找出图书信息>\n");
printf("4:<统计书籍总数>\n");
printf("5:<统计书籍总金额和平均价格>\n");
printf("0:<返回>\n");
printf("请输入0--5,其他输入非法!\n");
scanf("%d",&n);
switch(n)
{
case 1:system("CLS");findbook();break;
case 2:system("CLS");findbook1();break;
case 3:system("CLS");findbook2();break;
case 4:system("CLS");refer_1();break;
case 5:system("CLS");refer_2();break;
case 0:system("CLS");break;
default:printf("无此操作\n");break;
}
}
struct books *read_1()
{
FILE *fp;
struct books *p1,*p2,*head;
fp=fopen("book.txt","r");
head=p1=(BOOK_TYPE *)malloc(LL);
fread(p1,LL,1,fp);
while(feof(fp)==0)
{
p2=(BOOK_TYPE *)malloc(LL);
fread(p2,LL,1,fp);
p1->next=p2;
p1=p2;
}
p1->next=NULL;
fclose(fp);
return head;
}
void refer_1()
{
struct books *head,*p,*d;
struct books *read_1();
int total=0;
head=read_1();
for(p=head;p->next!=NULL;d=p,p=p->next,free(d))
{
total=total+p->count;
}
printf("书籍总数:%d\n",total);
printf("按任意键返回");getch();system("CLS");
}
void refer_2()
{
int num=0;
struct books *head,*p1,*p2;
struct books *read_1();
float total=0,average=0;
head=read_1();
for(p1=head;p1->next!=NULL;p2=p1,p1=p1->next,free(p2))
{
num=num+p1->count;
total=total+p1->money*p1->count;
}
average=total/num;
printf("书籍总金额:%.2f\n",total);
printf("书籍平均价格:%.2f\n",average);
printf("按任意键返回");getch();system("CLS");
}
void findbook()
{
FILE *fp;
char ISBN[50];
int i;
fp=fopen("book.txt","r");
printf("请输入书的ISBN号\n");
scanf("%s",ISBN);
for(i=0;fread(&ts,LL,1,fp)!=0;i++)
{
if(strcmp(ISBN,ts.ISBN)==0)
printf("这本书的详细资料为:%s %s %s %s %f %d/%d/%d %d\n按任意键返回\n",ts.bookname,ts.ISBN,ts.author,ts.publisher,ts.money,ts.day.month,ts.day.day,ts.day.year,ts.count);
}
printf("没有你所需要的书籍");
fclose(fp);
}
void findbook1()
{
FILE *fp;
char publisher[50];
int i;
fp=fopen("book.txt","r");
printf("请输入书的publisher\n");
scanf("%s",publisher);
for(i=0;fread(&ts,LL,1,fp)!=0;i++)
{
if(strcmp(publisher,ts.publisher)==0)
printf("这本书的详细资料为:%s %s %s %s %f %d/%d/%d %d\n按任意键返回\n",ts.bookname,ts.ISBN,ts.author,ts.publisher,ts.money,ts.day.month,ts.day.day,ts.day.year,ts.count);
}
printf("没有你所需要的书籍");
fclose(fp);
}
void findbook2()
{
FILE *fp;
char bookname[50];
int i;
fp=fopen("book.txt","r");
printf("请输入书的bookname\n");
scanf("%s",bookname);
for(i=0;fread(&ts,LL,1,fp)!=0;i++)
{
if(strcmp(bookname,ts.bookname)==0)
printf("这本书的详细资料为:%s %s %s %s %f %d/%d/%d %d\n按任意键返回\n",ts.bookname,ts.ISBN,ts.author,ts.publisher,ts.money,ts.day.month,ts.day.day,ts.day.year,ts.count);
}
printf("没有你所需要的书籍");
fclose(fp);
}
void delete()
{
struct books *p1, *p2;
char ISBN[50];
int e=0;
if(head == NULL)
{
printf("无书籍记录");
return;
}
printf("请输入您要删除的书籍的ISBN:\n");
scanf("%s",ISBN);
p1 = head;
while(ISBN != p1->ISBN && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(ISBN == p1->ISBN)
{
if(p1 == head)
head = p1->next;
else p2->next = p1->next;
free(p1);
e--;
}
else
printf("没有该书籍记录,请核对!\n");
}
void modify()
{
struct books *p1, *p2;
char ISBN[50];
if(head == NULL)
{
printf("无书籍记录!\n");
return;
}
printf("请输入您要修改的书籍的ISBN\n:");
scanf("%s",ISBN);
p1 = head;
while(ISBN != p1->ISBN && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(ISBN == p1->ISBN)
devise(p1);
else
printf("没有该学生记录,请核对!\n");
}
void devise(struct books *p)
{
int choice;
choice = -1;
do
{
printf("请选择您要修改的书籍的信息内容:\n");
printf("+----------------------+\n");
printf("| 书名 请按 1 |\n");
printf("| ISBN 请按 2 |\n");
printf("| 作者 请按 3 |\n");
printf("|出版社请按 4 |\n");
printf("| 定价 请按 5 |\n");
printf("| 出版日期 请按 6 |\n");
printf("| 数量 请按 7 |\n");
printf("| 取消 请按 0 |\n");
printf("+----------------------+\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch(choice)
{
case 0:
return;
case 1:
printf("请输入新书名 :");
scanf("%s", p->bookname);
break;
case 2:
printf("请输入新ISBN:");
scanf("%s", &p->ISBN);
break;
case 3:
printf("请输入新作者:");
scanf("%s", p->author);
break;
case 4:
printf("请输入新出版社:");
scanf("%s", p->publisher);
break;
case 5:
printf("请输入新定价:");
scanf("%d", p->money);
break;
case 6:
printf("请输入新出版日期 :");
scanf("%ld", &p->day.month,day.day,day.year);
break;
case 7:
printf("请输入新数量:");
scanf("%s", p->count);
break;
default:
printf("\n无效选项!");
break;
}
}
while(choice != 0);
}
温馨提示:内容为网友见解,仅供参考