c语言课程设计报告会员卡计费系统源代码Word格式.docx
《c语言课程设计报告会员卡计费系统源代码Word格式.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告会员卡计费系统源代码Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
![c语言课程设计报告会员卡计费系统源代码Word格式.docx](https://file1.bdocx.com/fileroot1/2022-12/12/0a5216bc-daf6-49e2-ba2d-e8f706f39b44/0a5216bc-daf6-49e2-ba2d-e8f706f39b441.gif)
请输入姓名:
name);
//运用指针输入姓名
a:
请输入性别(f--女m--男):
);
getchar();
//输入男女
s=getchar();
if(s=='
f'
||s=='
m'
)//判断是男是女
f||s=='
F'
)strcpy(pNew->
sex,"
女"
if(s=='
M'
男"
else//如果输入错误
输入错误,请重新输入...\n"
gotoa;
//跳转至a,重新输入
请输入年龄:
%d"
&
(pNew->
age));
〃运用指针输入年龄
请输入缴费金额:
%f"
money));
〃运用指针输入余
额
请输入电话:
tel);
〃运用指针输入电话
pNew->
cost=0;
〃运用指针初始化消费额为0
\n创建完毕!
\n"
voidnewMember()//会员登记函数
{//添加会员信息
charcon='
N'
;
mem*pLast=NULL;
mem*pNew=(mem*)malloc(sizeof(mem));
//按mem动态分配内存pNew->
next=NULL;
creat_member(pNew);
〃调用会员登记函数if(head==NULL)
head=pNew;
pLast=get_last(head);
pLast->
next=pNew;
继续输入会员信息?
(Y继续,N返回菜单门;
〃判断是否继续登记getchar();
con=getchar();
if(con=='
n'
||con=='
)
save(pNew);
menu();
else{
newMember();
//显示信息操作voidtable_head(){//定义表头
++++++++\n"
|卡号|姓名|性别|年龄|余额|累计消费|电话|\n"
printf("
voidtable_buttom()
{//定义底线
}voidtable_row(mem*p){//定义中间部分
|%10s|%6s|%6s|%6d|%8.2f|%8.2f|%11s|\n"
p->
id,p->
name,p->
sex,p->
age,p->
money,p->
cost,p->
voiddisplay(mem*p)
{//显示所有信息
p=head;
table_head();
//调用表头
while(p!
=NULL)
{table_row(p);
//调用中间部分p=p->
next;
}table_buttom();
//调用底线
voiddisplay_one(mem*p)
{//只显示一条信息table_head();
table_row(p);
table_buttom();
voidtable_sum()
{//定义总计
|||||总计|总计||\n"
}voidtable_r(floatmoney,floatcost)
{//定义总计2
|||||%8.2f|%8.2f||\n"
money,cost);
}voiddisplay_statistics(mem*p,floatmoney,floatcost){//显示统计信息函数
//定义中间部分p=p->
table_sum();
//定义总计table_r(money,cost);
//定义总计2table_buttom();
//定义表尾
}//文件相关操作voidsave(mem*p){//保存函数
FILE*fp;
〃定义一个指向文件的指针变量
fp=fopen("
member.dat"
"
a"
//将fopen函数的返回值赋给指针变量fpwhile(p!
fprintf(fp,"
%s%s%s%d%f%s%d\n"
p->
tel,p->
cost);
p=p->
fclose(fp);
//关闭指针
getchar();
voidmodify_file(mem*p)
{//保存修改会员信息函数
if((fp=fopen("
w"
))==NULL)
{//检查打开文件的操作是否有错
文件不存在"
menu();
//调用菜单函数
%s%s%s%d%f%s%f\n"
}voidload(mem*p)
{//从文件加载信息
mem*pLast=NULL;
head=NULL;
r"
{//检查打开文件的操作是否有错printf("
没有会员信息,请录入!
"
getch();
menu();
//调用菜单函数
}while(!
feof(fp))
{//文件指针是否到达末尾mem*pNew=(mem*)malloc(sizeof(mem));
fscanf(fp,"
id,pNew->
name,pNew->
sex,&
age),&
money),pNew->
tel,&
(pNew->
cost));
if(head==NULL){head=pNew;
}else{pLast=get_last(head);
fclose(fp);
//通过卡号搜索信息函数mem*search_id(mem*p){//通过卡号搜索信息
charid[MAX];
inti=0;
scanf("
id);
while(p&
&
(strcmp(id,"
n"
)!
=0))
{//判断id是否不为n
if(strcmp(p->
id,id)==0)
{//找到
i=1;
break;
elsep=p->
}if(strcmp(id,"
)==0)//输入n时返回菜单menu();
if(p==NULL)
{//重新搜索卡号
您查找的卡号不存在,请重新输入:
\n"
p=search_id(p);
〃调用寻找函数
elsereturnp;
//返回p
/*修改会员信息操作*/
voidmodify_m()
{//修改会员的信息
chars,fun='
y'
charpro[]=
|\n"
|1姓名\n"
|2性别\n"
|3年龄\n"
|4电话\n"
|5返回\n"
mem*p;
load(p);
display(p);
//调用显示函数printf("
请输入需要修改信息的会员卡号(n返回菜单):
//调用按号寻找函数while(fun=='
||fun=='
Y'
{//当继续寻找时
system("
cls"
〃清屏
display_one(p);
〃调用显示一条函数printf("
请选择修改的项目:
printf(pro);
//输出progetchar();
%c"
fun);
switch(fun)
{//用switch语句选择修改内容
break;
case'
1'
:
请输入姓名:
2'
a
请输入性别(f--女m--男):
)strcpy(p->
>
gotoa;
3'
请输入年龄:
(p->
4'
请输入电话:
default:
是否继续修改Y/N?
);
//判断是否继续寻找
fun=getchar();
modify_file(p);
//调用保存修改会员信息函数system("
〃调用显示一条函数
\n修改成功,按任意键继续!
menu();
}//会员续费函数voidadd()
{//会员续费
//调用浏览函数
请输入需要续费的会员卡号(n返回菜单):
p=search_id(p);
〃调用按号寻找函数
请输入续费金额:
money);
p->
money+=money;
〃续费modify_file(p);
续费成功,任意键继续!
//会员结算函数
voidconsume()
{//会员结算
floatcost;
/*调用浏览函数*/
请输入需要结算的会员卡号(n返回菜单):
//调用按号寻找函数
//清屏
请输入花费金额:
cost);
cost>
=1000)
{//判断是否升级为vip
恭喜您已经升级为VIP,本次消费9折优惠。
本次实际消费%.2f元!
cost*0.9);
〃升级为vip,消费打9折cost*=0.9;
if((p->
money-cost)<
0)
{//判断余额是否充足
对不起,余额不足,请及时充值!
cost+=cost;
money-=cost;
//消费getchar();
{//同上
对不起,余额不足,请及时充值!
p->
}modify_file(p);
结算成功,任意键继续!
getch();
/*会员退出函数*/
voiddelete_m()
{//删除会员信息
mem*p,*q=head,*thelast;
floatmoney;
display(p);
/*调用浏览函数*/printf("
请输入需要删除的会员卡号(n返回菜单):
thelast=head;
if(p==head)
{//判断指针
head=p->
money=p->
money;
free(p);
while(thelast)
if(thelast->
next==p)
elsethelast=thelast->
}thelast->
next=p->
}modify_file(q);
//调用保存函数printf("
退回余额%.2f元!
money);
删除成功,按任意键继续!
//显示退回的余额getch();
}/*统计函数*/
mem*sort_m()
{//按缴费总额排序mem*q,*tail,*p=(mem*)malloc(sizeof(mem));
next=head;
head=p;
tail=NULL;
〃定义tail
while(tail!
=head->
next)
q=p->
while(q->
next!
=tail){//判断q是否为空if(p->
next->
money>
q->
money){
next=q->
next;
//比较大小,排序q->
next=q->
next=q;
q=p->
}tail=q;
}head=head->
returnhead;
//返回值
}mem*sort_c(){//按消费金额排序
mem*q,*tail,*p=(mem*)malloc(sizeof(mem));
while(q->
=tail)
cost)
{//比较大小,排序p->
q->
tail=q;
head=head->
free(p);
floatsumm(mem*p)
{//计算缴费总额
floatsumm=0;
while(p)
{//循环,实现求总额
summ+=p->
returnsumm;
//返回总额
floatsumc(mem*p)
{//计算消费总额
floatsumc=0;
sumc+=p->
cost;
returnsumc;
voidstatistics()
{//统计会员信息函数
intf=0;
\t\t=======================================\n"
\t\t|\n"
\t\t|1按缴费总额排序\n"
\t\t|2按消费总额排序\n"
\t\t|3返回菜单\n"
请选择功能:
f);
switch(f)
{//用switch语句选择功能case1:
p=sort_m(p);
//调用按缴费总额排序
display_statistics(p,summ(p),sumc(p));
//调用函数getch();
case2:
p=sort_c(p);
〃调用按消费总额排序
default:
/*退出系统操作*/
voidclear(mem*p)
{//释放链表空间
return;
}else{clear(p->
p=NULL;
}voidquit(){//退出函数clear(head);
exit(0);
/*菜单信息*/voidmenu_tile(char*title){//菜单表头
\t\t|%s\n"
title);
\t\t\n"
void(*menu_main_func[])()=/*函数指针数组menu_main_func[]存储的是主菜单项中7个功能函数的地址,
分别对应1-7菜单项。
例如用户选择1时,调用数组的第0个元素,即调用newMember()函数,以此类推。
*/
{newMember,modify_m,add,consume,delete_m,statistics,quit,
};
charmenu_main[]=//菜单主函数
\t\t\n"
\t\t|1新会员登记\n"
\t\t|2会员信息修改\n"
\t\t|3会员续费\n"
\t\t|4会员消费结算\n"
\t\t|5会员退卡\n"
\t\t|6统计功能\n"
\t\t|7退出系统\n"
voidmenu()
{//菜单函数
intselected=0;
//初始化变量
会员卡计费系统"
printf(menu_main);
//输出菜单主函数
while(!
(selected>
=1&
selected<
=MENU_MAIN_COUNT))
{//判断初始值
请选择:
selected);
if(selected>
=MENU_MAIN_COUNT)
{//判断输入值是否有效
\n>
输入错误!
(注:
请选择1-%d)\n"
MENU_MAIN_COUNT);
menu_main_func[selected-1]();
〃调用相应的函数指针数组中的函数,执行操作
intmain()/*主函数*/
//调用菜单函数return0;