软件工程导论之编码设计.doc

上传人:文库蛋蛋多 文档编号:2401533 上传时间:2023-02-17 格式:DOC 页数:22 大小:236.50KB
返回 下载 相关 举报
软件工程导论之编码设计.doc_第1页
第1页 / 共22页
软件工程导论之编码设计.doc_第2页
第2页 / 共22页
软件工程导论之编码设计.doc_第3页
第3页 / 共22页
软件工程导论之编码设计.doc_第4页
第4页 / 共22页
软件工程导论之编码设计.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《软件工程导论之编码设计.doc》由会员分享,可在线阅读,更多相关《软件工程导论之编码设计.doc(22页珍藏版)》请在三一办公上搜索。

1、软件工程导论题目:图书管理系统文档名称:编码设计班级:科技0801项目组长:唐子龙项目成员:唐子龙(05082019)朱磊(05082025)赵欣(05082023)刘华琛(05082004)编码设计1.根本任务依据软件工程的基本原理,详细设计阶段的根本任务是确定应该怎样具体实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,具体来说就是把经过总体设计得到的各个模块详细的加以描述。2、总体设计需求概述录入功能: 输入相关数据浏览功能: 以列表方式列出所有记录信息信息查询功能: 根据书名匹配查询,并将查询结果列出借出归还功能: 根据借出与归还的书籍信息修改相应数据插

2、入与删除功能:插入一条新的图书信息,删除某图书的信息信息的备份与读入功能:将输入文件进行备份和从指定文件读入数据设置访问权限功能:只有输入正确密码才可以进行操作 否则无权操作系统结构图3、程序描述M1身份验证功能:验证身份性能:输入项:预设密码输出项:欢迎语句算法: int keyword=111,a; printf(Please input keyword:); scanf(%d,&a); if(a!=keyword) exit(0); else printf(Welcome!);测试要求:运行正常。M2主菜单模块功能:选择功能性能:输入项:数字0-9输出项:对应功能项算法: int Dis

3、play_MainMenu() /*显示菜单的函数*/char x; do system(cls); printf(*n); printf(1.Create BookListn); printf(2.Display All Booksn); printf(3.Insert a BookInformationn); printf(4.Delete a Bookn); printf(5.Borrow a Bookn); printf(6.Return a Bookn); printf(7.Queryn); printf(8.Add Records From a Filen); printf(9.W

4、rite to a Filen); printf(0.Goodbyen); printf(*n); printf(Please choose from 0-9:); printf(n); x=getchar(); while(x9); return(x-0);测试要求:运行正常。M3插入模块功能:插入新信息性能:输入项:书名 数量输出项:成功提示算法: Book *Insert(Book *head,Book *s) /*插入结点的函数*/ Book *p0,*p1,*p2; p1=head;p0=s; /*使p1指向第一个结点,p0指向要插入的结点*/ if(head=NULL) /*原来的

5、链表是空表*/ head=p0;p0-next=NULL; /*使p0作为首结点*/ while(strcmp(p0-Name,p1-Name)0&(p1-next!=NULL) p2=p1; p1=p1-next; if(strcmp(p0-Name,p1-Name)next=p1; if(head=p1) head=p0; else p2-next=p0; elsep1-next=p0;p0-next=NULL; return(head);Book *Insert_a_record(Book *head) Book *newrecord; newrecord=(Book *)malloc(

6、LEN); /*动态分配存储空间*/ scanf(%s%d,newrecord-Name,&newrecord-all); newrecord-borrow=0; newrecord-left=newrecord-all; head=Insert(head,newrecord); printf(Insert successfullyn); /*输出插入成功的信息*/ return(head);测试要求:运行正常。删除模块功能:删除信息性能:输入项:所删书名输出项:成功提示算法: Book *Delete(Book *head,char *name) Book *p1,*p2; if(head=

7、NULL) printf(Sorry No record!n); p1=head; while(strcmp(p1-Name,name)!=0&p1-next!=NULL) /*p1不是要找的结点,且后面还有结点*/ p2=p1;p1=p1-next; /*p1后移一个结点*/ if(strcmp(p1-Name,name)=0) /*找到了*/ if(p1=head)head=p1-next; /*若p1为首指针,使下一结点为首指针*/ else p2-next=p1-next; /*否则将下一结点地址赋给前一结点地址*/ printf(delete %s successfullyn,nam

8、e); /*输出删除成功的信息*/ return(head);Book *Delete_a_record(Book *head) char name20,ch; Book *p; scanf(%s,name); getchar(); /*接收回车*/ p=Query(head,name); if(p=NULL) printf(Cannot Find %sn,name); /*找不到结点*/ else printf(Delete %s, Y/N?n,name); ch=getchar(); system(pause); if(ch=y|ch=Y) while(p!=NULL) head=Dele

9、te(head,name); /*删除所有与输入相同的记录*/ p=Query(head,name); return(head);测试要求:运行正常。M5查询模块功能: 查询功能性能:输入项:查询书名输出项:相应书籍信息算法: Book *Query(Book *head,char *name) Book *p; p=head; while(strcmp(name,p-Name)!=0&p-next!=NULL) p=p-next; if(strcmp(name,p-Name)=0) /*找到了,返回结点地址*/ return(p); else /*找不到返回空指针*/ return(NULL

10、);void Query_a_record(Book *head) char name20; Book *p; scanf(%s,name); p=Query(head,name); if(p!=NULL) /*找到了*/ printf(Find successfullyn%s total:%d left:%d borrow:%dn, p-Name,p-all,p-left,p-borrow); else printf(Cant find the records of %sn,name); /*找不到*/测试要求:运行正常。M6显示功能功能: 显示所有信息性能:输入项:相应的菜单序号输出项:所

11、有书籍信息算法: void Display(Book *head) Book *p; int i; p=head; printf(Num BookName Total Left Borrown); for(i=1;p!=NULL;i+) printf(%-5d%-14s%-10d%-10d%-5dn, i,p-Name,p-all,p-left,p-borrow); p=p-next; if(i%10=0) system(pause); /*按回车翻页显示*/ printf(Num BookName total left borrown); 测试要求:运行正常。M7借出模块功能:借出书籍性能:

12、输入项:所借书名 数量输出项:成功信息算法: Book *Borrow_a_Book(Book *head) char name20,ch; int n; Book *p; scanf(%s%d,name,&n); getchar(); /*接收回车*/ p=Query(head,name); if(p=NULL) printf(Cannot Find %sn,name); /*找不到结点*/ else printf(Are you sure to borrow? %s, Y/N?n,name); ch=getchar(); system(pause); if(ch=y|ch=Y) head=

13、Borrow(head,name,n); return(head);测试要求:运行正常。M8归还模块功能:归还书籍性能:输入项:所换书名 数量输出项:成功提示算法: Book *Return_a_Book(Book *head) char name20,ch; int n; Book *p; scanf(%s%d,name,&n); getchar(); /*接收回车*/ p=Query(head,name); if(p=NULL) printf(Cannot Find %sn,name); /*找不到结点*/ else printf(Are you sure to return? %s, Y

14、/N?n,name); ch=getchar(); system(pause); if(ch=y|ch=Y) head=Return(head,name,n); return(head);Book *Return(Book *head,char *name,int sum) Book *p1; p1=head; while(strcmp(p1-Name,name)!=0&p1-next!=NULL) /*p1不是要找的结点,且后面还有结点*/ p1=p1-next; /*p1后移一个结点*/ if(strcmp(p1-Name,name)=0) /*找到了*/ p1-borrow=p1-bor

15、row-sum; p1-left=p1-left+sum; return(head);测试要求:运行正常。M9读入模块功能:从文件读入信息性能:输入项:文件名输出项:成功提示算法: Book *AddfromText(Book *head,char *filename) FILE *fp; int n,i; if(fp=fopen(filename,r)=NULL) printf(Cannot find file:%sn,filename); /*打不开所指定文件*/ return(head); fscanf(fp,%d,&n); /*待插入记录个数*/ for(i=0;iName,&p-al

16、l,&p-left,&p-borrow); head=Insert(head,p); /*插入结点*/ printf(Add from %s successfullyn,filename); fclose(fp);return(head);测试要求:运行正常。M10备份模块功能:数据备份性能:输入项:所建文档名输出项:成功提示算法: Book *WritetoText(Book *head,char *filename)FILE *fp;Book *p; if(head=NULL) printf(No Record!n); return(head); fp=fopen(filename,w);

17、 /*打开文件*/ p=head; while(p!=NULL) fprintf(fp,%-14s%-10d%-10d%-10dnn,p-Name,p-all,p-left,p-borrow); /*文件输出*/ p=p-next; printf(Write to %s successfullyn,filename); /*输出写到文件完毕的信息*/ fclose(fp); return(head);测试要求:运行正常。M11退出模块功能:退出程序性能:输入项:数字0输出项:再见语句算法: void Quit(Book *head)Book *p,*p1,*p2;FILE *fp; char

18、filename=last; p2=p1=head; if(head!=NULL) fp=fopen(filename,w); /*打开文件*/ p=head; while(p!=NULL) fprintf(fp,%s %d %d %dn,p-Name,p-all,p-left,p-borrow); /*文件输出*/ p=p-next; printf(Write to %s successfullyn,filename); /*输出写到文件完毕的信息*/ fclose(fp); while(p1!=NULL) /*p1指向的结点不是空指针*/ p2=p1-next; free(p1); /*释

19、放存储空间*/ p1=p2; /*p1后移一个结点*/ 测试要求:运行正常。五、测试报告1、引言编写目的:测试图书馆管理系统软件的各项功能是否符合预期要求。本报告读者为软件设计者。项目背景:该软件由学生个人设计,无开发部门和主管部门,主要供学生练习使用。该软件独立于其它软件系统。参考资料: 万晓东 施玉霞 等著软件技术基础教程09年7月 谭浩强 著C语言程序设计 第三版 张志航 王珊珊等 著程序设计语言C 07年9月2、测试计划执行情况权限功能测试数据:输入正确密111测试结果:成功进入主界面,说明本模块功能正常插入功能测试数据:无测试结果:菜单显示正常。本模块功能正常。插入功能测试数据:hi

20、story 100测试结果:调用显示函数显示结果。本模块功能正常。删除操作测试数据:history 测试结果调用显示函数显示结果:输出结果正确,说明本模块功能正常。查询模块测试数据:预输入数据 history 100 physics 200 查询history测试结果:显示结果 history 100 0 0说明本模块运行正常。显示模块上述过程已经对本功能进行了测试。结果:显示模块运行正常。借出模块测试数据:预输入数据 history 100 physics 200 调用借出函数借 history 50 maths 100测试结果 调用显示函数显示结果:归还模块测试数据:预输入数据 histo

21、ry 100 physics 200 调用归还函数还 history 50 测试结果:文件读入模块测试数据:文本文档 a.txt测试结果:调用显示函数显示结果测试结果正确。文件备份模块测试数据: 测试数据采用上一步写入的数据测试结果退出模块测试数据: 无测试结果 成功退出程序 并生自动成备份文件 last.txt 退出模块运行正常。3、评价结果软件能力: 软件各项功能复合预期,各子程序运行正常缺陷和限制:每次登陆后必须手工调入上一次的备份文件以恢复系统数据,给操作者带来不便建议: 完善系统的数据库功能,提供安全可靠的数据保存功能。测试结论: 本软件测试通过。附源程序代码:#include#in

22、clude#include#include#define NULL 0#define LEN sizeof(Book)struct A char Name20; int all,left,borrow; struct A *next; ;typedef struct A Book;int Display_Main_Menu(); /*主菜单显示*/Book *Create(); /*功能函数声明*/ void Display(Book *head);Book *Insert(Book *head,Book *s);Book *Insert_a_record(Book *head);Book *

23、Delete(Book *head,char *name);Book *Delete_a_record(Book *head);Book *Borrow(Book *head,char *name,int sum);Book *Borrow_a_Book(Book *head);Book *Return(Book *head,char *name,int sum);Book *Return_a_Book(Book *head);Book *Query(Book *head,char *name); void Query_a_record(Book *head);Book *AddfromTex

24、t(Book *head,char *filename);Book *WritetoText(Book *head,char *filename); void Quit(Book *head);void main() /*主函数部分*/Book *head; /*定义变量*/ char filename20; int keyword=111,a; printf(Please input keyword:); scanf(%d,&a); if(a!=keyword) exit(0); else printf(Welcome!); head=NULL; /*置首指针为空*/ for(;) swit

25、ch(Display_MainMenu() case 1:printf(1.Create BookListn); /*调用Create函数创建链表*/ head=Create(); system(pause); break; case 2:printf(Display All Booksn); Display(head); /*调用Display函数显示所有*/ system(pause);break; case 3:printf(Insert a Recordn); head=Insert_a_record(head);/*调用Insert_a_record函数插入*/ system(pau

26、se);break; case 4:printf(Delete a Bookn); head=Delete_a_record(head);/*调用Delete_a_record函数删除*/ system(pause);break; case 5:printf(Borrow a BooknInput BookName and sum you borrow:); head=Borrow_a_Book(head); system(pause);break; case 6:printf(Return a BooknInput BookName and sum you return:); head=Re

27、turn_a_Book(head); system(pause);break; case 7:printf(QuerynInput the BookName you want:); Query_a_record(head);/*调用查询函数*/ system(pause);break; case 8:printf(Input the name of Text Filen); scanf(%s,filename);/*输入文件名*/ head=AddfromText(head,filename); system(pause);break; case 9:printf(Input the name

28、 of the NewText Filen); scanf(%s,filename);/*输入要写入的文件名*/ head=WritetoText(head,filename); system(pause);break; case 0:printf(Goodbyen); Quit(head); exit(0); int Display_MainMenu() /*显示菜单的函数*/char x; do system(cls); printf(*n); printf(1.Create BookListn); printf(2.Display All Booksn); printf(3.Insert

29、 a BookInformationn); printf(4.Delete a Bookn); printf(5.Borrow a Bookn); printf(6.Return a Bookn); printf(7.Queryn); printf(8.Add Records From a Filen); printf(9.Write to a Filen); printf(0.Goodbyen); printf(*n); printf(Please choose from 0-9:); printf(n); x=getchar(); while(x9); return(x-0);Book *

30、Create() /*创建链表的函数,返回首指针*/Book *head,*newrecord; char ch; printf(Input a Bookn); head=NULL;/*首指针置空*/ do newrecord=(Book *)malloc(LEN); /*动态分配存储空间*/ scanf(%s%d,newrecord-Name,&newrecord-all); newrecord-left=newrecord-all; newrecord-borrow=0; head=Insert(head,newrecord); /*调用Insert函数判断位置插入*/ getchar()

31、; / *接收最后输入的回车符*/ printf(Add another Book Y/N?n); ch=getchar(); getchar(); /*接收回车符*/while(ch!=n&ch!=N); /*判断是否继续*/ return(head);Book *Insert(Book *head,Book *s)/*插入结点的函数*/ Book *p0,*p1,*p2; p1=head;p0=s; if(head=NULL) head=p0;p0-next=NULL; while(strcmp(p0-Name,p1-Name)0&(p1-next!=NULL) p2=p p1=p1-ne

32、xt; if(strcmp(p0-Name,p1-Name)next=p1; if(head=p1) head=p0; else p2-next=p0; elsep1-next=p0;p0-next=NULL; return(head);Book *Insert_a_record(Book *head) Book *newrecord; newrecord=(Book *)malloc(LEN); /*动态分配存储空间*/ scanf(%s%d,newrecord-Name,&newrecord-all); newrecord-borrow=0; newrecord-left=newrecor

33、d-all; head=Insert(head,newrecord); printf(Insert successfullyn);/*输出插入成功的信息*/ return(head);Book *Delete(Book *head,char *name) /*删除功能函数*/ Book *p1,*p2; if(head=NULL) printf(Sorry No record!n); p1=head; while(strcmp(p1-Name,name)!=0&p1-next!=NULL) / p2=p1;p1=p1-next; if(strcmp(p1-Name,name)=0) if(p1

34、=head)head=p1-next; else p2-next=p1-next; printf(delete %s successfullyn,name); return(head);Book *Delete_a_record(Book *head) char name20,ch; Book *p; scanf(%s,name); getchar(); p=Query(head,name); if(p=NULL) printf(Cannot Find %sn,name); else printf(Delete %s, Y/N?n,name); ch=getchar(); system(pau

35、se); if(ch=y|ch=Y) while(p!=NULL) head=Delete(head,name); p=Query(head,name); return(head);Book *Borrow_a_Book(Book *head) char name20,ch; int n; Book *p; scanf(%s%d,name,&n); getchar(); / p=Query(head,name); if(p=NULL) printf(Cannot Find %sn,name); else printf(Are you sure to borrow? %s, Y/N?n,name

36、); ch=getchar(); system(pause); if(ch=y|ch=Y) head=Borrow(head,name,n); return(head);Book *Borrow(Book *head,char *name,int sum) Book *p1; p1=head; while(strcmp(p1-Name,name)!=0&p1-next!=NULL) p1=p1-next; if(strcmp(p1-Name,name)=0) p1-borrow=sum; p1-left=p1-all-sum; return(head);Book *Return_a_Book(Book *head) char name20,ch; int n; Book *p;

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号