C语言无人超市管理系统

/*
设计一个无人超市会员注册系统程序,要求至少实现如下功能:
打印欢迎登录信息,提示用户选择进入以下功能:

  1. 新用户注册
  2. 用户登录
  3. 退出系统

新用户注册要求:
(1) 用户名必须为英文字母或英文字母+数字,其他字符判断为非法用户名,总长度不超过20个字符。
(2) 手机号码必须为11位数字,其他字符判断为非法。
(3) 密码不低于6位,总长度不超过20个字符,低于6位或者超过20位判断为非法,注册要求输入2次密码,判断2次输入是否一致。
(4) 新用户注册赠送100元。
(5) 新用户会员类型默认为普通会员,没有折扣。
(6) 新用户会员类型默认为账号正常状态。

用户登录要求:
(1)输入用户名或者手机号码均可登录。
(2)密码输入错误超过5次,将账号状态改为锁定。
(3)登录后显示用户数据,包括用户名,手机号码,余额,会员类型,账号状态。
(4)可以进入充值功能,充值10000元,自动升级为银卡会员;充值50000元自动升级为金卡会员。充值成功后提示当前的会员状态和享受的折扣。
退出系统:提示欢迎下次光临等礼貌用语。
交互界面:整体美观整洁,便于用户操作。
*/

下面附上代码 哪里不懂的或者可以改进的可以请私信我~
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define NUM 50

typedef struct Users{
	float balance;     //余额
	int memberType;  //会员类型,0表示普通会员,1表示银卡会员,2表示金卡会员
	float discount[3];    //普通会员没折扣,银卡会员9折,金卡会员8折
	int userState;        //账号状态,0表示正常,1表示锁定
	char name[22];     //用户名
    char mobileNumber[12];  //手机号码
	char password[21];  //密码
	} User;

User user[NUM] = {0,0,{1,0.9,0.8},0}; //初始化
int count_user = 0; //存储注册用户的数量

void regist();  //注册模块
void login();   //登录模块
void login_judge(int);   //登录检测及用户操作

int main()
{
	int option;
	printf("欢迎光临 X X 超市\n");  //欢迎语
	while(1){       //当用户未选择退出系统时一直循环
		printf("\n请输入数字选择以下功能:\n\n1.	新用户注册\n\n2.	用户登录\n\n3.	退出系统\n\n");
		scanf("%d",&option);
		while(option < 1||option > 3){   //检测操作数
			printf("您的输入有误,请重新输入哦(1 , 2 or 3)\n");
			fflush(stdin); //清除缓冲区
			scanf("%d",&option);
		}if(option == 1){
			regist();
		}else if(option == 2){
			login();
		}else{          //结束语
			printf("\n\n感谢您的使用 ^_^ ,欢迎下次再来哦 !\n"); 
			break;
		}
	}
	return 0;
}

void regist(){
	int len_name,len_num,i,len_pswd;     //定义长度变量用于检验用户的输入
	char flag_alnum = 1 ;  //作为用户名是否仅为字符和数字的标志
	char test[21];   //用来存储用户第一次输入的密码,方便与下次输入进行比较
	printf("注册界面\n\n");
	
// 输入用户名 

	printf("(温馨提示:用户名必须为英文字母或英文字母+数字,总长度不超过20个字符)\n\n请输入用户名:");
	scanf("%s",user[count_user].name);
	len_name = strlen(user[count_user].name);
	for(i = 0;i < len_name;i++){   //检测用户名是否仅为字符和数字
		if(!isalnum(user[count_user].name[i])){
			flag_alnum = 0;
			break;
		}
	}while( len_name > 20 ){ //检测用户名长度
		printf("您的输入有误!!总长度不超过20个字符,请重新输入:\n\n");	
		scanf("%s",user[count_user].name);
		len_name = strlen(user[count_user].name);
	}while(!flag_alnum){
		flag_alnum = 1;
		printf("您的输入有误!!请输入英文字母或英文字母+数字\n\n");
		scanf("%s",user[count_user].name);
		if(!isalnum(user[count_user].name[i])){
			flag_alnum = 0;
			break;
		}
	}
	printf("\n您输入的用户名为:%s",user[count_user].name);
	
// 输入手机号码	
	
	printf("\n\n(温馨提示:手机号码必须是11位数字)\n\n请输入您的手机号码:");
	scanf("%s",user[count_user].mobileNumber);
	len_num = strlen(user[count_user].mobileNumber);
	while(len_num != 11){  //检测手机号长度
		printf("您的输入有误!!手机号码必须是11位  请重新输入:\n\n");
		scanf("%s",user[count_user].mobileNumber);
		len_num = strlen(user[count_user].mobileNumber);	
	}
	printf("\n您输入的手机号码为:%s",user[count_user].mobileNumber);

//  输入密码	
	
	printf("\n\n(温馨提示:密码长度应不低于6个字符,且不超过20个字符)\n\n请输入密码:");	
re:	scanf("%s",test);     //添加一个re标签,若用户两次密码不同则会到此处重新输入
	len_pswd = strlen(test);
	while( len_pswd > 20||len_pswd < 6 ){//密码长度检测
		printf("您的输入有误!!总长度不低于6个字符,且不超过20个字符,请重新输入:\n\n");
		scanf("%s",test);
		len_pswd = strlen(test);
	}
	printf("\n请再次输入密码:");
	scanf("%s",user[count_user].password);
	if(strcmp(test,user[count_user].password) == 0){
		printf("\n密码设置成功!");
	}else{
		printf("您输入的密码与上次不符!请重新输入:");
		goto re;
	}
	printf("\n\n注册中···请稍等片刻"); 
	printf("\n\n注册成功!\n\n"); 
	user[count_user].balance = 100; 
	count_user++;    //用于储存下一名用户
}

void login(){
	int option;
	printf("登陆界面\n\n"); 
	printf("请选择登录方式:1:用户名登录 2:手机号登录\n\n"); 
	scanf("%d",&option);
	while(option != 1 && option != 2){
		printf("您的输入有误,请重新输入哦( 1 or 2 )\n");
		scanf("%d",&option);
	}
	login_judge(option);	//登录判断及用户操作
}

void login_judge(int option){
	char opname[2][10] = {"用户名","手机号"};
	char membertype[3][9] = {"普通会员","银卡会员","金卡会员"}; 
	char temp[21]; 
	char state[2][5] = {"正常","异常"};
	int flag = 0,count_input = 1;
	int i,k,operation; //k用来储存该用户在结构体数组中的下标
	float recharge = 0,temp_recharge = 0,payment = 0; // 充值金额 
	
	printf("\n请输入您的%s:",opname[option-1]);
	scanf("%s",temp);
	while(flag == 0){
		printf("\n您输入的%s为:%s\n\n",opname[option-1],temp);
		if(option == 1){
			for(i = 0; i <= count_user;i++){
				if(strcmp(temp,user[i].name) == 0){
					k = i;
					flag = 1;
					break;
				}else{
					printf("该%s未注册!请重新输入:",opname[option-1]);
					scanf("%s",temp);	
				}
			}
		}if(option == 2){
			for(i = 0; i <= count_user;i++){
				if(strcmp(temp,user[i].mobileNumber) == 0){
					k = i;
					flag = 1;
					break;
				}else{
					printf("该%s未注册!请重新输入:\n",opname[option-1]);
					scanf("%s",temp);	
				}
			}
		}
	}
	if(user[k].userState == 1){  //账户处于锁定状态则不允许登录
		printf("您的帐户已锁定,请持身份证到前台客服解锁!\n");
		return ;
	}
	printf("请输入密码:");
	scanf("%s",temp);  //错误达到5次则自动锁定账户
	while(count_input <= 5 && strcmp(temp,user[k].password) != 0){
		if(count_input == 5){
			printf("\n您输入错误的次数已达到5次,账号已自动锁定!请持身份证到前台客服解锁!\n"); 
			user[k].userState = 1;
			return ;
		}else{
			printf("\n密码输入错误!请重新输入:");
			scanf("%s",temp);
			count_input++;
		}
	}
	printf("\n\n登陆中···请稍等片刻\n\n");
	printf("登陆成功!\n\n");
	while(operation != 4){
		printf("\n请输入数字选择以下功能:\n\n1. 查看用户信息\n\n2. 充值\n\n3. 付款\n\n4. 退出登录\n\n");
		scanf("%d",&operation);
		while(operation < 1 || operation > 4){
			printf("您的输入有误,请重新输入哦(1 2 3 or 4)\n");
		}if(operation == 4){
			return ;
		}else if(operation == 1){
			printf("用户名:%s\n手机号码:%s\n余额:%.2f\n会员类型:%s\n",user[k].name,user[k].mobileNumber,user[k].balance,membertype[user[k].memberType],state[user[k].userState]); 
		}else if(operation == 2){
			printf("请输入充值金额:") ;
			scanf("%f",&temp_recharge);
			user[k].balance += temp_recharge;
			recharge += temp_recharge;
			if(recharge >= 10000 ){   //达到一定金额则升级会员
				if(recharge >= 50000 ){
					user[k].memberType = 2;
					printf("\n恭喜您升级为黄金会员,付款可以享受8折优惠\n"); 
				}else{
					user[k].memberType = 1;
					printf("\n恭喜您升级为白金会员,付款可以享受9折优惠\n"); 
				}
			}
		}else if(operation == 3){
			printf("请输入付款金额:") ;
			scanf("%f",&payment);
			if(payment > user[k].balance){
				printf("抱歉!您的余额不足!请充值\n");
			}else{
				printf("支付成功!原支付金额为:%.2f  会员优惠金额为:%.2f\n",payment,payment*(1-user[k].discount[user[k].memberType]));
				user[k].balance -= payment*(1-user[k].discount[user[k].memberType]); 
			}
			printf("您当前的余额为:%.2f\n",user[k].balance);
		}
	}
}

下面是效果图:

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

  • 14
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言超市库存管理系统是一个用于管理超市商品库存的软件系统。该系统可以实现对商品入库、出库、盘点、查询等功能的管理。 首先,超市库存管理系统需要有一个商品信息的数据库,包含商品的名称、编号、价格、库存数量等信息。系统可以提供一个界面,供用户输入商品信息,并将这些信息保存在数据库中。 其次,系统还需要提供入库功能。当有新货物到达超市时,系统可以让用户输入商品编号和数量,并将这些新货物的信息更新到数据库中的库存数量字段。这样,在商品被销售或者库存不足时,系统就能够提醒用户进行补货。 除了入库,系统还需要提供出库功能。当有顾客购买商品时,系统可以根据顾客的需求,查询数据库中的库存数量,并进行相应的减少。系统同时会更新数据库中的库存数量信息,并提醒用户库存不足的情况。 此外,系统还可以提供盘点功能。盘点可以对库存进行实际数量和系统记录的数量进行比对,以确保库存信息的准确性。用户可以选择开始盘点,系统会通过查询数据库来获取商品的库存数量,并与实际数量进行比对,同时将结果保存下来。 最后,系统还可以提供查询功能。用户可以通过商品编号或名称进行查询,系统会根据用户的输入,从数据库中检索相应的商品信息,并显示给用户。这样,用户可以方便地查找和了解商品的相关信息。 综上所述,C语言超市库存管理系统是一个实现了商品入库、出库、盘点和查询等功能的软件系统,能够提高超市商品库存的管理效率,增加库存信息的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值