C 课设—图书管理系统

该文描述了一个使用C语言编写的图书登记管理程序,通过链表数据结构存储图书信息,实现了添加、删除、查询和修改图书信息的功能,并采用模块化设计,每个功能由单独的函数实现。程序还包括用户友好的菜单交互界面。

一、课程设计与题目要求

图书登记管理程序

问题描述:

设计一个图书登记管理程序,以方便图书管理员管理图书馆内的图书,该程序应该具有以下功能:

(1)从键盘输入某本图书的信息

(2)给定图书的国际标准书号(ISBN),显示该图书的信息。

(3)给定图书的作者,显示所有该作者所著的图书。

(4)给定国际标准书号(ISBN),修改该图书的信息。

(5)给定国际标准书号(ISBN),删除该图书的信息。

题目要求:

(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。

(2)图书信息应该包含国际标准书号、图书名称、图书出版社、图书作者(假设一个作者)、图书价格、出版时间。

(3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。

输入要求:

(1)应用程序运行后在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。程序根据用户输入的信息完成相应的处理,实现要求的功能。

(2)能对输入的数据进行简单的校验,例如,出版时间必须是一个合法的日期格式,际标准书号是唯一的(一个国际标准书号对应一种图书信息)。

输出要求:

(1)应用程序运行后,要在屏幕上显示一个菜单。

(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式以及结束方式等。

(3)在程序完成处理后,要清楚地给出程序的处理结果。例如,在给定国际标准书号删除图书信息时,如果该图书不存在,要提示没能删除,如果删除成功要提示删除成功。

实现要求:

(1)在程序中使用链表存储图书信息。

(2)采用模块化程序设计的方法,将程序中的各项功能用函数实现。

二、程序运行结果

添加图书信息界面

修改图书信息

删除图书信息

按图书编号查找

按作者查找

按出版社查找

查询不存在的图书

三、程序源代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<malloc.h>
#include<windows.h>
//图书信息结构体
typedef struct book
{
char bookid[20];//图书编号
char bookname[50];//图书名
char author[50];//作者姓名
char press[50];//出版社
float price;//图书价格
char time[50];//出版时间
struct book *next;  //定义book类型对象指针
}book;
book* head;//定义头结点
int length;//链表长度
//模块化接口设计
void menu();//菜单函数
void show();//显示图书信息函数
void Add();//添加图书信息函数
void Delete();//删除图书信息函数
void search();//搜索图书信息函数
void modify();//修改图书信息函数
/*
主函数
功能描述:程序的主体
*/
int main(void)
{
int a;
menu();
head=(book*)malloc(sizeof(book));//头结点开辟空间
head->next=NULL;//头指针初始化为空
while(1)
{
printf("请选择相应的功能:");
scanf("%d",&a);
switch(a)
{
case 0:
return 0;
case 1:
if(head!=NULL)
{
show();
menu();
}
break;
case 2:
Add();
menu();
break;
case 3:
if(head)
{
search();
menu();
}
break;
case 4:
if(head)
{
Delete();
menu();
}
break;
case 5:
if(head)
{
modify();
menu();
}
break;
default:
break;
}
}
return 0;
}
//菜单函数
void menu()
{
printf("-------------------------------------\n");
printf("      欢迎进入图书登记管理系统       \n");
printf("           0.退出系统                 \n");
printf("           1.显示图书信息             \n");
printf("           2.添加图书信息             \n");
printf("           3.查询图书信息             \n");
printf("           4.删除图书信息             \n");
printf("           5.修改图书信息             \n");
printf("--------------------------------------\n");
return;
}
//显示函数
void show()
{
book *p=head->next;
if(p==NULL)
{
printf("图书信息为空,请先输入图书信息!\n");
system("pause");
system("cls");
return;
}
printf("所有的图书信息如下:\n");
while(p!=NULL)
{
printf("%s %s %s %s %.2f %s\n",p->bookid,p->bookname,p->author,p->press,p->price,p->time);
p=p->next;
}
system("pause");
system("cls");
return;
}
//添加函数
void Add()
{
book *p1,*p2;
length=0;
p1=head; 
printf("请输入图书的编号,书名,作者姓名,出版社,价格,出版时间:\n");
while(1)
{
p2=(book*)malloc(sizeof(book));//动态申请一个空间,用来存放一个节点,并用临时指针p2指向这个节点
scanf("%s",&p2->bookid);
if(p2->bookid[0]=='0')
{
printf("图书信息输入完成!\n");
system("pause");
break;
}
scanf("%s %s %s %f %s",&p2->bookname,&p2->author,&p2->press,&p2->price,&p2->time);
length++;
p2->next=p1->next;
p1->next=p2;
}
system("cls");
return;
}
//删除函数
void Delete()
{
char num[20];
book *p,*q;
q=head;
p=head->next;
if(p==NULL)
{
printf("图书信息为空,请先输入图书信息!\n");
system("pause");
system("cls");
return;
}
printf("请输入要删除的图书编号:\n");
scanf("%s",&num);
while(p!=NULL)
{
if(strcmp(p->bookid,num)==0)
{
q->next=p->next;//断开q节点
free(p);//释放q节点
length--;
printf("删除成功!\n");
system("pause");
system("cls");
return;
}
//为假时
p=p->next;//p指针后移
q=q->next;//q指针后移
}
if(p==NULL)
{
printf("找不到这本书!\n");
system("pause");
system("cls");
return;
}
}
//搜索函数
void search()
{
int x,flag1=0,flag2=0;
char num[20],name[20],press[20];
book *p=head->next;
if(p==NULL)
{
printf("图书信息为空,请先输入图书信息!\n");
system("pause");
system("cls");
return;
}
printf("1.根据图书编号查找\n");
printf("2.根据作者姓名查找\n");
printf("3.根据出版社查找\n");
printf("请选择功能:\n");
scanf("%d",&x);
if(x==1)
{
printf("需要查找的图书编号为:");
scanf("%s",&num);
while(p!=NULL)
{
if(strcmp(p->bookid,num)==0)
{
printf("图书编号为%s的图书信息:\n",num);
printf("%s %s %s %s %.2f %s\n",p->bookid,p->bookname,p->author,p->press,p->price,p->time);
system("pause");
system("cls");
return;
}
p=p->next;
}
if(p==NULL)
{
printf("查无此书!\n");
}
}
else if(x==2)
{
printf("需要查找的作者姓名为:");
scanf("%s",&name);
while(p!=NULL)
{
if(strcmp(p->author,name)==0)
{
if(flag1==0)
printf("作者为%s的图书信息:\n",name);
flag1=1;
printf("%s %s %s %s %.2f %s\n",p->bookid,p->bookname,p->author,p->press,p->price,p->time);
}
p=p->next;
}
if(flag1==0)
{
printf("查无此作者!\n");
}
}
else if(x==3)
{
printf("需要查找的出版社为:");
scanf("%s",&press);
while(p!=NULL)
{
if(strcmp(p->press,press)==0)
{
if(flag2==0)
printf("出版社为%s的图书信息:\n",press);
flag2=1;
printf("%s %s %s %s %.2f %s\n",p->bookid,p->bookname,p->author,p->press,p->price,p->time);
}
p=p->next;
}
if(flag2==0)
{
printf("查无此出版社!\n");
}
}
system("pause");
system("cls");
return;
}
//修改函数
void modify()
{
char num[20];
book *p;//定义指针
p=head->next;
if(p==NULL)
{
printf("图书信息为空,请先输入图书信息!\n");
system("pause");
system("cls");
return;
}
printf("请输入要修改的图书编号:\n");
scanf("%s",&num);
while(p!=NULL)
{
if(strcmp(p->bookid,num)==0)
{
printf("修改的书籍信息为:\n");
printf("%s %s %s %s %.2f %s\n",p->bookid,p->bookname,p->author,p->press,p->price,p->time);
printf("请输入要修改的书籍信息(图书编号、书名、作者、出版社、价格、出版时间的顺序输入):\n");
scanf("%s %s %s %s %f %s",&p->bookid,&p->bookname,&p->author,&p->press,&p->price,&p->time);
printf("修改成功!\n");
system("pause");
system("cls");
return;
}
//为假时
p=p->next;//指针后移
}
if(p==NULL)
{
printf("找不到这本书!\n");
system("pause");
system("cls");
return;
}
system("cls");
}

#include #include #include typedef struct { char number[10];//书号 char name[20];//书名 char author[20];//作者 char publish[50];//出版社 char time[20];//出版时间 float price; }mbook; typedef struct { int count;//书的本数 mbook book[100];//最大可有100本书 }mlibrary; mlibrary library; void save()//保存图书信息。 { FILE *fp; if((fp=fopen("library.doc","w"))==NULL) { printf("\n不能保存图书信息\n"); return; } fwrite(&library.count,sizeof(int),1,fp); fwrite(library.book,sizeof(library.book[0]),library.count,fp); } void putin() /*定义录入函数*/ { int y=1; system("cls"); while(y) { printf("\t请输入您的书籍的书号:"); scanf("%s",library.book[library.count].number); printf("\t请输入书名:"); scanf("%s",library.book[library.count].name); printf("\t请输入作者名:"); scanf("%s",library.book[library.count].author); printf("\t请输入出版社:"); scanf("%s",library.book[library.count].publish); printf("\t请输入出版时间:"); scanf("%s",library.book[library.count].time); printf("\t请输入该书的价格:"); fflush(stdin); scanf("%f",&library.book[library.count].price); library.count++; printf("\n是否继续录入(1.继续;0,退出录入):"); fflush(stdin); scanf("%d",&y); if (y!=1) { y=0; break; } } save(); } void lookup() { system("cls"); printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n"); int i ; for ( i=0;i<library.count;i++) { printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price); } fflush(stdin); getchar(); } void search_by_name() /*定义按书名查询*/ { char s2[20]; int flag=1; printf("\n请输入要查询的书名: "); fflush(stdin); scanf("%s",s2); printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n"); int i ; for( i=0;i<library.count;i++ ) if(strcmp(s2,library.book[i].name)==0) { flag=0; printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price); } if (flag) { printf("cannot found!"); } fflush(stdin); getchar(); } void search_by_author() /*定义按作者名查询*/ { char s3[20]; int flag=1; printf("请输入要查询的书的作者: "); fflush(stdin); scanf("%s",s3); printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n"); int i ; for( i=0;i<library.count;i++ ) if(strcmp(s3,library.book[i].author)==0) { flag=0; printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price); } if (flag) { printf("cannot found!"); } fflush(stdin); getchar(); } void search() /*定义查询函数*/ { int a; system("cls"); /*进行清屏*/ printf("\t\t******************************\n"); printf("开始查询\n"); printf("\t\t\t1---------------search_by_name\n"); printf("\t\t\t2---------------search_by_writer\n"); printf("\t\t\t0---------------exit\n"); printf("\t\t******************************\n") ; printf("\t\t请选择你想要的查询方式:"); fflush(stdin); scanf("%d",&a); switch(a) { case 1: search_by_name(); break; case 2: search_by_author(); break; case 0: return; } } void del() /*定义删除函数*/ { char number[10]; system("cls"); /*清屏*/ printf("\n Please type in the number of the book you want to delete:"); fflush(stdin); scanf("%s",number); int i; for (i=0;i<library.count;i++) { if(strcmp(number,library.book[i].number)==0)break; } if (i!=library.count) { for(;i<library.count-1;i++) { strcpy(library.book[i].name,library.book[i+1].name); strcpy(library.book[i].number,library.book[i+1].number); strcpy(library.book[i].publish,library.book[i+1].publish); strcpy(library.book[i].author,library.book[i+1].author); strcpy(library.book[i].time,library.book[i+1].time); library.book[i].price=library.book[i+1].price; } library.count--; } else printf("\n cannot found!\n"); save(); fflush(stdin); getchar(); } void update()//修改图书信息 { char number[10]; system("cls"); /*清屏*/ printf("\n Please type in the number of the book you want to delete:"); fflush(stdin); scanf("%s",number); int i; for (i=0;i<library.count;i++) { if(strcmp(number,library.book[i].number)==0) { printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n"); printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price); break; } } if (i!=library.count) { mbook book; printf("\n\t\t请输入修改后此图书的信息\n"); printf("\t请输入图书号:"); scanf("%s",book.number); printf("\t请输入图书名:"); scanf("%s",book.name); printf("\t请输入作者名:"); scanf("%s",book.author); printf("\t请输入出版社:"); scanf("%s",book.publish); printf("\t请输入出版时间:"); scanf("%s",book.time); printf("\t请输入该书的价格:"); fflush(stdin); scanf("%f",&book.price); strcpy(library.book[i].name,book.name); strcpy(library.book[i].number,book.number); strcpy(library.book[i].publish,book.publish); strcpy(library.book[i].author,book.author); strcpy(library.book[i].time,book.time); library.book[i].price=book.price; save(); } else printf("\n cannot found!\n"); fflush(stdin); getchar(); } void main() { FILE *fp; if((fp=fopen("library.doc","r"))==NULL) { printf("\n不能打开图书信息库\n"); fp=fopen("library.doc","w+"); printf("\n初始化图书信息库,初始化之后要重启程序\n"); library.count=0; fwrite(&library.count,sizeof(int),1,fp); fclose(fp); return; } fread(&library.count,sizeof(int),1,fp); fread(library.book,sizeof(library.book[0]),library.count,fp); fclose(fp); int a; do { system("cls"); printf("\n\n\n\n\n\t\t\t\t图书信息管理系统\t\t\t\t\n"); printf("\t\t*********************************************\n"); printf("\t\t\t1 ------------------图书信息录入\n"); printf("\t\t\t2 ------------------图书信息浏览\n"); printf("\t\t\t3 ------------------图书信息查询\n"); printf("\t\t\t4 ------------------图书信息删除\n"); printf("\t\t\t5 ------------------图书信息修改\n"); printf("\t\t\t0 -----------------退出图书信息系统\n"); printf("\t\t*********************************************\n"); printf("\t\tPlease Enter Choose: "); fflush(stdin); scanf("%d",&a); switch(a) { case 1: putin(); break; case 2: lookup(); break; case 3: search(); break; case 4: del(); break; case 5: update(); break; case 0: printf("\n\n退出\n\n"); break; default: printf("\n序号不对\n"); } }while(a!=0); save(); }
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值