# 图书管理系统 **Repository Path**: c-programming-experiment/library-management-system ## Basic Information - **Project Name**: 图书管理系统 - **Description**: c程序设计实验大作业 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-01-10 - **Last Updated**: 2024-01-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 图书管理系统 ### 整体介绍 我们在本次大作业中完成的项目是图书管理系统。基于C语言,并学习了一些c++来完成了系统的搭建,以实现图书的录入,搜索,删除以及用户信息的录入和删除功能。可以应用于图书馆或书店的图书信息管理。 ### 项目架构与功能介绍 该项目综合运用了C语言数据类型、格式化输入/输出、运算符、表达式、语句、循环、字符输入和输出、函数、数组和指针、字符和字符串函数、内存管理、文件输入输出、结构等知识点,**重点基于结构体数组,字符串,文件的输入和输出等语法知识,同时还利用#include 实现了图形化界面的登录功能**。整个项目包括以下部分: 1. 添加新用户: 管理员可以通过add_users添加用户,可以一次添加多个用户,并将用户信息(包括用户名和密码)存入users.dat文件中,方便用户后续的登录。 2. 登录界面: 我们通过光标的移动建立了一个朴素的用户登录窗口,用户可以输入用户名和密码来登录,从而进入菜单,若用户名不存在或密码错误则无法进入菜单。 3. 功能界面: 我们努力为用户实现最多样的功能和最简洁的操作,功能齐全丰富,包括添加图书,删除图书,查询图书,查询作者,借阅图书和归还图书,并严格遵循模块化编程思想,将各个功能使用函数打包,代码简洁易读,方便后续更新迭代。 ### 实现思路 1. 添加新用户:将用户信息放在结构体里面保存,通过函数`void write_users_to_file(const struct User users[], int count)`,来将新用户添加到文件`users.dat`中,又可以通过结构体数组实现一次添加多个用户。 ```c void write_users_to_file(const struct User users[], int count) { FILE *fp = fopen("users.dat", "a"); if (fp == NULL) { printf("无法打开文件!\n"); return; } for (int i = 0; i < count; i++) { fprintf(fp, "%s", users[i].account); fprintf(fp, "%s", users[i].password); } fclose(fp); } ``` 2. 登录界面:借助头文件`#include `,通过函数`void gotoxy(int x, int y)`实现光标位置的锁定,通过函数`void paintWindow()`来绘制用户登录窗口,同时,将输入的用户名和密码储存到字符串中,并将用户信息通过`int read_users_from_file(struct User users[])`函数从存储用户信息的文档中提取出来,进行逐一对比来判断用户名和密码的正确性。 ```c int read_users_from_file(struct User users[]) { FILE *fp = fopen("users.dat", "rb"); if (fp == NULL) { printf("无法打开文件!\n"); return 0; } int i = 0; while (fgets(users[i].account, MAX_ACCOUNT_LEN, fp) != NULL && fgets(users[i].password, MAX_PASSWORD_LEN, fp) != NULL) { users[i].account[strcspn(users[i].account, "\r")] = '\0'; // 去除换行符 users[i].password[strcspn(users[i].password, "\r")] = '\0'; i++; } return i; } ``` 3. 功能界面:主体采用switch语句来进行功能选择,同时设置多个函数来实现各个功能,包括`void addbook(),void delbook(),void searchname(),void searchwriter(),void borrowbook(),void retrnbook()`。 ### 收获感悟 1. 探索了许多新的知识点,学会了很多曾经不会的知识,如光标,getch()函数,markdown语法等,对曾经已有的知识有了更深刻的认知,如结构体数组,函数等。 2. 对编程技术有了更深的掌握:通过团队交流和自主解决问题,我们逐渐开始了解程序开发人员的工作方式。对计算机项目有了新的认知,认识到了做项目与做算法题的诸多差异。学会使用git等平台与他人合作完成项目 3. 学会了如何平衡不同的需求和利益,比如读者的需求、图书管理员的工作效率以及系统的安全性和稳定性。我也意识到了信息技术在图书管理中的重要作用,以及如何利用现代技术来提高服务质量和效率。 4. 在创建图书管理系统的过程中,学会了团队合作和沟通的重要性。因为这个项目涉及到多个部门和利益相关者,我们必须与他们紧密合作,理解他们的需求并寻求共识。通过这个过程,我不仅加强了自己的领导能力,也培养了团队精神和解决问题的能力。 5. 切实体会到效率的提升:通过图书管理系统,可以实现图书的快速整理,查询。 ### 参与贡献 * 赵张阳负责登录系统模块的功能实现,登录界面的处理和书目的提供 * 韩正负责主函数框架的搭建和删除,插入,查询等模块功能实现 * 李稼源负责书目数据的提供和部分实验报告