有问题,可以问
#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;
void welcome() { //欢迎函数
printf("\n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * 欢迎使用112仓库管理系统 *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\n \n \n \n");
}
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");
}
}
void byebye() { //再见函数
printf("\n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * 感谢使用112仓库管理系统 *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * *\n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\n \n \n \n");
}
void menu() { //菜单函数
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");
}
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);
if(barcode == 0) {
system("cls");
menu();
}
int i=1;
while(p) {
if(strcmp(p->barcode,barcode)==0) {
printf("请输入改变后货物的名称 价格 数量\n");
scanf("%s %f %d",p->name,&(p->price),&p->count);
i=1;
break;
} else {
i=0;
}
p=p->next;
}
if(i==0) {
printf("该货物不存在! ! !\n");
}
}
void search(shop *head) { //搜索函数
shop *p=head->next;
printf("请输入要搜索的货物的名称:\n");
printf("输入0可返回菜单\n");
char name [20];
scanf("%s",name);
if(name == 0) {
system("cls");
menu();
}
int count =0;
int i=1;
while(p) {
if(strcmp(p->name,name)==0) {
i=1;
printf("货物的编码为: %s\n货物的名称为:%s\n货物价格为:%.2f\n货物数量为:%d\n",p->barcode,p->name,p->price,p->count);
break;
} else {
i=0;
}
p=p->next;
}
if(i==0) {
printf("该货物不存在! ! !\n");
}
}
void del(shop *head) { //删除函数
shop *p=head;
shop *q=p->next;
printf("请输入要删除货物的编码:\n");
printf("输入0可返回菜单\n");
char del_barcode[20];
scanf("%s",del_barcode);
int i=1;
while(q) {
if(strcmp(q->barcode,del_barcode)==0) {
p->next=q->next;
free(q);
printf("删除成功!\n");
i=1;
break;
} else {
p=p->next;
q=q->next;
i=0;
}
}
p=p->next; //
if(i==0) {
printf("未找到该货物的编码,删除失败 ! ! !\n");
}
if(del_barcode == 0) {
system("cls");
menu();
}
}
void sort(shop *head) { //排序
int temp;
char temp_[20];
float _temp;
shop *q = head->next;
shop *p = head->next;
shop *cur = head->next;
shop *tail = head; //标记尾端指针
while(tail != NULL) {
tail=tail->next; //tail为尾节点
}
int n;
printf("输入1按价格排序*******输入2按数量排序\n");
printf("输入0可返回菜单\n");
char scan[200];
while(1) {
scanf("%s",scan);
if(scan[0] >= '0' && scan[1] <= '9') {
if(scan[1] == '\0') {
break;
}
}
printf("输入指令错误!!!从新输入!!!\n");
}
switch(scan[0]) {
case '1':
while(p->next != tail) {
if(scan == 0) {
system("cls");
menu();
}
cur = head->next;
while(cur->next != tail) {
if(cur->price>cur->next->price) {
//交换
strcpy(temp_,cur->barcode);
strcpy(cur->barcode,cur->next->barcode);
strcpy(cur->next->barcode,temp_); //交换条形码
strcpy(temp_,cur->name);
strcpy(cur->name,cur->next->name); //交换商品名称
strcpy(cur->next->name,temp_);
temp = cur->count,
cur->count = cur->next->count; //交换商品数量
cur->next->count = temp;
_temp = cur->price;
cur->price = cur->next->price; //交换商品价格
cur->next->price = _temp;
}
cur = cur->next;
}
tail = cur;
}
printf("排序成功!!!\n");
while(p) {
printf("货物的编码为: %s\t货物的名称为:%s\t货物价格为:%.2f\t货物数量为:%d\t\n",p->barcode,p->name,p->price,p->count);
p = p->next;
}
break;
case '2':
while(p->next != tail) {
cur = head->next;
while(cur->next != tail) {
if(cur->count>cur->next->count) { //交换
strcpy(temp_,cur->barcode);
strcpy(cur->barcode,cur->next->barcode);
strcpy(cur->next->barcode,temp_);
strcpy(temp_,cur->name);
strcpy(cur->name,cur->next->name);
strcpy(cur->next->name,temp_);
temp = cur->count,
cur->count = cur->next->count;
cur->next->count = temp;
_temp = cur->price;
cur->price = cur->next->price;
cur->next->price = _temp;
}
cur = cur->next;
}
tail = cur;
}
printf("排序成功!!!\n");
while(p) {
printf("货物的编码为: %s\t货物的名称为:%s\t货物价格为:%.2f\t货物数量为:%d\t\n",p->barcode,p->name,p->price,p->count);
p = p->next;
}
break;
default:
printf("输入的指令不正确,请重新输入!!!\n");
break;
}
}
void save(shop *head) { //保存货物信息
shop *p=head->next;
FILE *fp=fopen("货物.txt","w+");
while(p) {
fprintf(fp,"编号:%s\t",p->barcode);
fprintf(fp,"名称:%s\t",p->name);
fprintf(fp,"价格:%.2f\t",p->price);
fprintf(fp,"数量:%d\t",p->count);
p=p->next;
}
printf("保存成功!!!\n");
fclose(fp);
}
void seek() { //查看保存的货物信息
char a[100];
FILE *fp=fopen("货物.txt","r");
while(fscanf(fp,"%s",a)!=EOF) {
printf("%s\n",a);
}
fclose(fp);
}
int main() {
system("color 0c"); //设置控制台颜色
if(lading()) { //登陆
shop *head=creat();
shop *p=head;
int i=1;
while(i) {
system("pause");
system("cls");
menu();
printf(" 请输入数字 以实现对应的功能:\n");
scanf("%d",&i);
if(i==0) {
printf("输入错误,请重新输入!\n");
system("pause");
fflush(stdin);
continue;
}
switch(i) {
case 1:
int k;
static int j;
k=add( p , j );
j=k;
break; //增加货物
case 2:
del(p);
break; //删除货物
case 3:
search(p);
break; //搜索货物
case 4:
print(p);
break; //查看所有货物
case 5:
change(p);
break; //改变货物的属性
case 6:
sort(p); //对保存的货物进行排序
break;
case 7:
save(p); //保存货物数据
break;
case 8:
seek(); //查看保存的货物数据
break;
case 9:
system("cls");
byebye(); //再见
exit(1);
break;
default:
printf("输入的指令不正确,请重新输入!!!\n");
break;
}
}
}
system("pause");
system("cls");
return 0;
}
大一课设?