数据结构课程设计客户积分系统.docx

上传人:b****5 文档编号:6138730 上传时间:2023-01-04 格式:DOCX 页数:11 大小:173.35KB
下载 相关 举报
数据结构课程设计客户积分系统.docx_第1页
第1页 / 共11页
数据结构课程设计客户积分系统.docx_第2页
第2页 / 共11页
数据结构课程设计客户积分系统.docx_第3页
第3页 / 共11页
数据结构课程设计客户积分系统.docx_第4页
第4页 / 共11页
数据结构课程设计客户积分系统.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构课程设计客户积分系统.docx

《数据结构课程设计客户积分系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计客户积分系统.docx(11页珍藏版)》请在冰豆网上搜索。

数据结构课程设计客户积分系统.docx

数据结构课程设计客户积分系统

目录(参考)

附录(源代码)

1系统分析

1.1课程设计内容

客户消费积分管理系统系统,功能包括:

1、采用动态分配顺序表存储客户信息,并用文件保存和读写数据

2、能对客户信息进行添加、查询、修改、删除等基本操作

3、根据客户消费额,合理计算出客户消费所得积分

4、根据客户积分值,实行不同情况的优惠(即计算折扣)

客户消费积分管理系统系统的性能需求:

速度:

系统整体运行要流畅,响应时间不能太长,不能出现系统卡死情况,能满足使用者普通操作。

安全性:

系统涉及使用者的利益,为了防止造成使用者财产损失,应加强系统安全性检测,特别是后台文件的保密。

精度:

系统中涉及到折扣和积分的计算一定要注意精度要求,特别是折扣,应采用高精度数据类型,积分使用整型。

容量:

随着客户数的增多,系统容量不断增加,显然为满足容量需求,应采用动态分配存储空间辅以后台文件存储数据。

1.2系统功能需求分析

功能需求:

商家(软件使用者)可以进行添加、查询、修改、删除客户信息,查看客户信息存储文件,其中包括客户编号、客户姓名、客户消费积分值、客户享受的优惠(折扣)。

客户管理:

客户信息包括客户编号、客户姓名、客户消费积分值、客户享受的优惠(折扣)。

积分管理:

主要包括积分计算、积分更新、积分清零操作。

积分计算:

根据客户的一次性消费额,计算增加的积分值,记录客户本次消费使用的积分值;积分更新:

每次消费后,商家根据客户消费增加的积分值以及使用的积分值计算剩余积分;积分清零:

在年底,商家可以通过该操作将所有用户积分清零。

折扣管理:

根据客户本次消费额和客户已有积分值,计算客户本次消费所享受的优惠,即折扣。

具体规则:

积分值大于2000,享受6折优惠;积分值大于500小于2000,享受7折优惠;积分值大于200小于500,享受8折优惠;积分值大于50小于200,享受9折优惠。

1.3数据结构设计

Customer(客户)定义:

typedefstruct{

charno[10];//客户编号

charname[5];

floatpoints;//积分

floatdiscount;//折扣

}Customer;

顺序表定义:

#definelistinitsize10

#definelistincrement10

typedefstruct

{

Customer*elem;

intlength;//当前长度

intlistsize;//当前分配的存储容量

}SqList;

voidInitSq(SqList&L){//动态分配顺序表存储空间

L.elem=(Customer*)malloc(listinitsize*sizeof(Customer));if(!

L.elem){

printf("Notabletoallocatememory.\n");

exit

(1);

}

L.length=0;

L.listsize=listinitsize;

}

 

2系统设计

 

2.1总体设计

2.2各功能模块的设计

2.2.1主函数main()

动态获取表空间,初始化顺序表,打开文件将客户数据加载入表中,进行表操作,操作结束将表数据保存到文件,文件关闭。

2.2.2客户信息添加

遍历当前顺序表,若待添加的用户编号已存在,则返回用户已存在的提示信息;若待添加的用户不存在,则将该客户信息添加到顺序表最后,并将顺序表长度加1。

2.2.3客户信息删除

遍历当前顺序表,若要删除的用户标号不存在,则返回提示信息;否则提示用户是否确定删除,确定即删除。

删除操作即将待删除记录的后面记录依次向前移动1步。

2.2.4客户信息更新

遍历当前顺序表,若待更新的用户编号不存在,则返回用户不存在的提示信息;若待添加的用户存在,则提示输入新的信息。

2.2.5查找客户信息

2.2.6显示客户信息

遍历顺序表,返回客户信息

2.2.7消费积分清零

遍历顺序表,将积分与折扣赋值为0;

2.2.8积分计算

intpoints_cal(floatconsume)//积分计算规则{

if(consume<=0)cons=0;elseif(consume<=500)cons=consume/10;

elseif(consume<=2000)cons=(consume-500)/8+50;

elseif(consume<=5000)cons=(consume-2000)/6+237;

elsecons=(consume-5000)/5+737;returncons;

}

2.2.9折扣计算

doubleDiscount(intdiscount)//折扣的计算规则{

if(m<=0)discount=10;elseif(m<=50)discount=10;

elseif(m<=200)discount=9;elseif(m<=500)discount=8;

elseif(m<=2000)discount=7;elsediscount=6;

returndiscount;

}

3系统调试

1.运行客户消费积分管理系统,主菜单如下:

2.调用添加客户模块,添加客户信息

3.测试删除模块

4.测试更新模块

其他模块测试类似。

 

4总结

本次课程设计,是我发现了很多不足,比如:

1.软件设计阶段考虑不充分,导致编码时随机性大,方向性不明确;

2.存储结构的选择分析不够充分,没有考虑其它可行的存储实现(只用了动态数组);

3.设计的系统安全性方面未能达到极高级别(后台文件可以随意更改);

此外,在系统调试阶段,我发还现了很多细节方面的不足,使我认识到设计一个系统并非想象中那么简单,而是需要考虑各个方面结果的。

通过本次课程设计,我加深了对顺序存储结构的理解,更加熟悉了顺序表的基本操作,还有文件读写方面的知识得到了回顾。

通过客户积分系统软件的设计,我基本熟悉了一般的软件开发流程,认识到前期设计的重要性与盲目编代码错误观点。

总的来说,本次课程设计获益匪浅,既是对书本所学知识的回顾,更是对课本所学知识的运用。

 

5参考文献

[1]严蔚敏,吴伟民.数据结构.[M]清华大学出版社,2005.

[2]何钦铭,颜晖.C语言程序设计.[M]高等教育出版社,2008.

 

附录

源代码:

#include#include#include

typedefstruct{

charno[10];//客户编号charname[5];

floatpoints;//积分floatdiscount;//折扣

}Customer;

#definelistinitsize10#definelistincrement10

typedefstruct{

Customer*elem;

intlength;//当前长度intlistsize;//当前分配的存储容量

}SqList;

voidInitSq(SqList&L){

L.elem=(Customer*)malloc(listinitsize*sizeof(Customer));//动态分配顺序表存储空间

if(!

L.elem){

printf("Notabletoallocatememory.\n");exit

(1);}

L.length=0;L.listsize=listinitsize;

}

intmain(void){

voidAdd(SqList&L);voidShow(SqList&L);voidDelete(SqList&L);

voidupdate(SqList&L);voidQuery(SqList&L);voidReset(SqList&L);

SqListL;InitSq(L);

charch;Customer*newbase;FILE*fp;

if((fp=fopen("1.txt","r"))==NULL){

printf("Fileopenerror!

\n");exit(0);}

Customercustomer;intc=0,f;ch=fgetc(fp);rewind(fp);

if(ch==EOF)printf("文件为空!

\n");

else{

fscanf(fp,"%s%s%f%f",customer.no,customer.name,&customer.discount,&customer.points);

while(!

feof(fp)){

L.elem[c]=customer;c++;L.length++;

fscanf(fp,"%s%s%f%f",customer.no,customer.name,&customer.discount,&customer.points);

if(L.length>=L.listsize){

newbase=(Customer*)realloc(L.elem,(L.listsize+listincrement)*sizeof(Customer));

if(!

newbase){

printf("Notabletoallocatememory.\n");exit

(1);}

L.elem=newbase;L.listsize+=listincrement;}

}}

printf("输入你要选择的操作:

\n\t1-添加顾客信息\n\t2-删除顾客信息\n\t3-更新顾客信息\n\t4-查找顾客信息\n\t5-显示所有顾客信息\n\t6-清零所有客户的消费积分\n\t0-退出\n");

printf("*****************************\n请选择操作:

");scanf("%d",&f);

while(f!

=0){

switch(f){

case1:

Add(L);break;case2:

Delete(L);break;case3:

update(L);break;

case4:

Query(L);break;case5:

Show(L);break;case6:

Reset(L);break;

default:

printf("请输入正确的操作!

\n");break;}

printf("*****************************\n请选择操作:

");scanf("%d",&f);}

if(fclose(fp)){

printf("Cannotclosethefileerror!

\n");exit(0);}

if((fp=fopen("1.txt","w+"))==NULL){

printf("Fileopenerror!

\n");exit(0);}

for(inti=0;i

fprintf(fp,"%s%s%.1f%.0f\n",L.elem[i].no,L.elem[i].name,L.elem[i].discount,L.elem[i].points);

if(fclose(fp)){

printf("Cannotclosethefileerror!

\n");exit(0);}

return0;

}

voidAdd(SqList&L){

intz=L.length;Customercustomer;

printf("请输入客户信息:

\n");

printf("编号:

");scanf("%s",customer.no);

for(inti=0;i

if(strcmp(L.elem[i].no,customer.no)==0){

printf("编号已存在,请重新输入:

");scanf("%s",customer.no);i=0;}

printf("姓名:

");scanf("%s",customer.name);

customer.discount=10;customer.points=0;L.elem[z]=customer;L.length++;

}

voidShow(SqList&L){

for(inti=0;i

printf("%s%s%.1f%.0f\n",L.elem[i].no,L.elem[i].name,L.elem[i].discount,L.elem[i].points);

}

voidQuery(SqList&L){charno3[10];

inti;

printf("输入要查询的顾客编号:

");scanf("%s",no3);

for(i=0;i

if(strcmp(L.elem[i].no,no3)==0){

printf("%s%s%.1f%.0f\n",L.elem[i].no,L.elem[i].name,L.elem[i].discount,L.elem[i].points);

break;}

if(i>=L.length)printf("没有该顾客信息!

\n");

}

voidDelete(SqList&L){

charno1[10],xx;intcc=1;

printf("输入你要删除的顾客的编号:

");scanf("%s",no1);

printf("您确定要删除%s号客户的信息吗?

\n确定-Y,取消-N:

",no1);

scanf("%s",&xx);

if(xx=='Y'||xx=='y'){

for(inti=0;i

if(strcmp(L.elem[i].no,no1)==0){

for(intj=i;j

L.length--;printf("顾客信息删除完毕!

\n");cc=0;}

if(cc==0)break;}

if(i>=L.length)printf("您所要删除的顾客信息不存在或已删除!

\n");}

elseif(xx=='N'||xx=='n')printf("您的删除操作已取消!

\n");

}

intpoints_cal(floatconsume){//积分计算规则

intss=0;

if(consume<=0)ss=0;elseif(consume<=500)ss=consume/10;

elseif(consume<=2000)ss=(consume-500)/8+50;

elseif(consume<=5000)ss=(consume-2000)/6+237;

elsess=(consume-5000)/5+737;

returnss;}

doubleDiscount(intm){//折扣的计算规则

doubleee;

if(m<=50)ee=10;elseif(m<=200)ee=9;elseif(m<=500)ee=8;

elseif(m<=2000)ee=7;elseee=6;

returnee;}

voidupdate(SqList&L){

charno2[10];floatsum;inti,x,y;

printf("输入您所要更新顾客的编号:

");scanf("%s",no2);

for(i=0;i

if(strcmp(L.elem[i].no,no2)==0)break;

if(i>=L.length)printf("顾客信息不存在。

");

else{

printf("选择你要的操作:

1-增加积分,2-减少积分:

\n");

scanf("%d",&x);

if(x==1){printf("输入本次一次性消费的金额:

");scanf("%f",&sum);

L.elem[i].points+=points_cal(sum);

L.elem[i].discount=Discount(L.elem[i].points);}

else{

printf("输入本次使用的积分值:

");scanf("%d",&y);

L.elem[i].points-=y;

L.elem[i].discount=Discount(L.elem[i].points);}

printf("顾客更新后的信息:

");

printf("%s%s%.1f%.0f\n",L.elem[i].no,L.elem[i].name,L.elem[i].discount,L.elem[i].points);}

}

voidReset(SqList&L){//清零所有客户的积分

for(inti=0;i

L.elem[i].points=0;L.elem[i].discount=10;}

}

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1