数据结构课程设计模板Word文档格式.docx
- 文档编号:18463840
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:26
- 大小:261.92KB
数据结构课程设计模板Word文档格式.docx
《数据结构课程设计模板Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计模板Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
此外对于借书及还书过程中,为保障操作无误,则在用户选择后,对用户的操作进行输出,并请用户进行确认;
在对话式输入中,对于非法输入,程序显示的提示信息采用下划线进行强调,以引起用户的注意。
1.4测试数据分析
书籍登记入库操作中如果书籍登录号超过六位则应提示”格式错误”;
如果书号或书名已存在,则应提示”书籍已存在”。
如果操作正确,则提示“书籍已登记入库”。
在书刊检索中,如果书刊存在则应显示书籍信息,如果不存在则应提示“书籍不存在”。
在读者信息登记操作中,如果读者以存在,则应提示”读者已存在”.否则,提示“成功添加读者”。
在读者登录过程中,如果读者信息错误,则提示“用户名或密码错误”,否则登录操作。
借书还书中的输出类似于检索中的提示。
2概要设计
2.1结构体类型及函数声明
(1)结构体
图书信息结构体类型 BOOK
读者信息结构体类型 READER
日期结构体类型 DATE
索引项结构体类型 IDXTYPE
索引表结构体类型 ISXLIST
(2)函数声明
intInfo_show(BOOK*p,intn)//书籍信息显示函数
intBSave(BOOK*L)//书籍信息导出函数
intBLoad(BOOK*L)//书籍信息导入函数
intBOOK_SORT(BOOK*B,BOOK*P)//按照书号排序函数
intStore_in_lib(BOOK*B)//书籍登记入库函数
intRSave(READER*R)//读者信息导出函数
intRLoad(READER*R)//读者信息导入函数
READER*Search_r(READER*R,READERT)//查找读者函数
BOOK*Search_writer(BOOK*B)//按作者查找函数
BOOK*Search_name(BOOK*B,intn)//按书名查找函数
IDX_LIST*IDX_FORM(BOOK*B)//索引表生成函数
BOOK*Search_num(BOOK*B,intn)//按书号查找函数
intSearch_menu(BOOK*B)//书籍检索菜单
intIf_stop(DATE*time)//判断时间循环是否停止函数
DATE*RTIME()//还书日期函数
intLend(READER*tp,BOOK*B)//借书函数
intReturn(READER*tp,BOOK*B)//还书模块
intLog_menu(READER*R,READER*tp,BOOK*B)//读者登录函数
intLog_in(READER*R,BOOK*B)//读者登录模块
READER*REA_SORT(READER*R,READER*p)//读者排序函数
intTEACHER_LOG()//管理员登录函数
intREA_INSERT(READER*R)//读者信息插入函数
intTeacher(READER*R)//管理员登录主调函数
intLibrary_menu(void)//管理函数主菜单
intWELCOME()//系统欢迎菜单
intShow_all(BOOK*B)//藏书一览函数
intCHOICE(BOOK*B,READER*R)//函数主调菜单
2.2主程序流程
(1)主程序调用模块图
主程序利用switch()语句实现各个模块的调用,主函数调用如图1所示。
图1主程序调用模块图
2.3模块流程说明
主函数对各主要模块进行调用,各个主要模块又分别调用其他子模块。
下面用简要流程图对各主要模块进行说明。
(1)登记入库主模块
如图2所示,为登记入库模块。
先通过键盘读取书记信息,再调用Info_show()函数显示该书籍信息,用户确认信息无误,调用Store_in_lib函数登记入库,如用户不希望此次操作,则放弃退出,返回上级目录。
图2登记入库模块
(2)用户登录主模块
如图3所示为用户登录流程图。
录入借书号及密码,判断合法则登陆,否则结束。
图3用户登录模块
(3)书刊检索主模块
如图4为书刊检索流程图。
首先录入读者需要按照哪种方式进行检索,系统判断检索方式,调用相应的函数查找,并返回检索的结果。
图4书刊检索主模块
(4)管理员登录模块
如图5所示为管理员登陆流程图。
首选录入管理员账号及密码,系统调用TEACHER_LOG()函数,判断账号的合法性,如合法,管理员履行管理功能,不合法提示错误,退出。
图5管理员登录模块
3详细设计
3.1数据类型实现
图书信息结构体
typedefstructBOOK_INFO
{
charB_num[20];
charB_name[20];
charB_writer[20];
charB_publer[20];
charB_ptime[20];
intNow_store;
intTotal_store;
structBOOK_INFO*next;
}BOOK;
读者信息结构体
typedefstructREADER
{
charRea_name[20];
charRea_code[20];
charRea_num[20];
charBOOKlenb[5];
DATERtime[5];
structREADER*next;
}READER;
还书日期结构体
typedefstruct{
intyear;
intmonth;
intday;
}DATE;
索引表结构体
Typedefstruct{
IDXTYPEidxterm[100];
intlen;
}IDX_LIST;
索引项结构体
typedefstructIDX_TERM{
charnum[8];
intlen;
BOOK*P;
}IDXTYPE;
3.2程序代码
intY_N()
//根据读取的字符给flag赋不同值,并返回flag的值
{
scanf(ch);
if(ch[0]=='
Y'
||ch[0]=='
y'
)flag=1;
if(ch[0]!
='
&
ch[0]!
n'
N'
)
flag=0;
)flag=-1;
}
intStore_in_lib(BOOK*B)
//读取书籍信息并经用户确认后插入书籍链表B中
q=B;
do
{
if(!
(tp=(BOOK*)malloc(sizeof(BOOK))))
returnerror;
*tp=NULB;
//所用信息都为空的书籍宏定义
do{
scanf(tp->
B_num);
}while(strlen(tp->
B_num)!
=6);
for(exit=B->
next;
exit&
strcmp(exit->
B_num,tp->
exit=exit->
next);
//判断书号是否已经存在
if(!
exit)
scanf(tp->
B_name);
for(exit=B->
B_name,tp->
//判断书是否已经存在
if(exit)
{
exit->
Now_store++;
Total_store++;
}
}
else
scanf(tp);
tp->
next=NULL;
Info_show(tp,0);
do//确认是否登记入库
{
Flag=Y_N();
}while(!
flag);
if(flag==1)BOOK_SORT(B,tp);
//插入链表
if(flag==-1)free(tp);
//释放空间
}
}
do//确认是否继续
flag=Y_N();
}while(!
}while(flag==1);
return0;
BOOK*Search_writer(BOOK*B)
//从键盘读取著作者的名字,在书籍链表中查找,如果存在则返回满足//条件的指针,否则返回空指针
{
scanf(writer);
p=B->
while(p)
(strcmp(p->
B_writer,writer)))
break;
p=p->
if(p)
Info_show(p,0);
returnp;
}
BOOK*Search_name(BOOK*B)
//从键盘读取书籍名称,如果书籍存在,则返回书记信息指针,否则返//回空指针
scanf(name);
p=B;
B_name,name)))
{p->
IDX_LIST*IDX_FORM(BOOK*B)
//根据书籍信息链表B建立书号索引表,并返回索引表的头指针
(List=(IDX_LIST*)malloc(sizeof(IDX_LIST))))
returnNULL;
List->
len=0;
idxterm[0].len=0;
//初始化
tp=B->
if(tp)
if(i==0&
List->
idxterm[0].len==0)
strcpy(List->
idxterm[i].num,tp->
memcpy(flag,tp->
B_num,2);
List->
idxterm[i].len=1;
len=1;
tp=tp->
continue;
}//将第一本书的书号做为索引表的第一项并以第一项//的前两个字符作为关键字
memcpy(temp,tp->
//将tp->
B_num的前两个字符赋值//给temp
if(strcmp(flag,temp))
i++;
}//增加新的索引项
else
idxterm[i].len++;
//记录关键字相同的数量
List->
len=i+1;
tp=tp->
}while(tp);
returnList;
BOOK*Search_num(BOOK*B,intn)
//根据书号查找书籍,如果找到则返回书籍指针,并使书籍的现存量n;
//否则返回空指针
BOOK*tp;
inti,j,Len=0,flag=0;
charnum[8];
IDX_LIST*IList;
if(!
(IList=(IDX_LIST*)malloc(sizeof(IDX_LIST))))
returnNULL;
IList->
tp=B->
if(tp)
IList=IDX_FORM(B);
else
tp=NULL;
returntp;
}
scanf(num);
for(i=0;
i<
IList->
len&
!
flag;
i++)
if(strcmp(num,IList->
idxterm[0].num)<
0)//如果小于第一项索//引项则书籍不存在
tp=NULL;
returntp;
elseif(strcmp(num,IList->
idxterm[i+1].num)<
0||i==IList->
len-1)//比较与索引表下一项的大小
for(j=0;
j<
i;
j++)
Len+=IList->
idxterm[j].len;
//计算指针移动的次数
for(j=1;
=Len;
//移动指针
=IList->
idxterm[i].len;
if(!
strcmp(tp->
B_num,num))
if(!
(n<
0&
(tp->
Now_store==0)))
tp->
Now_store+=n;
//根据主调函数改变现存量
flag=1;
break;
if(j-1==IList->
idxterm[i].len&
flag)//没找到
tp=NULL;
returntp;
}
returntp;
intSearch_menu(BOOK*B)
//根据用户的选择对书籍信息链表B进行不同方式的查找
op=atoi(ch);
}while(op<
1||op>
3);
switch(op)
case1:
Search_num(B,0);
break;
case2:
Search_name(B);
case3:
Search_writer(B);
return0;
intIf_stop(DATE*time)
//判断时间time是否符合实际
if(time->
month==4||time->
month==6||time->
month==9||time->
month==11)
if(time->
day<
=30)
return0;
else
if((!
(time->
year%4)&
year%100))||
year%400))
num=29;
num=28;
//判断2月的天数
if(time->
month==2&
time->
=num)
return0;
elseif(time->
=31)
return1;
DATE*RTIME()
//计算机还书日期,放回日期结构体类型的指针
time_tnowtime;
structtm*timeinfo;
DATE*rtime;
rtime=(DATE*)malloc(sizeof(DATE));
time(&
nowtime);
timeinfo=localtime(&
y=timeinfo->
tm_year+1900;
m=timeinfo->
tm_mon+1;
d=timeinfo->
tm_mday;
rtime->
year=y;
month=m;
day=d;
day+=60;
do
switch(rtime->
month)
case4:
case6:
case9:
case11:
if(rtime->
day>
30)
rtime->
month++;
day-=30;
case2:
if((!
(rtime->
year%100))
||!
num=29;
elsenum=28;
if(rtime->
num)
day-=num;
default:
if(rtime->
31)
day-=31;
if(rtime->
month>
12)
rtime->
year++;
month-=12;
}while(If_stop(rtime));
returnrtime;
intLend(READER*tp,BOOK*B)
//在图书链表B中查找用户的书籍,找到后将书籍登记到读者tp名下
//并将书籍存量减一
BOOK*btp=NULL;
inti=0;
while(strcmp(tp->
lenb[i].B_num,"
NUL"
)&
5)
i++;
if(i==5)return0;
//判断是否达到借书上限
btp=Search_num(B,-1);
if(btp)
if(btp->
Now_store!
=0)
lenb[i]=*btp;
Rtime[i]=*RTIME();
intReturn(READER*tp,BOOK*B)
//在图书链表B中查找用户的书籍,找到后将书籍从读者tp名下删除
BOOK*p;
p=Search_num(B,1);
while(strcmp(p->
lenb[i].B_num))
if(i<
4)
for(;
4;
lenb[i]=tp->
lenb[i+1];
Rtime[i]=tp->
Rtime[i+1];
tp->
lenb[4]=NULB;
READER*REA_SORT(READER*R,READER*p)
READER*tp;
tp=R;
while(tp->
next)
if(strcmp(p->
Rea_num,tp->
next->
Rea_num)<
0)
break;
tp=tp->
intTEACHER_LOG()
//教师登录验证,通过则返回0,否则返回1
scanf(code);
strcmp(name,"
李云高"
strcmp(code,"
121513"
))
else
return1;
intREA_INSERT(READER*R)
//从键盘录入读者信息,并以指针存放,经用户确认后插入读者信息链//表R中
do
p=R;
while(p->
p=p->
(tp=(READER*)malloc(sizeof(READER))))
returnerror;
scanf(tp);
tp->
p=REA_SORT(R,tp);
next=p->
p->
next=tp;
do
flag=Y_N();
}while(!
}while(flag==1);
return0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 模板