简单的超市会员管理系统
简单的超市会员管理系统
随着社会的进步,人们生活水平的提高,各种各样的会员应运而生。各种便民服务的地方为了提高服务粘性,留住顾客往往采用会员制,例如便利店、健身房,生鲜超市、美容美发店等等不一而足。会员制一般根据会员们的充值金额,划分等级,享受不同的折扣;也可以根据消费频次、消费额度等进行优惠,或者设立一个月的某日为会员日,享受优惠。现在我们简化一下,完成一个具有基本功能的会员管理系统,其中至少包含以下功能:
会员相关信息采用文件存储,文件名为:member.txt;
当会员充值或消费时,更新对应的文件信息,并在屏幕显示当前余额;
根据充值金额,划分3个档次(普通会员、中级会员和高级会员),进行折扣处理,比如九折、八折、七折等等(具体要求团队自定);
当然,也可以扩展功能,使之更接近实用的系统。
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "math.h"
#include "windows.h"
#define L 50
#define G 10
char adminname[5] = "admin"; //管理员账号
char adminpassword[16] = "123"; //管理员账户密码,可以存储16位密码typedef struct node
{int num; //账户编号char name[L]; //账户姓名char password[L]; //账户密码long int money; //话费金额char grade[G]; //会员等级struct node *next; //建立一个next结点
} node;node *u_head; //用户头指针
node *u_tail; //用户尾指针---方便插入
node *userGR; //登录时,指向用户//改变字体颜色函数
void changecolor(int x); //通过不同颜色的提示起到优化程序界面和提醒用户注意的功能//文件函数
node *Rcreatelink(); //将输入信息复制到链表中
void save(); //将信息保存至文件中//登陆函数
int search(char name[L], char password[L]); //搜索用户功能函数
int login(); //登录功能函数
void boundar(); ////管理员函数
void looklook(); //管理员查看账户函数
void increase(); //管理员添加用户函数
void revise(); //管理员修改会员信息函数
void adminmenu(); //管理员功能菜单
void admin(); //管理员//用户函数
void user(); //用户
void usermenu(); //用户功能菜单void createvip(node *q); //通过金额自动生成会员等级函数void createvip(node *q)
{char grade[3][50] = {"普通会员", "中级会员", "高级会员"}; //定义三个会员等级int num;num = q->money / 500;if (num <= 3) //消费小于1500元为普通会员,可以获得95折优惠strcpy(q->grade, grade[0]); //将定义的等级复制到链表中else if (num <= 5) //消费大于1500小于2500为中级会员,可以获得9折优惠strcpy(q->grade, grade[1]);else //消费大于2500为高级会员,可以获得8折优惠strcpy(q->grade, grade[2]);
}node *Rcreatelink()
{int num, money; //会员编号,消费金额char name[L], password[L], grade[G]; //用户名,用户密码,会员用户等级node *head = (node *)malloc(sizeof(node)); //对head结点分配内存空间node *p; //建立结点pFILE *fp = fopen("member.txt", "r"); //读取存储用户的文件p = head;if (fp == NULL) //如果文件指针指向为空,输出打开文件失败{changecolor(4);printf("打开文件失败!\n");}else{while (fscanf(fp, "%d %s %s %d %s", &num, name, password, &money, grade) != EOF) //读取文件的内容,其中EOF是文件的结尾{node *q; //建立结点qq = (node *)malloc(sizeof(node)); //对结点q分配内存空间q->num = num;strcpy(q->name, name); //将用户名和密码复制到链表中strcpy(q->password, password);q->money = money; //将消费金额复制到链表中strcpy(q->grade, grade); //复制会员等级p->next = q; //指针后移一位p = q;}p->next = NULL;u_tail = p;}fclose(fp); //关闭文件return head;
}void save()
{node *temp = u_head->next; //将temp指针指向head的下一个节点FILE *fp = fopen("member.txt", "w"); //读取文件while (temp){fprintf(fp, "%d %s %s %d %s ", temp->num, temp->name, temp->password, temp->money, temp->grade); //输出到文件member.txttemp = temp->next;}fclose(fp); //关闭文件
}int search(char name[], char password[]) //通过文件查找是否存在该用户
{node *p; //建立结点pp = u_head->next;if ((strcmp(name, adminname) == 0) && (strcmp(password, adminpassword) == 0)) //比较输入的用户名和密码与管理员是否相同return 1;while (p) //循环{if (strcmp(name, p->name) == 0 && strcmp(password, p->password) == 0) //比较输入的用户名和密码与文件中的是否匹配{userGR = p;return 2;}p = p->next; //指针后移}return 0;
}int login()
{int flag;char a[L], c[L];changecolor(7);printf("\t\t\t-----------------------\n"); //输出用户登录界图案printf("\t\t\t***** 登 陆 页 面 *****\n");printf("\t\t\t-----------------------\n");printf("\t\t\t+会员名: "); //输出输入用户名的提示scanf("%s", &a); //输入用户名printf("\t\t\t+密 码: ");scanf("%s", &c); //输入密码printf("\t\t\t-----------------------\n");flag = search(a, c);return flag;
}void boundar()
{int FL;FL = login(); //进行登陆操作,如果登录失败,返回值为零while (FL == 0){system("cls"); //执行命令,清空屏幕changecolor(4); //字体颜色改为红色突出强调printf("\t\t\t用户名或密码错误!\n"); //输出登陆失败的提示printf("\t\t\t请重新输入!\n"); //输出重新输入密码的提示FL = login(); //重新进行登录}if (FL == 1) //如果管理员登陆成功,返回值为1{changecolor(2);printf("\t\t\t管理员登陆成功!\n"); //输出管理员登录成功的提示system("cls"); //清除屏幕内容admin(); //进入管理员功能}else if (FL == 2) //如果会员用户登录成功返回2{changecolor(2);printf("\t\t\t会员登陆成功!\n"); //输出会员登录成功的提示system("cls"); //清除屏幕内容user(); //进入用户功能}
}
void admin() //管理员
{changecolor(2);printf("\t\t\t欢迎您,管理员\n"); //输出欢迎提示adminmenu(); //进入管理员菜单
}void looklook() //查看用户信息函数
{int a, num;node *p; //建立结点pp = u_head->next;changecolor(7);printf("看全部会员信息(1),查看某特定会员(2)\n"); //输出查看功能不同子功能的代号scanf("%d", &a); //输入用户要使用的功能代号if (a == 1) //如果代号==1,执行查看所有用户信息功能{printf("********************************************************\n"); //输出查看功能界面printf("| 编号 |会 员 名| 密 码 |消费金额| 会员等级 |\n"); //输出表头while (p != NULL) //如果指针指向不为空{printf("|%4d |%-8s| %-10s| %6d | %s |\n", p->num, p->name, p->password, p->money, p->grade); //输出用户的相关信息p = p->next; //将指针后移}if (p == NULL) //如果指针指向为空,则文件中未存储会员信息{changecolor(4);printf("\t\t\t无会员信息!\n"); //输出无会员信息的提示printf("\t\t\t请前往录入(添加)会员信息\n"); //输出请添加会员的提示}}else //如果用户使用模块2{printf("查看会员编号:"); //输出需要用户输入会员编号的提示scanf("%d", &num); //输入会员编号while (p) //循环{if (p->num == num) //如果链表中的用户编号和输入的编号相同{changecolor(7);printf("********************************************************\n"); //输出表头图案和文字printf("| 编号 |会 员 名| 密 码 |消费金额| 会员等级 |\n");printf("|%4d |%-8s| %-10s| %6d | %s |\n", p->num, p->name, p->password, p->money, p->grade); //输出会员的信息}p = p->next; //将指针后移}}
}
void increase() //添加会员函数
{int i, n; //n是需要添加的人数int num, money; //num是会员编号,money是会员花费金额char name[L], password[L]; //输入会员的用户名和密码node *p = u_tail; //建立结点p指向链表尾结点printf("想要添加几人信息:"); //输出需要添加几个人的提示信息scanf("%d", &n); //输入要添加会员的数量printf("********************************************************\n"); //输出图案printf("编号 会员名 密码 消费金额(根据金额生成会员等级)\n"); //输出表头for (i = 0; i < n; i++) //循环输入会员相关信息{node *r = (node *)malloc(sizeof(node)); //建立结点r,并分配内存空间scanf("%d %s %s %d", &num, name, password, &money); //输入会员的编号,用户名,密码,消费金额r->num = num; //将会员编号复制到链表中strcpy(r->name, name); //将会员名复制到链表中strcpy(r->password, password); //将会员密码复制到链表中r->money = money; //将会员消费金额复制到链表中createvip(r); //根据消费金额生成会员等级p->next = r; //将指针后移r->next = NULL; //将r->next设置为空p = r; //指针后移}p->next = NULL;u_tail = p;save(); //将输入的文件保存
}
void revise() //修改会员信息函数
{int c, d, e = -1; //用户选择的序号以及会员编号的变量int money; //消费金额char name[L], password[L];node *p, *q; //建立结点p,qp = u_head;q = p->next;printf("\t\t\t1.修改 2.删除\n"); //对会员信息修改的操作printf("\t\t\t请输入想要进行操作:"); //输出用户选择操作的提示scanf("%d", &c); //输入用户选择的序号if (c == 1) //如果用户输入1,进入会员信息修改操作{printf("\t\t\t请输入修改会员编号:"); //输出提示用户输入要修改的会员编号scanf("%d", &d); //输入会员编号while (q) //循环查找会员编号{if (q->num == d) //比对会员编号信息{while (e != 0){changecolor(7);system("cls"); //清空屏幕内容printf("\t\t\t请输入要修改信息:\n"); //提示管理员用户选择修改的内容以及序号printf("1.会员名\n");printf("2.会员密码\n");printf("3.消费金额\n");printf("0.退出\n");scanf("%d", &e); //输入序号switch (e){case 1:printf("修改前会员名:%s\n", q->name); //输入修改前的会员名printf("想要修改会员名:"); //提示管理员用户输入修改后的用户名scanf("%s", name); //输入修改后的会员名strcpy(q->name, name); //将修改后的用户名输入到链表中changecolor(2);printf("\n修改成功"); //提示用户修改成功break; //退出循环case 2:changecolor(7);printf("输入修改前的密码:%s\n", q->password); //提示管理员输入修改之前的密码printf("输入修改后的密码:"); //提示管理员输入修改之后的密码scanf("%s", password); //输入修改之后的密码strcpy(q->password, password); //更新修改之后的密码changecolor(4);printf("\n修改成功!请牢记您的密码!\n不要将您的密码告诉他人!"); //输出提示break; //退出循环case 3:changecolor(7);printf("修改前消费金额:%d\n", q->money); //提示管理员输入修改前的消费金额,并输出修改之前的消费金额printf("想要修改金额:"); //提示输入想要修改的金额scanf("%d", &money); //输入消费金额q->money = money; //更新消费金额printf("\n修改成功!\n"); //输出修改成功的提示createvip(q);break;//会员等级就不需要修改了,通过函数自动生成。case 0: //如果输入0,退出循环break;}}}q = q->next; //指针后移}}else{changecolor(7);system("cls"); //清屏printf("请输入想要删除的编号:"); //输出管理员操作提示scanf("%d", &d); //输入要删除的会员编号while (p) //循环查找会员编号{if (q->num == d) //如果存储的会员编号与输入的编号相同则执行操作{p->next = q->next; //指针指向要删除节点的下一个节点changecolor(4);printf("删除成功!\n"); //输出删除成功}q = q->next;p = p->next;}save(); //保存}
}
void adminmenu() //管理员菜单
{int a = -1;while (a != 0){changecolor(7);printf("\t\t\t 您具有以下功能:\n"); //输出不同的功能以及序号printf("\t\t\t*1.查看会员信息\n");printf("\t\t\t*2.添加会员信息\n");printf("\t\t\t*3.修改会员信息\n");printf("\t\t\t*0.退出\n");printf("\t\t\t*");scanf("%d", &a);switch (a){case 1: //进入查看功能system("cls"); //清屏looklook(); //调用查看函数break; //退出case 2: //进入添加功能system("cls"); //清屏increase(); //调用添加函数save(); //保存内容break; //退出case 3: //进入修改功能system("cls"); //清屏revise(); //调用修改函数save(); //保存修改后的内容break; //退出case 0:break; //退出}}
}void user() //用户功能
{changecolor(7);printf("欢迎您,%s会员\n", userGR->grade); //输出欢迎提示usermenu(); //进入用户菜单printf("再见!"); //结束后输出再见提示
}void usermenu() //用户菜单
{int a;char password[L] = {0};changecolor(7);printf("您拥有查看个人信息和修改密码的权限!\n"); //输出提示以及会员用户信息printf("您的个人信息如下\n:");printf("---------------------------------------------------\n");printf("| 编号 |会 员 名| 密 码 |消费金额| 会员等级 |\n");printf("|%4d |%-8s| %-10s| %6d | %s |\n", userGR->num, userGR->name, userGR->password, userGR->money, userGR->grade);printf("如果想要修改密码请输入(1)");scanf("%d", &a); //输入操作序号if (a == 1){printf("您的原始密码为:%s", userGR->password); //输出用户更改之前的密码printf("请输入修改的密码:"); //输出用户修改过的密码scanf("%s", password); //输入用户修改之后的密码strcpy(userGR->password, password); //更新修改后的密码changecolor(2);printf("修改成功!\n"); //输出修改成功的提示}save(); //保存用户修改完成的信息
}void changecolor(int x) //改变输出文字颜色函数
{if (x >= 0 && x <= 15)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);elseSetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}int main()
{node *head = Rcreatelink();u_head = NULL;u_head = head;boundar();changecolor(7);printf("感谢您的使用!"); //输出感谢使用的提示
}
简单的超市会员管理系统相关推荐
- MySQL实验超市管理系统_超市会员管理系统(数据库)实验报告.doc
PAGE PAGE 2 学号: 成绩:________ 数据库综合实验报告 院 系 计算机与电子信息学院 专 业 计算机科学与技术 班 级 xxxxxxxxxxx 设计题目 超市会员管理系统 姓 名 ...
- 基于Spring MVC + Spring + MyBatis的【超市会员管理系统】
资源下载: https://download.csdn.net/download/weixin_44893902/22035329 一. 语言和环境 实现语言:JAVA语言. 使用:MyEclipse ...
- 超市会员管理系统,数据库课程设计
1.简单的java ui界面 2.配合数据库创建了三个表 3.三个表分别是会员信息管理,优惠政策,商品信息 4.会员信息,优惠政策管理都实现了数据库的增,删,改,查. 5.物品信息表只实现了数据的查找 ...
- javaEE基于ssm的超市会员管理系统
超市会员管理系统主要超市内部提供服务,系统分为管理员和房产公司的员工用户2部分. 超市会员管理系统,是一个超市内部提供信息管理的平台,是完全的,高速的,开放的,其核心思想是提供一个以自然语言为主的用户 ...
- 基于java超市会员管理系统
本文通过对超市消费服务行业中为更好提升会员消费结账过程的服务感知为目标,利用自身所学的软件开发知识,实现会员结账消费过程的自动化和信息化,进而提升超市会员管理的科学化和正规化.通过超市会员管理系统产生 ...
- JAVA小项目之超市会员管理系统
思路分析 1.会员类Member (1)姓名 name:String (2)卡号 cardId:int (3)密码 password: ...
- 超市会员管理系统 code
/*** 超市会员*/ public class Member {private String name;// 姓名private int cardId;//会员卡号private String pa ...
- 基于SSM的超市会员管理系统
项目名称:基于SSM的超市会员管理系统(cshy_sys) 前端技术:H-ui.HTML.CSS.JS.JQuery等 后端技术:JSP.SSM框架 运行环境:Windows10以上.JDK1.8 数 ...
- Spring+SpringMVC+mybatis基于ssm的超市会员管理系统
项目编号:jsp244ssm超市会员管理系统 运行环境: 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:Spring+Spring ...
最新文章
- [YTU]_2865( 结构体--日期计算)
- CSS3动画(典型模板)
- 数据库之间数据转换最快方法
- flume package遇到的问题
- yeoman_使用yeoman轻松创建Yeoman生成器
- Java编程学习并不难,有坚持的动力与良好的心态尤为重要
- C/C++内存问题检查利器—Purify (二)
- c# 用正则表达式获取开始和结束字符串中间的值
- 安装Mycat 曾经踩的那些坑
- 使用Matlab产生m序列(PN序列的一种)
- linux 安装so文件,Linux下查找和安装依赖的.so文件
- Linux基础-磁盘阵列RAID
- IT:后端进阶技术路线图(初级→中级→高级)、后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介、技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略
- JAVA开发(第三方接口授权访问)
- weblogic Unable to obtain lock on
- CTF——web个人总结
- 台式计算机散热风扇装在哪里,电脑机箱风扇怎么装
- html如何设置字体纵向居中,css 如何使文字垂直居中
- 微信小程序出现的问题汇总
- 将PDF文件转换为高质量的图片:免费的在线PDF转换器
热门文章
- mysql 1786_【MySQL案例】ERROR 1786 (HY000)
- Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun { cv.imread()的使用)}错误解决方案
- qq_seconds.html,qq英语名字汇总82句
- 调用摄像头接口方法合集
- amCharts 5.1.12 Crack
- OpenCV源码剖析之ImageDecoder
- Last packet sent to the server was 2 ms ago 解决办法
- Halcon 算子 convexity
- AVL树【图示详解+代码实现】
- Frenet坐标系与Cartesian坐标系互转(一):公式推导