赞
踩
本文使用c语言实现仓库管理系统
新手的练手之作,代码中还有一些不足之处,后续会进一步修改,虚心学习各位大佬的意见
使用结构体数组及文件操作
其中有个账号密码匹配功能借鉴了站内一位大佬的文章“C语言程序设计:图书管理系统(超详细有登录系统,附代码和实验报告)”
界面有点丑陋,后面可能会发一个新的版本,对于一些细节的优化
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <windows.h>
- #include <iostream>
- #define maxsize 20
- #include <conio.h>
- using namespace std;
- //建立一个仓库管理程序,
- //可以按顺序和货物名称查询仓库存储情况,
- //也可以增加或删除货物信息、
- //实现货物的入库出库,
- //要求能用文件保存仓库货品信息。
- //增加了采购员信息,用户信息,加入登录功能
-
-
- void Create();
- void Add();
- void Agent();
- void Buyer();
- void Delete();
- void name_Inquire();
- void time_Inquire();
- void Change();
- void Inquire();
- void DispList();
- int choose();
- void see();
- void timeout();
- int match_num();
- int Len = 0;
-
-
- typedef struct Info {//仓库货物信息
- char num[5];
- char name[10];
- int amount;
- char buy[20];
- char store[10];
- } Info;
-
- Info info[10];
- char idname[10];
-
-
- void normalmenu() {
- printf("欢迎来到仓库管理系统");
- printf(" 1.按照入库顺序查询仓库存储情况 \n");
- printf(" 2.按照货物名称查询仓库存储情况 \n");
- }
-
- void GMmenu1() {
- while (1) {
- printf("\n");
- printf(" 欢迎来到仓库管理系统(管理员) \n");
- printf("****************菜单****************\n");
- printf(" \n");
- printf(" 1.新建 \n");
- printf(" 2.查询仓库存储情况 \n");
- printf(" 3.展示货物信息 \n");
- printf(" 4.增加货物信息 \n");
- printf(" 5.删除货物信息 \n");
- printf(" 6.修改货物信息 \n");
- printf(" 7.厂商信息 \n");
- printf(" 8.采购员信息 \n");
- printf(" 9.退出 \n");
- printf(" \n");
- printf("************************************\n");
- printf(" 请选择你想要的功能(序号) \n");
- int n;
- scanf("%d", &n);
-
- while (n < 1 || n > 9) {
- printf("输入指令有误,请重新输入:\n");
- scanf("%d", &n);
- }
-
- switch (n) {
- case 1:
- Create();
- break;
-
- case 2:
- Inquire();
- break;
-
- case 3:
- DispList();
- break;
-
- case 4:
- Add();
- break;
-
- case 5:
- Delete();
- break;
-
- case 6:
- Change();
- break;
-
- case 7:
- Agent();
- break;
-
- case 8:
- Buyer();
- break;
-
- case 9:
- printf("谢谢您的使用!\n");
- exit(0);
- }
-
-
- }
- }
-
-
- void read() {
- Len = 0;
- FILE *fp1;
- fp1 = fopen("data.txt", "r+");
-
- if (fp1 == NULL) {
- printf("注意:你的数据库内没有商品信息");
- }
-
- while (!feof(fp1)) {
- fscanf(fp1, "%s %s %d %s %s\n", &info[Len].num, &info[Len].name, &info[Len].amount, &info[Len].buy, &info[Len].store);
- ++Len;
- }
-
- fclose(fp1);
- }
-
- void write() {
- //将结构体数组存入文件中
- FILE *fp;
-
- fp = fopen("data.txt", "w+"); //打开文件
-
- for (int i = 0; i < Len; i++) {
-
- fprintf(fp, "%s %s %d %s %s\n", info[i].num, info[i].name, info[i].amount, info[i].buy, info[i].store);
- }
-
- fclose(fp); //关闭文件
- }
-
- void Create() {
- FILE *fp;
- char s;
- printf("\n如果你之前建立过数据集将会被重置");
- printf("\n请再次确认你是否要建立数据集(Y/N)");
- fflush(stdout);
- scanf("%s", &s);
- int num;
-
- if (s == 'n' || s == 'N') {
- printf("\n已退出\n");
- return;
- } else if (s == 'y' || s == 'Y') {
- Info info[maxsize];
- FILE *fp, *fpp;
-
-
- printf("有多少行信息\n");
- scanf("%d", &num);
-
- for (int i = 0; i < num; i++) {
-
- printf("\n请输入编号");
- scanf("%s", &info[i].num);
- printf("\n请输入货物的名字");
- scanf("%s", &info[i].name);
- printf("\n请输入数量");
- scanf("%d", &info[i].amount);
- printf("\n请输入采购员的名字");
- scanf("%s", &info[i].buy);
- printf("\n请输入厂商的名字");
- scanf("%s", &info[i].store);
- }
-
- Len = num;
-
- //将结构体数组存入文件中
-
-
- fp = fopen("data.txt", "w+"); //打开文件
-
- for (int i = 0; i < Len; i++) {
-
- fprintf(fp, "%s %s %d %s %s\n", info[i].num, info[i].name, info[i].amount, info[i].buy, info[i].store);
- }
-
- fclose(fp); //关闭文件
- printf("功能已完成,倒计时5秒后将自动退出");
-
- int nnn = 5;
- printf("\n");
-
- do {
- printf("%d ", nnn);
- putchar('\a');
- Sleep(1000);
- } while (nnn--);
- system("cls");
- return;
- } else {
- Create();
- }
-
-
-
- }
-
- void Inquire() {
- int tem;
- printf("请选择你想按照什么方式进行查找?(输入号码)");
- printf("1.按照入库顺序进行查找");
- printf("2.按照物品名称进行查找");
- scanf("%d", &tem);
-
- if (tem == 1) {
- time_Inquire();
- } else if (tem == 2) {
- name_Inquire();
- } else {
- printf("号码输入错误,请重新输入");
- }
-
- }
-
- void time_Inquire() {
-
- read();
-
- while (1) {
- char a[5];
- printf("请输入想要查询货物的编号:\n");
- scanf("%s", &a);
-
- for (int i = 0; i < Len; i++) {
-
- if (strcmp(info[i].num, a) == 0) {
- printf("编号:%s\n", info[i].num);
- printf("名称:%s\n", info[i].name);
- printf("数量:%d\n", info[i].amount);
- printf("采购员:%s\n", info[i].buy);
- printf("厂商:%s\n", info[i].store);
- printf("\n");
- }
- }
-
- printf("还要继续查询吗?(Y/N)\n");
- char ap;
- fflush(stdin);
- scanf("%c", &ap);
-
- if (ap == 'n' || ap == 'N') {
- timeout();
- break;
- } else if (ap == 'y' || ap == 'Y') {
- continue;
- } else {
- printf("输入错误字符将自动退出程序\n");
- timeout();
- return;
- }
- }
-
-
-
-
- }
-
- void name_Inquire() {
-
- read();
-
- while (1) {
- char check_name[10];
- printf("请输入你想要查询货物的名字:");
- scanf("%s", &check_name);
-
- for (int i = 0; i < Len; i++) {
-
- if (strcmp(info[i].name, check_name) == 0) {
- printf("编号:%s\n", info[i].num);
- printf("名称:%s\n", info[i].name);
- printf("数量:%d\n", info[i].amount);
- printf("采购员:%s\n", info[i].buy);
- printf("厂商:%s\n", info[i].store);
- printf("\n");
- }
- }
-
- printf("还要继续查询吗?(Y/N)\n");
- char ap;
- fflush(stdin);
- scanf("%c", &ap);
-
- if (ap == 'n' || ap == 'N') {
- timeout();
- break;
- } else if (ap == 'y' || ap == 'Y') {
- continue;
- } else {
- printf("输入错误字符将自动退出程序\n");
- timeout();
- return;
- }
- }
-
-
-
- }
-
-
-
- void DispList() {
- read();
- printf("编号 名称 数量 采购员 厂商\n");
-
- for (int i = 0; i < Len; i++) {
-
- printf("%-8s %-8s %-8d %-8s %-8s\n", info[i].num, info[i].name, info[i].amount, info[i].buy, info[i].store);
- }
-
- }
-
- void num_DispList() {
- read();
- printf("序号 编号 名称 数量 采购员 厂商\n");
-
- for (int i = 0; i < Len; i++) {
-
- printf("%-8d% -8s %-8s %-8d %-8s %-8s\n", i, info[i].num, info[i].name, info[i].amount, info[i].buy, info[i].store);
- }
- }
-
- void Add() {
- int addinfo = Len + 1;
- FILE *fp;
- char i;
- system ("cls");
-
- if ((fp = fopen("data.txt", "r")) == NULL) {
- fp = fopen("data.txt", "w");
- fclose(fp);
- }
-
- fp = fopen("data.txt", "a");
-
- printf("\n请按以下格式输入货物信息:\n编号 名称 数量 采购员 厂商");
- fprintf(fp, "\n");
-
- for (; i != 27;) { //为了实现输入一次后按esc退出
-
- printf("请输入:\n");
- scanf("%s %s %d %s %s", &info[addinfo].num, &info[addinfo].name, &info[addinfo].amount, &info[addinfo].buy,
- &info[addinfo].store);
- fprintf(fp, "%s %s %d %s %s\n", info[addinfo].num, info[addinfo].name, info[addinfo].amount, info[addinfo].buy,
- info[addinfo].store);
- printf("继续输入请按回车,结束输入请按Esc\n");
- i = getch(); //暂停程序当i接收后继续下一条指令
-
- for (; i != 13 && i != 27;) //保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
-
- i = getch();
- }
-
- fclose(fp);
- printf("\n保存成功,按任意键返回上一层!");
- getch();
- return;
- }
-
- void Delete() {
-
- system("cls");//清屏函数
- int tip, i, j;
- char sg;
- char id_num[5];
- DispList();
- printf("请输入您要删除的编号:\n");
- scanf("%s", &id_num);
- FILE *fp;
- int sign = 0;
- int tp, zz;
-
- for ( i = 0; i < Len; i++) {
- if (strcmp(info[i].num, id_num) == 0) {//有点小问题
- ++sign;
- printf("编号:%s\n", info[i].num);
- printf("名称:%s\n", info[i].name);
- printf("数量:%d\n", info[i].amount);
- printf("采购员:%s\n", info[i].buy);
- printf("厂商:%s\n", info[i].store);
- printf("\n请再次确认您是否删除:(Y/N)");
- fflush(stdin);
- char gchar;
- gchar = getch();
- zz = i;
-
- if (gchar == 'Y' || gchar == 'y' ) {
- for (tp = zz; tp < Len; tp++) {
-
- strcpy(info[tp].num, info[tp + 1].num);
- strcpy(info[tp].name, info[tp + 1].name);
- info[tp].amount = info[tp + 1].amount;
- strcpy(info[tp].buy, info[tp + 1].buy);
- strcpy(info[tp].store, info[tp + 1].store);
- }
-
- printf("删除成功");
- Len--;
- write();
- timeout();
- return;
- }
- }
-
- }
-
-
-
- if (sign == 0) {
- printf("\n没有找到该用户");
- timeout();
- return;
- }
-
-
-
- }
-
- void select() {//修改中的菜单
- printf("\n1:修改编号");
- printf("\n2:修改货物名称");
- printf("\n3:修改数量");
- printf("\n4:修改采购员");
- printf("\n5:修改厂商");
- printf("\n6:退出");
- printf("\n请选择你需要的操作:");
- }
-
- int choose() {
- int pink;
- printf("请选择你要修改的位置的序号:");
- scanf("%d", &pink);
- return pink - 1;//返回物理位置
- }
-
- void Change() {
- system("cls");//清屏函数
- num_DispList();
- int a;
- int tap;
- select();
- scanf("%d", &a);
-
- while (1) {
- switch (a) {
- case 1: {
- read();
- tap = choose();
- printf("请输入修改后的编号");
- scanf("%s", &info[tap].num);
- printf("%s", info[tap].num);
- printf("修改成功!");
- write();
- return;
- break;
- }
-
- case 2: {
- read();
- tap = choose();
- printf("请输入修改后的货物名称");
- scanf("%s", &info[tap].name);
- printf("%s", info[tap].name);
- printf("修改成功!");
- write();
- return;
- break;
- }
-
- case 3: {
- read();
- tap = choose();
- printf("请输入修改后的数量");
- scanf("%lld", &info[tap].amount);
- printf("%lld", info[tap].amount);
- printf("修改成功!");
- write();
- return;
- break;
- }
-
- case 4: {
- read();
- tap = choose();
- printf("请输入修改后的采购员的名字");
- scanf("%d", &info[tap].buy);
- printf("%d", info[tap].buy);
- printf("修改成功!");
- write();
- return;
- break;
- }
-
- case 5: {
-
- read();
- tap = choose();
- printf("请输入修改后的厂商");
- scanf("%d", &info[tap].store);
- printf("%d", info[tap].store);
- printf("修改成功!");
- write();
- return;
- break;
- }
-
-
- case 6: {
- return;
- }
-
-
- default: {
- printf("你输入的编号不对\n");
- break;
- }
- }
- }
- }
-
-
- void Agent() {
- read();
-
-
- while (1) {
- char check_store[10];
- printf("请输入想要查询厂商:\n");
- scanf("%s", &check_store);
-
- for (int i = 0; i < Len; i++) {
-
- if (strcmp(info[i].store, check_store) == 0) {
- printf("编号:%s\n", info[i].num);
- printf("名称:%s\n", info[i].name);
- printf("数量:%d\n", info[i].amount);
- printf("采购员:%s\n", info[i].buy);
- printf("厂商:%s\n", info[i].store);
- printf("\n");
- }
- }
-
- printf("还要继续查询吗?(Y/N)\n");
- char ap;
- fflush(stdin);
- scanf("%c", &ap);
-
- if (ap == 'n' || ap == 'N') {
- timeout();
- break;
- } else if (ap == 'y' || ap == 'Y') {
- continue;
- } else {
- printf("输入错误字符将自动退出程序\n");
- timeout();
- return;
- }
- }
- }
-
- void Buyer() {
- read();
-
- while (1) {
- char check_buyer[10];
- printf("请输入想要查询采购员:\n");
- scanf("%s", &check_buyer);
-
- for (int i = 0; i < Len; i++) {
-
- if (strcmp(info[i].buy, check_buyer) == 0) {
- printf("编号:%s\n", info[i].num);
- printf("名称:%s\n", info[i].name);
- printf("数量:%d\n", info[i].amount);
- printf("采购员:%s\n", info[i].buy);
- printf("厂商:%s\n", info[i].store);
- printf("\n");
- }
- }
-
- printf("还要继续查询吗?(Y/N)\n");
- char ap;
- fflush(stdin);
- scanf("%c", &ap);
-
- if (ap == 'n' || ap == 'N') {
- timeout();
- break;
- } else if (ap == 'y' || ap == 'Y') {
- continue;
- } else {
- printf("输入错误字符将自动退出程序\n");
- timeout();
- return;
- }
- }
- }
-
- int match(int m, char a[20]) { //匹配数据库中的账号密码
- FILE *fp;
- int n = 0, i = 0;
- int account;
- char password[20];
-
- if ((fp = fopen("welcome.txt", "r")) == NULL) { //不存在读者文件
- system ("cls");
- printf("\n 还未存在用户!请联系最高权限拥有者");
- getch();
- system("cls");
- return 0;
-
- }
-
-
- for (; !feof(fp);) {
-
- fscanf(fp, "%d %s", &account, password);
-
- if (m == account) {
- if (strcmp(a, password) == 0)
- return 1;
- else {
- return -1;
- }
- }
- }
-
- return 0;
- }
-
- void GMwelcome() { //输入账户密码的登录函数
- int account;
- char password[20];
- int i = 2, j, k, n;
- char hit = 0;
- system("cls");
-
- do {
- printf("\n请输入账号:\n");
- scanf("%d", &account);
- printf("确认输入请安回车,重新输入请按ECS");
- hit = getch(); //暂停程序当i接收后继续下一条指令
-
- for (; hit != 13 && hit != 27;) { //保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
-
- hit = getch();
- }
- } while (hit == 27);
- printf("\n请输入密码:\n");
- scanf("%s", password);
- i = match(account, password);
-
- if (i == 1) {
- system("cls");
- printf("登陆成功!按任意键继续\n");
- GMmenu1();
-
-
- } else {
- if (i == -1) {
- printf("密码错误!");
- getch();
- GMwelcome();
- }
-
- if (i == 0)
- printf("不存在此用户");
- getch();
- system("cls");
- printf("感谢您的使用");
- printf("倒计时5秒后将自动退出程序\n");
- int nnn = 5;
- printf("\n");
-
- do {
- printf("%d ", nnn);
- putchar('\a');
- Sleep(1000);
- } while (nnn--);
- }
- }
-
- void Nomenu() {
- while (1) {
- int uu = 0;
- printf(" 用户你好 \n");
- printf(" 欢迎来到仓库管理系统 \n");
- printf(" 请选择你想要的功能 \n");
- printf("****************菜单****************\n");
- printf(" \n");
- printf(" \n");
- printf(" 1.查询仓库存储情况 \n");
- printf(" 2.退出 \n");
- printf(" \n");
- printf(" \n");
- printf("************************************\n");
- printf("请输入序号:\n");
- scanf("%d", &uu);
-
- switch (uu) {
- case 1: {
- see();
- break;
- }
-
- case 2: {
- exit(1);
- break;
- }
-
- default: {
- printf("请输入正确的序号\n");
- Nomenu();
- break;
- }
- }
- }
-
-
- }
-
- void see() {
- read();
- int tem = Len + 1;
- printf("请输入你想要查询的货物:");
- char temp_name[10];
- scanf("%s", &temp_name);
- printf("\n名称 数量\n");
-
- for (int i = 0; i < tem; i++) {
-
- if (strcmp(info[i].name, temp_name) == 0) {
- printf("%s", info[i].name);
- printf("%6d\n", info[i].amount);
-
- }
- }
-
- timeout();
-
- }
-
- int Nomatch(int m, char a[20]) { //匹配数据库中的账号密码
- FILE *fp;
- int n = 0, i = 0;
- int account;
- char password[20];
-
- if ((fp = fopen("Nowelcome.txt", "r")) == NULL) { //不存在读者文件
- system ("cls");
- printf("\n 还未存在用户!请联系最高权限拥有者");
- getch();
- system("cls");
- return 0;
-
- }
-
-
- for (; !feof(fp);) {
-
- fscanf(fp, "%d %s", &account, password);
-
- if (m == account) {
- if (strcmp(a, password) == 0)
- return 1;
- else {
- return -1;
- }
- }
- }
-
- return 0;
- }
-
-
- void Nowelcome() {
- int account;
- char password[20];
- int i = 2, j, k, n;
- char hit = 0;
- system("cls");
-
- do {
- printf("\n请输入账号:\n");
- scanf("%d", &account);
- printf("确认输入请按回车,重新输入请按ECS");
- hit = getch(); //暂停程序当i接收后继续下一条指令
-
- for (; hit != 13 && hit != 27;) { //保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
-
- hit = getch();
- }
- } while (hit == 27);
- printf("\n请输入密码:\n");
- scanf("%s", password);
- i = Nomatch(account, password);
-
- if (i == 1) {
- printf("登陆成功!按任意键继续");
- Nomenu();
-
- } else {
- if (i == -1) {
- printf("密码错误!");
- getch();
- Nowelcome();
- }
-
- if (i == 0)
- printf("不存在此用户");
- getch();
- system("cls");
- printf("感谢您的使用");
- printf("倒计时5秒后将自动退出程序\n");
- int nnn = 5;
- printf("\n");
-
- do {
- printf("%d ", nnn);
- putchar('\a');
- Sleep(1000);
- } while (nnn--);
- }
- }
-
- void Allwelcome() {
- printf("请选择登录方式\n");
- printf("1、用户登录\n");
- printf("2、管理员登录\n");
- int t = 0;
- scanf("%d", &t);
-
- if (t == 1) {
- Nowelcome();
-
- } else if (t == 2) {
- GMwelcome();
-
- } else {
- system("cls");
- printf("出错了!!!请重试\n");
- Allwelcome();
- }
- }
-
- void timeout() {
- printf("\n输入任意键结束\n");
- getch();
- fflush(stdout);
- system("cls");
- }
-
- int main() {
- int n = 0;
- Allwelcome();
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。