c语言课程设计报告会员卡计费系统源代码.docx

上传人:b****5 文档编号:8300661 上传时间:2023-01-30 格式:DOCX 页数:37 大小:20.34KB
下载 相关 举报
c语言课程设计报告会员卡计费系统源代码.docx_第1页
第1页 / 共37页
c语言课程设计报告会员卡计费系统源代码.docx_第2页
第2页 / 共37页
c语言课程设计报告会员卡计费系统源代码.docx_第3页
第3页 / 共37页
c语言课程设计报告会员卡计费系统源代码.docx_第4页
第4页 / 共37页
c语言课程设计报告会员卡计费系统源代码.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

c语言课程设计报告会员卡计费系统源代码.docx

《c语言课程设计报告会员卡计费系统源代码.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告会员卡计费系统源代码.docx(37页珍藏版)》请在冰豆网上搜索。

c语言课程设计报告会员卡计费系统源代码.docx

c语言课程设计报告会员卡计费系统源代码

 

#include

 

//编译预处理指令,引入头文件

#include

#include

#include

#defineMAX10

#defineMENU_MAIN_COUNT7

 

//自定义符号常量

//主菜单的选项个数

typedefstructmember

 

//定义结构体类型

 

member,采用链式存储结构

{

charname[MAX];//姓名

charid[MAX];//卡号

charsex[2];//性别

intage;//年龄

floatmoney;//余额

chartel[12];//电话

structmember*next;//定义一个指针指向下一个会员信息

floatcost;//消费金额

}mem;//定义结构体变量mem

/*声明函数*/

voidmenu();

voidsave(mem*p);

 

/*声明函数,声明菜单函数

//声明保存函数

 

*/

 

mem*head=NULL;

 

//头指针为

 

NULL

mem*get_last(mem

 

*p)

 

//取得链表最后一个元素的节点指针并返回该

指针

{

if(p->next==NULL)

{

returnp;

}

else

{

get_last(p->next);

}

}

 

voidcreat_member(mem

 

*pNew)

 

//输入信息操

作,会员登记函数

{

 

//创建一个新

的会员

chars;

printf("

printf("

 

卡号:

");

请输入姓名

 

:

");

 

scanf("%s",pNew->id);scanf("%s",pNew->name);

 

//运用指针输入卡号

//运用指针输入姓名

 

a:

printf("请输入性别

s=getchar();

if(s=='f'||s=='m')

{

 

(f--女

 

m--男):

");

 

getchar();

 

//输入男女

 

//判断是男是女

if(s=='f'||s=='F')strcpy(pNew->sex,"女");

if(s=='M'||s=='m')strcpy(pNew->sex,"男");

}

else

 

//如果输入错

{

printf("输入错误,请重新输入

gotoa;

 

...\n");

 

//跳转至

 

a,重

新输入

}

printf("

printf("

 

请输入年龄:

");请输入缴费金额

 

:

");

 

scanf("%d",&(pNew->age));scanf("%f",&(pNew->money));

 

//运用指针输入年龄

//运用指针输入余

printf("

 

请输入电话

 

:

");

 

scanf("%s",pNew->tel);

 

//运用指针输入电

pNew->cost=0;

 

//运用指针

初始化消费额为

 

0

printf("\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;

}

else

{

pLast=get_last(head);

pLast->next=pNew;

 

}

printf("

 

继续输入会员信息?

 

(Y

 

继续,

 

N

 

返回菜单

 

)");

 

//判断是否继续登

getchar();

con=getchar();

if(con=='n'||con=='N')

{

save(pNew);

menu();

}

else{

save(pNew);

newMember();

}

}

 

//显示信息

操作

 

voidtable_head()

{//定义表头

printf("+----------+------+------+------+--------+--------+-----------+\n");

printf("|卡号|姓名|性别|年龄|余额|累计消费

 

|

 

电话

 

|\n");

printf("+----------+------+------+------+--------+--------+-----------+\n");

}

voidtable_buttom()

{

 

//定义底线

printf("+----------+------+------+------+--------+--------+-----------+\n");

}

voidtable_row(mem*p)

{

 

//定义中间

部分

printf("|%10s|%6s|%6s|%6d|%8.2f|%8.2f|%11s|\n",p->id,p->name,p->sex,p->age,p->money,p->cost,p->tel);

}

 

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()

{//定义总计

printf("+----------+------+------+------+--------+--------+-----------+\n");

printf("|||||总计|

printf("+----------+------+------+------+--------+--------+-----------+\n");

 

总计

 

|

 

|\n");

}

voidtable_r(floatmoney,floatcost)

{

 

printf("|

 

|

 

|

 

//定义总计

|

 

2

|%8.2f|%8.2f|

 

|\n",money,cost);

}

 

voiddisplay_statistics(mem*p,floatmoney,floatcost)

{

 

//显示统计信

息函数

p=head;

table_head();

while(p!

=NULL)

{

 

//调用表头

table_row(p);

p=p->next;

 

//定义中间部分

}

p=head;

table_sum();

 

//定义总计

table_r(money,cost);

 

//定义总计

 

2

 

}

 

table_buttom();

 

//定义表尾

//文件相关操

 

voidsave(mem*p)

{

 

//保存函数

FILE*fp;

 

//定义一个指

向文件的指针变量

fp=fopen("member.dat",

 

"a");

 

//将fopen函数

的返回值赋给指针变量

 

fp

while(p!

=NULL)

{

fprintf(fp,"%s%s%s%d%f%s%d\n",p->id,p->name,p->sex,p->age,p->money,

p->tel,p->cost);

p=p->next;

}

fclose(fp);

getchar();

 

//关闭指针

}

 

voidmodify_file(mem*p)

{

 

//保存修改

会员信息函数

FILE*fp;

p=head;

if((fp=fopen("member.dat","w"))==NULL)

{

 

//检查打开

文件的操作是否有错

printf("文件不存在

 

");

getchar();

menu();

 

//调用菜单函

}

while(p!

=NULL)

{

fprintf(fp,"%s%s%s%d%f%s%f\n",p->id,p->name,p->sex,p->age,p->money,

p->tel,p->cost);

p=p->next;

}

fclose(fp);

 

getchar();

}

 

voidload(mem*p)

{//从文件加载信息

FILE*fp;

mem*pLast=NULL;

head=NULL;

if((fp=fopen("member.dat","r"))==NULL)

{//检查打开文件的

操作是否有错

printf("没有会员信息,请录入!

");

getch();

menu();//调用菜单函数

}

while(!

feof(fp))

{//文件指针是否到

达末尾

mem*pNew=(mem*)malloc(sizeof(mem));//按mem动态分配内

pNew->next=NULL;

fscanf(fp,"%s%s%s%d%f%s%f\n",

pNew->id,pNew->name,pNew->sex,&(pNew->age),&(pNew->money),pNew->tel,&(pNew->cost));

if(head==NULL)

{

head=pNew;

}

else

{

pLast=get_last(head);

pLast->next=pNew;

}

}

p=head;

fclose(fp);

}

//通过卡号搜索信息函

 

mem*search_id(mem*p)

 

{

 

//通过卡号搜索信息

charid[MAX];

inti=0;

p=head;

scanf("%s",id);

while(p&&(strcmp(id,"n")!

=0))

{

 

//判断

 

id

 

是否不为

 

n

if(strcmp(p->id,id)==0)

{

 

//找到

i=1;

break;

}

else

p=p->next;

}

if(strcmp(id,"n")==0)

 

//输入

 

n时返回菜单

menu();

if(p==NULL)

{

 

//重新搜索卡号

printf("您查找的卡号不存在,请重新输入:

 

\n");

p=search_id(p);

 

//调用寻找函数

}

else

returnp;

 

//返回

 

p

}

/*修改会员信息操作

 

*/

 

voidmodify_m()

{

 

//修改会员的信息

 

chars,fun='y';

charpro[]=

"|\n"

"|1姓名\n"

"|2性别\n"

"|3年龄\n"

"|4电话\n"

"|5返回\n"

"|\n";

mem*p;

load(p);

display(p);

 

//调用显示函数

 

printf("请输入需要修改信息的会员卡号(

p=search_id(p);

 

n返回菜单):

");

//调用按号寻找函数

while(fun=='y'||fun=='Y')

{

 

//当继续寻找时

system("cls");

display_one(p);

printf("请选择修改的项目:

\n");

printf(pro);

getchar();

scanf("%c",&fun);

switch(fun)

{

case'1':

printf("请输入姓名

 

:

");

 

//清屏

//调用显示一条函数

 

//输出pro

 

//用switch语句选择修改内容

scanf("%s",p->name);break;

case'2':

a:

printf("请输入性别

s=getchar();

if(s=='f'||s=='m')

 

(f--女

 

m--男):

");

 

getchar();

{

if(s=='f'||s=='F')strcpy(p->sex,"女");

if(s=='M'||s=='m')strcpy(p->sex,"男");

}

else

{

printf(">输入错误,请重新输入...\n");

gotoa;

}

break;

case'3':

printf("请输入年龄

 

:

");

scanf("%d",&(p->age));break;

case'4':

printf("请输入电话

 

:

");

 

scanf("%s",p->tel);break;

default:

break;

}

printf("是否继续修改

 

Y/N?

");

 

//判断是否继续寻找

getchar();

fun=getchar();

}

modify_file(p);

system("cls");

display_one(p);

 

//调用保存修改会员信息函数

//清屏

//调用显示一条函数

printf("\n

 

修改成功

 

按任意键继续

 

!

");

getchar();

menu();

 

//调用菜单函数

}

//会员续费函数

 

voidadd()

{

//会员续费

floatmoney;

mem*p;

load(p);

display(p);

//调用浏览函数

printf("\n");

printf("请输入需要续费的会员卡号(

n返回菜单):

");

p=search_id(p);

//调用按号寻找函数

system("cls");

//清屏

display_one(p);

//调用显示一条函数

printf("请输入续费金额:

");

scanf("%f",&money);

p->money+=money;

//续费

modify_file(p);

//调用保存修改会员信息

函数

system("cls");

//清屏

display_one(p);

//调用显示一条函数

printf("续费成功,任意键继续!

");

getchar();

menu();

//调用菜单函数

}

//会员结算函数

 

voidconsume()

{//会员结算

mem*p;

floatcost;

load(p);

display(p);

 

/*

 

调用浏览函数

 

*/

printf("\n");

printf("

 

请输入需要结算的会员卡号(

 

n返回菜单):

");

p=search_id(p);

 

//调用按号寻找函数

system("cls");

display_one(p);

 

//清屏

//调用显示一条函数

printf("

 

请输入花费金额:

 

");

scanf("%f",&cost);

if(p->cost>=1000)

{

 

//判断是否升级为

vip

 

printf("恭喜您已经升级为VIP,本次消费

printf("本次实际消费%.2f元!

",cost*0.9);

cost*=0.9;

if((p->money-cost)<0)

{

 

9折优惠。

 

\n");

 

//升级为vip,消费打9折

 

//判断余额是否充

printf("对不起,余额不足,请及时充值!

");

getchar();

menu();

}

p->cost+=cost;

p->money-=cost;//消费getchar();

 

}

else

{

if((p->money-cost)<0)

{

 

//同上

printf("对不起,余额不足,请及时充值!

");

getchar();

menu();

}

p->cost+=cost;

p->money-=cost;

}

modify_file(p);

 

//调用保存修改会员信息函

system("cls");

display_one(p);

 

//

//

 

清屏

调用显示一条函数

printf("结算成功,任意键继续

 

!

");

getch();

menu();

 

//调用菜单函数

}

/*会员退出函数

 

*/

 

voiddelete_m()

{

 

//删除会员信息

mem*p,*q=head,*thelast;

floatmoney;

load(p);

display(p);

 

/*

 

调用浏览函数

 

*/

printf("\n");

 

printf("请输入需要删除的会员卡号(

 

n返回菜单):

");

p=search_id(p);

 

//调用按号寻找函数

thelast=head;

if(p==head)

{

 

//判断指针

head=p->next;

money=p->money;

free(p);

}

else

{

while(thelast)

{

if(thelast->next==p)

break;

else

thelast=thelast->next;

}

thelast->next=p->next;

money=p->money;

free(p);

 

}

 

}

modify_file(q);

printf("退回余额%.2f元!

\n",money);

printf("删除成功,按任意键继续!

");

getch();

menu();

 

//调用保存函数

 

//显示退回的余额

 

//调用菜单函数

/*统计函数*/

 

mem*sort_m()

{

 

//按缴费总额排序

mem*q,*tail,*p=(mem*)malloc(sizeof(mem));

p->next=head;

head=p;

tail=NULL;

 

//定义

 

tail

while(tail!

=head->next)

{

p=head;

q=p->next;

while(q->next!

=tail)

{

 

//判断

 

q是否为

if(p->next->money>q->next->money)

 

{

p->next=q->next;

q->next=q->next->next;

p->next->next=q;

 

//比较大小,排序

}

p=p->next;

q=p->next;

}

tail=q;

}

head=head->next;

free(p);

returnhead;

 

//返回值

}

 

mem*sort_c()

{

 

//按消费金额排

mem*q,*tail,*p=(mem*)malloc(sizeof(mem));

p->next=head;

head=p;

tail=NULL;

 

//定义

 

tail

while(tail!

=head->next)

{

p=head;

q=p->next;

while(q->next!

=tail)

{

if(p->next->cost>q->next->cost)

{

 

//比较大小,排

p->next=q->next;

q->next=q->next->next;

p->next->next=q;

}

p=p->next;

q=p->next;

}

tail=q;

}

head=head->next;

free(p);

returnhead;

 

//返回值

 

}

 

floatsumm(mem*p)

{

 

//计算缴费总额

floatsumm=0;

p=head;

while(p)

{

 

//循环,实现求总额

summ+=p->money;

p=p->next;

}

returnsumm;

 

//返回总额

}

 

floatsumc(mem*p)

{

 

//计算消费总额

floatsumc=0;

p=head;

while(p)

{

 

//循环,实现求总额

sumc+=p->cost;

p=p->next;

}

returnsumc;

 

//返回总额

}

 

voidstatistics()

{

 

//统计会员信息函数

intf=0;

mem*p;

load(p);

 

system("cls");

printf("\t\t=======================================\n"

"\t\t|\n"

"\t\t|1按缴费总额排序\n"

"\t\t|2按消费总额排序\n"

"\t\t|3返回菜单\n"

"\t\t|\n"

"\t\t=

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

当前位置:首页 > 高等教育 > 工学

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

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