1、数据结构课程设计客户积分系统目 录(参考)附录(源代码)1 系统分析1.1 课程设计内容客户消费积分管理系统系统,功能包括:1、采用动态分配顺序表存储客户信息,并用文件保存和读写数据2、能对客户信息进行添加、查询、修改、删除等基本操作3、根据客户消费额,合理计算出客户消费所得积分4、根据客户积分值,实行不同情况的优惠(即计算折扣)客户消费积分管理系统系统的性能需求:速度:系统整体运行要流畅,响应时间不能太长,不能出现系统卡死情况,能满足使用者普通操作。安全性:系统涉及使用者的利益,为了防止造成使用者财产损失,应加强系统安全性检测,特别是后台文件的保密。精度:系统中涉及到折扣和积分的计算一定要注
2、意精度要求,特别是折扣,应采用高精度数据类型,积分使用整型。容量:随着客户数的增多,系统容量不断增加,显然为满足容量需求,应采用动态分配存储空间辅以后台文件存储数据。1.2 系统功能需求分析功能需求:商家(软件使用者)可以进行添加、查询、修改、删除客户信息,查看客户信息存储文件,其中包括客户编号、客户姓名、客户消费积分值、客户享受的优惠(折扣)。客户管理:客户信息包括客户编号、客户姓名、客户消费积分值、客户享受的优惠(折扣)。积分管理:主要包括积分计算、积分更新、积分清零操作。积分计算:根据客户的一次性消费额,计算增加的积分值,记录客户本次消费使用的积分值;积分更新:每次消费后,商家根据客户消
3、费增加的积分值以及使用的积分值计算剩余积分;积分清零:在年底,商家可以通过该操作将所有用户积分清零。折扣管理:根据客户本次消费额和客户已有积分值,计算客户本次消费所享受的优惠,即折扣。具体规则:积分值大于2000,享受6折优惠;积分值大于500小于2000,享受7折优惠;积分值大于200小于500,享受8折优惠;积分值大于50小于200,享受9折优惠。1.3 数据结构设计Customer(客户)定义:typedef struct char no10; /客户编号 char name5; float points; /积分 float discount; /折扣Customer;顺序表定义:#d
4、efine listinitsize 10#define listincrement 10typedef struct Customer * elem; int length; /当前长度 int listsize; /当前分配的存储容量SqList;void InitSq(SqList &L) /动态分配顺序表存储空间 L.elem=(Customer*)malloc(listinitsize*sizeof(Customer); if(!L.elem) printf(Not able to allocate memory.n); exit(1); L.length=0; L.listsize
5、=listinitsize;2 系统设计2.1 总体设计2.2 各功能模块的设计2.2.1 主函数main() 动态获取表空间,初始化顺序表,打开文件将客户数据加载入表中,进行表操作,操作结束将表数据保存到文件,文件关闭。2.2.2 客户信息添加 遍历当前顺序表,若待添加的用户编号已存在,则返回用户已存在的提示信息;若待添加的用户不存在,则将该客户信息添加到顺序表最后,并将顺序表长度加1。2.2.3 客户信息删除 遍历当前顺序表,若要删除的用户标号不存在,则返回提示信息;否则提示用户是否确定删除,确定即删除。删除操作即将待删除记录的后面记录依次向前移动1步。2.2.4 客户信息更新遍历当前顺序
6、表,若待更新的用户编号不存在,则返回用户不存在的提示信息;若待添加的用户存在,则提示输入新的信息。2.2.5 查找客户信息2.2.6 显示客户信息遍历顺序表,返回客户信息2.2.7 消费积分清零遍历顺序表,将积分与折扣赋值为0;2.2.8 积分计算int points_cal(float consume) /积分计算规则 if(consume=0) cons=0;else if(consume=500) cons =consume/10; else if(consume=2000) cons =(consume-500)/8+50; else if(consume=5000) cons =(c
7、onsume-2000)/6+237; else cons =(consume-5000)/5+737;return cons;2.2.9 折扣计算double Discount(int discount) /折扣的计算规则 if(m=0) discount=10;else if(m=50) discount =10; else if(m=200) discount =9;else if(m=500) discount =8; else if(m=2000) discount =7;else discount =6; return discount;3 系统调试1. 运行客户消费积分管理系统,
8、主菜单如下:2.调用添加客户模块,添加客户信息3.测试删除模块4.测试更新模块其他模块测试类似。4 总 结本次课程设计,是我发现了很多不足,比如:1.软件设计阶段考虑不充分,导致编码时随机性大,方向性不明确;2.存储结构的选择分析不够充分,没有考虑其它可行的存储实现(只用了动态数组);3.设计的系统安全性方面未能达到极高级别(后台文件可以随意更改); 此外,在系统调试阶段,我发还现了很多细节方面的不足,使我认识到设计一个系统并非想象中那么简单,而是需要考虑各个方面结果的。通过本次课程设计,我加深了对顺序存储结构的理解,更加熟悉了顺序表的基本操作,还有文件读写方面的知识得到了回顾。通过客户积分系
9、统软件的设计,我基本熟悉了一般的软件开发流程,认识到前期设计的重要性与盲目编代码错误观点。总的来说,本次课程设计获益匪浅,既是对书本所学知识的回顾,更是对课本所学知识的运用。5 参考文献 1 严蔚敏,吴伟民.数据结构. M清华大学出版社,2005.2 何钦铭,颜晖.C语言程序设计. M高等教育出版社,2008.附 录 源代码:#include #include #includetypedef struct char no10; /客户编号 char name5; float points; /积分 float discount; /折扣 Customer;#define listinitsiz
10、e 10 #define listincrement 10typedef struct Customer * elem; int length; /当前长度 int listsize; /当前分配的存储容量SqList;void InitSq(SqList &L) L.elem=(Customer *)malloc(listinitsize*sizeof(Customer); /动态分配顺序表存储空间 if(!L.elem) printf(Not able to allocate memory.n);exit(1); L.length=0; L.listsize=listinitsize;in
11、t main(void) void Add(SqList &L);void Show(SqList &L);void Delete(SqList &L); void update(SqList &L);void Query(SqList &L);void Reset(SqList &L);SqList L;InitSq(L); char ch; Customer * newbase; FILE *fp; if(fp=fopen(1.txt,r)=NULL) printf(File open error!n); exit(0); Customer customer; int c=0,f; ch=
12、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.elemc=customer; c+; L.length+; fscanf(fp,%s%s%f%f,customer.no,customer.name,&customer.discount,&customer.points); if(L.length=L.listsize) newbas
13、e=(Customer *)realloc(L.elem,(L.listsize+listincrement)*sizeof(Customer); if(!newbase) printf(Not able to allocate memory.n);exit(1); L.elem=newbase; L.listsize+=listincrement; printf(输入你要选择的操作:nt1-添加顾客信息nt2-删除顾客信息nt3-更新顾客信息nt4-查找顾客信息nt5-显示所有顾客信息nt6-清零所有客户的消费积分nt0-退出n); printf(*n请选择操作:);scanf(%d,&f)
14、; while(f!=0) switch(f)case 1: Add(L);break;case 2:Delete(L);break;case 3:update(L);break;case 4:Query(L);break;case 5:Show(L);break;case 6:Reset(L);break;default: printf(请输入正确的操作!n); break; printf(*n请选择操作:);scanf(%d,&f); if(fclose(fp) printf(Can not close the file error!n);exit(0); if(fp=fopen(1.tx
15、t,w+)=NULL) printf(File open error!n);exit(0); for(int i=0;iL.length ;i+) fprintf(fp,%s %s %.1f %.0fn,L.elemi.no,L.elemi.name,L.elemi.discount,L.elemi.points); if(fclose(fp) printf(Can not close the file error!n);exit(0);return 0;void Add(SqList &L) int z=L.length; Customer customer; printf(请输入客户信息:
16、n); printf(编号:); scanf(%s,customer.no);for(int i=0;iL.length;i+)if(strcmp(L.elemi.no,customer.no)=0)printf(编号已存在,请重新输入:); scanf(%s,customer.no); i=0; printf(姓名:); scanf(%s,customer.name ); customer.discount=10; customer.points =0; L.elemz=customer;L.length+;void Show(SqList &L) for(int i=0;iL.length
17、;i+) printf(%s %s %.1f %.0fn,L.elemi.no,L.elemi.name,L.elemi.discount,L.elemi.points);void Query(SqList &L) char no310; int i; printf(输入要查询的顾客编号:); scanf(%s,no3); for( i=0;i=L.length) printf(没有该顾客信息!n);void Delete(SqList &L) char no110,xx; int cc=1; printf(输入你要删除的顾客的编号:); scanf(%s,no1); printf(您确定要删
18、除%s号客户的信息吗?n确定-Y,取消-N:,no1); scanf(%s,&xx); if(xx=Y|xx=y) for(int i=0;iL.length;i+) if(strcmp(L.elemi.no,no1)=0) for(int j=i;j=L.length) printf(您所要删除的顾客信息不存在或已删除!n); else if(xx=N|xx=n) printf(您的删除操作已取消!n);int points_cal(float consume) /积分计算规则 int ss=0; if(consume=0) ss=0; else if(consume=500) ss=con
19、sume/10; else if(consume=2000) ss=(consume-500)/8+50; else if(consume=5000) ss=(consume-2000)/6+237; else ss=(consume-5000)/5+737; return ss;double Discount(int m) /折扣的计算规则 double ee; if(m=50) ee=10; else if(m=200) ee=9; else if(m=500) ee=8; else if(m=2000) ee=7; else ee=6; return ee;void update(SqL
20、ist &L) char no210;float sum;int i,x,y; printf(输入您所要更新顾客的编号:);scanf(%s,no2); for(i=0;i=L.length) printf(顾客信息不存在。); else printf(选择你要的操作:1-增加积分,2-减少积分:n);scanf(%d,&x); if(x=1) printf(输入本次一次性消费的金额:); scanf(%f,&sum); L.elemi.points+=points_cal(sum); L.elemi.discount=Discount(L.elemi.points); else printf(输入本次使用的积分值:); scanf(%d,&y); L.elemi.points-=y; L.elemi.discount=Discount(L.elemi.points); printf(顾客更新后的信息:); printf(%s %s %.1f %.0fn,L.elemi.no,L.elemi.name,L.elemi.discount,L.elemi.points);void Reset(SqList &L)/清零所有客户的积分 for(int i=0;iL.length;i+) L.elemi.points=0;L.elemi.discount=10;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1