图书馆Word格式.docx
《图书馆Word格式.docx》由会员分享,可在线阅读,更多相关《图书馆Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
(2)学生信息包括学号,姓名,班级,在借册数,已还册数,违约次数。
(3)借阅信息包括图书ID号,图书名,学号,姓名,借阅日期,应还日期,归还日期。
(4)采用顺序存储线性表表示图书信息。
采用顺序存储线性表表示学生信息。
采用双向循环链表表示借阅信息。
其中一个双向循环链表表示在借的借阅信息,按照图书ID号非递减排序;
另一个双向循环链表表示已还的借阅信息,按照图书ID号非递减排序。
(5)图书信息,学生信息、借阅信息采用文件方式输入。
图书信息示例如下,每条信息一行:
16000001数据结构清华大学出版社2012.1030
学生信息示例如下,每条信息一行:
161340106张三1613401510
借阅信息示例如下,每条信息一行:
标志位1(1表示借阅2表示归还)16000001数据结构161340106张三2013.9.12(借阅时表示借阅日期,应还日期自动生成,根据借阅日期+60天;
归还时表示归还日期,归还日期要在借阅日期之后,应还日期之前,如果超过应还日期,则记录一次违约次数)。
例如借阅:
116000001数据结构161340106张三2013.9.12
归还:
216000001数据结构161340106张三2013.10.20
(6)规定每位学生不能同时借阅同一本书两本及以上。
图书归还后,将该条借阅信息从借阅链表中转移到归还链表中。
(7)要求模拟数据中图书信息至少30本以上,学生信息至少20条以上,借阅信息至少50条以上。
(8)能够统计每一本图书被借阅次数(已还),在借册数。
查询每一位学生的借阅历史明细记录。
统计学生平均借阅次数,最大借阅次数,最少借阅次数。
(9)可在此要求基础上进行功能扩展。
程序运行平台
该程序是用VC++6.0制做的,使用MicrosoftVisualC++6.0运行该程序,具体操作是:
打开MicrosoftVisualC++6.0,菜单栏里点文件→打开工作区→找到“图书管理系统.dsw”这个文件→打开,或者在资源管理器中双击该文件,此时,VC++6.0会自动打开,并载入该系统相关资源,点击Run命令菜单或者或用快捷键Ctrl+F5运行该程序。
trl计分析能_________________________________________________________________________________________________________________________
程序类说明
书籍类记录
public:
intno;
//图书编号
charbname[20];
//图书名称
charautor[20];
//出版厂家
structbook{
//生产厂家
chardate[20];
//日期
};
typedefstruct{
charname[20];
intl;
intltime;
//在借数目
intrtime;
//已还数目
}Book;
读者类
typedefstruct{
charname[10];
//姓名
intnum;
//学号,
intClass;
//班级
intlstu;
//在借册数
intrstu;
//已还册数
intdisobey;
//违约次数
inttimes;
//借阅次数
}stu;
记录模块
typedefintElemType;
typedefchardatatype;
typedefstructnode
{
intfreq;
intno;
//编号
charbname[20];
//书名
//学号
intLDy,LDm,LDd;
//借书日期
intRdy,Rdm,Rdd;
//应还日期
intRDy,RDm,RDd;
//还书日期
structnode*next;
structnode*prior;
}NODE,*DuLinkList;
函数分析:
Voidshow()显示图书库中的书籍信息
intfind()从图书库中查找书籍
voidsetRd(int&
Rdy,int&
Rdm,int&
Rdd,inty,intm,intd)生成应还日期
voidz(inti,SqList&
L,SqList2&
L3,DuLinkList&
L1,DuLinkList&
L2)管理员界面
voidlend(SqList&
L1)使用借书程序
voidrev(SqList&
L2)使用还书程序
voidshowself(char*q)自身借书查询
voidSH(SqList&
L)//书的借阅情况
模块分析
我设计的是一个图书馆管理系统,主要分为3大模块1书籍模块2读者模块3记录模块
该系统主要完成以下功能:
1书籍模块:
1书籍查询
2顺序存储线性表表示图书信息
2读者模块
1学生信息查询
2借书
3还书
4借书查询
3记录模块
1生成应还日期
2建立借书表
3建立还书表
4显示书籍借还情况
系统特点:
系统要能够对相应的数据进行很好的测试,系统的统计对每一种书籍,的名称,编号,作者,数量在文件中进行进行记录;
系统数据的读者的借书情况也在文件中储存,使数据可以很好的储存和调用;
系统统计书籍的基本信息较全面,包括每一种书籍,的名称,编号,作者,数量;
书籍查询
学生信息
借书表
查询学生借阅信息
书籍借阅信息
存在的不足与对策
由于自身能力有限,所以没有设计添加书籍的功能,也没有将新的信息保存在文件中。
在设计过程中由于设计者的编程功底欠缺,因此学习过程较为艰辛,需要解决的问题也比较多。
在以后的学习中,应该循序渐进,不可急于求成,先打好基础,这样才能更好地发展。
体验感悟
在编写程序的过程中,深切的体会到自身能力还有待提高,通过大规模的查询网上资料与相关书籍我学习到了很多以前不知道的编程方法与各种奇妙的函数语句时,提高了自己对程序设计本身的兴趣,更加乐意去学习这方面的新的东西,并在不断地自我挑战中收获着,或知识技能,或信心勇气。
希望自己在今后的学习中可以更好的完善自我。
程序源代码
#ifndefLIBRARY_H
#defineLIBRARY_H
#include<
stdlib.h>
fstream>
iostream>
#include<
string.h>
usingnamespacestd;
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
#defineTRUE1
#defineFALSE0
#defineERROR0
#defineOK1
#defineOVERFLOW-2
//生产厂家
Book*p;
Book*q,*newbase;
Book*elem;
intlength;
intlistsize;
}SqList;
intIistList_Sq(SqList&
L)//构造一个空线性表L
L.elem=(Book*)malloc(LIST_INIT_SIZE*sizeof(Book));
if(!
L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
returnOK;
}
intIistDelete_Sq(SqList&
L,inti,Book&
e){//在顺序线性表L中删除第i个元素,并返回e
if((i<
1)||(i>
L.length))returnERROR;
p=&
(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
for(++p;
p<
=q;
++p)*(p-1)=*p;
--L.length;
intIistInsert_Sq(SqList&
L,inti,Booke){//在顺序线性表L中第i个位置之前插入新的元素e
if(i<
1)returnERROR;
if(L.length>
=L.listsize){
newbase=(Book*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(Book));
if(!
newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&
for(p=&
(L.elem[L.length-1]);
p>
--p)*(p+1)=*p;
*q=e;
++L.length;
voidSET(SqList&
L)
{
Bookq;
inti=1;
FILE*fp;
charc;
if((fp=fopen("
a.txt"
"
r"
))==NULL)
{
cout<
<
"
文件打开失败!
\n"
;
exit(0);
do{
fscanf(fp,"
%d%s%s%s%d"
&
no,name,autor,date,&
l);
q.no=no;
strcpy(q.name,name);
strcpy(q.autor,autor);
strcpy(q.date,date);
q.l=l;
q.ltime=q.rtime=0;
IistInsert_Sq(L,i,q);
i++;
c=fgetc(fp);
if(c=='
#'
)break;
}while(!
feof(fp));
fclose(fp);
voidShow(SqList&
L){
inti;
cout<
"
*图书目录*"
endl;
*******************************************************"
for(i=0;
i<
L.length;
i++)
cout<
编号:
L.elem[i].no<
\t"
书名:
L.elem[i].name<
厂家:
L.elem[i].autor<
出版日期:
L.elem[i].date<
if(L.elem[i].l>
0)
现有"
L.elem[i].l<
本\n"
else
已借完\n"
}#endif
#ifndefSTUDENT_H
#defineSTUDENT_H
stu*elem;
}SqList2;
intIistList_Sq1(SqList2&
L.elem=(stu*)malloc(LIST_INIT_SIZE*sizeof(stu));
intIistInsert_Sq1(SqList2&
L,inti,stue){//在顺序线性表L中第i个位置之前插入新的元素e
stu*p,*q,*newbase;
newbase=(stu*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(stu));
voidreadstu(SqList2&
stuq;
charname[10],c;
b.txt"
%s%d%d%d%d%d"
name,&
num,&
Class,&
lstu,&
rstu,&
disobey);
q.num=num;
q.Class=Class;
q.lstu=lstu;
q.rstu=rstu;
q.disobey=disobey;
q.times=lstu+rstu;
IistInsert_Sq1(L,i,q);
voidShow2(SqList2&
*学生目录*"
学号:
L.elem[i].num<
姓名:
班级:
L.elem[i].Class<
在借数目:
L.elem[i].lstu<
已还数目:
L.elem[i].rstu<
违约次数:
L.elem[i].disobey<
voidTime(SqList2&
l)
intmax,min,all;
floatavd;
max=min=all=l.elem[0].times;
for(inti=1;
l.length;
i++){
if(max<
l.elem[i].times)max=l.elem[i].times;
if(min>
l.elem[i].times)min=l.elem[i].times;
all=all+l.elem[i].times;
avd=(float)all/(float)l.length;
printf("
最大借阅次数%d最少借阅次数%d平均:
%5.2f\n"
max,min,avd);
#endif
#ifndefRECORD_H
#defineRECORD_H
#include"
iostream"
stdio.h>
typedefintElemType;
Rdd,inty,intm,intd){//生成应还日期
inti=0;
if(y%4==0&
&
y%100!
=0)i=1;
if(y%400==0)i=1;
if(m==3||m==4||m==5||m==6||m==8||m==9||m==10)
{Rdd=d-1;
Rdy=y;
Rdm=m+2;
if(m==7){Rdd=d-1;
if(m==11){Rdd=d-1;
Rdy=y+1;
Rdm=1;
if(m==12){Rdd=d-1;
Rdm=2;
if(m==12&
d==30&
i==0){Rdd=1;
Rdm=3;
d==31&
i==0){Rdd=2;
i==1){Rdd=1;
if(m==1){Rdd=d+1;
if(m==1&
i==0){Rdd=1;
Rdm=4;
i==1){Rdd=d;
if(m==2){Rdd=d+1;
if(m==2&
voidIistbook(SqList&
L,intx,intRD)
for(inti=0;
if(L.elem[i].no==x){
if(RD==0)
L.elem[i].ltime++;
elseL.elem[i].rtime++;
structnode*create(intJ,SqList&
L1){//创建双向循环链表
FILE*