- 点击跳转=>《导航贴》- 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");
}
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));
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;
else
printf("\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/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。




![[附源码]java毕业设计医药管理系统](https://img-blog.csdnimg.cn/9dbaaeb7944b4350b7ef052bd61d320b.png)















