武汉理工大学计算机影碟租赁租赁者管理课程设计.docx
《武汉理工大学计算机影碟租赁租赁者管理课程设计.docx》由会员分享,可在线阅读,更多相关《武汉理工大学计算机影碟租赁租赁者管理课程设计.docx(56页珍藏版)》请在冰点文库上搜索。
武汉理工大学计算机影碟租赁租赁者管理课程设计
学号:
课程设计
题目
影碟租赁系统租赁者管理的设计与实现
学院
计算机科学与技术
专业
计算机科学与技术
班级
姓名
指导教师
年
月
日
计算机基础强化训练任务书
学生姓名:
专业班级:
计算机班
指导教师:
工作单位:
计算机科学与技术学院
题目:
初始条件:
理论:
学完计算机基础知识,掌握C++语言编程基础和VC开发平台的使用。
实践:
计算机科学系实验中心提供计算机及软件开发环境。
要求完成的主要任务:
(1)系统需求分析,得到系统的数据需求和功能需求,分析结果用表格记录。
(2)系统设计,包括内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。
要求内存数据用链表组织,数据文件用文本文件,用户界面用字符界面。
至少实现数据记录的增加、修改、删除、查询(查询应能按不同数据项进行)。
(2)编制好程序后,设计若干测试用例,上机测试所设计的程序。
(4)设计报告按格式要求书写。
设计报告正文的内容应包括:
1)系统描述包括问题说明、数据需求和功能需求。
2)系统设计包括内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。
3)系统测试包括测试用例的描述、测试方法和测试结果。
4)设计的特点、不足、收获和体会。
时间安排:
1、第20周(7月4日至7月8日)完成。
2、7月8日8:
00到计算机学院实验中心(三楼)检查程序、交课程设计报告、源程序(CD盘)。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
课程设计报告书
1.问题描述
1.1问题描述
针对影像店影碟出租的管理,设计一个对租赁者进行管理的系统。
1.2基本要求
内存数据结构设计、数据文件设计、代码设计、输入/输出设计、用户界面设计、处理过程设计。
要求内存数据用链表组织,数据文件用文本文件,用户界面用字符界面。
至少实现数据记录的增加、修改、删除、查询(查询应能按不同数据项进行)。
1.3数据需求
经过对影像店的观察,最终确定租赁者的信息包括:
租赁者注册时间、租赁时间、对应时间的租赁影碟的名称、租赁影碟的数量、租赁押金、租赁者的编号。
如下表:
姓名
编号
注册时间
租赁数量
租赁影碟的信息
押金(元)
租赁时间
影碟名字
张三
0001
20110101
2
20110103
《哈利波特7》
50
20110509
《指环王3》
……
……
……
……
……
……
……
1.4功能需求
为实现对影碟租赁者的管理,本系统主要实现以下几个功能:
[1]增加租赁会员。
其中信息包括注册时间、租赁时间、对应时间的租赁影碟的名称、租赁影碟的数量、租赁押金、租赁者的编号。
[2]删除租赁会员。
将对应的会员的信息删除。
[3]修改会员的租赁信息。
对需要修改租赁信息的会员实现影碟数量的增减及相关租赁时间、影碟名字的修改。
[4]查询租赁信息。
设计的查询功能分为以下两种:
Ø按租赁者相关信息查询。
包括按照租赁者姓名查询和按照编号查询,若成功,则返回相关租赁信息,若失败,返回失败信息。
Ø按照租赁日期查询。
对输入的一个日期进行查询,查询结果为:
对应日期注册会员的数量、对应日期租赁影碟的信息(租赁者、租赁数量)。
[5]保存文件。
将内存的信息保存到外存储器上,实现信息的永久保存。
2.实现分析
(1)针对某个影像店的租赁者信息先建立一个链表,存储租赁者的信息:
注册时间、租赁时间、对应时间的租赁影碟的名称、租赁影碟的数量、租赁押金、租赁者的编号。
(2)对于已经建立的链表通过人机交互窗口进行相关的操作。
包括:
退出系统、查询租赁者、添加新租赁者、修改租赁数量、删除租赁者、查看所有租赁者、按日期查询、保存成文件。
(3)对于用户的各种选择操作进行相关的操作,并对用户的错误输入进行处理。
3.程序设计
3.1存储结构设计
本次课程设计采用链表来存储租赁者的相关信息,用到的存储结构如下:
typedefstruct
{charName[20];//租赁者姓名
intMount;//租借影碟数量
doublePrice;//押金
longintData;//注册日期
longintCDData[10];//租赁影碟的时间
longintNum;//租赁者编号
charCDName[CDNUMMAX][20];//租赁影碟的名称
}members;//结构体memember,每个结点的内容
typedefstructnode{
membersdata;
node*next;
}LNode,*LinkList;//结构体LNode,链表的结点
3.2主要算法设计
3.2.1程序主要函数原型及功能
[1]主要函数原型及功能:
LinkListCreat_LinkList()
功能:
创建一个空链表,并返回链表的头结点。
intequal(chara[],charb[])
功能:
判断两个字符数组是否相等函数。
voidAdd_LinkList(LinkListH)
功能:
添加新的租赁者信息,信息包括:
注册时间、租赁时间、对应时间的租赁影碟的名称、租赁影碟的数量、租赁押金、租赁者的编号;并输出租赁会员的总数。
voidRevise_LinkList(LinkListH)
功能:
修改租赁人的租赁信息。
首先需要用户输入需要修改信息的人数,如果人数大于已经注册的会员数,则会提示出错信息,并让用户重新输入;在正确输入后,用户可以输入相关租赁者姓名,并修改其租赁信息,如:
张三原本租赁一张影碟,现在又租借了1张影碟,将这张影碟的租赁信息增加到张三的租赁信息中。
voidDel_LinkList(LinkListH)
功能:
根据用户输入的需要删除的租赁者姓名,完成删除该租赁者的租赁信息,并返回剩余租赁者的数量。
LinkListSearch(LinkListH)
功能:
按照用户的选择:
按姓名查找和按编号查找,完成对相关信息的查找功能。
voidSearch_Time(LinkListH)
功能:
按日期查询租赁信息。
包括对于用户输入的日期,查询该日期的注册人数和租赁影碟的信息;如20110101,有一个人注册,没人租借影碟;20110109,租赁影碟1张:
《哈利波特7》,租赁者李四,押金20等。
voidbrowsing(LinkListH)
功能:
浏览所有租赁者的租赁信息。
voidPrintff(LinkListp)
功能:
输出租赁者的信息。
voidWriteCDdata(LinkListH)
功能:
将主存中的链表信息以文本文件的形式存储到外存储器中。
voidmain()
功能:
实现人机交互,提供用户选择相关操作。
3.2.2各函数的实现
(1)创建一个空链表,并返回头指针:
函数LinkListCreat_LinkList()的实现:
LinkListCreat_LinkList()
{
LinkListH;
H=(LinkList)malloc(sizeof(LNode));
if(H)
H->next=NULL;
returnH;
}
(2)判断两个字符数组是否相等函数
函数intequal(chara[],charb[])的实现:
intequal(chara[],charb[])//定义一个判断两个字符数组是否相等函数
{
inti=0,j;
while(a[i]!
='\0'||b[i]!
='\0')
{
j=0;
if(a[i]==b[i])
{
i++;
j=1;
}
else
break;
}
returnj;//字符串比较,返回值非零相等,零不相等
}
(3)添加租赁者
Ø使用尾插法插入链表的结点,结点信息包括:
租赁者注册时间、租赁时间、对应时间的租赁影碟的名称、租赁影碟的数量、租赁押金、租赁者的编号。
Ø添加租赁者信息voidAdd_LinkList(LinkListH)的实现:
voidAdd_LinkList(LinkListH)//添加新的租赁者信息
{
LinkListp,q,temp,r;
intk=0,i=0,j=1,n,count=0,x;
charname[20],name1[20];
floatprice=0.0;
longintdata,n1,cddata;
do
{
printf("请输入需要增加租赁者数量:
");
scanf("%d",&k);
if(k==0)return;
if(H->next==NULL)q=H;
else
{
temp=H->next;
while(temp->next)
{temp=temp->next;}
q=temp;
}
while(j<=k)
{
p=(LinkList)malloc(sizeof(LNode));
if(!
p)
{
printf("申请空间失败!
\n");
return;
}
else
{
q->next=p;
p->next=NULL;
}
do
{
printf("请输入第%d个租赁者的姓名:
",j);
scanf("%s",&name);
printf("请输入租借数目,押金,注册时间,租赁者编号例如:
350.0201007011\n");
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{
printf("请输入要增加的第%d个影碟的信息:
\n",i+1);
printf("请输入增加租赁日期:
");
scanf("%d",&cddata);
p->data.CDData[j+i-1]=cddata;
printf("请输入对应的影碟名字:
");
scanf("%s",name1);
strcpy(p->data.CDName[j+i-1],name1);
i++;
}
}
i=0;
}while(n<=0||price<=0||n1<=0||data<=0);
printf("新会员添加成功!
\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)修改租赁者的租赁信息
Ø首先提示用户选择相应的修改方式:
按姓名修改信息、按编号修改信息。
Ø根据用户选择的修改方式,输入要修改租赁信息的租赁者名字或编号,进行查找,若查找成功,则修改相关租赁信息,同时对租借数量进行判断是否超过最大租借限度;查找失败,返回失败信息。
Ø显示哈希表的函数voidRevise_LinkList(LinkListH)的实现:
voidRevise_LinkList(LinkListH)//修改租赁人的租赁信息
{
LinkListp,q;
intk=0,k2=1,mount=0,i=0,j=0,count=0,x,m,n,u,v;
charname[20],name1[20];
do
{
printf("请输入需要修改信息的租赁者数量:
");
scanf("%d",&k);
q=H->next;
while(q)
{
count++;
q=q->next;
}
while(k>count)
{
printf("你输入的修改人数大于注册数量!
");
printf("请重新输入:
");
scanf("%d",&k);
}
p=H;
do
{
printf("1按照姓名修改\t2按照编号修改\n请输入:
");
scanf("%d",&m);
if(m!
=1&&m!
=2)printf("你的输入有误!
请重新输入!
");
}while(m!
=1&&m!
=2);
if(m==1)
{
printf("请输入要修改信息的租赁者姓名:
");
scanf("%s",&name);
while(p->next)
{
if(equal(p->next->data.Name,name)==1)
{
k=0;
break;
}
else
p=p->next;
}
}
if(m==2)
{
printf("请输入要修改信息的租赁者编号:
");
scanf("%d",&n);
while(p->next)
{
if(p->next->data.Num=n)
{
k=0;
break;
}
else
p=p->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("%d",&mount);
p->next->data.Mount=p->next->data.Mount+mount;
}
elsebreak;
}
if(mount>0)
{
while(i{
printf("请输入要增加的第%d个影碟的信息:
\n",i+1);
printf("请输入租赁日期:
");
scanf("%d",&p->next->data.CDData[j+i]);
printf("请输入对应的影碟名字:
");
scanf("%s",name1);
strcpy(p->next->data.CDName[j+i],name1);
i++;
}
}
if(mount<0)
{
printf("输入修改租借数量为负,既需要删除租赁的影碟!
\n");
while(i<0-mount)
{
do
{
printf("1按影碟名字修改\t2按租赁日期修改\n请输入:
");
scanf("%d",&u);
if(u!
=1&&u!
=2)printf("你的输入有误!
请重新输入!
");
}while(u!
=1&&u!
=2);
if(u==1)
{
printf("请输入要删除影碟名字:
");
scanf("%sd",&name1);
inth=0;
while(h{
if(equal(p->data.CDName[h],name1)==1)
{
while(h{
strcpy(p->data.CDName[h],p->data.CDName[h+1]);
p->data.CDData[h]=p->data.CDData[h+1];
h++;
}
}
h++;
}
}
if(u==2)
{
printf("请输入要删除影碟的租赁日期:
");
scanf("%d",&v);
inth=0;
while(h{
if(p->data.CDData[h]==v)
{
while(h{
strcpy(p->data.CDName[h],p->data.CDName[h+1]);
p->data.CDData[h]=p->data.CDData[h+1];
h++;
}
}
h++;
}
}
i++;
}
}
i=0;
printf("修改成功!
\n");
}
elseprintf("没有相应的会员!
\n");
printf("继续修改8;其他数字退出修改\n请输入:
");
scanf("%d",&x);
}while(x==8);
}
(5)删除某些租赁者的信息
Ø首先提示用户选择相应的删除方式:
按姓名删除信息、按编号删除信息。
Ø根据用户选择的删除方式,输入要删除租赁信息的租赁者名字或编号,进行查找,若查找成功,则删除相关租赁信息,同时对租借者数量进行减操作;查找失败,返回失败信息。
Ø删除租赁者信息函数voidDel_LinkList(LinkListH)的实现:
voidmain()
{charch1;
InitNameList();
CreateHashList();
do
{printf("D.显示哈希表\nF.查找\nQ.退出\n请选择:
");
cin>>&ch1;
switch(ch1)
{
case'D':
Display();cout<case'F':
FindList();cout<case'Q':
exit(0);
}
cout<<"comeon!
(y/n):
";
cin>>&ch1;
}while(ch1!
='n');
}
(6)租赁信息的查找
Ø首先提示用户选择相应的查找方式:
按姓名查找信息、按编号编号信息。
Ø根据用户选择的查找方式,输入要查找租赁信息的租赁者名字或编号,进行查找,若查找成功,则输出相关租赁信息;查找失败,返回失败信息。
Ø查找租赁者信息函数LinkListSearch(LinkListH)的实现:
LinkListSearch(LinkListH)//查找功能函数定义
{
intk1,x;
LinkListp;
charname[20];
longintnum;
do
{
p=H;
printf("请选择:
\t1,按租赁者姓名查询\t2,按租赁者编号查询\t0,退出查询\n");
printf("请选择:
");
scanf("%ld",&k1);
if(k1==1)//按租赁者姓名查询
{
printf("请输入租赁者姓名:
");
scanf("%s",name);
while(p)
{
if(equal(p->data.Name,name)==1)//查找租赁者姓名
{
printf("查找成功!
\n");
Printff(p);
break;
}
else
p=p->next;
}
if(!
p)
{
printf("查找失败,未注册!
\n");
}
}
if(k1==2)//按租赁者编码查询
{
printf("请输入租赁者编码(数字):
");
scanf("%ld",&num);
while(p)
{
if(p->data.Num==num)
{
printf("查找成功!
\n");
Printff(p);
break;
}
else
p=p->next;
}
if(!
p)
{
printf("查找失败,未注册!
\n");
}
}
if(k1==0)return(NULL);
printf("继续查找8;其他数字退出查找\n请输入:
");
scanf("%d",&x);
}while(x==8);
returnp;
}
(7)按日期查找租赁信息
Ø根据用户输入的日期,进行查找,若查找到相关日期有会员注册或者有影碟租赁出去,则返回相关注册信息或者租赁信息
Ø按日期查找函数voidSearch_Time(LinkListH)的实现:
voidSearch_Time(LinkListH)//按日期查询租赁信息
{
LinkListp;
longinttime;
inti=0,x,j=0,k=0;
do
{
p=H;
printf("请输入日期(格式):
");
scanf("%ld",&time);
while(p)//遍历查找
{
if(p->data.D