C语言图书管理系统.docx

上传人:b****5 文档编号:4164031 上传时间:2022-11-28 格式:DOCX 页数:27 大小:240.39KB
下载 相关 举报
C语言图书管理系统.docx_第1页
第1页 / 共27页
C语言图书管理系统.docx_第2页
第2页 / 共27页
C语言图书管理系统.docx_第3页
第3页 / 共27页
C语言图书管理系统.docx_第4页
第4页 / 共27页
C语言图书管理系统.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C语言图书管理系统.docx

《C语言图书管理系统.docx》由会员分享,可在线阅读,更多相关《C语言图书管理系统.docx(27页珍藏版)》请在冰豆网上搜索。

C语言图书管理系统.docx

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("**编号图书名

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1