c语言图书管理系统课程设计报告.docx

上传人:b****6 文档编号:4295798 上传时间:2022-11-29 格式:DOCX 页数:39 大小:405.34KB
下载 相关 举报
c语言图书管理系统课程设计报告.docx_第1页
第1页 / 共39页
c语言图书管理系统课程设计报告.docx_第2页
第2页 / 共39页
c语言图书管理系统课程设计报告.docx_第3页
第3页 / 共39页
c语言图书管理系统课程设计报告.docx_第4页
第4页 / 共39页
c语言图书管理系统课程设计报告.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

c语言图书管理系统课程设计报告.docx

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

c语言图书管理系统课程设计报告.docx

c语言图书管理系统课程设计报告

 

C语言课程设计报告

2011~2012学年第2学期

 

课程:

C语言课程设计

课程设计名称:

图书管理系统

 

2012年05月04日

 

一、需求分析

为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。

使用c语言编写了图书此管理系统。

本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。

实现了图书馆内管理的几乎所有功能,包括查询、添加、删除、修改图书信息,以及对图书信息的存档、读取、排序。

所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的处理用户使用过程中可能出现的异常情况。

图书信息包括作者名、书名、出版社、出版时间、图书编号、价格、借书人姓名、借书人性别、借书人学号。

图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。

整个程序实现链表操作,对图书信息的操作逐个地进行。

二、算法设计:

1.设计思想:

整个系统制造的而过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。

进一步加深、巩固了所学的专业的基本理论知识,培养了综合分析问题、解决问题的能力。

在设计程序时,实现了程序的模块化、结构化。

在主函数中调用各种子函数,操作界面简单,易操作。

2.设计表示:

(1)整个系统除了主函数外,另外还有各种功能子函数,利用循环语句do-while()和选择语句switch()实现各个子函数的调用,系统根据输入的数字选项来调用相应的函数,以实现相应的功能。

主函数中首先从文件读取信息到链表中,以用于后面其他函数的操作。

总体主要实现了图书的录入、存储、查询、添加、删除、修改、排序等功能。

(2)在主函数中选择管理员登录或者学生登录,并且输入正确密码后才可以进入系统,若连续3次输入密码错误将会被强制退出。

(3)Create_Books_Doc();这是一个指针函数,它主要实现了链表的创建,它返回的时一个单向链表的头。

其他函数调用时只需调用它返回的头即可。

Clear();此为清屏操作,在运行中可以随时将屏幕清空。

(4)Print_Book_Doc();这个函数为链表的输出函数,把链表的头传给函数后,可以表格的形式输出整个链表的所有信息。

(5)save();这个函数为保存信息到文件的函数,使用时将链表的头传给函数,函数可将整个链表的所有信息存入到磁盘文件中。

并覆盖掉源文件,以便以后调用。

Read()这个函数为读取文件的函数,将文件中的数据读入链表中。

(7)search_book1();search_book2();search_book3();search_book4();search_book5();这五个函数为查询图书信息函数,它们分别按编号、书名、作者、借书人姓名、借书人学号进行查询。

查询到信息后返回信息所在节点,查询不到则返回空指针。

(8)InsertDoc();Sorting_order1();Sorting_order2();DeleteDoc();info_change();这四个函数为功能函数,InsertDoc();添加图书信息、Sorting_order1();将图书按编号排序、Sorting_order2();将图书按价格排序、DeleteDoc();删除图书信息、info_change();修改图书信息。

调用时将链表头指针传递给函数,函数返回经过功能操作后的头指针。

3.结构体系设计:

以下为部分流程图:

图书管理系统主界面流程图

图书管理系统

退出系统登录

学生登录

管理员登录

清屏操作

管理员版图书管理系统流程图

图书信息排序

 

图书查询系统主界面流程图

排序页面

排序系统

退出排序

清屏操作

按照图书编号排序

按照图书价格排序

5.设计过程中的想法与程序中的不足:

总的来说这个程序大致实现了题目的要求,但是这套程序仍然存在着很多的问题与不足。

比如,程序中主函数写的有点繁琐,有太多的嵌套,不是那么井然有序,条理清晰,程序注释也不是很完善,对信息处理功能还有些不足之处,提示信息不明确。

还有就是没能做到模糊查询。

这个系统主要是参照课本手机通讯录模版编写的,同时也得到了老师和同学的一些帮助。

我在做系统的过程中也遇到了很多问题,有的是知识不足,有的是考虑不够周全。

事实证明,只靠自己的知识面还是很窄,独立处理问题能力不是很强,以后还要加强对c语言的学习。

我认为对于C语言编写的程序来说,使用方法大致都是一样的,所以如果要改进的话,就是要改进一些算法,尽量把界面编写清楚,提示信息全面,方便易用。

三、调试与测试:

上机操作(部分截图)

系统主界面(选择数字进入,退出系统)

选择1输入密码进入管理员版系统,然后出现功能菜单;

选择1进入录入系统,录入后浏览;

选择8进行清屏;

由于版面原因,其他操作页面可以上机运行进行操作,在此就不再一一列出。

四、小节:

在这一个星期的实践中,通过编写这个图书管理系统,我体会到了c语言学习的实用性。

将理论和实践结合在一起,用先进的计算机工具方便人们的生活。

C语言程序的编写首先要从大局考虑,把自己编写整个程序的思想都写在草稿上,这样有助于自己编写程序,在编写时要完善注释,方便其他人理解程序。

编写的程序从理论上来说并没有错,但一上机就问题不断。

甚至有些课本上的知识照搬不变,也不能得到正确的结果。

有时一个程序改了一遍又一遍,但就是不能成功,编程显得枯燥乏味,看似简单的程序题,在调试时却屡屡出错。

经反复的修改后,结果正确了,这时所有的乏味都显得那么无力,一切都是值得的。

我认为,开发一套系统,最重要的是细心,并且思考要全面,结合实际,充分考虑到客户的需求和现实意义。

不管什么系统,只用运用到实际应用中,才具有现实意义。

所以c语言程序的实用性很强,我们以后还要更加努力认真地学习编程语言。

附录:

源代码:

#include

#include

#include

#include

structbooks_list{

charauthor[20];/*作者名*/

charbookname[20];/*书名*/

charpublisher[20];/*出版单位*/

charpbtime[15];/*出版时间*/

charbooknum[10];/*图书编号*/

floatprice;/*价格*/

charlendername[20];/*借书人姓名*/

charlendersex[10];/*借书人性别*/

charlendernum[20];/*借书人学号*/

structbooks_list*next;/*链表的指针域*/

};

/*清屏函数*/

voidClear()

{

system("cls");

}

/*保存数据至文件*/

voidsave(structbooks_list*head)

{

structbooks_list*p;

FILE*fp;

p=head;

fp=fopen("f1.txt","w+");

fprintf(fp,"%20s%20s%20s%20s%20s%20f%20s%20s%20s",p->booknum,p->bookname,p->author,p->publisher,p->pbtime,p->price,p->lendername,p->lendersex,p->lendernum);

while(p->next!

=NULL){

p=p->next;

fprintf(fp,"%20s%20s%20s%20s%20s%20f%20s%20s%20s",p->booknum,p->bookname,p->author,p->publisher,p->pbtime,p->price,p->lendername,p->lendersex,p->lendernum);

}

fclose(fp);

printf("已将数据保存到f1.txt文件\n");

}

/*插入*/

structbooks_list*InsertDoc(structbooks_list*head,structbooks_list*book)

{

chara;

structbooks_list*ptr,*p;

p=head;

ptr=book;

if(head==NULL){

head=ptr;

head->next=NULL;

}

else{

while(p->next!

=NULL)

p=p->next;

p->next=ptr;

ptr->next=NULL;

}

printf("是否保存插入的图书信息?

(Y/N)");

getchar();

scanf("%c",&a);

if(a=='Y'||a=='y')

save(head);

else

printf("\n未保存插入后数据!

\n\n");

returnhead;

}

/*新建链表头节点*/

structbooks_list*Create_Books_Doc()

{

structbooks_list*head,*p;

intsize=sizeof(structbooks_list);

head=NULL;

charflag='Y';

while(flag=='Y'||flag=='y'){

p=(structbooks_list*)malloc(sizeof(structbooks_list));/*开辟新空间,存入数据,添加进链表*/

here0:

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

");

getchar();

scanf("%s",p->booknum);

printf("\n请输入图书书名:

");

getchar();

scanf("%s",p->bookname);

printf("\n请输入图书作者名:

");

getchar();

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

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

");

getchar();

scanf("%s",p->publisher);

printf("\n请输入图书出版时间:

");

getchar();

scanf("%s",p->pbtime);

printf("\n请输入图书价格:

");

getchar();

if(scanf("%f",&p->price)!

=1){

printf("价格输入有误,请重新输入!

");

gotohere0;

}

printf("\n请输入借书人姓名:

");

getchar();

scanf("%s",p->lendername);

printf("\n请输入借书人性别:

");

getchar();

scanf("%s",p->lendersex);

printf("\n请输入借书人学号:

");

getchar();

scanf("%s",p->lendernum);

printf("\n");

head=InsertDoc(head,p);

printf("━━━━添加成功!

━━━━");

printf("\n继续添加(输入‘Y’或‘y’继续,否则结束)?

");

getchar();

scanf("%c",&flag);

printf("\n");

}

returnhead;

}

/*修改操作*/

voidinfo_change(structbooks_list*head)

{

structbooks_list*p;

intpanduan=0;

chartemp[20],a;

p=head;

if(head==NULL)

printf("━━━━图书库为空!

━━━━\n");

else{

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

");

getchar();

scanf("%s",temp);

while(p!

=NULL){

if(strcmp(p->bookname,temp)==0){

printf("\n请输入修改后的图书编号:

");

getchar();

scanf("%s",p->booknum);

printf("\n请输入修改后的图书书名:

");

getchar();

scanf("%s",p->bookname);

printf("\n请输入修改后的图书作者名:

");

getchar();

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

printf("\n请输入修改后的图书出版社:

");

getchar();

scanf("%s",p->publisher);

printf("\n请输入修改后的图书出版时间:

");

getchar();

scanf("%s",p->pbtime);

printf("\n请输入修改后的图书价格:

");

getchar();

scanf("%f",&p->price);

printf("\n请输入修改后的借书人姓名:

");

getchar();

scanf("%s",p->lendername);

printf("\n请输入修改后的借书人性别:

");

getchar();

scanf("%s",p->lendersex);

printf("\n请输入修改后的借书人学号:

");

getchar();

scanf("%s",p->lendernum);

printf("\n");

getchar();

panduan=1;

}

p=p->next;

}

}

if(panduan==0){

printf("\n━━━━没有此图书记录!

━━━━\n\n");

}

else{

printf("是否保存修改后的图书信息?

(Y/N)");

scanf("%c",&a);

if(a=='Y'||a=='y')

save(head);

else

printf("\n未保存修改后数据!

\n\n");

}

return;

}

/*按照图书号查询*/

voidsearch_book1(structbooks_list*head)

{

inta=0;

structbooks_list*p;

chartemp[20];

p=head;

if(head==NULL)

printf("━━━━图书库为空!

━━━━\n");

else{

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

");

getchar();

scanf("%s",temp);

while(p!

=NULL){

if(strcmp(p->booknum,temp)==0){

printf("\n图书已找到!

\n");

printf("\n");

printf("┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━━┳━━━━━┳━━━━━┳━━━━━━┓\n");

printf("┃图书号┃书名┃作者┃出版单位┃出版时间┃价格┃借书人姓名┃借书人性别┃借书人学号┃\n");

printf("┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━━╋━━━━━╋━━━━━╋━━━━━━┫\n");

printf("┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-8.2f┃%-10.11s┃%-10.10s┃%-12.12s┃\n",p->booknum,p->bookname,p->author,p->publisher,p->pbtime,p->price,p->lendername,p->lendersex,p->lendernum);

printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━━┻━━━━━┻━━━━━┻━━━━━━┛\n");

printf("\n");

a++;

}

p=p->next;

if(p==NULL&&a==0)

printf("\n查询完毕,未找到所要查询的信息!

\n");

}

}

return;

}

/*按照图书名查询*/

voidsearch_book2(structbooks_list*head)

{

inta=0;

structbooks_list*p;

chartemp[20];

p=head;

if(head==NULL)

printf("━━━━图书库为空!

━━━━\n");

else{

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

");

getchar();

scanf("%s",temp);

while(p!

=NULL){

if(strcmp(p->bookname,temp)==0){

printf("\n图书已找到!

\n");

printf("\n");

printf("┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━━┳━━━━━┳━━━━━┳━━━━━━┓\n");

printf("┃图书号┃书名┃作者┃出版单位┃出版时间┃价格┃借书人姓名┃借书人性别┃借书人学号┃\n");

printf("┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━━╋━━━━━╋━━━━━╋━━━━━━┫\n");

printf("┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-8.2f┃%-10.11s┃%-10.10s┃%-12.12s┃\n",p->booknum,p->bookname,p->author,p->publisher,p->pbtime,p->price,p->lendername,p->lendersex,p->lendernum);

printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━━┻━━━━━┻━━━━━┻━━━━━━┛\n");

printf("\n");

a++;

}

p=p->next;

if(p==NULL&&a==0)

printf("\n查询完毕,未找到所要查询的信息!

\n");

}

}

return;

}

/*按照图书作者查询*/

voidsearch_book3(structbooks_list*head)

{

inta=0;

structbooks_list*p;

chartemp[20];

p=head;

if(head==NULL)

printf("━━━━图书库为空!

━━━━\n");

else{

printf("请输入您要查找图书的作者:

");

getchar();

scanf("%s",temp);

while(p!

=NULL){

if(strcmp(p->author,temp)==0){

printf("\n图书已找到!

\n");

printf("\n");

printf("┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━━┳━━━━━┳━━━━━┳━━━━━━┓\n");

printf("┃图书号┃书名┃作者┃出版单位┃出版时间┃价格┃借书人姓名┃借书人性别┃借书人学号┃\n");

printf("┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━━╋━━━━━╋━━━━━╋━━━━━━┫\n");

printf("┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-8.2f┃%-10.11s┃%-10.10s┃%-12.12s┃\n",p->booknum,p->bookname,p->author,p->publisher,p->pbtime,p->price,p->lendername,p->lendersex,p->lendernum);

printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━━┻━━━━━┻━━━━━┻━━━━━━┛\n");

printf("\n");

a++;

}

p=p->next;

if(p==NULL&&a==0)

printf("\n查询完毕,未找到所要查询的信息!

\n");

}

}

return;

}

/*按照借书人姓名查询*/

voidsearch_book4(structbooks_list*head)

{

inta=0;

structbooks_list*p;

chartemp[20];

p=head;

if(head==NULL)

printf("━━━━图书库为空!

━━━━\n");

else{

printf("请输入您要查找的图书借书人姓名:

");

getchar();

scanf("%s",temp);

while(p!

=NULL){

if(strcmp(p->lendername,temp)==0){

printf("\n图书已找到!

\n");

printf("\n");

printf("┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━━┳━━━━━┳━━━━━┳━━━━━━┓\n");

printf("┃图书号┃书名┃作者┃出版单位┃出版时间┃价格┃借书人姓名┃借书人性别┃借书人学号┃\n");

printf("┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━━╋━━━━━╋━━━━━╋━━━━━━┫\n");

printf("┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-12.12s┃%-8.2f┃%-10.11s┃%-10.10s┃%-12.12s┃\n",p->booknum,p->bookname,p->author,p->publisher,p->pbtime,p->price,p->lendername,p->lendersex,p->lendernum);

printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━━┻━━━━━┻━━━━━┻━━━━━━┛\n");

pri

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

当前位置:首页 > 初中教育 > 理化生

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

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