课程设计管理系统.docx
《课程设计管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计管理系统.docx(13页珍藏版)》请在冰豆网上搜索。
课程设计管理系统
课程设计报告
课程名称:
数据结构课程设计
设计题目:
图书管理系统
系别:
计算机系
专业:
组别:
第二十一题
学生姓名:
学号:
起止日期:
年月日~年月日
指导教师:
马强
目录
第一章需求分析1
1.1课程设计题目1
1.2课程设计任务及要求1
1.3课程设计思想及开发环境1
第二章概要设计2
2.1流程图设计2
2.2主要数据结构2
2.3完成设计所用方法及原理3
第三章详细设计3
3.1硬件设计及软件设计…………………………………………………3
3.2子程序设计……………………………………………………………3
第四章调试与操作说明10
第五章课程设计总结与体会13
致谢14
参考文献14
第一章需求分析
1.1课程设计题目
题目:
图书管理系统
1.2课程设计任务及要求
要求:
(1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;
(2)对书号建立索引表(线性表)以提高查找效率;
(3)系统主要功能如下:
(a)采编入库:
新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;
(b)借阅:
如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量
(c)归还:
注销对借阅者的登记,改变该书的现存量。
1.3课程设计思想集开发环境
先分别利用学过的C语言和数据结构单表的知识编写各个模块,再利用函数调用等方式将这些模块一一连接起来,最后经过调试和修改成为符合题目要求的图书管理系统管理系统。
开发工具:
VisualC++VisualStudio6.0
VC++是微软公司开发的一个IDE(集成开发环境)。
VisualC++6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
所以实际中,更多的是以VisualC++6.0为平台。
学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,VC基于C,C++语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在Windows平台无所不能。
最大缺点是开发效率不高。
第二章概要设计
2.1流程图设计
2.2主要数据结构
书、读者数据是用链表存放的,因为其数量是不定的,若用一个数组存放数据时,有固定长度限制,若太大则可能导致内存浪费,太小就不够用。
而链表可动态分配内存,根据需要而开辟内存单元,这是本程序的链表数据结构,相关需要储存的信息也如下:
typedefstructbook
{
charbook_num[10];
charbook_name[20];
charbook_writer[10];
intbook_kc;
intbook_xy;
structbook*next;
}BK;
typedefstructborrow
{
charborrow_book_num[10];
charlimit_date[8];
}BO;
typedefstructreader
{
charreader_num[10];
charreader_name[10];
intright;
BOborrow[Max];
structreader*next;
}RD;
2.3完成设计所用方法及原理
函数调用子程序等方法
第三章详细设计
3.1硬件及软件设计
系统设计是把需求转化为软件系统的最重要的环节。
系统设计的优劣在根本上决定了软件系统的质量。
良好的数据结构设计,可以提高数据信息的存储效率,保证数据信息的完整性和一致性。
同时,一个合理的数据结构有利于程序的实现。
这里采用作为VisualC++VisualStudio6.0编译环境。
3.2子程序设计
本程序分为新书初始化图书信息和读者信息模块、入库模块、借阅模块、还书模块。
voidInit()/*初始化*/
{
Init_reader();
Init_book();
}
voidInit_reader()/*初始化读者信息*/
{
RD*p0;
inti;
printf("\n读者初始化开始,请输入读者信息..\n包括编号.姓名..\n");
p0=(RD*)malloc(sizeof(RD));
h_reader=p0;
printf("\n请输入读者的信息:
\n");
printf("ReaderNo.:
");/*输入读者编号(唯一)*/
scanf("%s",p0->reader_num);
printf("ReaderName:
");/*输入读者姓名(不唯一)*/
scanf("%s",p0->reader_name);
p0->right=0;
for(i=0;i{
strcpy(p0->borrow[i].borrow_book_num,"0");/*所借图书直接置为0(即没有借书)*/
strcpy(p0->borrow[i].limit_date,"0");
}
p0->next=NULL;
printf("\n读者信息初始化完毕!
按任意键继续下一步操作..\n");
//getch();
system("cls");
}
voidInit_book()/*初始化图书信息*/
{
BK*p0;
printf("\n图书初始化开始,请输入图书信息..\n包括编号.书名.数量..\n");
p0=(BK*)malloc(sizeof(BK));
h_book=p0;
printf("\n请输入图书信息:
\n");
printf("BookNo.:
");/*输入图书编号(唯一)*/
scanf("%s",p0->book_num);
printf("BookName:
");/*输入图书名称*/
scanf("%s",p0->book_name);
printf("BookWriter:
");/*输入图书作者*/
scanf("%s",p0->book_writer);
printf("Number:
");/*输入图书数量*/
scanf("%d",&p0->book_kc);
p0->book_xy=p0->book_kc;/*开始时图书现有量和库存量相等*/
p0->next=NULL;
printf("\n图书信息初始化完毕!
按任意键继续下一步操作..\n");
//getch();
system("cls");
}
voidBorrow_Book()/*借书模块*/
{
BK*p0;RD*p1;
charbo_num[10],rea_num[10],lim_date[8];
inti;
p0=h_book;p1=h_reader;
printf("\n借书模块...\n");
printf("\n请输入借书的读者编号:
");/*先输入借书的读者信息*/
scanf("%s",rea_num);
while(p1->next!
=NULL&&strcmp(rea_num,p1->reader_num)!
=0)/*遍历一次读者链表,判断读者是否存在*/
p1=p1->next;
if(p1->next==NULL&&strcmp(rea_num,p1->reader_num)!
=0)/*如果存在,则继续,不存在就、则提示错误!
*/
{
printf("\n此读者编号不存在!
按任意键返回..\n");
gotoEND;
}
printf("\n请输入你要借的书的编号:
");
scanf("%s",bo_num);
while(strcmp(bo_num,p0->book_num)!
=0&&p0->next!
=NULL)/*遍历一次图书链表,判断此图书是否存在*/
p0=p0->next;
if(p0->next==NULL&&strcmp(bo_num,p0->book_num)!
=0)/*如果存在,则继续,不存在就、则提示错误!
*/
{
printf("\n此图书编号不存在!
按任意键返回..\n");
}
elseif(p0->book_xy<=0)/*判断此图书现在是否还有库存*/
{
printf("\n抱歉,此书已借完!
请等待新书的到来!
!
\n按任意键返回....");
}
elseif(p1->right>=Max)/*判断此读者借书权限是否已达最大*/
{
printf("\n不好意思,借书数目已满!
不能借书!
\n按任意键返回....");
}
elseif(strcmp(p1->borrow[0].borrow_book_num,"0")!
=0)/*此读者若已经借书,再判断此读者是否要借两本一样的书*/
{
for(i=0;i{
if(strcmp(p1->borrow[i].borrow_book_num,bo_num)==0)
{
printf("\n抱歉!
同一个读者不能同借两本相同的书!
\n");
}
elseif(strcmp(p1->borrow[i].borrow_book_num,"0")==0)/*如果没有重复*/
{
printf("\n请输入你要归还图书的日期:
");
scanf("%s",lim_date);
strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);/*记录所借书号,并且借书数目加一,现存量减一*/
strcpy(p1->borrow[p1->right-1].limit_date,lim_date);
p0->book_xy--;
printf("\n读者编号%s借书完毕!
按任意键继续下步操作..",p1->reader_num);
}
}
}
else/*此读者从未借过书*/
{
printf("\n请输入你要归还图书的日期:
");
scanf("%s",lim_date);
strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);/*记录所借书号,并且借书数目加一,现存量减一*/
strcpy(p1->borrow[p1->right-1].limit_date,lim_date);
p0->book_xy--;
printf("\n读者编号%s借书完毕!
按任意键继续下步操作..",p1->reader_num);
}
END:
//getch();
system("cls");
}
voidReturn_Book()/*还书模块*/
{
BK*p;RD*q;
inti,j,find=0;
charreturn_book_num[10],retu