数据结构图书管理系统课程设计报告
数据结构课程设计图书管理系统
数据结构课程设计图书管理系统在当今数字化的时代,图书管理系统对于图书馆的高效运作和管理至关重要。
作为数据结构课程设计的一部分,设计一个功能齐全、操作便捷的图书管理系统,不仅能够巩固我们所学的数据结构知识,还能提高我们解决实际问题的能力。
一、需求分析一个完善的图书管理系统应具备以下基本功能:1、图书信息管理:包括图书的书名、作者、出版社、出版年份、ISBN 号、分类号、库存数量等信息的录入、修改、查询和删除。
2、读者信息管理:记录读者的姓名、性别、身份证号、联系电话、借阅证号、借阅记录等,同时支持读者信息的增删改查。
3、借阅管理:实现读者的借书、还书操作,能够记录借阅日期和应还日期,并自动计算逾期天数和罚款金额。
4、图书查询:提供多种查询方式,如按书名、作者、出版社、分类号等进行精确或模糊查询,以便读者快速找到所需图书。
5、统计分析:能够统计图书的借阅次数、热门图书排行、读者借阅情况等,为图书馆的管理决策提供数据支持。
二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储和管理图书和读者的信息。
1、图书信息和读者信息可以使用结构体数组来存储。
结构体可以包含图书或读者的各项属性,数组则方便进行批量操作和遍历。
2、对于图书的分类和索引,可以使用二叉查找树或哈希表。
二叉查找树可以保证有序性,便于中序遍历获取排序后的图书信息;哈希表则能够快速定位特定的图书或读者,提高查询效率。
3、借阅记录可以使用链表来存储,便于动态地添加和删除借阅信息。
三、系统功能模块设计1、登录模块系统管理员和读者分别拥有不同的登录入口和权限。
管理员可以进行所有操作,读者只能进行查询和借阅相关操作。
2、图书管理模块图书录入:管理员输入图书的详细信息,将其添加到图书信息数组中。
图书修改:根据图书的 ISBN 号或其他唯一标识,修改图书的相关信息。
图书删除:按照指定条件删除图书记录。
图书查询:提供多种查询条件,快速检索图书信息。
图书管理系统数据结构课设报告
《数据结构》课程设计报告书题目:图书管理系统系别:计算机科学与应用学号:学生姓名:指导教师:完成日期:目录图书管理系统 (3)1:需求分析 (3)2:概要设计 (3)3:详细设计 (4)3.1:线性表 (4)3.2:初始化 (5)3.3:显示所有信息 (5)3.4:添加信息 (6)3.5:删除信息 (7)3.6:查询信息 (8)4:调试分析 (10)5:测试结果 (11)6:总结 (13)指导教师评语: (14)图书管理系统1:需求分析1)程序的输入:只需按系统提示输入整型数字或英文字母即可。
每次数据的输入均以回车符作为结束标志。
2)程序的输出:每一项数据输出均有汉字的提示,输出格式均为整型或字符串。
3)程序的系统功能:(1)图书库系统管理;(2)借阅者信息的管理;(3)根据需要提供对图书所需的查询方式。
2:概要设计本程序的流程图如下:开始输入r/b 读者管理图书管理显示所有读者信息输入1/2/3/4/5增加读者删除读者查询读者信息退出r 1 2534输入1/2/3/4/5增加图书删除图书查询图书信息退出124显示所有读者信息b结束继续吗ynn继续吗5y3图2-1 图书管理系统流程图3:详细设计采用microsoft visual c++作为开发工具,用结构体定义线性表,对所要处理的学生信息和图书信息进行存储,分别调用各个功能函数来处理。
3.1:线性表信息的存储用线性表实现,具体用结构体来定义,图书信息包含的变量有:图书编号,图书名,作者,出版社,出版时间,具体实现如下:struct book{char booknum[8];char bookname[15];char author[12];char PubHouse[15];char PubTime[11];}bookinfor[NUM];读者信息包含的变量有:读者编号,读者名,借书数量具体实现如下:struct reader{char readnum[8];char readname[15];char booknu[12];}readinfor[NUM1];3.2:初始化本函数用于初始化必须的图书管理数据,通过对1-5数字选择进行操作,分别执行不同的函数,具体实现如下:char Initialization1()/*界面初始化*/{char ch;printf(" ********Library Management System********\n1.Show all the book information\n2.Add book information\n3.Delete book information\n4.Search book information\n5.Exit\nPlease select:");do{ch=getchar();if(ch>='1'&&ch<='5'){printf("%c\n",ch);getchar();return ch;}}while(1);3.3:显示所有信息显示所有信息,打开bookinfo.txt文件,逐个读文件,关闭文件,具体实现如下:void showall()/*显示所有*/{int i=0;FILE *fp;system("cls");if((fp=fopen("C:\\bookinfo.txt","r"))==NULL){printf("ERROR:cannot open file\n");getchar();return;}printf("booknum bookname author PubHouse Pubtime\n");while(!feof(fp)){fread(&bookinfor[i],sizeof(struct book),1,fp);printf("%-8s %-15s %-12s %-15s %-11s\n",bookinfor[i].booknum,bookinfor[i].bookname, bookinfor[i].author,bookinfor[i].PubHouse,bookinfor[i].PubTime);i++;if(!(i%20)){printf("Press any key to continue...");getchar();}}fclose(fp);printf("Press any key to return");getchar();return;3.4:添加信息本函数可以将信息写到文件中,首先逐个输入记录中的数据项,然后打开文件,写进文件。
数据结构图书管理系统课程设计报告
一、设计题目与要求【问题描述】设计一个计算机管理系统完成图书管理基本业务。
【基本要求】(1) 每种书的登记内容包括书号、书名、著作者、现存量和库存量;(2) 对书号建立索引表(线性表)以提高查找效率;(3) 系统主要功能如下:①采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;②借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;③归还:注销对借阅者的登记,改变该书的现存量。
二、小组分工小组成员:小组分工:图书初始化、新书入库、登记读者信息、文件保存借书系统、还书系统图书信息查询、读者信息查询三、需求分析图书管理系统共需要八个模块,分别是1图书初始化、2新书入库、3添加读者信息、4借书模块、5还书模块、6查询图书信息、7查询读者信息、8退出。
我负责其中的四个模块,如下所示:1)图书初始化输入图书的一些信息,编号、作者、书名、数量,使有一定的库存。
2)新书入库新书采编入库,输入编号后如果有次数只需输入数量,没有则继续输入书名、作者、数量。
3)添加读者信息读者信息初始化,输入读书证号和姓名,只有输入书证号和姓名才能进行借书还书4)退出和文件保存退出读书管理系统并保存读者和图书信息。
四、概要设计图书信息和读者信息都采用结构体类型保存。
图书信息里面包括:图书编号、图书名称、作者、现有量、库存量、指向下一节点的指针。
读者信息里面包括:读者编号、读者姓名、借书数量、可借图书数量、指向下一节点的指针。
所有图书和读者都分别以链表的形式存储,并以编号为唯一主键。
采用链表形式便于数据的添加与删改。
主要的操作为:系统初始化,图书入库,读者信息登记,图书信息和读者信息文件的保存。
五、详细设计数据结构的定义:图书信息: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 reader{char reader_num[10];char reader_name[10];int right;BO borrow[Max];struct reader *next;}RD;算法描述:进入系统后首先进行图书初始化,输入图书的信息。
图书管理系统 数据结构 课程设计
cout<<"\n☆☆☆☆☆☆☆☆☆☆☆☆读★★者★★信★★息★★列★★表☆☆☆☆☆☆☆☆☆☆☆\n\n";
cout<<"姓名\t\t\t班级\t\t\t电话\n";
for(int i=0;i<length;i++)
{ cout<<readers[i].get_rname();
cout<<"\t\t\t"<<readers[i].get_rclass();
int i=0;
while((fread.read((char *)&readers[i],sizeof(Reader))))//计算并返回所占字节数
i++;
length=i;
fread.close();//关闭磁盘文件
}
void saveFile() //保存读者文件
{ ofstream fwrite; //定义输出文件流对象fwrite
if(!fwrite)
{cout<<"文件保存失败!\n"; exit(1); }
fwrite.open(ReaderFile,ios::binary);//使文件流与文件关联,以二进制方式打开
fwrite.write((char *)readers,length*sizeof(Reader));//计算并返回所占字节数
C.借书处理包括在“图书状态”中加上“未借”标记。
⑤查询图书:
A.按书号查找:通过编号查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
B.按书名查找:通过书名查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。
数据结构课程设计图书管理系统实验报告
Beijing Institute of PetrochemicalTechnology数据结构课程设计课程设计实验报告院(系、部): 信息工程学院姓名:计141范文虎指导教师签名:2016年6月29日·北京目录一.设计题目····································二.设计目的····································三.实验分工····································四.算法思想分析································五.算法描述实现································1。
数据结构课程设计报告图书馆管理系统
createtableuserCate
(cateNamevarchar(10)notnullprimarykey,
borrNumintnotnull,
borrTimeintnotnull
)
创建书籍类别表
createtablebookCateGory
(bkCateIdvarchar(6)primarykeynotnull,
否
出版日期(pubTime)
date
入库时间(checkIn)
date
否
可借复本(bkNum)
varchar
6
否
价格(price)
money
书籍识别表
表名
属性名
数据类型
字段长
是否允许为空
约束条件
书籍识别(book category)
书名(bookName)
varchar
20
否
主键
图书序号(orderNum)
values('C程序设计','10','TP103')
insertbookName
values('微观经济学','12','EC101')
insertbookName
values('经济学概论','03','EC102')
insertbookName
values('西方经济学','17','EC103')
end
go
读者每超期未还书一次,读者表的超期未还次数+1
图书管理系统数据结构课程设计报告
图书管理系统数据结构课程设计报告目录1课题1——图书管理系统.................................. 错误!未定义书签。
1.1设计要求 (2)1.2创作的思路 (3)1.3创作和调试 (4)1.4心得体会 (9)附录 (10)1.设计要求小型图书购销管理系统2 / 171、需要处理的基础数据✧图书资料基本信息:图书编号、书名、作者、出版社、出版日期、定价等。
✧图书库存信息:图书编号、书名、作者、库存数量等。
✧图书采购信息:采购单号、图书编号、采购日期、采购数量、单价、采购金额等。
✧图书销售信息:销售单号、图书编号、销售日期、销售数量、单价、销售金额等。
2、系统的基本功能✧图书基本信息的录入和查询✧图书采购(1)输入要采购的图书编号,自动从图书基本资料中把相关信息提取出来。
(2)根据采购数量和单价,自动计算采购金额。
(3)根据采购数量,增加图书库存量。
✧图书销售(1)输入要采购的图书编号(或书名)、销售数量,从图书库存信息中查找是否合法,合法时进行销售,否则报错。
(2)根据采购数量和单价,自动计算销售金额。
(3)销售时,从库存中减去相应的数量。
✧利润计算:根据全部的采购金额和销售金额,计算书店的利润情况。
2.思路:3 / 171.基本模块:根据要求,应该有三个封装的类,包括:书籍信息,采购信息和销售信息。
其中以书籍信息为核心,在书籍信息中建立关于其它两类的友元函数,达到信息交流的目的。
2.功能实现:要求实现的功能有:对于书籍信息:录入,查询,采购和销售导致存量的改变对于采购信息:实施采购,查询采购对于销售信息:实施销售(需要判断是否合法),查询销售总利润的计算所以草图如下考虑到购买和销售时要输入书籍号,并且更改基本库存信息。
不如将销售和采购函数作为友元函数,或许能减少函数个数。
4 / 173.建立程序和调试改错因为是在模块的建设中边建设边调试,所以容易发现错误原因。
开始先建设基本类:Book,公有成员为:public:void set_book();录入功能函数void display_book();反馈功能函数void buy_book(Buy&);//此项在Buy类建立后再输入,为采购函数void sale_book(Sale&);//此项在Sale类建立后再输入,为销售函数int bianhao;书籍编号(设为公有是为了方便进行对比时调用,不然或许要一个公有函数来实现“查询是否有此书”的功能,if(i==b[i1].bianhao)可能比写函数更加简短。
数据结构课程设计图书管理系统实验报告
数据结构课程设计课程设计实验报告院(系、部): 信息工程学院 姓 名: 计141范文虎指导教师签名:2016年 6月29日·北京Beijing Institute of PetrochemicalTechnology目录一.设计题目····································二.设计目的····································三.实验分工····································四.算法思想分析································五.算法描述实现································1.数据结构类型定义2.算法流程图3.程序代码六.运行结果····································七.结论········································一.设计题目图书管理基本业务模拟图书管理一般包括图书采编、图书编目、图书查询及图书流通(借、还书)等基本业务。
图书管理系统(含源代码)c语言_数据结构课程设计报告
数据结构大作业图书管理系统工程管理121279044 伍杨目录一、题目要求 (2)二、总体设计 (2)三、编码实现 (3)1) 定义图书结构体 (3)2) 登记操作 (3)3) 查看操作 (7)4) 删除操作 (10)5) Main函数 (18)四、调试与测试 (23)五、五心得体会 (25)六、用户手册 (25)一、题目要求1)目的要求本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成管理系统设计,以及C语言算法的掌握,并能最终实现本系统的功能要求,通过这个程序可以学习到以前调试短程序没有的的经验。
2)题目要求实现图书管理信息系统的设计。
要求实现图书添加、显示全部图书、查询、借阅和归还。
主要考查利用文件的操作!二、总体设计三、编码实现1)定义图书结构体struct book{char bookname[20]; //书名int NO; //书编号char type[20]; //类型int date; //到书日期};struct person{char name[10]; //姓名char classes[20]; //班级int number; //学号char telephone[12]; //联系电话int NO; //书编号char bookname[20]; //书名int borrowdate; //借书日期int returndate; //还书日期2)登记操作void new_book() //登记新书{FILE *fp;struct book b;int i,j;if((fp=fopen("shuku.txt","a"))==NULL){ printf("File open error!\n");exit(0);}printf("请朱老师输入此次收到的书本总数:"); scanf("%d",&i);for(j=0;j<i;j++){printf("请朱老师输入书名:");scanf("%s",b.bookname);fprintf(fp,"%s",b.bookname);printf("请朱老师输入书编号:");scanf("%d",&b.NO);fprintf(fp," %d",b.NO);printf("请朱老师输入类型:");scanf("%s",b.type);fprintf(fp," %s",b.type);printf("请朱老师输入到书日期:");scanf("%d",&b.date);fprintf(fp," %d",b.date);}if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}void new_person() //登记借书{FILE *fp;struct person p;char choice;if((fp=fopen("jieshujilu.txt","a"))==NULL){ printf("File open error!\n");exit(0);}printf("请朱老师输入借书人姓名:");scanf("%s",);fprintf(fp,"%s",);printf("请朱老师输入借书人班级:");scanf("%s",p.classes);fprintf(fp," %s",p.classes);printf("请朱老师输入借书人学号:");scanf("%d",&p.number);fprintf(fp," %d",p.number);printf("请朱老师输入借书人联系电话:");scanf("%s",p.telephone);fprintf(fp," %s",p.telephone);printf("请朱老师输入书编号:");scanf("%d",&p.NO);fprintf(fp," %d",p.NO);printf("请朱老师输入书名:");scanf("%s",p.bookname);fprintf(fp," %s",p.bookname);printf("请朱老师输入借书日期:");scanf("%d",&p.borrowdate);fprintf(fp," %d",p.borrowdate);printf("请朱老师输入还书日期:");scanf("%d",&p.returndate);fprintf(fp," %d",p.returndate);printf("\n\t您想继续吗?(y/n)");scanf(" %c",&choice);if(choice=='Y'||choice=='y'){system("cls");new_person();}if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}实现程序对文件的读取void Read(){int i=0;int j=0;ifstream in("Libra.txt",ios::out);in>>i;all=i;if(i>0&&i<=Max){for(j=1;j<=i;j++){in>>data[j].id>>data[j].name>>data[j].type>>data[j].status>>data[j].count;}}in.close();}3)查看操作v void see_book() //查看书库记录{FILE *fp;long NO;char bookname[20];char type[20];long date;if((fp=fopen("shuku.txt","r"))==NULL){printf("File open error!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s%ld%s%ld",bookname,&NO,type,&date);printf("%-10s %-10ld %-10s %ld\n",bookname,NO,type,date);};if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}void see_person() //查看所有借书记录{FILE *fp;char name[10];char classes[20];int number;char telephone[20];int NO;char bookname[20];int borrowdate;int returndate;if((fp=fopen("jieshujilu.txt","r"))==NULL){printf("File open error!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %s %ld %s %ld %s %ld %ld",name,classes,&number,telephone,&NO,bookn ame,&borrowdate,&returndate);printf("%-5s %-5s %ld %-5s %ld %-5s %ld %ld\n",name,classes,number,telephone,NO,b ookname,borrowdate,returndate);};if(fclose(fp)){printf("Can not close the file!\n");exit(0);}}4)删除操作void delete_books() //删除旧书{FILE *fp;struct book b;int number;void deletebooks();printf("请输入您要删除的书编号:");scanf("%d",&number);if((fp=fopen("shuku.txt","r"))==NULL){printf("不能打开此文件!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %d %s %d",b.bookname,&b.NO,b.type,&b.date);if(b.NO==number){printf("\n\n\t***************图书信息*******************\n");printf("\n\t图书书名:%25s",b.bookname);printf("\n\t-----------------------------------------");printf("\n\t图书编号:%25d",b.NO);printf("\n\t-----------------------------------------");printf("\n\t图书类型:%23s",b.type);printf("\n\t-----------------------------------------");printf("\n\t到书日期:%25d",b.date);printf("\n\t-----------------------------------------");deletebooks();}}}void deletebooks(){FILE *fp,*fp1,*fp2,*fp3;int number;struct book b;printf("\n\n确认删除?请再次输入书编号:");scanf("%d",&number);if((fp=fopen("shuku.txt","r"))==NULL){printf("不能打开此文件!\n");exit(0);}if((fp1=fopen("tempshuku.txt","w"))==NULL){ //建立一个临时文件printf("不能打开此文件!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %d %s %d",b.bookname,&b.NO,b.type,&b.date);if(b.NO==number)continue;elsefprintf(fp1,"%s %d %s %d",b.bookname,b.NO,b.type,b.date); }fclose(fp);fclose(fp1);if((fp2=fopen("tempshuku.txt","r"))==NULL){printf("不能打开此文件!\n");exit(0);}if((fp3=fopen("shuku.txt","w"))==NULL){ //清空书库printf("不能打开此文件!\n");exit(0);}while(!feof(fp2)){ //将临时文件的内容写人源文件fscanf(fp2,"%s %d %s %d",b.bookname,&b.NO,b.type,&b.date);fprintf(fp3,"%s %d %s %d",b.bookname,b.NO,b.type,b.date);}fclose(fp2);fclose(fp3);printf("\n 删除成功!\n");}void delete_returnbook() //删除借书记录{FILE *fp;int numbers;struct person p;void deletereturnbook();char choice;printf("\n请输入所还书本的书编号:");scanf("%d",&numbers);if((fp=fopen("jieshujilu.txt","r"))==NULL){printf("不能打开此文件!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %s %ld %s %ld %s %ld %ld",,p.classes,&p.number,p.telephone,&p.NO,p. bookname,&p.borrowdate,&p.returndate);if(p.NO==numbers){printf("\n\t***************图书信息*******************\n");printf("\n\t借书人姓名:%20s",);printf("\n\t-----------------------------------------");printf("\n\t借书人班级:%20s",p.classes);printf("\n\t-----------------------------------------");printf("\n\t借书人学号:%20d",p.number);printf("\n\t-----------------------------------------");printf("\n\t借书人联系电话:%20s",p.telephone);printf("\n\t-----------------------------------------");printf("\n\t图书编号:%24d",p.NO);printf("\n\t-----------------------------------------");printf("\n\t图书名称:%23s",p.bookname);printf("\n\t-----------------------------------------");printf("\n\t借书日期:%25d",p.borrowdate);printf("\n\t-----------------------------------------");printf("\n\t还书日期:%25d",p.returndate);printf("\n\t-----------------------------------------");deletereturnbook();printf("\n\t您想继续吗?(y/n)");scanf(" %c",&choice);if(choice=='Y'||choice=='y'){system("cls");delete_returnbook();}}}fclose(fp);}void deletereturnbook(){FILE *fp,*fp1,*fp2,*fp3;struct person p;int numbers;printf("\n\n确认删除?请再次输入书编号:");scanf("%d",&numbers);if((fp=fopen("jieshujilu.txt","r"))==NULL){ printf("不能打开此文件!\n");exit(0);}if((fp1=fopen("tempbook.txt","w"))==NULL){printf("不能打开此文件!\n");exit(0);}while(!feof(fp)){fscanf(fp,"%s %s %d %s %d %s %d %d",,p.classes,&p.number,p.t elephone,&p.NO,p.bookname,&p.borrowdate,&p.returndate);if(p.NO==numbers)continue;elsefprintf(fp1,"%s %s %d %s %d %s %d %d",,p.classes,p.num ber,p.telephone,p.NO,p.bookname,p.borrowdate,p.returndate);}fclose(fp);fclose(fp1);if((fp2=fopen("tempbook.txt","r"))==NULL){printf("不能打开此文件!\n");exit(0);}if((fp3=fopen("jieshujilu.txt","w"))==NULL){printf("不能打开此文件!\n");exit(0);}while(!feof(fp2)){ //将临时文件写人源文件fscanf(fp2,"%s %s %d %s %d %s %d %d",,p.classes,&p.number,p .telephone,&p.NO,p.bookname,&p.borrowdate,&p.returndate);fprintf(fp3,"%s %s %d %s %d %s %d %d",,p.classes,p.num ber,p.telephone,p.NO,p.bookname,p.borrowdate,p.returndate);}fclose(fp2);fclose(fp3);printf("\n 删除成功!\n");}5)Main函数int main(void){int choice;char choice2;struct book;struct person;do{printf("\n\n\n 图书馆管理系统\n\a");printf(" *******************************************************\n");printf(" ***朱老师您好吖********功能选项:登记******请按1,******\n");printf(" ******************************* 查看/查询*请按2 ******\n");printf(" ******************************* 删除***** 请按3 ******\n");printf(" ******************************* 退出***** 请按0 ******\n");printf(" *******************************************************\n\n\n");printf(" 请选择功能:");scanf("%d",&choice);switch(choice){case 1:printf(" 登记选项:新书登记请按1,借书登记请按2,返回请按3\n");printf("请选择:");scanf("%d",&choice);switch(choice){case 1:system("cls"); //清屏printf("新书资料登记:\n\n");new_book(); //新书登记printf("登记完毕!\n");printf("\n");scanf(" %c",&choice2);system("cls");break;case 2:system("cls");printf("借书资料登记:\n\n");new_person(); //借书登记printf("\n press anykey ");scanf(" %c",&choice2);system("cls");break;case 3:system("cls");break;}break;case 2:printf(" 查看/查询选项:书库查看请按1,总借书记录查看请按2,到期记录查询请按3,返回请按4\n");printf("请选择:");scanf("%d",&choice);switch(choice){case 1:system("cls");printf("欢迎朱老师进入书库!\n\n");printf("书名书编号类型到书日期\n");printf("------------------------------------------\n");see_book(); //书库显示printf("\n press anykey ");scanf(" %c",&choice2);system("cls");break;case 2:system("cls");printf("欢迎朱老师进入借书记录!\n\n");printf("姓名班级学号联系电话书编号书名借书日期到书日期\n");printf("--------------------------------------------------------\n");see_person(); //借书记录显示printf("\n press anykey ");scanf(" %c",&choice2);system("cls");break;case 3:system("cls");search_person(); //显示符合记录printf("\n press anykey ");scanf(" %c",&choice2);system("cls");break;case 4:system("cls");break;}break;case 3:printf(" 删除选项:旧书删除请按1,借书记录删除请按2,返回请按3\n");printf("请选择:");scanf("%d",&choice);switch(choice){case 1:system("cls");delete_books(); //删除ingprintf("\n press anykey ");scanf(" %c",&choice2);system("cls");break;case 2:system("cls");delete_returnbook(); //删除ingprintf("\n press anykey ");scanf(" %c",&choice2);system("cls");break;case 3:system("cls");break;}break;case 0:system("cls");}}while(choice != 0);return 0;}四、调试与测试主菜单登记查看删除生成的文件内信息五、五心得体会经过这次大作业,我觉得代码的编写,最主要的的是编程思想,语言其实不是太重要,思路最重要!六、用户手册程序执行文件为lib sys.exe,打开执行文件后按提示操作即可。
数据结构课程设计报告-图书馆管理系统
广东某某学院《数据结构课程设计》题目:图书馆管理系统学号:姓名:年级:学院:专业:指导教师:目录一、问题描述与基本要求1.1问题描述1.2基本要求二、数据结构的设计2.1数据结构的选择三、软件模块结构图3.1大体模块关系图3.2各模块具体分析四、程序流程图五、源程序六、调试分析6.1程序错误修改及完善的过程6.2最终程序所有功能运行结果6.3测试数据七、用户使用手册八、心得体会一、问题描述与基本要求1.1问题描述设计一个计算机管理系统完成图书管理基本业务。
1.2基本要求1、每种书的登记内容包括书的编号、书名、著作者、现存量、库存量、书证号和归还日期。
2、建立空链表,以提高查找效率3、系统功能如下:图书入库:新购一种书,确定书号后,登记到图书账目表中,如果表中已有,则只将库存量增加;借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;归还:注销对借阅者的登记,改变该书的现存量。
二、数据结构设计2.1数据结构的选择用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能。
2.2单链表的定义先定义单链表结点的数据域,数据域包括书的编号、书名、作者、现存量、库存量、书证号和归还日期;链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。
以下为单链表的相关定义:typedef struct bookdata//定义结点数据域{int id;//书的编号char title[15];//书名char author[6];//作者int count;//现存量int stock;//库存量char figure[20];//书证号char deadline[10];//归还时期}bookdata;typedef struct node//定义链表结点{bookdata Data;//结点数据域struct node *next;//结点链域}booknode;typedef booknode *booklist;//指向链表结点的指针2.3重要函数的定义及说明1、void initlist(booklist &l)//建立空链表2、void insertlist(booklist &l)//插入链表结点,实现登陆功能(需要输入书的编号,以确定登陆书名)3、void deletelist(linklist &l)//删除链表结点,实现删除功能(需要输入书的编号,以确定删除的书名)4、void find(booklist l)//查找书的编码,实现查找功能(需要输入书的编号,以确定查找的书名)5、void lend(booklist l)//借阅图书,实现借阅功能(需要输入书的编号,以确定借阅的书名)6、void dele(booklist l)//删除录入借书的信息,实现删除录入借书的功能(需要输入书的编号,以确定删除录入的书名)7、void add(booklist l)//查找有没有相同的书籍8、void begin()//开始进入图书管理系统9、void Introduction()//介绍图书管理系统的功能10、void About()//图书管理系统的相关开发内容11、void welcome()//欢迎进入图书管理系统以下为重要函数的定义;void initlist(booknode *&l)//建立空链表{l=new booknode;l->next=NULL;}void insert(booknode *&l)//图书馆添加书籍(定刚开始图书馆零本书){booknode *q;booknode *p=l;int k=1;for(;p->next!=NULL;p->next){}//移动指针找到最后一个节点while(k==1){q=new booknode;cout<<"请输入书的编号(书号为0结束):"<<endl;cin>>q->id;if(p->id!=0){cout<<"请输入书名"<<endl;cin>>q->title;cout<<"请输入作者"<<endl;cin>>q->author;cout<<"请输入图书数量"<<endl;cin>>q->stock;q->next=p->next;p->next=q;}cout<<"请输入是否继续(1.继续/0.退出)"<<endl;cin>>k;}}void find(booknode *&l)//查找书的编码{int x,mark=0;booknode *p=l;cout<<"请输入该书的编号"<<endl;cin>>x;for(;p!=NULL;p=p->next){if(p->id==x){cout<<"查找成功!"<<endl;cout<<"此书的名称为:"<<p->title<<endl;cout<<"此书的作者是:"<<p->author<<endl;cout<<"此书的数量为:"<<p->stock<<endl;mark=1;}}if(mark==0){cout<<"对不起,图书馆没有这本书"<<endl;}}void lend(booknode *&l)//借阅图书{booknode *p=l;booknode *p2;p2=new booknode;int num,mark=0;char bookname[10];cout<<"请输入要查找书的名称"<<endl;cin>>bookname;for(;p!=NULL;p=p->next){if(strcmp(p->title,bookname)==0){cout<<"查找成功"<<endl;cout<<"请输入书证号"<<endl;cin>>p2->figure;cout<<"请输入归还日期"<<endl;cin>>p2->deadline;num=p->count;num=num-1;p->count=num;mark=1;}}if(mark==0){cout<<"对不起,图书馆没有这本书"<<endl;}}void dele(booknode *&l)//删除录入借书的信息{booknode *p=l,*q;char stuname[15];cout<<"请输入书证号"<<endl;cin>>stuname[15];while(p!=NULL){if(strcmp(p->figure,stuname)==0){q->next=p->next;delete p;p=q->next;//p=p->next;}}//q=p->next;//p->next=q->next;cout<<"注销成功"<<endl;}/*void add(booknode *&l)//查找有没有相同的书籍,{int r,mark=0;booknode *p=l;cout<<"请输入该书的编号"<<endl;cin>>r;while(p!=NULL){if(p->id=r)//表示有同种书就只增加库存量{int number=0,o;number=p->stock;cout<<"请输入添加书的数量"<<endl;cin>>o;number=number+o;p->stock=number;cout<<"该书的库存量为:"<<endl;cout<<p->stock;p=p->next;mark=1;}else//表示没有同种书就开辟空间存入信息{booknode *p1;p1=new booknode;cout<<"请输入书的编号"<<endl;cin>>p1->id;cout<<"请输入作者"<<endl;cin>>p1->author;cout<<"请输入书的数量"<<endl;cin>>p1->count;p1->next=p->next;p->next=p1;}}}*/三、软件模块结构图3.2各模块具体分析链表插入模块具体分析如下:链表删除模块具体分析如下:主函数链表插入模块链表删除模块 链表查找、借阅、模块链表显示模块InsertList(L) scanf( )p ->book.nodeP ->P ->book.authorP ->book.stockDeleteList(L)scanf( )s,stuname链表查找、借阅模块链表输出模块具体分析如下:Search(L) scanf( )i,booknodem,nP ->book.stockp -> P ->book.authoP2->figure P2->deadline Booknode(L)scanf( )p ->book.node,P -> P ->book.author,P ->book.count四、程序流程图输入5,谢谢使用输入4,删除借阅图书信息输入3,借阅图书输入2,查找图书信息输入6,退出管理系统输入1,录入图书信息结束D4C3BA 21输入数字,选择功能功能表与编号选择1-6InitList(B)主函数main( )开始1—>A4—>D五源程序#include<iostream>#include<string>#include<string.h>using namespace std;typedef struct node//定义链表节点{int id;//书的编号char title[10];//书名char author[10];//作者int count;//现存量int stock;//库存量char figure[20];//书证号char deadline[10];//归还时期struct node *next;}booknode;//typedef booknode *booklist;void initlist(booknode *&l)//建立空链表{l=new booknode;l->next=NULL;}void insert(booknode *&l)//图书馆添加书籍(定刚开始图书馆零本书){booknode *q;booknode *p=l;int k=1;for(;p->next!=NULL;p->next){}//移动指针找到最后一个节点while(k==1){q=new booknode;cout<<"请输入书的编号(书号为0结束):"<<endl;cin>>q->id;if(p->id!=0){cout<<"请输入书名"<<endl;cin>>q->title;cout<<"请输入作者"<<endl;cin>>q->author;cout<<"请输入图书数量"<<endl;cin>>q->stock;q->next=p->next;p->next=q;}cout<<"请输入是否继续(1.继续/0.退出)"<<endl;cin>>k;}}void find(booknode *&l)//查找书的编码{int x,mark=0;booknode *p=l;cout<<"请输入该书的编号"<<endl;cin>>x;for(;p!=NULL;p=p->next){if(p->id==x){cout<<"查找成功!"<<endl;cout<<"此书的名称为:"<<p->title<<endl;cout<<"此书的作者是:"<<p->author<<endl;cout<<"此书的数量为:"<<p->stock<<endl;mark=1;}}if(mark==0){cout<<"对不起,图书馆没有这本书"<<endl;}}void lend(booknode *&l)//借阅图书{booknode *p=l;booknode *p2;p2=new booknode;int num,mark=0;char bookname[10];cout<<"请输入要查找书的名称"<<endl;cin>>bookname;for(;p!=NULL;p=p->next){if(strcmp(p->title,bookname)==0){cout<<"查找成功"<<endl;cout<<"请输入书证号"<<endl;cin>>p2->figure;cout<<"请输入归还日期"<<endl;cin>>p2->deadline;num=p->count;num=num-1;p->count=num;mark=1;}}if(mark==0){cout<<"对不起,图书馆没有这本书"<<endl;}}void dele(booknode *&l)//删除录入借书的信息{booknode *p=l,*q;char stuname[15];cout<<"请输入书证号"<<endl;cin>>stuname[15];while(p!=NULL){if(strcmp(p->figure,stuname)==0){q->next=p->next;delete p;p=q->next;//p=p->next;}}//q=p->next;//p->next=q->next;cout<<"注销成功"<<endl;}/*void add(booknode *&l)//查找有没有相同的书籍,{int r,mark=0;booknode *p=l;cout<<"请输入该书的编号"<<endl;cin>>r;while(p!=NULL){if(p->id=r)//表示有同种书就只增加库存量{int number=0,o;number=p->stock;cout<<"请输入添加书的数量"<<endl;cin>>o;number=number+o;p->stock=number;cout<<"该书的库存量为:"<<endl;cout<<p->stock;p=p->next;mark=1;}else//表示没有同种书就开辟空间存入信息{booknode *p1;p1=new booknode;cout<<"请输入书的编号"<<endl;cin>>p1->id;cout<<"请输入作者"<<endl;cin>>p1->author;cout<<"请输入书的数量"<<endl;cin>>p1->count;p1->next=p->next;p->next=p1;}}}*/void begin(){booknode *l;initlist(l);int k;do{cout<<"******************************************"<<endl;cout<<" 欢迎您使用图书管理系统"<<endl;cout<<" 请选择"<<endl;cout<<"1. 添加图书信息"<<endl;cout<<"2. 查找图书信息"<<endl;cout<<"3. 借阅图书"<<endl;cout<<"4. 删除借阅图书信息"<<endl;cout<<"5. 增加图书"<<endl;cout<<"6. 退出系统"<<endl;cout<<"请选择"<<endl;cin>>k;switch(k){case 1:insert(l);break;case 2:find(l);break;case 3:lend(l);break;case 4:dele(l);break;case 5://add(l);//break;case 0:cout<<"******谢谢使用,再见******"<<endl;exit(0);default:cout<<"输入有误!!"<<endl;break;}}while(k!=0);}void Introduction(){cout<<" 系统介绍"<<endl;cout<<"****************************"<<endl;cout<<" 本系统主要实现图书信息"<<endl;cout<<" 增加添加查找借阅显示"<<endl;cout<<"****************************"<<endl;}void About(){cout<<" 开发人员"<<endl;cout<<"****************************"<<endl;cout<<"********** 冯翔**********"<<endl;cout<<"********** 李建超**********"<<endl;cout<<"********** 陈宥君**********"<<endl;cout<<"********** 袁美琪**********"<<endl;cout<<"****************************"<<endl;}void welcome(){while(1){int y;cout<<"************************************************"<<endl;cout<<" 欢迎使用图书管理系统"<<endl;cout<<"1. 管理系统"<<endl;cout<<"2. 开发人员"<<endl;cout<<"3. 系统简介"<<endl;cout<<"4. 退出"<<endl;cout<<"************************************************"<<endl;cin>>y;switch(y){case 1:begin();break;case 2:About();break;case 3:Introduction();break;case 4:exit(0);default:cout<<"输入有误"<<endl;system("pause");}}}int main(){welcome();return 0;}6.1程序错误修改及完善的过程我这次的课程设计题目是根据我们小组选择的,当看到这个题目时,我觉得还算比较简单,因为我之前数据结构实验就做过单链表的插入、删除、查找、输出,而这次活期图书管理系统要求的录入、查找、借阅、归还、库存量信息等功能,即可用单链表的相关功能函数来实现,于是我修改了之前写过的单链表的一些函数,以满足这次题目的要求,但在实验过程中仍出现了一些错误。
图书管理系统的设计数据库课程设计报告
课程设计任务书一、设计题目图书管理系统的设计二、设计概述通过对典型的图书系统的订购、借阅、维护等业务流程进行分析,完成具有图书管理、用户管理等相关功能的数据库管理应用系统。
三、设计要求1、完成图书信息的维护2、完成按名称或作者条件的图书查找3、完成图书订购、入库功能4、实现借阅功能5、完成读者、操作员的管理四、进度安排目录1、设计概述31.1 设计目的31.2 设计容31.3 设计方法与步骤32.系统需求分析42.1系统需求42.1.1 文字描述42.1.2图形描述42.2数据流图:42.3数据字典:62.3.1数据项62.4数据结构82.5数据流92.6数据存储102.7处理过程113.概念模型设计133.1 E-R图133.1.1 分E-R图133.1.2 总E-R图164.逻辑结构设计164.1E-R图转换为关系模式164.2关系模式的优化174.3设计用户子模式195.数据库的物理设计205.1确定数据的存储结构205.2确定数据的存放位置205.3确定系统配置206.数据库的实施与维护216.1数据的载入和应用程序的调试216.1.1 数据表的建立语句21(1)图书信息表的建立21(2)图书类型表的建立21(3)图书借阅表的建立22(4)图书操作表的建立22(5)订购单表的建立22(6)读者信息表的建立23(7)图书库存表的建立236.1.2数据库关系图246.1.3应用程序的调试246.2数据库的试运行446.3数据库的运行与维护447.总结451、设计概述1.1 设计目的目前社会上信息管理系统发展飞速,为了使书店管理更加规化、程序化、科学化,我们设计了图书管理系统。
本系统为管理者提供方便的管理,主要子模块有图书管理、读者管理、用户管理等,可实现日常图书进货、借阅流程,最终达到提高工作效率的目的。
读者可以进入图书查询界面通过图书名称、图书作者等方式查询图书,查到满意的图书后可点击借阅。
图书管理基本业务数据结构课程设计报告
图书管理基本业务数据结构课程设计报告某大学某学院数据结构课程课程设计设计题目:图书管理基本业务姓名: X X学号:专业班级: 12级软件工程(1)班院系:信息工程学院设计时间: - 第2学期设计地点:计算机中心公共机房B区指导教师签名:年月文档仅供参考日目录1 绪论 ...................................................................... 错误!未定义书签。
1.1 课程设计的目的............................................ 错误!未定义书签。
1.2课题设计的意义............................................ 错误!未定义书签。
2 需求分析................................................................. 错误!未定义书签。
2.1 课程设计要求................................................ 错误!未定义书签。
2.2 课程设计任务................................................ 错误!未定义书签。
2.3分析用例 ....................................................... 错误!未定义书签。
3 设计思路................................................................. 错误!未定义书签。
4 详细设计................................................................. 错误!未定义书签。
5 数据测试................................................................. 错误!未定义书签。
数据结构图书管理系统实验报告
竭诚为您提供优质文档/双击可除数据结构图书管理系统实验报告篇一:数据结构-图书管理系统实验报告数据结构课程设计报告课程名称_________题目名称学生学院专业班级学号学生姓名指导教师20XX年7月8日一、需求分析1.图书管理系统中图书管理模块包括图书类型定义:书号、现存量、总存量,出版时间为整型,定价为浮点型,书名、著者名为字符型,借阅指针、预约指针为读者类型;读者类型定义:证号为整型、姓名为字符型,另外借阅类型和预约类型组合成其中的共用体类型。
b树(2-3树)类型定义:关键字个数和关键字数组为整型、另外还有指向双亲的指针、指向子树的指针、记录单元指针;b树查找结果类型定义:节点指针、关键字序号和查找标志变量为整型。
2.演示程序以用户和计算机的对话方式进行,在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在后面。
该演示系统,没有使用文件,全部数据放在内存存放。
四项基本业务都以书号为关键字进行的,采用了b树(2-3树)对书号建立索引,以提高效率。
3.图书管理系统实现功能:①采编入库:新书购入,将书号、书名、著者、册数、出版时间添加入图书账目中去,如果这种书在帐中已有,则只将总库存量增加,每新增一个书号则以凹入表的形式显示b树现状。
②清除库存:实现某本书的全部信息删除操作,每清除一个书号则已以凹入表的形式显示b树现状。
③图书借阅:如果书的库存量大于零时则执行出借,登记借阅者的图书证号和姓名,系统自动抓取当前借阅时间和计算归还时间。
④图书预约:如果某书库存为零,则记录预约者姓名和证号,系统自动抓取当前预约时间和取书时间。
⑤图书归还:注销借阅者信息,并改变该书的现存量。
⑥作者专区:输入作者名字,系统将查找相应作者全部著作并显示出来。
⑦图书信息:可以根据书号查阅此书基本信息、借阅信息和预约信息,亦可以查找全部图书基本信息。
二、概要设计1.抽象数据类型b树定义:ADTbTree{数据对象:D是具有相同特性的数据元素的集合。
图书管理系统 c++ 数据结构实验报告
图书管理系统 c++ 数据结构实验报告学生姓名:学院: 软件学院专业: 信息管理与信息系统题目: 图书管理系统成绩指导教师2011年1月6日1(设计目的(小标题黑体五号字)《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。
进行数据结构课程设计要达到以下目的:, 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; , 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; , 提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
2(设计内容和要求1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;*归还:注销对借阅者的登记,改变该书的现存量。
3(本设计所采用的数据结构定义图书链表和图书索引结构struct Book{char BookID[10];/*图书编号*/char BookName[512];/*书名*/char Writer[512];/*作者*/int CurrentNumber;/*现存量*/Book *pNext;/*下一个图书信息*/};struct Index{char BookID[10];/*图书编号*/Index *pNext;/*下一个索引指针*/};1/*借阅信息结构*/struct Borrow{char BookID[10];/*借阅图书编号*/char BookName[512]; /*书名*/unsigned long StuID; /*图书证号*/char ReturnTime[512];/*归还日期*/Borrow *pNext; /*下一个借阅信息*/};4(功能模块详细设计4.1 详细设计思想主函数main()主函数通过一个switch语句实现对系统功能的选择。
(完整word版)数据结构课程设计图书管理系统报告(word文档良心出品)
河南科技大学课程设计说明书课程名称数据结构课程设计题目个人书籍管理系统的设计与实现院系_____班级___学生姓名__指导教师日期___数据结构课程设计任务书指导教师:时间:个人书籍管理系统的设计与实现一、简介1.设计目的:进一步理解查找和排序在实际系统要使用的数据结构以及施加在这些数据结构上的算法,锻炼自己运用所学数据结构的知识来解决实际问题的综合能力。
2.问题的描述:学生在自己的学习和生活中会拥有很多的书籍,对所购买的书籍进行分类和统计是一种良好的习惯。
可以便于对这些知识资料的整理和查找使用。
如果用文件来存储相关书籍的各种信息,包括分类、购买日期、价格、简介等等,辅之以程序来使用这些文件对里面的书籍信息进行统计和查询的工作将使得这种书籍管理工作变的轻松而有趣。
简单个人书籍管理系统的开发就是为了解决这个实际问题的。
二、数据结构的设计:typedef struct{char name[20]; //书名int data; //购买书的日期char author[10]; //作者int idnumber; //书的编号int price; //书的价格char publish[15]; //出版社char remarks[30]; //备注}BOOK;三、功能(函数)设计:功能函数模块划分void main() //主函数void input() //输入书的信息void print() //显示全部书的信息void search() //查找书的信息void deleted() //删除书的信息void sort() //对书的信息进行排序四、界面设计:这是进入系统时的界面,四周用*围起来使得程序中间的文字显的比较突出,也比较美观。
五、程序设计:(1)主函数main()的的流程图:(2)输入函数input()流程图(3)显示函数print()流程图(4)查找函数search()的流程图(5)排序函数sort()的流程图六、运行与测试:1、测试的数据及其结果:2、运行与测试期间遇到的问题及其解决办法(1)在处理排序这个函数的时候,一开始排序的结果一直出不来,我看了好久都没有发现错误,当我进行单步调试后,我才发现我其中有个for循环陷入了死循环,发现错误后我再把for 循环中的参数稍微的进行了修改,然后排序的结果就能出来,我发现其实那个结果其实我马虎造成的,以后一定要避免这种情况的发生。
图书管理系统(含源代码)c语言-数据结构课程设计报告
数据结构大作业图书管理系统工程管理121279044 伍杨目录一、题目要求 (1)二、总体设计 (2)三、编码实现 (2)1) 定义图书结构体 (2)2) 登记操作 (3)3) 查看操作 (7)4) 删除操作 (9)5) Main函数 (18)四、调试与测试 (24)五、五心得体会 (24)六、用户手册 (24)一、题目要求1)目的要求本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成管理系统设计,以及C语言算法的掌握,并能最终实现本系统的功能要求,通过这个程序可以学习到以前调试短程序没有的的经验.2)题目要求实现图书管理信息系统的设计。
要求实现图书添加、显示全部图书、查询、借阅和归还。
主要考查利用文件的操作!二、总体设计三、编码实现1)定义图书结构体struct book{char bookname[20]; //书名int NO; //书编号char type[20]; //类型int date; //到书日期};struct person{char name[10]; //姓名char classes[20];//班级int number; //学号char telephone[12]; //联系电话int NO;//书编号char bookname[20];//书名int borrowdate;//借书日期int returndate;//还书日期2)登记操作void new_book()//登记新书{FILE *fp;struct book b;int i,j;if((fp=fopen("shuku。
txt",”a”))==NULL){ printf("File open error!\n");exit(0);}printf(”请朱老师输入此次收到的书本总数:”);scanf(”%d”,&i);for(j=0;j〈i;j++){printf(”请朱老师输入书名:”);scanf("%s”,b.bookname);fprintf(fp,"%s”,b。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计题目与要求【问题描述】设计一个计算机管理系统完成图书管理基本业务。
【基本要求】(1) 每种书的登记内容包括书号、书名、著作者、现存量和库存量;(2) 对书号建立索引表(线性表)以提高查找效率;(3) 系统主要功能如下:①采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;②借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;③归还:注销对借阅者的登记,改变该书的现存量。
二、小组分工小组成员:小组分工:图书初始化、新书入库、登记读者信息、文件保存借书系统、还书系统图书信息查询、读者信息查询三、需求分析图书管理系统共需要八个模块,分别是1图书初始化、2新书入库、3添加读者信息、4借书模块、5还书模块、6查询图书信息、7查询读者信息、8退出。
我负责其中的四个模块,如下所示:1)图书初始化输入图书的一些信息,编号、作者、书名、数量,使有一定的库存。
2)新书入库新书采编入库,输入编号后如果有次数只需输入数量,没有则继续输入书名、作者、数量。
3)添加读者信息读者信息初始化,输入读书证号和姓名,只有输入书证号和姓名才能进行借书还书4)退出和文件保存退出读书管理系统并保存读者和图书信息。
四、概要设计图书信息和读者信息都采用结构体类型保存。
图书信息里面包括:图书编号、图书名称、作者、现有量、库存量、指向下一节点的指针。
读者信息里面包括:读者编号、读者姓名、借书数量、可借图书数量、指向下一节点的指针。
所有图书和读者都分别以链表的形式存储,并以编号为唯一主键。
采用链表形式便于数据的添加与删改。
主要的操作为:系统初始化,图书入库,读者信息登记,图书信息和读者信息文件的保存。
五、详细设计数据结构的定义:图书信息: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 reader{char reader_num[10];char reader_name[10];int right;BO borrow[Max];struct reader *next;}RD;算法描述:进入系统后首先进行图书初始化,输入图书的信息。
1)初始化先要输入读者信息。
2)采编入库否3)输入读者信息是5) 退出和文件保存六、程序源代码#include<stdio.h>#include <string.h>#include <stdlib.h>#include<conio.h>#define Max 4typedef 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[10];}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 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***************************************\n"); printf("\n\n\n\t\t\t欢迎使用图书管理系统\n");printf("\n\n\n\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("=================================================\n"); printf("请选择相应的代码:");for(;;){ scanf("%d",&dm); //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;default:printf("\n错误!");exit(0);}}}void Init() /*初始化*/{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; /*此处分两种情况,链表中没有数据,head直接指向p0处*/else p->next=p0; /*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/p0->next=NULL;p0->book_xy=p0->book_kc;}printf("\n新书入库完毕!按任意键继续下一步操作\n");getch();system("cls");}void add_reader()/*添加读者*/{ RD *p0,*p,*p1;int i;p=h_reader;printf("\n读者初始化开始,请输入读者信息.\n包括书证号.姓名..\n");if (p==NULL){p0=(RD*)malloc(sizeof(RD)); /*申请新结点存储空间*/h_reader=p0;p=h_reader;printf("读者书证号:");scanf("%s",p0->reader_num);printf("读者姓名:");scanf("%s",p0->reader_name);p0->right=0;for(i=0;i<Max;i++){strcpy(p0->borrow[i].borrow_book_num,"0"); /*所借图书直接置为(即没有借书)*/ strcpy(p0->borrow[i].limit_date,"0");}p0->next=NULL;}else{p0=(RD*)malloc(sizeof(RD));p1=h_reader;printf("\n请输入读者的信息:\n");printf("读者书证号:");scanf("%s",p0->reader_num);for(;;){while(strcmp(p0->reader_num,p1->reader_num)!=0&&p1->next!=NULL)p1=p1->next;if(strcmp(p0->reader_num,p1->reader_num)==0){printf("\n此读者编号已存在,请重新输入!\n");printf("读者书证号:");scanf("%s",p0->reader_num);p1=h_reader;}else{printf("读者姓名:");scanf("%s",p0->reader_name);break;}}p0->right=0;for(i=0;i<Max;i++){strcpy(p0->borrow[i].borrow_book_num,"0"); /*所借图书直接置为(即没有借书)*/ strcpy(p0->borrow[i].limit_date,"0");}p1->next=p0;p1=p1->next;p1->next=NULL;}printf("\n读者信息初始化完毕!按任意键继续下一步操作..\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("Reader.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(); /*调用主菜单*/}七、运行结果和调试分析八、课程设计总结通过这次的实验,我了解了图书管理系统的流程,之前以用户的角度去认识图书管理,现在站在设计者的角度去考虑问题,并且根据实际情况设计了图书管理系统的模块,对此有了更深刻的理解。