程序语言设计基础的课程设计【大哭】,C语言小白表示太难了,题目是会员卡计费系统,想问问有没有C语言大佬帮我解答一下疑问,我的消费总额和充值总额算不出来【大哭】,代码如有雷同他人的,我就是借鉴的那个。

xz20160128 2023-05-24 16:25:33

程序语言设计基础的课程设计【大哭】,C语言小白表示太难了,题目是会员卡计费系统,想问问有没有C语言大佬帮我解答一下疑问,我的消费总额和充值总额算不出来【大哭】,不知道是什么原因,代码如有雷同他人的,我就是借鉴的那个。

#include<stdio.h>
#include<string.h>
#include<time.h>//说明运用了一些用于处理时间和日期的类型和函数
#include<windows.h>//主要是含入文件
#define N 100
struct employee
{
	int num;
	char name[30];
	char sex;
	int age;
	float wage;//充值金额 
	float balance;//余额 
	float xiao;//消费金额
	float cost;//消费总金额
	float money;//充值总金额 
	char addr[30];
	char tel[12];
	struct employee *next; 
 }em[100];//定义一个结构体
 void menu();//定义菜单函数
 void input();
 void save(int);//把定义为全局变量值直接存入磁盘中
 void display();//定义一个显示输出函数display
 void del();//定义del函数,实现调用del实现删除操作 
 void add();//定义求和运算函数add
 void search();//定义查询函数 
 void search_num();
 void search_tel();
 void modify();//定义了一个修改函数,定义各种函数
 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"); 
  }
  int main()
  {
  	int n,flag;
  	char a;
  	char* s1=NULL;
  	int b,j,flg=0;
  	menu();//调用菜单函数
	{
	printf("请选择你的需要操作的步骤(1--7):\n");
	scanf("%d",&n);
	if(n>=1&&n<=7)
	{
		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");display();break;
	 		case 3:printf("---会员消费结算---\n");printf("\n");search();break;
	 		case 4:printf("---会员退卡---\n");printf("\n");del();break;
	 		case 5:printf("---会员卡续费---\n");printf("\n");add();break;
	 		case 6:printf("---会员信息修改---\n");printf("\n");modify();break;
	 		case 7:exit(0);break;
	 		dafault:break;
		 }
		getchar();
		printf("\n");
		printf("是否继续进行(y or n):\n");
		scanf("%c",&a);
		if(a=='y')
		{
			flag=1;
			system("cls");//清屏
			menu();//调用菜单函数
			printf("请再次选择你需要操作的步骤(1--6):\n");
			scanf("%d",&n);
			printf("\n"); 
		}
		else
		exit(0);
	 }
     }
     
	void input()//录入函数
	{
	int i,m;
	printf("请输入需要创建信息的会员人数(1--100):\n");
	scanf("%d",&m);
	for (i=0;i<m;i++)
	{
		printf("卡号为:");
		srand((int)time(0));//使用系统时间来初始化,srand函数是随机数发生器的初始化函数 
		em[i].num=rand()%100+2000000;//rand函数可以用来产生随机数 
		if(em[i].num!=em[i-1].num)
		printf("%8d",em[i].num);
		printf("\n");
		printf("请输入姓名:"); 
		scanf("%s",em[i].name);
		getchar();
		printf("请输入性别(f--女 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);
		printf("\n"); 
		}
	printf("\n创建完毕!\n");
	save(m);
   }
   
   void save(int m)//把m的全部变量存储起来 
   {
   	int i;
	FILE*fp;
	if((fp=fopen("employee_list","wb"))==NULL)//创建文件并判断是否能打开
	{
		printf("Can not open file\n");
		exit(0); 
	 }   
	for(i=0;i<m;i++)//将内存中会员的信息输出到磁盘文件中去
	if(fwrite(&em[i],sizeof(struct employee),1,fp)!=1)//将em[i]中的一个数据写入文件中 
	printf("file write error\n");
	fclose(fp);//关闭文件指针所指向的文件    
	}
	
	int load()//将save保存的全部变量导入 
	{
		FILE*fp;
		int i=0;
		if((fp=fopen("employee_list","rb"))==NULL)
		{
			printf("Can not file\n");
			exit(0);
		}
	    else
	    {
	    	do
	    	{
	    		fread(&em[i],sizeof(struct employee),1,fp);//将一个数据项读到em[i]数组中 
	    		i++;
			}
			while(feof(fp)==0);//feof检测fp所指文件的读写指针是否结束 
		}
		fclose(fp);
		return(i-1);
	 }
	
	float summ()//计算充值总额 
	{
		int i;
		int m=load();
		float wage;
		float summ=0;
		for(i=0;i<m;i++)
		{
			summ+=em[i].wage;
		}
		em[i].money=summ;
		return em[i].money;
	}
	float sumc()//计算消费总额 
	{
		int i;
		int m=load();
		float cost;
		float sumc=0;
		for(i=0;i<m;i++)
		{
			sumc+=em[i].xiao;
		}
		em[i].cost=sumc;
		return em[i].cost;
	 } 
	void display()//浏览函数
	{
		int i;
		int m=load();
		printf("\n 卡号  \t姓名\t 性别 \t年龄\t 充值金额\t消费金额\t家庭住址\t电话号码\n");
		for(i=0;i<m;i++)//m为输入部分的会员人数
		printf("\n %d  %s\t %c\t %d\t     %f\t   %f\t        %s\t       %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);
		float summ();
		float sumc();
		printf("\n 消费总额为:%f\n",em[i].cost);
		printf("\n 充值总额为:%f\n",em[i].money);
    }
	
	 void del()//删除函数
	 {
	 	int m=load();
		int i,j,n,t,flag;
		char name[30];
		printf("\n原来会员信息:\n");
		display();//调用浏览函数
		printf("\n");
		printf("请输入要删除的会员名字:\n");
		scanf("%s",name);
		for(flag=1,i=0;flag&&i<m;i++)
		{
			if(strcmp(em[i].name,name)==0)//strcmp为比较函数,若 em[i].name=name则返回0
			{
				printf("\n已找到此人!原始记录为:\n");
				printf("\n卡号  姓名  性别  年龄  充值金额  余额\n");
				printf("\n %d\t%s\t%c\t%d\t%f\t%f\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage,em[i].balance);
				printf("\n确认要删除此人信息请按1,不删除请按0\n");
				scanf("%d",&n);
				if(n==1)//如果删除,则其他的信息都往上移一行
				{
					for(j=i;j<m-1;j++)
					{
						strcpy(em[j].name,em[j+1].name);//strcpy函数是对字符串进行拷贝 
						em[j].num=em[j+1].num;
						em[j].sex=em[j+1].sex;
						em[j].age=em[j+1].age;
						em[j].wage=em[j+1].wage;
						em[j].balance=em[j+1].balance; 
					 }
					flag=0; 
				 } 
			 } 	
			}
		if(!flag)
		m=m-1;
		else
		printf("\n对不起,查无此人!\n");
		printf("退回余额%.2f元!\n",em[i].balance);
		printf("\n浏览后删除所有会员信息:\n");
		save(m);//调用保存函数
		display();//调用浏览函数
		printf("\n继续删除请按1 不再删除请按0\n");
		scanf("%d",&t);
		switch(t)
		{
			case 1:del();break;
			case 0:break;
		 } 
		 }
		 
	void add()//添加函数
	{
		FILE*fp;
		int num;
		float t;
		int i;
		int m=load();
		printf("\n 原来的会员信息:\n");
		display();//调用浏览函数
		printf("\n");
		fp=fopen("emploee_list","a");
		printf("请输入充值会员卡号:\n");
		scanf("%d",&num);
		for(i=0;i<m;i++)
		if(num==em[i].num)
		{
			printf("\n已找到此人,其记录为:\n");
			printf("\n卡号\t姓名\t充值金额\t余额\n");
			printf("\n%d\t%s\t%f   \t\t%f\n",em[i].num,em[i].name,em[i].wage,em[i].balance);
			printf("请输入充值金额:\n");
			scanf("%f",&t);
			em[i].wage=em[i].wage+t;
			printf("\n充值后金额:\t%f\n",em[i].wage);
			printf("充值成功!\n"); 
		 }
	}
	 	
    void search()//查询函数,用于会员消费结算 
	{
		int t,flag;
		do
		{
			printf("按卡号查询请按1;按电话号码查询请按2,返回主菜单按3\n");
			scanf("%f",&t);
			if(t>=1&&t<=3)
			{
				flag=1;break;
			 }
			else
			{
				flag=0;
				printf("您输入有误,请重新选择!"); 
			 } 
		 }
		while(flag==0);
		while(flag==1)
		{
			switch(t)
			{
				case 1:printf("按卡号查询\n");search_num();break;
				case 2:printf("按电话号码查询\n");search_tel();break;
				case 3:main();break;
				default:break; 
			}
		 } 
	 }
	 
	 void search_num()//按卡号查询
	 {
	 	int num;
		int i;
		float t;
		int a;
		int m=load();
		printf("请输入要查找的卡号(2000001--2000100):\n");
		scanf("%d",&num);
		for (i=0;i<m;i++)
		if(num==em[i].num)
		{
			printf("\n已找到此人,其记录为:\n");
			printf("\n  卡号\t 姓名 \t性别\t年龄 \t充值金额 \t电话\n");
			printf("\n%d\t%s\t%c\t%d\t  %f\t       %s\t\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage,em[i].tel);
			printf("此次消费为:\n");
			scanf("%f",&em[i].xiao);
			if(em[i].xiao>=1000)
			{
				printf("恭喜你已经升级为VIP会员,本次消费享受9折优惠!");
				em[i].xiao=em[i].xiao*0.9;
				printf("本次实际消费%.2f元!",em[i].xiao*0.9); 
			}
			if(em[i].balance<em[i].xiao)
			printf("对不起,您的余额不足,请及时充值!");
			else
			{
				printf("结算成功!");
				em[i].balance=em[i].wage-em[i].xiao;
			    printf("\n  卡号\t 姓名 \t性别\t年龄 \t充值金额 \t消费金额  余额\t电话\n");
			    printf("\n%d\t %s\t%c\t%d\t  %f\t         %f\t   %f\t   %s\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage,em[i].xiao,em[i].balance,em[i].tel);
			    break;
		    }
		}
		if(i==m)
		printf("对不起,查无此人!\n");
		printf("返回查询请按1,继续查询卡号请按2\n");
		scanf("%d",&a);
		switch(a)
		{
			case 1:search();break;
			case 2:break;
			default:break;
		}
	  }
	
	void search_tel()//按电话号码查询
	{
		char tel[12];
		int i,t;
		int m=load();
		printf("请输入要查询的电话号码:\n");
		scanf("%s",&tel);
		for(i=0;i<m;i++)
		if(tel==em[i].tel)
		{
			printf("已查找到此人,其记录为:\n");
			printf("\n  卡号\t 姓名 \t性别\t年龄 \t充值金额 \t电话\n");
			printf("\n%d\t %s\t%c\t%d\t  %f\t   %s\t\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage,em[i]);
			printf("此次消费为:\n");
			scanf("%f",&em[i].xiao);
			if(em[i].xiao>=1000)
			{
				printf("恭喜你已经升级为VIP会员,本次消费享受9折优惠!");
				em[i].xiao=em[i].xiao*0.9;
				printf("本次实际消费%.2f元!",em[i].xiao*0.9); 
			}
			if(em[i].balance<em[i].xiao)
			printf("对不起,您的余额不足,请及时充值!");
			else
			{
				printf("结算成功!");
				em[i].balance=em[i].wage-em[i].xiao;
			    printf("\n  卡号\t 姓名 \t性别\t年龄 \t充值金额 \t消费金额  余额\t电话\n");
			    printf("\n%d\t %s\t%c\t%d\t  %f\t         %f\t   %f\t   %s\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage,em[i].xiao,em[i].balance,em[i].tel);
		    	break;
			}
		}
		if(i==m)
		printf("对不起,查无此人!\n");
		printf("返回查询请按1,继续查询电话号码请按2\n");
		scanf("%f",&t);
		switch(t)
		{
			case 1:search();break;
			case 2:break;
			default:break;
		}
	  }
	
	void modify()//修改函数
	{
		int num;
		char name[30];
		char sex;
		int age;
		float wage;
		char addr[30];
		char tel[12];
		int i,t,n,b,c,flag;
		int m=load();//导入文件内的信息
		printf("\n 原来会员信息:\n");
		display();//调用浏览函数
		printf("\n");
		printf("请输入要修改的会员的姓名:\n");
		scanf("%s",name);
		for(flag=1,i=0;flag&&i<m;i++)
		{
			if(strcmp(em[i].name,name)==0)//比较两值是否相等 
			{
				printf("\n已找到此人,原始记录为:\n");
				printf("\n  卡号 姓名 \t性别\t年龄 \t充值金额   余额\t 家庭住址  \t电话\n");
				printf("\n%d %s\t%c\t%d \t%f\t   %f \t%s\t  %s\t\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage,em[i].balance,em[i].addr,em[i].tel);
				printf("\n确认要修改此人信息请按1,不修改请按2!\n");
				scanf("%d",&n);
			if(n==1)
			{
				printf("\n需要进行修改的选项:\n 1.卡号 2.姓名 3.性别 4.年龄 5.充值金额 6. 家庭住址 7.电话");
				scanf("%d",&c);
				if(c>8||c<1)
				printf("\n选择错误,请重新选择!\n"); 
			}
			flag=0;	
			}
	        } 
		    if(flag==1)
		    printf("\n对不起,查无此人!\n");
		    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是否确定所修改的信息,是请按1;不,重新修改请按2:\n");
			scanf("%d",&b);
	    }
		   	while(b==2);
			printf("\n浏览修改后的所有会员信息:\n");
			printf("\n");
			save(m);
			display();
			printf("\n继续修改请按1,不再修改请按2\n");scanf("%d",&t);
			switch(t)
			{
				case 1:modify();break;
				case 2:break;
				default:break;
			}
			getchar(); 
	} 
  
  

 

...全文
154 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
野生的狒狒 2023-05-25
  • 打赏
  • 举报
回复

加油,继续努力!!

飞越13 2023-05-24
  • 打赏
  • 举报
回复 2

你add()函数里打开文件进行追加时(fp=fopen(“emploee_list”,“a”);),文件名有拼写错误。它应该是“employee_list”,

xz20160128 2023-05-24
  • 举报
回复
@飞越13 谢谢
pl66666666 2023-05-24
  • 举报
回复
@飞越13 大哥教教我我新手.网课大学生现在啥也不会求带
xz20160128 2023-05-25
  • 举报
回复
@飞越13 您可以帮我解答一下消费总额和充值总额为什么算不出来吗?【大哭】
1条回复
飞越13 2023-05-24
  • 打赏
  • 举报
回复

建议使用charGPT

xz20160128 2023-05-24
  • 打赏
  • 举报
回复

希望有大佬能为我解答,急!

69,573

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧