C语言图书管理系统.docx
- 文档编号:4164031
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:27
- 大小:240.39KB
C语言图书管理系统.docx
《C语言图书管理系统.docx》由会员分享,可在线阅读,更多相关《C语言图书管理系统.docx(27页珍藏版)》请在冰豆网上搜索。
C语言图书管理系统
课程报告
课程名称:
程序设计实践
专业班级:
学生姓名:
学号:
任课教师:
学期:
课程报告任务书
题目
图书信息管理系统
主要
内容
开发一个图书信息管理系统,图书信息包括:
图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。
使之能提供以下基本功能:
(1)图书信息录入功能(图书信息用文件保存)--输入
(2)图书信息浏览功能--输出
(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):
①按书名查询②按作者名查询
按照价钱排序
按出版时间排序等等
(4)图书信息的删除与修改
扩展功能:
可以按照自己的程度进行扩展。
比如
(1)简单的权限处理
(2)报表打印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。
(4)模糊查询(5)综合查询(6)统计功能比如统计处某一类别的图书信息或筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。
任务
要求
一、提交材料应包括:
(1)系统源代码
(2)课程报告
二、整个设计过程具体要求
(1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;
(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)
(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;
(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。
成绩
评定
报告撰写情况(30分)
系统完成情况(30分)
答辩情况(40分)
总分
内容
20分
规范程度
5分
程序测试
5分
基本功能20分
扩展功能10分
自述情况10分
答辩情况
30分
成绩评定教师:
1需求分析
本系统主要用于图书馆管理员的图书管理,主要任务是通过建立图书管理系统,完善学校图书录入以及图书信息的管理,通过查询可立即定位该图书的相应的信息,可以对图书进行录入、查询、浏览、增加、修改、排序等。
通过建立图书管理系统,把图书馆的图书管理、读者管理、图书借阅管理等日常管理工作实行计算机统一管理,以提高工作效率和管理水平。
这些管理包括:
1、图书基本信息的管理,包括增加、修改、查询、预约管理;
2、读者基本信息的管理,包括增加、修改、查询管理;
3、系统管理,主要是维护图书信息和退出系统。
图书管理模块主要用来录入和修改图书的基本信息,图书录入用于首次录入图书信息,输入书名后快速定位图书,然后显示要修改的图书信息进行相应的修改;系统管理模块主要实现管理员的功能,管理员注册自己的账号后,输入正确的密码信息才能登录系统,管理员可以进行系统的维护。
也可以对密码进行修改。
其中处理的数据:
运用结构体、链表处理编号、书名、作者、出版社、图书类型、出版日期、价格、在库状态。
基本包含了图书管理所需的书籍信息,而且基本框架层次分明,条理清晰,可以大大的方便图书的管理操作。
2概要设计
结构体的声明:
structbook{
intnum;
charbname[50];
charwname[20];
charpress[50];
charsort[50];
inttime;
floatprice;
structbook*next;};
定义了一些函数:
structbook*creatbook();//创建链表
structbook*addbook(structbook*head);//添加图书
intyanzheng(structbook*head,intm);//验证新添加的图书编码是否已存在
voiddeletebook(structbook*head);//删除图书
voidfprint(structbook*head);//将链表写入文件
structbook*load();//从文件中读取信息并建成链表
实现函数调用:
利用循环语句while()和选择语句swithch()或if()实现各个子函数的调用,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。
主要实现了图书的建立、插入、查询、删除、存储、修改、保存、查询、筛选、排序等功能。
3详细设计
算法实现的源程序比如:
if(num==0)
break;
else
{printf("请输入图书名:
");
scanf("%s",bname);
getchar();
运用了if的选择语句,以及后面的break语句等,条理清晰,有耳目一新的感觉。
登录模块
intmain(){
intchoice,n,x,y=1,c,c1=123456;
chara,d,b[10],b1[10]="lyq";
structbook*head=NULL;
while(y){
system("cls");
printf("\n\n\n\n\n\n\n");
printf("**********欢迎光临**********\n\n");
printf("**********************图书信息管理系统************************\n\n\n");
printf("\n\n");
printf("============1-用户登录===========\n");
printf("============0-退出系统===========\n");
printf("请输入您的选择:
");
scanf("%d",&n);
printf("\n");
getchar();
switch(n){
case0:
y=0;
break;
case1:
printf("请输入您的用户名:
");
gets(b);
printf("\n");
printf("请输入您的密码:
");
scanf("%d",&c);
printf("\n");
if(strcmp(b,b1)!
=0||c!
=c1){
printf("验证失败,请重新输入!
\n");
scanf("%c",&d);
getchar();
system("cls");}
else{
printf("验证通过!
请按Enter键进入!
\n");
scanf("%c",&d);
getchar();
录入数据并形成链表
structbook*creatbook()
{structbook*head,*tail,*p;
intnum,time,n;
charbname[50],wname[20],press[50],sort[50];
floatprice;
intsize=sizeof(structbook);
head=tail=NULL;
printf("请输入图书编号:
");
scanf("%d",&num);
printf("请输入图书名:
");
scanf("%s",bname);
getchar();
printf("请输入作者名:
");
scanf("%s",wname);
getchar();
printf("请输入出版社:
");
scanf("%s",press);
getchar();
printf("请输入类别:
");
scanf("%s",sort);
getchar();
printf("请输入出版时间:
");
scanf("%d",&time);
getchar();
printf("请输入价格:
");
scanf("%f",&price);
getchar();
while
(1){
p=(structbook*)malloc(size);
p->num=num;
strcpy(p->bname,bname);
strcpy(p->wname,wname);
strcpy(p->press,press);
strcpy(p->sort,sort);
p->time=time;
p->price=price;
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
do{
printf("请输入图书编号:
");
scanf("%d",&num);
n=yanzheng(head,num);
if(n==0)
break;
else
printf("您输入的编号已存在,请重新输入!
\n");
}while
(1);}
returnhead;}
插入结点,并且插入后仍按一定顺序
structbook*addbook(structbook*head)
{structbook*ptr,*p1,*p2,*p;
charbname[50],wname[20],press[50],sort[50];
intsize=sizeof(structbook);
intnum,time,n=1;
floatprice;
do{printf("请输入图书编号:
");
scanf("%d",&num);
n=yanzheng(head,num);
if(n==0)
break;
else
printf("您输入的编号已存在,请重新输入!
\n");
}while
(1);
printf("请输入图书名:
");
scanf("%s",bname);
getchar();
printf("请输入作者名:
");
scanf("%s",wname);
getchar();
printf("请输入出版社:
");
scanf("%s",press);
getchar();
printf("请输入类别:
");
scanf("%s",sort);
getchar();
printf("请输入出版时间:
");
scanf("%d",&time);
getchar();
printf("请输入价格:
");
scanf("%f",&price);
getchar();
p=(structbook*)malloc(size);
p->num=num;
strcpy(p->bname,bname);
strcpy(p->wname,wname);
strcpy(p->press,press);
strcpy(p->sort,sort);
p->time=time;
p->price=price;
p2=head;
ptr=p;
while((ptr->num>p2->num)&&(p2->next!
=NULL)){
p1=p2;
p2=p2->next;}
if(ptr->num<=p2->num){
if(head==p2)
head=ptr;
else{p1->next=ptr;
p->next=p2;}}
else{
p2->next=ptr;
p->next=NULL;}
returnhead;}
验证添加的图书编号是否已存在
intyanzheng(structbook*head,intm)
{structbook*p;
p=head;
while(p!
=NULL){
if(p->num==m)
break;
p=p->next;}
if(p==NULL)
return0;
else
return1;}
将新链表写入文件中
voidfprint(structbook*head)
{FILE*fp;
charch='1';
structbook*p1;
if((fp=fopen("f1.txt","w"))==NULL){
printf("Fileopenerror!
\n");
exit(0);}
fputc(ch,fp);
for(p1=head;p1;p1=p1->next){
fprintf(fp,"%d%s%s%s%s%d%f\n",p1->num,p1->bname,p1->wname,p1->press,p1->sort,p1->time,p1->price);}
fclose(fp);}
从文件中读取图书信息
structbook*load()
{FILE*fp;
charch;
structbook*head,*tail,*p1;
head=tail=NULL;
if((fp=fopen("f1.txt","r"))==NULL){
printf("Fileopenerror!
\n");
exit(0);}
ch=fgetc(fp);
if(ch=='1'){
while(!
feof(fp)){
p1=(structbook*)malloc(sizeof(structbook));fscanf(fp,"%d%s%s%s%s%d%f\n",&p1->num,p1->bname,p1->wname,p1->press,p1->sort,&p1->time,&p1->price);
if(head==NULL)
head=p1;
else
tail->next=p1;
tail=p1;}
tail->next=NULL;
fclose(fp);
returnhead;}
else
returnNULL;}
将整个链表的信息输出
voidprint_book(structbook*head)
{structbook*ptr;
if(head==NULL){
printf("\n没有信息!
\n");
return;}
printf("图书信息列表如下\n");
printf("==========================================================\n");
printf("编号图书名作者名出版社类别出版时间价格\n");
for(ptr=head;ptr;ptr=ptr->next)
printf("%d%s%s%s%s%d%.2f\n",ptr->num,
ptr->bname,ptr->wname,ptr->press,ptr->sort,ptr->time,ptr->price);
printf("==========================================================\n");}
删除图书信息
voiddeletebook(structbook*head)
{inta;
charb,ch='1';
structbook*p1,*p2;
FILE*fp;
printf("请输入要删除的图书编号:
");
scanf("%d",&a);
p1=head;
if(p1->num==a&&p1->next==NULL){//对于文件中只有一组数据
printf("是否清空文件!
(y/n)\n");
getchar();
scanf("%c",&b);
getchar();
switch(b){
case'n':
break;
case'y':
if((fp=fopen("f1.txt","w"))==NULL){
printf("Fileopenerror!
\n");
exit(0);}
fclose(fp);
printf("文件已清空!
\n");}}
else{
while(p1->num!
=a&&p1->next!
=NULL){
p2=p1;
p1=p1->next;}
if(p1->next==NULL){
if(p1->num==a){
p2->next=NULL;
printf("是否确定从文件中彻底删除该图书?
(y/n)\n");
getchar();
scanf("%c",&b);
switch(b){
case'n':
break;
case'y':
fprint(head);
printf("删除成功!
\n");
getchar();
break;}}
else{
printf("没有找到要删除的数据!
\n");
getchar();}}
图书查询
voidchaxun(structbook*head)
{inta;
printf("==========================================================\n");
printf("**1-按图书编号查询2-按图书名查询**\n");
printf("**3-按图书类别查询4-按作者名查询**\n");
printf("**5-按出版时间查询0-退出查询**\n");
printf("==========================================================\n");
printf("请输入所选择的编号:
");
scanf("%d",&a);
getchar();
switch(a){
case0:
break;
case1:
num_chaxun(head);
break;
case2:
bname_chaxun(head);
break;
case3:
sort_chaxun(head);
break;
case4:
wname_chaxun(head);
break;
case5:
time_chaxun(head);
break;
default:
printf("您的输入有误!
\n");
break;}}
按编号查询图书信息
voidnum_chaxun(structbook*head)
{inta;
structbook*p;
printf("请选择您要查询的图书编号:
");
scanf("%d",&a);
getchar();
p=head;
while(p!
=NULL){
if(p->num==a)
break;
p=p->next;}
if(p==NULL){
printf("没有找到该编号的图书!
\n");}
else{printf("你所查询的图书信息如下\n");
printf("=========================================================================\n");
printf("**编号图书名作者名出版社类别出版时间价格**\n");
printf("**%d%s%s%s%s%d%.2f**\n",p->num,
p->bname,p->wname,p->press,p->sort,p->time,p->price);
printf("=========================================================================\n");}}
按图书名查询图书信息
voidbname_chaxun(structbook*head)
{chara[50];
intflag=0;
structbook*p;
printf("请选择您要查询的图书名:
");
gets(a);
p=head;
while(p!
=NULL){
if(strcmp(p->bname,a)==0){
flag=1;
break;}
p=p->next;}
if(flag==0){printf("没有找到该图书名的图书!
\n");}
else{printf("你所查询的图书信息如下\n");
printf("=========================================================================\n");
printf("**编号图书名作者名出版社类别出版时间价格**\n");
while(p!
=NULL){
if(strcmp(p->bname,a)==0){
printf("**%d%s%s%s%s%d%.2f**\n",p->num,
p->bname,p->wname,p->press,p->sort,p->time,p->price);}
p=p->next;}
printf("=========================================================================\n");}}
按作者名查询图书信息
voidwname_chaxun(structbook*head)
{chara[50];
intflag=0;
structbook*p;
printf("请选择您要查询的图书作者名:
");
gets(a);
p=head;
while(p!
=NULL){
if(strcmp(p->wname,a)==0){
flag=1;
break;}
p=p->next;}
if(flag==0){
printf("没有找到该图书名的图书!
\n");}
else{
printf("你所查询的图书信息如下\n");
printf("=========================================================================\n");
printf("**编号图书名
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 图书 管理 系统