C语言 会员卡计费系统

设计一个会员卡计费管理系统。

功能要求:

(1)新会员登记。(将会员个人信息及此会员的会员卡信息进行录入。)

(2)会员信息修改。

(3)会员续费。(会员出示会员卡后,管理人员根据卡号查找到该会员的信息并显示。此时可以进行续费,续费后,提示成功,并显示更新后的信息。)

(4)会员消费结算。(会员出示会员卡后,管理人员根据卡号查找到该会员的信息,结算本次费用。提示成功,并显示更新后的信息。)累计消费满1000元,及自动升级为VIP会员。之后每次消费给予9折优惠。

(5) 会员退卡。(收回会员卡,并将余额退还,删除该会员信息。)

(6)用菜单进行管理

(7)统计功能。

能够按每个会员的缴费总额进行排序。在排序的最后一行显示所有会员的缴费总额,以及消费总额。能够按累计消费总额进行排序。在排序的最后一行显示所有会员的缴费总额,以及消费总额。

#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<string.h>
#define N 100

struct employee //定义一个结构体
{
    int num;
    char name[10];
    char sex;
    int age;
    float wage;
    float xiao;
    float yu;
    char addr[30];
    char tel[15];
}em[100];

//定义各函数
void menu();
void save(int);
void display();
void input();
void modify(); 
void add();
void search();
void search_num();
void del();
void total();

int main()
{
    int n,flag;
    char a;
    int b,j,flg=0;
    menu(); //调用菜单函数
    do
	{
        printf("请选择你需要操作的步骤(1--7):");
        scanf("%d",&n);
        printf("\n");
        if(n>=1&&n<=8)
        {
            flag=1;
        }
        else
        {
            flag=0;
            printf("您输入有误,请重新选择!");
        }
    }while(flag==0);
    while(flag==1)
    {  
        switch(n)
        {
            case 1:printf(" ◆◆◆新会员登记◆◆◆\n");printf("\n");input();break;
            case 2:printf(" ◆◆◆会员信息修改◆◆◆\n");printf("\n");modify();break;
            case 3:printf(" ◆◆◆会员卡续费◆◆◆\n");printf("\n");add();break;
            case 4:printf(" ◆◆◆会员消费结算◆◆◆\n");printf("\n");search();break;
            case 5:printf(" ◆◆◆会员退卡◆◆◆\n");printf("\n");del();break;
            case 6:printf(" ◆◆◆统计功能◆◆◆\n");printf("\n");total();break;
            case 7:exit(0);break;
            default:break;
        }
        getchar();
        printf("\n");
        printf("是否继续进行(y or n):");
        scanf("%c",&a);
        if(a=='y')
        {
            flag=1;
            system("cls"); //清屏
            menu(); //调用菜单函数
            printf("请再次选择你需要操作的步骤(1--7):");
            scanf("%d",&n);
            printf("\n");
        } 
        else exit(0);
    }
}

void menu() //菜单函数
{
    printf(" ********************菜单管理******************\n");
    printf(" 1.新会员登记\n");
    printf(" 2.会员信息修改\n");
    printf(" 3.会员续费\n");
    printf(" 4.会员消费结算\n");
    printf(" 5.会员退卡\n");
    printf(" 6.统计功能\n");
    printf(" 7.退出\n");
    printf(" *************欢迎使用会员卡计费系统************\n");
    printf("\n");
    printf("\n");
} 

void save1(int m) //保存文件函数
{
    int i; 
    FILE *fp;
    if((fp=fopen("employee_list","ab"))==NULL) //创建文件并判断是否能打开
	{
        printf("cannot open file\n");
        exit(0);
    }
    for(i=0;i<m;i++) //将内存中会员的信息输出到磁盘文件中去
    {
        if(fwrite(&em[i],sizeof(struct employee),1,fp)!=1)
            printf("file write error\n");
    }
    fclose(fp);
}

void save(int m) //保存文件函数
{
    int i; 
    FILE *fp;
    if((fp=fopen("employee_list","wb"))==NULL) //创建文件并判断是否能打开
	{
        printf("cannot open file\n");
        exit(0);
    }
    for(i=0;i<m;i++) //将内存中会员的信息输出到磁盘文件中去
    {
        if(fwrite(&em[i],sizeof(struct employee),1,fp)!=1)
            printf("file write error\n");
    }
    fclose(fp);
}

int load() //导入函数
{
    FILE *fp;
    int i=0;
    if((fp=fopen("employee_list","rb"))==NULL)
    {
        printf("没有会员信息,请录入\n");
        exit(0);
    }
    else
    {
        do
        {
            fread(&em[i],sizeof(struct employee),1,fp);
            i++;
        }while(feof(fp)==0);
    }
    fclose(fp);
    return(i-1);
}

void display() //浏览函数
{
    int i;
    int m=load();
    for(i=0;i<m;i++) //m为输入部分的会员人数
    printf("\n卡号:%d\n姓名:%s\n性别:%c\n年龄:%d\n缴费金额:%.2f\n消费金额:%.2f\n住址:%s\n电话:%s\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage,em[i].xiao,em[i].addr,em[i].tel); 
}

int loadAndGetMaxNum() //加载已有会员数据,并返回最大卡号
{
    FILE *fp;
    int j,i=0;
    int maxNum=3000;  //假设首次登记的最小卡号为 3000
    if ((fp=fopen("employee_list","rb"))==NULL)
    {
        return maxNum;
    }
    else
    {
        do
        {
            fread(&em[i],sizeof(struct employee),1,fp);
            i++;
        }while(feof(fp)==0);
        for(j=0;j<i;j++)
        {
            if(em[j].num>maxNum)
                maxNum=em[j].num;
        }
    }
    fclose(fp);
    return maxNum;
}

void input() 
{
    int i,m;
    printf("请输入需要创建信息的会员人数(1--100):");
    scanf("%d",&m);
    printf("\n");
    int lastMaxNum=loadAndGetMaxNum();  //获取上次最大卡号
    int currentNum=lastMaxNum+1;  //本次起始卡号
    for(i=0;i<m;i++)
    {
        em[i].num=currentNum+i;  //按顺序生成卡号
        printf("卡号: %d\n",em[i].num);
        printf("请输入姓名: ");
        scanf("%s",em[i].name);
        getchar();
        printf("请输入性别(f--女 or m--男): ");
        scanf("%c",&em[i].sex);
        getchar();
        printf("请输入年龄: ");
        scanf("%d",&em[i].age);
        getchar();
        printf("请输入缴费金额: ");
        scanf("%f",&em[i].wage);
        getchar();
        printf("请输入住址: ");
        scanf("%s",em[i].addr);
        getchar();
        printf("请输入电话: ");
        scanf("%s",&em[i].tel);
        getchar();
        printf("\n");
    }
    printf("\n创建完毕!\n");
    save1(m);
}

void modify() //修改函数
{
    int num;
    char name[10];
    char sex;
    int age;
    float wage;  
    char addr[30];
    char tel[15];
    int b,c,i,n,t,flag;
    int m=load(); //导入文件内的信息
    printf("\n原来的会员信息:\n");
    display(); //调用浏览函数
    printf("\n");
    do{
        printf("请输入要修改的会员的姓名:");
        scanf("%s",&name);
        for(flag=1,i=0;flag&&i<m;i++)
        {
            if(strcmp(em[i].name,name)==0)
            {
                printf("\n已找到此人,原始记录为:\n");
                printf("\n卡号:%d\n姓名:%s\n性别:%c\n年龄:%d\n缴费金额:%.2f\n余额:%.2f\n住址:%s\n电话:%s\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage,em[i].yu,em[i].addr,em[i].tel);  
                printf("\n确实要修改此人信息请按1;不修改请按0:");
                scanf("%d",&n);
                if(n==1)
                {
                    printf("\n需要进行修改的选项\n 1.卡号2.姓名3.性别4.年龄5.缴费金额6.住址7.电话\n");
                    printf("请输入你想修改的那一项序号:");
                    scanf("%d",&c);
                    if(c>7||c<1)
                        printf("\n选择错误,请重新选择!\n");
                }
            	else if(n==0)  
            	{
                	printf("返回菜单\n"); 
                	system("cls");
                	menu();
            	}
                flag=0;
            }
        }
        if(flag==1)
        {
            printf("\n对不起,查无此人!\n");
        }
    }while(flag==1);
    if(n!=0)
    {
    	do
    	{
        	switch(c) //因为当找到第i个会员时,for语句后i自加了,所以下面的应该把改后的信息赋值给第i-1个人
        	{
            	case 1: printf("卡号改为: ");
                	    scanf("%d",&num);
                	    em[i-1].num=num;
                        break;
            	case 2: printf("姓名改为: ");
                   	    scanf("%s",name);
                    	strcpy(em[i-1].name,name);
                   		break;
            	case 3: printf("性别改为: "); 
                   		getchar();
                  		scanf("%c",&sex);
                   		em[i-1].sex=sex;
                   		break;
            	case 4: printf("年龄改为: ");
                   		scanf("%d",&age);
                   		em[i-1].age=age;
                   		break;
            	case 5:	printf("缴费金额改为: ");
                   		scanf("%f",&wage);  
                   		em[i-1].wage=wage;
                   		break;
            	case 6: printf("住址改为: ");
                   		scanf("%s",addr);
                   		strcpy(em[i-1].addr,addr);
                   		break;
            	case 7: printf("电话改为: ");
                   		scanf("%s",&tel);
                   		strcpy(em[i-1].tel,tel);
                   		break;
        	}
        printf("\n");
        printf("\n是否确定所修改的信息?\n 确定请按1; 不确定,重新修改请按2: ");
        scanf("%d",&b);
    	}while(b==2);
    printf("\n浏览修改后的所有会员信息:\n");
    printf("\n");
    save(m);
    display();
    printf("\n继续修改请按1,不再修改请按0:");
    scanf("%d",&t);
    switch(t)
    {
        case 1:modify();break;
        case 0:system("cls");menu();break;
        default:break;
    }
    getchar();
	}
}

void add() //添加函数
{
    FILE *fp;
    int num,t,i;
    int m=load();
    printf("\n 原来的会员信息:\n");
    display(); //调用浏览函数
    printf("\n");
    fp=fopen("employee_list","a");
    printf("请输入续费会员卡号:");
    scanf("%d",&num);
    for(i=0;i<m;i++)
    {      
	    if(num==em[i].num)
        {
            printf("\n已找到此人,其记录为:\n");
            printf("\n卡号:%d\n姓名:%s\n缴费金额:%.2f\n消费金额:%.2f\n",em[i].num,em[i].name,em[i].wage,em[i].xiao);
		    printf("\n输入续费金额:");
            scanf("%d",&t);
            em[i].wage=em[i].wage+t;
            printf("\n续后金额:\t%.2f\n",em[i].wage);
            printf("\n续费成功!\n");
            printf("\n卡号:%d\n姓名:%s\n性别:%c\n年龄:%d\n缴费金额:%.2f\n消费金额:%.2f\n住址:%s\n电话:%s\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage,em[i].xiao,em[i].addr,em[i].tel);
        }
    }
    save(m);
    fclose(fp);
}

void search() //查询函数
{
    int t,flag;
    search_num(); 
} 

void search_num()
{
    int num,i,t;
    int m=load();
    printf("请输入要查找的会员卡号(3000---3100):");
    scanf("%d",&num);
    for(i=0;i<m;i++)
	{
	    if(num==em[i].num)
        {
        
  • 94
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值