国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++利用鏈表實現圖書信息管理系統

C++利用鏈表實現圖書信息管理系統

2022-03-01 14:58noobcz C/C++

這篇文章主要為大家詳細介紹了C++利用鏈表實現圖書信息管理系統,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

C++利用鏈表實現一個簡單的圖書信息管理系統,供大家參考,具體內容如下

(1)圖書信息包括ISBN號、書名、作者名、價格和數量等;
(2)系統的主要功能包括:圖書信息的創建、輸出圖書信息、查詢圖書信息、增加圖書信息、刪除圖書信息。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
#include <stdio.h>
#include  <stdlib.h>
#include <string.h>
 
//創建結構體及其成員
typedef struct Node {
    int num;//編號
    char name[20];//書名
    char author[20];//作者
    int isexsit;//數量
    float price;//價格
    struct Node *next;//指針域
} S;//結構體定義為S
//各函數定義
void choose();
 
void menu(); //菜單函數
S *create();//創建鏈表函數
void print(S *);//輸出鏈表函數
void pop_sort(S *);//排序
void insert(S *);//插入節點函數
void del(S *);//刪除節點函數
void search1(S *);//書名查找節點函數
void search2(S *);//作者查找節點函數
void search3(S *);//編號查找
void mod(S *);//修改圖書信息
//主函數
int main() {
    choose();
}
 
void choose() {
    S *head;
    int n, a = 1;//n用來控制選擇操作類型,a控制循環,以-1終止
    while (a > 0) {
        menu();//顯示菜單
        printf("選擇你想使用的功能:");
        scanf("%d", &n);//選擇操作
        switch (n)//各操作數字對應菜單數字,通過n確定操作類型
        {
            case 1://創建
                head = create();
                break;
            case 2://輸出
                printf("圖書信息為(按價格排序后)\n");
                pop_sort(head);
                printf("編號\t書名\t作者\t數量\t價格\n");
                print(head);
                break;
            case 3://插入
                insert(head);
                printf("插入后\n");
                printf("編號\t書名\t作者\t數量\t價格\n");
                print(head);
                break;
            case 4://刪除
                del(head);
                printf("刪除后\n");
                printf("編號\t書名\t作者\t數量\t價格\n");
                print(head);
                break;
            case 5://書名查找
                search1(head);
                break;
            case 6://作者查找
                search2(head);
                break;
            case 7://編號查找
                search3(head);
                break;
            case 8://修改
                mod(head);
                pop_sort(head);
                printf("圖書信息為\n");
                printf("編號\t書名\t作者\t數量\t價格\n");
                print(head);
                break;
            default:
                a = -1;//跳出循環條件
                break;
        }
    }
}
 
//菜單模塊直接顯示
void menu() {
    printf("\n\n");
    printf("\t\t     歡迎使用圖書管理系統\n");
    printf("\t\t|----------SCORE-----------|\n");
    printf("\t\t|\t1.創建圖書           |\n");
    printf("\t\t|\t2.展示圖書信息        |\n");
    printf("\t\t|\t3.添加圖書信息        |\n");
    printf("\t\t|\t4.刪除圖書           |\n");
    printf("\t\t|\t5.按圖書名搜索        |\n");
    printf("\t\t|\t6.按作者名搜索        |\n");
    printf("\t\t|\t7.按圖書編號搜索      |\n");
    printf("\t\t|\t8.修改圖書信息        |\n");
    printf("\t\t|\t9.退出程序           |\n");
    printf("\t\t|--------------------------|\n");
    printf("\t\t\tchoice(1-9):\n");
}
 
//創建鏈表模塊
S *create() {
    S *head, *p, *q;//定義指針
    int i;
    head = (S *) malloc(sizeof(S));//頭節點開辟空間
    head->next = NULL;//置空頭節點的指針域
    q = head;//q指針記錄頭節點的地址
    p = head->next;//p指針記錄頭節點的指針域的地址
    printf("請輸入圖書編號,圖書名,作者,圖書數量,價格,最后輸入0結束\n");
    int num;
    scanf("%d", &num);
    while (num != 0)//輸入書籍編號輸入為零停止循環
    {
        p = (S *) malloc(sizeof(S));//p指針開辟空間
        //輸入各成員
        p->num = num;
        scanf("%s %s %d %f", p->name, p->author, &p->isexsit, &p->price);
        p->next = NULL;//置空p節點的指針域
        q->next = p;//p,q節點連接
        q = p;//q指針后移
        printf("請輸入圖書編號,圖書名,作者,圖書數量,價格,最后輸入0結束\n");
        scanf("%d", &num);
    }
    return head;//返回鏈表的起始地址
}
 
//插入節點模塊(可多個插入)
void insert(S *head) {
    int i, num, flag = 1;//flag實現判斷指針是否到達最后一個節點
    S *p, *q, *r; //定義指針便于插入操作
    printf("請輸入一本圖書的信息:\n");
    printf("請輸入圖書的編號,輸入0結束\n");
    scanf("%d", &num);
    while (num != 0)//輸入編號不為零時循環,以零終止,可實現多個插入
    {
        r = (S *) malloc(sizeof(S));//為r開辟空間
        r->next = NULL;//置空r的指針域
        r->num = num;
        printf("請輸入圖書名,作者,圖書數量,圖書價格\n");
        scanf("%s %s %d %f", r->name, r->author, &r->isexsit, &r->price);
        q = head;//q指針記錄頭節點的地址
        p = head->next;//p指針記錄頭節點的指針域的地址
        while (q->next != NULL && p->price < r->price)//循環條件:當q->next不為空,以及按價格排序插入
        {
            p = p->next;//p指針后移
            q = q->next;//q指針后移
            if (q->next == NULL)//這個判斷防止q->next為空時,在執行循環是出現野指針使程序出錯
            {
                p = NULL;//防止出現野指針p
                q->next = r;//連接節點
                r->next = NULL;//置空r指針域
                flag = 0;//到達最后一個節點更改flag
                break;
            }
        }
        if (flag)//判斷是否到達最后一個節點,為真執行該操作
        {
            r->next = p;
            q->next = r;
            //實現將r節點插入鏈表
        }
        printf("請輸入圖書編號,輸入0結束\n");
        scanf("%d", &num);
    }
}
 
//刪除節點模塊
void del(S *head) {
    S *p, *q;//定義指針
    int b;//用于輸入編號查找刪除
    p = head;//p記錄頭節點的地址
    q = head->next;//q記錄頭節點的指針域的地址
    printf("請輸入你想要刪除的圖書編號:");
    //輸入編號
    scanf("%d", &b);
    while (q != NULL)//q不為空時執行循環
    {
        if (q->num == b)//判斷是否找到輸入的編號
            //為真時
        {
            p->next = q->next;//斷開q節點
            free(q);//釋放q節點neicun
            q = NULL; //置空q指針防止出現野指針
        } else {
            //判斷為假時
            p = p->next;//p指針后移
            q = q->next;//q指針后移
        }
    }
    if (p == NULL)//當查找到最后一個節點還未查到要刪除的編號時,輸出輸入錯誤
        printf("輸入錯誤\n");
}
 
//書名查找模塊
void search1(S *head) {
    S *p;//定義指針
    char name1[20];//定義name1用于輸入查找書名
    printf("請輸入你要搜素的書名:");
    //輸入查找書名
    scanf("%s", name1);
    p = head->next;
    while (p != NULL) {
        if (strcmp(p->name, name1) == 0)//判斷是否找到書籍
        {
            //為真時,輸出信息
            printf("書籍信息\n");
            printf("編號\t書名\t作者\t數量\t價格\n");
            printf("%d\t%s\t%s\t%d\t%.2f\n", p->num, p->name, p->author, p->isexsit, p->price);
            break;
        } else
            //為假時
            p = p->next;//指針后移
    }
    if (p == NULL)//查找到最后一個節點還未查到要的編號時,輸出輸入錯誤
        printf("輸入錯誤\n");
}
 
//作者查找模塊
void search2(S *head) {
    S *p;//定義指針
    char name2[20];//定義name2用于輸入查找書籍
    printf("輸入你想要查詢的作者:");
    //輸入查找作者
    scanf("%s", name2);
    p = head->next;
    while (p != NULL) {
        if (strcmp(p->author, name2) == 0)//判斷是否找到書籍
        {
            //為真時,輸出信息
            printf("書籍信息\n");
            printf("編號\t書名\t作者\t數量\t價格\n");
            printf("%d\t%s\t%s\t%d\t%.2f\n", p->num, p->name, p->author, p->isexsit, p->price);
            break;
        } else
            //為假時
            p = p->next;//指針后移
    }
    if (p == NULL)//查找到最后一個節點還未查到要的編號時,輸出輸入錯誤
        printf("輸入錯誤\n");
}
 
//編號查找
void search3(S *head) {
    S *p;//定義指針
    int num1;//定義num1用于輸入查找書籍
    printf("請輸入你要搜索的圖書編號:");
    //輸入查找編號
    scanf("%d", &num1);
    p = head->next;
    while (p != NULL) {
        if (p->num == num1)//判斷是否找到書籍
        {
            //為真時,輸出信息
            printf("書籍信息\n");
            printf("編號\t書名\t作者\t數量\t價格\n");
            printf("%d\t%s\t%s\t%d\t%.2f\n", p->num, p->name, p->author, p->isexsit, p->price);
            break;
        } else
            //為假時
            p = p->next;//指針后移
    }
    if (p == NULL)//查找到最后一個節點還未查到要的編號時,輸出ERROR INPUT
        printf("輸入錯誤\n");
}
 
//修改信息模塊
void mod(S *head) {
    S *p;//定義指針
    int num1, num2, isexsit1;//定義num1用于輸入查找書籍修改信息,num2用于修改
    char name1[20], author1[20];
    float price1;
    printf("請輸入你要修改的圖書編號:");
    //輸入要修改的圖書編號
    scanf("%d", &num1);
    p = head->next;
    while (p != NULL) {
        if (p->num == num1)//判斷是否找到書籍
        {
            printf("請再次輸入 圖書編號,書名,作者,圖書數量 ,價格\n");
            //為真時,重輸圖書信息
            scanf("%d %s %s %d %f", &num2, name1, author1, &isexsit1, &price1);
            p->num = num2;
            strcpy(p->name, name1);
            strcpy(p->author, author1);
            p->isexsit = isexsit1;
            p->price = price1;
            break;
        } else
            //為假時
            p = p->next;//指針后移
    }
    if (p == NULL)//查找到最后一個節點還未查到要的編號時,輸出輸入錯誤
        printf("輸入錯誤\n");
}
 
void pop_sort(S *head)   //鏈表冒泡排序
{
    //排序中沒有修改頭節點指針值,只是修改指針內容head->next的值
    S *pre, *p, *tail, *temp;
    tail = NULL;
    pre = head;
    while ((head->next->next) != tail)//(head->next)!=tail同樣適用 ,多執行最后一個步比較
    {
        p = head->next;
        pre = head;
        while (p->next != tail) {
            if ((p->price) > (p->next->price)) {
                pre->next = p->next; //交換節點方法
                temp = p->next->next;
                p->next->next = p;
                p->next = temp;
                p = pre->next;  //p回退一個節點
            }
            p = p->next;  //p再前進一個節點
            pre = pre->next;
        }
        tail = p;
    }
}
 
//輸出鏈表模塊
void print(S *head) {
    int i;
    S *p = head->next;
    while (p)//當p不為空的時候執行
    {
        printf("%d\t%s\t%s\t%d\t%.2f\n", p->num, p->name, p->author, p->isexsit, p->price);
        printf("\n");
        p = p->next;//指針后移
    }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/weixin_43896463/article/details/109043796

延伸 · 閱讀

精彩推薦
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
主站蜘蛛池模板: 久久久www | 永久看片| 欧美一级二级三级视频 | 日韩免费在线 | 日韩在线视频一区 | 天天干天天射天天操 | 日韩电影二区 | 欧美综合在线观看 | 亚洲无吗电影 | 成人做爰69片免费 | 欧美日韩中文在线观看 | 精品国产一区二区三区久久久蜜月 | 在线观看91视频 | 综合久久99 | 久久国产精品视频 | 日韩精品在线观看视频 | 人人澡人人透人人爽 | 婷婷久久综合 | 天天插狠狠插 | 亚洲福利一区二区 | 日韩有码在线观看 | 在线观看免费黄色小视频 | 国产高清免费视频 | 最新国产在线 | jav成人av免费播放 | 亚洲 在线 | 97精品超碰一区二区三区 | 岛国免费| 久久精品国产一区二区三区不卡 | 国产成人精品一区二区三区四区 | 亚洲 中文 欧美 日韩 在线观看 | 色av综合 | 成人欧美一区二区三区在线播放 | 欧美大片黄 | 亚洲视频在线播放 | 亚洲视频一区 | 国产精品网站在线观看 | 亚洲成av人片在线观看 | 亚洲美女性视频 | 日韩午夜| 欧洲一区 |