C语言实现最全自动售货机
作者:一氧化二氢的执着
这篇文章主要为大家详细介绍了C语言实现最全自动售货机,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
拥有所有功能自动售货机C语言
主要功能:欢迎页面、通过文本文件读入货物信息、上货、卖货(包含找零,付款不足等多种情况)、增加新品种、按单价从高到低排序、按序号排序、退出前将所有货物信息回写进文本文档 实际代码非常简单
使用环境
VS2017编译运行正常;
DEV C++删除第一行(#define _CRT_SECURE_NO_WARNINGS)
注意事项
1.第一次使用需要进入系统维护录入所有信息.
2.在使用时会在桌面创建一个文本文件记录数据,下次运行也会有数据.
3.录入数据时一定注意按照系统提示,一定要先输入编号再进行创建新的品种,可以输入中文名称,如农夫山泉.
//初次使用请进行系统维护并录入商品信息 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define SIZE 100000 #include<string.h> #include<stdlib.h> #include<conio.h> //货物数据结构 struct huowu { int n; //编号 char name[10]; //名称 int Price; //价格 int Maths; //剩余数量 }s[SIZE]; /*录入数据*/ void finput() { FILE *fp; int i, t, x = 1; fp = fopen("fs+", "w"); // printf("已进入重新录入数据界面,之前数据将被清除!\n\n请按提示输入编号\n"); for (i = 0; i < SIZE; i++) { printf(" 第%d个 请输入编号(请与左方编号一致,按回车键进入下一步,当输入i=-1时,完成录入商品信息)\n", x++);//需要逐一手动先输入编号 scanf("%d", &t); i = t; if (i == -1) { fclose(fp); return; } else { i = t - 1; printf("请输入 名称 价格 及添加的 库存 ,用空格间隔开,按回车键继续\n"); scanf("%s %d %d", &s[i].name, &s[i].Price, &s[i].Maths); s[i].n = i + 1; fwrite(&s[i], sizeof(struct huowu), 1, fp); } } fclose(fp); } /*输出数据*/ void flist() { FILE *fp; int i; fp = fopen("fs+", "r"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 列表\n"); printf("-----------------------------------------------------------\n"); printf("序号 名称 价格 库存 \n"); printf("-----------------------------------------------------------\n"); for (i = 0; fread(&s[i], sizeof(struct huowu), 1, fp) == 1; i++) { printf("%d%18s%16d%16d\n", s[i].n, s[i].name, s[i].Price, s[i].Maths); } printf("-----------------------------------------------------------\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); fclose(fp); } /*修改数据*/ void fchange() { FILE *fp; int k; fp = fopen("fs+", "r"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 列表\n"); printf("-----------------------------------------------------------\n"); printf("序号 名称 价格 库存 \n"); printf("-----------------------------------------------------------\n"); for (k = 0; fread(&s[k], sizeof(struct huowu), 1, fp) == 1; k++) { printf("%d%18s%16d%16d\n", s[k].n, s[k].name, s[k].Price, s[k].Maths); } printf("-----------------------------------------------------------\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); int i, n; int flag = 0; printf("请输入要修改商品的序号:"); scanf("%d", &n); for (i = 0; i <= SIZE; i++) if (s[i].n == n) { printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 列表\n"); printf("-----------------------------------------------------------\n"); printf("序号 名称 价格\n"); printf("-----------------------------------------------------------\n"); printf("%d%32s%25d\n", s[i].n, s[i].name, s[i].Price); printf("-----------------------------------------------------------\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); n = i; flag = 1; break; } if (flag == 0) { printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 输入错误!\n"); printf(" 请重新选择!\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); return; } printf("\n\n\n"); fp = fopen("fs+", "r+"); fseek(fp, n * sizeof(struct huowu), 0); printf("请输入新的 名称 价格:"); scanf("%s%d", s[i].name, &s[i].Price); fwrite(&s[i], sizeof(struct huowu), 1, fp); fclose(fp); fp = fopen("fs+", "r"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 列表\n"); printf("-----------------------------------------------------------\n"); printf("序号 名称 价格\n"); printf("-----------------------------------------------------------\n"); for (i = 0; fread(&s[i], sizeof(struct huowu), 1, fp) == 1; i++) { printf("%d%28s%28d\n", s[i].n, s[i].name, s[i].Price); } printf("-----------------------------------------------------------\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); fclose(fp); } /* 排序*/ void ftaxis() { int i, j, n; FILE *fp; struct huowu t; fp = fopen("f.s+", "r"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 列表\n"); printf("-----------------------------------------------------------\n"); printf("序号 名称 价格\n"); printf("-----------------------------------------------------------\n"); for (i = 0; fread(&s[i], sizeof(struct huowu), 1, fp) == 1; i++) { printf("%d%28s%28d\n", s[i].n, s[i].name, s[i].Price); } printf("-----------------------------------------------------------\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); fclose(fp); n = i; for (i = 0; i < n; i++) for (j = i + 1; j < n; j++) if (s[i].Price < s[j].Price) { t = s[i]; s[i] = s[j]; s[j] = t; } fp = fopen("fss+", "w"); printf("\n\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 列表 \n"); printf("-----------------------------------------------------------\n"); printf("序号 名称 价格\n"); printf("-----------------------------------------------------------\n"); for (i = 0; i < n; i++) { fwrite(&s[i], sizeof(struct huowu), 1, fp); printf("%d%28s%28d\n", s[i].n, s[i].name, s[i].Price); } printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); fclose(fp); } //添加库存 int fadd() { FILE *fp; int i, num, n; int flag = 0; printf("请输入要补货 商品 的序号:"); scanf("%d", &n); for (i = 0; i <= SIZE; i++) if (s[i].n == n) { printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 列表\n"); printf("-----------------------------------------------------------\n"); printf("序号 名称 库存\n"); printf("-----------------------------------------------------------\n"); printf("%d%8s%8d\n", s[i].n, s[i].name, s[i].Maths); printf("-----------------------------------------------------------\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); n = i; flag = 1; break; } if (flag == 0) { printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 输入错误!\n"); printf(" 请返回!\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); return 0; } printf("\n\n\n"); fp = fopen("fs+", "r+"); fseek(fp, n * sizeof(struct huowu), 0); printf("请输入添加后此商品总个数"); scanf("%d", &s[i].Maths); fwrite(&s[i], sizeof(struct huowu), 1, fp); fclose(fp); fp = fopen("fs+", "r"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 列表\n"); printf("-----------------------------------------------------------\n"); printf("序号 名称 库存\n"); printf("-----------------------------------------------------------\n"); for (i = 0; fread(&s[i], sizeof(struct huowu), 1, fp) == 1; i++) { printf("%d%8s%8d\n", s[i].n, s[i].name, s[i].Maths); } printf("------------------------补货完成-------------------------\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); fclose(fp); } /*内部操作systeam*/ int neibu() { system("cls"); int n; for (;;) { printf("\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("※ ※\n"); printf("※ 欢迎进入自动售货机(内部) ※\n"); 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("※ ※\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n"); printf("请输入选择项(1-6):"); scanf("%d", &n); printf("\n\n\n\n"); if (n > 0 && n < 8) { switch (n) { case 1:finput(); break; case 2:flist(); break; case 3:fadd(); break; case 4:fchange(); break; case 5:ftaxis(); break; case 6:printf("※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("※ ※\n"); printf("※ 谢谢使用! ※\n"); printf("※ 再见! ※\n"); printf("※ ※\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※\n"); system("pause"); system("cls"); //清空屏幕 return 0;// exit(0); } } else { printf("※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("※ ※\n"); printf("※ 输入错误! ※\n"); printf("※ 请退出! ※\n"); printf("※ ※\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※\n"); break; } } system("cls"); //清空屏幕 } /*购买*/ void buy() { FILE *fp; int i; system("cls"); fp = fopen("fs+", "r"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 列表\n"); printf("-----------------------------------------------------------\n"); printf("序号 名称 价格 库存 \n"); printf("-----------------------------------------------------------\n"); for (i = 0; fread(&s[i], sizeof(struct huowu), 1, fp) == 1; i++) { printf("%d%18s%16d%18d\n", s[i].n, s[i].name, s[i].Price, s[i].Maths); } printf("----------------请输入需要的商品按回车继续-----------------\n"); printf("-----------------------------------------------------------\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); int num, n, B = 1; float money = 0.0, m = 0; int flag = 0; restar: printf("请输入要购买商品的序号:"); scanf("%d", &n); for (i = 0; i <= SIZE; i++) if (s[i].n == n) { printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("-----------------------------------------------------------\n"); printf("序号 名称 价格\n"); printf("-----------------------------------------------------------\n"); printf("%d%30s%26d元\n", s[i].n, s[i].name, s[i].Price); printf("-----------------------------------------------------------\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); n = i; flag = 1; break; } if (flag == 0) { printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf(" 输入错误!\n"); printf(" 请返回!\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); return; } printf("\n\n\n"); fp = fopen("fs+", "r+"); fseek(fp, n * sizeof(struct huowu), 0); s[i].Maths = s[i].Maths - 1; fwrite(&s[i], sizeof(struct huowu), 1, fp); fclose(fp); fp = fopen("fs+", "r"); if (s[i].Maths <= 0) { printf("存货不足,请购买其他商品!\n"); s[i].Maths = 0; goto restar; } else printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("-----------------------------------------------------------\n"); printf(" 请 支 付 %d 元(仅限一元以上面额)\n", s[i].Price); printf("-----------------------------------------------------------\n\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"); while (B) { scanf("%f", &money); m += money; if (m < s[i].Price) { printf("金额不足,请继续支付\n\n"); } if (m == s[i].Price) { printf("付款成功\n\n"); B = 0; break; s[i].Maths = s[i].Maths - 1; } if (m > s[i].Price) { money = m - s[i].Price; printf(" 付款成功,找零%f请您收好\n\n\n\n 欢迎下次使用\n\n\n", money); B = 0; break; s[i].Maths = s[i].Maths - 1; } } fclose(fp); system("pause"); } //主函数 int main() { char sr;//定义电脑接受的字符 system("color F0"); start://起始位置 system("cls"); printf("※※※※※※※※※※※※※※※※※※※※※※※※\n"); printf("※ 欢迎使用自动售货机(初始试用版) ※\n"); printf("※ ※\n"); printf("※ 请输入选项 ※\n"); printf("※ a.用户购买 ※\n"); printf("※ b.系统维护 ※\n"); printf("※ ※\n"); printf("※ 按回车继续 。。。 ※\n"); printf("※※※※※※※※※※※※※※※※※※※※※※※※\n"); scanf("\n%c", &sr); switch (sr) { case 'a': buy(); break; case 'b': neibu(); break; } goto start;//回到起始位置 }
程序截图
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。