c语言借书登记管理系统,借书证信息管理系统,C语言实现

自己实现的如有缺漏欢迎提出

设计内容:

设计一个排序和查找系统。能够实现对给定的一组学生的借书证信息(如:卡号、姓名、系别、班号等)进行排序和查找。

1)按照卡号顺序进行排序;

2)能够实现查找某个系的所有的借书卡号并输出。

设计要求:

(1)建立关于借书证信息结点的结构体;

(2)定义借书证信息的记录并录入基本信息;

(3)写出用某种排序算法(如冒泡排序)按关键字对记录进行排序的算法函数;

(4)对借书证信息的记录按系名建立索引查找结构;

(5)输入某个要查找的系名,用索引查找方法查找并输出该系的所有借书证信息。

是学期末的课程设计,自己弄完觉得还可以,提供给有需要的人做参考。

有图万岁:

efa20a172748f9d141a3a545af954edb.png

下面是代码实现:

1.头文件:(my_head.h)

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #pragma once

2 #define _crt_secure_no_warnings

3 #include

4 #include

5 #include

6

7 //这里改系别总个数

8 #define depratment_number 3

9

10 typedef int once_sort;

11

12 typedef struct card_node {

13

14 once_sort is_sort;

15

16 long long number;

17 char *name;

18 char *department;

19 long long class_number;

20 struct card_node *next_node;

21 struct card_node *same_department_next_node;

22 }cr_node;

23

24

25 cr_node* initialize(cr_node** head);

26 int initialize_sort(cr_node *head);

27 //

28 int print(cr_node* head);

29

30 int print_one(cr_node*node);

31

32 int print_on_same_depart(cr_node *same_depaet_head);

33

34 int print_same_depart(cr_node *index_list[depratment_number], char *str_depratment[depratment_number]);

35

36 //

37 int input(cr_node*head);

38

39 //

40 cr_node * find(cr_node * head, long long number);

41

42 //

43 cr_node* delete_cr_crde(cr_node * head, long long number);

44

45 //

46 cr_node *make_indexes_list(cr_node *head, char _str_depratment[]);

47

48 cr_node *get_indexes_list(cr_node *head, char *department[], cr_node *index_list[depratment_number]);

49

50 //

51 int sort_class_number(cr_node **head);

52 int get_class_sort_list(cr_node *head);

53 int sort_class_link(cr_node **head, int total);

54

55 int sort_crad_number(cr_node **head);

56 int get_crad_number_sort_list(cr_node *head);

57 int sort_card_link(cr_node **head, int total);

view code

2.main函数入口:(source_1.c)

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include"my_head.h"

2

3 int card_number = 0;

4

5 //point menu

6 void print_menu()

7 {

8 printf(" \n");

9 printf(" /-----------------------------------------------/\n");

10 printf(" / *** 借书证管理系统 ******/\n");

11 printf(" / -->选项 : ******/\n");

12 printf(" / *** 1.按卡号排序并输出前后结果 < ******/\n");

13 printf(" / *** 2.差找并输一个系的所有借书卡号 < ******/\n");

14 printf(" / *** 3.录入一个借书证 < ******/\n");

15 printf(" / *** 4.删除一个借书证 < ******/\n");

16 printf(" / *** 5.按关键字(例如 班号)进行排序 < ******/\n");

17 printf(" / *** 6.建立索引表并用其查找 < ******/\n");

18 printf(" / *** 7.退出本程序 < ******/\n");

19 printf(" / *** 8.打印现有的借书证信息 < ******/\n");

20 printf(" / *** 9.惊喜 最好不要选 < ******/\n");

21 printf(" /-----------------------------------------------/\n");

22 printf("\n \a #_# 请输入所要执行的操作 #_#\n");

23 printf("\n (请输入数字 1-8 选择操作)\n"); sleep(500);

24 }

25

26 int main()

27 {

28 system("color d");

29

30 system("title . #借书证信息管理系统# ");

31

32 cr_node* head=null;

33 cr_node* temp_node = null;

34 cr_node *index_list[depratment_number];

35

36 cr_node *sort_list[10];

37 int i = 0;

38

39 char str_find_depart_temp[64];

40

41 long long temp = 0;

42 int i_find_same = 0;

43

44 initialize(&head);

45

46 //添加系别步骤 1.在下方字符串里添加系名 2。在头文件定义里更改系别总个数

47 char *str_depratment[depratment_number] = { "计算机系","外语系","艺术系" };

48

49

50 int operation;

51 int exit_op;

52 operation = 0;

53

54 while (1)

55 {

56 print_menu();

57 operation = 10;

58 printf("\n请输入你要进行的操作 (确认输入时可能有时需两次按下 enter 键): \n");

59

60 scanf("%d",&operation);

61

62 {getchar(); getchar(); }

63

64 switch (operation)

65 {

66 case 1: //排序

67

68 sort_crad_number(&head);

69

70 system("pause");

71 sleep(200);

72 system("cls");

73 break;

74

75 case 2: //查找一个系的全部成员并输出

76

77 get_indexes_list(head, str_depratment, index_list);

78

79 printf("请输入你要查找的系的名称 注: 先有 如下系名记录在系统 \n");

80

81 gets_s(str_find_depart_temp,sizeof(str_find_depart_temp));

82 printf("%s\n", str_find_depart_temp);

83 if ("\\0" == str_find_depart_temp||"" == str_find_depart_temp)

84 {

85 printf("输入的系别有误 请重新输入\n");

86 goto end;

87 }

88

89 {

90 int x=0;

91

92 while (x < depratment_number)

93 {

94 if (strstr(index_list[x]->department, str_find_depart_temp))

95 {

96 print_on_same_depart(index_list[x]);

97 goto end;

98 }

99 ++x;

100 }

101 if (x > depratment_number)

102 {

103 printf("输入的系别有误 请重新输入\n");

104 goto end;

105 }

106 }

107

108

109

110

111

112

113 end: system("pause");

114 sleep(200);

115 system("cls");

116 break;

117

118 case 3: //录入一个

119

120 input(head);

121

122 system("pause");

123 sleep(200);

124 system("cls");

125 break;

126

127 case 4: //删除

128

129 printf("please input card_number : \n");

130 scanf("%lld", &temp);

131

132 head = delete_cr_crde(head, temp);

133

134 system("pause");

135 sleep(200);

136 system("cls");

137 break;

138

139 case 5: //排序

140

141 sort_class_number(&head);

142

143 system("pause");

144 sleep(200);

145 system("cls");

146 break;

147

148 case 6: //建立索引表并用其查找

149

150 get_indexes_list(head, str_depratment,index_list);

151

152 print_same_depart(index_list, str_depratment);

153

154 system("pause");

155 sleep(200);

156 system("cls");

157 break;

158

159 case 7: //exit()

160

161 printf("\a"); //are you want quit ? //warning you soon quit

162 exit_op= messagebox(null, "确认过眼神,是要退出的人 !! ", "挽留一下下可以吗?", mb_yesno);

163 if (6 == exit_op)

164 {

165 exit(-1);

166 }

167 printf("\t 您已取消退出 请继续使用 *_* \n\n");

168

169 system("pause");

170 sleep(200);

171 system("cls");

172 break;

173

174 case 8: //打印现有的

175

176 print(head);

177

178 system("pause");

179

180 sleep(200);

181 system("cls");

182 break;

183 case 9:

184

185 printf("\a people always have choicse。。。。\n");

186 printf("\n but always the wrong choice \n");

187 printf("\n cherish what you have at the moment\n");

188 printf("\n");

189 sleep(2000);

190

191 system("cls");

192

193 while (1)

194 {

195 static int t = 0;

196 if (t == 8)

197 {

198 t = 0;

199 }

200 char str[20];

201 sprintf(str, "color %d%d", t, t + 1);

202 if (0 == t % 2)

203 {

204 system("title . 让你乱点 哈哈哈 ");

205 }

206 else

207 {

208 system("title . 下次记得做个乖宝宝 !!! ");

209 }

210 system(str);

211 printf("%s\n","且行且珍惜");

212 ++t;

213 //sleep(150);

214 }

215

216 system("pause");

217

218 sleep(200);

219 system("cls");

220 break;

221

222 default:

223 //please input select operation number of you

224 printf("\a !!!!请输入 1 - 6 的数字来选择你的操作!!!!!\n");

225 sleep(500);

226 //tips : refresh after on 3 seconds ,again try input

227 printf("\a *_* 提示: 2 秒后刷新 您可再次输入选项 *_* \n");

228

229 sleep(2000);

230 system("cls");

231 break;

232 }

233 }

234 return 0;

235 }

view code

3.删除一个信息:(delete_cr_node.c)

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include"my_head.h"

2

3 extern card_number;

4

5 cr_node* delete_cr_crde(cr_node * head,long long number)

6 {

7 cr_node *t1, *t2;

8 t1 = head;

9 t2 = head;

10 if (number == head->number)

11 {

12 t2 = head;

13 head = head->next_node;

14 free(t2);

15 return head;

16 }

17 while (t1 != null && t1->number != number)

18 {

19 t2 = t1;

20 t1 = t1->next_node;

21 }

22 if (null == t1)

23 {

24 printf("\n **** !!!!!!! key unexistent of in library_card_system !!!!!!! ****\n\n");

25 goto exception;

26 }

27 if (number == t1->number)

28 {

29 t2->next_node = t1->next_node;

30 card_number--;

31 free(t1);

32

33 return head;

34 }

35

36

37

38 exception: return head;

39

40 }

view code

4.查找:(find.c)

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include"my_head.h"

2

3 extern card_number;

4

5 cr_node * find(cr_node * head, long long number)

6 {

7 if (null == head)

8 {

9 return null;

10 }

11 else

12 {

13 while (head->number != number)

14 {

15 head = head->next_node;

16 }

17 if (null == head)

18 {

19 return null;

20 }

21 else

22 {

23 return head;

24 }

25 }

26

27 }

view code

5.获取排序后的顺序:(get_indexes_list.c)

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include "my_head.h"

2 extern card_number;

3 cr_node *make_indexes_list(cr_node *head, char _str_depratment[])

4 {

5 cr_node *p1 = null;

6 cr_node *p2 = head;

7 if (null == head)

8 {

9 printf("输入为空 请检查 \n");

10 return null;

11 }

12 while (head)

13 {

14 if (strstr(head->department, _str_depratment))

15 {

16 p1 = head;

17 p2 = p1;

18 head = head->next_node;

19 break;

20 }

21 else

22 {

23 head = head->next_node;

24 }

25 }

26 while (head)

27 {

28 if (strstr(head->department, _str_depratment))

29 {

30 p2->same_department_next_node = head;

31 p2 = p2->same_department_next_node;

32 head = head->next_node;

33 }

34 else

35 {

36 head = head->next_node;

37 }

38 }

39 if (null == p1)

40 {

41 printf("提示:有未录入的系 如有需要请添加 \n");

42 return null;

43 }

44 p2->same_department_next_node = null;

45 return p1;

46 }

47 cr_node*get_indexes_list(cr_node*head, char*department[],

48 cr_node *index_list[depratment_number])

49 {

50 int i = 0;

51 while (i < depratment_number)

52 {

53 index_list[i] = make_indexes_list(head, department[i]);

54 ++i;

55 }

56 return index_list;

57 }

view code

6.初始化系统中的信息:(initialize.c)//这步可不执行 不影响使用

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include"my_head.h"

2

3 extern card_number;

4

5 cr_node* initialize(cr_node** head)

6 {

7 cr_node *p1=null, *p2 = null, *p3 = null;

8

9 p1 = (cr_node*)malloc(sizeof(cr_node));

10 p2 = (cr_node*)malloc(sizeof(cr_node));

11 p3 = (cr_node*)malloc(sizeof(cr_node));

12

13 p1->name = "张三";

14 p1->number = 1003;

15 p1->class_number = 2003;

16 p1->department = "计算机系";

17 p1->next_node = p2;

18 p1->same_department_next_node = null;

19 p1->is_sort = 0;

20 card_number++;

21

22 p2->name = "王五";

23 p2->number = 1001;

24 p2->class_number = 2002;

25 p2->department = "外语系";

26 p2->next_node = p3;

27 p2->same_department_next_node = null;

28 p2->is_sort = 0;

29 card_number++;

30

31 p3->name = "李四";

32 p3->number = 1002;

33 p3->class_number = 2001;

34 p3->department = "艺术系";

35 p3->next_node = null;

36 p3->same_department_next_node = null;

37 p3->is_sort = 0;

38 card_number++;

39

40 *head = p1;

41 }

view code

7. 初始化链表的顺序:(init_sort.c)//博主的排序实现使用了和往常不一样的方法 有兴趣的可以好好研究哦

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include"my_head.h"

2

3

4 int initialize_sort(cr_node *head)

5 {

6 while (head)

7 {

8 head->is_sort = 0;

9 head = head->next_node;

10 }

11 return 1;

12 }

view code

8.录入一个信息的实现:(input_one.c):

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include"my_head.h"

2

3 extern card_number;

4

5 int input(cr_node *head)

6 {

7 cr_node *p1 = null;

8

9 char str[sizeof(cr_node)];

10

11 static long long number;2

12 char *name = (char *)malloc(10);

13 char *department = (char *)malloc(64);

14 static long long class_number;

15

16 p1 = (cr_node *)malloc(sizeof(cr_node));

17 p1->next_node = null;

18

19 while (head->next_node)

20 {

21 head = head->next_node;

22 }

23

24 getchar();

25

26 printf("请输入需要录入的信息 \n\n(输入格式提示 \

27 例如:[卡号 姓名 系别 班号] \

28 中括号里面的为一次录入,不用写中括号。 )\n\n");

29

30 gets_s(str, sizeof(cr_node));

31

32 sscanf(str,"%lld %s %s %lld",

33 &number, name,

34 department,&class_number);

35

36 p1->number = number;

37 p1->name= name;

38 p1->department = department;

39 p1->class_number = class_number;

40 p1->is_sort = 0;

41 p1->same_department_next_node = null;

42

43 printf("你刚刚的输入是:\n");

44 printf("card_number \tname \tdepartment \tclass_number\n\n\a");

45

46 printf("%lld\t\t%s \t%s \t\t%lld\n\n",

47 p1->number, p1->name,

48 p1->department, p1->class_number);

49

50 head->next_node=p1;

51 card_number++;

52

53 system("pause");

54 return 0;

55 }

view code

9.打印信息的实现: //由于要求打印实现了很多 有兴趣的朋友可以用回调改一改 看起来会好一点

(print_all.c):

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include"my_head.h"

2

3 extern card_number;

4

5 int print(cr_node* head)

6 {

7 printf("当前系统共存储 %d 个借书证信息,所有信息如下:\n\n", card_number);

8 printf("card_number \tname \tdepartment \tclass_number\n\n\a");

9 while (null!=head)

10 {

11 printf(" %lld\t\t%s \t%s \t%lld\n\n",

12 head->number, head->name,

13 head->department, head->class_number);

14 head = head->next_node;

15 }

16 return 0;

17 }

view code

(print_all_same_depart.c):

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include"my_head.h"

2

3 extern card_number;

4

5 int print_same_depart(cr_node *index_list[depratment_number], char *str_depratment[depratment_number])

6 {

7 cr_node *list_head = null;

8

9 int i = 0;

10

11 while (i < depratment_number)

12 {

13 list_head = index_list[i];

14

15

16 if (null == list_head)

17 {

18 printf("-->%s未录入 :\n",str_depratment[i]);

19

20 ++i;

21 break;

22 }

23 printf("-->%s有如下 :\n", str_depratment[i]);

24 printf("ncard_number \tname \tdepartment \tclass_number\n\n\a");

25 while (null != list_head)

26 {

27

28 printf(" %lld\t\t%s \t%s \t\t%lld\n\n",

29 list_head->number, list_head->name,

30 list_head->department, list_head->class_number);

31

32 list_head = list_head->same_department_next_node;

33

34 }

35 ++i;

36 }

37

38

39 return 0;

40 }

view code

(print_on_same_department.c):

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include"my_head.h"

2

3 extern card_number;

4

5 int print_on_same_depart(cr_node *same_depaet_head)

6 {

7 printf("ncard_number \tname \tdepartment \tclass_number\n\n\a");

8 while (null != same_depaet_head)

9 {

10 printf(" %lld\t\t%s \t%s \t\t%lld\n\n",

11 same_depaet_head->number, same_depaet_head->name,

12 same_depaet_head->department, same_depaet_head->class_number);

13 same_depaet_head = same_depaet_head->same_department_next_node;

14 }

15 return 0;

16 }

view code

(print_one.c):

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include"my_head.h"

2

3 extern card_number;

4

5 int print_one(cr_node* head)

6 {

7 printf("card_number \tname \tdepartment \tclass_number\n\n\a");

8

9 printf(" %lld\t\t%s \t%s \t%lld\n\n",

10 head->number, head->name,

11 head->department, head->class_number);

12 return 0;

13 }

view code

10.两个排序的实现:(分别按 班号 卡号 的排序)

(sort_class_number.c):

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include"my_head.h"

2

3 static cr_node **array_save = null;

4

5 int get_class_sort_list(cr_node *head)

6 {

7

8 int total = 0;

9

10 int x_save = 0;

11

12 int flag=0;

13

14 cr_node *temp_total = head;

15

16 cr_node *temp_2 = head;

17

18 cr_node *min_node = null;

19 cr_node *current_node = null;

20

21 while (temp_total)

22 {

23 temp_total = temp_total->next_node;

24 ++total;

25 }

26

27 flag = total;

28

29 array_save = (cr_node **)malloc(sizeof(cr_node*)*total);

30

31 for(int j=0;j

32 {

33 min_node = null;

34 current_node = head;

35 while (!min_node)

36 {

37 if (flag < 0)

38 {

39 goto end;

40 }

41 if (temp_2->is_sort == 0)

42 {

43 min_node = temp_2;

44 }

45 else

46 {

47 temp_2 = temp_2->next_node;

48 }

49 }

50

51

52 for (int i=0; i < total; ++i)

53 {

54

55 if (min_node->class_number > current_node->class_number&&0==current_node->is_sort)

56 {

57 min_node = current_node;

58 current_node = current_node->next_node;

59 }

60 else

61 {

62 current_node = current_node->next_node;

63 }

64 }

65 min_node->is_sort = 1;

66 *(array_save+ x_save)= min_node;

67

68 ++x_save;

69 --flag;

70

71

72 }

73

74

75 end: return total;

76

77

78 }

79

80

81 int sort_class_number(cr_node **head)

82 {

83 printf(" 按班号排序前 : \n");

84 print(*head);

85

86 initialize_sort(*head);

87

88 int total= get_class_sort_list(*head);

89

90 sort_class_link(head, total);

91

92 printf(" 按班号排序后 : \n");

93

94 print(*head);

95 }

96

97

98 int sort_class_link(cr_node **head, int total)

99 {

100 int flag__=0;

101

102 cr_node *p1 = null;

103 cr_node *p2 = *head;

104 cr_node **p3 = null;

105 cr_node **p4 = null;

106

107 p1 = p2;

108

109 while (p1 != null && p2 != null)

110 {

111 p1 = p2;

112 p2 = p1->next_node;

113

114 p1->next_node = null;

115

116 }

117

118 *head = array_save[0];

119

120 p3 = array_save;

121

122

123 while (flag__

124 {

125 //p4 = &(*p3)->next_node;

126

127 (*p3)->next_node = *(p3+1);

128 ++p3;

129 ++flag__;

130 }

131

132

133

134 }

view code

(sort_crad_number.c):

f12d4a9165be0c481992f693fe5165bc.png

45d4990ca000170a06f9b53d87e16a39.png

1 #include"my_head.h"

2

3 static cr_node **array_save = null;

4

5 int get_crad_number_sort_list(cr_node *head)

6 {

7

8 int total = 0;

9

10 int x_save = 0;

11

12 int flag = 0;

13

14 cr_node *temp_total = head;

15

16 cr_node *temp_2 = head;

17

18 cr_node *min_node = null;

19 cr_node *current_node = null;

20

21 while (temp_total)

22 {

23 temp_total = temp_total->next_node;

24 ++total;

25 }

26

27 flag = total;

28

29 array_save = (cr_node **)malloc(sizeof(cr_node*)*total);

30

31 for (int j = 0; j < total; ++j)

32 {

33 min_node = null;

34 current_node = head;

35 while (!min_node)

36 {

37 if (flag < 0)

38 {

39 goto end;

40 }

41 if (temp_2->is_sort == 0)

42 {

43 min_node = temp_2;

44 }

45 else

46 {

47 temp_2 = temp_2->next_node;

48 }

49 }

50

51

52 for (int i = 0; i < total; ++i)

53 {

54

55 if (min_node->number > current_node->number && 0 == current_node->is_sort)

56 {

57 min_node = current_node;

58 current_node = current_node->next_node;

59 }

60 else

61 {

62 current_node = current_node->next_node;

63 }

64 }

65 min_node->is_sort = 1;

66 *(array_save + x_save) = min_node;

67

68 ++x_save;

69 --flag;

70

71

72 }

73

74

75 end: return total;

76

77 }

78

79

80 int sort_card_link(cr_node **head, int total)

81 {

82 int flag__ = 0;

83

84 cr_node *p1 = null;

85 cr_node *p2 = *head;

86 cr_node **p3 = null;

87 cr_node **p4 = null;

88

89 p1 = p2;

90

91 while (p1 != null && p2 != null)

92 {

93 p1 = p2;

94 p2 = p1->next_node;

95

96 p1->next_node = null;

97

98 }

99

100 *head = array_save[0];

101

102 p3 = array_save;

103

104 while (flag__ < total - 1)

105 {

106

107 (*p3)->next_node = *(p3 + 1);

108 ++p3;

109 ++flag__;

110 }

111

112 }

113

114 int sort_crad_number(cr_node **head)

115 {

116 printf(" 按卡号排序前 : \n");

117 print(*head);

118

119 initialize_sort(*head);

120

121 int total = get_crad_number_sort_list(*head);

122

123 sort_card_link(head, total);

124

125 printf(" 按卡号排序后 : \n");

126

127 print(*head);

128 }

view code

结语:有问题欢迎提在下方 ,本人在校学生,时间较为充裕, 有时间会回复的。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值