一个小白的仓库管理系统
1、 登录函数的完成
2、 链表的增删查改的完成
3、 菜单函数的完成
4、 文件的保存及查看
- 想要创建一个系统就应该先定义一个结构体并确定他的各个结点
- 下面是代码的实现
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<time.h>
#define LEN sizeof(shop)
typedef struct shoping {
char barcode[20]; //编码
char name[20]; //名字
float price; //价格
int count; //数量
struct shoping *next;
} shop;
登陆函数的完成
1.首先我们来创建一个系统最不可缺少的登陆系统
2. 系统里面当然要有账号和密码,我又加了一个验证码,来完善我的代码。
3. 我利用strcmp函数来判断账户密码是否正确
int verify() {
int num;
srand(time(0)); //防止伪随机数 时间复杂度
char node[7]; //node[6]='\0';
char node_[6];
char eng[62]= {
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
for(int i=0; i<6; i++) {
num=rand()%60+0;
node[i]=eng[num]; //验证码
}
node[6]='\0'; //解决bug
printf("验证码为:%s ",node);
printf("请输入验证码:");
scanf("%s",node_);
if(strcmp(node,node_)==0) {
printf("验证成功!!!\n");
return 1;
} else {
printf("验证失败!!!\n");
return 2;
}
}
int lading () {
//登陆函数
int i=1,j;
while(i) {
welcome();
printf(" * * * * * * 登陆 * * * * * *\n");
char name[20];
char password[20];
printf(" 请输入name:");
scanf("%s",name);
printf("\n");
printf(" 请输入password:");
scanf("%s",password);
printf("\n");
j=verify();
if(strcmp(name,"xiaoyi")==0 && strcmp(password,"112548")==0) {
if(j == 1) {
printf("* * * * * * * * * * * * * 登陆成功* * * * * * * * * * * *\n \n \n \n");
i=0;
return 1;
} else if(j == 2) {
printf("* * * * * * * * *登陆失败,请重新登陆 * * * * * * * * * * * * * *\n \n \n \n");
}
} else {
if(i>0 && i<3)
printf("* * * * * * * * *登陆失败,请重新登陆 * * * * * * * * * * * * * *\n \n \n \n");
if((i++)==3) {
printf("* * * * * * * * * 登陆失败,请重启系统后重试 * * * * * * * * * *\n \n \n \n");
i=0;
return 0;
}
}
system("pause");
system("cls");
}
}
- 这里我要声明一下,验证中我没有把所有的字母和数字加进去是因为有的字母和数字在运行后的黑框里得显示基本一致
想要进一步了解验证码的话可以看看[https://blog.csdn.net/kingdring/article/details/109543882?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160903570316780274071687%252522%25252C%252522scm%252522%25253A%25252220140713.130102334.pc%25255Fall.%252522%25257D&request_id=160903570316780274071687&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-1-109543882.first_rank_v2_pc_rank_v29&utm_term=%E7%AE%80%E5%8D%95%E9%AA%8C%E8%AF%81%E7%A0%81c]这为大佬的博客
链表的增删查改的完成
- 当然链表的增删查改功能是必不可少的,这就需要我们来创建一个链表来完成这些功能,下面是代码的实现。
shop *creat() {
//创建链表
shop *head=(shop*)malloc(LEN);
head->next=NULL;
return head;
}
int add(shop *head,int j) {
//增加函数
int n;
printf("输入增加货物的数量: \n");
printf("输入0可返回菜单\n");
scanf("%d",&n);
if(n == 0) {
system("cls");
menu();
}
while(n--) {
if(n<0) {
printf("您输入的数据有误,请重新输入\n");
break;
}
shop *p=head;
shop *q=(shop*)malloc(LEN);
tp:
printf("请输入货物编码 货物名称 货物价格 货物数量\n");
scanf("%s %s %f %d",q->barcode,q->name,&q->price,&q->count);
int k=1; // 查看是否重复
for(int i=1; i<=j; i++) {
p=p->next;
if(strcmp(p->barcode,q->barcode)==0 && strcmp(p->name,q->name)==0) {
if(p->price==q->price) {
printf("货物添加成功!!!\n"); //利用p遍历以前链表
p->count+=q->count;
free(q);
k=2;
break;
} else {
printf("货物添加失败\n");
free(q);
k=3;
n++;
break;
}
} else if(strcmp(p->barcode,q->barcode)==0 || strcmp(p->name,q->name)==0) {
printf("货物添加失败\n");
free(q);
k=4;
n++;
break;
}
}
if(k==1) {
printf("货物添加成功\n");
p->next=q;
q->next=NULL;
j++;
}
}
return j;
}
void print(shop *head) {
//输出函数
shop *p=head->next;
while(p) {
printf("编码:%s\t 货物名称:%s\t 货物价格:%.2f\t货物数量:%d\t\n",p->barcode,p->name,p->price,p->count);
p=p->next;
}
}
void change(shop *head) {
//改变函数
shop *p;
p=head->next;
printf("请输入要改变货物的编码:\n");
printf("输入0可返回菜单\n");
char barcode[20];
scanf("%s",barcode)