C语言《图书借阅管理系统》课程设计报告.docx

上传人:b****3 文档编号:27053396 上传时间:2023-06-26 格式:DOCX 页数:32 大小:281.91KB
下载 相关 举报
C语言《图书借阅管理系统》课程设计报告.docx_第1页
第1页 / 共32页
C语言《图书借阅管理系统》课程设计报告.docx_第2页
第2页 / 共32页
C语言《图书借阅管理系统》课程设计报告.docx_第3页
第3页 / 共32页
C语言《图书借阅管理系统》课程设计报告.docx_第4页
第4页 / 共32页
C语言《图书借阅管理系统》课程设计报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

C语言《图书借阅管理系统》课程设计报告.docx

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

C语言《图书借阅管理系统》课程设计报告.docx

C语言《图书借阅管理系统》课程设计报告

课程设计报告

课程名称C语言程序设计

课题名称图书借阅管理系统

专业网络工程

班级1002班

学号4

姓名

指导教师唐北平、陈淑红、谭小兰

2011年6月20日

 

湖南工程学院

课程设计任务书

 

课程名称C语言程序设计

课题图书借阅管理系统

 

专业班级网络工程1002班

学生姓名

学号4

指导老师唐北平、陈淑红、谭小兰

审批

 

任务书下达日期2011年6月20日

任务完成日期2011年7月03日

 

一、设计内容与设计要求

1.设计内容:

对一个有N本图书的图书馆,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。

(1)、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:

书号、书名、作者、出版社、出版日期、单价、是否借出等。

(2)、本系统显示这样的菜单:

a.图书基本信息录入

b.图书基本信息显示

c.图书基本信息删除

d.图书基本信息修改

e.图书基本信息查询(按书号查询、书名等)

g.退出系统

(3)、执行一个具体的功能之后,程序将重新显示菜单。

2.设计要求:

掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理经验。

1.设计正确,方案合理。

2.界面友好,使用方便。

3.程序精炼,结构清晰。

4.设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。

5.上机演示。

6.按学号顺序选课题号,并在规定的时间内独自完成相关课题的C源程序编写、调整和运行。

源程序及编译生成各文件均保存在软盘中;

7.按本任务书的要求,按附录的要求编写《课程设计报告》(Word文档格式)。

并用A4的复印纸打印并装订;

二、进度安排

第十八周星期18时00分——11时30分

星期214时00分——18时15分

星期38时00分——11时30分

星期48时00分——11时30分

第十九周星期18时00分——11时30分

星期214时00分——18时15分

 

三、课程设计报告

1.程序设计准备

做系统前,首先,自己详细看了《C程序设计》(教科书),基本自学会了文件的相关内容,理解了相关函数的用法和作用;另,上网查询了很多相关资料,还有找了很多相关的系统,都详细的看了一遍,加深了对C的理解以及对文件的相关内容进一步理解。

学习了C语言的内容,图书信息管理系统有助于C语言学习的进一步巩固,在本系统可以增强对指针、文件、函数、结构体变量等基本知识的进一步理解。

另外图书信息管理系统也是学校常用的基本系统之一,它有助于学校对图书馆书籍的基本管理。

2.程序设计说明

根据题目要求,应当把图书信息用结构体形式输入,再定义一个全局变量和文件指针进行整个程序的运行,然后把图书信息送到文件中去,所以应该提供下个结构体和文件的输入等操作:

在程序中需要实现图书信息录入,浏览,查询,删除和修改等功能的操作,所以需要建立相应的模块来实现:

另外还需提供选择菜单实现功能,在运行时达到所要求的目的。

3.程序的主要功能

图书管理在生活中运用非常广泛,因此需要用许多的程序来对它们进行管理。

图书借阅管理系统是对图书信息的基本管理,它包括:

图书信息的录入、图书信息的显示、图书信息的删除、图书信息的修改、图书信息的查询。

通过编译一个C语言函数,其中包含一个主函数,多个子函数,主函数调用其余的子函数实现人们能够简易、快捷的了解并找到自己所学要的信息的功能。

1、图书基本信息录入:

对新到图书馆的图书的信息(编号、书名、出版社、作者、价格)进行录入。

2、图书基本信息显示:

显示已被录入图书的所有信息。

3、图书基本信息删除:

通过输入书名,判断此图书是否存在,若存在,则删除该图书所有信息,若不存在则提示用户重新输入图书书名。

4、图书基本信息修改:

通过输入书名,判断此图书是否存在,若不存在则提示用户重新输入图书书名,若存在,则可对图书各项信息进行修改。

5、图书基本信息查询:

将所有图书信息包括编号、书名、出版社、作者、价格等显示在屏幕上。

6、退出系统:

即退出图书借阅管理系统。

使用模块化编程的方法每项功能有一个或多个函数组合来完成,其中菜单选项模块对应如下:

图书基本信息录入==>voidinsert()

图书基本信息显示==>voidprint()

图书基本信息删除==>voiddel()

图书基本信息修改==>voidmodify()

图书基本信息查询==>voidfind()

这份代码中各个变量的定义如下:

num图书编号

name书名

author作者

pub出版社

where出版日期

count单价

 

四.功能模块的划分

1.主函数模块

根据图书馆信息管理系统的要求,可设计一个主函数,及定义多个用户自定义函数。

在主函数中定义全局变量,即是在函数外部定义的变量,其不属于某一个函数,而属于一个源程序文件,在整个程序内可以多次被引用。

2.图书基本信息显示模块

当用户选择图书基本信息显示时,程序会将所有图书信息列出。

3.图书基本信息输入模块

在程序开始运行,创建文件库时,调动此模块,提示用户输入新的图书编号(编号为0时结束输入),然后继续输入图书书名,作者,出版社,出版日期,单价等信息。

结束输入时提示用户图书输入完成

4.图书基本信息查询模块

用户先选择图书查询方式(按书名查找或按书号查找)输入图书书名或书号后,查找出该图书是否存在,若存在,则显示该图书信息,若不存在则提示用户无此图书信息。

5.图书基本信息删除模块

用户输入所要删除的图书书名,先查找该图书是否存在,若存在,则删除该图书所有信息,若不存在则提示无此图书信息。

6.图书基本信息录入模块

首先输入图书录入的编号(不为0)判断是否有重复的编号,若有,则提示用户该书已存在,若无则继续录入书名、作者、出版社、单价。

 

7.图书基本信息修改模块

用户输入要修改的书名,判断该书是否存在,若不存在,则提示用户无此图书信息;若存在,则提示用户选择修改项目,然后提示用户图书信息修改完成。

8.读文件模块

在运行该程序时,程序会自动检测是否存在图书信息,若存在,则会显示图书信息,若不存在,则会提示用户创建文件库,录入图书信息。

9.文件保存模块

当用户对图书信息有录入,修改,删除等操作时,程序会自动保存操作和新的图书信息。

五.主要功能的实现

程序运行流程:

但每个模块运行完即会回到主函数,然后选择其他或退出。

六.程序调试

1.第一次运行程序时,库文件不存在图书信息,于是录入图书信息。

图书编号

书名

作者

出版社

出版日期

单价

1

英语

张三

人民教育出版社

2011.06

30

 

2.主界面。

3.在主界面选择1,开始录入新的图书信息。

图书编号

书名

作者

出版社

出版日期

单价

2

数学

李四

高等教育出版社

2011.06

28

 

4.在主界面选择2,查询图书信息,按1或2分别选择按书名或书号查询。

(以《英语》为例)

选择2,按书号查找,输入书号:

1,即可查询图书《英语》所有信息。

选择1,按书名查找,输入书名:

英语,即可获得图书《英语》所有信息。

 

5.在主界面选择3,对图书资料进行删除(以《数学》为例),在后续图书信息显示时无《数学》图书信息。

 

6.在主界面选择4,对图书进行修改(以《英语》为例,修改图书作者,将作者更换为王五),在后续图书基本信息显示时,作者不将是张三,而是王五。

7.在主界面选择5,图书基本信息显示,此时图书信息经过删除和修改,和初始信息不同。

 

七.总结

通过为期一周的课程设计,对《C语言》这门课程有了更深一步的了解。

它是计算机程序设计的重要理论技术基础,在我们网络工程专业的学习中占据着十分重要的地位。

自己C语言编程的能力有了提高,特别是在文件、指针、数组、函数和结构体方面有了很大提高,另外还学习了课本没有讲到的知识,学会了使用模块化编程的简单方法,另外在对话框的编程要求美观、方面也有了体会。

循环是C语言的重要方法,也是本程序的灵魂,它在本程序中既有“穿针引线”的作用,也起到了对数据进行分析、存贮、读取等重要的作用,本程序在使用循环过程中对循环进行了多方法的应用也是一个“亮点”,它使程序变得结构合理,通俗易懂,也降低了程序的难度。

以后要对这种方法进行深刻的体会。

数组在程序中有着很重要的作用,对数据的贮存、输入、读取起着很重要的作用,本程序几乎所有数据都以数组进行输入、贮存、读取方便了对数据的处理和输入,数组的的使用在本程序中有很大的好处。

函数是实现模块化编程的基础,它使程序变得方面易懂,对修改起了很大作用,降低了编程的难度,一个函数就是一个功能,它使各个功能之间有了一定的独立性,但也有了一定的联系性,一个函数的错误,不会导致整个程序的失败(主函数除外),对函数的良好应用时在本程序中又以深刻的体会,有了很大提高。

结构体的使用,为本程序提供了很大方便,也提高了程序的可读性,结构数组方便了对数据的管理。

这个程序的结构大体是从网络上借鉴的,但是大部分功能模块与任务要求不同,只能自己修改,最后终于调试通过,同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。

因为我们学习知识就是为了实践。

而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。

同时提高了自己对编程的兴趣,使自己对编程有了更深的理解,体会到编程的乐趣。

 

八.附件

原代码清单及注释

#include

#include

#include

#include

#defineNsizeof(structbook)

#definePT"%-5d%10s%6s%6s%8s%3d\n",p->num,p->name,p->author,p->pub,p->where,p->count

structbook/*图书信息*/

{

intnum;/*书号*/

charname[10];/*书名*/

charwhere[10];/*出版日期*/

charauthor[15];/*作者*/

charpub[20];/*出版社*/

intcount;/*单价*/

structbook*next;

};

voidfind1(structbook*p0);

voidfind2(structbook*p0);

/*输出模块*/

voidprint(structbook*p0)

{

structbook*p;

system("cls");

p=p0->next;

printf("\n\n^^^^^^^^^^^^^^^^图书信息表^^^^^^^^^^^^^^^^");

printf("\n\n图书编号----图书名称---作者------出版社--------出版日期---单价\n\n");

while(p!

=NULL)

{

printf(PT);

p=p->next;

}

getch();//输入任意值返回

system("cls");

}

/*输入模块*/

structbook*creat()

{

structbook*head,*p1,*p2;

inti=0;

head=p2=(structbook*)malloc(N);//分配新的内存给p2

head->next=NULL;

printf("\n\n\t\t录入图书信息");

printf("\n---------------------------------------------");

while

(1)

{p1=(structbook*)malloc(N);

printf("\n请输入图书编号(书号0为结束):

");

scanf("%d",&p1->num);

if(p1->num!

=0)

{

printf("\n\n书名作者出版社出版日期单价\n\n\n");

scanf("%s%s%s%s%d",p1->name,p1->author,p1->pub,p1->where,&p1->count);

p2->next=p1;

p2=p1;

i++;

}

else

break;

}

p2->next=NULL;

free(p1);

printf("\n---------------------------------------------");

printf("\n\t\t%d种书录入完毕",i);

getch();

system("cls");

returnhead;

}

/*查找模块*/

voidfind(structbook*p0)

{

intv;

system("cls");

printf("1.按书名查找\n\n\n");

printf("2.按书号查找\n");

scanf("%d",&v);

switch(v)

{

case1:

find1(p0);break;

case2:

find2(p0);break;

default:

;

}

}

voidfind1(structbook*p0)

{

system("cls");

charname[10];

intflag=1;

structbook*p;

p=p0->next;

printf("请输入要查找的书名:

\n");

scanf("%s",&name);

for(p=p0;p;p=p->next)

if(strcmp(p->name,name)==0)

{

printf("\n\n图书编号----图书名称---作者------出版社--------出版日期---单价\n\n");

printf(PT);

flag=0;

break;

}

if(flag)printf("\n暂无此图书信息\n");//当flag=1时执行

getch();

}

voidfind2(structbook*p0)

{

system("cls");

intnum;

intflag=1;

structbook*p;

p=p0->next;

printf("请输入要查找的书号:

\n");

scanf("%d",&num);

for(p=p0;p;p=p->next)

if(p->num==num)

{

printf("\n\n图书编号----图书名称---作者------出版社--------出版日期---单价\n\n");

printf(PT);

flag=0;

break;

}

if(flag)printf("\n暂无此图书信息\n");

getch();

}

/*删除模块*/

voiddel(structbook*p0)

{

system("cls");

charname[10];

intflag=1;

structbook*p;

p=p0;

printf("请输入要删除的书名:

\n");

scanf("%s",name);

while(p!

=NULL)

{

if(strcmp(p->name,name)==0)

{

p0->next=p->next;//后续结点连接到前驱结点之后

free(p);

printf("\t该书资料已删除.");

flag=0;

break;

}

p0=p;

p=p->next;

}

if(flag)printf("\n\t无此图书信息。

");

getch();

system("cls");

}

/*录入模块*/

voidinsert(structbook*p0)

{

structbook*p;

system("cls");

p=(structbook*)malloc(N);

while

(1)

{

printf("\n请输入要录入的图书编号(书号0为退出):

");

scanf("%d",&p->num);

if(p->num!

=0)

{

if(p0->next!

=NULL&&p0->next->num==p->num)//找到重号

{

p=p->next;

free(p);

printf("\t该书已存在");

}

else

{printf("\n\n书名作者出版社出版日期单价\n\n\n");

scanf("%s%s%s%s%d",p->name,p->author,p->pub,p->where,&p->count);

p->next=p0->next;

p0->next=p;

printf("\t已成功录入.");

}

}

else

break;

}

getch();

system("cls");

}

/*修改模块*/

voidmodify(structbook*p0)

{

system("cls");

charname[10];

intflag=1;

intchoice;

structbook*p;

p=p0->next;

printf("请输入要修改的书名:

\n\n");

scanf("%s",name);

while(p!

=NULL&&flag==1)

{

if(strcmp(p->name,name)==0)

{

printf("\n\t请选择要修改的项:

");

printf("\n\t1.修改图书编号\n");

printf("\n\t2.修改图书出版日期\n");

printf("\n\t3.修改图书作者\n");

printf("\n\t4.修改图书出版社\n");

printf("\n\t5.修改图书单价\n");

scanf("%d",&choice);

switch(choice)

{

case1:

{printf("\n请输入新的图书编号:

");

scanf("%d",p->num);break;

}

case2:

{printf("\n请输入新的图书出版日期:

");

scanf("%s",p->where);break;

}

case3:

{printf("\n请输入新的图书作者:

");

scanf("%s",p->author);break;

}

case4:

{printf("\n请输入新的图书出版社:

");

scanf("%s",p->pub);break;

}

case5:

{printf("\n请输入新的图书单价:

");

scanf("%d",p->count);break;

}

}

printf("\n\t该项已成功修改。

\n\t新的图书信息:

");

printf("\n\n图书编号----图书名称---作者------出版社--------出版日期---单价\n\n");

printf(PT);

flag=0;

}

p0=p;

p=p0->next;

}

if(flag)printf("\n\t暂无此图书信息。

");

getch();

system("cls");

}

/*读文件*/

structbook*read_file()

{

inti=0;

structbook*p,*p1,*head=NULL;

FILE*fp;

if((fp=fopen("library.txt","rb"))==NULL)//以只读的方式打开文件

{printf("\n\n\t********库文件不存在,请创建!

**********");

getch();

returnNULL;

}

head=(structbook*)malloc(N);

p1=head;

head->next=NULL;

printf("\n已有图书信息:

");

printf("\n\n图书编号----图书名称---作者------出版社--------出版日期---单价\n\n");

while(!

feof(fp))

{

p=(structbook*)malloc(N);

while(fscanf(fp,"%d%s%s%s%s%d",&p->num,p->name,p->author,p->pub,p->where,&p->count)!

=EOF)

{

printf(PT);

i++;

}

p1->next=p;

p1=p;

}

p1->next=NULL;

fclose(fp);

printf("\n共种%d图书信息",i);

printf("\n\n\n文件中的信息以正确读出。

按任意键返回。

");

getch();

system("cls");

return(head);

}

/*保存文件*/

voidsave(structbook*head)

{

FILE*fp;

structbook*p;

fp=fopen("library.txt","wb");//以只写方式打开二进制文件

if(fp==NULL)//打开文件失败

{

printf("\n=====>打开文件失败!

\n");

getch();

return;

}

else

for(p=head->next;p!

=NULL;p=p->next)

fprintf(fp,"%d%s%s%s%s%d\n",p->num,p->name,p->author,p->pub,p->where,p->count);

fclose(fp);

printf("\n\t保存文件成功!

\n");

}

voidmain()

{

structbook*head=NULL;

intchoice=1;

head=read_file();

if(head==NULL)

{

printf("\n\t\t********************");

getch();

head=creat();

}

do

{

s

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

当前位置:首页 > 高中教育 > 英语

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

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