商品销售管理程序

要求完成以下功能:
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();  // 初始化系统,确保默认用户存在
    
    // 主循环,程序持续运
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值