数据结构课程设计客户积分系统Word格式文档下载.docx
《数据结构课程设计客户积分系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计客户积分系统Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计客户积分系统Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/3/8a7e4017-73c3-44b8-8b8a-18f5076b95b7/8a7e4017-73c3-44b8-8b8a-18f5076b95b71.gif)
具体规则:
积分值大于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;
=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;
=500)discount=8;
=2000)discount=7;
elsediscount=6;
returndiscount;
3系统调试
1.运行客户消费积分管理系统,主菜单如下:
2.调用添加客户模块,添加客户信息
3.测试删除模块
4.测试更新模块
其他模块测试类似。
4总结
本次课程设计,是我发现了很多不足,比如:
1.软件设计阶段考虑不充分,导致编码时随机性大,方向性不明确;
2.存储结构的选择分析不够充分,没有考虑其它可行的存储实现(只用了动态数组);
3.设计的系统安全性方面未能达到极高级别(后台文件可以随意更改);
此外,在系统调试阶段,我发还现了很多细节方面的不足,使我认识到设计一个系统并非想象中那么简单,而是需要考虑各个方面结果的。
通过本次课程设计,我加深了对顺序存储结构的理解,更加熟悉了顺序表的基本操作,还有文件读写方面的知识得到了回顾。
通过客户积分系统软件的设计,我基本熟悉了一般的软件开发流程,认识到前期设计的重要性与盲目编代码错误观点。
总的来说,本次课程设计获益匪浅,既是对书本所学知识的回顾,更是对课本所学知识的运用。
5参考文献
[1]严蔚敏,吴伟民.数据结构.[M]清华大学出版社,2005.
[2]何钦铭,颜晖.C语言程序设计.[M]高等教育出版社,2008.
附录
源代码:
#include<
stdio.h>
#include<
stdlib.h>
string.h>
//客户编号charname[5];
//积分floatdiscount;
//折扣
#definelistinitsize10#definelistincrement10
typedefstruct{
//当前长度intlistsize;
//当前分配的存储容量
L){
L.elem=(Customer*)malloc(listinitsize*sizeof(Customer));
//动态分配顺序表存储空间
if(!
exit
(1);
L.length=0;
intmain(void){
voidAdd(SqList&
L);
voidShow(SqList&
voidDelete(SqList&
voidupdate(SqList&
voidQuery(SqList&
voidReset(SqList&
SqListL;
InitSq(L);
charch;
Customer*newbase;
FILE*fp;
if((fp=fopen("
1.txt"
"
r"
))==NULL){
Fileopenerror!
\n"
exit(0);
Customercustomer;
intc=0,f;
ch=fgetc(fp);
rewind(fp);
if(ch==EOF)printf("
文件为空!
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++;
if(L.length>
=L.listsize){
newbase=(Customer*)realloc(L.elem,(L.listsize+listincrement)*sizeof(Customer));
if(!
newbase){
L.elem=newbase;
L.listsize+=listincrement;
}}
printf("
输入你要选择的操作:
\n\t1-添加顾客信息\n\t2-删除顾客信息\n\t3-更新顾客信息\n\t4-查找顾客信息\n\t5-显示所有顾客信息\n\t6-清零所有客户的消费积分\n\t0-退出\n"
*****************************\n请选择操作:
"
scanf("
%d"
&
f);
while(f!
=0){
switch(f){
case1:
Add(L);
break;
case2:
Delete(L);
case3:
update(L);
case4:
Query(L);
case5:
Show(L);
case6:
Reset(L);
default:
请输入正确的操作!
break;
if(fclose(fp)){
Cannotclosethefileerror!
exit(0);
w+"
for(inti=0;
i<
L.length;
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)){
return0;
voidAdd(SqList&
intz=L.length;
Customercustomer;
请输入客户信息:
编号:
scanf("
%s"
customer.no);
for(inti=0;
L.length;
if(strcmp(L.elem[i].no,customer.no)==0){
printf("
编号已存在,请重新输入:
i=0;
姓名:
customer.name);
customer.discount=10;
customer.points=0;
L.elem[z]=customer;
L.length++;
L){charno3[10];
inti;
输入要查询的顾客编号:
no3);
for(i=0;
if(strcmp(L.elem[i].no,no3)==0){
break;
if(i>
=L.length)printf("
没有该顾客信息!
charno1[10],xx;
intcc=1;
输入你要删除的顾客的编号:
no1);
您确定要删除%s号客户的信息吗?
\n确定-Y,取消-N:
xx);
if(xx=='
Y'
||xx=='
y'
){
i++){
if(strcmp(L.elem[i].no,no1)==0){
for(intj=i;
j<
j++)L.elem[j]=L.elem[j+1];
L.length--;
顾客信息删除完毕!
cc=0;
if(cc==0)break;
=L.length)printf("
您所要删除的顾客信息不存在或已删除!
elseif(xx=='
N'
n'
)printf("
您的删除操作已取消!
intpoints_cal(floatconsume){//积分计算规则
intss=0;
=0)ss=0;
=500)ss=consume/10;
=2000)ss=(consume-500)/8+50;
=5000)ss=(consume-2000)/6+237;
elsess=(consume-5000)/5+737;
returnss;
doubleDiscount(intm){//折扣的计算规则
doubleee;
=50)ee=10;
elseif(m<
=200)ee=9;
=500)ee=8;
=2000)ee=7;
elseee=6;
returnee;
voidupdate(SqList&
charno2[10];
floatsum;
inti,x,y;
输入您所要更新顾客的编号:
no2);
for(i=0;
if(strcmp(L.elem[i].no,no2)==0)break;
顾客信息不存在。
else{
选择你要的操作:
1-增加积分,2-减少积分:
x);
if(x==1){printf("
输入本次一次性消费的金额:
%f"
sum);
L.elem[i].points+=points_cal(sum);
L.elem[i].discount=Discount(L.elem[i].points);
else{
printf("
输入本次使用的积分值:
y);
L.elem[i].points-=y;
L.elem[i].discount=Discount(L.elem[i].points);
顾客更新后的信息:
L){//清零所有客户的积分
L.elem[i].points=0;
L.elem[i].discount=10;