数据结构与算法基础项目报告.docx

上传人:b****2 文档编号:23232399 上传时间:2023-05-15 格式:DOCX 页数:29 大小:565.67KB
下载 相关 举报
数据结构与算法基础项目报告.docx_第1页
第1页 / 共29页
数据结构与算法基础项目报告.docx_第2页
第2页 / 共29页
数据结构与算法基础项目报告.docx_第3页
第3页 / 共29页
数据结构与算法基础项目报告.docx_第4页
第4页 / 共29页
数据结构与算法基础项目报告.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

数据结构与算法基础项目报告.docx

《数据结构与算法基础项目报告.docx》由会员分享,可在线阅读,更多相关《数据结构与算法基础项目报告.docx(29页珍藏版)》请在冰豆网上搜索。

数据结构与算法基础项目报告.docx

数据结构与算法基础项目报告

《数据结构与算法基础》课程项目

实施方案

题目:

虚拟智慧图书馆

组号:

任课教师:

组长:

成员:

成员:

成员:

成员:

联系方式:

 

 

一、项目要求

1.1设计要求

模拟现有图书馆的借阅、续借、归还,图书入库、出库,查询、排序等功能,实现电子图书馆的智慧综合管理,要求:

(1)掌握抽象数据类型的定义;

(2)实现数据结构查找算法;

(3)实现数据结构排序算法;

(4)使用简单数据库操作;

(5)友好、易操作的用户交互界面。

1.2评分依据

(1)功能实现;

(2)性能指标;

(3)工程规范(规范、安全性、可靠性、性价比等);

(4)理论水平;

(5)团队分工合作情况。

1.3实验室提供条件

(1)微机;

(2)C/C++,C#/JAVA等。

 

二、课程项目实施方案

2.1设计思想

本虚拟智慧图书馆系统软件针对管理人员与用户两个群体,从需求出发,设计图书信息录入、图书信息管理、借阅图书管理等系列模块。

开发工具是MicrosoftVisualC++和Win32界面。

2.1.1功能结构图

2.1.2系统模块

(1)管理员登录系统:

实现对图书在库及借阅信息、学生信息的管理

(2)学生登陆系统:

实现对图书查询及借阅功能的处理

2.1.3开发环境

(1)MicrosoftVisualC++(简称VisualC++、MSVC、VC++或VC)是微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言。

(2)微软基础类库(英语:

MicrosoftFoundationClasses,简称MFC)是微软公司提供的一个类库(classlibraries),以C++类的形式封装了WindowsAPI,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。

其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

2.2关键技术

(1)界面的设计与实现

(2)存储、删除、查找、保存等处理数据

三、项目的制作过程

3.1原理分析

3.1.1从文件中读出信息并建立单链表

structtushu*head=NULL,*p,*p1,*p2;

if((fp=fopen("tushu_list.txt","r"))==NULL)/*先安全打开目录文件*/

{

printf("Fileopenerror!

\n");

exit(0);

}

while(!

feof(fp))/*读取并创建链表*/

{

p=(structtushu*)malloc(sizeof(structtushu));

p->price=-1;

fscanf(fp,"%s%s%s%s%s%lf%lf",p->num,p->name,p->writer,p->press,p->kind,&p->time,&p->price);

if(p->price==-1)

{

free(p);

break;

}

if(head==NULL)

{

head=p;

p1=p;

p1->next=NULL;

}

else

{

p1->next=p;

p2=p1;

p1=p;

p1->next=NULL;

}

}

fclose(fp);

returnhead;

3.1.2遍历并写入文件

for(p1=head;p1!

=NULL;p1=p1->next)/*遍历*/

fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%.0lf\t%lf\n",p1->num,p1->name,p1->writer,p1->press,p1->kind,p1->time,p1->price);/*将图书信息写入文件*/

fclose(fp);

3.1.3链表插入(图书添加)

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

head=p1;

p1->price=-1;

while(i!

=1)

{

printf("请输入编号,以'#'结束\n");

scanf("%s",p1->num);

if(strcmp(p1->num,"#")==0)

i=1;

while(i!

=1)

{

printf("请依次输入书名作者出版社类别出版时间价格\n");

scanf("%s%s%s%s%lf%lf",p1->name,p1->writer,p1->press,p1->kind,&p1->time,&p1->price);

p2=p1;

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

p2->next=p1;

break;

}

}

if(p1->price!

=-1)

p2->next=NULL;

else

head=NULL;

3.1.4链表查找

(以书名查找为例)

voidFindofname(structtushu*head)/*按书名查询图书*/

{

inti=0,n;

charb[20];

structtushu*p;

p=head;

printf("\n请输入要查询的书籍名称:

");

scanf("%s",b);

while(p!

=NULL)

{

if(strcmp(p->name,b)==0)

{

printf("\n编号书名作者出版社类别出版时间价格\n");

printf("%-10s%-20s%-20s%-20s%-20s%-15.0lf%-10.2lf\n",p->num,p->name,p->writer,p->press,p->kind,p->time,p->price);

i++;

}

p=p->next;

}

if(i==0)

{

system("cls");

printf("\n对不起!

没有找到名为《%s》的书籍!

\n",b);

system("pause");

}

printf("\n\n\n\t\t\t是否继续查找书籍信息?

(1.是/其他.返回):

");

scanf("%d",&n);

if(n==1)

gfind();

else

{

system("cls");

menu();

}

}

3.1.5排序(冒泡排序)

voidSort_num(structtushu*head)

{

structtushu*p1,*p2,*p3,*p4=NULL,*p5;

intx;

for(p1=head;p1->next!

=p4;)//对链表进行从大到小排序(这里用冒泡法)

//p1使之总是指向头结点,p4使之总是指向已排序好的最前面的结点

//p3作为中介,保存p2的上一个结点

{

for(p2=p1;p2->next!

=p4;)

{

if(strcmp(p2->num,p2->next->num)>0)//p2的值大于p2->next的值,交换

{

if(p2==p1)//头结点要交换

{

p1=p2->next;

p2->next=p1->next;

p1->next=p2;

p3=p1;

}

else

{

p3->next=p2->next;

p3=p2->next;

p2->next=p3->next;

p3->next=p2;

}

}

else//不需要交换,则p2、p3前进1位

{

p3=p2;

p2=p2->next;

}

}

p4=p2;

}

for(p5=p1;p5!

=NULL;p5=p5->next)

printf("%-10s%-20s%-20s%-20s%-20s%-15.0lf%-10.2lf\n",p5->num,p5->name,p5->writer,p5->press,p5->kind,p5->time,p5->price);

system("pause");

system("cls");

printf("\n\n\n\t\t\t是否保存书籍信息?

(1.是/2.否(返回)):

");

scanf("%d",&x);

if(x==1)

fprint_(p1);

else

system("cls");

printf("\n\n\n\t\t\t没有被保存到文件!

\n\n\n\n");

system("pause");

system("cls");

menu();

return;

}

3.1.6删除结点

voidDelete(structtushu*head,charm[15])

{

structtushu*ptr1,*ptr2;

intx,n=0;

if((strcmp(head->num,m)==0)&&head->next==NULL)

{

printf("删除成功!

\n");

system("pause");

system("cls");

head=NULL;

fprint_(head);

}

while((strcmp(head->num,m)==0)&&head!

=NULL)

{

ptr2=head;

head=head->next;

n++;

free(ptr2);

}

if(head==NULL)

{

printf("已无书籍信息!

\n");

menu();

}

ptr1=head;

ptr2=head->next;

while(ptr2!

=NULL){

if(strcmp(ptr2->num,m)==0)

{

ptr1->next=ptr2->next;

n++;

free(ptr2);

}

else

ptr1=ptr2;

ptr2=ptr1->next;

}

if(n==0)

{

system("cls");

printf("没有删除你要删除的书籍!

\n");

system("pause");

system("cls");

menu();

return;

}

else

printf("\n编号为‘%s’目标书籍已被删除,并保存至文件!

\n",m);

printf("\n\n\n\t\t\t是否保存书籍信息?

(1.是/2.否(返回)):

");

scanf("%d",&x);

if(x==1)

fprint_(head);

else

system("cls");

printf("\n\n\n\t\t\t并没有被保存到文件!

\n\n\n\n");

system("pause");

system("cls");

menu();

return;

}

3.1.7借书

voidborrow(structtushu*head)//借书

{

structtushu*ptr1,*ptr2;

charm[15];

intn=0;

printf("请输入你借书籍的编号!

\n");

scanf("%s",m);

if((strcmp(head->num,m)==0)&&head->next==NULL)

{

printf("借书成功!

\n");

system("pause");

system("cls");

head=NULL;

jfprint_(head);

}

while((strcmp(head->num,m)==0)&&head!

=NULL)

{

ptr2=head;

head=head->next;

free(ptr2);

n++;

}

if(head==NULL)

{

system("pause");

system("cls");

printf("无书籍信息!

\n");

xmenu();

}

ptr1=head;

ptr2=head->next;

while(ptr2!

=NULL)

{

if(strcmp(ptr2->num,m)==0)

{

ptr1->next=ptr2->next;

free(ptr2);

n++;

}

else

ptr1=ptr2;

ptr2=ptr1->next;

}

if(n==0)

{

printf("无书籍信息!

\n");

system("pause");

system("cls");

xmenu();

}

else

printf("借书成功\n");

system("pause");

system("cls");

jfprint_(head);

}

3.1.8还书

voidhuanshu()

{

structtushu*p1,*p2,*head,*ptr;

charnum;

intx,i=0;

intk=0;

system("cls");

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

head=p1;

p1->price=-1;

while(i!

=1)

{

printf("请输入还书编号,以'#'结束\n");

scanf("%s",p1->num);

if(strcmp(p1->num,"#")==0)

i=1;

while(i!

=1)

{

printf("请依次输入书名作者出版社类别出版时间价格\n");

scanf("%s%s%s%s%lf%lf",p1->name,p1->writer,p1->press,p1->kind,&p1->time,&p1->price);

k++;

p2=p1;

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

p2->next=p1;

break;

}

}

if(p1->price!

=-1)

p2->next=NULL;

else

{

head=NULL;

printf("还书失败!

\n");

system("pause");

system("cls");

xmenu();

}

system("cls");

printf("\n\n\n\t\t\t是否确认?

(1.是/2.否):

");

scanf("%d",&x);

printf("\n\n还书成功,你共还了%d本书!

\n\n\n",k);

system("pause");

system("cls");

if(x==1)

hfprint(head);

else

system("cls");

printf("\n\n\n\t\t\t还书没有成功!

\n\n\n\n");

system("pause");

system("cls");

xmenu();

}

3.2界面设计

3.2.1初始选择界面

用户可以选择不同的系统登录来完成不同的操作

3.2.2登陆界面

登陆界面中,用户分别输入“用户名”和“密码”进行登录,限制三次错误,用户名与密码不匹配提示重新输入。

 

3.2.3管理员模式

管理员模式下,分别有基础设置、查询出借书籍、浏览图书、统计图书数目、查询在库书籍、添加入库、排序书籍、修改、删除、修改账号及密码、学生信息等功能。

查询在库书籍

统计图书数目

可根据书名、作者和类别进行图书查找

可根据时间、价格、编号进行排序,下例如:

由价格排序

排序后可保存至图书信息文件中

存书入库操作

保存完成之后的tushu_list文件里可以看到新保存的书籍信息

同样,使用修改和删除也可以修改图书库信息

学生的学号和密码可以通过管理员模式查询

管理员的帐号和密码可修改

3.2.4学生模式

学生模式下,分别有基础设置、借阅信息查看、浏览图书、查询、借书、还书、修改密码等功能

学生系统下浏览、查询图书与管理员系统下相同

学生可输入编号进行借阅书籍

如果书籍编号错误或者已被借出,则显示借阅失败

学生系统也可以修改密码(图)

3.3mfc版本实现

3.3.1主界面显示

3.3.2图书查询界面

图书查询可以通过对图书编号的查询显示书籍的信息,同时可显示所有书籍的数据库信息。

3.3.3借书系统

借书系统会显示读者信息,图书信息等。

3.3.4还书界面

还书界面会显示图书的基本信息,图书归还信息等。

3.3.5读者信息查询

3.4mfc版本

3.4.1主页界面

主页面以上海大学图书馆的照片作为背景

3.4.2登录界面

可在登录界面选择学生或者管理员登录,输入账号和密码进行登录。

同时可实现新用户的注册,当忘记密码时可以进行密码的找回。

3.4.3读者操作界面

读者操作界面可以实现证件信息显示,已借书刊显示,和修改密码信息的窗口,同时可以实现书籍的检索。

3.4.4管理员操作界面

管理员界面可以实现对书记的管理包括:

添加书籍,检索书籍,删除书籍,显示所有书籍。

同时可以实现对于读者的信息管理:

检索读者,修改读者数据,删除读者等。

三、项目的结果分析

预期目标基本实现。

通过几周不懈努力,项目已经初步成型。

由于时间关系,我们的项目并没有完全到位。

该系统功能范围比较窄,只简单的包括对图书信息和读者信息的增加、删除、修改、查询,读者借阅和归还的管理,无较大的商业价值,但该系统优点在于简洁明了,容易上手,操作简单规范,适用于任何级别的使用者使用该系统,该系统又过于简单,无法全面的对图书信息进行管理,适应范围局限于小型图书馆,无法满足大中型图书馆的需求。

四、心得与感受

首先介绍我们项团的分工:

组长翟梦娟负责分配任务,统领项目任务的进程以及中期报告和程序的编写;刘芝浍、阎瑾负责最终报告的编写记录程序查错;组员陆嘉豪、杨震威负责主要程序的编写和统合。

通过这次的系统设计,让我们对数据结构有了更加深刻了解,通过网上搜集资料,图书馆资料不断的查询总结,完成了这次系统设计,提升了分析问题的能力和思考问题的逻辑能力。

从这次设计学到的东西,相信会对我们日后的学习作起到很大的指导作用。

这次综合模拟实习,充分的把数据结构与我们以前学习的C语言融会贯通,并且整个设计中学到了许多以前在课堂上面学不到的知识,很大程度的加强了自己的实践能力。

我们组主要是运用C语言进行编程,发现在我们的能力范围内通过C语言编程可以实现的功能最完全,而且C语言能够实现信息的及时更新。

但是我们发现仅仅通过C语音设计出的界面没有足够的完美。

所以好奇心和好学心驱使我们继续进行资料的查找。

通过查阅资料我们发现通过使用mfc可以构造比较完美的界面(如图中所示),而且能够实现界面的美化的同时优化C语言设计中存在的部分不足。

比如使用C语言设计很难实现与数据库的联动,这就大大限制了我们设计系统的适用范围。

但是给出的第一个mfc编程能够实现数据库的查询等,十分的方便。

但是囿于所学的只是限制和时间的限制,我们目前并不能够完全的在保证界面美化的同时,实现项目设计要求。

不能完成联动,这也是我们的美中不足。

但是我们的采用展示的C语言版本,完美的完成了项目设计要求中的功能,这也是令我们最满意的地方。

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

当前位置:首页 > PPT模板 > 简洁抽象

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

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