《C语言程序》课程设计-图书管理系统(共15页).doc
精选优质文档-倾情为你奉上C语言程序课程设计报告书设计题目: 图书管理系统 专业:软件工程 班级: 3班 学生姓名: 张欣然 学号: 指导教师: 陈莉娜 设计题目图书管理系统主要包括管理图书的库存信息、每一本书的借阅信息以及每一个人的借书信息。每一种图书的库存信息包括编号、书名、作者、出版社、出版日期、金额、类别、总入库数量、当前库存量、已借出本数等。每一本被借阅的书都包括如下信息:编号、书名、金额、借书证号、借书日期、到期日期、罚款金额等。每一个人的借书信息包括借书证号、姓名、班级、学号等。系统功能包括以下方面:A、借阅资料管理要求把书籍、期刊、报刊分类管理,这样的话操作会更加灵活和方便,可以随时对其相关资料进行添加、删除、修改、查询等操作。B、借阅管理 (1) 借出操作 (2) 还书操作 (3) 续借处理提示:以上处理需要互相配合以及赔、罚款金额的编辑等操作完成图书借还业务的各种登记。例如:读者还书时不仅更新图书的库存信息,还应该自动计算该书应罚款金额。并显示该读者所有至当日内到期未还书信息。C、读者管理 读者等级:对借阅读者进行分类处理,例如可分为教师和学生两类。并定义每类读者的可借书数量和相关的借阅时间等信息。 读者管理:对读者信息可以录入,并且可对读者进行挂失或注销、查询等服务的作业。D、统计分析 随时可以进行统计分析,以便及时了解当前的借阅情况和相关的资料状态,统计分析包括借阅排行榜、资料状态统计和借阅统计、显示所有至当日内到期未还书信息等功能分析。E 系统参数设置:可以设置相关的罚款金额,最多借阅天数等系统服务器参数。根据题目分析总体作品分为6个模块1. 图书数据2. 借书人信息3. 借书模块4. 还书模块5. 图书管理6. 查询模块第一模块:书号,书名,作者,出版时间,价格,册数,页数。第二模块:姓名,单位,所借书目,借阅时间第三模块:输入书名,编号,借书证第四模块:登记借书号,还书操作,罚款处理第五模块:对书库中的书进行管理,新书入库,旧书删除,书库查询第六模块:书的查询。 数据测试 源代码汉字菜单的编写可参照以下代码:#include "stdio.h". main() char c; int i; do clrscr(); for(i=0;i<80;i+) printf("*"); printf("t 1: add booksn"); printf("t 2: list booksn"); printf("t 3: sreach booksn"); printf("t 4: borrow booksn"); printf("t 5: return booksn"); printf(“t6: exitn”) printf("t请选择输入选项123456:n"); do c=getchar(); while(c!='1'&&c!='2'&&c!='3'&&c!='4'&&c!='5'&&!=6); getchar(); switch(c) case '1': input(); break; case '2': del(); break; case '3': find(); break; case '4': arrange(); break; case 5: right(); break;case '6': exit(0); printf(" 按任意键返回主菜单:n"); getchar(); clrscr(); while(1); #include <stdio.h>#include <stdlib.h>#include <string.h>#define BORROWED 1#define NOBORROW 0/* 定义图书结构 */struct Book int _id; / 编号,唯一 char _name32; / 图书的名称,不唯一 int _type; / 图书的类型,不唯一 int _status; / 图书的状态,借出/没有借出 int _count; / 图书借出的次数 struct Book* _next; / 下一本书 struct Book* _prev; / 上一本书;/* 定义图书类型 */typedef struct Book Book;/* 操作的目录提示 */char book_menu32 = "add books", "list books", "search books", "borrow books", "return books", "exit", "",;/* 操作的目录提示1 */char book_menu_sub32 = "search books by name", "search books by type", "",;/* 添加图书类型,用户信息显示 */char book_types32 = "type0", "type1", "type2", "",;/* 添加图书状态,用户信息显示 */char book_status32 = "noborrow", "borrowed", "",;/* 增加图书,id自动排号 */int add_books(Book* head, Book* book_for_add) Book* p = head; if (!p) return -1; while (p->_next) p = p->_next; ; p->_next = book_for_add; book_for_add->_id = p->_id+1; book_for_add->_prev = p; book_for_add->_next = NULL; book_for_add->_count = 0; book_for_add->_status = 0; return 0;/* 建立图书管理链表 */Book* create_list(Book* book_head) if (book_head) book_head->_prev = book_head; book_head->_next = NULL; book_head->_id = 1; book_head->_count = 0; book_head->_status = 0; return book_head;/* 释放链表 */void free_list(Book* book_head) Book *p, *p1; p = book_head; while(p) p1 = p->_next; free(p); p = p1; /* 打印图书信息 */void print_book(Book* book) printf("id:%d, name:%s, type:%s, status:%s, times:%d n", book->_id, book->_name, book_typesbook->_type, book_statusbook->_status, book->_count);/* 列出所有登记的图书 */void list_books(Book* book_head) Book* p = book_head; while (p) print_book(p); p = p->_next; /* 借书,返回该书的指针,否则就返回NULL,可能不存在图书,或者已经被借走了 */Book* borrow_books(Book* book_head, int id) Book* p = book_head; while (p) if (p->_id = id) break; p = p->_next; if (!p)/* 不存在 */ return NULL; if (p->_status != 0) /* 已经被借走 */ return NULL; p->_status = 1; /* 借书登记 */ p->_count+; /* 被借阅次数+1 */ return p;/* 查找书名称,返回查找到的数量,书名可能有重复的,一本书可能也有很多本,但是ID却是唯一的 */int search_books_by_name(Book* book_head, char* name) int count = 0; Book* p = book_head; while (p) if (strcmp(p->_name, name) = 0) print_book(p); +count; p = p->_next; return count;/* 查找书类型,返回查找到的数量,一个类型会有很多书 */int search_books_by_type(Book* book_head, int type) int count = 0; Book* p = book_head; while (p) if (p->_type = type) print_book(p); +count; p = p->_next; return count;/* 还书,正常归还就返回该书的指针,否则就返回NULL */Book* return_books(Book* book_head, int id) Book* p = book_head; while (p) if (p->_id = id && p->_status != 0) p->_status = 0; /* 还书登记 */ break; p = p->_next; return p;/* 打印操作选项 */void print_menu(char menus32) int no = 0; printf("nPLEASE SELECT ID LIKE 1 or 2 .n"); while (strlen(menusno) printf("%d t%sn", no+1, menusno); +no; printf("OPTION("); while (no) printf("/%d", no-); printf("):");/* 主函数 */int main(void) char key = 0; char ss128; int loop = 1; Book first_book, *pBooks, *pTmp; strcpy(first_book._name, "nihao"); first_book._type = 0; pBooks = create_list(&first_book); while (loop) print_menu(book_menu); gets(ss); key = ss0 - 48; if(key < 0 | key > 6) printf("Error input !n"); else printf("INPUT:%dn", key); switch (key) case 1: / add books pTmp = (Book*)malloc(sizeof(Book); if(pTmp) printf("Add_Book input name:"); gets(ss); strncpy(pTmp->_name, ss, 31); print_menu(book_types); gets(ss); key = ss0 - 48; if(key <= 0 | key > (sizeof(book_types)/32) ) key = 1; pTmp->_type = key - 1; add_books(pBooks, pTmp); break; case 2: / list books list_books(pBooks); break; case 3: / search books print_menu(book_menu_sub); gets(ss); key = ss0 - 48; printf("INPUT:%dn", key); switch (key) case 1: / search books by name printf("input book name:"); gets(ss); key = search_books_by_name(pBooks, ss); if(key = 0) printf("no found!n"); case 2: / search books by type print_menu(book_types); gets(ss); key = ss0 - 48; key = search_books_by_type(pBooks, key-1); if(key = 0) printf("no found!n"); default: break; break; case 4: / borrow books printf("Borrow books, input book id:"); gets(ss); key = atoi(ss); pTmp = borrow_books(pBooks, key); if (!pTmp) printf("borrow books failed: %dn", key); else printf("borrow books successful!n"); print_book(pTmp); break; case 5: / return books printf("Return books, input book id:"); gets(ss); key = atoi(ss); pTmp = return_books(pBooks, key); if (!pTmp) printf("return books failed: %dn", key); else printf("return books successful!n"); print_book(pTmp); break; case 6: / exit loop = 0; break; default: break; printf("-pause-"); gets(ss); free_list(pBooks); return 0; 专心-专注-专业