内容发布更新时间 : 2024/12/23 19:10:38星期一 下面是文章的全部内容请认真阅读。
{
定义一个结构体类型_book,使用typedef 语句自定义一个新类型book,其中成员有一个结构体变量bi和指向下一本图书的指针变量。(此结构是存储图书信息的链表。)
typedef struct _book {
3.函数声明
(1)主要处理函数声明
void init_book(); //图书模块初始化
void load_books(); //从图书文件中加载图书信息 void add_book(); //新增图书 void view_book(); //浏览所有的图书 void delete_book(); //删除图书
void save_books(); //调用将图书信息保存到文件函数,给出提示信息 void clear_books(); //从内存中清除图书链表信息 void books_charts(); //排行榜 void update_book(); //更新图书
(2)图书查询函数声明
void search_book_by_name(); //按书名查询图书 void search_book_by_author(); //按作者查询图书 void search_book_by_publisher(); //按出版社查询图书 void search_book_by_pubdate(); //按出版日期查询图书 void search_book_by_isbn(); //桉书ISBN查询图书 void search_book_by_sort(); //桉图书类型查询图书
book_info bi; struct _book* next;
char book_name[MAX_BOOK_NAME]; char author[MAX_AUTHOR]; char publisher[MAX_PUBLISHER]; char pub_date[MAX_DATE]; char ISBN[MAX_ISBN]; int pages; char borrow_size; char sort[MAX_SORT]; int borrow_time;
char borrow_user[MAX_BORROW_USER]; int book_load_time;
}book_info;
}book;
(3)辅助函数声明
void save_books_to_file(); //将图书信息保存到文件 book* get_last_book(); //得到图书链表的最后一个节点 book* get_previous_book(book* p); //取得图书链表的最后一个节点 void input_book(book_info* info); //输入一本图书信息 void show_book(book_info* info); //显示图书信息 void update_book_data(book_info* info); //更新图书信息 int findstr(char* , char*); //查找字符串 void borrow(book*); //普通用户借阅书籍 void _return(book*); //普通用户还书 void show_books_record(); //书的借阅记录标记
三.头文件user.h 1.常量定义
#define MAX_USERNAME 10 #define MAX_PASSWORD 10
定义一个枚举类型_USER_TYPE,使用typedef 语句自定义一个新枚举类型USER_TYPE,枚举类型可能取两种值,0是管理员,1是普通用户。 typedef enum _USER_TYPE {
2.结构体类型定义
定义一个结构体类型_user_info,使用typedef 语句自定义一个新类型user_info,新类型中共3个成员,分别是用户名,密码,用户权限,用来描述用户的基本信息。
typedef struct _user_info {
定义一个结构体类型_user,使用typedef 语句自定义一个新类型user,其中成员有一个结构体变量ui和指向下一个用户的指针变量。(此结构是存储用户信息的链表。)
typedef struct _user {
user_info ui; struct _user* next;
char username[MAX_USERNAME]; char password[MAX_PASSWORD]; USER_TYPE user_type; ADMIN = 0, USER
}USER_TYPE;
}user_info;
}user;
3.函数声明
(1)主要处理函数声明
void init_user(); //用户模块初始化
void load_users(); //从用户文件中加载用户信息 USER_TYPE login(); //用户登录,返回用户类型 void add_user(); //新增一个用户 void search_user(); //查找一个
void save_users(); //调用将用户信息保护到文件函数,给出提示信息 void clear_users(); //从内存中清除用户链表信息 void view_users(); //查看所有用户
(2)辅助函数声明
void save_users_to_file(); //将用户信息保存到文件 user* get_last_user(); //得到用户链表的最后一个节点 user* get_previous_user(user* p); //得到用户节点p的前一个节点
user* find_user(char* name); //从用户链表中按用户名查找一个用户信息 void show_user(user_info* info); //显示一个用户信息 void input_user(user_info* info); //输入一个用户信息 void delete_user(user* p); //从链表中删除一个用户信息 void update_user(user* p); //更新一个用户信息
四.模块化设计management.c
2.函数指针数组admin_func存储的是管理员权限操作主菜单所对应的函数。
void (* admin_func[])() = {
add_book, view_book,
show_search_book_menu, delete_book, update_book, save_books, books_charts, add_user, search_user, save_users, view_users,
};
admin_exit
其他函数基本没多大改变,跟书中一样。
五.模块化设计book.c 1.预处理
增加了两个语句:
int charts[MAX_BOOK_COUNT] = {0}; //声明全局变量,排行榜
extern char borrow_user[20]; //调用其他源文件已声明过的变量
2.主要处理函数
(1).查找图书的几个函数中: void search_book_by_name(); void search_book_by_author(); void search_book_by_publisher(); void search_book_by_pubdate(); void search_book_by_isbn(); void search_book_by_sort();
均加了借书还书代码。
while (p != NULL)
{ }
if (count == 0) {
printf(\没有找到图书%s。继续查找吗?(y or n):\if (findstr(p->bi.book_name, s) != -1) { }
p = p->next;
show_book(&(p->bi));//显示查到的图书信息 if(strcmp(borrow_user,\{ } count++;
if((p->bi.borrow_size) == 'N') else
_return(p);//在user.c中定义 save_books();
borrow(p);//在user.c中定义