服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言图书管理系统实验

C语言图书管理系统实验

2022-10-18 12:02王跃坤 C/C++

这篇文章主要为大家详细介绍了C语言图书管理系统实验,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实验为大家分享了C语言图书管理系统的具体代码,供大家参考,具体内容如下

C语言图书管理系统实验

实验要求:

1、图书信息:包括ISBN、书名、主编、出版社、定价

2、功能:

(1)插入:若表中不存在新图书信息(ISBN不同),则插入(表尾)新图书信息。
(2)删除:按ISBN删除
(3)查找:按ISBN查找
(4)修改:按ISBN查找,然后修改各个属性
(5)排序:按ISBN排序
(6)计数:输出图书信息的个数
(7)导入:从TXT文件中读取已有图书信息(不同的属性之间用tab键隔开)
(8)保存:将表中现有信息保存到txt文件中
(9)打印:在屏幕上显示所有图书信息

3、扩展功能(选做):

(1)增加按书名、主编、出版社进行查找
(2)增加按书名、主编、出版社、定价排序

4、界面要求:简单的人机交互界面

?
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
   //头文件 
   
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define LIST_INIT_SIZE 50
#define LISTINCREMENT 10
   //宏定义,即定义常量 
   
typedef int status;
typedef struct {
    char ISBN[15];
    char bookname[30];
    char writername[10];
    char publisher[20];
    float price;
} ElemType;
typedef struct {
    ElemType *elem;
    int length;
    int listsize;    
} SqList; 
    //定义结构体类型,即  typedef 类型  类型名 
    
status  InitList_Sq(SqList &L)     
{   //构造一个空的线性表L。
    L.elem=(ElemType *)    malloc(LIST_INIT_SIZE*sizeof(ElemType));
    //申请初始化长度的内存 
    if(!L.elem){
    //如果L的序列非空 
        exit(OVERFLOW);    
        //说明L被重定义了,抛出溢出 
    }
    L.length=0;
    //默认L内有0个元素    
    L.listsize=LIST_INIT_SIZE; 
    //默认L的容量为初始化长度 
    return OK;
 
int LocateElem_Sq(SqList L,char ISBN[])
{    //在顺序表L中遍历查找第1个值与e.ISBN相等的元素的位序,若找到,返回其位序,否则返回0; 
    for(int i=0;i<L.length;i++){
        if(strcmp(ISBN,L.elem[i].ISBN)==0){
            return i+1;
        }
    }
    return 0;
}
 
status ListInsert_Sq(SqList &L,ElemType e)
{//元素e插入表尾
    ElemType *newbase;
    if(LocateElem_Sq(L,e.ISBN)){
        return ERROR;
    }
    if(L.length>=L.listsize) {
        newbase =(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
        if(!newbase){
            exit(OVERFLOW);
        }
        L.elem=newbase;
        L.listsize+=LISTINCREMENT;
    }
    L.elem[L.length]=e;
    L.length++;
    return OK;
}
 
status ListDelete_Sq(SqList &L,char ISBN[] ,ElemType &e)
{   //删除L中ISBN的元素,并返回删除元素; 
    int i,j;
    if((i=LocateElem_Sq(L,ISBN))==0){
        return ERROR;
    }
    
    e=L.elem[i-1];
    for(j=i;j<L.length;j++){
        L.elem[j-1]=L.elem[j];
    }
    L.length--;
    return OK;
}
 
status SetElem_Sq(SqList &L,int i,ElemType e)
{   //修改在i的位置的元素 
    if(i<1||i>L.length){
        return ERROR;
    }
    L.elem[i-1]=e;
    return OK;
}
 
void sort_ISBN(SqList &L)
{    //对表中所有元素进行排序; 
    int i,j,k;
    ElemType e;
    for(i=0;i<L.length-1;i++){
        k=i;
        for(j=i+1;j<L.length;j++){
            if(strcmp(L.elem[k].ISBN,L.elem[j].ISBN)>0){
                k=j;
            }
        }
        if(k!=i){
            e=L.elem[i];
            L.elem[i]=L.elem[k];
            L.elem[k]=e;
        }    
    }
 
void print(SqList L)
{    //打印出所有元素
    int i;
    printf("\n图书信息为:\n");
    for(i=0;i<L.length;i++){
        printf("%-15s%-30s%-10s%-20s%-6.2f\n",L.elem[i].ISBN,L.elem[i].bookname,L.elem[i].writername,L.elem[i].publisher,L.elem[i].price); 
    }    
}
 
void import(SqList &L,char *filename)
{    //从文件中导入信息 
    FILE *fp;
    int i;
    char ISBN[15],bookname[30],writername[10],publisher[20];
    float price;
    if((fp=fopen(filename,"r"))==NULL){
        printf("文件不存在!\n");
        return ;
    }
    i=0;
    while(!feof(fp)){
        fscanf(fp,"%s%s%s%s%f",ISBN,bookname,writername,publisher,&price);
        strcpy(L.elem[i].ISBN,ISBN);
        strcpy(L.elem[i].bookname,bookname);
        strcpy(L.elem[i].writername,writername);
        strcpy(L.elem[i].publisher,publisher);
        L.elem[i].price=price;
        i++;
    }
    L.length=i;
    fclose(fp);
}
 
void save(SqList L,char *filename)
{      //把信息保存到文件 
    FILE *fp;
    int i;
    if((fp=fopen(filename,"w"))==NULL){
        printf("文件不存在!\n");
        return ;
    
    for(i=0;i<L.length;i++){
        fprintf(fp,"%-15s\t%-30s\t%-10s\t%-20s\t%-6.2f\n",L.elem[i].ISBN,L.elem[i].bookname,L.elem[i].writername,L.elem[i].publisher,L.elem[i].price);
    }
    fclose(fp);
 
 
 
int main(){
    int ch;
    SqList L;
    char ISBN[15],filename[30];
    int i;
    ElemType e;
    InitList_Sq(L);
    printf("1. 插入   2. 删除   3. 查找   4. 修改元素   5. 按ISBN排序元素   6. 输出   7. 导入   8. 保存   9. 退出\n");
    printf("请选择:");
    scanf("%d",&ch);
    while(ch!=9){
        switch(ch){
        case 1:    printf("请输入要增加的元素");
                scanf("%s%s%s%s%f",e.ISBN,e.bookname,e.writername,e.publisher,&e.price); 
                if(ListInsert_Sq(L,e)==OK){
                    printf("插入成功!当前信息为:\n");
                    print(L);
                }
                else {
                    printf("表中已存在该图书!\n");
                
                break;
        case 2:    printf("请输入删除的图书ISBN:");
                scanf("%s",ISBN);
                if(ListDelete_Sq(L,ISBN,e)==OK)
                {
                    printf("删除成功!被删图书为%s\t%s\t%s\t%s\t%.2f\n",e.ISBN,e.bookname,e.writername,e.publisher,e.price);
                    print(L);
                }
                else
                    printf("该图书不存在!\n");
                break;
        case 3:    printf("请输入要查找的图书ISBN:");
                scanf("%s",&ISBN);
                i=LocateElem_Sq(L,ISBN);
                if(i!=0)
                {
                    printf("该图书为%s\t%s\t%s\t%s\t%.2f\n",L.elem[i-1].ISBN,L.elem[i-1].bookname,L.elem[i-1].writername,L.elem[i-1].publisher,L.elem[i-1].price);
                }
                else
                    printf("该图书不存在!\n");
                break;
        case 4: printf("请输入要修改的图书ISBN:");
                scanf("%s",&ISBN);
                i=LocateElem_Sq(L,ISBN);
                if(i==0){
                    printf("该图书不存在!\n");
                }    
                else{
                    printf("请输入图书的ISBN,书名,主编,出版商和定价");
                    scanf("%s%s%s%s%f",e.ISBN,e.bookname,e.writername,e.publisher,e.price);
                    SetElem_Sq(L,i,e);
                    printf("修改成功,图书信息为:");
                    print(L);     
                }
                break;
        case 5:    sort_ISBN(L);
                printf("按照ISBN排序后\n");
                print(L);
                break;
        case 6: print(L);
                break;
        case 7: printf("请输入导入文件名:");
                scanf("%s",filename);
                import(L,filename);
                break;
        case 8: printf("请输入导出文件名:");
                scanf("%s",filename);
                save(L,filename);
                break;    
        default: printf("输入错误,请重新选择\n");
        }
        printf("1. 插入   2. 删除   3. 查找   4. 修改元素   5. 按ISBN排序元素   6. 输出   7. 导入   8. 保存   9. 退出\n");
        printf("请选择:");
        scanf("%d",&ch);
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_43652327/article/details/104566111

延伸 · 阅读

精彩推荐
  • C/C++VC解析XML文件-CMarkup的使用详解

    VC解析XML文件-CMarkup的使用详解

    本篇文章是对VC解析XML文件-CMarkup的使用进行了详细的分析介绍,需要的朋友参考下...

    C语言教程网4802020-12-02
  • C/C++详解为什么指针被誉为C语言灵魂

    详解为什么指针被誉为C语言灵魂

    说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解。不了解的对指针的理解就停留在“指针就是变量的...

    RioTian8892021-11-16
  • C/C++MFC自绘Button按钮分析和实现

    MFC自绘Button按钮分析和实现

    这篇文章主要为大家详细介绍了MFC自绘Button按钮分析和实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Jimmy12244682021-07-24
  • C/C++C语言实现扫雷游戏详细代码

    C语言实现扫雷游戏详细代码

    这篇文章主要为大家详细介绍了C语言实现扫雷游戏的具体步骤和详细代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参...

    CYQAQ5392021-10-08
  • C/C++C++类成员初始化的三种方式

    C++类成员初始化的三种方式

    如果静态成员不满足常量性,则不可以就地声明,而且即使常量的静态成员也只能是整型或者枚举型才能就地初始化。而非静态成员变量的初始化则必须在...

    我是一颗大西瓜9642022-01-17
  • C/C++C语言新建临时文件和临时文件名的方法

    C语言新建临时文件和临时文件名的方法

    这篇文章主要介绍了C语言新建临时文件和临时文件名的方法,分别是mkstemp()函数和mktemp()函数的使用,需要的朋友可以参考下...

    C语言教程网5982021-03-09
  • C/C++vc中使用SendMessage自定义消息函数

    vc中使用SendMessage自定义消息函数

    这篇文章主要介绍了vc中使用SendMessage自定义消息函数的相关资料,需要的朋友可以参考下...

    C语言教程网7572021-02-28
  • C/C++C++继承之同名覆盖,函数重写与多态详解

    C++继承之同名覆盖,函数重写与多态详解

    这篇文章主要介绍了C++继承之同名覆盖,函数重写与多态,是C++面向对象程序设计非常重要的概念,需要的朋友可以参考下,希望能够给你带来帮助...

    ryan-wei4712022-01-17