




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学 号: 课 程 设 计题 目影碟租赁系统租赁者管理的设计与实现学 院计算机科学与技术专 业计算机科学与技术班 级姓 名指导教师年月日目 录计算机基础强化训练任务书21问题描述31.1问题描述31.2基本要求31.3数据需求31.4功能需求32.实现分析43程序设计43.1存储结构设计43.2主要算法设计5程序主要函数原型及功能5各函数的实现6函数模块183.2.4 程序流程图184.调试报告204.1调试中的问题204.2对设计和编码的讨论和分析215. 程序运行结果216.经验和体会286.1感受和体会286.2对算法改进的想法297.租赁信息链表内容和源程序307.1租赁信息链表内容30
2、7.2源程序30本科生课程设计成绩评定表42计算机基础强化训练任务书学生姓名: 专业班级: 计算机班 指导教师: 工作单位: 计算机科学与技术学院 题 目: 初始条件:理论:学完计算机基础知识,掌握C+语言编程基础和VC开发平台的使用。实践:计算机科学系实验中心提供计算机及软件开发环境。要求完成的主要任务: (1)系统需求分析,得到系统的数据需求和功能需求,分析结果用表格记录。 (2)系统设计,包括内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。要求内存数据用链表组织,数据文件用文本文件,用户界面用字符界面。至少实现数据记录的增加、修改、删除、查询(查询应
3、能按不同数据项进行)。(2)编制好程序后,设计若干测试用例,上机测试所设计的程序。(4)设计报告按格式要求书写。设计报告正文的内容应包括:1)系统描述 包括问题说明、数据需求和功能需求。2)系统设计 包括内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。3)系统测试 包括测试用例的描述、测试方法和测试结果。4)设计的特点、不足、收获和体会。时间安排:1、第20周(7月4日至7月8日)完成。2、7月8日8:00到计算机学院实验中心(三楼)检查程序、交课程设计报告、源程序(CD盘)。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日课程设计报告书1
4、问题描述1.1问题描述针对影像店影碟出租的管理,设计一个对租赁者进行管理的系统。1.2基本要求内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。要求内存数据用链表组织,数据文件用文本文件,用户界面用字符界面。至少实现数据记录的增加、修改、删除、查询(查询应能按不同数据项进行)。1.3数据需求经过对影像店的观察,最终确定租赁者的信息包括:租赁者注册时间、租赁时间、对应时间的租赁影碟的名称、租赁影碟的数量、租赁押金、租赁者的编号。如下表:姓名编号注册时间租赁数量租赁影碟的信息押金(元)租赁时间影碟名字张三000120110101220110103哈利波特7502
5、0110509指环王31.4功能需求为实现对影碟租赁者的管理,本系统主要实现以下几个功能:1 增加租赁会员。其中信息包括注册时间、租赁时间、对应时间的租赁影碟的名称、租赁影碟的数量、租赁押金、租赁者的编号。2 删除租赁会员。将对应的会员的信息删除。3 修改会员的租赁信息。对需要修改租赁信息的会员实现影碟数量的增减及相关租赁时间、影碟名字的修改。4 查询租赁信息。设计的查询功能分为以下两种:Ø 按租赁者相关信息查询。包括按照租赁者姓名查询和按照编号查询,若成功,则返回相关租赁信息,若失败,返回失败信息。Ø 按照租赁日期查询。对输入的一个日期进行查询,查询结果为:对应日期注册会
6、员的数量、对应日期租赁影碟的信息(租赁者、租赁数量)。5 保存文件。将内存的信息保存到外存储器上,实现信息的永久保存。2.实现分析(1)针对某个影像店的租赁者信息先建立一个链表,存储租赁者的信息:注册时间、租赁时间、对应时间的租赁影碟的名称、租赁影碟的数量、租赁押金、租赁者的编号。(2)对于已经建立的链表通过人机交互窗口进行相关的操作。包括:退出系统、查询租赁者、添加新租赁者、 修改租赁数量、删除租赁者 、查看所有租赁者、按日期查询、保存成文件。(3)对于用户的各种选择操作进行相关的操作,并对用户的错误输入进行处理。3程序设计3.1存储结构设计本次课程设计采用链表来存储租赁者的相关信息,用到的
7、存储结构如下:typedef struct char Name20; / 租赁者姓名int Mount; /租借影碟数量double Price; /押金long int Data; /注册日期long int CDData10; /租赁影碟的时间long int Num; /租赁者编号char CDNameCDNUMMAX20; /租赁影碟的名称members; /结构体memember,每个结点的内容typedef struct nodemembers data; node *next;LNode,*LinkList; /结构体LNode,链表的结点3.2主要算法设计3.2.1程序主要函数
8、原型及功能1 主要函数原型及功能:LinkList Creat_LinkList()功能:创建一个空链表,并返回链表的头结点。int equal(char a,char b) 功能:判断两个字符数组是否相等函数。void Add_LinkList(LinkList H) 功能:添加新的租赁者信息,信息包括:注册时间、租赁时间、对应时间的租赁影碟的名称、租赁影碟的数量、租赁押金、租赁者的编号;并输出租赁会员的总数。void Revise_LinkList(LinkList H) 功能:修改租赁人的租赁信息。首先需要用户输入需要修改信息的人数,如果人数大于已经注册的会员数,则会提示出错信息,并让用
9、户重新输入;在正确输入后,用户可以输入相关租赁者姓名,并修改其租赁信息,如:张三原本租赁一张影碟,现在又租借了1张影碟,将这张影碟的租赁信息增加到张三的租赁信息中。void Del_LinkList(LinkList H) 功能:根据用户输入的需要删除的租赁者姓名,完成删除该租赁者的租赁信息,并返回剩余租赁者的数量。LinkList Search(LinkList H) 功能:按照用户的选择:按姓名查找和按编号查找,完成对相关信息的查找功能。void Search_Time(LinkList H) 功能:按日期查询租赁信息。包括对于用户输入的日期,查询该日期的注册人数和租赁影碟的信息;如201
10、10101,有一个人注册,没人租借影碟;20110109,租赁影碟1张:哈利波特7,租赁者李四,押金20等。void browsing(LinkList H) 功能:浏览所有租赁者的租赁信息。void Printff(LinkList p)功能:输出租赁者的信息。void WriteCDdata(LinkList H)功能:将主存中的链表信息以文本文件的形式存储到外存储器中。void main( )功能:实现人机交互,提供用户选择相关操作。3.2.2各函数的实现(1)创建一个空链表,并返回头指针:函数LinkList Creat_LinkList()的实现:LinkList Creat_Lin
11、kList()LinkList H;H=(LinkList)malloc(sizeof(LNode);if(H)H->next=NULL;return H;(2)判断两个字符数组是否相等函数 函数int equal(char a,char b)的实现:int equal(char a,char b) /定义一个判断两个字符数组是否相等函数int i=0,j;while(ai!='0'|bi!='0')j=0;if(ai=bi)i+;j=1;elsebreak;return j;/字符串比较,返回值非零相等,零不相等(3)添加租赁者Ø 使用尾插法插
12、入链表的结点,结点信息包括:租赁者注册时间、租赁时间、对应时间 的租赁影碟的名称、租赁影碟的数量、租赁押金、租赁者的编号。Ø 添加租赁者信息void Add_LinkList(LinkList H)的实现:void Add_LinkList(LinkList H) /添加新的租赁者信息LinkList p,q,temp,r;int k=0,i=0,j=1,n,count=0,x;char name20,name120;float price=0.0;long int data,n1,cddata;doprintf("请输入需要增加租赁者数量:");scanf(&q
13、uot;%d",&k);if(k=0) return ;if(H->next=NULL) q=H;elsetemp=H->next;while(temp->next) temp=temp->next; q=temp;while(j<=k) p=(LinkList)malloc(sizeof(LNode);if(!p)printf("申请空间失败!n");return ;elseq->next=p;p->next=NULL;doprintf("请输入第%d个租赁者的姓名:",j);scanf(&q
14、uot;%s",&name);printf("请输入租借数目,押金,注册时间,租赁者编号 例如: 3 50.0 20100701 1n");scanf("%d %f %ld %ld",&n,&price,&data,&n1);/把新信息赋给新结点strcpy(p->data.Name,name);p->data.Mount=n;p->data.Price=price;p->data.Data=data;p->data.Num=n1;if(n>0)while(i<n
15、)printf("请输入要增加的第%d个影碟的信息:n",i+1); printf("请输入增加租赁日期:"); scanf("%d",&cddata);p->data.CDDataj+i-1=cddata; printf("请输入对应的影碟名字:"); scanf("%s",name1); strcpy(p->data.CDNamej+i-1,name1);i+;i=0;while(n<=0|price<=0|n1<=0|data<=0);print
16、f("新会员添加成功!n");j+;q=p;j=1;r=H->next;while(r)count+;r=r->next;printf("此时共有%d个注册会员n",count);count=0;printf("继续添加 8;其他数字退出添加n请输入:");scanf("%d",&x);while(x=8);(4)修改租赁者的租赁信息Ø 首先提示用户选择相应的修改方式:按姓名修改信息、按编号修改信息。Ø 根据用户选择的修改方式,输入要修改租赁信息的租赁者名字或编号,进行查找,
17、若查找成功,则修改相关租赁信息,同时对租借数量进行判断是否超过最大租借限度;查找失败,返回失败信息。Ø 显示哈希表的函数void Revise_LinkList(LinkList H)的实现:void Revise_LinkList(LinkList H) /修改租赁人的租赁信息LinkList p,q;int k=0,k2=1,mount=0,i=0,j=0,count=0,x,m,n,u,v;char name20,name120;doprintf("请输入需要修改信息的租赁者数量:");scanf("%d",&k);q=H->
18、;next;while(q)count+;q=q->next;while(k>count)printf("你输入的修改人数大于注册数量!");printf("请重新输入:");scanf("%d",&k);p=H;doprintf("1 按照姓名修改t2 按照编号修改n请输入:");scanf("%d",&m);if(m!=1&&m!=2) printf("你的输入有误!请重新输入!");while(m!=1&&m!
19、=2);if(m=1)printf("请输入要修改信息的租赁者姓名:");scanf("%s",&name);while(p->next)if(equal(p->next->data.Name,name)=1)k=0;break;elsep=p->next;if(m=2)printf("请输入要修改信息的租赁者编号:");scanf("%d",&n);while(p->next)if(p->next->data.Num=n)k=0;break;elsep=p
20、->next;if(k=0) /修改租借数量printf("会员中有记录!n请输入修改租借数量:");scanf("%d",&mount);j=p->next->data.Mount;p->next->data.Mount=p->next->data.Mount+mount;while(p->next->data.Mount)if(p->next->data.Mount>10)printf("租借数量超出上限!n请重新输入修改租借数量:");scanf(&
21、quot;%d",&mount);p->next->data.Mount=p->next->data.Mount+mount;else break;if(mount>0)while(i<mount)printf("请输入要增加的第%d个影碟的信息:n",i+1);printf("请输入租赁日期:");scanf("%d",&p->next->data.CDDataj+i);printf(" 请输入对应的影碟名字:");scanf("
22、%s",name1);strcpy(p->next->data.CDNamej+i,name1);i+;if(mount<0)printf("输入修改租借数量为负,既需要删除租赁的影碟!n");while(i<0-mount)doprintf("1 按影碟名字修改t2 按租赁日期修改n请输入:");scanf("%d",&u);if(u!=1&&u!=2) printf("你的输入有误!请重新输入!");while(u!=1&&u!=2);i
23、f(u=1)printf("请输入要删除影碟名字:");scanf("%sd",&name1);int h=0;while(h<j)if(equal(p->data.CDNameh,name1)=1)while(h<j-1)strcpy(p->data.CDNameh,p->data.CDNameh+1);p->data.CDDatah=p->data.CDDatah+1;h+;h+;if(u=2)printf("请输入要删除影碟的租赁日期:");scanf("%d"
24、;,&v);int h=0;while(h<j)if(p->data.CDDatah=v)while(h<j-1)strcpy(p->data.CDNameh,p->data.CDNameh+1);p->data.CDDatah=p->data.CDDatah+1;h+;h+;i+;i=0;printf("修改成功!n");else printf("没有相应的会员!n");printf("继续修改 8;其他数字退出修改n请输入:");scanf("%d",&
25、x);while(x=8);(5)删除某些租赁者的信息Ø 首先提示用户选择相应的删除方式:按姓名删除信息、按编号删除信息。Ø 根据用户选择的删除方式,输入要删除租赁信息的租赁者名字或编号,进行查找,若查找成功,则删除相关租赁信息,同时对租借者数量进行减操作;查找失败,返回失败信息。Ø 删除租赁者信息函数void Del_LinkList(LinkList H)的实现:void main()char ch1;InitNameList(); CreateHashList (); doprintf("D. 显示哈希表nF. 查找nQ. 退出n请选择: &quo
26、t;);cin>>&ch1;switch(ch1)case 'D':Display(); cout<<endl;break;case 'F':FindList();cout<<endl;break;case 'Q':exit(0);cout<<"come on !(y/n):"cin>>&ch1;while(ch1!='n'); (6)租赁信息的查找Ø 首先提示用户选择相应的查找方式:按姓名查找信息、按编号编号信息。Ø
27、; 根据用户选择的查找方式,输入要查找租赁信息的租赁者名字或编号,进行查找,若查找成功,则输出相关租赁信息;查找失败,返回失败信息。Ø 查找租赁者信息函数LinkList Search(LinkList H)的实现:LinkList Search(LinkList H) /查找功能函数定义int k1,x;LinkList p;char name20;long int num;dop=H;printf("请选择:t1,按租赁者姓名查询t2,按租赁者编号查询t0,退出查询n");printf("请选择:");scanf("%ld&quo
28、t;,&k1);if(k1=1) /按租赁者姓名查询printf("请输入租赁者姓名:");scanf("%s",name);while(p)if(equal(p->data.Name,name)=1) /查找租赁者姓名printf("查找成功!n");Printff(p);break;elsep=p->next;if(!p)printf("查找失败,未注册!n");if(k1=2) /按租赁者编码查询printf("请输入租赁者编码(数字):");scanf("%
29、ld",&num);while(p)if(p->data.Num=num)printf("查找成功!n");Printff(p);break;elsep=p->next;if(!p)printf("查找失败,未注册!n");if(k1=0) return(NULL);printf("继续查找 8;其他数字退出查找n请输入:");scanf("%d",&x);while(x=8); return p;(7)按日期查找租赁信息Ø 根据用户输入的日期,进行查找,若查找到相关
30、日期有会员注册或者有影碟租赁出去,则返回相关注册信息或者租赁信息Ø 按日期查找函数void Search_Time(LinkList H)的实现:void Search_Time(LinkList H) /按日期查询租赁信息 LinkList p;long int time;int i=0,x,j=0,k=0;dop=H;printf("请输入日期(格式):");scanf("%ld",&time);while(p) /遍历查找if(p->data.Data=time)i+; /统计数量Printff(p);if(p->da
31、ta.Data!=time)while(j<p->data.Mount)if(p->data.CDDataj=time)Printff(p);k+;j+;j=0;p=p->next;printf("共有%d人在%ld注册n",i,time);printf("共有%d人在%ld租借影碟n",k,time);k=0;i=0;printf("继续按日期查询 8;其余输入退出查询n请输入:");scanf("%d",&x);while(x=8);(8)显示所有租赁者的租赁信息Ø 显
32、示出所有租赁者的租赁信息,包括:租赁者注册时间、租赁时间、对应时间的租赁影碟的名称、租赁影碟的数量、租赁押金、租赁者的编号。Ø 函数void browsing(LinkList H)的实现:void browsing(LinkList H) /显示所有租赁者的信息LinkList p;int k8=1;p=H->next;if(p=NULL) printf("表为空!");while(p)printf("第%d个租赁人信息:n",k8);Printff(p);k8+;p=p->next;(9)输出函数函数void Printff(L
33、inkList p)的实现:void Printff(LinkList p) /输出函数int i=0;printf("租赁者姓名: %s 租借影碟数量: %d 押金: %fn注册日期: %ld 租赁者编号:%ldn",p->data.Name,p->data.Mount,p->data.Price,p->data.Data,p->data.Num);while(i<p->data.Mount)printf("租赁日期:%d 对应的",p->data.CDDatai);printf("影碟名字:%
34、sn",p->data.CDNamei);i+;(10)将内存链表以文本文件的形式写入外存储器函数void WriteCDdata(LinkList H)的实现:void WriteCDdata(LinkList H)LinkList p;fstream cddata;cddata.open("影碟租赁租赁者管理.txt",ios:out);if(!cddata) printf("文件打开失败!");elsep=H->next;if(p=NULL) printf("链表为空,无法完成信息存入硬盘!");elsew
35、hile(p)cddata.write(char*)&(p->data.Name),sizeof(p->data.Name);cddata.write(char*)&(p->data.Num),sizeof(p->data.Num);cddata.write(char*)&(p->data.Data),sizeof(p->data.Data);cddata.write(char*)&(p->data.Mount),sizeof(p->data.Mount);cddata.write(char*)&(p-&g
36、t;data.Price),sizeof(p->data.Price);cddata.write(char*)&(p->data.CDData),sizeof(p->data.CDData);cddata.write(char*)&(p->data.CDName),sizeof(p->data.CDName);p=p->next;cddata.close();(11)人机交互的实现主函数void main( )的实现:void main( ) / 主函数,菜单形式int key=0; LinkList H;char l;H=Creat_Lin
37、kList( );printf("-欢迎使用影碟租赁者管理系统-n");printf("由于现在没会员注册,请先注册会员:n");Add_LinkList(H);/ 主菜单内容doprintf(" -$-n");printf(" * 0 退出系统 *n");printf(" * 1 查询租赁者 *n");printf(" * 2 添加新租赁者 *n");printf(" * 3 修改租赁数量 *n");printf(" * 4 删除租赁者 *n&
38、quot;);printf(" * 5 查看所有租赁者 *n");printf(" * 6 按日期查询 *n");printf(" * 7 保存成文件 *n");printf(" -$-n");printf("请选择: ");scanf("%d",&key);printf("n");switch(key)case 0: printf("你选择退出系统,谢谢使用!n"); return ;break;case 1: Search(
39、H);printf("n");break;case 2: Add_LinkList(H);printf("n");break;case 3: Revise_LinkList(H);printf("n");break;case 4: Del_LinkList(H);printf("n");break;case 5: browsing(H);printf("n");break;case 6: Search_Time(H);printf("n");break;case 7: Wri
40、teCDdata(H);printf("n");break;default: printf("你的选择有误!n");printf("继续Y;退出Nn");printf("请选择: ");scanf("%s",&l);while(l='Y'|l='y');3.2.3函数模块模块调用关系主函数main添加信息模块删除信息模块修改信息模块文件写入模块信息显示模块按时间查找信息模块查找信息模块3.2.4 程序流程图本次程序流程图如下开始添加成员函数0 退出 1查询
41、 2 添加3 修改 4 删除 5 查看6. 日期查询 7 存文件查询信息添加信息修改信息删除信息按日期查询显示全部信息以文件存入12345678 继续其他数字,退出88Y继续N退出其他数字Y结束N4.调试报告4.1调试中的问题经过对影碟租赁和系统的研究后,即进行程序的设计和编码;将原程序编好后,经过编译,有如下几个问题:Ø 链表的头结点不存放信息,仅作链表的表示起点,因此每次对链表的增加或查找应从第二个结点开始,即从H->next开始。Ø 增加新的租赁者信息的函数void Add_LinkList(LinkList H)中,采用尾插法插入,因此插入点是最后一个结点,而
42、不是第二个结点,开始以第二个结点作为插入点,在插入后没有将第二个结点后的结点用指针连接起来,导致每次链表中都只有两个结点;最后改成:temp=H->next;while(temp->next) temp=temp->next; q=temp;q既是链表尾结点,以q为结点开始插入。Ø 增加新的租赁者信息的函数void Add_LinkList(LinkList H)中,设置了两个变量i、j作为存储租出影碟的时间数组和名字数组的下标,由于每次对一个用户租赁信息的插入时,i、j的值都会改变,但是对下一个插入租赁者,其存储租出影碟的时间数组和名字数组的下标i、j应该是二者的
43、初始值,不应该是上一次租赁者插入结束后的修改值;经过分析,在每次一个租赁者信息插入结束后修改i、j的值,即i=j=0。Ø 修改租赁信息函数void Revise_LinkList(LinkList H)中,由于对租赁影碟的数量有限制,因此通过判断语句if(p->next->data.Mount>10)来控制用户修改租赁影碟的数量,如果要修改的影碟数量超过上限,则要求用户重新输入修改值,若没有超过上限,则进行相关的操作。Ø 在显示全部租赁者信息的函数void browsing(LinkList H)中,由于空表无法显示信息,因此要对空表提示失败信息,通过语句
44、p=H->next;if(p=NULL) printf("表为空!");来实现。Ø 在添加信息函数、删除信息函数、修改信息函数、查找信息函数中,采用dowhile()语句提供用户选择是否继续相关操作,开始while语句中的判断条件为:x=Y|x=y;这样的条件对于主函数中的switch语句中,系统将字符型数据默认为数值0,因此每次上述函数调用结束后,都只执行switch语句中case 0对应的语句;经过分析,对dowhile()语句判断条件进行修改,判断条件也改成输入数字:printf("继续* 8;其他数字退出*n请输入:");和whi
45、le(x=8) 。Ø 在把内存里的链表信息以文本文件的形式写入外存储器时,对应的每个结点里的数据项应分别写入,开始采用cddata.write(char*)&(p->data),sizeof(p->data);一次写入文件,最后发现写入的数据有些数据项为写入,应将每个数据项单独写入,即改成:cddata.write(char*)&(p->data.Name),sizeof(p->data.Name);cddata.write(char*)&(p->data.Num),sizeof(p->data.Num);cddata.wr
46、ite(char*)&(p->data.Data),sizeof(p->data.Data);cddata.write(char*)&(p->data.Mount),sizeof(p->data.Mount)cddata.write(char*)&(p->data.Price),sizeof(p->data.Price);cddata.write(char*)&(p->data.CDData),sizeof(p->data.CDData);cddata.write(char*)&(p->data.CD
47、Name),sizeof(p->data.CDName) 。4.2对设计和编码的讨论和分析算法采用链表和数组来存储数据,结点间为链表结构,结点内用数组来存储租赁者名字、租赁日期和对应的租赁影碟的名字,由于租赁者名字、租赁日期和对应的租赁影碟的名字等信息长度较短,因此选择数组来存储,但是由于不同信息的长度不一样,因此存在内存的浪费。租赁者的信息在程序开始需要用户输入,建立一个链表,以便在通过人机交互界面进行相关的操作,如果开始链表为空,显然无法执行删除操作、修改操作、查找操作、文件写入操作和显示操作。算法的时间复杂度为:O(n2)。5. 程序运行结果经过对程序错误的修改后,程序执行,经过分
48、析,程序运行结果正确,满足题目要求!运行结果主要截图如下:Ø 程序开始后,输入增加租赁者数量为1,输入姓名:蒲平,租借数量:1,押金:20,注册时间:20110101,编号:1,租借时间:20110107,租借影碟名:哈利波特7。初始界面为:Ø 添加结束后,选择1查询,查询按姓名,分别输入:平平、蒲平,只有输入蒲平时查询成功;按编号,输入:1、2,只有输入1时查询成功。查询结果为:Ø 查询结束后选择2添加新的租赁者,增加姓名:韩江,租赁数目:1,注册时间: 20110101,押金:20,编号:2,租借时间:20110109,影碟:天龙八部,结果为:Ø 添
49、加结束后,选择3,对蒲平的租赁信息进行修改。增加一个租借影碟数目,租借时间为:20110705,名字:海上钢琴师,结果如下:Ø 添加结束后,选择5显示全部租赁者信息:Ø 选择6,按日期查询。输入查询时间:20110101、20110107、20110109.结果为:Ø 继续选择4删除,删除韩江的信息:Ø 删除韩江之后显示链表信息:Ø 删除韩江的租赁信息之后按日期查询。输入时间:20110101、20110107、20110109、20110705。结果为:6.经验和体会6.1感受和体会面向对象程序设计这门课程是计算机专业一门基础性学科,重要性可
50、见一般,学好这门课程对以后人生的发展具有深远的影响。而课程设计便是对学习效果的检验。课程设计不仅可以锻炼我们独立思考问题、解决问题的能力,而且可以培养我们的整体性思维的能力;通过课程设计,加深了对面向对象程序设计的再认识,巩固了面向对象程序设计基础性知识,比如:存储结构、数据查找、对用户错误输入的处理、算法分析等。这次课程设计,我明白了对于编写程序,解题的思路尤为重要。在编写程序之前,如果没有比较清晰的思路,根本不可能编出好的程序。就算马马虎虎的编出来,程序的逻辑性、健壮性、完善性、合理性也不会很强。在编程之前,我们应反复研究题目要求,对题目涉及的情况进行比较充分的分析,以便编写出更加符合题意
51、的程序;其次要充分考虑各种临界情况,对一些错误的输入进行处理。因此在我们编程序之前一定要做好充分的准备,首先要理清自己的思路,然后再将思路分划成几个模块,逐块的写好算法,最后再将所有的模块有机的联系起来,组成一个完整的程序。在成功通过编译的情况下,对程序运行的结果进行系统的分析,检验其正确性,如果有错误,应立即去分析源程序的逻辑错误,直到得到正确的结果。在程序编写的过程中,不仅要对实际问题的各种情况进行充分完全的考虑和分析,还要对各种无法预期的输入的处理,对于不正确的输入应该进行相关的排错处理,程序不仅培养我们的逻辑思维能力,还锻炼我们整体考虑问题的能力,对解决实际问题应该考虑的方面,锻炼了我
52、们思考问题的方式和严密性,开拓了思考问题的全面性能力。在这次课程设计的过程中,我也遇到了很多难题。在种种的困难中,我明白了在编写程序时要有耐心。如果你没有耐心,即使再好的算法思路也不会得到很好的表达,特别是在调试的过程中,对于各种各样的错误,要特别的有耐心去自习分析原因,特别是一些基本的语法错误,不能一看到错误很多就乱了阵脚,更不能轻易的放弃,半途而废。比如在调试中没有定义某些变量的错误、基本的输入输出错误、数据选取不合理的错误、变量名前后不一的错误、函数返回值的错误等等。其实只要有耐心,你就会发现,在你修改了一个错误之后,其它有的错误也会跟着消失,所以在编译的时候一定要有耐心。6.2对算法改进的想法本次程序设计采用的存储结构为链表,这样的存储结构简单易操作,节约存储空间,但是在每个结点内有采用顺序存储结构来存储租赁者名字、租赁日期和对应的租赁影碟的名字,由于租赁者名字、租赁日期和对应的租赁影碟的名字等信息长度较短,因此选择数组来存储,但是由于不同信息的长度不一样,因此存在内存的浪费。因此可以将结点内的存储结构也改成链式存储,这样便不会浪费存储空间。算法中存在很多对用户错误输入的处理,有的处理存在双重循环,在一定程度上增加了时间复杂度,因此可以对错误输入进行再考虑,对主要错误输入尽量用简单的算法解决,尽量降低程序的时间复杂度。7.租赁信息链表内容和源程序7.1租
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专用法律知识培训内容课件
- 脑洞英语语法系列之条件状语从句课件
- 2026届重庆市垫江五中学数学九上期末监测试题含解析
- 2026届辽宁省盘锦市七年级数学第一学期期末质量检测模拟试题含解析
- 新疆乌鲁木齐市第八十七中学2026届数学七年级第一学期期末复习检测模拟试题含解析
- 徐州市重点中学2026届数学八上期末考试试题含解析
- 企业外包服务的市场定位与经营策略探讨
- 浙江省杭州市西湖区2026届九年级数学第一学期期末检测模拟试题含解析
- 工商银行鞍山市铁东区2025秋招半英文面试题库及高分答案
- 邮储银行廊坊市香河县2025秋招笔试经济学专练及答案
- GB/T 45845.1-2025智慧城市基础设施整合运营框架第1部分:全生命周期业务协同管理指南
- 2025至2030中国智能卡行业市场深度调研报告
- 民族地区小学英语情境教学实践探索
- 儿童超重或肥胖的规范化诊断与评估(2024)解读课件
- GB/T 45333-2025类金刚石薄膜球盘法测试类金刚石薄膜的摩擦磨损性能
- 农产品检测技术实习心得范文
- 种植业可研报告范文
- 《复活(节选)》统编版高中语文选择性必修上册
- 《水墨风格动画》课件
- 销售合同协议书模板集
- 南通市启秀初中2024-2025八年级上学期第一次月考物理试卷及答案
评论
0/150
提交评论