资源描述
目录
一、 系统开发背景 1
二、 系统分析和设计 1
(一) 系统功效要求 1
(二) 系统模块结构设计 1
三、 系统设计和实现 2
(一) 添加用户: GETELEM(CNODE*HEAD) 2
(二) 修改用户AMEND(CNODE*HEAD,CHAR NAME[]) 5
(三) 删除用户DELETE(CNODE*HEAD,CHAR NAME[]) 8
(四) 显示用户VOID SHOWALL(CNODE*HEAD) 10
四、 系统测试 12
(一) 测试VOID NAIN ()函数 12
(二) 部分调用函数测试 13
五、 总结 14
六、 附件(代码) 14
用户消费积分管理系统
一、 系统开发背景
为了能够快速依据用户消费积分计算打折后价格,和优惠后价格,给用户以心理上刺激,激发用户消费欲望。而且减轻收银员工作负担;所以,我尤其编写了一套相关用户消费积分管理系统,来方便在日常生活中使用。
二、 系统分析和设计
(一) 系统功效要求
针对用户消费情况,进行用户管理,依据用户消费积分对用户实施不一样程度打折优惠。
1、对用户信息能够进行修改、删除、添加;
2、能够依据消费情况进行用户积分计算;
3、依据积分情况实施不一样程度打折优惠;
(二) 系统模块结构设计
经过对系统功效分析,用户消费积分管理系统功效图(1)所表示。
用户消费积分管理系统
添加函数
修改函数
删除函数
显示函数
图(1)用户消费管理系用统图
经过上图功效分析,首先定义了一个数据域,来存放用户基础信息;其次,基础函数组员有姓名,消费卡号,消费价格和折扣后价格。最关键是利用While语句和switch语句套用来实现,另外,就是要用到malloc函数来存放用户信息分配内存。把整个系统关键划分为4个模块:
1、 添加用户信息:该模块关键实现,用户基础信息(姓名、消费卡号、消费金额)添加,借助函数Getelem(cnode*head)来实现;
2、 修改用户信息:该模块关键实现,对消费者基础信息修改功效,借助函数Amend(cnode*head,char name[])来实现;
3、 删除用户信息:此模块功效是,删除所要确定用户信息,而达成从整个系统清除目标,借助函数Delete(cnode*head,char name[])来实现;
4、 显示用户信息:此模块关键作用是显示消费者相关信息,借助函数Showall(cnode*head)来实现。
三、 系统设计和实现
(一) 添加用户: Getelem(cnode*head)
分析:首先选择添加用户指令,然后输入用户基础信息。用户姓名,用户ID消费卡号,假如输入不正确则需要提醒重输,还有就是用户消费金额,这么才能计算后面积分优惠折扣。最终就显示该添加用户信息。步骤图图(2)所表示。运行结果图(a)所表示。
用户姓名
消费卡ID号
消费金额
积分折扣
图(2)-1模块分析图
开始
输入用户姓名及ID号
(正确)输出用户相关信息
相关信息
结束
(错误)重新输入用户相关信息
(正确)输出用户相关信息
图(2)添加用户信息步骤图
该模块具体代码以下所表示:
#include<stdio.h>//标准输入输出库函数
#include<stdlib.h>//动态存放分配函数
#include<string.h>//字符串函数
struct cnode
{
char name[20];//用户姓名
char ID[4];//用户ID号
double consume;//用户消费
double integer;//用户积分
cnode*next;
};
double display_discount(double points)//用户积分折扣函数
{
double discount;
if(points==0)
{discount=0;}
else if (points>0&&points<=50)
{discount=9.8;}
else if (points>50&&points<=100)
{discount=9.5;}
else if (points>100&&points<=200)
{discount=9.0;}
else if (points>200&&points<=300)
{discount=8.0;}
else if (points>300)
{discount=7.0;}
return discount;
}
void Initstack(cnode*&head)
{
head=(cnode*)malloc(sizeof(cnode));//malloc函数开辟内存单元,分配cnode长度字节存放区
head->next=NULL;
}
void Getelem(cnode*head)//添加用户函数
{cnode*p;
double y;
p=(cnode*)malloc(sizeof(cnode));
printf("请输入姓名:");
scanf("%s",&p->name);
printf("请输入ID(4位):");
scanf("%s",&p->ID);
while(strlen(p->ID)!=4)
{
printf("ID有误,请重新输入(4位):");
scanf("%s",p->ID);
}
printf("请输入消费金额:");
scanf("%lf",&p->consume);
p->integer=p->consume/100;
y=display_discount(p->integer);
printf("折扣:%llf折\n",y);
p->next=head->next;
head->next=p;
system("pasue");
}void main()
{cnode*head;
int choice;
char name[10];
Initstack(head);
do
{
printf("\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" $ 用户消费积分管理系统 $\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\n ****************************");
printf("\n * *");
printf("\n * <<主菜单>> *");
printf("\n * 1.添加用户 *");
printf("\n * 2.查找用户 *");
printf("\n * 3.修改用户 *");
printf("\n * 4.删除用户 *");
printf("\n * 5.显示用户 *");
printf("\n * 6.统计用户 *");
printf("\n * 7.退出 *");
printf("\n ****************************");
printf("\n 请输入您选择(1,2,3,4,5,6,7):");
Getelem(head);break;
system("cls");//程序运行后自动清屏
}while(choice<=7); }
图(a)
(二) 修改用户Amend(cnode*head,char name[])
分析:首先要确定该用户消费积分系统有没有用户,在有用户条件下对所在用户相关信息进行修改。第一步要输入所要修改用户姓名,第二步是选择修改用户姓名、ID消费卡号、还是消费金额。然而对消费金额修改有能够选择是续加金额和覆盖原有金额两种操作。最终结果显示在屏幕上。步骤图 图(3)所表示。运行结果图(b)所表示。
开始
修改用户相关信息
输出修改后信息
结束
没有用户
结束
有用户
图(3)修改用户信息步骤图
该模块具体代码以下所表示:
void Amend(cnode*head,char name[])//修改用户函数
{cnode*p;
double y,z;
int choose, x;
p=head;
if(p->next==NULL)
{printf("\n没有用户!");
}
else
{
while(p->next!=NULL)
{p=p->next;
if(strcmp(name,p->name)==0)
{printf("姓名:%s\n",p->name);
printf("ID:%s\n",p->ID);
printf("消费:%.2lf",p->consume);
printf("积分:%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:%.llf折\n",y);
}
}
printf("\n请选择您要修改资料:1.姓名 2.ID 3.消费金额\n");
scanf("%d",&choose);
switch(choose)
{
case 1: printf("请输入修改后姓名:");
scanf("%s",p->name);break;
case 2: printf("请输入修改后ID:");
scanf("%s",p->ID);break;
while(strlen(p->ID)!=4)
{printf("ID有误,请重输(4位):");
scanf("%s",p->ID);
}break;
case 3: printf("请选择:1覆盖以前消费. 2续加上现在消费.");
scanf("%d",&x);
switch(x)
{case 1:printf("请输入修改后消费:");
scanf("%lf",&p->consume);break;
case 2:printf("请输入续加金额:");
scanf("%lf",&z);
p->consume+=z;break;
}
}
printf("姓名:%s\n",p->name);
printf("ID:%s\n",p->ID);
printf("消费额:%.2lf",p->consume);
p->integer=p->consume/100;
printf("积分:%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:%.llf折\n",y);
}
system("pasue");
}
图(b)
(三) 删除用户Delete(cnode*head,char name[])
分析:首先也是要确定该用户消费积分系统有没有用户,在有用户条件下对所在用户相关信息进行删除。第一步要输入所要删除用户姓名,第二步是就是对所选定用户进行删除,在删除结束时,会出现是否删除成功提醒语,方便进行慎重删除操作。步骤图图(4)所表示。运行结果如
图(c)所表示。
开始
要删除用户
是否删除成功
结束
没有用户
结束
有用户
图(4)删除用户信息步骤图
该模块具体代码以下所表示:
void Delete(cnode*head,char name[])//删除用户函数
{
cnode*p;
int x;
double y;
p=head;
if(p->next==NULL)
{
printf("\n没有用户!");
}
else
{while(p->next!=NULL)
{head=p;
p=p->next;
if(strcmp(name,p->name)==0)
{
printf("姓名:%s\n",p->name);
printf("ID:%s\n",p->ID);
printf("消费:%.2lf",p->consume);
printf("积分:%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:%.llf折\n",y); }
printf("确定删除? 1确定 2取消 请选择:");
scanf("%d",&x);
if(x==1)
{head->next=p->next;
printf("删除成功!");
}
else
{printf("删除失败!");
}
}
}
printf("\n");
system("pause");
}
图(c)
(四) 显示用户void Showall(cnode*head)
分析:首先还是要确定该用户消费积分系统有没有用户,在有用户条件下对全部用户相关信息进行显示。最终将全部用户相关信息显示在屏幕上。步骤图图(5)所表示。运行结果图(d)所表示。
开始
显示全部用户
输出结果
结束
没有用户
结束
有用户
图(5)显示用户信息步骤图
该模块具体代码以下所表示:
void Showall(cnode*head)//显示用户函数
{cnode*p;
double y;
p=head;
if(p->next==NULL)
{printf("没有用户!");}
else
{while(p->next!=NULL)
{p=p->next;
printf("姓名:%s\n",p->name);
printf("ID:%s\n",p->ID);
printf("消费:%.2lf",p->consume);
printf("积分:%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:%.llf折\n",y);}
}system("pause");}
图(d)
四、 系统测试
(一) 测试void nain ()函数
测试该函数使用测试方法,测试具体步骤,测试用例选择,测试结果。首先,经过编译,运行两步操作,排除了该程序中基础语法错误,链接深入检验了程序正确性和正当性,完全排除了程序中逻辑错误,使得程序能够正确运行出来。然后检验程序可实用性,经过操作者自己输入部分对用户操作要求,来完成检验这一步。最终,还要看显示结果是否正确可靠。这么,一个用户消费积分系统程序就完成了。
所以,下图(6)就是主函数测试结果。
图(6)主函数测试结果
(二) 部分调用函数测试
图(4)是查找函数测试,图(5)是统计函数测试。
图(4)查找函数测试结果 图(5)是统计函数测试结果
五、 总结
系统完成了对一个消费商店内部,进行一次优惠打折活动,依据用户在本商店所进行消费情况,对相关消费用户信息进行了增加、删除和修改等操作。而且利用switch语句完成用户自行选择要求,使得程序变得愈加友善友好,让用户依据每一步提醒来完成所需操作,进而达成对相关消费用户操作,而且和此次活动优惠积分要求相一致,来计算用户所得积分及其对应折扣。而且完成了对消费用户信息增加,删除,添改功效。另外充足利用C语言语法结构(次序机构、循环结构及其选择机构),对整个程序进行了合理编写和调试。尽可能做到程序简单、合理明白,加部分合适注释说明部分。
系统不足:这个系统不足在于她不能将用户信息资料存放于磁
盘中,只能在完整一次操作中,不退出此界面一直能有效正确实施命
令。不过退出一次以后,重新操作时,以前用户信息就不再存在了。所以,这是还有待于我不停改善完善地方。
我收获:在此次C++课程设计中,经过设计掌握了C++课程及其数据结构在以后学习C课程中关键性。数据机构中基础理论和算法综合应用是处理实际问题关键手段。在做这次课程设计中最让我得到提升是自己独立思索及实践能力,在完成此项设计过程中,我利用多种和C相关工具书、相关网络信息完成了一个相关用户消费积分管理系统程序,让我从中更多了解了C这门语言及其相关知识,更让我对最初学C态度有了一个强烈转变——C中奥秒就在于自己不停探索和积累。
六、 附件(代码)
#include<stdio.h>//标准输入输出库函数
#include<stdlib.h>//动态存放分配函数
#include<string.h>//字符串函数
struct cnode
{
char name[20];//用户姓名
char ID[4];//用户ID号
double consume;//用户消费
double integer;//用户积分
cnode*next;
};
void Count(cnode*head)//统计用户函数
{cnode *p;
int i=0;
p=head;
if(p->next==NULL)
{
printf("\n没有用户!");
}
else
{
while(p->next!=NULL)
{
p=p->next;
i++;
}
}
printf("\n现有用户数量为%d位\n",i);
system("pause");
}
double display_discount(double points)//用户积分折扣函数
{
double discount;
if(points==0)
{discount=0;}
else if (points>0&&points<=50)
{discount=9.8;}
else if (points>50&&points<=100)
{discount=9.5;}
else if (points>100&&points<=200)
{discount=9.0;}
else if (points>200&&points<=300)
{discount=8.0;}
else if (points>300)
{discount=7.0;}
return discount;
}
void Initstack(cnode*&head)
{
head=(cnode*)malloc(sizeof(cnode));//malloc函数开辟内存单元,分配cnode长度字节存放区
head->next=NULL;
}
void Getelem(cnode*head)//添加用户函数
{cnode*p;
double y;
p=(cnode*)malloc(sizeof(cnode));
printf("请输入姓名:");
scanf("%s",&p->name);
printf("请输入ID(4位):");
scanf("%s",&p->ID);
while(strlen(p->ID)!=4)
{
printf("ID有误,请重新输入(4位):");
scanf("%s",p->ID);
}
printf("请输入消费金额:");
scanf("%lf",&p->consume);
p->integer=p->consume/100;
y=display_discount(p->integer);
printf("折扣:%llf折\n",y);
p->next=head->next;
head->next=p;
system("pasue");
}
void Search(cnode*head,char name[])//查找用户函数
{ cnode*p;
double y;
int flag=false;
p=head;
if(p->next==NULL)
{printf("\n没有用户!");
}
else
{while(p->next!=NULL)
{p=p->next;
if(!strcmp(name,p->name))
{printf("姓名:%s\n",p->name);
printf("ID:%s\n",p->ID);
printf("消费:%.2lf",p->consume);
printf("积分:%lf",p->integer);
printf("折扣:%.llf折\n",y);
flag=true;
}
}
if(!flag)
{
printf("该用户不存在!\n");
}
}
system("pasue");
}
void Amend(cnode*head,char name[])//修改用户函数
{cnode*p;
double y,z;
int choose, x;
p=head;
if(p->next==NULL)
{printf("\n没有用户!");
}
else
{
while(p->next!=NULL)
{p=p->next;
if(strcmp(name,p->name)==0)
{printf("姓名:%s\n",p->name);
printf("ID:%s\n",p->ID);
printf("消费:%.2lf",p->consume);
printf("积分:%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:%.llf折\n",y);
}
}
printf("\n请选择您要修改资料:1.姓名 2.ID 3.消费金额\n");
scanf("%d",&choose);
switch(choose)
{
case 1: printf("请输入修改后姓名:");
scanf("%s",p->name);break;
case 2: printf("请输入修改后ID:");
scanf("%s",p->ID);break;
while(strlen(p->ID)!=4)
{printf("ID有误,请重输(4位):");
scanf("%s",p->ID);
}break;
case 3: printf("请选择:1覆盖以前消费. 2续加上现在消费.");
scanf("%d",&x);
switch(x)
{case 1:printf("请输入修改后消费:");
scanf("%lf",&p->consume);break;
case 2:printf("请输入续加金额:");
scanf("%lf",&z);
p->consume+=z;break;
}
}
printf("姓名:%s\n",p->name);
printf("ID:%s\n",p->ID);
printf("消费额:%.2lf",p->consume);
p->integer=p->consume/100;
printf("积分:%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:%.llf折\n",y);
}
system("pasue");
}
void Delete(cnode*head,char name[])//删除用户函数
{
cnode*p;
int x;
double y;
p=head;
if(p->next==NULL)
{
printf("\n没有用户!");
}
else
{while(p->next!=NULL)
{head=p;
p=p->next;
if(strcmp(name,p->name)==0)
{
printf("姓名:%s\n",p->name);
printf("ID:%s\n",p->ID);
printf("消费:%.2lf",p->consume);
printf("积分:%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:%.llf折\n",y);
}
printf("确定删除? 1确定 2取消 请选择:");
scanf("%d",&x);
if(x==1)
{head->next=p->next;
printf("删除成功!");
}
else
{
printf("删除失败!");
}
}
}
printf("\n");
system("pause");
}
void Showall(cnode*head)//显示用户函数
{
cnode*p;
double y;
p=head;
if(p->next==NULL)
{
printf("没有用户!");
}
else
{
while(p->next!=NULL)
{
p=p->next;
printf("姓名:%s\n",p->name);
printf("ID:%s\n",p->ID);
printf("消费:%.2lf",p->consume);
printf("积分:%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:%.llf折\n",y);
}
}
system("pause");
}
//主文件
void main()
{cnode*head;
int choice;
char name[10];
Initstack(head);
do
{
printf("\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" $ 用户消费积分管理系统 $\n");
printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\n ****************************");
printf("\n * *");
printf("\n * <<主菜单>> *");
printf("\n * 1.添加用户 *");
printf("\n * 2.查找用户 *");
printf("\n * 3.修改用户 *");
printf("\n * 4.删除用户 *");
printf("\n * 5.显示用户 *");
printf("\n * 6.统计用户 *");
printf("\n * 7.退出 *");
printf("\n ****************************");
printf("\n 请输入您选择(1,2,3,4,5,6,7):");
scanf("%d",&choice);
switch(choice)
{
case 1: Getelem(head);break;
case 2: printf("\n请输入要查找用户姓名:");
scanf("%s",name);
Search(head,name);break;
case 3: printf("\n请输入要修改用户姓名:");
scanf("%s",name);
Amend(head,name);break;
case 4: printf("\n请输入要删除用户姓名:");
scanf("%s",name);
Delete(head,name);break;
case 5: printf("\n");
Showall(head);break;
case 6: printf("\n");
Count(head);break;
case 7: exit(1);break;//标准C库函数,作用是使程序终止。故开头有stdlib.h头文件
}
system("cls");//程序运行后自动清屏
}while(choice<=7);
}
展开阅读全文