C/C++语言购物商城系统

    用链表结构设计一个的c语言的购物系统,用txt保存数据 分为两个用户管理员和顾客 管理员登录后可以增删改查显示全部商品,顾客注册和登录后可以查找和购买商品,显示全部商品,购买时候自定义每个客户的金额


这个代码的核心思想是:

  1. 使用链表结构来组织商品和账户的数据,在内存中动态创建和管理节点。
  2. 通过文件操作将数据保存到txt文件中,在程序启动时从文件加载数据,并在程序退出前保存数据。
  3. 提供注册和登录功能,顾客注册时需要输入用户名和账户余额,而管理员则使用固定的账户和密码。
  4. 提供菜单函数,根据用户的选择进行相应的操作。管理员登录后可以进行增删改查商品的操作,顾客可以查找和购买商品。
  5. 商品数据和账户数据分别用两个链表存储,使用头指针来追踪链表的头部,并用节点之间的指针链接节点。
  6. 在购买商品时,检查账户余额是否足够,如果足够则从余额中扣除商品价格,并显示购买成功的信息。否则提示余额不足。

 

 

 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义商品结构体
typedef struct Product {
	char name[50];
	float price;
	struct Product* next;
} Product;

// 定义顾客结构体
typedef struct Customer {
	char username[50];
	char password[50];
	float balance;
	struct Customer* next;
} Customer;

Product* productList = NULL; // 全局商品链表头指针
Customer* customerList = NULL; // 全局顾客链表头指针

// 函数声明
void loadProducts();
void saveProducts();
void loadCustomers();
void saveCustomers();
int adminLogin();
void displayProducts();
void addProduct();
void deleteProduct();
void updateProduct();
void searchProduct();
Customer* customerLogin();
void customerRegister();
void purchase(Customer* customer);
void displayMenu();
void adminMenu();
void customerMenu(Customer* customer);

// 加载商品数据
void loadProducts() {
	// 从txt文件读取商品数据,填充productList链表
	// 实现略
}

// 保存商品数据
void saveProducts() {
	// 将productList链表数据保存到txt文件
	// 实现略
}

// 加载顾客数据
void loadCustomers() {
	// 从txt文件读取顾客数据,填充customerList链表
	// 实现略
}

// 保存顾客数据
void saveCustomers() {
	// 将customerList链表数据保存到txt文件
	// 实现略
}

// 管理员登录函数
int adminLogin() {
	char username[50];
	char password[50];
	
	printf("管理员登录\n");
	printf("请输入用户名:");
	scanf("%s", username);
	printf("请输入密码:");
	scanf("%s", password);
	
	// 检查用户名和密码是否匹配
	if (strcmp(username, "11") == 0 && strcmp(password, "11") == 0) {
		printf("登录成功!\n");
		return 1;
	} else {
		printf("用户名或密码错误!\n");
		return 0;
	}
}

// 显示商品列表
void displayProducts() {
	if (productList == NULL) {
		printf("暂无商品数据。\n");
		return;
	}
	
	printf("商品列表:\n");
	Product* current = productList;
	while (current != NULL) {
		printf("商品名:%s\t价格:%.2f\n", current->name, current->price);
		current = current->next;
	}
}

// 添加商品
void addProduct() {
	// 实现添加商品逻辑
	// 根据需要补充代码
}

// 删除商品
void deleteProduct() {
	// 实现删除商品逻辑
	// 根据需要补充代码
}

// 更新商品
void updateProduct() {
	// 实现更新商品逻辑
	// 根据需要补充代码
}

// 查找商品
void searchProduct() {
	// 实现查找商品逻辑
	// 根据需要补充代码
}

// 顾客登录函数
Customer* customerLogin() {
	char username[50];
	char password[50];
	
	printf("顾客登录\n");
	printf("请输入用户名:");
	scanf("%s", username);
	printf("请输入密码:");
	scanf("%s", password);
	
	Customer* current = customerList;
	
	// 遍历顾客链表,检查用户名和密码是否匹配
	while (current != NULL) {
		if (strcmp(current->username, username) == 0 && strcmp(current->password, password) == 0) {
			printf("登录成功!\n");
			return current;
		}
		current = current->next;
	}
	
	printf("用户名或密码错误!\n");
	return NULL;
}

// 顾客注册函数
void customerRegister() {
	char username[50];
	char password[50];
	float balance;
	
	printf("顾客注册\n");
	printf("请输入用户名:");
	scanf("%s", username);
	
	// 检查用户名是否已存在
	Customer* current = customerList;
	while (current != NULL) {
		if (strcmp(current->username, username) == 0) {
			printf("该用户名已被使用,请选择其他用户名。\n");
			return;
		}
		current = current->next;
	}
	
	printf("请输入密码:");
	scanf("%s", password);
	printf("请输入账户余额:");
	scanf("%f", &balance);
	
	// 创建新顾客节点
	Customer* newCustomer = (Customer*)malloc(sizeof(Customer));
	strcpy(newCustomer->username, username);
	strcpy(newCustomer->password, password);
	newCustomer->balance = balance;
	newCustomer->next = NULL;
	
	// 插入新顾客节点到顾客链表末尾
	if (customerList == NULL) {
		customerList = newCustomer;
	} else {
		Customer* temp = customerList;
		while (temp->next != NULL) {
			temp = temp->next;
		}
		temp->next = newCustomer;
	}
	
	printf("注册成功!\n");
}

// 顾客购买商品
void purchase(Customer* customer) {
	// 实现顾客购买商品逻辑
	// 根据需要补充代码
}

// 显示菜单
void displayMenu() {
	printf("\n========== 购物系统 ==========\n");
	printf("1. 管理员登录\n");
	printf("2. 顾客登录\n");
	printf("3. 顾客注册\n");
	printf("4. 退出\n");
	printf("请输入您的选择:");
}

// 管理员菜单
void adminMenu() {
	int choice;
	
	do {
		printf("\n========== 管理员菜单 ==========\n");
		printf("1. 显示全部商品\n");
		printf("2. 添加商品\n");
		printf("3. 删除商品\n");
		printf("4. 更新商品\n");
		printf("5. 查询商品\n");
		printf("6. 返回主菜单\n");
		printf("请输入您的选择:");
		scanf("%d", &choice);
		
		switch (choice) {
		case 1:
			// 显示全部商品
			displayProducts();
			break;
		case 2:
			// 添加商品
			addProduct();
			break;
		case 3:
			// 删除商品
			deleteProduct();
			break;
		case 4:
			// 更新商品
			updateProduct();
			break;
		case 5:
			// 查询商品
			searchProduct();
			break;
		case 6:
			// 返回主菜单
			printf("返回主菜单。\n");
			break;
		default:
			printf("无效的选择,请重新输入。\n");
			break;
		}
	} while (choice != 6);
}

// 顾客菜单
void customerMenu(Customer* customer) {
	int choice;
	
	do {
		printf("\n========== 顾客菜单 ==========\n");
		printf("1. 显示全部商品\n");
		printf("2. 查询商品\n");
		printf("3. 购买商品\n");
		printf("4. 返回主菜单\n");
		printf("请输入您的选择:");
		scanf("%d", &choice);
		
		switch (choice) {
		case 1:
			// 显示全部商品
			displayProducts();
			break;
		case 2:
			// 查询商品
			searchProduct();
			break;
		case 3:
			// 购买商品
			purchase(customer);
			break;
		case 4:
			// 返回主菜单
			printf("返回主菜单。\n");
			break;
		default:
			printf("无效的选择,请重新输入。\n");
			break;
		}
	} while (choice != 4);
}

// 主函数
int main() {
	// 加载商品和顾客数据
	loadProducts();
	loadCustomers();
	
	// 显示主菜单
	int choice;
	do {
		displayMenu();
		scanf("%d", &choice);
		
		switch (choice) {
		case 1:
			// 管理员登录
			if (adminLogin()) {
				adminMenu();
			}
			break;
		case 2:
			// 顾客登录
			{
				Customer* customer = customerLogin();
				if (customer != NULL) {
					customerMenu(customer);
				}
				break;
			}
		case 3:
			// 顾客注册
			customerRegister();
			break;
		case 4:
			// 退出程序
			printf("谢谢使用,再见!\n");
			break;
		default:
			printf("无效的选择,请重新输入。\n");
			break;
		}
	} while (choice != 4);
	
	// 保存商品和顾客数据
	saveProducts();
	saveCustomers();
	
	return 0;
}

 请注意,在此示例中实现了基本的功能和框架,你可以根据需要进行进一步的开发和完善。这里只展示了核心思想和关键函数的实现,其他额外的功能、输入验证、错误处理等可以根据具体需求进行补充

需要请自取~

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值