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

合集下载

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

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

数据结构课程设计图书管理系统在当今数字化的时代,图书管理系统对于图书馆的高效运作和管理至关重要。

作为数据结构课程设计的一部分,设计一个功能齐全、操作便捷的图书管理系统,不仅能够巩固我们所学的数据结构知识,还能提高我们解决实际问题的能力。

一、需求分析一个完善的图书管理系统应具备以下基本功能: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:添加信息本函数可以将信息写到文件中,首先逐个输入记录中的数据项,然后打开文件,写进文件。

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

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

c语言课程设计报告图书管理系统一、教学目标本课程的目标是使学生掌握C语言的基本语法,熟悉图书管理系统的开发流程,培养学生运用C语言解决实际问题的能力。

具体目标如下:1.知识目标:–掌握C语言的基本语法和数据结构。

–理解图书管理系统的需求和设计原理。

2.技能目标:–能够使用C语言编写简单的程序。

–学会使用C语言实现图书管理系统的功能。

3.情感态度价值观目标:–培养学生的团队协作意识和沟通能力。

–增强学生对计算机科学和编程的兴趣和热情。

二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构以及图书管理系统的开发。

具体安排如下:1.C语言的基本语法:–变量和数据类型–运算符和表达式–函数和数组–指针和引用2.数据结构:3.图书管理系统的开发:–系统测试和优化三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性。

具体方法如下:1.讲授法:用于讲解C语言的基本语法和数据结构。

2.案例分析法:通过分析具体的图书管理系统案例,使学生更好地理解系统设计和功能实现。

3.实验法:让学生动手编写程序,巩固所学知识,提高实际操作能力。

4.小组讨论法:鼓励学生分组讨论,培养团队协作意识和沟通能力。

四、教学资源本课程所需的教学资源包括:1.教材:《C语言程序设计》2.参考书:《C Primer Plus》、《数据结构与算法分析》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、网络设备以上教学资源将用于支持教学内容和教学方法的实施,丰富学生的学习体验。

五、教学评估本课程的评估方式包括平时表现、作业、考试等。

评估方式应客观、公正,能够全面反映学生的学习成果。

具体安排如下:1.平时表现:包括课堂参与度、提问回答、小组讨论等,占总评的20%。

2.作业:包括编程练习和理论作业,占总评的30%。

3.考试:包括期中和期末考试,占总评的50%。

期中和期末考试将涵盖C语言基本语法、数据结构以及图书管理系统的开发内容。

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

图书管理系统 数据结构  课程设计
{
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.按书名查找:通过书名查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

数据结构课程设计图书管理系统实验报告

数据结构课程设计图书管理系统实验报告

数据结构课程设计课程设计实验报告院(系、部): 信息工程学院 姓 名: 计141范文虎指导教师签名:2016年 6月29日·北京Beijing Institute of PetrochemicalTechnology目录一.设计题目····································二.设计目的····································三.实验分工····································四.算法思想分析································五.算法描述实现································1.数据结构类型定义2.算法流程图3.程序代码六.运行结果····································七.结论········································一.设计题目图书管理基本业务模拟图书管理一般包括图书采编、图书编目、图书查询及图书流通(借、还书)等基本业务。

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

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

图书管理系统数据结构课程设计报告目录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)可能比写函数更加简短。

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

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

管理信息系统课程设计设计内容:学生班级:学生姓名:学号:班内序号:设计日期:一、课设目的通过对图书管理信息系统的系统分析、系统设计、编码和调试等工作的实践,了解管理信息系统的一般设计方法和实现思路,深入了解数据库设计的基本理论及方法。

二、系统功能框图该系统主要由四大功能模块组成:用户登录、图书管理、用户管理和借阅查询。

各大功能模块又由一些子功能模块构成,其功能框图如下。

三、数据库结构1、读者类别表(ReaderType)2、读者信息表(Reader)3、图书信息表(Book)4、借阅信息表(Borrow)四、功能模块图书管理用户管理借阅查询五、界面设计1、登入窗口2、图书管理窗口3、用户管理窗口4、系统管理窗口5、借阅信息窗口6、图书借阅窗口7、还书窗口8、个人信息修改窗口六、实现代码1、登入代码int right=1;QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");QString strDatabaseName=QString("DRIVER={SQLServer};SERVER=TERRY;Database=book;uid=tt;pwd=123");db.setDatabaseName(strDatabaseName);db.setPort(1433);bool ok=db.open();if(ok){QSqlQuery query;query.exec(tr("select 用户编号,用户姓名,用户密码,用户类别 from users"));if (!query.isActive()){QMessageBox tempMsgBox(QMessageBox::Warning,tr("查找用户失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{while(query.next()){this->rid=query.value(0).toString();QString name=query.value(1).toString();QString passward=query.value(2).toString();this->type=query.value(3).toString();if(this->lineEdit0->text()==name&&this->lineEdit1->text()==passw ard){right=0;if(type=="1"){managesystem *w1=new managesystem;w1->rid=this->rid;w1->type=this->type;w1->show();this->close();}else if(type=="2"){manageusers *w2=new manageusers;w2->rid=this->rid;w2->type=this->type;w2->show();this->close();}else if(type=="3"){managebooks *w3=new managebooks;w3->rid=this->rid;w3->type=this->type;w3->show();this->close();}else{reader *w4=new reader;w4->rid=this->rid;w4->type=this->type;w4->show();this->close();}}}if(right){QMessageBox tempMsgBox(QMessageBox::Warning,tr("消息"),tr("用户名或密码错误,请重新输入!"),QMessageBox::Ok);tempMsgBox.exec();}else{QMessageBoxtempMsgBox(QMessageBox::Information,tr("消息"),tr("欢迎进入图书管理系统!"),QMessageBox::Ok); tempMsgBox.exec();}}}else{QMessageBox tempMsgBox(QMessageBox::Warning,tr("消息"),tr("数据库连接错误,请重新连接!"),QMessageBox::Ok); tempMsgBox.exec();}2、添加图书代码//构造sql添加语句QString sqlString(tr("insert into books(图书编号,书名,作者,出版社,出版日期,分类名,语言,页数,价格,入馆日期,内容简介,是否在馆)"));sqlString.append(QString("values('")+this->lineEdit0->text()+ QString("',"));sqlString.append(QString("'")+this->lineEdit1->text()+QString ("',"));sqlString.append(QString("'")+this->lineEdit2->text()+QString ("',"));sqlString.append(QString("'")+this->lineEdit3->text()+QString ("',"));sqlString.append(QString("'")+this->lineEdit4->text()+QString ("',"));sqlString.append(QString("'")+this->lineEdit5->text()+QString ("',"));sqlString.append(QString("'")+this->lineEdit6->text()+QString ("',"));sqlString.append(QString("'")+this->lineEdit7->text()+QString ("',"));sqlString.append(QString("'")+this->lineEdit8->text()+QString ("',"));sqlString.append(QString("'")+this->lineEdit9->text()+QString ("',"));sqlString.append(QString("'")+this->lineEdit10->text()+QStrin g("',"))sqlString.append(QString("'")+this->lineEdit11->text()+QStrin g("')"))//执行添加QSqlQuery query;query.exec(sqlString);//显示QSqlTableModel *model=new QSqlTableModel;model->setTable("books");model->select();this->tableView->setModel(model);//判断添加是否成功if (!query.isActive()){QMessageBox tempMsgBox(QMessageBox::Warning,tr("添加失败"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{QMessageBox tempMsgBox(QMessageBox::Information,tr("消息"),tr("添加成功!"),QMessageBox::Ok);tempMsgBox.exec();}3、删除图书代码//构造sql删除语句QString sqlString(tr("delete from books where 图书编号='")); sqlString.append(this->lineEdit0->text()+QString("'"));QSqlQuery query;query.exec(sqlString);//显示QSqlTableModel *model=new QSqlTableModel;model->setTable("books");model->select();this->tableView->setModel(model);//判断删除是否成功if(!query.isActive()){QMessageBox tempMsgBox(QMessageBox::Warning,tr("删除失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{QMessageBox tempMsgBox(QMessageBox::Information,tr("消息"),tr("删除成功!"),QMessageBox::Ok);tempMsgBox.exec();}4、查询图书代码//构造sql查询语句QString sqlString(tr("select 书名,作者,出版社,出版日期,分类名,语言,页数,价格,入馆日期,内容简介,是否在馆 from books where 图书编号='"));sqlString.append(this->lineEdit0->text()+QString("'"));QSqlQuery query;query.exec(sqlString);if (!query.isActive()){QMessageBox tempMsgBox(QMessageBox::Warning,tr("查找图书失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{while(query.next()){this->lineEdit1->setText(query.value(0).toString()); this->lineEdit2->setText(query.value(1).toString()); this->lineEdit3->setText(query.value(2).toString()); this->lineEdit4->setText(query.value(3).toString()); this->lineEdit5->setText(query.value(4).toString()); this->lineEdit6->setText(query.value(5).toString()); this->lineEdit7->setText(query.value(6).toString()); this->lineEdit8->setText(query.value(7).toString()); this->lineEdit9->setText(query.value(8).toString()); this->lineEdit10->setText(query.value(9).toString());this->lineEdit11->setText(query.value(10).toString()); }}5、修改图书代码//构造sql更新语句QString sqlString(tr("update books"));sqlString.append(QString(tr(" set 书名 ='"))+this->lineEdit1->text()+QString("',"));sqlString.append(QString(tr("作者 ='"))+this->lineEdit2->text()+QString("',"));sqlString.append(QString(tr("出版社 ='"))+this->lineEdit3->text()+QString("',"));sqlString.append(QString(tr("出版日期 ='"))+this->lineEdit4->text()+QString("',"));sqlString.append(QString(tr("分类名 ='"))+this->lineEdit5->text()+QString("',"));sqlString.append(QString(tr("语言 ='"))+this->lineEdit6->text()+QString("',"));sqlString.append(QString(tr("页数 ='"))+this->lineEdit7->text()+QString("',"));sqlString.append(QString(tr("价格 ='"))+this->lineEdit8->text()+QString("',"));sqlString.append(QString(tr("入馆日期 ='"))+this->lineEdit9->text()+QString("',"));sqlString.append(QString(tr("内容简介 ='"))+this->lineEdit10->text()+QString("',"));sqlString.append(QString(tr("是否在馆 ='"))+this->lineEdit11->text()+QString("' "));sqlString.append(QString(tr("where 图书编号 ="))+this->lineEdit0->text()+QString(";"));//执行更新QSqlQuery query;query.exec(sqlString);//显示QSqlTableModel *model=new QSqlTableModel;model->setTable("books");model->select();this->tableView->setModel(model);//判断更新是否成功if (!query.isActive()){QMessageBox tempMsgBox(QMessageBox::Warning,tr("更新失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{QMessageBox tempMsgBox(QMessageBox::Information,tr("消息"),tr("更新成功!"),QMessageBox::Ok);tempMsgBox.exec();}6、借阅图书代码int right,isin,haveborrownum,canborrownum,canborrowdays;right=1;//构造sql查询语句QString sqlString(tr("select 是否在馆 from books where 图书编号 ='"));sqlString.append(this->lineEdit0->text()+QString("'"));QSqlQuery query;query.exec(sqlString);if(!query.isActive()){right=0;QMessageBox tempMsgBox(QMessageBox::Warning,tr("数据库连接失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{while(query.next())isin=query.value(0).toInt();}//构造sql查询语句1QString sqlString1(tr("select 已借书数量 from users where 用户编号 ='"));sqlString1.append(rid+QString("'"));QSqlQuery query1;query1.exec(sqlString1);if(!query1.isActive()){right=0;QMessageBox tempMsgBox(QMessageBox::Warning,tr("数据库连接失败!"),stError().text(),QMessageBox::Ok); tempMsgBox.exec();}else{while(query1.next())haveborrownum=query1.value(0).toInt(); }//构造sql查询语句2QString sqlString2(tr("select 可借书数量,可借书天数 from usertype where 用户类别 ='"));sqlString2.append(type+QString("'"));QSqlQuery query2;query2.exec(sqlString2);if(!query2.isActive()){right=0;QMessageBox tempMsgBox(QMessageBox::Warning,tr("数据库连接失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{while(query2.next()){canborrownum=query2.value(0).toInt();canborrowdays=query2.value(1).toInt();}}if(isin==0){right=0;QMessageBox tempMsgBox(QMessageBox::Information,tr("消息"),tr("本图书已经借出,请借阅其他书籍!"),QMessageBox::Ok);tempMsgBox.exec();}if(haveborrownum>=canborrownum){right=0;QMessageBox tempMsgBox(QMessageBox::Information,tr("消息"),tr("您图书已经借满,请还书后再借!"),QMessageBox::Ok); tempMsgBox.exec();}if(right){QDateTime dateTime = QDateTime::currentDateTime();QDateTime dateTime1;dateTime1=dateTime.addDays(canborrowdays);QString strtime=dateTime1.time().toString();int y=dateTime.date().year();int m=dateTime.date().month();int d=dateTime.date().day();int y1=dateTime1.date().year();int m1=dateTime1.date().month();int d1=dateTime1.date().day();QStringdate1(QString::number(y)+"-"+QString::number(m)+"-"+QString::number(d)+" "+strtime);QStringdate2(QString::number(y1)+"-"+QString::number(m1)+"-"+QString::number(d1)+" "+strtime);//this->lineEdit1->setText(date1);//构造sql添加语句3QString sqlString3(tr("insert into borrow(图书编号,用户编号,续借次数,借书日期,应还日期,超期天数,超期金额)"));sqlString3.append(QString("values('")+this->lineEdit0->text()+QString("',"));sqlString3.append(QString("'")+rid+QString("','0',"));sqlString3.append(QString("'")+QString(date1)+QString("',"));sqlString3.append(QString("'")+QString(date2)+QString("','0','0')"));sqlString3.append(QString("'")+date2+QString("','0','0')"));//执行添加QSqlQuery query3;query3.exec(sqlString3);//判断添加是否成功if (!query3.isActive()){QMessageBox tempMsgBox(QMessageBox::Warning,tr("借阅失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{QMessageBox tempMsgBox(QMessageBox::Information,tr("消息"),tr("借阅成功!"),QMessageBox::Ok);tempMsgBox.exec();isin=0;haveborrownum+=1;//构造sql更新语句QString sqlString(tr("update books"));sqlString.append(QString(tr(" set 是否在馆 ='"))+QString::number(isin)+QString("'"));sqlString.append(QString(tr("where 图书编号 ="))+this->lineEdit0->text()+QString(";"));//执行更新QSqlQuery query;query.exec(sqlString);//显示this->lineEdit11->setText("0");QSqlTableModel *model=new QSqlTableModel;model->setTable("books");model->select();this->tableView->setModel(model);//判断更新是否成功if (!query.isActive()){QMessageBox tempMsgBox(QMessageBox::Warning,tr("更新图书失败!"),stError().text(),QMessageBox::Ok); tempMsgBox.exec();}else{//构造sql更新语句QString sqlString(tr("update users"));sqlString.append(QString(tr(" set 已借书数量 ='"))+QString::number(haveborrownum)+QString("'"));sqlString.append(QString(tr("where 用户编号 ="))+rid+QString(";"));//执行更新QSqlQuery query;query.exec(sqlString);//判断更新是否成功if (!query.isActive()){QMessageBoxtempMsgBox(QMessageBox::Warning,tr("更新用户失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}}}}7、续借图书代码int right=1;int borrowtimes,canborrowtimes,canborrowdays;QString shouldreturndays;//构造sql查询语句QString sqlString(tr("select 续借次数,可续借的次数,可借书天数,应还日期 from borrowagainview where 图书编号 ="));sqlString.append(this->lineEdit0->text()+QString(" "));QSqlQuery query;query.exec(sqlString);if (!query.isActive()){right=0;QMessageBox tempMsgBox(QMessageBox::Warning,tr("续借失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{while(query.next()){borrowtimes=query.value(0).toInt();canborrowtimes=query.value(1).toInt();canborrowdays=query.value(2).toInt();shouldreturndays=query.value(3).toString();}}if(borrowtimes>=canborrowtimes){right=0;QMessageBox tempMsgBox(QMessageBox::Information,tr("续借失败"),tr("续借次数已满,不能续借!"),QMessageBox::Ok);tempMsgBox.exec();}if(right){QDateTime dateTime = QDateTime::currentDateTime();QDateTime dateTime1;dateTime1=dateTime.addDays(canborrowdays);QString strtime=dateTime1.time().toString();int y1=dateTime1.date().year();int m1=dateTime1.date().month();int d1=dateTime1.date().day();QStringdate2(QString::number(y1)+"-"+QString::number(m1)+"-"+QString::number(d1)+" "+strtime);borrowtimes+=1;//构造sql更新语句QString sqlString(tr("update borrowagainview"));sqlString.append(QString(tr(" set 续借次数 ='"))+QString::number(borrowtimes)+QString("',"));sqlString.append(QString(tr(" 应还日期 ='"))+QString(date2)+QString("'"));sqlString.append(QString(tr("where 图书编号 ='"))+this->lineEdit0->text()+QString("'"));//执行更新QSqlQuery query;query.exec(sqlString);//显示QSqlTableModel *model=new QSqlTableModel;model->setTable("borrowedview");model->select();this->tableView->setModel(model);//判断更新是否成功if (!query.isActive()){QMessageBox tempMsgBox(QMessageBox::Warning,tr("续借失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{QMessageBoxtempMsgBox(QMessageBox::Information,tr("消息"),tr("续借成功!"),QMessageBox::Ok);tempMsgBox.exec();}}}8、还书代码int haveborrownum;//构造sql查询语句QString sqlString1(tr("select 已借书数量 from borrowagainview where 图书编号 = '"));sqlString1.append(this->lineEdit0->text()+QString("'"));QSqlQuery query1;query1.exec(sqlString1);if (!query1.isActive()){QMessageBox tempMsgBox(QMessageBox::Warning,tr("查询失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{while(query1.next())haveborrownum=query1.value(0).toInt(); }haveborrownum-=1;//构造sql更新语句QString sqlString(tr("update books"));sqlString.append(QString(tr(" set 是否在馆 ='"))+"1"+QString("'"));sqlString.append(QString(tr("where 图书编号 ="))+this->lineEdit0->text()+QString(";"));//执行更新QSqlQuery query;query.exec(sqlString);//判断更新是否成功if (!query.isActive()){QMessageBox tempMsgBox(QMessageBox::Warning,tr("更新图书失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{//构造sql更新语句QString sqlString(tr("update users"));sqlString.append(QString(tr(" set 已借书数量 ='"))+QString::number(haveborrownum)+QString("'"));sqlString.append(QString(tr("where 用户编号 ="))+rid+QString(";"));//执行更新QSqlQuery query;query.exec(sqlString);//判断更新是否成功if (!query.isActive()){QMessageBox tempMsgBox(QMessageBox::Warning,tr("更新用户失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{//构造sql删除语句QString sqlString(tr("delete from borrow where 图书编号 = '"));sqlString.append(this->lineEdit0->text()+QString("'"));QSqlQuery query;query.exec(sqlString);//显示this->display();//判断删除是否成功if(!query.isActive()){QMessageBox tempMsgBox(QMessageBox::Warning,tr("删除借阅表失败!"),stError().text(),QMessageBox::Ok);tempMsgBox.exec();}else{QMessageBoxtempMsgBox(QMessageBox::Information,tr("消息"),tr("还书成功!"),QMessageBox::Ok);tempMsgBox.exec();}}七、总结其实在这次课设的过程中我发现了自己的很多不足,很多的知识不是没有掌握,是根本就不理解也不去研究,在做课设的过程中有好多的知识都是现学现用,还有好多是在网络上面找到的,通过同学的帮助,与老师的指导在最后才做出来一个半成品,有点觉得自己没有用,但是在课设的过程我也学会了很多的东西。

数据结构课程设计报告图书馆管理系统

数据结构课程设计报告图书馆管理系统
创建读者类别表
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

数据库课程设计报告图书管理系统

数据库课程设计报告图书管理系统

数据库原理课程设计报告书课题名图书信息管理系统指导教师日期目录一、前言 (2)二、概述 (2)2.1开发目的 (2)三、需求分析 (2)3.1可行性分析 (2)3.2系统目标 (3)3.3系统应该具备的功能 (3)3.4系统结构图 (4)四、概念设计 (5)五、逻辑设计 (9)六、物理设计 (9)5.1表命令 (9)5.2表结构图 (13)七、代码实现 (13)6.1数据库连接 (13)6.2增加一条图书记录 (14)6.3删除一条图书记录 (16)6.4修改一条图书记录 (17)6.5查询一条图书记录 (18)八、结束语 (22)前言近年来,随着我国市场经济的迅速发展和人们生活水平的不断提高,以及计算机的普及使用,图书馆藏书的数目逐渐增大,这也是挑战了图书管理方面的技术,以前的人工管理方式已经不再适应现在的环境,取而代之的是先进的图书管理系统,提高了图书馆的工作效率,为想要借书和还书的人提供更好的服务。

1、概述1.1 开发目的图书信息管理工作面对大量的可模块化处理的信息,是当今信息革命的一个重要阵地。

我们小组开发图书管理信息系统就是采用现代化的信息管理方式代替手工管理方式,提高图书管理工作效率,做到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校、社会服务。

2、需求分析2.1可行性分析2.1.1技术可行性就技术力量来说,我们小组可以完成此次开发工作。

开发过程中会出现许多问题,有我们预想之中的,也有一些没有在我们预想中,但我们有信心克服一切困难。

我们小组各成员已经学习了MySQL,SQL,对网络技术和操作系统也有系统的了解,熟悉计算机原理,能解决常见的硬件故障和硬件选择。

2.1.2经济可行性目标系统开发需求比较低,加上具有成熟的软硬件环境,所以在软硬件的支出上十分有限。

而且,目标系统并不是十分的复杂,开发的周期较短,人员有限。

当系统开发完实际运行后,将很大程度上提高计算机的功能,在为使用者带来便利的同时也为系统的进一步推广创造了条件。

数据结构课程设计报告——图书管理系统

数据结构课程设计报告——图书管理系统

课程设计报告课设课题:课程设计——图书管理系统学院:电子信息学院专业:网络工程姓名:班级学号: BX1213指导教师:张艳报告日期: 2013.12.12目录一、需求分析 (1)1.1 系统开发背景和意义 (1)1.2 设计题目与要求 (1)二、总体结构设计 (2)三、各子模块设计 (4)3.1 初始化图书信息 (4)3.2 系统主界面 (5)3.3 采编入库 (6)3.4 输入读者信息 (6)3.5 借阅图书 (7)3.6 归还图书 (10)3.7 查询图书信息 (11)3.8 查询读者信息 (12)四、程序设计调试情况分析 (13)五、测试结果 (16)5.1 欢迎界面 (16)5.2 初始化图书信息 (16)5.3 系统主界面 (17)5.4 采编入库 (17)5.5 输入读者信息 (19)5.6 借阅图书 (19)5.7 归还图书 (21)5.8 查询图书信息 (21)5.9 查询读者信息 (23)5.10 保存文件,退出 (24)六、总结 (25)七、参考文献 (27)八、附录(源代码) (28)一、需求分析1.1 系统开发背景和意义图书管理作为计算机应用的一个分支,有着手工管理无法比拟的优点,如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。

这些优点能够极大地提高图书管理的效率。

因此,开发一套能够为用户提供充足的信息和快捷的查询手段的图书管理系统,将是非常必要的,也是十分及时的。

图书管理系统需要满足来自图书馆工作人员、普通用户和借阅者三方面人员的需求。

图书馆工作人员对图书借阅者的借阅及还书要求进行操作,同时还可通过图书编号等查询相应的借阅情况;普通用户的需求是查询图书馆所存的图书的相关情况;图书借阅者的需求是查看自己的相关信息及查询自己的借阅情况。

1.2 设计题目与要求【问题描述】设计一个计算机管理系统完成图书管理基本业务。

【基本要求】1) 每种书的登记内容包括书号、书名、着作者、现存量和库存量;2) 对书号建立索引表(线性表)以提高查找效率;3) 系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;*归还:注销对借阅者的登记,改变该书的现存量。

数据结构图书管理系统实验报告

数据结构图书管理系统实验报告

竭诚为您提供优质文档/双击可除数据结构图书管理系统实验报告篇一:数据结构-图书管理系统实验报告数据结构课程设计报告课程名称_________题目名称学生学院专业班级学号学生姓名指导教师20XX年7月8日一、需求分析1.图书管理系统中图书管理模块包括图书类型定义:书号、现存量、总存量,出版时间为整型,定价为浮点型,书名、著者名为字符型,借阅指针、预约指针为读者类型;读者类型定义:证号为整型、姓名为字符型,另外借阅类型和预约类型组合成其中的共用体类型。

b树(2-3树)类型定义:关键字个数和关键字数组为整型、另外还有指向双亲的指针、指向子树的指针、记录单元指针;b树查找结果类型定义:节点指针、关键字序号和查找标志变量为整型。

2.演示程序以用户和计算机的对话方式进行,在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在后面。

该演示系统,没有使用文件,全部数据放在内存存放。

四项基本业务都以书号为关键字进行的,采用了b树(2-3树)对书号建立索引,以提高效率。

3.图书管理系统实现功能:①采编入库:新书购入,将书号、书名、著者、册数、出版时间添加入图书账目中去,如果这种书在帐中已有,则只将总库存量增加,每新增一个书号则以凹入表的形式显示b树现状。

②清除库存:实现某本书的全部信息删除操作,每清除一个书号则已以凹入表的形式显示b树现状。

③图书借阅:如果书的库存量大于零时则执行出借,登记借阅者的图书证号和姓名,系统自动抓取当前借阅时间和计算归还时间。

④图书预约:如果某书库存为零,则记录预约者姓名和证号,系统自动抓取当前预约时间和取书时间。

⑤图书归还:注销借阅者信息,并改变该书的现存量。

⑥作者专区:输入作者名字,系统将查找相应作者全部著作并显示出来。

⑦图书信息:可以根据书号查阅此书基本信息、借阅信息和预约信息,亦可以查找全部图书基本信息。

二、概要设计1.抽象数据类型b树定义:ADTbTree{数据对象:D是具有相同特性的数据元素的集合。

数据结构课程设计:图书管理系统报告书

数据结构课程设计:图书管理系统报告书

数据结构课程设计报告书班级学号专业姓名课题描述:本次数据结构课程设计内容是:设计一个计算机管理系统完成图书管理基本业务。

随着社会的发展,技术的进步,各种管理业务越来越趋于自动化。

而图书馆在日常运营中,面对大量书籍,读者信息以及两者间相互联系产生的借书还书信息,而人工记录的方法不仅效率低而且极容易出现错误,大大影响了图书馆的日常管理工作。

图书管理系统就是为了解决人工管理图书的问题,实现图书馆图书自动化的管理。

本系统需要实现图书基本信息管理的功能,具体涉及到新进图书基本信息的录入,图书基本信息的查询,借书人的基本信息的注册以及借书,还书等几项基本功能。

一、需求分析:图书管理系统将实现以下几个基本功能,基本要求为:1. 新进图书基本信息的录入:当图书馆新引进一批新书时,图书管理员需要将这些图书的基本信息录入管理系统中,具体包括图书书号,书名,著作者,现存量和库存量。

2. 图书基本信息的查询:读者可以根据自己的情况在本系统中查询图书的基本信息,从而便于自己借阅图书。

3. 借阅图书:在借阅图书之前没有在本图书馆进行注册的读者,是不能够借阅图书的,因而在读者在借阅图书之前需要登记借阅者的书证号,以及归还日期,然后系统再进行改变现存量等相关操作。

4. 归还图书:根据读者归还图书的日期,本系统会注销对借阅者的登记,然后进行改变该书的现存量操作。

5. 退出:当读者在图书馆中结束其业务时,则会在系统的提示下退出操作。

二、总体结构设计:1. 系统设计功能模块图图2.1系统设计功能模块图2. 系统模块说明:图书入库模块:图书名称,作者,入库数量;查询库存模块:显示当前库存书的编号,书名及作者;借阅图书模块:输入所借阅图书的编号,如果存在则会提示读者输入借书证号,提示借阅成功,如果图书不存在或者已借出,则提示借阅失败;查询借阅模块:显示所借书人的借书证号,借阅书的书名,编号以及归还日期;归还图书模块:输入借书证号和图书编号,进行还书操作。

(完整word版)数据结构课程设计图书管理系统报告(word文档良心出品)

(完整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 循环中的参数稍微的进行了修改,然后排序的结果就能出来,我发现其实那个结果其实我马虎造成的,以后一定要避免这种情况的发生。

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

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

图书管理系统数据结构课程设计报告目录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)可能比写函数更加简短。

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

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

数据结构图书管理系统课程设计报告IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】一、设计题目与要求【问题描述】设计一个计算机管理系统完成图书管理基本业务。

【基本要求】(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;算法描述:进入系统后首先进行图书初始化,输入图书的信息。

图书管理系统(含源代码)c语言_数据结构课程设计报告

图书管理系统(含源代码)c语言_数据结构课程设计报告

数据结构大作业图书管理系统工程管理121279044 伍杨目录一、题目要求 (2)二、总体设计 (2)三、编码实现 (3)1) 定义图书结构体 (3)2) 登记操作 (3)3) 查看操作 (7)4) 删除操作 (10)5) Main函数 (17)四、调试与测试 (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'||c hoice=='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,bookname,&bo rrowdate,&returndate);printf("%-5s %-5s %ld %-5s %ld %-5s %ld %ld\n",name,classes,number,telephone,NO,bookname, 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.booknam e,&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'||c hoice=='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.telep hone,&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.nu mber,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.tele phone,&p.NO,p.bookname,&p.borrowdate,&p.returndate);fprintf(fp3,"%s %s %d %s %d %s %d %d",,p.classes,p.nu mber,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,打开执行文件后按提示操作即可。

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

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

《数据结构》课程设计报告书一.课程设计题目图书借阅管理系统二.课程设计内容实现图书管理信息系统的设计(一)管理员功能:①登录:输入管理员密码,若密码错误则不得执行管理员操作。

②添加新书:增加新的图书资料,同时需检查新书的图书编号是否已存在于原图书资料中,若已存在则应取消添加或提示重新输入。

③修改图书:通过编号查询该图书资料,若该编号存在,则显示已有信息,允许修改,否则提示无该图书信息。

④删除图书:通过编号查询该图书资料,若该编号存在,则显示已有信息,允许删除,否则提示无该图书信息。

删除对象包括该图书资料以及“图书状态”和“借阅人”中与此书相关的所有记录。

⑤查找图书:A.按书号查找:通过编号查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

B.按书名查找:通过书名查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

C.按作者查找:通过作者查询该图书资料,若该编号存在,则显示图书信息,否则提示无该图书信息。

⑥查看全部图书:显示所有图书资料,包括书号、书名、作者、状态和借阅人等信息。

⑦修改读者:通过姓名查询该读者信息,若该姓名存在,则显示已有信息,允许修改,否则提示无该读者信息。

⑧删除读者:通过姓名查询该读者信息,若该姓名存在,则显示已有信息,允许删除,否则提示无该读者信息。

删除对象包括该读者姓名、班级、电话以及“图书状态”和“借阅人”中与此人相关的所有记录。

⑨查看所有读者:显示所有读者资料,包括姓名、班级、电话等信息。

(二)读者功能:①登录:输入读者姓名,若未经注册则不得进入读者服务界面。

②注册:新用户经注册方可登录系统并使用读者服务功能。

③借书:A.输入所需图书编号,判断该编号是否存在,若不存在则提示重新输入。

B.若所输入图书编号存在,则判断该书籍是否已被借出,若已借则不允许执行借书操作。

C.若所输入图书未借,则提示输入读者姓名,判断所输入读者姓名是否存在,若不存在则提示重新输入。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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(); /*调用主菜单*/}七、运行结果和调试分析八、课程设计总结通过这次的实验,我了解了图书管理系统的流程,之前以用户的角度去认识图书管理,现在站在设计者的角度去考虑问题,并且根据实际情况设计了图书管理系统的模块,对此有了更深刻的理解。

相关文档
最新文档