当前位置:   article > 正文

用c语言实现仓库管理系统_c语言仓库货物管理系统

c语言仓库货物管理系统

本文使用c语言实现仓库管理系统

新手的练手之作,代码中还有一些不足之处,后续会进一步修改,虚心学习各位大佬的意见

使用结构体数组及文件操作

其中有个账号密码匹配功能借鉴了站内一位大佬的文章“C语言程序设计:图书管理系统(超详细有登录系统,附代码和实验报告)”

界面有点丑陋,后面可能会发一个新的版本,对于一些细节的优化

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <windows.h>
  5. #include <iostream>
  6. #define maxsize 20
  7. #include <conio.h>
  8. using namespace std;
  9. //建立一个仓库管理程序,
  10. //可以按顺序和货物名称查询仓库存储情况,
  11. //也可以增加或删除货物信息、
  12. //实现货物的入库出库,
  13. //要求能用文件保存仓库货品信息。
  14. //增加了采购员信息,用户信息,加入登录功能
  15. void Create();
  16. void Add();
  17. void Agent();
  18. void Buyer();
  19. void Delete();
  20. void name_Inquire();
  21. void time_Inquire();
  22. void Change();
  23. void Inquire();
  24. void DispList();
  25. int choose();
  26. void see();
  27. void timeout();
  28. int match_num();
  29. int Len = 0;
  30. typedef struct Info {//仓库货物信息
  31. char num[5];
  32. char name[10];
  33. int amount;
  34. char buy[20];
  35. char store[10];
  36. } Info;
  37. Info info[10];
  38. char idname[10];
  39. void normalmenu() {
  40. printf("欢迎来到仓库管理系统");
  41. printf(" 1.按照入库顺序查询仓库存储情况 \n");
  42. printf(" 2.按照货物名称查询仓库存储情况 \n");
  43. }
  44. void GMmenu1() {
  45. while (1) {
  46. printf("\n");
  47. printf(" 欢迎来到仓库管理系统(管理员) \n");
  48. printf("****************菜单****************\n");
  49. printf(" \n");
  50. printf(" 1.新建 \n");
  51. printf(" 2.查询仓库存储情况 \n");
  52. printf(" 3.展示货物信息 \n");
  53. printf(" 4.增加货物信息 \n");
  54. printf(" 5.删除货物信息 \n");
  55. printf(" 6.修改货物信息 \n");
  56. printf(" 7.厂商信息 \n");
  57. printf(" 8.采购员信息 \n");
  58. printf(" 9.退出 \n");
  59. printf(" \n");
  60. printf("************************************\n");
  61. printf(" 请选择你想要的功能(序号) \n");
  62. int n;
  63. scanf("%d", &n);
  64. while (n < 1 || n > 9) {
  65. printf("输入指令有误,请重新输入:\n");
  66. scanf("%d", &n);
  67. }
  68. switch (n) {
  69. case 1:
  70. Create();
  71. break;
  72. case 2:
  73. Inquire();
  74. break;
  75. case 3:
  76. DispList();
  77. break;
  78. case 4:
  79. Add();
  80. break;
  81. case 5:
  82. Delete();
  83. break;
  84. case 6:
  85. Change();
  86. break;
  87. case 7:
  88. Agent();
  89. break;
  90. case 8:
  91. Buyer();
  92. break;
  93. case 9:
  94. printf("谢谢您的使用!\n");
  95. exit(0);
  96. }
  97. }
  98. }
  99. void read() {
  100. Len = 0;
  101. FILE *fp1;
  102. fp1 = fopen("data.txt", "r+");
  103. if (fp1 == NULL) {
  104. printf("注意:你的数据库内没有商品信息");
  105. }
  106. while (!feof(fp1)) {
  107. fscanf(fp1, "%s %s %d %s %s\n", &info[Len].num, &info[Len].name, &info[Len].amount, &info[Len].buy, &info[Len].store);
  108. ++Len;
  109. }
  110. fclose(fp1);
  111. }
  112. void write() {
  113. //将结构体数组存入文件中
  114. FILE *fp;
  115. fp = fopen("data.txt", "w+"); //打开文件
  116. for (int i = 0; i < Len; i++) {
  117. fprintf(fp, "%s %s %d %s %s\n", info[i].num, info[i].name, info[i].amount, info[i].buy, info[i].store);
  118. }
  119. fclose(fp); //关闭文件
  120. }
  121. void Create() {
  122. FILE *fp;
  123. char s;
  124. printf("\n如果你之前建立过数据集将会被重置");
  125. printf("\n请再次确认你是否要建立数据集(Y/N)");
  126. fflush(stdout);
  127. scanf("%s", &s);
  128. int num;
  129. if (s == 'n' || s == 'N') {
  130. printf("\n已退出\n");
  131. return;
  132. } else if (s == 'y' || s == 'Y') {
  133. Info info[maxsize];
  134. FILE *fp, *fpp;
  135. printf("有多少行信息\n");
  136. scanf("%d", &num);
  137. for (int i = 0; i < num; i++) {
  138. printf("\n请输入编号");
  139. scanf("%s", &info[i].num);
  140. printf("\n请输入货物的名字");
  141. scanf("%s", &info[i].name);
  142. printf("\n请输入数量");
  143. scanf("%d", &info[i].amount);
  144. printf("\n请输入采购员的名字");
  145. scanf("%s", &info[i].buy);
  146. printf("\n请输入厂商的名字");
  147. scanf("%s", &info[i].store);
  148. }
  149. Len = num;
  150. //将结构体数组存入文件中
  151. fp = fopen("data.txt", "w+"); //打开文件
  152. for (int i = 0; i < Len; i++) {
  153. fprintf(fp, "%s %s %d %s %s\n", info[i].num, info[i].name, info[i].amount, info[i].buy, info[i].store);
  154. }
  155. fclose(fp); //关闭文件
  156. printf("功能已完成,倒计时5秒后将自动退出");
  157. int nnn = 5;
  158. printf("\n");
  159. do {
  160. printf("%d ", nnn);
  161. putchar('\a');
  162. Sleep(1000);
  163. } while (nnn--);
  164. system("cls");
  165. return;
  166. } else {
  167. Create();
  168. }
  169. }
  170. void Inquire() {
  171. int tem;
  172. printf("请选择你想按照什么方式进行查找?(输入号码)");
  173. printf("1.按照入库顺序进行查找");
  174. printf("2.按照物品名称进行查找");
  175. scanf("%d", &tem);
  176. if (tem == 1) {
  177. time_Inquire();
  178. } else if (tem == 2) {
  179. name_Inquire();
  180. } else {
  181. printf("号码输入错误,请重新输入");
  182. }
  183. }
  184. void time_Inquire() {
  185. read();
  186. while (1) {
  187. char a[5];
  188. printf("请输入想要查询货物的编号:\n");
  189. scanf("%s", &a);
  190. for (int i = 0; i < Len; i++) {
  191. if (strcmp(info[i].num, a) == 0) {
  192. printf("编号:%s\n", info[i].num);
  193. printf("名称:%s\n", info[i].name);
  194. printf("数量:%d\n", info[i].amount);
  195. printf("采购员:%s\n", info[i].buy);
  196. printf("厂商:%s\n", info[i].store);
  197. printf("\n");
  198. }
  199. }
  200. printf("还要继续查询吗?(Y/N)\n");
  201. char ap;
  202. fflush(stdin);
  203. scanf("%c", &ap);
  204. if (ap == 'n' || ap == 'N') {
  205. timeout();
  206. break;
  207. } else if (ap == 'y' || ap == 'Y') {
  208. continue;
  209. } else {
  210. printf("输入错误字符将自动退出程序\n");
  211. timeout();
  212. return;
  213. }
  214. }
  215. }
  216. void name_Inquire() {
  217. read();
  218. while (1) {
  219. char check_name[10];
  220. printf("请输入你想要查询货物的名字:");
  221. scanf("%s", &check_name);
  222. for (int i = 0; i < Len; i++) {
  223. if (strcmp(info[i].name, check_name) == 0) {
  224. printf("编号:%s\n", info[i].num);
  225. printf("名称:%s\n", info[i].name);
  226. printf("数量:%d\n", info[i].amount);
  227. printf("采购员:%s\n", info[i].buy);
  228. printf("厂商:%s\n", info[i].store);
  229. printf("\n");
  230. }
  231. }
  232. printf("还要继续查询吗?(Y/N)\n");
  233. char ap;
  234. fflush(stdin);
  235. scanf("%c", &ap);
  236. if (ap == 'n' || ap == 'N') {
  237. timeout();
  238. break;
  239. } else if (ap == 'y' || ap == 'Y') {
  240. continue;
  241. } else {
  242. printf("输入错误字符将自动退出程序\n");
  243. timeout();
  244. return;
  245. }
  246. }
  247. }
  248. void DispList() {
  249. read();
  250. printf("编号 名称 数量 采购员 厂商\n");
  251. for (int i = 0; i < Len; i++) {
  252. printf("%-8s %-8s %-8d %-8s %-8s\n", info[i].num, info[i].name, info[i].amount, info[i].buy, info[i].store);
  253. }
  254. }
  255. void num_DispList() {
  256. read();
  257. printf("序号 编号 名称 数量 采购员 厂商\n");
  258. for (int i = 0; i < Len; i++) {
  259. printf("%-8d% -8s %-8s %-8d %-8s %-8s\n", i, info[i].num, info[i].name, info[i].amount, info[i].buy, info[i].store);
  260. }
  261. }
  262. void Add() {
  263. int addinfo = Len + 1;
  264. FILE *fp;
  265. char i;
  266. system ("cls");
  267. if ((fp = fopen("data.txt", "r")) == NULL) {
  268. fp = fopen("data.txt", "w");
  269. fclose(fp);
  270. }
  271. fp = fopen("data.txt", "a");
  272. printf("\n请按以下格式输入货物信息:\n编号 名称 数量 采购员 厂商");
  273. fprintf(fp, "\n");
  274. for (; i != 27;) { //为了实现输入一次后按esc退出
  275. printf("请输入:\n");
  276. scanf("%s %s %d %s %s", &info[addinfo].num, &info[addinfo].name, &info[addinfo].amount, &info[addinfo].buy,
  277. &info[addinfo].store);
  278. fprintf(fp, "%s %s %d %s %s\n", info[addinfo].num, info[addinfo].name, info[addinfo].amount, info[addinfo].buy,
  279. info[addinfo].store);
  280. printf("继续输入请按回车,结束输入请按Esc\n");
  281. i = getch(); //暂停程序当i接收后继续下一条指令
  282. for (; i != 13 && i != 27;) //保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
  283. i = getch();
  284. }
  285. fclose(fp);
  286. printf("\n保存成功,按任意键返回上一层!");
  287. getch();
  288. return;
  289. }
  290. void Delete() {
  291. system("cls");//清屏函数
  292. int tip, i, j;
  293. char sg;
  294. char id_num[5];
  295. DispList();
  296. printf("请输入您要删除的编号:\n");
  297. scanf("%s", &id_num);
  298. FILE *fp;
  299. int sign = 0;
  300. int tp, zz;
  301. for ( i = 0; i < Len; i++) {
  302. if (strcmp(info[i].num, id_num) == 0) {//有点小问题
  303. ++sign;
  304. printf("编号:%s\n", info[i].num);
  305. printf("名称:%s\n", info[i].name);
  306. printf("数量:%d\n", info[i].amount);
  307. printf("采购员:%s\n", info[i].buy);
  308. printf("厂商:%s\n", info[i].store);
  309. printf("\n请再次确认您是否删除:(Y/N)");
  310. fflush(stdin);
  311. char gchar;
  312. gchar = getch();
  313. zz = i;
  314. if (gchar == 'Y' || gchar == 'y' ) {
  315. for (tp = zz; tp < Len; tp++) {
  316. strcpy(info[tp].num, info[tp + 1].num);
  317. strcpy(info[tp].name, info[tp + 1].name);
  318. info[tp].amount = info[tp + 1].amount;
  319. strcpy(info[tp].buy, info[tp + 1].buy);
  320. strcpy(info[tp].store, info[tp + 1].store);
  321. }
  322. printf("删除成功");
  323. Len--;
  324. write();
  325. timeout();
  326. return;
  327. }
  328. }
  329. }
  330. if (sign == 0) {
  331. printf("\n没有找到该用户");
  332. timeout();
  333. return;
  334. }
  335. }
  336. void select() {//修改中的菜单
  337. printf("\n1:修改编号");
  338. printf("\n2:修改货物名称");
  339. printf("\n3:修改数量");
  340. printf("\n4:修改采购员");
  341. printf("\n5:修改厂商");
  342. printf("\n6:退出");
  343. printf("\n请选择你需要的操作:");
  344. }
  345. int choose() {
  346. int pink;
  347. printf("请选择你要修改的位置的序号:");
  348. scanf("%d", &pink);
  349. return pink - 1;//返回物理位置
  350. }
  351. void Change() {
  352. system("cls");//清屏函数
  353. num_DispList();
  354. int a;
  355. int tap;
  356. select();
  357. scanf("%d", &a);
  358. while (1) {
  359. switch (a) {
  360. case 1: {
  361. read();
  362. tap = choose();
  363. printf("请输入修改后的编号");
  364. scanf("%s", &info[tap].num);
  365. printf("%s", info[tap].num);
  366. printf("修改成功!");
  367. write();
  368. return;
  369. break;
  370. }
  371. case 2: {
  372. read();
  373. tap = choose();
  374. printf("请输入修改后的货物名称");
  375. scanf("%s", &info[tap].name);
  376. printf("%s", info[tap].name);
  377. printf("修改成功!");
  378. write();
  379. return;
  380. break;
  381. }
  382. case 3: {
  383. read();
  384. tap = choose();
  385. printf("请输入修改后的数量");
  386. scanf("%lld", &info[tap].amount);
  387. printf("%lld", info[tap].amount);
  388. printf("修改成功!");
  389. write();
  390. return;
  391. break;
  392. }
  393. case 4: {
  394. read();
  395. tap = choose();
  396. printf("请输入修改后的采购员的名字");
  397. scanf("%d", &info[tap].buy);
  398. printf("%d", info[tap].buy);
  399. printf("修改成功!");
  400. write();
  401. return;
  402. break;
  403. }
  404. case 5: {
  405. read();
  406. tap = choose();
  407. printf("请输入修改后的厂商");
  408. scanf("%d", &info[tap].store);
  409. printf("%d", info[tap].store);
  410. printf("修改成功!");
  411. write();
  412. return;
  413. break;
  414. }
  415. case 6: {
  416. return;
  417. }
  418. default: {
  419. printf("你输入的编号不对\n");
  420. break;
  421. }
  422. }
  423. }
  424. }
  425. void Agent() {
  426. read();
  427. while (1) {
  428. char check_store[10];
  429. printf("请输入想要查询厂商:\n");
  430. scanf("%s", &check_store);
  431. for (int i = 0; i < Len; i++) {
  432. if (strcmp(info[i].store, check_store) == 0) {
  433. printf("编号:%s\n", info[i].num);
  434. printf("名称:%s\n", info[i].name);
  435. printf("数量:%d\n", info[i].amount);
  436. printf("采购员:%s\n", info[i].buy);
  437. printf("厂商:%s\n", info[i].store);
  438. printf("\n");
  439. }
  440. }
  441. printf("还要继续查询吗?(Y/N)\n");
  442. char ap;
  443. fflush(stdin);
  444. scanf("%c", &ap);
  445. if (ap == 'n' || ap == 'N') {
  446. timeout();
  447. break;
  448. } else if (ap == 'y' || ap == 'Y') {
  449. continue;
  450. } else {
  451. printf("输入错误字符将自动退出程序\n");
  452. timeout();
  453. return;
  454. }
  455. }
  456. }
  457. void Buyer() {
  458. read();
  459. while (1) {
  460. char check_buyer[10];
  461. printf("请输入想要查询采购员:\n");
  462. scanf("%s", &check_buyer);
  463. for (int i = 0; i < Len; i++) {
  464. if (strcmp(info[i].buy, check_buyer) == 0) {
  465. printf("编号:%s\n", info[i].num);
  466. printf("名称:%s\n", info[i].name);
  467. printf("数量:%d\n", info[i].amount);
  468. printf("采购员:%s\n", info[i].buy);
  469. printf("厂商:%s\n", info[i].store);
  470. printf("\n");
  471. }
  472. }
  473. printf("还要继续查询吗?(Y/N)\n");
  474. char ap;
  475. fflush(stdin);
  476. scanf("%c", &ap);
  477. if (ap == 'n' || ap == 'N') {
  478. timeout();
  479. break;
  480. } else if (ap == 'y' || ap == 'Y') {
  481. continue;
  482. } else {
  483. printf("输入错误字符将自动退出程序\n");
  484. timeout();
  485. return;
  486. }
  487. }
  488. }
  489. int match(int m, char a[20]) { //匹配数据库中的账号密码
  490. FILE *fp;
  491. int n = 0, i = 0;
  492. int account;
  493. char password[20];
  494. if ((fp = fopen("welcome.txt", "r")) == NULL) { //不存在读者文件
  495. system ("cls");
  496. printf("\n 还未存在用户!请联系最高权限拥有者");
  497. getch();
  498. system("cls");
  499. return 0;
  500. }
  501. for (; !feof(fp);) {
  502. fscanf(fp, "%d %s", &account, password);
  503. if (m == account) {
  504. if (strcmp(a, password) == 0)
  505. return 1;
  506. else {
  507. return -1;
  508. }
  509. }
  510. }
  511. return 0;
  512. }
  513. void GMwelcome() { //输入账户密码的登录函数
  514. int account;
  515. char password[20];
  516. int i = 2, j, k, n;
  517. char hit = 0;
  518. system("cls");
  519. do {
  520. printf("\n请输入账号:\n");
  521. scanf("%d", &account);
  522. printf("确认输入请安回车,重新输入请按ECS");
  523. hit = getch(); //暂停程序当i接收后继续下一条指令
  524. for (; hit != 13 && hit != 27;) { //保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
  525. hit = getch();
  526. }
  527. } while (hit == 27);
  528. printf("\n请输入密码:\n");
  529. scanf("%s", password);
  530. i = match(account, password);
  531. if (i == 1) {
  532. system("cls");
  533. printf("登陆成功!按任意键继续\n");
  534. GMmenu1();
  535. } else {
  536. if (i == -1) {
  537. printf("密码错误!");
  538. getch();
  539. GMwelcome();
  540. }
  541. if (i == 0)
  542. printf("不存在此用户");
  543. getch();
  544. system("cls");
  545. printf("感谢您的使用");
  546. printf("倒计时5秒后将自动退出程序\n");
  547. int nnn = 5;
  548. printf("\n");
  549. do {
  550. printf("%d ", nnn);
  551. putchar('\a');
  552. Sleep(1000);
  553. } while (nnn--);
  554. }
  555. }
  556. void Nomenu() {
  557. while (1) {
  558. int uu = 0;
  559. printf(" 用户你好 \n");
  560. printf(" 欢迎来到仓库管理系统 \n");
  561. printf(" 请选择你想要的功能 \n");
  562. printf("****************菜单****************\n");
  563. printf(" \n");
  564. printf(" \n");
  565. printf(" 1.查询仓库存储情况 \n");
  566. printf(" 2.退出 \n");
  567. printf(" \n");
  568. printf(" \n");
  569. printf("************************************\n");
  570. printf("请输入序号:\n");
  571. scanf("%d", &uu);
  572. switch (uu) {
  573. case 1: {
  574. see();
  575. break;
  576. }
  577. case 2: {
  578. exit(1);
  579. break;
  580. }
  581. default: {
  582. printf("请输入正确的序号\n");
  583. Nomenu();
  584. break;
  585. }
  586. }
  587. }
  588. }
  589. void see() {
  590. read();
  591. int tem = Len + 1;
  592. printf("请输入你想要查询的货物:");
  593. char temp_name[10];
  594. scanf("%s", &temp_name);
  595. printf("\n名称 数量\n");
  596. for (int i = 0; i < tem; i++) {
  597. if (strcmp(info[i].name, temp_name) == 0) {
  598. printf("%s", info[i].name);
  599. printf("%6d\n", info[i].amount);
  600. }
  601. }
  602. timeout();
  603. }
  604. int Nomatch(int m, char a[20]) { //匹配数据库中的账号密码
  605. FILE *fp;
  606. int n = 0, i = 0;
  607. int account;
  608. char password[20];
  609. if ((fp = fopen("Nowelcome.txt", "r")) == NULL) { //不存在读者文件
  610. system ("cls");
  611. printf("\n 还未存在用户!请联系最高权限拥有者");
  612. getch();
  613. system("cls");
  614. return 0;
  615. }
  616. for (; !feof(fp);) {
  617. fscanf(fp, "%d %s", &account, password);
  618. if (m == account) {
  619. if (strcmp(a, password) == 0)
  620. return 1;
  621. else {
  622. return -1;
  623. }
  624. }
  625. }
  626. return 0;
  627. }
  628. void Nowelcome() {
  629. int account;
  630. char password[20];
  631. int i = 2, j, k, n;
  632. char hit = 0;
  633. system("cls");
  634. do {
  635. printf("\n请输入账号:\n");
  636. scanf("%d", &account);
  637. printf("确认输入请按回车,重新输入请按ECS");
  638. hit = getch(); //暂停程序当i接收后继续下一条指令
  639. for (; hit != 13 && hit != 27;) { //保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
  640. hit = getch();
  641. }
  642. } while (hit == 27);
  643. printf("\n请输入密码:\n");
  644. scanf("%s", password);
  645. i = Nomatch(account, password);
  646. if (i == 1) {
  647. printf("登陆成功!按任意键继续");
  648. Nomenu();
  649. } else {
  650. if (i == -1) {
  651. printf("密码错误!");
  652. getch();
  653. Nowelcome();
  654. }
  655. if (i == 0)
  656. printf("不存在此用户");
  657. getch();
  658. system("cls");
  659. printf("感谢您的使用");
  660. printf("倒计时5秒后将自动退出程序\n");
  661. int nnn = 5;
  662. printf("\n");
  663. do {
  664. printf("%d ", nnn);
  665. putchar('\a');
  666. Sleep(1000);
  667. } while (nnn--);
  668. }
  669. }
  670. void Allwelcome() {
  671. printf("请选择登录方式\n");
  672. printf("1、用户登录\n");
  673. printf("2、管理员登录\n");
  674. int t = 0;
  675. scanf("%d", &t);
  676. if (t == 1) {
  677. Nowelcome();
  678. } else if (t == 2) {
  679. GMwelcome();
  680. } else {
  681. system("cls");
  682. printf("出错了!!!请重试\n");
  683. Allwelcome();
  684. }
  685. }
  686. void timeout() {
  687. printf("\n输入任意键结束\n");
  688. getch();
  689. fflush(stdout);
  690. system("cls");
  691. }
  692. int main() {
  693. int n = 0;
  694. Allwelcome();
  695. return 0;
  696. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/170111?site
推荐阅读
相关标签
  

闽ICP备14008679号