会员卡计费系统c课程设计报告.docx
《会员卡计费系统c课程设计报告.docx》由会员分享,可在线阅读,更多相关《会员卡计费系统c课程设计报告.docx(90页珍藏版)》请在冰豆网上搜索。
![会员卡计费系统c课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-2/6/fbfee90c-7a90-41b3-a131-996c98b766b4/fbfee90c-7a90-41b3-a131-996c98b766b41.gif)
会员卡计费系统c课程设计报告
附件1:
学号:
课程设计
题目
会员卡计费系统
学院
计算机科学与信息工程学院
专业
计算机科学与技术
班级
计算机
学生姓名
指导教师
2015
年
12
月
29
日
重庆工商大学课程设计成绩评定表
学院:
计信学院班级:
计算机3班学生姓名学号:
项目
分值
优秀
(100>x≥90)
良好
(90>x≥80)
中等
(80>x≥70)
及格
(70>x≥60)
不及格(x<60)
评分
参考标准
参考标准
参考标准
参考标准
参考标准
学习态度
15
学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作
学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务
学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作
学习态度尚可,能遵守组织纪律,能按期完成任务
学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度
技术水平与实际能力
25
设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信
设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信
设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信
设计基本合理,理论分析与计算无大错,实验数据无大错
设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题
创新
10
有重大改进或独特见解,有一定实用价值
有较大改进或新颖的见解,实用性尚可
有一定改进或新的见解
有一定见解
观念陈旧
论文(计算书、图纸)撰写质量
50
结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰
结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰
结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰
结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整
内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰
指导教师评定成绩:
指导教师签名:
年月日
课程设计任务书
学生姓名:
王仝专业班级:
14计算机3班
指导教师:
梁新元工作单位:
计信学院
题目:
会员卡计费系统
已知技术参数和设计要求:
设计一个会员卡计费管理系统。
(1)新会员登记。
(将会员个人信息及此会员的会员卡信息进行录入。
)
(2)会员信息修改。
(3)会员续费。
(会员出示会员卡后,管理人员根据卡号查找到该会员的信息并显示。
此时可以进行续费,续费后,提示成功,并显示更新后的信息。
)
(4)会员消费结算。
(会员出示会员卡后,管理人员根据卡号查找到该会员的信息,结算本次费用。
提示成功,并显示更新后的信息。
)累计消费满1000元,及自动升级为VIP会员。
之后每次消费给予9折优惠。
(5)会员退卡。
(收回会员卡,并将余额退还,删除该会员信息。
)
(6)会员卡挂失。
(为该会员补办新卡,并将旧卡余额转至新卡。
)
(7)用菜单进行管理
(8)统计功能。
1)能够按每个会员的缴费总额进行排序。
在排序的最后一行显示所有会员的缴费总额,以及消费总额。
2)能够按累计消费总额进行排序。
在排序的最后一行显示所有会员的缴费总额,以及消费总额。
(9)只有正确输入用户名密码才能使用此系统。
(10)所有内容能够保存到文件中。
下次进入系统是从文件中读取原有信息。
要求完成的主要任务:
1、任务与需求设计任务和具体功能要求
2、概要设计(总体设计)解决目标系统应该如何做的问题,依据需求分析确定软件结构,确定软件各个模块及其它们之间的关系。
(可以在此部分绘制系统功能模块图)
3、详细设计依据概要设计,将模块映射为函数,模块名称映射为函数名称,模块间的函数的接口映射为出/入参数,模块的处理逻辑映射为程序流程图。
具体来说,该步骤主内容包括涉及知识点的描述、详细的设计思路(采用的逻辑结构和存储结构、采用的算法)以及流程图的绘制。
4、编码描述所用数据结构定义、功能函数设计、完整源程序(要求结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释)的实现。
5、运行与测试给出测试方法、用例和测试结果,并赋予文字说明和截图
6、课程设计总结:
各个模块设计和调试时存在问题的思考(问题是哪些?
问题如何解决?
),算法进一步改进的设想。
课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对这门课程的思考、在课程设计过程中对课程的认识等内容。
时间安排:
2015.12.7-2014.12.9初步设计
2014.12.10-2014.12.20代码编写
2014.12.21-2014.12.30撰写报告
指导教师签名:
梁新元2015年12月29日
教研室主任签名:
杨永斌2014年12月29日
会员卡计费系统——课程设计报告
重庆工商大学计算机科学与信息工程学院
2014级计算机3班:
王仝
指导老师:
梁新元
摘要:
会员卡计费系统
关键字:
数组类面向对象
一、设计的问题及功能描述
(1)任务定义
设计一个会员卡计费管理系统。
(1)新会员登记。
(将会员个人信息及此会员的会员卡信息进行录入。
)
(2)会员信息修改。
(3)会员续费。
(会员出示会员卡后,管理人员根据卡号查找到该会员的信息并显示。
此时可以进行续费,续费后,提示成功,并显示更新后的信息。
)
(4)会员消费结算。
(会员出示会员卡后,管理人员根据卡号查找到该会员的信息,结算本次费用。
提示成功,并显示更新后的信息。
)累计消费满1000元,及自动升级为VIP会员。
之后每次消费给予9折优惠。
(5)会员退卡。
(收回会员卡,并将余额退还,删除该会员信息。
)
(6)会员卡挂失。
(为该会员补办新卡,并将旧卡余额转至新卡。
)
(7)用菜单进行管理
(8)统计功能。
1)能够按每个会员的缴费总额进行排序。
在排序的最后一行显示所有会员的缴费总额,以及消费总额。
2)能够按累计消费总额进行排序。
在排序的最后一行显示所有会员的缴费总额,以及消费总额。
(9)只有正确输入用户名密码才能使用此系统。
(10)所有内容能够保存到文件中。
下次进入系统是从文件中读取原有信息。
(2)问题分析
1)基本问题分析
如何用面向对象实现信息录入、信息查询、信息删除与修改、信息保存
2)问题的延伸
问题一:
如何用面向对象实现信息排序
问题二:
如何用面向对象实现信息读取
问题三:
如何用面向对象实现信息输出
二、设计的问题设计思想、方法及方案
当然,为了更好的实现该设计的最终结果,也就是程序,这里有必要对设计思路有条理地整理出来。
以下仅仅是每个子模块应该实现的功能,而具体的算法在实际的程序中再做介绍,下面是设想的步骤:
第一步,定义了一个会员卡类,为了节约空间,所以定义成一个链表类,动态化分配内存空间,因为要装消费记录,所以里面又有个消费记录链表的指针,里面时间是用结构体来装的。
因为还需要密码进入,就定义了一个管理员顺序表。
typedefstruct//时间结构体
{
intyear;
intmouth;
intday;
}timer;
typedefstructLNode//消费记录单链表
{
timert1;//时间
charthings[40];//商品名
intmoney;//价格
intnum;//数量
structLNode*next;//下个节点
}buy;
classcard//会员卡类
{
private:
charname[17];//名字
charcardID[9];//卡号
timert;//注册时间
charID[19];//身份证号
intbalance;//余额
inttotal;//历史消费总额
buy*q;//消费记录
intn;//消费记录条数
intg;//是否挂失
card*nextp;
public:
card();
card(char*p1,char*p2,inty,intm,intd,char*p3,intf,intx);
card(card&p);
~card(){};
};
typedefstruct
{
intid;//管理员编号
charusename[10];//管理员名
charpassword[16];//管理员密码
}manager;
typedefstruct
{
managera[10];
intlength;
}managerList;//管理员链表
第二步,主程序。
其功能是是菜单。
第三步,对用户的选择进行接收的子程序。
当用户输入1,2,3,4的时候,该程序可以将用户的选择反馈给判断程序。
如果用户输入的是这四个数字之外,则提示用户输入不正确,请重新输入。
第四步,当用户输入1,进入会员卡操作系统。
进入选择操作,1.添加会员卡;
2.修改会员卡;
3.退卡;
4.查询会员卡;
1.姓名查找
2.姓名模糊查找
3.卡号查询
4.身份证号查询
5.返回上一级
5.排序;
1.根据卡号插入排序
2.根据历史消费总额插入排序
6.显示全部会员卡;
7.返回上一级;
第五步,当用户输入2,进入会员卡使用系统。
进入选择操作,1.续费;
2.消费;
3.挂失;
1.挂失
2.解挂失
3.补办会员卡
4.返回
4.消费查询;
5.返回上一级;
第六步,当用户输入3,进入管理员系统。
只有当用户问最高管理员,才可以进入该系统。
进入选择操作,1.管理员显示;
2.管理员添加;
3.管理原查询;
4.管理员删除;
5.返回上一级;
三.详细设计和编码
一.会员卡添加函数。
voidcard:
:
add()//添加函数
{
charname1[17];//名字
charcardID1[9];//卡号
charID1[19];//身份证号
intbalance1;//余额
intn;//判断数
for(;;)
{
intx=0;
cout<<"请输入"<cout<<"姓名卡号身份证号首充金额"<cin>>name1>>cardID1>>ID1>>balance1;
card*p;
for(p=nextp;p!
=NULL;p=p->nextp)
{
if(!
strcmp(cardID1,p->cardID))
{
cout<<"添加失败,卡号重复"<x++;
}
if(!
strcmp(ID1,p->ID))
{
cout<<"添加失败,身份证号重复"<x++;
}
}
if(x==0)
{
card*q1;
q1=newcard;
q1->nextp=nextp;
nextp=q1;
strcpy(q1->name,name1);
strcpy(q1->cardID,cardID1);
strcpy(q1->ID,ID1);
q1->balance=balance1;
SYSTEMTIMEm_time;
GetLocalTime(&m_time);
q1->t.year=m_time.wYear;
q1->t.mouth=m_time.wMonth;
q1->t.day=m_time.wDay;
}
s3:
cout<<"是否继续添加:
1.继续,2.返回。
"<cin>>n;
if(n==2)
break;
elseif(n!
=1)
{
cout<<"选择错误,请重新选择"<gotos3;
}
}
}
二.会员显示函数
voidcard:
:
change()//修改函数
{
chara[9];
charb[19];
intm;
cout<<"请输入卡号"<cin>>a;
card*p;
for(p=nextp;p!
=NULL;p=p->nextp)
{
if(!
strcmp(a,p->cardID))
break;
}
if(p==NULL)
{
cout<<"没有查找到"<return;
}
showone(p);
s5:
cout<<"需要改哪一项?
"<cout<<"1.卡号2.姓名3.身份证号"<cin>>m;
switch(m)
{
case1:
cout<<"请输入修改的卡号"<cin>>b;
strcpy(p->cardID,b);
break;
case2:
cout<<"请输入修改的姓名"<cin>>b;
strcpy(p->name,b);
break;
case3:
cout<<"请输入修改的身份证号"<cin>>b;
strcpy(p->ID,b);
break;
default:
cout<<"请输入1-3"<gotos5;
}
}
voidcard:
:
seekCardID()//查询卡号函数
{
chara[9];
cout<<"请输入卡号"<cin>>a;
card*p;
for(p=nextp;p!
=NULL;p=p->nextp)
{
if(!
strcmp(a,p->cardID))
break;
}
if(p==NULL)
{
cout<<"没有查找到"<return;
}
showone(p);
}
三.退卡函数
voidcard:
:
returnCard()//退卡函数
{
chara[9];
intm;
s6:
cout<<"请输入卡号"<cin>>a;
card*p;
for(p=nextp;p!
=NULL;p=p->nextp)
{
if(!
strcmp(a,p->cardID))
break;
}
if(p==NULL)
{
cout<<"没有查找到,请重新输入"<gotos6;
}
showone(p);
s7:
cout<<"确认删除?
1.确认,2取消。
"<cin>>m;
if(m==1)
cardDelete(a);
elseif(m==2)
{
cout<<"已成功取消"<return;
}
else
{
cout<<"确认错误,请重新输入"<gotos7;
}
}
四.查询函数
voidcard:
:
seekCardID()//查询卡号函数
{
chara[9];
cout<<"请输入卡号"<cin>>a;
card*p;
for(p=nextp;p!
=NULL;p=p->nextp)
{
if(!
strcmp(a,p->cardID))
break;
}
if(p==NULL)
{
cout<<"没有查找到"<return;
}
showone(p);
}
voidcard:
:
seekName()//精确姓名查询
{
chara[17];
cout<<"请输入姓名"<cin>>a;
card*p;
for(p=nextp;p!
=NULL;p=p->nextp)
{
if(!
strcmp(a,p->name))
break;
}
if(p==NULL)
{
cout<<"没有查找到"<return;
}
showone(p);
}
voidcard:
:
seekName2()//模糊姓名查询
{
chara[17];
cout<<"请输入模糊姓名"<cin>>a;
card*p;
for(p=nextp;p!
=NULL;p=p->nextp)
{
if(strstr(p->name,a))
break;
}
if(p==NULL)
{
cout<<"没有查找到"<return;
}
showone(p);
}
voidcard:
:
seekID()//身份证查询
{
chara[19];
cout<<"请输入身份证号"<cin>>a;
card*p;
for(p=nextp;p!
=NULL;p=p->nextp)
{
if(!
strcmp(a,p->ID))
break;
}
if(p==NULL)
{
cout<<"没有查找到"<return;
}
showone(p);
}
五.排序函数
voidcard:
:
insertSort()//插入排序
{
card*p1;
card*p2;
card*p3;
card*p4;
if(this->nextp!
=NULL&&this->nextp->nextp!
=NULL)
{
p1=this;
p2=this->nextp;
p3=p2->nextp;
p2->nextp=NULL;
while(p3!
=NULL)
{
p4=p3->nextp;
while(p2!
=NULL&&strcmp(p3->cardID,p2->cardID)>0)
{
p1=p2;
p2=p2->nextp;
}
p1->nextp=p3;
p3->nextp=p2;
p1=this;
p2=this->nextp;
p3=p4;
}
}
else
return;
}
voidcard:
:
insertSortTotal()//插入排序消费总额
{
card*p1;
card*p2;
card*p3;
card*p4;
if(this->nextp!
=NULL&&this->nextp->nextp!
=NULL)
{
p1=this;
p2=this->nextp;
p3=p2->nextp;
p2->nextp=NULL;
while(p3!
=NULL)
{
p4=p3->nextp;
while(p2!
=NULL&&p3->totaltotal)
{
p1=p2;
p2=p2->nextp;
}
p1->nextp=p3;
p3->nextp=p2;
p1=this;
p2=this->nextp;
p3=p4;
}
}
else
return;
}
六.显示会员卡
voidcard:
:
show()//会员卡全部显示函数
{
cout<<"卡号姓名身份证号注册时间余额历史消费挂失"<card*p;
for(p=nextp;p!
=NULL;p=p->nextp)
cout<<""<cardID<<""<name<<""<ID<<""<t.year<<"年"<t.mouth<<"月"<t.day<<"日"<balance<<""<total<<""<g<}
七.续费函数
voidcard:
:
cardRecharge()//续费函数
{
chara[9];//输入卡号
intm;//判断数
intmoney;//续费金额
s6:
cout<<"请输入卡号"<cin>>a;
card*p;
for(p=nextp;p!
=NULL;p=p->nextp)
{
if(!
strcmp(a,p->cardID))
break;
}
if(p==NULL)
{
cout<<"没有查找到,请重新输入"<gotos6;
}
showone(p);
cout<<"请输入充值金额"<cin>>money;
s7:
cout<<"确认充值?
1.确认,2取消。
"<cin>>m;
if(m==1)
{
p->balance+=money;
cout<<"充值成功"<}
elseif(m==2)
{
cout<<"已取消"<return;
}
else
{
cout<<"确认错误,请重新输入"<gotos7;
}
}
八.消费函数
voidcard:
:
purchase()//购买函数
{
chara[9];
charthings[40];//商品名
intmoney;//价格
intnum;//数量
s6:
cout<<"请输入卡号"<cin>>a;
card*p;
for(p=nextp;p!
=NU