要制作一个“系统”,就得先把一个个小功能逐一实现,然后将其整合,我们用C语言只需把它们写成一个个函数即可,直接进入正题,我们列出今天所需的头文件,一共五个
头函数
我们先写主函数,还是那段int main(){ }
接着我们想一下,开店需要什么,肯定是要进货呀,没有商品就没有买卖对吧,那我们进货商品肯定不能买了就算了,得先统计一下我们需要的内容,二话不说先建个结构体,保存多项数据
商品结构体
structcommodity{ /*结点类型声明 */charname[30]; /*商品名 */charnum[10]; /*编号 */floatcost; /*单价 */floatsell;/*进价*/inttotal;/*库存*/structcommodity*next; /*链接指针定义 */};
添加商品
接下来就是关键的一步,添加我们的商品进入系统中,这里用到链表的写法
voidadd() { /*添加新结点 *///char sth[100]; /*预设一个储存输入字符串的数组 */newnode= (structcommodity*)malloc(sizeof(structcommdity*)); /*申请新结点的存储空间 */if (head==NULL) head=newnode; /*原商品为空,新结点就是头结点 */else { /*原商品不为空 */currnode=head; /*当前结点为头结点 */while (currnode->next!=NULL) /*从当前开始找到尾结点 */currnode=currnode->next; currnode->next=newnode; } /*将新结点链接到链表尾结点成为新的尾结点 */currnode=newnode; /*指针指向新结点,进行数据输入 */ { printf("\n 输入商品名:"); scanf("%s", currnode->name); printf("\n 输入编号:"); scanf("%s", currnode->num); printf("\n 输入单价:"); scanf("%f", &currnode->cost); printf("\n 输入进价:"); scanf("%f", &currnode->sell); while (1) { printf("\n 输入商品库存量:"); scanf("%d", &currnode->total); if ((currnode->total) <0) { /*判断库存量是否出错 */printf("库存量出错!"); fflush(stdin); continue; } elsebreak; } printf("\n 成功添加!"); currnode->next=NULL; /*使新结点成为尾结点 */ } head=newnode; // p和plist是指向一段相同地址空间的两个不同指针。while (head!=NULL) { intq; q=head->next; free(head); head=q; } newnode=NULL; // 只是释放了其内存空间,指向链表的指针值并没有被置为空}
密码验证系统
此时写完一个函数,我们写进主函数里,功能是实现了,但没有什么特色呀,系统能被随便打开吗,那当然不行,怎么办呢,我们给它写一个系统的密码验证登录界面
voidcheckLogin() //密码检测登录{ intn; intPW=123456; //密码printf("请输入系统密码:"); for(cnt=0;cnt!=3;) { scanf("%d",&password); if(password==PW) { n=1; printf("登录成功,3秒后自动进入系统\n"); Sleep(1000); printf("登录成功,2秒后自动进入系统\n"); Sleep(1000); printf("登录成功,1秒后自动进入系统\n"); Sleep(1000); system("cls"); break; } else { cnt++; while(cnt==3) { printf("系统锁定,无法输入密码,3秒后系统自动关闭\n"); Sleep(2000); system("cls"); printf("系统锁定,无法输入密码,2秒后系统自动关闭\n"); Sleep(1200); system("cls"); printf("系统锁定,无法输入密码,1秒后系统自动关闭\n"); Sleep(1200); system("cls"); exit(0); } printf("密码错误,再次输入密码(你只有三次机会):\n"); } } }
网络异常,图片无法展示
|
主界面菜单
那登录界面写好了,我们进去一看,哎,里面空荡荡的,得给它加点特色,把我们要设置的界面预制设出来,还能提醒我们还有哪些功能没写
printf("----------------------------------------商品销售系统--------------------------------------"); charch; intflag=1; while (flag) { printf("\n--------------------------"); printf("\n[1]添加商品\n[2]查找商品\n[3]删除商品\n[4]修改\n[5]排序\n[6]统计\n[7]显示当前在售商品\n[8]退出\n"); fflush(stdin); /*刷新缓冲区,过滤回车 */printf("-----------------------------------------------------------------------------------------------------\n"); printf("请输入");
网络异常,图片无法展示
|
从图中我们透露给大家一共有八个功能,现在已经实现了一个添加商品,很有意思的是,第八个,有进入系统,那肯定也要能退出才行,不能强买强卖是吧。
同时我们要选择功能,就一定要用到一个循环体,那就是我们的switch—case,设置多个目标函数,输入一个对应的数字,就进入到对应的函数里实现其功能
scanf("%c", &ch); switch (ch) { case'1': /*输入1为添加商品*/add(); break; case'2': search(); break; case'3': Delete(); break; case'4': modify(); break; case'5': order(); break; case'6': statistic(); break; case'7': show(); break; default: flag=0; /*其他按键结束操作 */ } getchar();
接下来就是要实现一下删除功能,毕竟一不小心卖断货,这件商品成了绝版,那系统里也没必要存这个商品了,咱把它从系统里清除
删除商品
voidDelete() { charname[100]; printf("请输入你要删除的商品的名称: "); scanf("%s", name); prenode=NULL; currnode=head; /*当前结点为头结点 */while (currnode!=NULL) { if (strcmp(name, currnode->name) ==0) { if (prenode==NULL) { printf("删除成功!\n"); head=head->next; return; } else { prenode->next=currnode->next; printf("删除成功\n"); return; } } } printf("不存在!\n"); }
修改商品
voidmodify() { intt; chari[10]; printf("请输入你要修改的商品的编号:\n"); scanf("%s", &i); currnode=head; /*以头结点为当前节点*/while (currnode!=NULL) { if (strcmp(currnode->num,i)==0) { printf("商品名:%s\n 编号:%s\n 单价:%f\n 售价:%f\n \n", currnode->name, currnode->num, currnode->cost, currnode->sell); printf("确定要修改吗?确定请输入1,取消请输入0\n"); scanf("%d", &t); if (t) { printf("\n 输入修改后的商品名:"); scanf("%s", currnode->name); printf("\n 输入修改后的编号:"); scanf("%s", currnode->num); printf("\n 输入修改后的单价:"); scanf("%f", &currnode->cost); printf("\n 输入修改后的进价"); scanf("%f", &currnode->sell); } break; } elsecurrnode=currnode->next;/*以下一节点为当前节点*/ } printf("修改成功"); }
排序
voidorder() { structcommodity*p, t; if (head==NULL) printf("暂时无相关信息!\n"); intn; printf("请选择排序方式:\n1.按编号排序\n2.按价格排序"); scanf("%d", &n); currnode=head; switch (n) { case1: { while (currnode->next!=NULL)//将所有商品编号从小到大排序 { p=currnode->next; while (p!=NULL) //每一个p与currnode比较从中逐个进行排序 { if (currnode->num>p->num) { t=*currnode; //交换结构体 *currnode=*p; *p=t; t.next=currnode->next; //重新排列链表 currnode->next=p->next; p->next=t.next; } p=p->next; } currnode=currnode->next; } } break; case2: { while (currnode->next!=NULL) { //将所有的价格从小到大排序并且逐个排序 p=currnode->next; while (p!=NULL) //每一个p与currnode比较从中逐个进行排序 { if (currnode->cost>p->cost) { t=*currnode; //交换结构体 *currnode=*p; *p=t; t.next=currnode->next; //重新排列链表 currnode->next=p->next; p->next=t.next; } p=p->next; } currnode=currnode->next; } } break; } printf("排序结果如下:\n"); while (currnode!=NULL) { printf("商品名:%s\n 编号:%s \n 价格:%f 数量:%d ", currnode->name, currnode->num, currnode->cost, currnode->total); currnode=currnode->next; } printf("商品名:%s\n 编号:%s \n 价格:%f 数量:%d ", currnode->name, currnode->num, currnode->cost, currnode->total); }
统计
voidstatistic() { inttotal=0; inttotalPrice=0; inttotalsell=0; intprofit=0; inttotalprofit=0; currnode=head; /*当前结点为头结点 */while (currnode!=NULL) { total+=currnode->total; totalPrice+=currnode->cost*currnode->total; totalsell+=currnode->sell*currnode->total; profit=currnode->cost-currnode->sell; totalprofit+=profit*currnode->total; currnode=currnode->next; } printf("商品数量为:%d\n", total); printf("商品总价为:%d\n", totalPrice); printf("商品总进价为:%d\n",totalsell); printf("商品总利润为:%d\n", totalprofit); }
显示在售商品
voidsearch() { printf("请输入所查商品的信息关键词\n"); printf("若按商品名查找请按1\n"); printf("若按编号查找请按2\n"); printf("若按单价查找请按3\n"); printf("若按库存查找请按4\n"); inta; printf("从键盘上输入所选编号:"); scanf("%d", &a); //从键盘上输入所选编号 charname[50]; floatcost=0; intnum=0, total=0; //定义查询信息时的变量 if (a>=1&&a<=4) { switch (a) //根据编号确定所查信息 { case1: {printf("请输入:");scanf("%s", &name);break; } case2: {printf("请输入:");scanf("%d", &num);break;} case3: {printf("请输入:");scanf("%f", &cost);break;} case4: {printf("请输入:");scanf("%d", &total);break;} } } elseprintf("所输入的编号错误,请重新输入\n"); inti=0; currnode=head; while (currnode!=NULL) { if (strcmp(currnode->name, name) ==0||currnode->num||currnode->cost==cost||currnode->total==total) printf("\n\n\n\n您要寻找的信息如下\n商品名:%s\n 编号:%s \n 价格:%f \n 库存:%d", currnode->name, currnode->num, currnode->cost, currnode->total); currnode=currnode->next; } }
全部代码
structcommodity{ /*结点类型声明 */charname[30]; /*商品名 */charnum[10]; /*编号 */floatcost; /*单价 */floatsell;/*进价*/inttotal;/*库存*/structcommodity*next; /*链接指针定义 */}; /*函数声明 */voidadd(); voidsearch(); voidDelete(); voidstatistic(); voidmodify(); voidorder(); voidshow(); voidcheckLogin(); intcnt=0; intpassword; structcommodity*head=NULL, *currnode, *newnode, *prenode; /*指向结点的指针声明 *///主函数 intmain() { checkLogin(); printf("----------------------------------------商品销售系统--------------------------------------"); charch; intflag=1; while (flag) { printf("\n--------------------------"); printf("\n[1]添加商品\n[2]查找商品\n[3]删除商品\n[4]修改\n[5]排序\n[6]统计\n[7]显示当前在售商品\n[8]退出\n"); fflush(stdin); /*刷新缓冲区,过滤回车 */printf("-----------------------------------------------------------------------------------------------------\n"); printf("请输入"); scanf("%c", &ch); switch (ch) { case'1': /*输入1为添加商品*/add(); break; case'2': search(); break; case'3': Delete(); break; case'4': modify(); break; case'5': order(); break; case'6': statistic(); break; case'7': show(); break; default: flag=0; /*其他按键结束操作 */ } getchar(); } } voidadd() { /*添加新结点 *///char sth[100]; /*预设一个储存输入字符串的数组 */newnode= (structcommodity*)malloc(sizeof(structcommdity*)); /*申请新结点的存储空间 */if (head==NULL) head=newnode; /*原商品为空,新结点就是头结点 */else { /*原商品不为空 */currnode=head; /*当前结点为头结点 */while (currnode->next!=NULL) /*从当前开始找到尾结点 */currnode=currnode->next; currnode->next=newnode; } /*将新结点链接到链表尾结点成为新的尾结点 */currnode=newnode; /*指针指向新结点,进行数据输入 */ { printf("\n 输入商品名:"); scanf("%s", currnode->name); printf("\n 输入编号:"); scanf("%s", currnode->num); printf("\n 输入单价:"); scanf("%f", &currnode->cost); printf("\n 输入进价:"); scanf("%f", &currnode->sell); while (1) { printf("\n 输入商品库存量:"); scanf("%d", &currnode->total); if ((currnode->total) <0) { /*判断库存量是否出错 */printf("库存量出错!"); fflush(stdin); continue; } elsebreak; } printf("\n 成功添加!"); currnode->next=NULL; /*使新结点成为尾结点 */ } head=newnode; // p和plist是指向一段相同地址空间的两个不同指针。while (head!=NULL) { intq; q=head->next; free(head); head=q; } newnode=NULL; // 只是释放了其内存空间,指向链表的指针值并没有被置为空} //统计商品总量 voidstatistic() { inttotal=0; inttotalPrice=0; inttotalsell=0; intprofit=0; inttotalprofit=0; currnode=head; /*当前结点为头结点 */while (currnode!=NULL) { total+=currnode->total; totalPrice+=currnode->cost*currnode->total; totalsell+=currnode->sell*currnode->total; profit=currnode->cost-currnode->sell; totalprofit+=profit*currnode->total; currnode=currnode->next; } printf("商品数量为:%d\n", total); printf("商品总价为:%d\n", totalPrice); printf("商品总进价为:%d\n",totalsell); printf("商品总利润为:%d\n", totalprofit); } //删除功能 voidDelete() { charname[100]; printf("请输入你要删除的商品的名称: "); scanf("%s", name); prenode=NULL; currnode=head; /*当前结点为头结点 */while (currnode!=NULL) { if (strcmp(name, currnode->name) ==0) { if (prenode==NULL) { printf("删除成功!\n"); head=head->next; return; } else { prenode->next=currnode->next; printf("删除成功\n"); return; } } } printf("不存在!\n"); } //修改功能 voidmodify() { intt; chari[10]; printf("请输入你要修改的商品的编号:\n"); scanf("%s", &i); currnode=head; /*以头结点为当前节点*/while (currnode!=NULL) { if (strcmp(currnode->num,i)==0) { printf("商品名:%s\n 编号:%s\n 单价:%f\n 售价:%f\n \n", currnode->name, currnode->num, currnode->cost, currnode->sell); printf("确定要修改吗?确定请输入1,取消请输入0\n"); scanf("%d", &t); if (t) { printf("\n 输入修改后的商品名:"); scanf("%s", currnode->name); printf("\n 输入修改后的编号:"); scanf("%s", currnode->num); printf("\n 输入修改后的单价:"); scanf("%f", &currnode->cost); printf("\n 输入修改后的进价"); scanf("%f", &currnode->sell); } break; } elsecurrnode=currnode->next;/*以下一节点为当前节点*/ } printf("修改成功"); } //查找功能voidsearch() { printf("请输入所查商品的信息关键词\n"); printf("若按商品名查找请按1\n"); printf("若按编号查找请按2\n"); printf("若按单价查找请按3\n"); printf("若按库存查找请按4\n"); inta; printf("从键盘上输入所选编号:"); scanf("%d", &a); //从键盘上输入所选编号 charname[50]; floatcost=0; intnum=0, total=0; //定义查询信息时的变量 if (a>=1&&a<=4) { switch (a) //根据编号确定所查信息 { case1: {printf("请输入:");scanf("%s", &name);break; } case2: {printf("请输入:");scanf("%d", &num);break;} case3: {printf("请输入:");scanf("%f", &cost);break;} case4: {printf("请输入:");scanf("%d", &total);break;} } } elseprintf("所输入的编号错误,请重新输入\n"); inti=0; currnode=head; while (currnode!=NULL) { if (strcmp(currnode->name, name) ==0||currnode->num||currnode->cost==cost||currnode->total==total) printf("\n\n\n\n您要寻找的信息如下\n商品名:%s\n 编号:%s \n 价格:%f \n 库存:%d", currnode->name, currnode->num, currnode->cost, currnode->total); currnode=currnode->next; } } //排序voidorder() { structcommodity*p, t; if (head==NULL) printf("暂时无相关信息!\n"); intn; printf("请选择排序方式:\n1.按编号排序\n2.按价格排序"); scanf("%d", &n); currnode=head; switch (n) { case1: { while (currnode->next!=NULL)//将所有商品编号从小到大排序 { p=currnode->next; while (p!=NULL) //每一个p与currnode比较从中逐个进行排序 { if (currnode->num>p->num) { t=*currnode; //交换结构体 *currnode=*p; *p=t; t.next=currnode->next; //重新排列链表 currnode->next=p->next; p->next=t.next; } p=p->next; } currnode=currnode->next; } } break; case2: { while (currnode->next!=NULL) { //将所有的价格从小到大排序并且逐个排序 p=currnode->next; while (p!=NULL) //每一个p与currnode比较从中逐个进行排序 { if (currnode->cost>p->cost) { t=*currnode; //交换结构体 *currnode=*p; *p=t; t.next=currnode->next; //重新排列链表 currnode->next=p->next; p->next=t.next; } p=p->next; } currnode=currnode->next; } } break; } printf("排序结果如下:\n"); while (currnode!=NULL) { printf("商品名:%s\n 编号:%s \n 价格:%f 数量:%d ", currnode->name, currnode->num, currnode->cost, currnode->total); currnode=currnode->next; } printf("商品名:%s\n 编号:%s \n 价格:%f 数量:%d ", currnode->name, currnode->num, currnode->cost, currnode->total); } voidshow()//显示商品信息功能 { currnode=head; while (currnode!=NULL) { printf("商品名:%s\n 编号:%s \n价格:%f \n数量:%d ", currnode->name, currnode->num, currnode->cost, currnode->total); currnode=currnode->next; } } voidcheckLogin() //密码检测登录{ intn; intPW=123456; //密码printf("请输入系统密码:"); for(cnt=0;cnt!=3;) { scanf("%d",&password); if(password==PW) { n=1; printf("登录成功,3秒后自动进入系统\n"); Sleep(1000); printf("登录成功,2秒后自动进入系统\n"); Sleep(1000); printf("登录成功,1秒后自动进入系统\n"); Sleep(1000); system("cls"); break; } else { cnt++; while(cnt==3) { printf("系统锁定,无法输入密码,3秒后系统自动关闭\n"); Sleep(2000); system("cls"); printf("系统锁定,无法输入密码,2秒后系统自动关闭\n"); Sleep(1200); system("cls"); printf("系统锁定,无法输入密码,1秒后系统自动关闭\n"); Sleep(1200); system("cls"); exit(0); } printf("密码错误,再次输入密码(你只有三次机会):\n"); } } }