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

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

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

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

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("卡号:

");scanf("%s",pNew->id);//运用指针输入卡号

printf("请输入姓名:

");scanf("%s",pNew->name);//运用指针输入姓名

a:

printf("请输入性别(f--女m--男):

");getchar();//输入男女

s=getchar();

if(s=='f'||s=='m')//判断是男是女

{

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

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

}

else//如果输入错误

{

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

gotoa;//跳转至a,重新输入

}

printf("请输入年龄:

");scanf("%d",&(pNew->age));//运用指针输入年龄

printf("请输入缴费金额:

");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("|||||总计|总计||\n");

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

}

voidtable_r(floatmoney,floatcost)

{//定义总计2

printf("|||||%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("请输入需要修改信息的会员卡号(n返回菜单):

");

p=search_id(p);//调用按号寻找函数

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

{//当继续寻找时

system("cls");//清屏

display_one(p);//调用显示一条函数

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

\n");

printf(pro);//输出pro

getchar();

scanf("%c",&fun);

switch(fun)

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

case'1':

printf("请输入姓名:

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

case'2':

a:

printf("请输入性别(f--女m--男):

");getchar();

s=getchar();

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

{

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,本次消费9折优惠。

\n");

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

",cost*0.9);//升级为vip,消费打9折

cost*=0.9;

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

{//判断余额是否充足

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=======================================\n"

);

printf("请选择功能:

");

scanf("%d",&f);

switch(f)

{//用switch语句选择功能

case1:

p=sort_m(p);//调用按缴费总额排序

display_statistics(p,summ(p),sumc(p));//调用函数

getch();

menu();

break;

case2:

p=sort_c(p);//调用按消费总额排序

display_statistics

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

当前位置:首页 > 工程科技 > 能源化工

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

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