设计并实现一个简单的图书管理系统
本次实训内容主要在于训练学生的C语言的基本编程能力,通过C语言输入输出、循环语句、子函数设计、数组、结构体等知识点,完成一个简单图书管理系统的设计开发。实现录入图书、删除指定图书、修改指定图书和查询指定图书的基本信息等主要功能。
1.创建图书节点
1. #include<iostream> 2. #include<stdlib.h> 3. #include<string.h> 4. using namespace std; 5. struct Book{ 6. char id[101];// ISBN 7. char name[101];// 书名 8. double price;//价格 9. };
2.构建顺序表
1. typedef struct{ 2. Book *elem;//顺序表首地址 3. int len;//表长 4. }Sqlist;
3.图书信息的展示
1. void display(Sqlist L){ //不需要修改里面的信息 2. //展示表L中所有的图书信息 3. int maxIndex = L.len; 4. for(int i=1;i<=maxIndex;i++){ 5. printf("%s\t%s\t%lf\n",L.elem[i].id , L.elem[i].name , L.elem[i].price);//\n换行 \tTab 6. } 7. }
4.图书信息的查找
1. int findBook(Sqlist L,char id[]){ 2. //在表L 中查找 是否有 ISBN码为id的图书 3. //遍历 表 L,如果出现了L中 图书的id == id 4. int index = 0;//假设不存在 5. int len = L.len; 6. for(int i=1;i<=len;i++){ 7. if(strcmp(L.elem[i].id,id) == 0){//strcmp() 8. index = i;//修正假设 (假设修正法) 9. break; 10. } 11. } 12. return index; 13. }
5.图书信息的插入
1. void insertBook(Sqlist &L,Book t,int x){ 2. //判断x 是否合法 3. int len = L.len;//1--len 4. if(x<1 || x>len){ 5. printf("位置不合法!\n"); 6. }else{ 7. //将len 至 x位置的图书全部向后移动一个位置 8. for(int i=len;i>=x;i--){ 9. L.elem[i+1] = L.elem[i]; 10. } 11. 12. //将图书 t 加入 L的x位置 13. L.elem[x] = t; 14. L.len++; 15. printf("图书插入成功!\n"); 16. } 17. }
6.图书信息的删除
1. void deleteBook(Sqlist &L,int indexT){ 2. int len = L.len;//1--len 3. 4. for(int i=indexT;i<len;i++){ 5. L.elem[i] = L.elem[i+1]; 6. } 7. L.len--; //长度-1 8. 9. }
7.图书信息总览
1. int main(){ 2. int n; 3. //顺序存储结构 4. Sqlist L; 5. L.elem =(Book *)malloc(sizeof(Book)*100); 6. L.len=0; 7. printf("-------------图书录入------------\n"); 8. printf("请输入图书的数目:\n"); 9. scanf("%d",&n); 10. for(int i=1;i<=n;i++){ 11. printf("请输入第 %d 本图书的ISBN码:\n",i); 12. scanf("%s",L.elem[i].id); 13. getchar(); 14. printf("请输入第 %d 本图书的书名:\n",i); 15. scanf("%s",L.elem[i].name); 16. getchar(); 17. printf("请输入第 %d 本图书的价格:\n",i); 18. scanf("%lf",&L.elem[i].price); 19. L.len++; 20. } 21. 22. //展示所有的图书 23. printf("\n-------------图书展示------------\n"); 24. display(L); 25. 26. //图书查找功能 27. printf("\n-------------图书查找------------\n"); 28. printf("请输入要查询图书的ISBN码:\n"); 29. char name[101]; 30. scanf("%s",name); 31. //图书查找函数:返回值如果是0 则表示系统中无此图书,返回值非0 则表示系统中有次图书,返回值代表下标 32. //参数:L name 33. int index = findBook(L,name); 34. if(index==0){ 35. printf("ISBN码为:%s的图书不存在!",name); 36. }else{//图书存在 37. printf("图书存在,要查找的图书信息如下:\n"); 38. printf("%s\t%s\t%lf\n",L.elem[index].id, L.elem[index].name, L.elem[index].price); 39. 40. } 41. 42. //图书插入 43. //提示用户输入图书信息 44. Book t; 45. int x; 46. printf("\n-------------图书插入------------\n"); 47. printf("请输入要插入图书的ISBN码:\n"); 48. scanf("%s",t.id); 49. printf("请输入要插入图书的名称:\n"); 50. scanf("%s",t.name); 51. printf("请输入要插入图书的价格:\n"); 52. scanf("%lf",&t.price); 53. printf("请输入要插入图书的位置(下标1--98):\n"); 54. scanf("%d", &x); 55. //图书信息 整合 到了 t 56. insertBook(L,t,x); 57. 58. 59. //展示所有的图书 60. printf("\n-------------图书展示------------\n"); 61. display(L); 62. 63. 64. //图书删除 65. int indexT; 66. char idT[101]; 67. printf("\n-------------图书删除------------\n"); 68. printf("请输入要删除图书的编码:\n"); 69. scanf("%s",idT); 70. //用户要删除 ISBN码为 idT 的图书 71. indexT = findBook(L,idT);//如果 0 则idT不存在,如果非0则返回的是下标 72. if(indexT!=0){//图书存在 73. printf("图书存在,确定删除请按1\n"); 74. int d; 75. scanf("%d",&d); 76. if(d==1){ 77. //从表L 中删除 下标indexT 78. deleteBook(L,indexT); 79. printf("图书删除成功!\n"); 80. } 81. 82. }else{//==0 83. printf("图书不存在!\n"); 84. } 85. 86. 87. printf("\n-------------图书展示------------\n"); 88. display(L); 89. 90. return 0; 91. }