当前位置:   article > 正文

图书馆管理系统C语言代码_recipe management system代码

recipe management system代码

图书馆管理系统C语言代码,直接copy可用。本文实例为大家分享C语言实现图书馆管理系统的具体代码,供大家参考。

1、图书馆管理系统C语言代码如下:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define AVAILABLE 0
  5. #define UNAVAILABLE 1
  6. #define MAXNAME 30
  7. #define CLEAR "cls"
  8. typedef struct book{
  9. char *name;
  10. int id;
  11. int count;
  12. int status;
  13. struct book *next;
  14. }Book;
  15. void welcome();
  16. void error(char *); // [异常提醒]
  17. char land(); // [主页面项目]
  18. int usrstudent(); // [学生入口]返回 0表示返回主页 1表示继续执行本函数
  19. int usrmanager(); // [管理员入口]返回 0表示返回主页 1表示继续执行本函数
  20. int viewbook(); // [查看图书]返回打印的图书个数 失败返回-1
  21. int addbook(); // [注册图书]添加图书成功 返回图书id 失败返回-1
  22. int modbook(); // [修改图书]修改图书信息 成功后返回id 失败 -1
  23. int delbook(); // [注销图书]删除成功 返回被删除图书的id 失败返回-1
  24. void printbook(Book *); // [打印图书]
  25. Book *lookup(char *, int); // [搜索图书]
  26. int borrowbook(); // [借阅图书]
  27. int returnbook(); // [归还图书]
  28. Book *head = NULL;
  29. int nbook = 0;
  30. int main(){
  31. welcome();
  32. return 0;
  33. }
  34. void welcome(){
  35. printf("*************************欢迎使用图书管理系统*************************\n");
  36. while(1){
  37. printf("-------------------------------------\n");
  38. printf("请输入项目前编号执行相关操作:\n");
  39. printf("\n[1] 管理员入口\n\n[2] 学生入口\n\n[0] 退出\n\n");
  40. switch(land()){
  41. case '1':
  42. while(1){
  43. if(usrmanager()){
  44. continue;
  45. }else{
  46. break;
  47. }
  48. }
  49. break;
  50. case '2':
  51. while(1){
  52. if(usrstudent()){
  53. continue;
  54. }else{
  55. break;
  56. }
  57. }
  58. break;
  59. case '0':
  60. exit(0);
  61. default:
  62. error("采集项目参数失败");
  63. }
  64. }
  65. }
  66. char land(){
  67. char c, flag;
  68. int i;
  69. while(1){
  70. for(i = 0; (c = getchar()) != '\n'; flag = c, ++i)
  71. ;
  72. if(i == 1){
  73. if(flag == '1' || flag == '2' || flag == '0'){
  74. return flag;
  75. }
  76. }else if(i == 0){
  77. continue;
  78. }
  79. error("[请输入命令: 1 / 2 / 0 选择项目]");
  80. }
  81. return '\0';
  82. }
  83. void error(char *s){
  84. fprintf(stderr, "%s\n", s);
  85. }
  86. char dostudent(){
  87. char c, flag;
  88. int i;
  89. while(1){
  90. for(i = 0; (c = getchar()) != '\n'; flag = c, ++i )
  91. ;
  92. if(i == 1){
  93. if(flag == '1' || flag == '2' || flag == '3' || flag == '0'){
  94. return flag;
  95. }
  96. }else if(i == 0){
  97. continue;
  98. }
  99. error("[请输入命令: 1 / 2 / 3/ 0 选择项目]");
  100. }
  101. }
  102. int usrstudent(){
  103. printf("-------------------------------------\n");
  104. printf("请输入项目前编号执行相关操作:\n\n");
  105. printf("[1] 借阅图书\n[2] 归还图书\n[3] 查看馆存图书\n");
  106. printf("[0] 返回主页\n");
  107. switch(dostudent()){
  108. case '1':
  109. borrowbook();
  110. break;
  111. case '2':
  112. returnbook();
  113. break;
  114. case '3':
  115. viewbook();
  116. break;
  117. case '0':
  118. return 0;
  119. default:
  120. error("采集项目参数失败");
  121. break;
  122. }
  123. return 1;
  124. }
  125. int borrowbook(){
  126. system(CLEAR);
  127. char sname[MAXNAME];
  128. printf("搜索图书:\n");
  129. scanf("%s", sname);
  130. getchar();
  131. Book *bp;
  132. char *namep = NULL;
  133. if((bp = lookup(namep = strdup(sname), 0)) == NULL){
  134. printf("图书 %s 不存在\n", namep);
  135. fflush(stdin);
  136. return -1;
  137. }else{
  138. printbook(bp);
  139. if(! bp->status){
  140. printf("借阅图书: Y N\n");
  141. }else{
  142. printf("图书外借中\n");
  143. return 0;
  144. }
  145. while(1){
  146. char c = '\0';
  147. scanf("%c", &c);
  148. getchar();
  149. if(!(c == 'Y' || c == 'y' || c == 'N' || c == 'n')){
  150. fflush(stdin);
  151. error("指令无效");
  152. continue;
  153. }
  154. if(c == 'Y' || c == 'y'){
  155. --bp->count > -1 ? printf("成功\n") : printf("失败\n");
  156. if(! bp->count){
  157. bp->status = UNAVAILABLE;
  158. }
  159. return bp->id;
  160. }else{
  161. return 0;
  162. }
  163. }
  164. }
  165. return -1;
  166. }
  167. int returnbook(){
  168. system(CLEAR);
  169. char sname[MAXNAME];
  170. printf("归还图书:\n");
  171. scanf("%s", sname);
  172. getchar();
  173. Book *bp;
  174. char *namep;
  175. if((bp = lookup(namep = strdup(sname), 0)) == NULL){
  176. fflush(stdin);
  177. printf("此图书并不是馆内图书\n");
  178. return -1;
  179. }else{
  180. printbook(bp);
  181. printf("归还图书: Y N\n");
  182. while(1){
  183. char c = '\0';
  184. scanf("%c", &c);
  185. getchar();
  186. if(!(c == 'Y' || c == 'y' || c == 'N' || c == 'n')){
  187. fflush(stdin);
  188. error("指令无效");
  189. }else if(c == 'Y' || c == 'y'){
  190. bp->count++ ? : (bp->status = AVAILABLE);
  191. printf("成功\n");
  192. return bp->id;
  193. }else{
  194. return 0;
  195. }
  196. }
  197. }
  198. return -1;
  199. }
  200. char domanager(){
  201. char c, flag;
  202. int i;
  203. while(1){
  204. for(i = 0; (c = getchar()) != '\n'; flag = c, ++i)
  205. ;
  206. if(i == 1){
  207. if(flag == '1' || flag == '2' || flag == '3' || flag == '4' || flag == '0'){
  208. return flag;
  209. }
  210. }else if(i == 0){
  211. continue;
  212. }
  213. error("[请输入命令: 1 / 2 / 3/ 4 / 0 选择项目]");
  214. }
  215. return '\0';
  216. }
  217. int usrmanager(){
  218. printf("-------------------------------------\n");
  219. printf("请输入项目前编号执行相关操作:\n\n");
  220. printf("[1] 查看已存图书\n[2] 注册新图书\n[3] 修改已有图书信息\n[4] 注销现存图书\n");
  221. printf("[0] 返回主页\n");
  222. switch(domanager()){
  223. case '1':
  224. viewbook();
  225. break;
  226. case '2':
  227. addbook();
  228. break;
  229. case '3':
  230. modbook();
  231. break;
  232. case '4':
  233. delbook();
  234. break;
  235. case '0':
  236. return 0;
  237. default:
  238. error("采集项目参数失败");
  239. break;
  240. }
  241. return 1;
  242. }
  243. int viewbook(){
  244. system(CLEAR); ///
  245. Book *bp;
  246. for(bp =head; bp != NULL; bp = bp->next){
  247. printbook(bp);
  248. }
  249. if(nbook){
  250. return nbook;
  251. }else{
  252. printf("图书馆还没有图书哦\n");
  253. return 0;
  254. }
  255. return -1;
  256. }
  257. void printbook(Book *bp){
  258. printf("图书编号:%d\n", bp->id);
  259. printf("图书名:%s\n", bp->name);
  260. printf("图书存数:%d\n", bp->count);
  261. printf("图书状态:%s\n", bp->status ? "不可借" : "可借");
  262. }
  263. int addbook(){
  264. system(CLEAR); ///
  265. char sname[MAXNAME];
  266. int id, count;
  267. char *namep;
  268. while(1){
  269. id = 0;
  270. count = 0;
  271. namep = NULL;
  272. printf("请输入图书名:\n");
  273. scanf("%s", sname);
  274. getchar();
  275. printf("请输入小于1000的图书编号:\n");
  276. scanf("%d", &id);
  277. getchar();
  278. if(!(id > 0 && id < 1000)){
  279. error("输入编号不符合要求");
  280. fflush(stdin);
  281. continue;
  282. }
  283. printf("请输入小于50的图书数量:\n");
  284. scanf("%d", &count);
  285. getchar();
  286. if(!(count > 0 && count < 50)){
  287. error("输入数目不符合要求");
  288. fflush(stdin);
  289. continue;
  290. }
  291. Book *bp;
  292. if((bp = lookup(namep = strdup(sname), id)) == NULL){
  293. bp = (Book *)malloc(sizeof (Book));
  294. if(bp == NULL || (bp->name = namep) == NULL){
  295. error("注册图书失败");
  296. fflush(stdin);
  297. continue;
  298. }
  299. bp->id = id;
  300. bp->count = count;
  301. bp->status = AVAILABLE;
  302. ++nbook;
  303. bp->next = head;
  304. head = bp;
  305. printf("图书 %s 注册成功\n", sname);
  306. return id;
  307. }else{
  308. fflush(stdin);
  309. error("图书名或编号已经被占用");
  310. }
  311. }
  312. return -1;
  313. }
  314. Book *lookup(char *s, int id){
  315. Book *bp;
  316. for(bp = head; bp != NULL; bp = bp->next){
  317. if(id == bp->id || strcmp(s, bp->name) == 0){
  318. return bp;
  319. }
  320. }
  321. return NULL;
  322. }
  323. int modbook(){ // 修改除id之外的信息 因为要修改id 直接删掉后重新添加会更好
  324. system(CLEAR); ///
  325. Book *bp = NULL;
  326. while(1){
  327. int id = 0;
  328. printf("请输入要修改信息的图书编号:\n");
  329. scanf("%d", &id);
  330. getchar();
  331. if(!(id > 0 && id < 1000)){
  332. fflush(stdin);
  333. error("图书编号不符合要求");
  334. continue;
  335. }
  336. if((bp = lookup("", id)) != NULL){
  337. printf("以下为要修改的图书的现有信息:\n");
  338. printbook(bp);
  339. printf("[1] 修改图书名\n[2] 修改图书数量\n[3] 修改图书状态\n[0] 放弃修改\n");
  340. while(1){
  341. int i;
  342. scanf("%d", &i);
  343. getchar();
  344. if(!(i == 1 || i == 2 || i == 3 || i == 0)){
  345. fflush(stdin);
  346. error("输入项目前编号选择相关项目");
  347. continue;
  348. }
  349. switch(i){
  350. case 1:
  351. while(1){
  352. char newname[MAXNAME], *namep;
  353. printf("图书名:\n");
  354. scanf("%s", newname);
  355. getchar();
  356. if((lookup(namep = strdup(newname), 0)) != NULL){
  357. fflush(stdin);
  358. error("图书名已存在");
  359. continue;
  360. }
  361. if((bp->name = namep) != NULL){
  362. printf("修改成功\n");
  363. return id;
  364. }
  365. }
  366. break;
  367. case 2:
  368. while(1){
  369. int bnum;
  370. printf("输入图书数量:\n");
  371. scanf("%d", &bnum);
  372. getchar();
  373. if(!(bnum > 0 || bnum < 1000)){
  374. fflush(stdin);
  375. error("数目不符合要求");
  376. continue;
  377. }
  378. bp->count = bnum;
  379. printf("修改成功\n");
  380. return id;
  381. }
  382. break;
  383. case 3:
  384. while(1){
  385. char c;
  386. int status;
  387. status = bp->status;
  388. status == AVAILABLE ? printf("修改状态为[不可借]: Y N\n") : printf("修改状态为[可借]: Y N\n");
  389. scanf("%c", &c);
  390. getchar();
  391. if(!( c == 'Y' || c == 'y' || c == 'N' || c == 'n')){
  392. fflush(stdin);
  393. error("指令无效");
  394. continue;
  395. }
  396. if(c == 'Y' || c == 'y'){
  397. status == AVAILABLE ? bp->status = UNAVAILABLE : (bp->status = AVAILABLE);
  398. printf("修改成功\n");
  399. return id;
  400. }else{
  401. printf("放弃修改\n");
  402. return 0;
  403. }
  404. }
  405. break;
  406. case 0:
  407. return 0;
  408. default:
  409. error("获取参数失败");
  410. break;
  411. }
  412. }
  413. }else{
  414. printf("没有此图书\n");
  415. return 0;
  416. }
  417. }
  418. return -1;
  419. }
  420. int delbook(){
  421. system(CLEAR); ///
  422. Book *bp, *fbp;
  423. int id = 0;
  424. printf("请输入要注销的图书编号:\n");
  425. scanf("%d", &id);
  426. getchar();
  427. if(!(id > 0 && id < 1000)){
  428. fflush(stdin);
  429. error("图书编号不符合要求");
  430. return -1;
  431. }
  432. for(fbp = bp = head; bp != NULL; fbp = bp, bp = bp->next){
  433. if(bp->id == id){
  434. printbook(bp);
  435. break;
  436. }
  437. }
  438. if(bp != NULL){
  439. while(1){
  440. printf("确定要注销此图书:Y N\n");
  441. char YN;
  442. scanf("%c", &YN);
  443. getchar();
  444. if(!((YN == 'Y' || YN == 'y') || (YN == 'N' || YN == 'n'))){
  445. fflush(stdin);
  446. error("指令无效\n");
  447. continue;
  448. }
  449. if(YN == 'Y' || YN == 'y'){
  450. bp == head ? head = bp->next : (fbp->next = bp->next); free(bp->name); //2018-05-26修改:添加释放name这块内存//bp内存的只是指向name的指针
  451. free(bp); bp = NULL;
  452. printf("图书注销成功\n");
  453. break;
  454. }else{
  455. printf("放弃注销\n");
  456. return 0;
  457. }
  458. }
  459. return id;
  460. }else{
  461. printf("要注销的图书编号不存在\n");
  462. return -1;
  463. }
  464. return -1;
  465. }

2、图书馆管理系统c语言运行效果,按数字可以操作。

 

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

闽ICP备14008679号