要求完成以下功能:
1)系统用户包括仓库管理员、销售员。
2)商品基本信息包括:销售单编号、商品名称、计量单位(重量或件)、单价。
3)仓库管理员的功能包括商品信息的录入、删除,并具有查询显示权限;
4)销售员具有录入销售信息(商品名称、数量、单价、总价、销售日期、销售时间等),查询(按月、按商品等不同维度)和排序显示(按销量、按商品名称、按月份等)。
5)要求有错误提示功能,例如销售日期及销售时间格式检查,输入错误提示重新输入;
6)登录信息、商品信息、销售信息通过文件保存;
7)要求利用菜单的形式进行管理。
// ================ 头文件包含 ================
#define _CRT_SECURE_NO_WARNINGS // 禁用安全警告,允许使用标准C函数
#include <stdio.h> // 标准输入输出函数
#include <stdlib.h> // 标准库函数
#include <string.h> // 字符串处理函数
#include <time.h> // 时间相关函数
// ================ 结构体定义 ================
// 用户结构体:存储用户信息
typedef struct {
char username[50]; // 用户名,最大长度50字符
char password[50]; // 密码,最大长度50字符
int role; // 用户角色:1表示管理员,2表示销售员
} User;
// 商品结构体:存储商品基本信息
typedef struct {
char id[20]; // 商品编号,最大长度20字符
char name[50]; // 商品名称,最大长度50字符
char unit[10]; // 计量单位,只能是"kg"或"件"
float price; // 商品单价,浮点数类型
} Product;
// 销售记录结构体:存储销售记录信息
typedef struct {
char id[20]; // 销售单号,使用时间戳生成,格式:S+时间戳
char product_name[50];// 商品名称,需要与商品表中的名称匹配
int quantity; // 销售数量,整数类型
float price; // 销售单价,从商品表中获取
float total; // 总价,等于单价×数量
char date[11]; // 销售日期,格式:YYYY-MM-DD,包含结束符共11个字符
char time[9]; // 销售时间,格式:HH:MM:SS,包含结束符共9个字符
} Sale;
// ================ 函数声明 ================
// 每个函数的基本功能说明
void mainMenu(); // 显示主菜单,程序的入口界面
int login(); // 用户登录验证,返回用户角色或0(登录失败)
void adminMenu(); // 管理员菜单,提供商品管理功能
void salesMenu(); // 销售员菜单,提供销售相关功能
void addProduct(); // 添加新商品到系统
void deleteProduct(); // 从系统中删除指定商品
void queryProduct(); // 查询并显示商品信息
void addSale(); // 添加新的销售记录
void querySale(); // 查询销售记录,支持多种查询方式
void sortSale(); // 对销售记录进行排序,支持多种排序方式
int validateDateTime(char* date, char* time); // 验证日期时间格式是否正确
// ================ 系统初始化函数 ================
/**
* 初始化系统:检查并创建必要的用户账户
* 1. 检查users.dat文件是否存在
* 2. 如果不存在,创建默认的管理员和销售员账户
* 3. 将默认账户信息写入文件
*/
void initSystem() {
// 尝试以只读方式打开用户文件
FILE* fp = fopen("users.dat", "rb");
if (fp == NULL) {
// 文件不存在,创建新文件并写入默认用户
fp = fopen("users.dat", "wb");
if (fp == NULL) {
printf("系统初始化失败!无法创建用户文件\n");
exit(1); // 如果无法创建文件,程序终止
}
// 创建默认管理员账户
User admin = { "admin", "123456", 1 };
// 创建默认销售员账户
User sales = { "sales", "123456", 2 };
// 将两个默认账户写入文件
fwrite(&admin, sizeof(User), 1, fp);
fwrite(&sales, sizeof(User), 1, fp);
// 显示初始化成功信息
printf("系统初始化完成!\n");
printf("管理员账号: admin, 密码: 123456\n");
printf("销售员账号: sales, 密码: 123456\n");
}
fclose(fp); // 关闭文件
}
// ================ 主函数 ================
/**
* 程序入口点
* 1. 初始化系统
* 2. 进入登录-操作循环
* 3. 根据用户角色显示对应菜单
*/
int main() {
initSystem(); // 初始化系统,确保默认用户存在
// 主循环,程序持续运