软件设计报告.docx
《软件设计报告.docx》由会员分享,可在线阅读,更多相关《软件设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
软件设计报告
软件设计报告
1.范围
1.1标识
1.2系统概述
1.3文档概述
2.引用文档
3.概要设计
4.详细设计
4.1模块一
4.2模块二
4.3模块三
.
1.范围
1.1标识
a.图书馆对图书管理系统
b.适用于windowsxp、win7、windows2000等系统
1.2该系统以C语言为编程语言主要功能为对读者借阅信息进行管理
1.3此文档以软件设计的流程和要素为主
2.引用文档
3.概要设计
3.1系统结构图(功能模块图)对系统进行分析,给出系统结构图
图书馆信息管理系统
排序模块
统计模块
退出程序
删除模块
添加模块
还书模块
查询模块
借书模块
储存模块
修改模块
按书总量
3.2功能模块说明
.3.2.1储存模块:
在主菜单按1进入储存模块,在提示中选1进入储存图书模块,按2进入储存借书证模块。
按提示以此输入储存。
3.2.2删除模块:
在主菜单按2进入删除模块,按提示进入删除图书或删除借书证模块,输入要删除的编号对其进行删除。
3.2.3修改模块:
在主菜单按3进入修改模块,在提示中进入修改图书或修改借书证模块。
在修改模块按对应的数字键并照提示输入修改后的数据按回车修改完成。
3.2.4借书模块:
进入借书模块后按提示以此输入要借的图书序号和借书证号完成借阅。
3.2.5还书模块:
与借书模块类似。
3.2.6查询模块:
进入查询模块后按照提示进入图书查询或借书证查询模块。
在图书查询中选择你要查询的种类,进入后输入要查询的内容精心查询。
在借书证查询中输入借书证编号便会显示次借书证当前的信息。
3.2.7统计模块:
进入统计模块叙则统计的方式系统便会显示出您需要的结果。
3.2.8排序模块:
进入排序模块选择排序的方式便会得到输出结果。
4.详细设计
4.1主模块
借书模块
4.2存储模块
返回到主界面
保存到借书卡文件
保存到图书文件
输入并读取借书卡信息
输入并读取图书信息
打开借书卡文件
打开图书文件
a==1
4.3修改模块
保存到图书卡文件
保存到图书文件
输出修改结果
修改后借书量
修改后年级
输入修改后姓名
Case0
case3
case2
case1
输入借书卡号
输出修改后的成果
修改后作者
修改后总量
返回主界面
修改后书名
现有量
输入修改后种类
Case0
case5
case4
case3
case2
case1
输入图书号
a==1
打开借书卡文件
打开图书文件
输出借书卡信息
输入借书卡编号
返回主界面
输入书的作者a
i++
输出编号为i的图书信息
i=0
strcmp(book[i].writer,a)==0
i++
输出编号为i的图书信息
i=0
strcmp(book[i].bname,a)==0
输入书的名称a
输入书的种类a
i++
输出编号为i的图书信息
i=0
strcmp(book[i].kind,a)==0
case1
Case0
case3
case2
打开借书卡文件
打开图书文件
a==1
4.4查询模块
4.5排序模块
j=i+1
i=1
打开图书文件
a==1
i=1
返回主界面
j=i+1
i>sun-1
i=i+1
jbook[i].havenumj=j+1
交换book[i].havenum,book[j].havenum
i>sun-1
i=i+1
jbook[i].numj=j+1
交换book[i].num,book[j].num
一、 课程设计目的
通过本课程设计,强化上机动手能力,使学生在理论和实践的基础上进一固《C语言程序设计》课程学习的内容,掌握工程软件设计的基本方法。
学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
为后续各门计算机课程的学习打下坚实基础。
为毕业设计和以后工作打下必要基础。
二、课程设计内容
1.编写程序并进行调试运行。
2.输入及添加图书、图书证资料,并保存于文件。
每个图书包含信息如:
图书编号、书名、作者、现库存量、总库存量信息。
每个借书证包含信息如:
借书证编号、拥有者姓名、可借书量、借书者年级等信息。
3.对已存入的图书、图书证信息进行删除。
4.对已存入的信息如书名、作者、县库存量、总库存量、借书者姓名、借书者最大借书量、年级进行更改。
5.利用图书证对图书进行借出和归还。
6.对县域的图书和借书证信息进行查询。
7.土现有图书进行统计和排序。
三、需求分析
1.该程序可用于图书馆对图书信息的管理和对外学生利用借书针对图书的街区与归还。
2.该程序可对初始时对图书及借书证信息的储存以及以后对新买图书及新同学信息的输入和丢失图书及毕业学生学生信息的删除。
3.在应用时可对错误信息进行修改、对需要图书按具体内容经行查询、对库存量进行统计。
四、概要设计
1.系统结构图(功能模块图)对系统进行分析,给出系统结构图
图书馆信息管理系统
排序模块
统计模块
退出程序
删除模块
添加模块
还书模块
查询模块
借书模块
储存模块
修改模块
按书总量
五、详细设计及运行结果
流程图,函数之间相互调用的图示,程序设计及编码,运行结果。
主函数
储存模块
查询模块
输出借书卡信息
j=i+1
i=1
打开图书文件
a==1
排序模块
i=1
返回主界面
六、调试情况,设计技巧及体会
1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。
两周的时间,我编了一个学生图书管理程序,这是一个应用程序相对于以前我们编写的程序,这个程序似乎稍微大了一些,运行的结果也不是很理想,程序的书写方面也不是很规范,还需要改进,在老师的指导及同学的互相商讨下,经过我一次一次的修改,最终基本达到了预期的效果,但还有不足的的地方。
第一次独立完成这种规模的程序,由于时间短,有许多原先构想的程序还未编辑,故有一些功能未能实现,现在已编辑的程序基本上能满足客户的需求,但还不是十分完善,若能添加更多的功能就能进一步满足不同客户的需求了。
2、在设计过程中的感受。
通过这次实习让我对C语言有了进一步的了解,以前只停留在编写十几行的小程序的基础上,对它只是略知皮毛,经过上学期的学习也只是停留在理论上,此次实习让我受益匪浅,这次提高了我们的动手动脑能力,大学生缺乏动手实践的能力,对于大学生来说书本知识固然重要,但是实践课绝对是其大学四年中不可或缺的一部分。
所以我认为大学开实践课是非常有必要的!
七、参考文献
《高级语言程序设计》(王曙燕著),《C语言程序设计》(谭浩强著),《VisualBasic设计信息管理系统实例》,《C算法》
八、附录:
源代码(略,详见电子版实验报告)
#include
#defineM100
#defineN10
#definePRINT1printf("--------------------------------------------------------------------------\n")
#definePRINT2printf("\n图书号----图书种类----书名--------作者--------现有书量-------书总量\n")
#definePRINT3printf("%d%16s%13s%11s%11d%15d\n",book[i].num,book[i].kind,book[i].bname,book[i].writer,book[i].havenum,book[i].allnum);
#definePRINT4printf("借书证编号--学生姓名--学生可借数量--学生年级\n")
#definePRINT5printf("%d%20s%6d%14d",card[i2].lnum,card[i2].lname,card[i2].lout,card[i2].grade)
intsum,sum2;
/*图书结构体类型*/
structbook_type
{intnum;
charkind[10];
charbname[20];
charwriter[20];
inthavenum;
intallnum;
}book[M];
/*借书证结构体类型*/
structcard_type
{intlnum;
charlname[20];
intlout;
intgrade;
structbook_typelbook[10];
intnlnum;
};
structcard_typecard[N];
/*图书储存信息*/
save_message(intsum)
{FILE*fp;
inti;
if((fp=fopen("book.txt","wb"))==NULL)
{printf("读文件有误!
\n");
return0;
}
for(i=0;iif(fwrite(&book[i],sizeof(structbook_type),1,fp)!
=1)
printf("写文件错误!
\n");
fclose(fp);
}
/*借书卡储存信息*/
save_message2(intsum2)
{FILE*fp;
inti2;
if((fp=fopen("card.txt","wb"))==NULL)
{printf("读文件有误!
\n");
return0;
}
for(i2=0;i2if(fwrite(&card[i2],sizeof(structcard_type),1,fp)!
=1)
printf("写文件有误!
\n");
fclose(fp);
}
/*读取信息*/
intread_message()
{FILE*fp;
inti=0;
if((fp=fopen("book.txt","rb"))==NULL)
{printf("\n\n*****暂时还没有任何关于图书的库存信息,按任意键进入主菜单选择基本信息的录入*****\n");
return0;
}
while(feof(fp)!
=1)
{fread(&book[i],sizeof(structbook_type),1,fp);
if(book[i].num==0)
break;
elsei++;
}
fclose(fp);
return(i);
}
intread_message2()
{FILE*fp;
inti2=0;
if((fp=fopen("card.txt","rb"))==NULL)
{printf("\n\n暂时还没有任何关于借书证的库存信息,按任意键进入主菜单选择基本信息的录入\n\n");
return0;
}
while(feof(fp)!
=1)
{fread(&card[i2],sizeof(structcard_type),1,fp);
if(card[i2].lnum==0)
break;
elsei2++;
}
fclose(fp);
return(i2);
}
/*输入模块*/
input_message()
{inta,b,i=0,j=0;
clrscr();
do
{printf("图书请按1借书卡请按2");
scanf("%d",&a);
if(a==1)
{sum=read_message();
printf("\n清输入书号图书种类书名作者现有量总有量\n");/*输入图书相关信息*/
printf("\n提示种类必须是ph&macomputermagazineEnglishleterature中的一个!
!
!
!
!
\n");
scanf("%d%s%s%s%d%d",&book[i].num,&book[i].kind,&book[i].bname,&book[i].writer,&book[i].havenum,&book[i].allnum);/*接收图书相关信息*/
i++;/*转换到数组的下一个*/
save_message(sum);
}
else
{sum2=read_message2();
printf("请输入借书证号借书人姓名可借书量年级\n");
scanf("%d%s%d%d",&card[j].lnum,&card[j].lname,&card[j].lout,&card[j].grade);/*接收借书证的相关信息*/
j++;
save_message2(sum2);
}
printf("是否还要继续输入是按1否按0");/*是否需要继续输入*/
scanf("%d",&b);
}while(b==1);
printf("--%d种书你已经输入!
--\n",i);/*显示已输到的图书数*/
printf("--%d个学生你已经输入!
--\n",j);/*显示已输到的学生证件数数*/
sum=j;
printf("\npressanykeyback!
");
bioskey(0);
}
/*删除模块*/
del_message()
{inti=0,a,j=0,m,b,k=0;
structbook_typet={0,'\0','\0','\0',0,0};
structcard_typeh={0,'\0',0,0};
clrscr();
do
{printf("\n------图书按1借书卡按0--------\n");
scanf("%d",&m);
if(m==1)
{sum=read_message();
printf("\n----请输入你要删除的图书代码----\n");
scanf("%d",&a);
for(i=0;i{if(book[i].num==a)
break;
}
if(i==sum)
printf("\n----该书不存在-------\n");
for(j=i;jbook[j]=book[j+1];
book[sum]=t;
save_message(sum);
}
else
{sum2=read_message2();
printf("\n-----请输入你要删除的图书证代码------\n");
scanf("%d",&b);
for(i=0;i{if(card[i].lnum==b)
break;
}
if(i==sum2)
printf("\n-------该卡不存在---------\n");
for(j=i;jcard[j]=card[j+1];
card[sum2]=h;
save_message2(sum2);
}
printf("\n---------如果还要删除请按1否则按0--------\n");
scanf("%d",&k);
}while(k==1);
}
/*修改模块*/
chang_message()
{inti=0,choice,revise_num,flag,a,i2=0,choice2,revise_num2,flag2,a2;
clrscr();
printf("书按1卡按2");
scanf("%d",&a);
if(a==1)
{do
{clrscr();
sum=read_message();
printf("\n输入要修改的图书号:
");
scanf("%d",&revise_num);
for(i=0;iif(book[i].num==revise_num)
{printf("\n--图书信息--\n");
PRINT1;
PRINT2;
PRINT3;
printf("\n您要修改那一项\n");
printf("\n1.种类\n");
printf("\n2.书名\n");
printf("\n3.作者\n");
printf("\n4.现有量\n");
printf("\n5.总量\n");
printf("\n清选择(1-5):
");
scanf("%d",&choice);
switch(choice)
{case1:
printf("\n输入修改后的种类:
");
scanf("%s",&book[i].kind);break;
case2:
printf("\n输入修改后的书名:
");
scanf("%s",&book[i].bname);break;
case3:
printf("\n输入修改后的作者:
");
scanf("%s",&book[i].writer);break;
case4:
printf("\n输入修改后的现有量:
");
scanf("%d",&book[i].havenum);break;
case5:
printf("\n输入修改后的总量:
");
scanf("%d",&book[i].allnum);break;
}
save_message(sum);
PRINT1;
PRINT2;
PRINT3;
break;
}
if(i==sum)
{printf("\n该书不存在!
");
bioskey(0);
}
printf("\n\n继续修改吗(Y/N)");
choice=getch();
if(choice=='y'||choice=='Y')
{flag=1;
printf("\n继续!
");
}
elseflag=0;
}while(flag==1);
}
else
{do
{clrscr();
sum2=read_message2();
printf("\n输入要修改的借书证号:
");
scanf("%d",&revise_num2);
for(i2=0;i2if(card[i2].lnum==revise_num2)
{printf("\n--图书证信息\n");
PRINT1;
PRINT4;
PRINT5;
printf("\n您要修改那一项?
\n");
printf("\n1.学生姓名\n");
printf("\n2.学生可借书量\n");
printf("\n3.学生年级\n");
scanf("%d",&choice2);
switch(choice2)
{case1:
printf("\n输入修改后的姓名:
");
scanf("%s",&card[i2].lname);break;
case2:
printf("\n输入修改后的借书量:
");
scanf("%d",&card[i2].lout);break;
case3:
printf("\n输入修改后的年级:
");
scanf("%d",&card[i2].grade);break;
}
save_message2(sum2);
PRINT1;
PRINT4;
PRINT5;
break;
}
printf("\n\n继续修改吗?
(y/n)");
choice2=getch();
if(choice2=='y'||choice2=='Y')
{flag2=1;
printf("\n继续!
\n");
}
elseflag2=0;
bioskey(0);
}while(flag2==1);
}
printf("\n按任意键返回主菜单");
bioskey(0);
}
/*借出书模块*/
lendout_message()
{intfleg=0,i=0;
for(i=0;icard[i].nlnum=0;
do
{inta,i,b;
structbook_typet;
clrscr();
sum=read_message();
printf("\n请输入要借出书的编号\n");
scanf("%d",&a);
for(i=0;i{if(book[i].num==a)
t=book[i];
book[i].havenum--;
}
save_message(sum);
printf("\n\n请输入要借人的借书证号\n");
scanf("%d",&b);
sum2=read_message2();
for(i=0;i{if(card[i].lnum==b)
if(card[i].lout!
=0)
{card[i].lbook[card[i].nlnum]=t;
card[i].lout--;
card[i].nlnum++;
}
else
printf("\n\n******您的借书数量已达最大限度请还后再借******\n\n");
}
save_message2(sum2);
printf("\n\n******是否还要继续借书是按1否按0******\n\n");
scanf("%d",&fleg);
}while(fleg==1);
printf("\n\n******请按任意键返回主界面******\n\n");
bioskey(0);
}
/*还书模块*/
back_message()
{inta,i,j,b,flag,m;
structbook_typet={0,"\0","\0","\0",0,0};
do
{sum=read_message();
clrscr();
printf("\n\n******请输入要归还的图书编号******\n\n");
scanf("%d",&a);
for(i=0;iif(book[i].num==a)
book[i].havenum++;
save_message(sum);
printf("\n\n******请输入借书证号******\n\n");
scanf("%d",&b);
sum2=read_messa