收藏 分销(赏)

数据结构图书管理系统.doc

上传人:w****g 文档编号:3599135 上传时间:2024-07-10 格式:DOC 页数:16 大小:58.50KB 下载积分:7 金币
下载 相关 举报
数据结构图书管理系统.doc_第1页
第1页 / 共16页
数据结构图书管理系统.doc_第2页
第2页 / 共16页


点击查看更多>>
资源描述
数 据 结 构 课 程 设 计 说 明 书       学生姓名: 学 号: 学 院: 专 业: 题 目: 成绩 指导教师        年 月 日 1 设计目的(小标题黑体五号字) 设计一个计算机管理系统完成图书管理基本业务(数据可以存储在一个数据文件中,数据结构、具体数据自定)。 2. 设计内容和要求 具体功能有:1)每种书的登记内容包括书号、书名、著作者、出版单位、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;4)借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;5)归还:注销对借阅者的登记,改变该书的现存量。 3.本设计所采用的数据结构 所用数据结构:线性表、查找、排序 链表:用一组地址任意的存储单元存放线性表中的数据元素。 以元素(数据元素的映象) + 指针(指示后继元素存储位置) = 结点(表示数据元素 或 数据元素的映象) 以“结点的序列”表示线性表称作线性链表(单链表) 单链表是一种链式存取的结构,为找第 i 个数据元素必须先找到第 i-1 个数据元素。 因此,查找第 i 个数据元素的基本操作为:移动指针,比较 j 和 i。 (1)malloc(size) 在内存的动态存储区申请一个长度为size字节的连续空间。 (2)calloc(n,size) 在内存的动态存储区申请n个长度为size字节的连续空间,函数返回值为分配空间的首地址。若此函数未被成功执行,函数返回值为0。 (3)free(p) 释放由指针p所指向的存储单元,而存储单元的大小是最近一次调用malloc()或calloc()函数时所申请的存储空间。 运用了单链表的插入、删除、排序、修改等一些操作! 4. 功能模块详细设计 4.1 详细设计思想 (一) 基本思想: (二) 图书信息录入、图书信息的查询、图书信息的排序、图书信息的修改、图书信息的删除、图书的借阅、图书的归还、退出图书管理系统。 (三) 程序中的主要函数有: void main() //主函数 int CreateListR(LinkList *L) //尾插法建表 void LocateElem(LinkList *L) //查询 int Sort(LinkList *L) //递增有序排序(直接插入排序法) void Display(LinkList *L) //输出排序结果 ModifyList(LinkList *L) //修改 int ListDelete(LinkList *L) //删除 void Borrow(LinkList *L) //借阅 void Return(LinkList *L) //归还 图书信息的录入添加 图书信息的查询模块 图书信息的排序模块 图书信息的修改模块 图书信息的删除模块 图 书的 借阅模块 图书的归还模块 退出图书管理系统 图 书 管 理 系 统 主 程 序 模 块 4.2 核心代码 #include <stdio.h> #include <string.h> #include<stdlib.h> #include<malloc.h> typedef struct { int num; char name[20]; char author[20]; char press[20]; int count; char price[10]; } ElemType; typedef struct LNode //定义单链表结点类型 { ElemType data; struct LNode *next; } LinkList; void InitList(LinkList *L) //初始化线性表 { L = (LinkList *) malloc(sizeof(LinkList)); //创建头结点 L->next = NULL; } int CreateListR(LinkList *L) //尾插法建表 { int i, n; LinkList *s, *q, *p; p = L; while (p->next != NULL ) p = p->next; printf("请输入需要录入的图书信息的个数:n="); scanf("%d", &n); for (i = 1; i < n + 1; i++) { s = (LinkList *) malloc(sizeof(LinkList)); printf("书号 书名 作者 出版社名称 存馆数量 定价\n"); scanf("%d%s%s%s%d%s", &s->data.num, s->data.name, s->data.author, s->data.press, &s->data.count, s->data.price); q = L->next; if (q == NULL ) { p->next = s; p = s; p->next = NULL; printf("录入成功!\n"); continue; } while (q != NULL ) { if (strcmp(s->data.name, q->data.name) == 0) { printf("此图书已存在!"); printf("请重新输入:\n"); scanf("%d%s%s%s%d%s", &p->data.num, p->data.name, p->data.author, p->data.press, &p->data.count, p->data.price); } q = q->next; } p->next = s; p = s; p->next = NULL; printf("录入成功!\n"); } return 0; } void LocateElem(LinkList *L) //查询 { LinkList *p = L->next; //p指向第一个数据结点 int c; int x = 0; char name1[10], author1[10], press1[10]; printf(" 1 按书名查询:\n"); printf(" 2 按作者名查询:\n"); printf(" 3 按出版社名称:\n"); printf(" 4 返回\n"); printf(" 请选择1--4进行操作:\n"); scanf("%d", &c); if (c > 4 || c < 1) { printf("您的输入有误!\n"); scanf("%d", &c); } switch (c) { case 1: printf("请输入图书书名: \n"); scanf("%s", name1); while (p != NULL ) { if (strcmp(name1, p->data.name) != 0) //查找图书书名 p = p->next; else { printf("书号 书名 作者 出版社名称 存馆数量 定价\n"); printf("%d\t%s\t%s\t%s\t%d\t%s", p->data.num, p->data.name, p->data.author, p->data.press, p->data.count, p->data.price); printf("\n"); p = p->next; x++; } } if (p == NULL && x == 0) printf("对不起,不存在此图书!\n"); break; case 2: printf("请输入图书作者:\n"); scanf("%s", author1); while (p != NULL ) { if (strcmp(author1, p->data.author) != 0) //查找图书作者 p = p->next; else { printf("书号 书名 作者 出版社名称 存馆数量 定价\n"); printf("%d\t%s\t%s\t%s\t%d\t%s", p->data.num, p->data.name, p->data.author, p->data.press, p->data.count, p->data.price); printf("\n"); p = p->next; x++; } } if (p == NULL && x == 0) printf("对不起,不存在此图书!\n"); break; case 3: printf("请输入图书的出版社名称: \n"); scanf("%s", press1); while (p != NULL ) { if (strcmp(press1, p->data.press) != 0) //查找图书出版社名称 p = p->next; else { printf("书号 书名 作者 出版社名称 存馆数量 定价\n"); printf("%d %s %s %s %d %s", p->data.num, p->data.name, p->data.author, p->data.press, p->data.count, p->data.price); printf("\n"); p = p->next; x++; } } if (p == NULL && x == 0) printf("对不起!不存在此图书\n"); break; case 4: break; } } int Sort(LinkList *L) //递增有序排序(直接插入排序法) { LinkList *p = L->next, *q, *r; //p指向第一个数据结点 if (p != NULL ) //若原单链表中有一个或以上的数据结点 { r = p->next; //r保存*p结点直接后继结点的指针 p->next = NULL; //构造只含一个数据结点的有序表 p = r; while (p != NULL ) { r = p->next; //r保存*p结点的直接后继结点的指针 q = L; while (q->next != NULL && q->next->data.num < p->data.num) q = q->next; //在有序表中找插入*p的直接前驱结点*q的位置 p->next = q->next; //将*p插入到*q之后 q->next = p; p = r; //扫描原单链表余下的结点 } } return 0; } void Display(LinkList *L) //输出排序结果 { LinkList *p = L->next; while (p != NULL ) { printf("书号 书名 作者 出版社名称 存馆数量 定价\n"); printf("%d \t %s \t %s\t %s\t%d\t %s", p->data.num, p->data.name, p->data.author, p->data.press, p->data.count, p->data.price); printf("\n"); p = p->next; } } int ModifyList(LinkList *L) //修改 { LinkList *p = L; char name1[10]; printf("请输入要修改的图书的书名:\n"); scanf("%s", name1); while (p != NULL ) { if (strcmp(name1, p->data.name) == 0) //查找所要修改的书名 { printf("请输入修改后的信息!\n"); printf("书号 书名 作者 出版社名称 存馆数量 定价\n"); scanf("%d%s%s%s%d%s", &p->data.num, p->data.name, p->data.author, p->data.press, &p->data.count, p->data.price); printf("修改成功!\n"); return 0; } p = p->next; } printf("不存在此图书\n"); return 0; } int ListDelete(LinkList *L) //删除 { LinkList *p = L->next, *q = L; char name1[10]; if (p != NULL ) { printf("请输入要删除的书名:"); scanf("%s", name1); } while (p->next != NULL && strcmp(p->data.name, name1) != 0) { p = p->next; q = q->next; } if (p->next != NULL ) //如果p此时不是最后一个节点,说明此时已经找到书 { q->next = p->next; printf("删除成功!\n"); return 0; } if (p->next == NULL && strcmp(name1, p->data.name) != 0) //如果p此时为最后一个结点并且没有找到与之相符的书名 { printf("你输入的书名不存在,请核实后重新输入!\n"); } else { q->next = NULL; printf("删除成功!\n"); } return 0; } void Borrow(LinkList *L) //借阅 { LinkList *p = L->next; char name1[10]; printf("请输入要借阅的图书的书名:\n"); scanf("%s", name1); while (p->next != NULL && strcmp(name1, p->data.name) != 0) p = p->next; if (p->next == NULL && strcmp(name1, p->data.name) != 0) printf("此图书不存在!\n"); else if (p->data.count < 1) printf("此书已借完!\n"); else if (strcmp(name1, p->data.name) == 0) { printf("借书成功!\n"); p->data.count--; } } void Return(LinkList *L) //归还 { LinkList *p = L->next; char name1[10]; printf("输入归还书的书名: \n"); scanf("%s", name1); while (p->next != NULL && strcmp(name1, p->data.name) != 0) p = p->next; if (p->next == NULL && strcmp(name1, p->data.name) != 0) printf("错误!此图书不存在!\n"); else if (strcmp(name1, p->data.name) == 0) { printf("该书归还成功!\n"); p->data.count++; } } void menu() { //菜单函数 printf("---------------------------------------------------------- \n"); printf(" 欢迎光临图书管理系统! \n"); printf("----------------------------------------------------------- \n"); printf("1.图书信息录入添加功能:\n"); printf("2.图书信息查询功能:\n"); printf("3.图书信息排序功能:\n"); printf("4.图书的修改功能:\n"); printf("5.图书的删除功能:\n"); printf("6.图书借阅功能:\n"); printf("7.图书归还功能:\n"); printf("0.退出系统:\n"); printf("请选择你需要的操作:\n"); } int main() //主函数 { int s; LinkList *L; L = (LinkList *) malloc(sizeof(LinkList)); InitList(L); menu(); printf("请输入编号:\n"); scanf("%d", &s); while (s != 0) { switch (s) { case 1: CreateListR(L); break; case 2: LocateElem(L); break; case 3: Sort(L); Display(L); break; case 4: ModifyList(L); break; case 5: ListDelete(L); break; case 6: Borrow(L); break; case 7: Return(L); break; case 0: printf("谢谢使用\n"); break; } scanf("%d", &s); } return 0; } (此页附在说明书后,请在验收前填好) 班级:11060141 题目:图书馆管理系统 学号 姓名 设计模块 成绩 1106014106 王烨 资料收集 修改和删除 1106014122 张艳明 需求分析 任务书 查询和排序 1106014130 张攀 程序调试 主函数跟借还 THANKS !!! 致力为企业和个人提供合同协议,策划案计划书,学习课件等等 打造全网一站式需求 欢迎您的下载,资料仅供参考
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服