数据结构课程设计-图书管理系统

安徽省巢湖学院计算机与信息工程学院

课程设计报告

课程名称《数据结构》

课题名称图书管理系统

专业计算机科学与技术

班级 10计本(2)班

学号10012090

姓名王显龙

联系方式 150********

指导教师江家宝

20 11 年 12 月 28 日

目录

1、数据结构课程设计任务书 (3)

1.1、题目 (3)

1.2、要求 (3)

2、总体设计 (3)

2.1、功能模块设计 (3)

2.2、所有功能模块的流程图 (3)

3、详细设计 (3)

3.1、程序中所采用的数据结构及存储结构的说明 (4)

3.2、算法的设计思想 (4)

4、调试与测试: (4)

4.1、调试方法与步骤: (4)

4.2、测试结果的分析与讨论: (4)

4.3、测试过程中遇到的主要问题及采取的解决措施: (8)

5、时间复杂度的分析: (8)

6、源程序清单和执行结果 (8)

7、C程序设计总结 (18)

8、致谢 (18)

9、参考文献 (18)

1、数据结构课程设计任务书 1.1、题目:图书管理系统

1.2、要求

设计要求设计一个计算机管理系统完成图书管理基本业务。

1) 每种书的登记内容包括书号、书名、著作者、现存量和库存量; 2) 对书号建立索引表(线性表)以提高查找效率; 3) 系统主要功能如下:

*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;

*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;

*归还:注销对借阅者的登记,改变该书的现存量。 2、总体设计

2.1、功能模块设计及流程图

根据课程设计题目的功能要求,各个功能模块的组成框图如下:

Y N Y N

3、详细设计

1.书号索引文件:

Typedef struct {int bno; int RecNo;}

进入图书馆

采购的新书

读者借书

读者还书

是否已有该书? 查询所借书现存量大于0? 注销对借阅者的登记

改变该书的库存量 借出该书一本

改变该书的现存量

确定该书

的书号

登记到图书帐目表

不能借该书

改变该书库存量

登记借阅者的书证号和归还期限

BidxRedType;

Typedef struct{

BidxRecType BnoIdx[Booksize];

Int len;}

BnoIdxFile;

2.读者文件:

Typedef struct{int ron;

Char name[8];int bn1; init bn2;}RRecType;

Typededf struct{RRecType ReadRed[RRnum];

Int len;}ReadFile;

3.输入一条图书记录的算法描述如下:

BookDbaseFile AppeDBaseFile(BookDBaseFile df)

提示输入项的输入顺序;

输入一条记录;

图书计数器加1;}

4.按书名查询如下:

Int BnameFind(LHFile lhf1,char keyl[])

{for(i=1;i<=lhf1;i++)

{if(dey==链头文件中当前的记录的书名)

{k=链头文件中当前的记录链头;退出循环;}}

Return k;}

3.1、程序中所采用的数据结构及存储结构的说明:

Const LIST_INTT_SIZE=100;

Typedef struct{ElemType elem[LIST_DIZE];

Int length;

}SqList;

Typedef struct{ElemType *elem;intlength;int listsize;int incrementsizer;}SqList;

}

3.2、算法的设计思想:

V oid borrowbook(int bookid)\\借书操作

Intretbook(int bookid)\\还书操作

V oid RDatabase::readerdata()\\读者维护

V oid BDatabase:;bookidata()\\图书维护

4.调试与测试:

4.1、调试方法与步骤:在相应的集成环境中进行运行源程序,并根据提示调试源程序直到得到正确的程序!!

4.2调试方法与步骤:

4.3、测试过程中遇到的主要问题及采取的解决措施:

是源程序运行不对!!但是在集成环境的提示下,还是可以慢慢的提示成功的!!

5、时间复杂度的分析

进分析时间复杂度为:t(n)=O(n)

6、源程序清单和执行结果

#include

#include

#include

#include

#define Max 2

typedef struct book

{

char book_num[10];

char book_name[20];

char book_writer[10];

int book_xy;

int book_kc;

struct book *next;

}BK;

typedef struct borrow

{

char borrow_book_num[10];

char limit_date[8];

}BO;

typedef struct reader

{

char reader_num[10];

char reader_name[10];

int right;

BO borrow[Max];

struct reader *next;

}RD;

BK *h_book;

RD *h_reader;

void Login();

int Menu();

void Init();

void Init_book();

void Menu_select();

void Insert_New_Book();

void Find_Book();

void add_reader();

void Print_reader();

void Print_book();

void Borrow_Book();

void Return_Book();

void Save();

void Save_Book();

void Save_Reader();

void Load();

void Load_Reader();

void Load_Book();

void Login()

{

system("cls");

printf("\n\n\n\t\t\t欢迎使用图书管理系统\n");

printf("\n\n\n\t\t 按任意键进入系统...");

getch(); system("cls");

}

int Menu()

{ int dm;

printf("\n\t\t图书管理系统主菜单\n");

printf("=================================================\n"); printf("☆\t0----退出系统☆\n");

printf("☆\t1----采编入库☆\n");

printf("☆\t2----登记读者☆\n");

printf("☆\t3----借阅登记☆\n");

printf("☆\t4---还书管理☆\n ");

printf("☆\t5---查询图书信息☆\n");

printf("☆\t6----查询读者信息☆\n");

printf("=================================================\n"); printf("请选择相应的代码:");

for(;;)

{ scanf("%d",&dm);

if(dm<0||dm>6)

printf("\n错误!请重新输入:");

else break;

}

return dm;

}

void Menu_select()

{

for(;;)

{

switch(Menu())

{ case 0:

system("cls");

Save();

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

printf("\n\n\t欢迎下次使用本系统!\n");

getch();

exit(0);

case 1:Insert_New_Book();break;

case 2:add_reader();break;

case 3:Borrow_Book();break;

case 4:Return_Book();break;

case 5:Print_book();break;

case 6:Print_reader();break;

default:printf("\n错误!");

exit(0);}

}

}

void Init()

{

Init_book();

}

void Init_book()

{

BK *p0;

printf("\n图书初始化开始,请输入图书信息..\n包括编号.书名.数量..\n"); p0=(BK*)malloc(sizeof(BK));

h_book=p0;

printf("\n请输入图书信息:\n");

printf("图书编号:");

scanf("%s",p0->book_num);

printf("图书名称:");

scanf("%s",p0->book_name);

printf("图书作者:");

scanf("%s",p0->book_writer);

printf("图书数量:");

scanf("%d",&p0->book_kc);

p0->book_xy=p0->book_kc;

p0->next=NULL;

printf("\n图书信息初始化完毕!按任意键继续下一步操作..\n");

getch();

system("cls");

}

void Insert_New_Book()

{

BK *p,*p0,*p1;

p=p1=h_book;

printf("\n新书入库模块...\n");

printf("\n请输入新书信息..\n包括书号.书名.数量..\n");

p0=(BK *)malloc(sizeof(BK));

printf("图书编号:");

scanf("%s",p0->book_num);

while(strcmp(p0->book_num,p1->book_num)!=0&&p1->next!=NULL) p1=p1->next;

if(strcmp(p0->book_num,p1->book_num)==0)

{

printf("\n此编号图书已存在!!直接入库!\n");

printf("图书数量:");

scanf("%d",&p0->book_kc);

p1->book_kc+=p0->book_kc;

p1->book_xy+=p0->book_kc;

}

else

{

printf("图书名称:");

scanf("%s",p0->book_name);

printf("图书作者:");

scanf("%s",p0->book_writer);

printf("图书数量:");

scanf("%d",&p0->book_kc);

while(p->next)

{ p=p->next; }

if(h_book==NULL) h_book=p0;

else p->next=p0;

p0->next=NULL;

p0->book_xy=p0->book_kc;

}

printf("\n新书入库完毕!按任意键继续下一步操作..\n");

getch();

system("cls");

}

void add_reader()

{ RD *p0;

int i;

printf("\n读者初始化开始,请输入读者信息..\n包括书证号.姓名..\n"); p0=(RD*)malloc(sizeof(RD));

h_reader=p0;

printf("\n请输入读者的信息:\n");

printf("读者书证号:");

scanf("%s",p0->reader_num);

printf("读者姓名:");

scanf("%s",p0->reader_name);

p0->right=0;

for(i=0;i

{

strcpy(p0->borrow[i].borrow_book_num,"0");

strcpy(p0->borrow[i].limit_date,"0");

}

p0->next=NULL;

printf("\n读者信息初始化完毕!按任意键继续下一步操作..\n");

getch();

system("cls");

}

void Borrow_Book()

{

BK *p0; RD *p1;

char bo_num[10],rea_num[10],lim_date[8];

int i;

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");

goto END;

}

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");

}

else if(p0->book_xy<=0)

{

printf("\n抱歉,此书已借完!请等待新书的到来!!\n按任意键返回....");

}

else if(p1->right>=Max)

{

printf("\n不好意思,借书数目已满!不能借书!\n按任意键返回....");

}

else if(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");

}

else if(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");

}

void Return_Book()

{

BK *p; RD *q;

int i,j,find=0;

char return_book_num[10],return_reader_num[10];

p=h_book; q=h_reader;

printf("\n还书模块...\n");

printf("\n请输入要还书的读者编号:");

scanf("%s",return_reader_num);

while(q->next!=NULL&&strcmp(return_reader_num,q->reader_num)!=0) q=q->next;

if(q->next==NULL&&strcmp(return_reader_num,q->reader_num)!=0) {

find=2;

printf("\n此读者编号不存在!按任意键返回..\n");

goto end;

}

printf("\n请输入读者还书的编号:");

scanf("%s",return_book_num);

while(p->next!=NULL&&strcmp(return_book_num,p->book_num)!=0) p=p->next;

if(p->next==NULL&&strcmp(return_book_num,p->book_num)!=0)

{

find=2;

printf("\n错误!此图书编号不存在!按任意键返回..\n");

goto end;

}

for(i=0;i

if(strcmp(return_book_num,q->borrow[i].borrow_book_num)==0)

{

find=1;

for(j=i;j

{

strcpy(q->borrow[j].borrow_book_num,q->borrow[j+1].borrow_book_num);

strcpy(q->borrow[j].limit_date,q->borrow[j+1].limit_date);

}

strcpy(q->borrow[Max-1].borrow_book_num,"0");

strcpy(q->borrow[Max-1].limit_date,"0");

p->book_xy++;

q->right--;

printf("\n编号%s的读者还书完毕!按任意键继续下步操作..",return_reader_num);

}

if(find==0)

printf("\n错误!此读者未借此书!按任意键返回..\n");

end: getch(); system("cls");

}

void Print_book()

{

BK *p;

p=h_book;

printf("\n图书信息如下:\n\n");

printf("图书编号\t图书名称\t图书作者\t现有\t\t库存\n");

while(p!=NULL)

{

printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\n",p->book_num,p->book_name,p->book_writer,p ->book_xy,p->book_kc);

p=p->next;

}

printf("\n图书信息打印完毕!按任意键继续下一步操作..");

getch();

system("cls");

}

void Print_reader()

{

RD *p;

int i;

p=h_reader;

printf("\n读者信息如下:\n\n");

printf("读者书证号\t\t读者姓名\n");

printf("\n");

while(p!=NULL)

{

printf("\t%s\t\t%s",p->reader_num,p->reader_name);

for(i=0;i

{

printf("\n");

printf("图书编号",i+1);

printf("\t还书日期",i+1);

printf("\n");

printf("\t%s",p->borrow[i].borrow_book_num);

printf("\t\t%s",p->borrow[i].limit_date);

}

printf("\n");

p=p->next;

}

printf("\n读者信息打印完毕!按任意键继续下一步操作..");

getch();

system("cls");

}

void Save()

{

Save_Reader();

Save_Book();

}

void Save_Reader()

{

FILE *fp_reader;

RD *p,*p0;

p=h_reader;

if((fp_reader=fopen("Reader.txt","wb"))==NULL)

{

printf("\n文件保存失败!\n请重新启动本系统...\n");

exit(0);

}

while(p!=NULL)

{

if(fwrite(p,sizeof(RD),1,fp_reader)!=1)

printf("\n写入文件失败!\n请重新启动本系统!\n");

p0=p;

p=p->next;

free(p0);

}

h_reader=NULL;

fclose(fp_reader);

}

void Save_Book()

{

FILE *fp_book;

BK *p,*p0;

p=h_book;

if((fp_book=fopen("Book.txt","wb"))==NULL)

{

printf("\n文件保存失败!\n请重新启动本系统...\n");

exit(0);

}

while(p!=NULL)

{

if(fwrite(p,sizeof(BK),1,fp_book)!=1)

printf("\n写入文件失败!\n请重新启动本系统!\n");

p0=p;

p=p->next;

free(p0);

}

h_book=NULL;

fclose(fp_book);

}

void Load()

{

Load_Reader();

Load_Book();

}

void Load_Reader()

{

RD *p1,*p2,*p3;

FILE *fp;

fp=fopen("book.txt","rb");

p1=(RD *)malloc(sizeof(RD));

fread(p1,sizeof(RD),1,fp);

h_reader=p3=p2=p1;

while(! feof(fp))

{ p1=(RD *)malloc(sizeof(RD));

fread(p1,sizeof(RD),1,fp);

p2->next=p1;

p3=p2;

p2=p1;

}

p3->next=NULL;

free(p1);

fclose(fp);

}

void Load_Book()

{

BK *p1,*p2,*p3;

FILE *fp;

fp=fopen("Book.txt","rb");

p1=(BK *)malloc(sizeof(BK));

fread(p1,sizeof(BK),1,fp);

h_book=p3=p2=p1;

while(! feof(fp))

{ p1=(BK *)malloc(sizeof(BK));

fread(p1,sizeof(BK),1,fp);

p2->next=p1;

p3=p2;

p2=p1;

}

p3->next=NULL;

free(p1);

fclose(fp);

}

void main()

{

FILE *fp_book,*fp_reader;

Login();

if((fp_book=fopen("Book.txt","rb"))==NULL||(fp_reader=fopen("Reader.txt","rb"))= =NULL)

{ Init(); }

else Load();

Menu_select();

}

7、C程序设计总结

设计过程中,不仅复习课本上所学知识,还通过查资料、问同学学到了课本上没有的知识。从而启发我,要想写好程序,在写好课本知识的同时还需要多读和专业有关的一些书籍,同时还需要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程。

同时感觉到了团体合作学习的好处,所以应该多多团体合作学习!!

8、致谢

能够完成这次课程设计必须感谢尤字、杨森等同学的帮助!!修改了几

处重要错误,同时启发我完善了该程序的功能

9、参考文献

谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.1

相关文档
最新文档