基于C的图书管理系统

小记

今天出去跟在这边的舍友一起吃了顿饭,下午回来搞了一下C
想着搞定之前在blink看到的一个学生的作业,如下:
就是一个C语言写的图书管理系统,数据保存在bookdata.txt中,实现CRUD,搞一下
在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

笔记

对于C从文件中读取一行的操作:

    char c[1000];
    FILE *fptr;
 
    if ((fptr = fopen("runoob.txt", "r")) == NULL)
    {
        printf("Error! opening file");
        // 文件指针返回 NULL 则退出
        exit(1);         
    }
 
    // 读取文本,直到碰到新的一行开始
    fscanf(fptr,"%[^\n]", c);
 
    printf("读取内容:\n%s", c);
    fclose(fptr);
    
    return 0;

对于C从文件中读取每一行的操作:

     char filename[] = "bookdata.txt"; //文件名
     FILE *fp;
     char StrLine[1024];             //每行最大读取的字符数
     if((fp = fopen(filename,"r")) == NULL) //判断文件是否存在及可读
     {
         printf("error!");
     }

     while (!feof(fp))			//在这里读取的时候回多出一行,我使用  fgetc(fp) != EOF代替了
     {
         fgets(StrLine,1024,fp);  //读取一行
         printf("%s\n", StrLine); //输出
     }
     fclose(fp);                     //关闭文件

问题:
读取的数据会多出一行,淘到一篇博客讲这件事情:
https://blog.csdn.net/guanjianhe/article/details/100937545
我是用

fgetc(fp) != EOF

替代了

!feof(fp)

然后就跑通了

对于C实现split():

typedef struct {
    char **str;     //the PChar of string array
    size_t num;     //the number of string
}IString;

int Split(char *src, char *delim, IString* istr)//split buf
{
    int i;
    char *str = NULL, *p = NULL;
 
    (*istr).num = 1;
	str = (char*)calloc(strlen(src)+1,sizeof(char));
	if (str == NULL) return 0;
    (*istr).str = (char**)calloc(1,sizeof(char *));
    if ((*istr).str == NULL) return 0;
    strcpy(str,src);
 
	p = strtok(str, delim);
	(*istr).str[0] = (char*)calloc(strlen(p)+1,sizeof(char));
	if ((*istr).str[0] == NULL) return 0;
 	strcpy((*istr).str[0],p);
	for(i=1; p = strtok(NULL, delim); i++)
    {
        (*istr).num++;
        (*istr).str = (char**)realloc((*istr).str,(i+1)*sizeof(char *));
        if ((*istr).str == NULL) return 0;
        (*istr).str[i] = (char*)calloc(strlen(p)+1,sizeof(char));
        if ((*istr).str[0] == NULL) return 0;
        strcpy((*istr).str[i],p);
    }
    free(str);
    str = p = NULL;
 
    return 1;
}

main(){
	IString istr;
        int i;
        if (  Split(s,"**",&istr) )
        {
            for ( i=0;i<istr.num;i++)
                //这里istr.str[i]就是拿到了截取的字符串
                printf("%s\n",istr.str[i]);
            //when you don't ues it,you must to free memory.
            for (i=0;i<istr.num;i++)
                free(istr.str[i]);
            free(istr.str);
        }
}

跑一下:

今天做完了增、查询所有、单例按编号查询
还没想好如何做修改和删除

登录部分:
在这里插入图片描述添加部分:
在这里插入图片描述
bookdata.txt中的数据:
在这里插入图片描述
查询部分:
在这里插入图片描述

反思

我这样写的话,查询和添加倒是挺好写的,删除和修改,是需要修改bookdata.txt中的部分内容,重写bookdata.txt?暂时想到的是这样,之后了解一下别人是怎么用txt实现CRUD的

这里找到一篇相关的:
https://www.write-bug.com/article/94.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.强化和巩固理论基础,掌握数据库编程的基本技巧; 2.要求用C/C++语言或其它语言及相应开发环境,实现一个小型完整程序的设计与开发; 3.巩固深化所学课程的知识,培养学生运用知识,分析和解决实际问题的能力。 系统概述: 1.图书管理: 每种图书都有书名、书号(ISBN)、一名或多名作者(译者)、出版社、定价和内容简介。图书信息登入、查询和维护。 2.借书证管理,包括申请、注销借书证,查询借书证持有人等。借书证记录有借阅者的姓名、所在单位、职业等。 3.凭借书证借书,每次最多能借8本书。借书期限最长为30天。 4.借还图书、资料的登记、超期处理,超期拒借等。 5.图书、资料查询,借、还图书和资料情况查询。 6.图书、资料借阅情况的统计分析,拒此作为图书馆图书、资料订够的依据之一。 设计要求: 1.进行需求分析,编写数据字典。 2.设计E-R图。 3.实现新进图书的数据录入。 4.实现对所有购进图书的分类查询和分类统计。 5.能够按书名、作者等分类查询现有图书的数量。 6.记录借阅者的个人资料和所借图书的书名、书号数据等。 2程序的主要功能 2.1添加功能 添加一本图书的基本信息,包括书名、书号(ISBN)、一名或多名作者(译者)、出版社、定价和内容简介。 添加图书证的基本信息,包括姓名、所在单位、职业。 添加图书借阅的基本信息,包括书号,借书证号,借书日期,应还书日期。 2.2删除功能 删除一本图书的基本信息,删除借书证的基本信息,删除图书借阅基本信息。 2.3显示功能 显示所有图书信息,包括图书代码,图书名称,作者,出版社和简介。 显示所有借阅信息,包括读者号,图书号,借书日期,应还书日期。 2.4查找功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值