问题描述:
该图书管理系统应包含书名,作者名,图书编号,图书出版社,出版时间等信息。
实现功能:
1.注册功能(用户在使用时需要创建账号)
2.提示菜单栏
3.图书信息录入
4.图书信息浏览
5.查看所有图书信息
6.图书信息修改
7.图书信息删除
8.图书排序
9.退出系统
说明:图书最多存放100册
思想:
按照问题描述可以创建三个结构体,一个用来存放账号信息,一个用来存放图书信息,最后一个用
来使用存放前两个结构体里面的数据。然后按照实现功能的描述去创建对应的函数,需要思考的是函数
的形式参数应该传什么,为什么这样传。最后就是函数代码的实现
library.h
#ifndef __LIBRARY_H__
#define __LIBRARY_H__
#include<stdio.h>
#include<stdbool.h>
#define NUM 100 //图书馆书籍最大册数
#define STU_NUM 1000 //学校学生的个数
/*用来保存图书信息*/
typedef struct LIBRARY_INFORMATION{
int book_number;//图书编号
char book_name[32];//书名
char book_author[32];//作者名
char publishing_house[32];//出版社
/*出版时间*/
int year;
int month;
int day;
}lib_information;
/*保存账号信息的结构体,账号就是学号,密码自己设定*/
typedef struct LIB_STUDENT_INFORMATION{
int id; //学生学号
char password[32];//密码
//char name[32];//学生姓名,其他需要的话可以自己添加,稍微修改代码就可以了
}lib_stu_acount;
/*这一个结构体是整个程序的核心,它需要包含图书信息与账号信息*/
typedef struct LIBRARY_HOUSE{
/*主要是用来说明图书馆中书籍的最大册数,需要使用数组,
因为每一册数都是一个lib_information结构体类型,而且每次录入一册书籍都需要一片空间,
所以我们这里可以直接使用数组开辟空间,然后我们使用数组中的空间就可以了*/
lib_information lib_information[NUM];
//主要用来说明这个图书馆可以有多少个账号,与上面的图书信息同理
lib_stu_acount student_account[STU_NUM];
int book_count;//用来记录现在图书馆拥有书籍册数
int stu_count; //用来记录学生注册图书馆账号的人数
}library_house;
//判断输入的数据是数字还是字符
bool judjment(int *choose);
//菜单栏
void printf_menu();
//登录图书管理系统
int login_lib_house(library_house *lib);
//图书信息录入
void insert_lib_book_information(library_house *lib);
//图书信息查看(根据id)
void search_lib_book_information(library_house *lib);
//所有图书信息查阅
void all_search_lib_book_information(library_house *lib);
//图书休息修改
void modify_lib_information(library_house *lib);
//图书信息删除
void delete_lib_information(library_house *lib);
//图书信息排序根据书籍编号
void sort_lib_information(library_house *lib);
//注册账号
int insert_lib_account(library_house *lib);
//登录与注册菜单栏
void printf_login_register_menu();
#endif
/*library.h文件里面的都是声明*/
main.c
#include "library.h"
int main(){
library_house lib_house;//创建一个图书馆
//初始化书籍册数与图书馆账号个数
lib_house.stu_count=0;
lib_house.book_count=0;
int choose; //输入编号,表示你要进行哪些操作
//登录与注册界面,只有登录成功才能对书籍进行操作
while(true){
printf_login_register_menu();
printf("请输入你的选择:");
//scanf("%d",&choose);//这里不使用scanf是因为如果你输入的是字符的时候会出现死循环,
// 使用fgets()函数与sscanf()配合则可以判断驶入的是数字还是字符
/*这个是判断你输入的数字是否合法,如果合法则进入switch语句进行登录注册操作
否者需要从新输入选择*/
if(!judjment(&choose)){
printf("\n输入不合法请重新输入: \n");
continue;
}
switch (choose)
{
/*登录操作,若果登录成功则进行图书操作*/
case 1:
LOOP:if(!login_lib_house(&lib_house)){
return 0;
}
break;
case 2:
/* if(insert_lib_account(&lib_house)){
printf("请登录图书管理系统\n");
goto LOOP;
}
break;*/
//注册账号,如果注册失败则重新注册,注册成功则使用账号登录
while(!insert_lib_account(&lib_house)){
insert_lib_account(&lib_house);
}
goto LOOP;
case 3://退出系统
return 0;
default://输入错误
printf("输入不合法,请从新输入。");
continue;
}
break;
}
while (true ){
/* code */
printf_menu();
printf("请输出你的选择:");
//scanf("%d",&choose);
//这一步操作也是判断用户输入的数据是数字还是字符,操作都一样
if(!judjment(&choose)){
printf("\n输入不合法请重新输入: \n");
continue;
}
switch (choose){
/* code */
case 1:
insert_lib_book_information(&lib_house);
continue;
case 2:
search_lib_book_information(&lib_house);
continue;
case 3:
all_search_lib_book_information(&lib_house);
continue;
case 4:
modify_lib_information(&lib_house);
continue;
case 5:
delete_lib_information(&lib_house);
continue;
case 6:
sort_lib_information(&lib_house);
continue;
case 7:
return 0;
default:
printf("输入信息错误,请从新输入。\n");
continue;
}
}
return 0;
}
library.c
#include "library.h"
void printf_login_register_menu(){
printf("\n-----------------------------------------------\n");
printf("| 1.登录图书管理系统 2.注册账号 3.退出登录注册页面 |");
printf("\n-----------------------------------------------\n");
}
void printf_menu(){
printf("\n-------------------------------------------------------------------------\n");
printf("\n| 1.录入图书信息 2.查询图书信息 3.查看所有图书信息 4.修改图书信息 |\n");
printf("\n| 5.删除图书信息 6.排序并输出 7.退出图书管理系统 |\n");
printf("\n-------------------------------------------------------------------------\n");
}
//登录图书管理系统
int login_lib_house(library_house *lib){
int stu_id;
char password[32];
int i=0;//当登录失败三次之后会退出系统
printf("请输入账号: ");
scanf("%d",&stu_id);
printf("请输入密码: ");
scanf("%s",password);
//如果输入密码正确则退出函数
for (int i = 0; i <lib->stu_count; i++){
if ((stu_id==lib->student_account[i].id)&&(*password)==*(lib->student_account[i].password)){
return 1;
}
}
while ((stu_id!=lib->student_account[lib->stu_count].id)||(*password)!=*(lib->student_account[lib->stu_count].password))
{
printf("请重新输入账号: ");
scanf("%d",&stu_id);
printf("请重新输入密码: ");
scanf("%s",password);
i++;
if(i==3){
return 0;
}
}
}
//图书信息录入
void insert_lib_book_information(library_house *lib){
printf("请输入图书编号:");
scanf("%d",&(lib->lib_information[lib->book_count].book_number));
printf("\n请输入书籍名称:");
scanf("%s",lib->lib_information[lib->book_count].book_name);
printf("\n请输入图书作者:");
scanf("%s",lib->lib_information[lib->book_count].book_author);
printf("\n请输入图书出版社:");
scanf("%s",lib->lib_information[lib->book_count].publishing_house);
printf("\n请输入图书出版时间:");
scanf("%d.%d.%d",&(lib->lib_information[lib->book_count].year),
&(lib->lib_information[lib->book_count].month),
&(lib->lib_information[lib->book_count].day));
printf("图书录入成功!\n");
lib->book_count++;
return;
}
//图书信息查看(根据id)
void search_lib_book_information(library_house *lib){
int book_id;
printf("请输入要查看书籍的id编号:");
scanf("%d",&book_id);
for(int i=0;i<lib->book_count;i++){
if (book_id==lib->lib_information[i].book_number){
printf("图书编号(id): %d\n",lib->lib_information[i].book_number);
printf(" 图书名称: %s\n",(lib->lib_information[i].book_name));
printf(" 图书作者: %s\n",(lib->lib_information[i].book_author));
printf("图书出版社: %s\n",(lib->lib_information[i].publishing_house));
printf("图书出版时间: %d年%d月%d日\n",lib->lib_information[i].year,
lib->lib_information[i].month,
lib->lib_information[i].day);
return;
}
}
printf("图书编号为%d的书籍不存在",book_id);
return;
}
//所有图书信息查阅
void all_search_lib_book_information(library_house *lib){
for (int i = 0; i < lib->book_count; i++){
printf("\n------------------------------------------------------------\n");
printf("图书编号(id): %d\n",lib->lib_information[i].book_number);
printf(" 图书名称: %s\n",(lib->lib_information[i].book_name));
printf(" 图书作者: %s\n",(lib->lib_information[i].book_author));
printf("图书出版社: %s\n",(lib->lib_information[i].publishing_house));
printf("图书出版时间: %d年%d月%d日\n",lib->lib_information[i].year,
lib->lib_information[i].month,
lib->lib_information[i].day);
printf("\n------------------------------------------------------------\n");
}
printf("所有图书信息已经查阅完成!!!");
return;
}
//图书信息修改(根据图书编号进行修改)
void modify_lib_information(library_house *lib){
int book_id;
printf("请输入要查看书籍的id编号:");
scanf("%d",&book_id);
for(int i=0;i<lib->book_count;i++){
if (book_id==lib->lib_information[i].book_number){
printf("请输入图书编号:");
scanf("%d",&(lib->lib_information[i].book_number));
printf("\n请输入书籍名称:");
scanf("%s",lib->lib_information[i].book_name);
printf("\n请输入图书作者:");
scanf("%s",lib->lib_information[i].book_author);
printf("\n请输入图书出版社:");
scanf("%s",lib->lib_information[i].publishing_house);
printf("\n请输入图书出版时间:");
scanf("%d.%d.%d",&(lib->lib_information[i].year),
&(lib->lib_information[i].month),
&(lib->lib_information[i].day));
printf("修改图书信息成功!!!");
return;
}
}
printf("图书编号为%d的书籍不存在",book_id);
}
//图书信息删除
void delete_lib_information(library_house *lib){
int book_id;
int num;//用于临时存储要删除书籍的位置
printf("请输入要删除书籍的id编号:");
scanf("%d",&book_id);
for(int i=0;i<lib->book_count;i++){
if (book_id==lib->lib_information[i].book_number){
num=i;
}
}
if (num<lib->book_count){
for(int i=num;i<lib->book_count-1;i++){
lib->lib_information[i]=lib->lib_information[i+1];
}
return;
}else{
printf("编号为%d的图书不存在",book_id);
return ;
}
}
//图书信息排序根据书籍编号
void sort_lib_information(library_house *lib){
for (int i = 0; i < lib->book_count; i++){
for (int j = 0; j < lib->book_count-1-i; j++)
{
if (lib->lib_information[j].book_number>lib->lib_information[j+1].book_number)
{
lib_information temp=lib->lib_information[j];
lib->lib_information[j]=lib->lib_information[j+1];
lib->lib_information[j+1]=temp;
}
}
}
printf("排序完成!!!");
all_search_lib_book_information(lib);
}
//注册账号
int insert_lib_account(library_house *lib){
char again_password[32];
printf("注册开始,请输入你的学号:");
scanf("%d",&(lib->student_account[lib->stu_count].id));
printf("请设置你的密码:");
scanf("%s",(lib->student_account[lib->stu_count].password));
printf("请在此输入你的密码:");
scanf("%s",again_password);
if(*again_password==*(lib->student_account[lib->stu_count].password)){
printf("注册成功!!!\n");
lib->stu_count++;
return 1;
}
printf("退出系统,请重新注册!\n");
return 0;
}
bool judjment(int *choose){
char str[32];
/*
fgets 函数从指定的输入流stdin标准输入中读取最多字符,并将其存储到字符串 str 中
*/
fgets(str ,sizeof(str),stdin);
/*sscanf(str,"%d",choose):函数从字符串 str 中按照指定的格式字符串 %d 解析数据,
解析成功返回1,并将解析的数据存储到hoose中。否者返回0*/
if (sscanf(str,"%d",choose)==1){
return true;
}
return false;
}
后续会更新图书管理系统完全版本