C语言源代码系列-管理系统之会员计费系统

news/2024/5/2 12:40:27/文章来源:https://blog.csdn.net/qq_27489007/article/details/127989981
往期文章分享
  • 点击跳转=>《导航贴》- Unity手册,系统实战学习
  • 点击跳转=>《导航贴》- Android手册,重温移动开发

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

在这里插入图片描述

👉实践过程

😜问题

通过“会员卡计费系统”C语言课程设计的实践,掌握函数、数据的读取和存储。熟练链表的操作,为后期学习打下基础,体会课程设计的基本过程,总结课程设计遇到的问题及解决方法。了解实际开发的步骤及注意事项

查找资料准备工作,在老师同学的帮助下编写程序以完成设计目的。
(1)新会员登记。(将会员个人信息及此会员的会员卡信息进行录入。)
(2)会员信息修改。
(3)会员续费。(会员出示会员卡后,管理人员根据卡号查找到该会员的信息并显示。此时可以进行续费,续费后,提示成功,并显示更新后的信息。)
(4)会员消费结算。(会员出示会员卡后,管理人员根据卡号查找到该会员的信息,结算本次费用。提示成功,并显示更新后的信息。)累计消费满1000元,及自动升级为VIP会员。之后每次消费给予9折优惠。
(4)会员退卡。(收回会员卡,并将余额退还,删除该会员信息。)
(5)用菜单进行管理
(6)统计功能。
能够按每个会员的缴费总额进行排序。在排序的最后一行显示所有会员的缴费总额,以及消费总额。
能够按累计消费总额进行排序。在排序的最后一行显示所有会员的缴费总额,以及消费总额。

😜回答

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#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;char xueli[30];int wage;int xiao;int yu;char addr[30];long int tel;
}em[100]; /*定义一个结构体*/
void menu();
void input();
void save(int);
void display();
void del();
void add();
void search();
void search_num();
void search_xueli();
void search_tel();
void modify(); /*定义各函数*/void menu() /*菜单函数*/
{printf(" ******************菜单管理****************\n");printf(" 1.新会员登记");printf(" 2统计功能\n");printf(" 3.会员消费结算");printf(" 4.会员退卡\n");printf(" 5.会员卡续费");printf(" 6会员信息修改\n");printf(" 7.会员卡挂失");printf(" 8.退出\n");printf(" *************欢迎使用会员卡计费系统************\n");printf("\n");printf("\n");
}int main()
{int n, flag;char a;char* s1;int b, j, flg = 0;menu(); /*调用菜单函数*/ // 这几个调换一下顺序就可以了?记住声明变量的代码要在前面do{printf("请选择你需要操作的步骤(1--8):\n");scanf("%d", &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");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:printf(" ◆◆◆会员卡挂失◆◆◆\n");printf("\n");modify();break;case 8:exit(0);break;default: break;}getchar();printf("\n");printf("是否继续进行(y or n):\n");scanf("%c", &a);if (a == 'y'){flag = 1;system("cls"); /*清屏*/menu(); /*调用菜单函数*/printf("请再次选择你需要操作的步骤(1--7):\n");scanf("%d", &n);printf("\n");}elseexit(0);}
}void input() /*录入函数*/
{int i, m;printf("请输入需要创建信息的会员人数(1--100):\n");scanf("%d", &m);for (i = 0; i < m; i++){printf("卡号?");srand((int) time(0));em[i].num = rand() % 100 + 20000000;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("%s", em[i].xueli);getchar();printf("请输入缴费金额: ");scanf("%d", &em[i].wage);getchar();printf("请输入住址: ");scanf("%s", em[i].addr);getchar();printf("请输入电话: ");scanf("%d", &em[i].tel);printf("\n");}printf("\n创建完毕!\n");save(m);
}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("cannot open file\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();printf("\n卡号\t姓名\t性别\t年龄\t学历\t缴费金额\t消费金额\t住址\t电话\n");for (i = 0; i < m; i++) /*m为输入部分的会员人数*/printf("\n %d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n", em[i].num, em[i].name, em[i].sex, em[i].age, em[i].xueli,em[i].wage, em[i].xiao, em[i].addr, em[i].tel);
}void del() /*删除函数*/
{int m = load();int i, j, n, t, flag;char name[20];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卡号 姓名 性别 年龄 缴费金额 余额\n");printf("\n%d\t%s\t%c\t%d\t%d\t%d\n", em[i].num, em[i].name, em[i].sex, em[i].age, em[i].wage, em[i].yu);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);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].yu = em[j + 1].yu;}flag = 0;}}}if (!flag)m = m - 1;elseprintf("\n对不起?查无此人!\n");printf("\n 浏览删除后的所有会员信息:\n");save(m); /*调用保存函数*/display(); /*调用浏览函数*/printf("\n继续删除请按?不再删除请按\n");scanf("%d", &t);switch (t){case 1:del();break;case 0: break;default: break;}
}void add() /*添加函数*/
{FILE* fp;int num;int 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%d\t%d\t%d\n", em[i].num, em[i].name, em[i].wage, em[i].xiao);printf("\n输入续费金额?\n");scanf("%d", &t);em[i].wage = em[i].wage + t;printf("\n续后金额?\t%d\n", em[i].wage);printf("\n续费成功!\n");}
}void search() /*查询函数*/
{int t, flag;do{printf("\n按卡号查询请按1; 按电话号码查询请按3,进入主函数按4\n");scanf("%d", &t);if (t >= 1 && t <= 4){flag = 1;break;}else{flag = 0;printf("您输入有误?请重新选择!");}} while (flag == 0);while (flag == 1){switch (t){case 1:printf("按卡号查询\n");search_num();break;case 3:printf("按电话号码查询\n");search_tel();break;case 4:main();break;default: break;}}
}void search_num()
{int num;int i, t;int m = load();printf("请输入要查找的会员卡号(20000001---20000100):\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%d\t%ld\n", em[i].num, em[i].name, em[i].sex, em[i].age, em[i].wage, em[i].tel);printf("\n该次消费为;\n");scanf("%d", &em[i].xiao);em[i].yu = em[i].wage - em[i].xiao;printf("\n卡号\t      姓名\t性别\t年龄\t缴费金额\t消费金额\t余额\t电话\n");printf("\n%d\t%s\t%c\t%d\t%d\t%d\t%d\t%ld\n", em[i].num, em[i].name, em[i].sex, em[i].age, em[i].wage,em[i].xiao, em[i].yu, em[i].tel);break;}if (i == m)printf("\n对不起?查无此人\n");printf("\n");printf("返回查询函数请按1,继续查询卡号请按2\n");scanf("%d", &t);switch (t){case 1:search();break;case 2: break;default: break;}
}void search_tel()
{long int tel;int i, t;int m = load();printf("请输入要查找的电话号码:\n");scanf("%ld", &tel);for (i = 0; i < m; i++)if (tel == em[i].tel){printf("\n已找到此人?其记录为?\n");printf("\n卡号\t      姓名\t性别\t年龄\t缴费金额\t电话\n");printf("\n%d\t%s\t%c\t%d\t%d\t%ld\n", em[i].num, em[i].name, em[i].sex, em[i].age,em[i].wage, em[i].tel);printf("\n该次消费为;\n");scanf("%d", &em[i].xiao);em[i].yu = em[i].wage - em[i].xiao;printf("\n卡号\t      姓名\t性别\t年龄\t缴费金额\t消费金额\t余额\t电话\n");printf("\n%d\t%s\t%c\t%d\t%d\t%d\t%d\t%s\t%ld\n", em[i].num, em[i].name, em[i].sex, em[i].age, em[i].wage,em[i].xiao, em[i].yu, em[i].tel);break;}if (i == m)printf("\n对不起?查无此人\n");printf("\n");printf("返回查询函数请按,继续查询电话号码请按\n");scanf("%d", &t);switch (t){case 1:search();break;case 2: break;default: break;}
}void modify() /*修改函数*/
{int num;char name[10];char sex;int age;char xueli[30];int wage;char addr[30];long int tel;int b, c, i, n, t, 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缴费金额\t住址\t电话\n");printf("\n%d\t%s\t%c\t%d\t%s\t%d\t%s\t%ld\n", em[i].num, em[i].name, em[i].sex, em[i].age, em[i].xueli,em[i].wage, em[i].addr, em[i].tel);printf("\n确实要修改此人信息请按; 不修改请按\n");scanf("%d", &n);if (n == 1){printf("\n需要进行修改的选项\n 1.卡号2.姓名3.性别4.年龄5.学历6.缴费金额7.住址8.电话\n");printf("请输入你想修改的那一项序号:\n");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("%s", xueli);strcpy(em[i - 1].xueli, xueli);break;case 6:printf("缴费金额改为: ");scanf("%d", &wage);em[i - 1].wage = wage;break;case 7:printf("住址改为: ");scanf("%s", addr);strcpy(em[i - 1].addr, addr);break;case 8:printf("电话改为: ");scanf("%ld", &tel);em[i - 1].tel = tel;break;}printf("\n");printf("\n是否确定所修改的信息?\n 是请按; 不,重新修改请按: \n");scanf("%d", &b);} while (b == 2);printf("\n浏览修改后的所有会员信息:\n");printf("\n");save(m);display();printf("\n继续修改请按?不再修改请按\n");scanf("%d", &t);switch (t){case 1:modify();break;case 0: break;default: break;}getchar();
}

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_225340.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python百日进阶-WEB开发-冲進Flask】Day183 - Flask数据库ORM基础、增加

文章目录一、day03项目环境和结构搭建1.1 flask-script1.1.1 flask-script是干什么的&#xff1f;1.1.2 flask-script安装1.1.3 flask-script的使用1.1.3.1 创建Manager实例1.1.3.2 初始化实例出错与解决1.1.4 终端启动1.1.4.1 查看runserver参数1.1.5 自定义添加manager命令1.…

linux篇【11】:linux下的线程<前序>

目录 一.linux下的线程 1.linux下的线程概念 &#xff08;1&#xff09;教材上粗略的 线程 定义 &#xff08;2&#xff09;线程的引入 &#xff08;3&#xff09;线程真正定义 以及 示意图 &#xff08;4&#xff09;linux 和 windows等其他操作系统的线程对比 &#xf…

新的趋势:From Big to Small and Wide data

新的趋势&#xff1a;From Big to Small and Wide data 所以&#xff0c;在这个时候&#xff0c;作为率先提出要做 MySQL 开源 HTAP 数据库的 StoneDB&#xff0c;想要稍微冷静一下。 不是说我们不做 HTAP 了&#xff0c;而是有了一个新的思路。这个思路&#xff0c;也同样来…

【亲测】网址引导页管理系统

介绍&#xff1a; 易航网址引导系统-网址引导页管理系统去授权版一款极其优雅的易航网址引导页管理系统&#xff0c; 如果有问题可以跟我反馈&#xff0c;共同进步。祝各位道友一路飞升&#xff0c;顶峰相见&#xff01;内置12套模板和防墙插件。 项目亮点&#xff1a; 1、…

Redis基础命令(String类型)Value为JSON

目录 String类型&#xff08;存储的值为JSON形式&#xff09; 问题&#xff1a; 解决办法&#xff1a; 示例&#xff1a; 实际操作&#xff1a; 总结&#xff1a; String类型&#xff08;存储的值为JSON形式&#xff09; 问题&#xff1a; Redis没有类似MySql中的表的概…

2022年戈登·贝尔奖授予等离子体加速器突破研究

ACM 总裁Cherri Pancake&#xff08;图片来源&#xff1a;网络&#xff09; 11月17日&#xff0c;在达拉斯举行的SC22颁奖典礼上&#xff0c;ACM将2022年戈登贝尔奖&#xff08;Gordon Bell Prize&#xff09;授予了一组研究人员&#xff0c;他们利用四台超级计算机&#xff08…

【Flink】基本转换算子使用之fliter、flatMap,键控流转换算子和分布式转换算子

文章目录一 Flink DataStream API1 基本转换算子的使用&#xff08;1&#xff09;flitera 使用匿名类实现b 使用外部类函数实现b 使用flatMap实现&#xff08;2&#xff09;flatMapa 使用匿名类实现b 使用匿名函数实现2 键控流转换算子&#xff08;1&#xff09; keyBy&#xf…

中国互联网众筹行业

近些年&#xff0c;中国互联网发展迅速&#xff0c;众筹这种起源于美国的新型互联网金融模式更是一直处于风口浪尖。在“大众创业、万众创新”的背景下&#xff0c;这种低门槛的融资模式也深受欢迎&#xff0c;加上阿里、京东、苏宁三大电商的巨头的相继入场&#xff0c;更令这…

IMS各网元的主要功能

文章目录用户注册时&#xff1a; 手机发出一个注册消息到他所在的拜访地的P。 比如&#xff0c;他是山西太原的用户&#xff0c;他这时候到了北京&#xff0c;那么这个时候&#xff0c;他要注册到IMS网络里面的话&#xff0c;这个P-CSCF就是北京的P-CSCF&#xff0c;这个北京的…

CAS号:376364-38-4,rCRAMP (rat)

rCRAMP (rat) 是一种大鼠组织蛋白酶相关的抗菌肽&#xff0c;有助于大鼠脑肽/蛋白质提取物的抗菌活性。rCRAMP (rat) 是大鼠中枢神经系统先天免疫系统的关键参与者。rCRAMP (rat) is the rat cathelin-related antimicrobial peptide. rCRAMP (rat) contributes to the antibac…

Kotlin 开发Android app(十一):Android控件RecyclerView

Android 中的控件非常的丰富&#xff0c;我们会陆陆续续的进行介绍&#xff0c;从第九节开始&#xff0c;关于Kotlin 的语法特性就差不多结束&#xff0c;后面如果有发现需要说明的语法&#xff0c;再进行相关的补充。 在Android的控件中&#xff0c;RecyclerView算是一个大控…

从 Uber 数据泄露事件我们可以学到什么?

Uber 数据泄露始于一名黑客从暗网市场购买属于一名 Uber 员工的被盗凭证。最初尝试使用这些凭据连接到 Uber 的网络失败&#xff0c;因为该帐户受 MFA 保护。为了克服这一安全障碍&#xff0c;黑客通过 What’s App 联系了 Uber 员工&#xff0c;并假装是 Uber 的安全人员&…

OA系统,有效提升企业办公效率落实执行力

企业管理的成功将最终取决于企业的执行情况&#xff0c;只要有良好的经营管理&#xff0c;管理系统&#xff0c;一个好的领导者&#xff0c;充分调动员工的积极性&#xff0c;将能最大限度的管理执行力。 OA协同办公系统提供了工作流和协同工作互补结合。工作流程严格规定了工作…

大数据面试题(四):Yarn核心高频面试题

文章目录 Yarn核心高频面试题 一、简述Hadoop1与Hadoop2的架构异同 二、为什么会产生yarn&#xff0c;它解决了什么问题&#xff0c;有什么优势&#xff1f; 三、HDFS的数据压缩算法&#xff1f;及每种算法的应用场景&#xff1f; 1、gzip压缩 2、Bzip2压缩 3、Lzo压缩 …

为什么 NGINX 的 reload 不是热加载?

作者&#xff1a;刘维 这段时间在 Reddit 看到一个讨论&#xff0c;为什么 NGINX 不支持热加载&#xff1f;乍看之下很反常识&#xff0c;作为世界第一大 Web 服务器&#xff0c;不支持热加载&#xff1f;难道大家都在使用的 nginx -s reload 命令都用错了&#xff1f; 带着这个…

数据治理系列:数仓建模之数仓主题与主题域

背景&#xff1a; 数据仓库之父 Bill Inmon 将数据仓库描述为一个面向主题的、集成的、稳定的、反应历史变化的数据集合&#xff0c;用于支持管理者的决策过程。 从上面的引言里面&#xff0c;我们其实可以知道主题在数仓建设里面绝对是很重要的一环&#xff0c;这的确是的。…

【计算机网络】HTTP/HTTPS协议基础知识汇总

目录 1.URL&#xff1a; 2.HTTP协议&#xff1a; 2.1抓包工具&#xff08;这里用fiddler&#xff09;&#xff1a; 2.2请求和响应的格式&#xff1a; 2.3方法的介绍&#xff1a; 2.4请求报头&#xff08;header&#xff09;&#xff1a; 2.5状态码&#xff1a; 2.6响应…

antd——使用a-tree组件实现 检索+自动展开+自定义增删改查功能——技能提升

之前写后台管理系统时&#xff0c;遇到一个下面的需求&#xff0c;下面是最终完成的效果图。 实现的功能有&#xff1a; 1. 下拉 选择不同的类型——就是一个普通的select组件&#xff0c;下面并不做介绍 2. 通过关键字可以进行tree树形结构的筛选&#xff0c;然后将筛选后的…

Python_数据容器_元组tuple

一、元组tuple定义 为什么需要元组 列表是可以修改的&#xff0c;如果想要传递的信息不被篡改&#xff0c;列表就不适合了 元组和列表一样&#xff0c;都是可以封装多个不同类型的元素在内 最大的不同点在于&#xff1a; 元祖一旦定义完成&#xff0c;就不可修改 所以&am…

LabVIEW使用Desktop Execution Trace工具包

LabVIEW使用Desktop Execution Trace工具包 可以使用桌面执行跟踪工具包来调试和优化大型LabVIEW应用程序&#xff0c;包括具有多个循环的应用程序、客户端-服务器架构、动态加载VI等。该工具包从本地或远程计算机桌面上运行的应用程序捕获执行事件&#xff0c;并在表窗格中显…