当前位置:   article > 正文

数据结构(c语言版)基于线性表的图书信息管理_c语言基于线性表的图书信息管理

c语言基于线性表的图书信息管理

      

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<stdio.h>
  3. #include <stdlib.h>
  4. #include<string.h>
  5. #include <algorithm>
  6. using namespace std;//排序函数
  7. #define TURE 1
  8. #define FALSE 0
  9. #define OK 1
  10. #define ERROR 0
  11. #define INFEASIBLE -1
  12. #define OVERFLOW -2
  13. #define LIST_MAXSIZE 1000//定义图表的最大长度
  14. //定义图书表的顺序储存结构
  15. //定义图书信息
  16. typedef struct {
  17. char no[20];//ISBN
  18. char name[50];//书名
  19. float price;//价格
  20. } Book;
  21. //定义顺序储存结构类型
  22. typedef struct {
  23. Book *elem;//储存空间基地址
  24. int length;//当前图书个数
  25. } SqList;
  26. typedef int ElemType;
  27. //初始化一个顺序表
  28. ElemType InitList_SqList(SqList &L) {
  29. L.elem = (Book *) malloc(LIST_MAXSIZE * sizeof(Book));//分配空间
  30. if (!L.elem)//分配失败
  31. {
  32. exit(OVERFLOW);
  33. }
  34. L.length = 0;//空表长度为0
  35. return OK;
  36. }
  37. //顺序表输入
  38. ElemType ListInsert(SqList &L) {
  39. int i = 1;
  40. while (1) {
  41. if (i > LIST_MAXSIZE)//输入图书信息数超过最大值,退出
  42. {
  43. exit(OVERFLOW);
  44. }
  45. scanf("%s %s %f", L.elem[i].no, L.elem[i].name, &L.elem[i].price);//输入图书数据
  46. if (strcmp(L.elem[i].no, "0")==0 && strcmp(L.elem[i].name, "0")==0 && L.elem[i].price == 0) {
  47. break;//输入结束标志0 0 0,表示停止输入
  48. }
  49. i++;
  50. }
  51. L.length = i - 1;
  52. return i - 1;
  53. }
  54. //顺序表输出
  55. ElemType ListOutput(SqList &L) {
  56. for (int i = 1; i <= L.length; i++) {
  57. printf("%s %s %.2f\n", L.elem[i].no, L.elem[i].name, L.elem[i].price);//输出图书信息表
  58. }
  59. return OK;
  60. }
  61. //顺序表修改价格
  62. ElemType SqList_Price(SqList &L) {
  63. float avg = 0;//平均价格
  64. for (int i = 1; i <= L.length; i++) {
  65. avg += L.elem[i].price;//计算所有书的总价格
  66. }
  67. avg /= L.length;//所有书的平均价格=总价/书本数量
  68. for (int i = 1; i <= L.length; i++) {
  69. if (L.elem[i].price >= avg)//高于或等于平均价格的图书价格提高 10%
  70. {
  71. L.elem[i].price *= 1.1;
  72. } else if (L.elem[i].price < avg)//低于平均价格的图书价格提高20%
  73. {
  74. L.elem[i].price *= 1.2;
  75. }
  76. }
  77. printf("%.2f\n", avg);//输出平均价格
  78. return OK;
  79. }
  80. //顺序表找最贵的书
  81. ElemType SqList_Max(SqList &L) {
  82. int n;//图书数目
  83. printf("请输入数据:\n");
  84. scanf("%d", &n);//输入图书数目
  85. InitList_SqList(L); //初始化线性表
  86. L.length = n;//给线性表中的图书数目赋值
  87. if (n < 1 || n > LIST_MAXSIZE)
  88. return OK;
  89. int i = 1;
  90. while (i <= n) {
  91. scanf("%s %s %f", L.elem[i].no, L.elem[i].name, &L.elem[i].price);//输入图书信息表
  92. i++;
  93. }
  94. int maxprice[LIST_MAXSIZE];//最贵图书在线性表中的编号
  95. int len = 0, max = 0;//len:最贵图书的数目 max:最贵图书价格
  96. printf("\n");
  97. printf("--------------------------------------------\n");
  98. printf("\n");
  99. printf("输出的结果为:\n");
  100. for (int i = 1; i <= n; i++)//查找最贵图书并记录其在线性表中的编号
  101. {
  102. if (L.elem[i].price > max)//找到更贵的图书
  103. {
  104. len = 1;//更贵图书的数目记为1
  105. maxprice[len] = i;//记录更贵图书在线性表中的编号
  106. max = L.elem[i].price;//修改最贵图书价格
  107. } else if (max == L.elem[i].price)//找到下一本最贵图书
  108. {
  109. len++;//最贵图书的数目加1
  110. maxprice[len] = i;//记录更贵图书在线性表中的编号
  111. }
  112. }
  113. printf("%d\n", len);//输出最贵图书的数目
  114. for (int i = 1; i <= len; i++)//输出最贵图书的信息
  115. {
  116. int j;
  117. j = maxprice[i];
  118. printf("%s %s %.2f\n", L.elem[j].no, L.elem[j].name, L.elem[j].price);//根据编号输出最贵图书的信息
  119. }
  120. return OK;
  121. //也可以采用顺序表删除
  122. }
  123. //顺序表新书入库
  124. ElemType SqList_Enter(SqList &L) {
  125. int n, j, i;
  126. Book in_b;
  127. printf("请输入数据\n");
  128. scanf("%d", &n);
  129. L.length = n;
  130. for (j = 1; j <= n+1; j++) {
  131. scanf("%s %s %f", &L.elem[j].no, &L.elem[j].name, &L.elem[j].price);//输入图书信息表
  132. if (strcmp(L.elem[i].no, "0")==0 && strcmp(L.elem[i].name, "0")==0 && L.elem[i].price == 0) {
  133. break;}
  134. }
  135. /*for (j = 1; j <= n; j++) {
  136. scanf("%s %s %f", L.elem[j].no, L.elem[j].name, &L.elem[j].price);
  137. }*/
  138. scanf("%d", &i);
  139. if ((i < 1) || (i > L.length + 1) || (i == LIST_MAXSIZE)) {
  140. printf("\n");
  141. printf("--------------------------------------------\n");
  142. printf("\n");
  143. printf("抱歉,入库位置非法!\n");//i值不合法
  144. return ERROR;
  145. } else {
  146. scanf("%s %s %f", &in_b.no, &in_b.name, &in_b.price);
  147. printf("\n");
  148. printf("--------------------------------------------\n");
  149. printf("\n");
  150. printf("输出的结果为:\n");
  151. for (j = L.length; j >= i; j--) {
  152. L.elem[j + 1] = L.elem[j];//插入位置及之后的元素右移
  153. }
  154. L.elem[i] = in_b;//将新元素e放入第i个位置
  155. ++L.length;//表长加1
  156. printf("%d\n",L.length);
  157. for (j = 1; j <= L.length; j++) {
  158. printf("%s %s %.2f\n", L.elem[j].no, L.elem[j].name, L.elem[j].price);//输出图书信息表
  159. }
  160. return OK;
  161. }
  162. }
  163. //顺序表旧书出库
  164. ElemType SqList_Output(SqList &L) {
  165. int n, j, i;
  166. printf("请输入数据\n");
  167. scanf("%d", &n);
  168. L.length = n;
  169. for (j = 1; j <= n+1; j++) {
  170. scanf("%s %s %f", &L.elem[j].no, &L.elem[j].name, &L.elem[j].price);//输入图书信息表
  171. if (strcmp(L.elem[i].no, "0")==0 && strcmp(L.elem[i].name, "0")==0 && L.elem[i].price == 0) {
  172. break;}
  173. }
  174. scanf("%d", &i);
  175. if (( i< 1) || (i > L.length)) {
  176. printf("\n");
  177. printf("--------------------------------------------\n");
  178. printf("\n");
  179. printf("抱歉,出库位置非法!\n");//i值不合法
  180. return ERROR;
  181. } else {
  182. printf("\n");
  183. printf("--------------------------------------------\n");
  184. printf("\n");
  185. printf("输出的结果为:\n");
  186. for (j = i + 1; j <= n; j++) {
  187. L.elem[j - 1] = L.elem[j];//删除位置及之后的元素左移
  188. }
  189. --L.length;//表长减1
  190. printf("%d\n",L.length);
  191. for (j = 1; j <= L.length; j++) {
  192. printf("%s %s %.2f\n", L.elem[j].no, L.elem[j].name, L.elem[j].price);//输出图书信息表
  193. }
  194. return OK;
  195. }
  196. }
  197. int main() {
  198. int a;
  199. printf("问题如下:\n");
  200. printf("1、基于顺序表存储结构的图书信息表的创建和输出?\n");
  201. printf("2、基于顺序表存储结构的图书信息表的修改?\n");
  202. printf("3、基于顺序表存储结构的图书信息表的最贵图书的查找?\n");
  203. printf("4、基于顺序表存储结构的图书信息表的新图书的入库?\n");
  204. printf("5、基于顺序表存储结构的图书信息表的旧图书的出库?\n");
  205. printf("请输入你想查看的问题(输入数字):\n");
  206. scanf("%d", &a);
  207. if (a > 0 && a < 11) {//顺序表
  208. switch (a) {
  209. case 1: {//顺序表的创建和输出
  210. SqList L;
  211. InitList_SqList(L);
  212. printf("请输入数据:\n");
  213. int i;
  214. i = ListInsert(L);
  215. printf("\n");
  216. printf("--------------------------------------------\n");
  217. printf("\n");
  218. printf("输出的结果为:\n");
  219. printf("%d\n", i);
  220. ListOutput(L);
  221. break;
  222. }
  223. case 2: {//顺序表修改价格
  224. SqList L;
  225. InitList_SqList(L);
  226. printf("请输入数据:\n");
  227. ListInsert(L);
  228. printf("\n");
  229. printf("--------------------------------------------\n");
  230. printf("\n");
  231. printf("输出的结果为:\n");
  232. SqList_Price(L);
  233. ListOutput(L);
  234. break;
  235. }
  236. case 3: {//找出最贵的书
  237. SqList L;
  238. SqList_Max(L);
  239. break;
  240. }
  241. case 4: {//新图书的入库
  242. SqList L;
  243. InitList_SqList(L);
  244. SqList_Enter(L);
  245. break;
  246. }
  247. case 5: {//旧书出库
  248. SqList L;
  249. InitList_SqList(L);
  250. SqList_Output(L);
  251. break;
  252. }
  253. }
  254. }
  255. system("pause");
  256. return 0;
  257. }

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

闽ICP备14008679号