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