[源码和文档分享]基于C语言实现的超市管理系统

1 需求分析

超市随着市场经济和现代信息技术的的发展,不可必要的要卷入信息现代化的大潮,如何使用现代化的工具,使企业和经营者个人在最小的投入下获取最大的回报,成为每一个人的梦想。因此,在超市管理中引进现代化的办公软件,就成为时下最好的解决办法。使用软件办公,不仅能使经营者的劳力资本减少,同时能使超市的管理更规范更合理,解决了超市中用于管理进出货以及购买、库存等众多繁琐、工作量巨大从而导致耗费人员过多,超市经营紊乱等众多问题。

1.1 主要功能

  • 超级管理员模块:(需帐号登录)

    • 添加管理员
    • 删除管理员
  • 管理员模块:(需帐号登录)

    • 商品信息录入(编号、名称、单价、库存)
    • 商品信息修改(修改商品的各种信息)
    • 商品信息查询(根据所输入的商品名字,编码查询库存信息)
    • 商品信息删除(从商品文件中删除商品信息)
    • 商品信息排序(按编号,单价,库存3种模式进行排序)
    • 输出商品全部库存信息
    • 删除普通用户功能(管理员有权限删除普通用户帐号)
  • 普通用户模块:(需帐号登录)

    • 新用户注册
    • 用户登录:
      • 商品查询
      • 商品排序
      • 输出商品全部库存信息
      • 购买商品(通过用户余额来进行购买)
      • 充值(通过输入充值卡卡号对用户余额充值)
      • 修改用户密码

1.2 运行环境

  • 操作系统:Windows NT/2000/XP/VISTA/WIN7/WIN8/WIN10

  • 开发平台:Microsoft Visual Studio 2012


参考文档和完整的文档和源码下载地址:

https://www.write-bug.com/article/1280.html

很高兴能够分享这个项目!以下是部分代码和文档说明: 代码: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #define BLOCK_SIZE 1024 // 每个块的大小 #define MAX_FILENAME_LEN 256 // 文件名最大长度 #define MAX_FILE_NUM 100 // 最多文件数量 #define MAX_FILE_SIZE 1000 // 文件最大大小 // 目录项结构体 struct DirEntry { char name[MAX_FILENAME_LEN]; // 目录项名字 int startBlock; // 目录项起始块 int fileSize; // 目录项文件大小 }; // 文件系统结构体 struct FileSystem { int fat[MAX_FILE_SIZE / BLOCK_SIZE]; // 文件分配表 struct DirEntry dir[MAX_FILE_NUM]; // 目录项 char data[MAX_FILE_SIZE]; // 存储数据区 int dirNum; // 目录项数量 int dataNum; // 数据块数量 }; // 初始化文件系统 void initFileSystem(struct FileSystem *fs) { // 初始化文件分配表 for (int i = 0; i < MAX_FILE_SIZE / BLOCK_SIZE; i++) { fs->fat[i] = -1; } // 初始化目录项 fs->dirNum = 0; // 初始化数据区 fs->dataNum = 0; } // 创建文件 void createFile(struct FileSystem *fs, char *filename, int fileSize) { // 检查文件名是否已存在 for (int i = 0; i < fs->dirNum; i++) { if (strcmp(fs->dir[i].name, filename) == 0) { printf("文件已存在!\n"); return; } } // 检查文件大小是否超过最大值 if (fileSize > MAX_FILE_SIZE) { printf("文件太大了!\n"); return; } // 检查是否还有空闲块 int blockNumNeeded = (fileSize + BLOCK_SIZE - 1) / BLOCK_SIZE; // 需要的块数 if (blockNumNeeded > MAX_FILE_SIZE / BLOCK_SIZE - fs->dataNum) { printf("空间不足!\n"); return; } // 分配块 int firstBlock = -1; for (int i = 0; i < MAX_FILE_SIZE / BLOCK_SIZE; i++) { if (fs->fat[i] == -1) { fs->fat[i] = firstBlock; firstBlock = i; fs->dataNum++; if (fs->dataNum == blockNumNeeded) { break; } } } // 更新目录项 strcpy(fs->dir[fs->dirNum].name, filename); fs->dir[fs->dirNum].startBlock = firstBlock; fs->dir[fs->dirNum].fileSize = fileSize; fs->dirNum++; } // 删除文件 void deleteFile(struct FileSystem *fs, char *filename) { int index = -1; for (int i = 0; i < fs->dirNum; i++) { if (strcmp(fs->dir[i].name, filename) == 0) { index = i; break; } } if (index == -1) { printf("文件不存在!\n"); return; } // 释放块 int block = fs->dir[index].startBlock; while (block != -1) { int nextBlock = fs->fat[block]; fs->fat[block] = -1; fs->dataNum--; block = nextBlock; } // 删除目录项 for (int i = index; i < fs->dirNum - 1; i++) { fs->dir[i] = fs->dir[i + 1]; } fs->dirNum--; } // 读取文件 void readFile(struct FileSystem *fs, char *filename, char *data) { int index = -1; for (int i = 0; i < fs->dirNum; i++) { if (strcmp(fs->dir[i].name, filename) == 0) { index = i; break; } } if (index == -1) { printf("文件不存在!\n"); return; } int block = fs->dir[index].startBlock; int offset = 0; while (block != -1) { memcpy(data + offset, fs->data + block * BLOCK_SIZE, BLOCK_SIZE); offset += BLOCK_SIZE; block = fs->fat[block]; } } // 写入文件 void writeFile(struct FileSystem *fs, char *filename, char *data, int dataSize) { int index = -1; for (int i = 0; i < fs->dirNum; i++) { if (strcmp(fs->dir[i].name, filename) == 0) { index = i; break; } } if (index == -1) { printf("文件不存在!\n"); return; } // 检查文件大小是否超过最大值 if (dataSize > MAX_FILE_SIZE) { printf("文件太大了!\n"); return; } // 检查是否还有空闲块 int blockNumNeeded = (dataSize + BLOCK_SIZE - 1) / BLOCK_SIZE; // 需要的块数 if (blockNumNeeded > MAX_FILE_SIZE / BLOCK_SIZE - fs->dataNum) { printf("空间不足!\n"); return; } // 释放原块 int block = fs->dir[index].startBlock; while (block != -1) { int nextBlock = fs->fat[block]; fs->fat[block] = -1; fs->dataNum--; block = nextBlock; } // 分配新块 int firstBlock = -1; for (int i = 0; i < MAX_FILE_SIZE / BLOCK_SIZE; i++) { if (fs->fat[i] == -1) { fs->fat[i] = firstBlock; firstBlock = i; fs->dataNum++; if (fs->dataNum == blockNumNeeded) { break; } } } // 写入数据 block = firstBlock; int offset = 0; while (block != -1) { memcpy(fs->data + block * BLOCK_SIZE, data + offset, BLOCK_SIZE); offset += BLOCK_SIZE; block = fs->fat[block]; } // 更新目录项 fs->dir[index].startBlock = firstBlock; fs->dir[index].fileSize = dataSize; } int main() { struct FileSystem fs; initFileSystem(&fs); // 创建文件 createFile(&fs, "file1", 500); createFile(&fs, "file2", 700); createFile(&fs, "file3", 300); // 读取文件 char data[MAX_FILE_SIZE]; readFile(&fs, "file1", data); printf("file1: %s\n", data); // 写入文件 writeFile(&fs, "file1", "hello world", strlen("hello world")); readFile(&fs, "file1", data); printf("file1: %s\n", data); // 删除文件 deleteFile(&fs, "file2"); deleteFile(&fs, "file3"); return 0; } ``` 文档说明: 本项目是一个基于C语言实现的模拟操作系统文件系统,支持创建、删除、读取和写入文件。 文件系统采用了FAT文件系统的设计思路,使用一个文件分配表(FAT)来管理文件存储位置。每个文件均被分成多个块,每个块的大小为1024字节。文件分配表记录了每个块的下一个块的位置,如果是最后一个块,下一个块的位置为-1。 文件系统中的目录项记录了文件名、文件起始块和文件大小等信息。目录项采用了线性查找的方式进行文件查找。 文件系统支持的最大文件数量为100个,最大文件大小为1000字节。 操作系统模拟文件管理c语言的完整代码和文档可以在我的Github上找到:https://github.com/ethan-funny/OS-FAT-FileSystem。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值